Skip to content

Commit bc349e3

Browse files
committed
lib_imaging POC
1 parent 4c5345c commit bc349e3

File tree

5 files changed

+24
-23
lines changed

5 files changed

+24
-23
lines changed

docs/reference/internal_modules.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ on some Python versions.
7373
:mod:`PIL.Image.core` Module
7474
----------------------------
7575

76-
.. module:: PIL._imaging
76+
.. module:: PIL.lib_imaging
7777
.. module:: PIL.Image.core
7878

7979
An internal interface module previously known as :mod:`~PIL._imaging`,

setup.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,16 @@
1414
import struct
1515
import subprocess
1616
import sys
17+
import sysconfig
1718
import warnings
1819

1920
from setuptools import Extension, setup
2021
from setuptools.command.build_ext import build_ext
2122

2223

24+
EXT_SUFFIX, _, _ = sysconfig.get_config_var("EXT_SUFFIX").rpartition(".")
25+
26+
2327
def get_version():
2428
version_file = "src/PIL/_version.py"
2529
with open(version_file, encoding="utf-8") as f:
@@ -411,7 +415,7 @@ def _update_extension(self, name, libraries, define_macros=None, sources=None):
411415
if FUZZING_BUILD:
412416
extension.language = "c++"
413417
extension.extra_link_args = ["--stdlib=libc++"]
414-
break
418+
return extension
415419

416420
def _remove_extension(self, name):
417421
for extension in self.extensions:
@@ -854,7 +858,7 @@ def build_extensions(self):
854858

855859
defs.append(("PILLOW_VERSION", f'"{PILLOW_VERSION}"'))
856860

857-
self._update_extension("PIL._imaging", libs, defs)
861+
self._update_extension("PIL.lib_imaging", libs, defs)
858862

859863
#
860864
# additional libraries
@@ -891,8 +895,15 @@ def build_extensions(self):
891895
self._remove_extension("PIL._imagingcms")
892896

893897
if feature.webp:
894-
libs = [feature.webp, feature.webp + "mux", feature.webp + "demux"]
895-
self._update_extension("PIL._webp", libs)
898+
libs = [
899+
f"_imaging{EXT_SUFFIX}",
900+
feature.webp,
901+
feature.webp + "mux",
902+
feature.webp + "demux",
903+
]
904+
ext = self._update_extension("PIL._webp", libs)
905+
ext.library_dirs.append(f"{self.build_lib}/PIL/")
906+
ext.runtime_library_dirs.append("$ORIGIN")
896907
else:
897908
self._remove_extension("PIL._webp")
898909

@@ -972,7 +983,7 @@ def debug_build():
972983
for src_file in _LIB_IMAGING:
973984
files.append(os.path.join("src/libImaging", src_file + ".c"))
974985
ext_modules = [
975-
Extension("PIL._imaging", files),
986+
Extension("PIL.lib_imaging", files),
976987
Extension("PIL._imagingft", ["src/_imagingft.c"]),
977988
Extension("PIL._imagingcms", ["src/_imagingcms.c"]),
978989
Extension("PIL._webp", ["src/_webp.c"]),

src/PIL/features.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from ._deprecate import deprecate
1313

1414
modules = {
15-
"pil": ("PIL._imaging", "PILLOW_VERSION"),
15+
"pil": ("PIL.lib_imaging", "PILLOW_VERSION"),
1616
"tkinter": ("PIL._tkinter_finder", "tk_version"),
1717
"freetype2": ("PIL._imagingft", "freetype2_version"),
1818
"littlecms2": ("PIL._imagingcms", "littlecms_version"),
@@ -128,7 +128,7 @@ def get_supported_codecs() -> list[str]:
128128
"harfbuzz": ("PIL._imagingft", "HAVE_HARFBUZZ", "harfbuzz_version"),
129129
"libjpeg_turbo": ("PIL._imaging", "HAVE_LIBJPEGTURBO", "libjpeg_turbo_version"),
130130
"libimagequant": ("PIL._imaging", "HAVE_LIBIMAGEQUANT", "imagequant_version"),
131-
"xcb": ("PIL._imaging", "HAVE_XCB", None),
131+
"xcb": ("PIL.lib_imaging", "HAVE_XCB", None),
132132
}
133133

134134

src/_imaging.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4412,15 +4412,15 @@ setup_module(PyObject *m) {
44124412
}
44134413

44144414
PyMODINIT_FUNC
4415-
PyInit__imaging(void) {
4415+
PyInit_lib_imaging(void) {
44164416
PyObject *m;
44174417

44184418
static PyModuleDef module_def = {
44194419
PyModuleDef_HEAD_INIT,
4420-
"_imaging", /* m_name */
4421-
NULL, /* m_doc */
4422-
-1, /* m_size */
4423-
functions, /* m_methods */
4420+
"lib_imaging", /* m_name */
4421+
NULL, /* m_doc */
4422+
-1, /* m_size */
4423+
functions, /* m_methods */
44244424
};
44254425

44264426
m = PyModule_Create(&module_def);

src/_webp.c

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,6 @@
1616
#error libwebp 0.5.0 and above is required. Upgrade libwebp or build Pillow with --disable-webp flag
1717
#endif
1818

19-
void
20-
ImagingSectionEnter(ImagingSectionCookie *cookie) {
21-
*cookie = (PyThreadState *)PyEval_SaveThread();
22-
}
23-
24-
void
25-
ImagingSectionLeave(ImagingSectionCookie *cookie) {
26-
PyEval_RestoreThread((PyThreadState *)*cookie);
27-
}
28-
2919
/* -------------------------------------------------------------------- */
3020
/* WebP Muxer Error Handling */
3121
/* -------------------------------------------------------------------- */

0 commit comments

Comments
 (0)