lib_imaging POC

This commit is contained in:
Aleksandr Karpinskii 2024-09-01 23:32:43 +04:00
parent 4c5345cf53
commit 3de19ad305
5 changed files with 23 additions and 23 deletions

View File

@ -73,7 +73,7 @@ on some Python versions.
:mod:`PIL.Image.core` Module :mod:`PIL.Image.core` Module
---------------------------- ----------------------------
.. module:: PIL._imaging .. module:: PIL.lib_imaging
.. module:: PIL.Image.core .. module:: PIL.Image.core
An internal interface module previously known as :mod:`~PIL._imaging`, An internal interface module previously known as :mod:`~PIL._imaging`,

View File

@ -14,11 +14,14 @@ import shutil
import struct import struct
import subprocess import subprocess
import sys import sys
import sysconfig
import warnings import warnings
from setuptools import Extension, setup from setuptools import Extension, setup
from setuptools.command.build_ext import build_ext from setuptools.command.build_ext import build_ext
EXT_SUFFIX, _, _ = sysconfig.get_config_var("EXT_SUFFIX").rpartition(".")
def get_version(): def get_version():
version_file = "src/PIL/_version.py" version_file = "src/PIL/_version.py"
@ -411,7 +414,7 @@ class pil_build_ext(build_ext):
if FUZZING_BUILD: if FUZZING_BUILD:
extension.language = "c++" extension.language = "c++"
extension.extra_link_args = ["--stdlib=libc++"] extension.extra_link_args = ["--stdlib=libc++"]
break return extension
def _remove_extension(self, name): def _remove_extension(self, name):
for extension in self.extensions: for extension in self.extensions:
@ -854,7 +857,7 @@ class pil_build_ext(build_ext):
defs.append(("PILLOW_VERSION", f'"{PILLOW_VERSION}"')) defs.append(("PILLOW_VERSION", f'"{PILLOW_VERSION}"'))
self._update_extension("PIL._imaging", libs, defs) self._update_extension("PIL.lib_imaging", libs, defs)
# #
# additional libraries # additional libraries
@ -891,8 +894,15 @@ class pil_build_ext(build_ext):
self._remove_extension("PIL._imagingcms") self._remove_extension("PIL._imagingcms")
if feature.webp: if feature.webp:
libs = [feature.webp, feature.webp + "mux", feature.webp + "demux"] libs = [
self._update_extension("PIL._webp", libs) f"_imaging{EXT_SUFFIX}",
feature.webp,
feature.webp + "mux",
feature.webp + "demux",
]
ext = self._update_extension("PIL._webp", libs)
ext.library_dirs.append(f"{self.build_lib}/PIL/")
ext.runtime_library_dirs.append("$ORIGIN")
else: else:
self._remove_extension("PIL._webp") self._remove_extension("PIL._webp")
@ -972,7 +982,7 @@ for src_file in _IMAGING:
for src_file in _LIB_IMAGING: for src_file in _LIB_IMAGING:
files.append(os.path.join("src/libImaging", src_file + ".c")) files.append(os.path.join("src/libImaging", src_file + ".c"))
ext_modules = [ ext_modules = [
Extension("PIL._imaging", files), Extension("PIL.lib_imaging", files),
Extension("PIL._imagingft", ["src/_imagingft.c"]), Extension("PIL._imagingft", ["src/_imagingft.c"]),
Extension("PIL._imagingcms", ["src/_imagingcms.c"]), Extension("PIL._imagingcms", ["src/_imagingcms.c"]),
Extension("PIL._webp", ["src/_webp.c"]), Extension("PIL._webp", ["src/_webp.c"]),

View File

@ -12,7 +12,7 @@ from . import Image
from ._deprecate import deprecate from ._deprecate import deprecate
modules = { modules = {
"pil": ("PIL._imaging", "PILLOW_VERSION"), "pil": ("PIL.lib_imaging", "PILLOW_VERSION"),
"tkinter": ("PIL._tkinter_finder", "tk_version"), "tkinter": ("PIL._tkinter_finder", "tk_version"),
"freetype2": ("PIL._imagingft", "freetype2_version"), "freetype2": ("PIL._imagingft", "freetype2_version"),
"littlecms2": ("PIL._imagingcms", "littlecms_version"), "littlecms2": ("PIL._imagingcms", "littlecms_version"),
@ -128,7 +128,7 @@ features: dict[str, tuple[str, str | bool, str | None]] = {
"harfbuzz": ("PIL._imagingft", "HAVE_HARFBUZZ", "harfbuzz_version"), "harfbuzz": ("PIL._imagingft", "HAVE_HARFBUZZ", "harfbuzz_version"),
"libjpeg_turbo": ("PIL._imaging", "HAVE_LIBJPEGTURBO", "libjpeg_turbo_version"), "libjpeg_turbo": ("PIL._imaging", "HAVE_LIBJPEGTURBO", "libjpeg_turbo_version"),
"libimagequant": ("PIL._imaging", "HAVE_LIBIMAGEQUANT", "imagequant_version"), "libimagequant": ("PIL._imaging", "HAVE_LIBIMAGEQUANT", "imagequant_version"),
"xcb": ("PIL._imaging", "HAVE_XCB", None), "xcb": ("PIL.lib_imaging", "HAVE_XCB", None),
} }

View File

@ -4412,12 +4412,12 @@ setup_module(PyObject *m) {
} }
PyMODINIT_FUNC PyMODINIT_FUNC
PyInit__imaging(void) { PyInit_lib_imaging(void) {
PyObject *m; PyObject *m;
static PyModuleDef module_def = { static PyModuleDef module_def = {
PyModuleDef_HEAD_INIT, PyModuleDef_HEAD_INIT,
"_imaging", /* m_name */ "lib_imaging", /* m_name */
NULL, /* m_doc */ NULL, /* m_doc */
-1, /* m_size */ -1, /* m_size */
functions, /* m_methods */ functions, /* m_methods */

View File

@ -16,16 +16,6 @@
#error libwebp 0.5.0 and above is required. Upgrade libwebp or build Pillow with --disable-webp flag #error libwebp 0.5.0 and above is required. Upgrade libwebp or build Pillow with --disable-webp flag
#endif #endif
void
ImagingSectionEnter(ImagingSectionCookie *cookie) {
*cookie = (PyThreadState *)PyEval_SaveThread();
}
void
ImagingSectionLeave(ImagingSectionCookie *cookie) {
PyEval_RestoreThread((PyThreadState *)*cookie);
}
/* -------------------------------------------------------------------- */ /* -------------------------------------------------------------------- */
/* WebP Muxer Error Handling */ /* WebP Muxer Error Handling */
/* -------------------------------------------------------------------- */ /* -------------------------------------------------------------------- */