py-pillow: add v11.0.0 (#47010)

This commit is contained in:
Adam J. Stewart 2024-10-16 18:35:30 +02:00 committed by GitHub
parent fb53d31d09
commit 49489a4815
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -9,17 +9,18 @@
class PyPillowBase(PythonPackage):
"""Base class for Pillow and its fork Pillow-SIMD."""
maintainers("adamjstewart")
license("HPND")
maintainers("adamjstewart")
provides("pil")
# These defaults correspond to Pillow defaults
# https://pillow.readthedocs.io/en/stable/installation/building-from-source.html
VARIANTS_IN_SETUP_CFG = (
VARIANTS = (
"zlib",
"jpeg",
"tiff",
"freetype",
"raqm",
"lcms",
"webp",
"webpmux",
@ -31,18 +32,19 @@ class PyPillowBase(PythonPackage):
variant("jpeg", default=True, description="JPEG functionality")
variant("tiff", default=False, description="Compressed TIFF functionality")
variant("freetype", default=False, description="Type related services")
variant("raqm", when="@8.2:+freetype", default=False, description="RAQM support")
variant("lcms", default=False, description="Color management")
variant("webp", default=False, description="WebP format")
variant("webpmux", when="+webp", default=False, description="WebP metadata")
variant("webpmux", when="@:10+webp", default=False, description="WebP metadata")
variant("jpeg2000", default=False, description="JPEG 2000 functionality")
variant("imagequant", when="@3.3:", default=False, description="Improved color quantization")
variant("xcb", when="@7.1:", default=False, description="X11 screengrab support")
variant("raqm", when="@8.2:", default=False, description="RAQM support")
# Required dependencies
# https://pillow.readthedocs.io/en/stable/installation/python-support.html
with default_args(type=("build", "link", "run")):
depends_on("python@3.8:3.13", when="@10.4:")
depends_on("python@3.9:3.13", when="@11:")
depends_on("python@3.8:3.13", when="@10.4")
depends_on("python@3.8:3.12", when="@10.1:10.3")
depends_on("python@3.8:3.11", when="@10.0")
depends_on("python@3.7:3.11", when="@9.3:9.5")
@ -54,6 +56,7 @@ class PyPillowBase(PythonPackage):
# pyproject.toml
with default_args(type="build"):
depends_on("py-pip@22.1:", when="@10:")
depends_on("py-setuptools@67.8:", when="@10:")
depends_on("py-setuptools")
@ -63,21 +66,28 @@ class PyPillowBase(PythonPackage):
depends_on("jpeg", when="+jpeg")
depends_on("libtiff", when="+tiff")
depends_on("freetype", when="+freetype")
depends_on("libraqm", when="+raqm")
depends_on("lcms@2:", when="+lcms")
depends_on("libwebp", when="+webp")
depends_on("libwebp+libwebpmux+libwebpdemux", when="+webpmux")
depends_on("openjpeg", when="+jpeg2000")
depends_on("libimagequant", when="+imagequant")
depends_on("libxcb", when="+xcb")
depends_on("libraqm", when="+raqm")
# Conflicting options
conflicts("+raqm", when="~freetype")
@when("@10:")
def config_settings(self, spec, prefix):
settings = {"parallel": make_jobs}
for variant in self.VARIANTS:
if spec.satisfies(f"+{variant}"):
settings[variant] = "enable"
elif spec.satisfies(f"~{variant}"):
settings[variant] = "disable"
return settings
def patch(self):
"""Patch setup.py to provide library and include directories
for dependencies."""
"""Patch setup.py to provide library and include directories for dependencies."""
library_dirs = []
include_dirs = []
for dep in self.spec.dependencies(deptype="link"):
@ -86,21 +96,40 @@ def patch(self):
include_dirs.extend(query.headers.directories)
setup = FileFilter("setup.py")
setup.filter("library_dirs = []", "library_dirs = {0}".format(library_dirs), string=True)
setup.filter("include_dirs = []", "include_dirs = {0}".format(include_dirs), string=True)
if self.version >= Version("11"):
setup.filter(
"library_dirs: list[str] = []",
"library_dirs = {0}".format(library_dirs),
string=True,
)
setup.filter(
"include_dirs: list[str] = []",
"include_dirs = {0}".format(include_dirs),
string=True,
)
else:
setup.filter(
"library_dirs = []", "library_dirs = {0}".format(library_dirs), string=True
)
setup.filter(
"include_dirs = []", "include_dirs = {0}".format(include_dirs), string=True
)
def variant_to_cfg(variant):
able = "enable" if "+" + variant in self.spec else "disable"
return "{0}_{1}=1\n".format(able, variant)
if self.spec.satisfies("@:9"):
with open("setup.cfg", "a") as setup:
setup.write("[build_ext]\n")
for variant in self.VARIANTS_IN_SETUP_CFG:
setup.write(variant_to_cfg(variant))
def variant_to_cfg(variant):
able = "enable" if "+" + variant in self.spec else "disable"
return "{0}_{1}=1\n".format(able, variant)
setup.write("rpath={0}\n".format(":".join(self.rpath)))
setup.write("[install]\n")
with open("setup.cfg", "a") as setup:
setup.write("[build_ext]\n")
for variant in self.VARIANTS:
setup.write(variant_to_cfg(variant))
setup.write("rpath={0}\n".format(":".join(self.rpath)))
setup.write("[install]\n")
@when("@:9")
def setup_build_environment(self, env):
env.set("MAX_CONCURRENCY", make_jobs)
@ -114,6 +143,7 @@ class PyPillow(PyPillowBase):
homepage = "https://python-pillow.org/"
pypi = "pillow/pillow-10.2.0.tar.gz"
version("11.0.0", sha256="72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739")
version("10.4.0", sha256="166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06")
version("10.3.0", sha256="9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d")
version("10.2.0", sha256="e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e")
@ -135,9 +165,10 @@ class PyPillow(PyPillowBase):
version("6.2.2", sha256="db9ff0c251ed066d367f53b64827cc9e18ccea001b986d08c265e53625dab950")
version("6.2.1", sha256="bf4e972a88f8841d8fdc6db1a75e0f8d763e66e3754b03006cbc3854d89f1cb1")
depends_on("c", type="build") # generated
depends_on("c", type="build")
for ver in [
"11.0.0",
"10.4.0",
"10.3.0",
"10.2.0",