pillow: sync with Gentoo

This commit is contained in:
Anton Bolshakov 2024-03-16 13:39:44 +08:00
parent 1f3b6fa446
commit a37d18d4a4
No known key found for this signature in database
GPG key ID: 32BDCED870788F04
2 changed files with 68 additions and 9 deletions

View file

@ -0,0 +1,62 @@
From 774d7a570d9f76903de3c3267512b8a7d252c21e Mon Sep 17 00:00:00 2001
From: James Le Cuirot <chewi@gentoo.org>
Date: Fri, 22 Dec 2023 22:38:27 +0000
Subject: [PATCH] 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.
---
setup.py | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index 1bf0bcff558..07163d001fc 100755
--- a/setup.py
+++ b/setup.py
@@ -15,6 +15,7 @@
import struct
import subprocess
import sys
+import sysconfig
import warnings
from setuptools import Extension, setup
@@ -504,8 +505,16 @@ def build_extensions(self):
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

View file

@ -28,7 +28,7 @@ S="${WORKDIR}/${MY_P}"
LICENSE="HPND"
SLOT="0"
KEYWORDS="~alpha amd64 ~arm arm64 ~hppa ~ia64 ~loong ~m68k ~ppc ~ppc64 ~riscv ~s390 ~sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~x64-macos"
KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~m68k ~ppc ppc64 ~riscv ~s390 ~sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~x64-macos"
IUSE="examples imagequant +jpeg jpeg2k lcms raqm test tiff tk truetype webp xcb zlib"
REQUIRED_USE="test? ( jpeg jpeg2k lcms tiff truetype )"
RESTRICT="!test? ( test )"
@ -72,6 +72,11 @@ EPYTEST_DESELECT=(
Tests/test_qt_image_qapplication.py::test_sanity
)
PATCHES=(
# https://github.com/python-pillow/pillow/pull/7634
"${FILESDIR}/${P}-cross.patch"
)
usepil() {
usex "${1}" enable disable
}
@ -95,14 +100,6 @@ python_configure_all() {
$(usepil zlib)_zlib = True
EOF
# setup.py won't let us add the right toolchain paths but it does
# accept additional ones from INCLUDE and LIB so set these. You
# wouldn't normally need these at all as the toolchain should look
# here anyway but it doesn't for this setup.py.
export \
INCLUDE="${ESYSROOT}"/usr/include \
LIB="${ESYSROOT}"/usr/$(get_libdir)
# We have patched in this env var.
tc-export PKG_CONFIG
}