From abadbf2b1a99633666e0b878e44f778bbab56d26 Mon Sep 17 00:00:00 2001 From: jwiltse Date: Tue, 11 Feb 2025 12:33:35 -0500 Subject: [PATCH 1/5] Add lib64 dir as a lib directory with -L if it exists --- src/portable_python/__init__.py | 33 +++++++++++++++++-------- src/portable_python/cpython.py | 8 +++--- src/portable_python/external/tkinter.py | 6 ++--- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/portable_python/__init__.py b/src/portable_python/__init__.py index c854051..8a4cac9 100644 --- a/src/portable_python/__init__.py +++ b/src/portable_python/__init__.py @@ -507,9 +507,20 @@ def deps(self): return self.setup.folders.deps @property - def deps_lib(self): + def deps_lib_dir(self): return self.deps / "lib" + @property + def deps_lib64_dir(self): + return self.deps / "lib64" + + @property + def deps_lib_dirs(self): + lib_dirs = [self.deps_lib_dir] + if self.deps_lib64_dir.exists(): + lib_dirs.append(self.deps_lib64_dir) + return lib_dirs + def xenv_CPATH(self): folder = self.deps / "include" if folder.exists(): @@ -522,7 +533,7 @@ def xenv_CPATH(self): def xenv_LDFLAGS(self): if self.modules.selected: - yield f"-L{self.deps_lib}" + yield from (f"-L{lib_dir}" for lib_dir in self.deps_lib_dirs) def xenv_PATH(self): yield f"{self.deps}/bin" @@ -536,7 +547,7 @@ def xenv_LD_LIBRARY_PATH(self): def xenv_PKG_CONFIG_PATH(self): yield from os.environ.get("PKG_CONFIG_PATH", "").split(":") if self.modules.selected: - yield f"{self.deps_lib}/pkgconfig" + yield f"{self.deps_lib_dir}/pkgconfig" def _do_run(self, program, *args, fatal=True, env=None): return runez.run(program, *args, passthrough=self._log_handler, stdout=None, stderr=None, fatal=fatal, env=env) @@ -747,10 +758,12 @@ def _prepare(self): # Some libs get funky permissions for some reason super()._prepare() self.setup.ensure_clean_folder(self.install_folder) - for path in runez.ls_dir(self.deps_lib): - if not path.name.endswith(".la"): - expected = 0o755 if path.is_dir() else 0o644 - current = path.stat().st_mode & 0o777 - if current != expected: - LOG.info("Corrected permissions for %s (was %s)", runez.short(path), oct(current)) - path.chmod(expected) + + for lib_dir in self.deps_lib_dirs: + for path in runez.ls_dir(lib_dir): + if not path.name.endswith(".la"): + expected = 0o755 if path.is_dir() else 0o644 + current = path.stat().st_mode & 0o777 + if current != expected: + LOG.info("Corrected permissions for %s (was %s)", runez.short(path), oct(current)) + path.chmod(expected) diff --git a/src/portable_python/cpython.py b/src/portable_python/cpython.py index 7c2ee36..2cb0892 100644 --- a/src/portable_python/cpython.py +++ b/src/portable_python/cpython.py @@ -107,7 +107,7 @@ def url(self): return f"https://www.python.org/ftp/python/{self.version.main}/Python-{self.version}.tar.xz" def xenv_LDFLAGS_NODIST(self): - yield f"-L{self.deps_lib}" + yield from (f"-L{lib_dir}" for lib_dir in self.deps_lib_dirs) if PPG.target.is_linux: yield "-Wl,-z,origin" # rpath intentionally long to give 'patchelf' some room @@ -139,7 +139,7 @@ def c_configure_args(self): if not self.has_configure_opt("--with-system-ffi"): if self.active_module(LibFFI): - yield f"LIBFFI_INCLUDEDIR={self.deps_lib}" + yield f"LIBFFI_INCLUDEDIR={self.deps_lib_dir}" yield "--with-system-ffi=no" else: @@ -163,7 +163,9 @@ def c_configure_args(self): # TODO: this doesn't seem to be enough, on macos cpython's ./configure still picks up the shared macos tcl/tk libs version = Version(tkinter.version) yield f"--with-tcltk-includes=-I{self.deps}/include" - yield f"--with-tcltk-libs=-L{self.deps_lib} -ltcl{version.mm} -ltk{version.mm}" + + lib_dir_flags = " ".join(f"-L{lib_dir}" for lib_dir in self.deps_lib_dirs) + yield f"--with-tcltk-libs={lib_dir_flags} -ltcl{version.mm} -ltk{version.mm}" @runez.cached_property def prefix_lib_folder(self): diff --git a/src/portable_python/external/tkinter.py b/src/portable_python/external/tkinter.py index 299b97b..9d0f626 100644 --- a/src/portable_python/external/tkinter.py +++ b/src/portable_python/external/tkinter.py @@ -53,7 +53,7 @@ def xenv_CFLAGS(self): def c_configure_args(self): yield "--enable-shared=no" yield "--enable-threads" - yield f"--with-tcl={self.deps_lib}" + yield f"--with-tcl={self.deps_lib_dir}" yield "--without-x" if PPG.target.is_macos: # pragma: no cover, tcl/tk is "best effort" yield "--enable-aqua=yes" @@ -89,8 +89,8 @@ def xenv_CFLAGS(self): def c_configure_args(self): yield "--enable-shared=no" yield "--enable-threads" - yield f"--with-tcl={self.deps_lib}" - yield f"--with-tk={self.deps_lib}" + yield f"--with-tcl={self.deps_lib_dir}" + yield f"--with-tk={self.deps_lib_dir}" yield "--without-x" def _do_linux_compile(self): From 58ae22b556f61075f52d04bfd2f2f3248307afe8 Mon Sep 17 00:00:00 2001 From: jwiltse Date: Fri, 14 Feb 2025 10:02:15 -0500 Subject: [PATCH 2/5] Update calls to cfg_configure to handle deps_lib64_dir after merge from main --- src/portable_python/__init__.py | 4 ++-- src/portable_python/external/xcpython.py | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/portable_python/__init__.py b/src/portable_python/__init__.py index 19a0baa..cec0bd1 100644 --- a/src/portable_python/__init__.py +++ b/src/portable_python/__init__.py @@ -497,10 +497,10 @@ def cfg_url(self, version): url_template = Template(config_url) return url_template.substitute(version=version) - def cfg_configure(self, deps_lib): + def cfg_configure(self, deps_lib_dir, deps_lib64_dir): if configure := PPG.config.get_value("%s-configure" % self.m_name): configure_template = Template(configure) - return configure_template.substitute(deps_lib=deps_lib) + return configure_template.substitute(lib_dir=deps_lib_dir, lib64_dir=deps_lib64_dir) def cfg_patches(self): return PPG.config.get_value("%s-patches" % self.m_name) diff --git a/src/portable_python/external/xcpython.py b/src/portable_python/external/xcpython.py index 1201d02..060a75f 100644 --- a/src/portable_python/external/xcpython.py +++ b/src/portable_python/external/xcpython.py @@ -28,7 +28,7 @@ def version(self): return self.cfg_version("6.2.32") def c_configure_args(self): - if config_args := self.cfg_configure(self.deps_lib): + if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir): yield config_args else: @@ -87,7 +87,7 @@ def version(self): return self.cfg_version("1.24") def c_configure_args(self): - if config_args := self.cfg_configure(self.deps_lib): + if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir): yield config_args else: @@ -132,7 +132,7 @@ def version(self): return self.cfg_version("3.4.6") def c_configure_args(self): - if config_args := self.cfg_configure(self.deps_lib): + if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir): yield config_args else: @@ -179,7 +179,7 @@ def version(self): return self.cfg_version("3.0.15") def c_configure_args(self): - if config_args := self.cfg_configure(self.deps_lib): + if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir): yield config_args else: @@ -208,7 +208,7 @@ def version(self): return self.cfg_version("6.5") def c_configure_args(self): - if config_args := self.cfg_configure(self.deps_lib): + if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir): yield config_args else: @@ -265,7 +265,7 @@ def version(self): return self.cfg_version("8.2.13") def c_configure_args(self): - if config_args := self.cfg_configure(self.deps_lib): + if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir): yield config_args else: @@ -309,7 +309,7 @@ def version(self): return self.cfg_version("3.47.0") def c_configure_args(self): - if config_args := self.cfg_configure(self.deps_lib): + if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir): yield config_args else: @@ -346,7 +346,7 @@ def version(self): return self.cfg_version("1.0.3") def c_configure_args(self): - if config_args := self.cfg_configure(self.deps_lib): + if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir): yield config_args else: @@ -376,7 +376,7 @@ def version(self): return self.cfg_version("5.6.3") def c_configure_args(self): - if config_args := self.cfg_configure(self.deps_lib): + if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir): yield config_args else: @@ -419,7 +419,7 @@ def version(self): return self.cfg_version("1.3.1") def c_configure_args(self): - if config_args := self.cfg_configure(self.deps_lib): + if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir): yield config_args else: From 44d613d4e4999b8c8db146c332b6074ef43124b4 Mon Sep 17 00:00:00 2001 From: jwiltse Date: Fri, 14 Feb 2025 10:15:50 -0500 Subject: [PATCH 3/5] Update PKG_CONFIG_PATH to include all libdirs --- src/portable_python/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/portable_python/__init__.py b/src/portable_python/__init__.py index cec0bd1..411aac9 100644 --- a/src/portable_python/__init__.py +++ b/src/portable_python/__init__.py @@ -561,7 +561,7 @@ def xenv_LD_LIBRARY_PATH(self): def xenv_PKG_CONFIG_PATH(self): yield from os.environ.get("PKG_CONFIG_PATH", "").split(":") if self.modules.selected: - yield f"{self.deps_lib_dir}/pkgconfig" + yield from (f"{lib_dir}/pkgconfig" for lib_dir in self.deps_lib_dirs) def _do_run(self, program, *args, fatal=True, env=None): return runez.run(program, *args, passthrough=self._log_handler, stdout=None, stderr=None, fatal=fatal, env=env) From 83794ea1a47f0ac68ffa8a121c9eaa333585cbe0 Mon Sep 17 00:00:00 2001 From: jwiltse Date: Fri, 14 Feb 2025 10:19:24 -0500 Subject: [PATCH 4/5] Fix yield of tcltk vars per zsimic --- src/portable_python/cpython.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/portable_python/cpython.py b/src/portable_python/cpython.py index 5d903f2..310c023 100644 --- a/src/portable_python/cpython.py +++ b/src/portable_python/cpython.py @@ -168,7 +168,9 @@ def c_configure_args(self): yield f"--with-tcltk-includes=-I{self.deps}/include" lib_dir_flags = " ".join(f"-L{lib_dir}" for lib_dir in self.deps_lib_dirs) - yield f"--with-tcltk-libs={lib_dir_flags} -ltcl{version.mm} -ltk{version.mm}" + yield f"--with-tcltk-libs={lib_dir_flags}" + yield f"-ltcl{version.mm}" + yield f"-ltk{version.mm}" @runez.cached_property def prefix_lib_folder(self): From 7dd382ca955c2e927fb98637b02e5b5a3eb241f4 Mon Sep 17 00:00:00 2001 From: jwiltse Date: Fri, 14 Feb 2025 10:25:07 -0500 Subject: [PATCH 5/5] Update Ncurses ref to self.deps_lib_dir --- src/portable_python/external/xcpython.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/portable_python/external/xcpython.py b/src/portable_python/external/xcpython.py index 060a75f..5bbf391 100644 --- a/src/portable_python/external/xcpython.py +++ b/src/portable_python/external/xcpython.py @@ -219,7 +219,7 @@ def c_configure_args(self): yield "--without-manpages" yield "--without-progs" yield "--without-tests" - yield f"--with-pkg-config-libdir={self.deps_lib}/pkgconfig" + yield f"--with-pkg-config-libdir={self.deps_lib_dir}/pkgconfig" yield "--enable-pc-files" yield "--with-debug=no" yield "--with-gpm=no"