| From ca3417b8d605ccdb2e6c516c5e0c79180381627c Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Rapha=C3=ABl=20M=C3=A9lotte?= <raphael.melotte@mind.be> |
| Date: Sun, 4 Feb 2024 16:13:45 +0100 |
| Subject: [PATCH] pipcl.py: allow providing python-config externally |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| When cross-compiling (e.g. using Buildroot), the python-config |
| executable that resides next to the host python executable provides |
| incorrect includes (the ones for the host). |
| |
| Since the correct path to python-config cannot be guessed, add an |
| additional environment variable to allow setting the path to the |
| correct python-config executable externally. |
| |
| Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be> |
| Upstream: https://github.com/pymupdf/PyMuPDF/commit/3a214b0c144d86fd1329b26030f6b9f2a6b27020 |
| --- |
| pipcl.py | 72 +++++++++++++++++++++++++++++--------------------------- |
| setup.py | 3 +++ |
| 2 files changed, 40 insertions(+), 35 deletions(-) |
| |
| diff --git a/pipcl.py b/pipcl.py |
| index 209f660..c154774 100644 |
| --- a/pipcl.py |
| +++ b/pipcl.py |
| @@ -1789,43 +1789,45 @@ class PythonFlags: |
| self.ldflags = f'-L {_lib_dir}' |
| |
| else: |
| - # We use python-config which appears to work better than pkg-config |
| - # because it copes with multiple installed python's, e.g. |
| - # manylinux_2014's /opt/python/cp*-cp*/bin/python*. |
| - # |
| - # But... on non-macos it seems that we should not attempt to specify |
| - # libpython on the link command. The manylinux docker containers |
| - # don't actually contain libpython.so, and it seems that this |
| - # deliberate. And the link command runs ok. |
| - # |
| - python_exe = os.path.realpath( sys.executable) |
| - if darwin(): |
| - # Basic install of dev tools with `xcode-select --install` doesn't |
| - # seem to provide a `python3-config` or similar, but there is a |
| - # `python-config.py` accessible via sysconfig. |
| + python_config = os.environ.get("PYMUPDF_PYTHON_CONFIG") |
| + if not python_config: |
| + # We use python-config which appears to work better than pkg-config |
| + # because it copes with multiple installed python's, e.g. |
| + # manylinux_2014's /opt/python/cp*-cp*/bin/python*. |
| # |
| - # We try different possibilities and use the last one that |
| - # works. |
| + # But... on non-macos it seems that we should not attempt to specify |
| + # libpython on the link command. The manylinux docker containers |
| + # don't actually contain libpython.so, and it seems that this |
| + # deliberate. And the link command runs ok. |
| # |
| - python_config = None |
| - for pc in ( |
| - f'python3-config', |
| - f'{sys.executable} {sysconfig.get_config_var("srcdir")}/python-config.py', |
| - f'{python_exe}-config', |
| - ): |
| - e = subprocess.run( |
| - f'{pc} --includes', |
| - shell=1, |
| - stdout=subprocess.DEVNULL, |
| - stderr=subprocess.DEVNULL, |
| - check=0, |
| - ).returncode |
| - log1(f'{e=} from {pc!r}.') |
| - if e == 0: |
| - python_config = pc |
| - assert python_config, f'Cannot find python-config' |
| - else: |
| - python_config = f'{python_exe}-config' |
| + python_exe = os.path.realpath( sys.executable) |
| + if darwin(): |
| + # Basic install of dev tools with `xcode-select --install` doesn't |
| + # seem to provide a `python3-config` or similar, but there is a |
| + # `python-config.py` accessible via sysconfig. |
| + # |
| + # We try different possibilities and use the last one that |
| + # works. |
| + # |
| + python_config = None |
| + for pc in ( |
| + f'python3-config', |
| + f'{sys.executable} {sysconfig.get_config_var("srcdir")}/python-config.py', |
| + f'{python_exe}-config', |
| + ): |
| + e = subprocess.run( |
| + f'{pc} --includes', |
| + shell=1, |
| + stdout=subprocess.DEVNULL, |
| + stderr=subprocess.DEVNULL, |
| + check=0, |
| + ).returncode |
| + log1(f'{e=} from {pc!r}.') |
| + if e == 0: |
| + python_config = pc |
| + assert python_config, f'Cannot find python-config' |
| + else: |
| + python_config = f'{python_exe}-config' |
| log1(f'Using {python_config=}.') |
| try: |
| self.includes = run( f'{python_config} --includes', capture=1).strip() |
| diff --git a/setup.py b/setup.py |
| index 23a5c78..4b3b5c7 100755 |
| --- a/setup.py |
| +++ b/setup.py |
| @@ -36,6 +36,9 @@ Environmental variables: |
| PYMUPDF_MUPDF_LIB |
| Directory containing MuPDF libraries, (libmupdf.so, |
| libmupdfcpp.so). |
| + |
| + PYMUPDF_PYTHON_CONFIG |
| + Optional path to python-config. |
| |
| PYMUPDF_SETUP_IMPLEMENTATIONS |
| Must be one of 'a', 'b', 'ab'. If unset we use 'ab'. |
| -- |
| 2.41.0 |
| |