From a6dc6102dafc36d82c005be84dccb9c46020af37 Mon Sep 17 00:00:00 2001 From: Chris Pickel Date: Wed, 9 Mar 2022 17:24:40 +0900 Subject: [PATCH 1/6] =?UTF-8?q?Merge=20deps.py=E2=80=99s=20KEYS=20into=20S?= =?UTF-8?q?OURCES?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/lib | 2 +- scripts/deps.py | 34 ++++++++++++++++------------------ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/build/lib b/build/lib index 1a4b6cde..9c1db347 160000 --- a/build/lib +++ b/build/lib @@ -1 +1 @@ -Subproject commit 1a4b6cdee297357d403ac2dfda54b8b4b8dd8945 +Subproject commit 9c1db3472070eadfca607b7b766db437761b94a6 diff --git a/scripts/deps.py b/scripts/deps.py index a74e3af8..5ebf6673 100755 --- a/scripts/deps.py +++ b/scripts/deps.py @@ -17,7 +17,6 @@ INSTALL = {} UPDATE = {} SOURCES = {} -KEYS = {} DEBIAN = "debian" INSTALL[DEBIAN] = "apt-get install".split() @@ -48,11 +47,9 @@ ("zlib", "zlib1g-dev"), ]) SOURCES[DEBIAN] = [ - ("arescentral", "http://apt.arescentral.org", "contrib"), -] -KEYS[DEBIAN] = [ - ("apt-key adv --keyserver keyserver.ubuntu.com --recv" - " 5A4F5210FF46CEE4B799098BAC879AADD5B51AE9").split(), + ("arescentral", "http://apt.arescentral.org", "contrib", + "apt-key adv --keyserver keyserver.ubuntu.com --recv" + " 5A4F5210FF46CEE4B799098BAC879AADD5B51AE9".split()), ] MAC = "mac" @@ -121,17 +118,17 @@ def check(*, distro, codename, prefix=""): return config commands = [] - for name, url, component in SOURCES.get(distro, []): + for name, url, component, keys in SOURCES.get(distro, []): path = "/etc/apt/sources.list.d/%s.list" % name if os.path.exists(path): continue - commands.append("%s | %s" % ( - _command("", ["echo", "deb", url, codename, component]), - _command(prefix, ["tee", path]), - )) - if commands: - for keys in KEYS.get(distro, []): - commands.append(_command(prefix, keys)) + commands.extend([ + _command(prefix, keys), + "%s | %s" % ( + _command("", ["echo", "deb", url, codename, component]), + _command(prefix, ["tee", path]), + ), + ]) if distro in UPDATE: commands.append(_command(prefix, UPDATE[distro])) @@ -157,16 +154,17 @@ def _command(prefix, args): def install(*, distro, codename, dry_run=False, flags=[]): - for name, url, component in SOURCES.get(distro, []): + update = False + for name, url, component, keys in SOURCES.get(distro, []): path = "/etc/apt/sources.list.d/%s.list" % name if os.path.exists(path): continue + run(dry_run, keys) line = "deb %s %s %s" % (url, codename, component) write(dry_run, line, path) - for keys in KEYS.get(distro, []): - run(dry_run, keys) + update = True - if SOURCES.get(distro, []): + if update: run(dry_run, UPDATE[distro]) run(dry_run, INSTALL[distro] + list(PACKAGE[distro].values()) + flags) From 77934a2acd6d5c1d6a24566c5583c5b355b1c7e7 Mon Sep 17 00:00:00 2001 From: Chris Pickel Date: Wed, 9 Mar 2022 17:47:54 +0900 Subject: [PATCH 2/6] Restructure scripts/deps.py to move out main logic --- configure | 10 +-- scripts/deps.py | 169 +++++++++++++++++++++++++----------------------- 2 files changed, 94 insertions(+), 85 deletions(-) diff --git a/configure b/configure index 5975b47f..2baa76d5 100755 --- a/configure +++ b/configure @@ -166,7 +166,7 @@ def check_mac(args): print("Then, try ./configure again") sys.exit(1) - config = deps.check(distro="mac", codename="mac") + config = deps.check(distro=deps.DISTROS["mac"], codename="mac") if config is None: sys.exit(1) return config @@ -175,22 +175,24 @@ def check_mac(args): def check_linux_native(args): with cfg.step("checking Linux distro") as msg: pretty, distro, codename = cfg.dist_proto() - if distro in deps.INSTALL: + if distro in deps.DISTROS: msg(pretty, color="green") else: msg(pretty + " (untested)", color="yellow") distro = "debian" - config = deps.check(distro=distro, codename=codename, prefix="sudo") + config = deps.check(distro=deps.DISTROS[distro], codename=codename, prefix="sudo") if config is None: sys.exit(1) return config + def check_win_native(args): - config = deps.check(distro="win", codename="win") + config = deps.check(distro=deps.DISTROS["win"], codename="win") config["gn"] = "gn" config["ninja"] = "ninja" return config + def check_win_on_linux(args): with cfg.step("checking Linux distro") as msg: pretty, distro, codename = cfg.dist_proto() diff --git a/scripts/deps.py b/scripts/deps.py index 5ebf6673..b220107c 100755 --- a/scripts/deps.py +++ b/scripts/deps.py @@ -13,78 +13,98 @@ except ImportError: pass -PACKAGE = {} -INSTALL = {} -UPDATE = {} -SOURCES = {} - -DEBIAN = "debian" -INSTALL[DEBIAN] = "apt-get install".split() -UPDATE[DEBIAN] = "apt-get update".split() -PACKAGE[DEBIAN] = collections.OrderedDict([ - # Binaries - ("clang", "clang"), - ("clang++", "clang"), - ("gn", "gn"), - ("ninja", "ninja-build"), - ("pkg-config", "pkg-config"), - - # Libraries - ("gl", "libgl1-mesa-dev"), - ("glfw3", "libglfw3-dev"), - ("glu", "libglu1-mesa-dev"), - ("libmodplug", "libmodplug-dev"), - ("libpng", "libpng-dev"), - ("libzip", "libzip-dev"), - ("neon", "libneon27-dev"), - ("openal", "libopenal-dev"), - ("sndfile", "libsndfile1-dev"), - ("x11", "libx11-dev"), - ("xcursor", "libxcursor-dev"), - ("xinerama", "libxinerama-dev"), - ("xrandr", "libxrandr-dev"), - ("xxf86vm", "libxxf86vm-dev"), - ("zlib", "zlib1g-dev"), -]) -SOURCES[DEBIAN] = [ - ("arescentral", "http://apt.arescentral.org", "contrib", - "apt-key adv --keyserver keyserver.ubuntu.com --recv" - " 5A4F5210FF46CEE4B799098BAC879AADD5B51AE9".split()), -] - -MAC = "mac" -INSTALL[MAC] = "brew install".split() -PACKAGE[MAC] = collections.OrderedDict([ - ("ninja", "ninja"), - ("gn", "sfiera/gn/gn"), -]) - -WIN = "win" -INSTALL[WIN] = "python scripts/download".split() -PACKAGE[WIN] = collections.OrderedDict([ - ("ninja", - "https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip:ninja.exe"), - ("gn", "https://chrome-infra-packages.appspot.com/dl/gn/gn/windows-amd64/+/latest:gn.exe"), -]) +Distro = collections.namedtuple("Distro", "name packages sources install update add_key".split()) + +DEBIAN = Distro( + name="debian", + packages={ + # Binaries + "clang": "clang", + "clang++": "clang", + "gn": "gn", + "ninja": "ninja-build", + "pkg-config": "pkg-config", + + # Libraries + "gl": "libgl1-mesa-dev", + "glfw3": "libglfw3-dev", + "glu": "libglu1-mesa-dev", + "libmodplug": "libmodplug-dev", + "libpng": "libpng-dev", + "libzip": "libzip-dev", + "neon": "libneon27-dev", + "openal": "libopenal-dev", + "sndfile": "libsndfile1-dev", + "x11": "libx11-dev", + "xcursor": "libxcursor-dev", + "xinerama": "libxinerama-dev", + "xrandr": "libxrandr-dev", + "xxf86vm": "libxxf86vm-dev", + "zlib": "zlib1g-dev", + }, + sources=[ + ("arescentral", "http://apt.arescentral.org", "contrib", + "5A4F5210FF46CEE4B799098BAC879AADD5B51AE9"), + ], + install="apt-get install".split(), + update="apt-get update".split(), + add_key="apt-key adv --keyserver keyserver.ubuntu.com --recv".split(), +) + +MAC = Distro( + name="mac", + packages={ + "ninja": "ninja", + "gn": "sfiera/gn/gn", + }, + sources=[], + install="brew install".split(), + update=None, + add_key=None, +) + +WIN = Distro( + name="win", + packages={ + "ninja": + "https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip:ninja.exe", + "gn": "https://chrome-infra-packages.appspot.com/dl/gn/gn/windows-amd64/+/latest:gn.exe", + }, + sources=[], + install="python scripts/download".split(), + update=None, + add_key=None, +) + +DISTROS = {d.name: d for d in [DEBIAN, MAC, WIN]} def main(): import argparse - distro, codename = defaults() + if platform.system() == "Darwin": + distro, codename = MAC.name, None + elif platform.system() == "Linux": + _, distro, codename = cfg.dist_proto() + elif platform.system() == "Windows": + distro, codename = WIN.name, None + else: + sys.stderr.write("This script is Mac-, Linux-, and Windows-only, sorry.\n") + sys.exit(1) parser = argparse.ArgumentParser(description="Install build deps for Antares") parser.add_argument("action", choices="check install".split()) - parser.add_argument("--distro", choices=sorted(INSTALL.keys()), default=distro) + parser.add_argument("--distro", choices=sorted(DISTROS.keys()), default=distro) parser.add_argument("--codename", type=str, default=codename) parser.add_argument("--dry-run", action="store_const", const=True, default=False) args, flags = parser.parse_known_args() + distro = DISTROS[args.distro] if args.action == "check": - if not check(distro=args.distro, codename=args.codename): + if not check(distro=distro, codename=args.codename): sys.exit(1) elif args.action == "install": - install(distro=args.distro, codename=args.codename, dry_run=args.dry_run, flags=flags) + install(distro=distro, codename=args.codename, dry_run=args.dry_run, flags=flags) def check(*, distro, codename, prefix=""): @@ -99,7 +119,7 @@ def check(*, distro, codename, prefix=""): pkg_config = None missing_pkgs = [] config = {} - for name in PACKAGE[distro]: + for name in distro.packages: if name in checkers: dep = checkers[name]() if dep is None: @@ -118,22 +138,22 @@ def check(*, distro, codename, prefix=""): return config commands = [] - for name, url, component, keys in SOURCES.get(distro, []): + for name, url, component, key in distro.sources: path = "/etc/apt/sources.list.d/%s.list" % name if os.path.exists(path): continue commands.extend([ - _command(prefix, keys), + _command(prefix, distro.add_key + [key]), "%s | %s" % ( _command("", ["echo", "deb", url, codename, component]), _command(prefix, ["tee", path]), ), ]) - if distro in UPDATE: - commands.append(_command(prefix, UPDATE[distro])) - missing_pkgs = sorted(set(PACKAGE[distro][pkg] for pkg in missing_pkgs)) - commands.append(_command(prefix, INSTALL[distro] + missing_pkgs)) + if distro.update: + commands.append(_command(prefix, distro.update)) + missing_pkgs = sorted(set(distro.packages[pkg] for pkg in missing_pkgs)) + commands.append(_command(prefix, distro.install + missing_pkgs)) print() print("missing dependencies: %s" % " ".join(missing_pkgs)) @@ -155,18 +175,18 @@ def _command(prefix, args): def install(*, distro, codename, dry_run=False, flags=[]): update = False - for name, url, component, keys in SOURCES.get(distro, []): + for name, url, component, key in distro.sources: path = "/etc/apt/sources.list.d/%s.list" % name if os.path.exists(path): continue - run(dry_run, keys) + run(dry_run, distro.add_key + [key]) line = "deb %s %s %s" % (url, codename, component) write(dry_run, line, path) update = True if update: - run(dry_run, UPDATE[distro]) - run(dry_run, INSTALL[distro] + list(PACKAGE[distro].values()) + flags) + run(dry_run, distro.update) + run(dry_run, distro.install + list(distro.packages.values()) + flags) def run(dry_run, command): @@ -183,18 +203,5 @@ def write(dry_run, content, path): f.write(content) -def defaults(): - if platform.system() == "Darwin": - return MAC, None - elif platform.system() == "Linux": - _, distro, codename = cfg.dist_proto() - return distro, codename - elif platform.system() == "Windows": - return WIN, None - else: - sys.stderr.write("This script is Mac- and Linux-only, sorry.\n") - sys.exit(1) - - if __name__ == "__main__": main() From 0849fb85eb8476eee3c355b8d2e612ff909cbd6a Mon Sep 17 00:00:00 2001 From: Chris Pickel Date: Wed, 9 Mar 2022 17:54:55 +0900 Subject: [PATCH 3/6] Move most of scripts/deps.py to build/lib --- build/lib | 2 +- configure | 13 +++-- scripts/deps.py | 140 ++---------------------------------------------- 3 files changed, 15 insertions(+), 140 deletions(-) diff --git a/build/lib b/build/lib index 9c1db347..d02346be 160000 --- a/build/lib +++ b/build/lib @@ -1 +1 @@ -Subproject commit 9c1db3472070eadfca607b7b766db437761b94a6 +Subproject commit d02346be7fca578cf5b66e5a3fae19ea8969163a diff --git a/configure b/configure index 2baa76d5..00f3c26b 100755 --- a/configure +++ b/configure @@ -17,7 +17,6 @@ sys.path[0:0] = [ os.path.join(os.path.dirname(__file__), "build", "lib", "scripts"), ] try: - import deps import cfg except ImportError: pass @@ -138,6 +137,8 @@ def check_deps(args): def check_mac(args): + import deps + with cfg.step("checking Mac OS X version") as msg: ver = platform.mac_ver()[0] ver = tuple(int(x) for x in ver.split(".")[:2]) @@ -166,13 +167,15 @@ def check_mac(args): print("Then, try ./configure again") sys.exit(1) - config = deps.check(distro=deps.DISTROS["mac"], codename="mac") + config = cfg.check_all(distro=deps.DISTROS["mac"], codename="mac") if config is None: sys.exit(1) return config def check_linux_native(args): + import deps + with cfg.step("checking Linux distro") as msg: pretty, distro, codename = cfg.dist_proto() if distro in deps.DISTROS: @@ -180,14 +183,16 @@ def check_linux_native(args): else: msg(pretty + " (untested)", color="yellow") distro = "debian" - config = deps.check(distro=deps.DISTROS[distro], codename=codename, prefix="sudo") + config = cfg.check_all(distro=deps.DISTROS[distro], codename=codename, prefix="sudo") if config is None: sys.exit(1) return config def check_win_native(args): - config = deps.check(distro=deps.DISTROS["win"], codename="win") + import deps + + config = cfg.check_all(distro=deps.DISTROS["win"], codename="win") config["gn"] = "gn" config["ninja"] = "ninja" return config diff --git a/scripts/deps.py b/scripts/deps.py index b220107c..dfe907b9 100755 --- a/scripts/deps.py +++ b/scripts/deps.py @@ -8,14 +8,9 @@ import sys sys.path.append(os.path.join(os.path.dirname(__file__), "..", "build", "lib", "scripts")) -try: - import cfg -except ImportError: - pass +import cfg -Distro = collections.namedtuple("Distro", "name packages sources install update add_key".split()) - -DEBIAN = Distro( +DEBIAN = cfg.Distro( name="debian", packages={ # Binaries @@ -51,7 +46,7 @@ add_key="apt-key adv --keyserver keyserver.ubuntu.com --recv".split(), ) -MAC = Distro( +MAC = cfg.Distro( name="mac", packages={ "ninja": "ninja", @@ -63,7 +58,7 @@ add_key=None, ) -WIN = Distro( +WIN = cfg.Distro( name="win", packages={ "ninja": @@ -78,130 +73,5 @@ DISTROS = {d.name: d for d in [DEBIAN, MAC, WIN]} - -def main(): - import argparse - - if platform.system() == "Darwin": - distro, codename = MAC.name, None - elif platform.system() == "Linux": - _, distro, codename = cfg.dist_proto() - elif platform.system() == "Windows": - distro, codename = WIN.name, None - else: - sys.stderr.write("This script is Mac-, Linux-, and Windows-only, sorry.\n") - sys.exit(1) - - parser = argparse.ArgumentParser(description="Install build deps for Antares") - parser.add_argument("action", choices="check install".split()) - parser.add_argument("--distro", choices=sorted(DISTROS.keys()), default=distro) - parser.add_argument("--codename", type=str, default=codename) - parser.add_argument("--dry-run", action="store_const", const=True, default=False) - args, flags = parser.parse_known_args() - - distro = DISTROS[args.distro] - if args.action == "check": - if not check(distro=distro, codename=args.codename): - sys.exit(1) - elif args.action == "install": - install(distro=distro, codename=args.codename, dry_run=args.dry_run, flags=flags) - - -def check(*, distro, codename, prefix=""): - checkers = { - "clang": cfg.check_clang, - "clang++": cfg.check_clangxx, - "gn": cfg.check_gn, - "ninja": cfg.check_ninja, - "pkg-config": cfg.check_pkg_config, - } - - pkg_config = None - missing_pkgs = [] - config = {} - for name in distro.packages: - if name in checkers: - dep = checkers[name]() - if dep is None: - missing_pkgs.append(name) - else: - config[name] = dep - continue - - pkg_config = config.pop("pkg-config", pkg_config) - if pkg_config is None: - continue - if not cfg.check_pkg(pkg_config, name): - missing_pkgs.append(name) - - if not missing_pkgs: - return config - commands = [] - - for name, url, component, key in distro.sources: - path = "/etc/apt/sources.list.d/%s.list" % name - if os.path.exists(path): - continue - commands.extend([ - _command(prefix, distro.add_key + [key]), - "%s | %s" % ( - _command("", ["echo", "deb", url, codename, component]), - _command(prefix, ["tee", path]), - ), - ]) - - if distro.update: - commands.append(_command(prefix, distro.update)) - missing_pkgs = sorted(set(distro.packages[pkg] for pkg in missing_pkgs)) - commands.append(_command(prefix, distro.install + missing_pkgs)) - - print() - print("missing dependencies: %s" % " ".join(missing_pkgs)) - if len(missing_pkgs) == 1: - print("On %s, you can install it with:" % codename) - else: - print("On %s, you can install them with:" % codename) - print() - for command in commands: - print(" $ %s" % command) - print() - print("Then, try ./configure again") - return None - - -def _command(prefix, args): - return " ".join(shlex.quote(x) for x in shlex.split(prefix) + args) - - -def install(*, distro, codename, dry_run=False, flags=[]): - update = False - for name, url, component, key in distro.sources: - path = "/etc/apt/sources.list.d/%s.list" % name - if os.path.exists(path): - continue - run(dry_run, distro.add_key + [key]) - line = "deb %s %s %s" % (url, codename, component) - write(dry_run, line, path) - update = True - - if update: - run(dry_run, distro.update) - run(dry_run, distro.install + list(distro.packages.values()) + flags) - - -def run(dry_run, command): - print(" ".join(shlex.quote(arg) for arg in command)) - if not dry_run: - subprocess.check_call(command) - - -def write(dry_run, content, path): - print("+ tee %s" % shlex.quote(path)) - print(content) - if not dry_run: - with open(path, "w") as f: - f.write(content) - - if __name__ == "__main__": - main() + cfg.install_or_check(DISTROS) From 685c84a08af03e3026291fa70f62daa897e9f16a Mon Sep 17 00:00:00 2001 From: Chris Pickel Date: Wed, 9 Mar 2022 19:16:27 +0900 Subject: [PATCH 4/6] Make most of ./configure more generic --- configure | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/configure b/configure index 00f3c26b..78da4868 100755 --- a/configure +++ b/configure @@ -23,6 +23,8 @@ except ImportError: def main(): + check_submodules() + config_dir = os.path.dirname(sys.argv[0]) if config_dir != "": os.chdir(config_dir) @@ -52,9 +54,11 @@ def main(): type=str, help="override antares_version string") args = parser.parse_args() + configure("Antares", args) - check_submodules() - config = check_deps(args) + +def configure(project, args): + config = check_deps(project, args) script_executable = "python3" if cfg.host_os() == "win": @@ -110,13 +114,13 @@ def check_submodules(): sys.exit(1) -def check_deps(args): +def check_deps(project, args): with cfg.step("checking host os") as msg: if cfg.host_os() in ["mac", "linux", "win"]: msg(cfg.host_os(), color="green") else: msg(cfg.host_os(), color="red") - print("\nSorry! Antares requires Mac OS X or Linux") + print("\nSorry! %s requires Mac OS X, Linux, or Windows" % project) sys.exit(1) with cfg.step("checking target os") as msg: @@ -133,10 +137,10 @@ def check_deps(args): sys.exit(1) msg(args.target_os, color="green") - return checker(args) + return checker(project, args) -def check_mac(args): +def check_mac(project, args): import deps with cfg.step("checking Mac OS X version") as msg: @@ -144,7 +148,7 @@ def check_mac(args): ver = tuple(int(x) for x in ver.split(".")[:2]) if ver < (10, 9): msg("%d.%d" % ver, color="red") - print("\nSorry! Antares requires Mac OS X 10.9+") + print("\nSorry! %s requires Mac OS X 10.9+" % project) sys.exit(1) msg("%d.%d" % ver, color="green") @@ -173,7 +177,7 @@ def check_mac(args): return config -def check_linux_native(args): +def check_linux_native(project, args): import deps with cfg.step("checking Linux distro") as msg: @@ -189,16 +193,16 @@ def check_linux_native(args): return config -def check_win_native(args): +def check_win_native(project, args): import deps config = cfg.check_all(distro=deps.DISTROS["win"], codename="win") - config["gn"] = "gn" - config["ninja"] = "ninja" + if config is None: + sys.exit(1) return config -def check_win_on_linux(args): +def check_win_on_linux(project, args): with cfg.step("checking Linux distro") as msg: pretty, distro, codename = cfg.dist_proto() if (distro, codename) == ("debian", "focal"): From 9f574b7ff798fd23fdab78c5edc9ee8725c9b22e Mon Sep 17 00:00:00 2001 From: Chris Pickel Date: Wed, 16 Mar 2022 04:09:05 +0000 Subject: [PATCH 5/6] Convert args to config in ./configure main() --- configure | 73 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/configure b/configure index 78da4868..1185c975 100755 --- a/configure +++ b/configure @@ -54,11 +54,29 @@ def main(): type=str, help="override antares_version string") args = parser.parse_args() - configure("Antares", args) + config = { + "mode": args.mode, + "target_os": args.target_os, + "prefix": args.prefix, + "add_cflags": shlex.split(os.environ.get("CPPFLAGS", "")), + "add_cflags_c": shlex.split(os.environ.get("CFLAGS", "")), + "add_cflags_cc": shlex.split(os.environ.get("CXXFLAGS", "")), + "add_ldflags": shlex.split(os.environ.get("LDFLAGS", "")), + } + if args.antares_version: + config["antares_version"] = args.antares_version + if config["target_os"] == "mac": + config["macosx_version_min"] = "10.7" + + import deps + configure("Antares", deps.DISTROS, config) -def configure(project, args): - config = check_deps(project, args) + +def configure(project, distros, config): + for k, v in check_deps(project, distros, config).items(): + if k not in config: + config[k] = v script_executable = "python3" if cfg.host_os() == "win": @@ -69,18 +87,7 @@ def configure(project, args): gnf.write('script_executable = "' + script_executable + '"\n') with cfg.step("configure mode") as msg: - msg(args.mode, color="green") - config["mode"] = args.mode - config["target_os"] = args.target_os - config["prefix"] = args.prefix - config["add_cflags"] = shlex.split(os.environ.get("CPPFLAGS", "")) - config["add_cflags_c"] = shlex.split(os.environ.get("CFLAGS", "")) - config["add_cflags_cc"] = shlex.split(os.environ.get("CXXFLAGS", "")) - config["add_ldflags"] = shlex.split(os.environ.get("LDFLAGS", "")) - if args.antares_version: - config["antares_version"] = args.antares_version - if args.target_os == "mac": - config["macosx_version_min"] = "10.7" + msg(config["mode"], color="green") cfg.gn(**config) print("make(1) it so!") @@ -114,7 +121,7 @@ def check_submodules(): sys.exit(1) -def check_deps(project, args): +def check_deps(project, distros, config): with cfg.step("checking host os") as msg: if cfg.host_os() in ["mac", "linux", "win"]: msg(cfg.host_os(), color="green") @@ -124,25 +131,23 @@ def check_deps(project, args): sys.exit(1) with cfg.step("checking target os") as msg: - if args.target_os is None: - args.target_os = cfg.host_os() + if config["target_os"] is None: + config["target_os"] = cfg.host_os() checker = { ("mac", "mac"): check_mac, ("linux", "linux"): check_linux_native, ("linux", "win"): check_win_on_linux, ("win", "win"): check_win_native, - }.get((cfg.host_os(), args.target_os)) + }.get((cfg.host_os(), config["target_os"])) if checker is None: - msg(args.target_os, color="red") + msg(config["target_os"], color="red") sys.exit(1) - msg(args.target_os, color="green") + msg(config["target_os"], color="green") - return checker(project, args) + return checker(project, distros) -def check_mac(project, args): - import deps - +def check_mac(project, distros): with cfg.step("checking Mac OS X version") as msg: ver = platform.mac_ver()[0] ver = tuple(int(x) for x in ver.split(".")[:2]) @@ -171,38 +176,34 @@ def check_mac(project, args): print("Then, try ./configure again") sys.exit(1) - config = cfg.check_all(distro=deps.DISTROS["mac"], codename="mac") + config = cfg.check_all(distro=distros["mac"], codename="mac") if config is None: sys.exit(1) return config -def check_linux_native(project, args): - import deps - +def check_linux_native(project, distros): with cfg.step("checking Linux distro") as msg: pretty, distro, codename = cfg.dist_proto() - if distro in deps.DISTROS: + if distro in distros: msg(pretty, color="green") else: msg(pretty + " (untested)", color="yellow") distro = "debian" - config = cfg.check_all(distro=deps.DISTROS[distro], codename=codename, prefix="sudo") + config = cfg.check_all(distro=distros[distro], codename=codename, prefix="sudo") if config is None: sys.exit(1) return config -def check_win_native(project, args): - import deps - - config = cfg.check_all(distro=deps.DISTROS["win"], codename="win") +def check_win_native(project, distros): + config = cfg.check_all(distro=distros["win"], codename="win") if config is None: sys.exit(1) return config -def check_win_on_linux(project, args): +def check_win_on_linux(project): with cfg.step("checking Linux distro") as msg: pretty, distro, codename = cfg.dist_proto() if (distro, codename) == ("debian", "focal"): From bde6f1e92be61ed75c16aa9855b4a58b04e720c3 Mon Sep 17 00:00:00 2001 From: Chris Pickel Date: Thu, 17 Mar 2022 09:40:04 +0000 Subject: [PATCH 6/6] Move remainder of ./configure to build/lib --- build/lib | 2 +- configure | 144 +----------------------------------------------------- 2 files changed, 2 insertions(+), 144 deletions(-) diff --git a/build/lib b/build/lib index d02346be..0587c311 160000 --- a/build/lib +++ b/build/lib @@ -1 +1 @@ -Subproject commit d02346be7fca578cf5b66e5a3fae19ea8969163a +Subproject commit 0587c311b7bcdb82ab5d9f06138f190f31fc601d diff --git a/configure b/configure index 1185c975..40cdf5c6 100755 --- a/configure +++ b/configure @@ -3,12 +3,8 @@ # This file is part of Antares, a tactical space combat game. # Antares is free software, distributed under the LGPL+. See COPYING. -from __future__ import division, print_function, unicode_literals - import argparse -import collections import os -import platform import shlex import sys @@ -70,27 +66,7 @@ def main(): config["macosx_version_min"] = "10.7" import deps - configure("Antares", deps.DISTROS, config) - - -def configure(project, distros, config): - for k, v in check_deps(project, distros, config).items(): - if k not in config: - config[k] = v - - script_executable = "python3" - if cfg.host_os() == "win": - script_executable = "python" - - with open('.gn', 'w') as gnf: - gnf.write('buildconfig = "//build/BUILDCONFIG.gn"\n') - gnf.write('script_executable = "' + script_executable + '"\n') - - with cfg.step("configure mode") as msg: - msg(config["mode"], color="green") - cfg.gn(**config) - - print("make(1) it so!") + cfg.configure("Antares", deps.DISTROS, config) def check_submodules(): @@ -121,123 +97,5 @@ def check_submodules(): sys.exit(1) -def check_deps(project, distros, config): - with cfg.step("checking host os") as msg: - if cfg.host_os() in ["mac", "linux", "win"]: - msg(cfg.host_os(), color="green") - else: - msg(cfg.host_os(), color="red") - print("\nSorry! %s requires Mac OS X, Linux, or Windows" % project) - sys.exit(1) - - with cfg.step("checking target os") as msg: - if config["target_os"] is None: - config["target_os"] = cfg.host_os() - checker = { - ("mac", "mac"): check_mac, - ("linux", "linux"): check_linux_native, - ("linux", "win"): check_win_on_linux, - ("win", "win"): check_win_native, - }.get((cfg.host_os(), config["target_os"])) - if checker is None: - msg(config["target_os"], color="red") - sys.exit(1) - msg(config["target_os"], color="green") - - return checker(project, distros) - - -def check_mac(project, distros): - with cfg.step("checking Mac OS X version") as msg: - ver = platform.mac_ver()[0] - ver = tuple(int(x) for x in ver.split(".")[:2]) - if ver < (10, 9): - msg("%d.%d" % ver, color="red") - print("\nSorry! %s requires Mac OS X 10.9+" % project) - sys.exit(1) - msg("%d.%d" % ver, color="green") - - missing = collections.OrderedDict() - if not (cfg.check_clang() and cfg.check_libcxx()): - missing["xcode"] = ("* To install Xcode, open the App Store:\n" - " https://itunes.apple.com/en/app/xcode/id497799835\n" - " After installing, open it and accept the license agreement\n") - if not cfg.check_brew(): - missing["brew"] = ( - "* To install Homebrew, run:\n" - ' $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"\n' - ) - - if missing: - print("\nmissing dependencies: %s\n" % " ".join(missing.keys())) - for step in missing.values(): - sys.stdout.write(step) - print("") - print("Then, try ./configure again") - sys.exit(1) - - config = cfg.check_all(distro=distros["mac"], codename="mac") - if config is None: - sys.exit(1) - return config - - -def check_linux_native(project, distros): - with cfg.step("checking Linux distro") as msg: - pretty, distro, codename = cfg.dist_proto() - if distro in distros: - msg(pretty, color="green") - else: - msg(pretty + " (untested)", color="yellow") - distro = "debian" - config = cfg.check_all(distro=distros[distro], codename=codename, prefix="sudo") - if config is None: - sys.exit(1) - return config - - -def check_win_native(project, distros): - config = cfg.check_all(distro=distros["win"], codename="win") - if config is None: - sys.exit(1) - return config - - -def check_win_on_linux(project): - with cfg.step("checking Linux distro") as msg: - pretty, distro, codename = cfg.dist_proto() - if (distro, codename) == ("debian", "focal"): - msg(pretty, color="green") - else: - msg(pretty, color="red") - print("\nSorry! Cross-compilation currently requires Ubuntu 20.04 focal") - sys.exit(1) - - missing = collections.OrderedDict() - if not cfg.check_clang("clang++"): - missing["clang"] = "clang" - - with cfg.step("checking for mingw") as msg: - if os.path.exists("/usr/x86_64-w64-mingw32/include/windows.h"): - msg("ok", color="green") - else: - msg("missing", color="red") - missing["mingw"] = "mingw-w64" - - if missing: - print("\nmissing dependencies: %s" % " ".join(missing.keys())) - if len(missing) == 1: - print("\nYou can install it with:\n") - else: - print("\nYou can install them with:\n") - print(" $ sudo apt-get install %s" % (" ".join(missing.values()))) - sys.exit(1) - - return { - "ninja": "ninja", - "gn": "gn", - } - - if __name__ == "__main__": main()