diff --git a/src/portable_python/__init__.py b/src/portable_python/__init__.py index 709e9e5..c854051 100644 --- a/src/portable_python/__init__.py +++ b/src/portable_python/__init__.py @@ -539,8 +539,7 @@ def xenv_PKG_CONFIG_PATH(self): yield f"{self.deps_lib}/pkgconfig" def _do_run(self, program, *args, fatal=True, env=None): - logger = self._log_handler - return runez.run(program, *args, passthrough=logger, stdout=None, stderr=None, fatal=fatal, env=env, logger=logger or runez.UNSET) + return runez.run(program, *args, passthrough=self._log_handler, stdout=None, stderr=None, fatal=fatal, env=env) def run_configure(self, program, *args, prefix=None): """ @@ -558,11 +557,13 @@ def run_configure(self, program, *args, prefix=None): def run_make(self, *args, program="make", cpu_count=None): cmd = program.split() - if cpu_count is None: - cpu_count = multiprocessing.cpu_count() + if cpu_count and cpu_count < 0: + available = multiprocessing.cpu_count() + if available and available > 0: + cpu_count += available - if cpu_count and cpu_count > 3: - cmd.append("-j%s" % (cpu_count - 2)) + if cpu_count and cpu_count > 1: + cmd.append("-j%s" % cpu_count) self._do_run(*cmd, *args) diff --git a/src/portable_python/cli.py b/src/portable_python/cli.py index 088bcbd..5e1fa81 100644 --- a/src/portable_python/cli.py +++ b/src/portable_python/cli.py @@ -14,19 +14,21 @@ @runez.click.group() @runez.click.version() @runez.click.color() -@runez.click.debug("-v") @runez.click.dryrun("-n") @click.option("--config", "-c", metavar="PATH", default="portable-python.yml", show_default=True, help="Path to config file to use") +@click.option("--quiet", "-q", is_flag=True, help="Turn off DEBUG logging") @click.option("--target", "-t", hidden=True, help="For internal use / testing") -def main(debug, config, target): +def main(config, quiet, target): """ Build (optionally portable) python binaries """ + level = logging.INFO if quiet else logging.DEBUG runez.system.AbortException = SystemExit runez.log.setup( - debug=debug, + debug=not quiet, + level=level, console_format="%(levelname)s %(message)s", - console_level=logging.INFO, + console_level=level, default_logger=LOG.info, locations=None, ) diff --git a/src/portable_python/cpython.py b/src/portable_python/cpython.py index 8437c60..7c2ee36 100644 --- a/src/portable_python/cpython.py +++ b/src/portable_python/cpython.py @@ -204,7 +204,7 @@ def _do_linux_compile(self): self.run_make(*make_args) # Don't parallelize `make install`, see https://github.com/python/cpython/issues/109796 - self.run_make("install", f"DESTDIR={self.destdir}", cpu_count=0) + self.run_make("install", f"DESTDIR={self.destdir}") def _finalize(self): is_shared = self.setup.prefix or self.has_configure_opt("--enable-shared", "yes") diff --git a/src/portable_python/external/__init__.py b/src/portable_python/external/__init__.py index 5b98a76..10f3fd9 100644 --- a/src/portable_python/external/__init__.py +++ b/src/portable_python/external/__init__.py @@ -13,8 +13,8 @@ def version(self): return self.cfg_version("0.3.2") def _do_linux_compile(self): - self.run_make("LIBINTL=NOOP", cpu_count=0) - self.run_make("LIBINTL=NOOP", f"DESTDIR={self.deps}", "prefix=/", "install", cpu_count=0) + self.run_make("LIBINTL=NOOP") + self.run_make("LIBINTL=NOOP", f"DESTDIR={self.deps}", "prefix=/", "install") class Toolchain(ModuleBuilder): diff --git a/src/portable_python/external/tkinter.py b/src/portable_python/external/tkinter.py index 0b7ffb4..299b97b 100644 --- a/src/portable_python/external/tkinter.py +++ b/src/portable_python/external/tkinter.py @@ -116,4 +116,4 @@ def candidate_modules(cls): @property def version(self): - return self.cfg_version("8.6.10") + return self.cfg_version("8.6.15") diff --git a/src/portable_python/external/xcpython.py b/src/portable_python/external/xcpython.py index e188f13..a5e658c 100644 --- a/src/portable_python/external/xcpython.py +++ b/src/portable_python/external/xcpython.py @@ -74,7 +74,7 @@ def url(self): @property def version(self): - return self.cfg_version("1.23") + return self.cfg_version("1.24") def _do_linux_compile(self): self.run_configure( @@ -114,7 +114,7 @@ def url(self): @property def version(self): - return self.cfg_version("3.4.4") + return self.cfg_version("3.4.6") def _do_linux_compile(self): self.run_configure( @@ -178,7 +178,7 @@ def url(self): @property def version(self): - return self.cfg_version("6.4") + return self.cfg_version("6.5") def c_configure_args(self): yield "--disable-shared" @@ -231,7 +231,7 @@ def url(self): @property def version(self): - return self.cfg_version("8.2") + return self.cfg_version("8.2.13") def _do_linux_compile(self): self.run_configure( @@ -244,8 +244,8 @@ def _do_linux_compile(self): "--disable-docs", "--enable-portable-binary", ) - self.run_make(cpu_count=0) - self.run_make("install", cpu_count=0) + self.run_make() + self.run_make("install") class Sqlite(ModuleBuilder): @@ -271,7 +271,7 @@ def url(self): @property def version(self): - return self.cfg_version("3.45.1") + return self.cfg_version("3.47.0") def _do_linux_compile(self): self.run_configure( @@ -325,7 +325,7 @@ def url(self): @property def version(self): - return self.cfg_version("5.4.6") + return self.cfg_version("5.6.3") def _do_linux_compile(self): self.run_configure( diff --git a/tests/test_failed.py b/tests/test_failed.py index 175fd7a..edcb443 100644 --- a/tests/test_failed.py +++ b/tests/test_failed.py @@ -7,7 +7,7 @@ def test_build_bogus_platform(cli): def test_failed_build(cli): cli.run("-tmacos-arm64", "build", "3.12.0") assert cli.failed - assert "Error while compiling xz:5.4.6: ForbiddenHttpError" in cli.logged + assert "Error while compiling xz:5.6.3: ForbiddenHttpError" in cli.logged assert "Overall compilation failed:" in cli.logged diff --git a/tests/test_invoker.py b/tests/test_invoker.py index dd310c4..0f00ba1 100644 --- a/tests/test_invoker.py +++ b/tests/test_invoker.py @@ -3,7 +3,7 @@ def test_invoker(cli): - cli.run("-v", "inspect", "invoker", "-v", "-mall") + cli.run("inspect", "invoker", "-v", "-mall") # Invoker may not be completely clean, but it has to have at least one OK .so usage m = re.search(r"^\.so files: .+, (\d+) OK", cli.logged.stdout.contents(), re.MULTILINE)