mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-11-01 00:17:27 +03:00
Fix cross-compiling by searching the right lib and include directories
We were previously searching the `{sys.prefix}/lib` and
`{sys.prefix}/include` directories unconditionally. This is problematic
when cross-compiling, as it does not take account of any sysroot where
alternative libraries and headers are located. Adding `-I/usr/include`
causes the build to explode, at least when cross-compiling from 64-bit
to 32-bit.
Python does not officially support cross-compiling, but Gentoo achieves
this by modifying the sysconfig variables like `LIBDIR` and `INCLUDEDIR`
with great results.
Assuming "lib" is bad. 64-bit Linux systems often use lib64, putting
32-bit libraries under lib. You cannot assume that either though, as
pure 64-bit Linux systems may just use lib instead. Things get even
stranger on RISC-V.
The value of `sys.prefix` changes when using a virtualenv. Dependencies
may be installed here, so it does make sense to continue supporting this
case, even if it is incompatible with cross-compiling. Unlike regular
environments, "lib" is generally used for libraries, although a lib64
symlink may also be present.
This commit is contained in:
parent
e9453a7b88
commit
774d7a570d
13
setup.py
13
setup.py
|
|
@ -15,6 +15,7 @@ import shutil
|
|||
import struct
|
||||
import subprocess
|
||||
import sys
|
||||
import sysconfig
|
||||
import warnings
|
||||
|
||||
from setuptools import Extension, setup
|
||||
|
|
@ -504,8 +505,16 @@ class pil_build_ext(build_ext):
|
|||
for d in os.environ[k].split(os.path.pathsep):
|
||||
_add_directory(library_dirs, d)
|
||||
|
||||
_add_directory(library_dirs, os.path.join(sys.prefix, "lib"))
|
||||
_add_directory(include_dirs, os.path.join(sys.prefix, "include"))
|
||||
_add_directory(
|
||||
library_dirs,
|
||||
(sys.prefix == sys.base_prefix and sysconfig.get_config_var("LIBDIR"))
|
||||
or os.path.join(sys.prefix, "lib"),
|
||||
)
|
||||
_add_directory(
|
||||
include_dirs,
|
||||
(sys.prefix == sys.base_prefix and sysconfig.get_config_var("INCLUDEDIR"))
|
||||
or os.path.join(sys.prefix, "include"),
|
||||
)
|
||||
|
||||
#
|
||||
# add platform directories
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user