build Mode.c as a common library

This commit is contained in:
eyedav 2025-07-19 17:02:00 +02:00
parent e483a976d2
commit 28adda9299

View File

@ -103,7 +103,6 @@ _LIB_IMAGING = (
"JpegDecode",
"JpegEncode",
"Matrix",
"Mode",
"ModeFilter",
"Negative",
"Offset",
@ -1008,17 +1007,6 @@ class pil_build_ext(build_ext):
self.summary_report(feature)
def build_extension(self, ext):
# Append the extension name (not including "PIL.") to the temp build directory
# so that each module builds to its own directory. We need to make a (shallow)
# copy of 'self' here so that we don't overwrite this value when running in
# parallel.
import copy
self_copy = copy.copy(self)
self_copy.build_temp = os.path.join(self.build_temp, ext.name[4:])
build_ext.build_extension(self_copy, ext)
def summary_report(self, feature: ext_feature) -> None:
print("-" * 68)
print("PIL SETUP SUMMARY")
@ -1084,16 +1072,20 @@ def debug_build() -> bool:
return hasattr(sys, "gettotalrefcount") or FUZZING_BUILD
libraries = [
("pil_imaging_mode", {"sources": ["src/libImaging/Mode.c"]}),
]
files: list[str | os.PathLike[str]] = ["src/_imaging.c"]
for src_file in _IMAGING:
files.append("src/" + src_file + ".c")
for src_file in _LIB_IMAGING:
files.append(os.path.join("src/libImaging", src_file + ".c"))
ext_modules = [
Extension("PIL._imaging", files),
Extension("PIL._imagingft", ["src/_imagingft.c", "src/libImaging/Mode.c"]),
Extension("PIL._imaging", files, libraries=["pil_imaging_mode"]),
Extension("PIL._imagingft", ["src/_imagingft.c"], libraries=["pil_imaging_mode"]),
Extension("PIL._imagingcms", ["src/_imagingcms.c"]),
Extension("PIL._webp", ["src/_webp.c", "src/libImaging/Mode.c"]),
Extension("PIL._webp", ["src/_webp.c"], libraries=["pil_imaging_mode"]),
Extension("PIL._avif", ["src/_avif.c"]),
Extension("PIL._imagingtk", ["src/_imagingtk.c", "src/Tk/tkImaging.c"]),
Extension("PIL._imagingmath", ["src/_imagingmath.c"]),
@ -1105,6 +1097,7 @@ try:
setup(
cmdclass={"build_ext": pil_build_ext},
ext_modules=ext_modules,
libraries=libraries,
zip_safe=not (debug_build() or PLATFORM_MINGW),
)
except RequiredDependencyException as err: