diff mbox

[v4] package/python-pillow: new package

Message ID 1465731524-4109-1-git-send-email-angelo.compagnucci@gmail.com
State Superseded
Headers show

Commit Message

Angelo Compagnucci June 12, 2016, 11:38 a.m. UTC
This patch adds python pillow, the friendly python fork, it
includes a backported patch to disable configuration platfom guessing.

Signed-off-by: Angelo Compagnucci <angelo.compagnucci@gmail.com>
---
 package/Config.in                                  |  1 +
 ...y-add-option-to-disable-platform-guessing.patch | 63 ++++++++++++++++++++++
 package/python-pillow/Config.in                    | 12 +++++
 package/python-pillow/python-pillow.hash           |  2 +
 package/python-pillow/python-pillow.mk             | 39 ++++++++++++++
 5 files changed, 117 insertions(+)
 create mode 100644 package/python-pillow/0001-setup.py-add-option-to-disable-platform-guessing.patch
 create mode 100644 package/python-pillow/Config.in
 create mode 100644 package/python-pillow/python-pillow.hash
 create mode 100644 package/python-pillow/python-pillow.mk

Comments

Peter Korsgaard June 13, 2016, 2:48 p.m. UTC | #1
>>>>> "Angelo" == Angelo Compagnucci <angelo.compagnucci@gmail.com> writes:

 > This patch adds python pillow, the friendly python fork, it
 > includes a backported patch to disable configuration platfom guessing.

It is afaik a fork of the python imaging library, not of python.

 > Signed-off-by: Angelo Compagnucci <angelo.compagnucci@gmail.com>
 > ---
 >  package/Config.in                                  |  1 +
 >  ...y-add-option-to-disable-platform-guessing.patch | 63 ++++++++++++++++++++++
 >  package/python-pillow/Config.in                    | 12 +++++
 >  package/python-pillow/python-pillow.hash           |  2 +
 >  package/python-pillow/python-pillow.mk             | 39 ++++++++++++++
 >  5 files changed, 117 insertions(+)
 >  create mode 100644 package/python-pillow/0001-setup.py-add-option-to-disable-platform-guessing.patch
 >  create mode 100644 package/python-pillow/Config.in
 >  create mode 100644 package/python-pillow/python-pillow.hash
 >  create mode 100644 package/python-pillow/python-pillow.mk

 > +++ b/package/python-pillow/python-pillow.hash
 > @@ -0,0 +1,2 @@
 > +https://pypi.python.org/pypi?:action=show_md5&digest=7cfd093c11205d9e2ebe3c51dfcad510
 > +md5 7cfd093c11205d9e2ebe3c51dfcad510  Pillow-3.2.0.tar.gz

Please also provide a stronger hash like sha256.

> diff --git a/package/python-pillow/python-pillow.mk b/package/python-pillow/python-pillow.mk
 > new file mode 100644
 > index 0000000..f186ab6
 > --- /dev/null
 > +++ b/package/python-pillow/python-pillow.mk
 > @@ -0,0 +1,39 @@
 > +################################################################################
 > +#
 > +# python-pillow
 > +#
 > +################################################################################
 > +
 > +PYTHON_PILLOW_VERSION = 3.2.0
 > +PYTHON_PILLOW_SOURCE = Pillow-$(PYTHON_PILLOW_VERSION).tar.gz
 > +PYTHON_PILLOW_SITE = https://pypi.python.org/packages/source/P/Pillow
 > +PYTHON_PILLOW_SETUP_TYPE = setuptools
 > +PYTHON_PILLOW_DEPENDENCIES = $(if $(BR2_PACKAGE_JPEG),jpeg) \
 > +      $(if $(BR2_PACKAGE_ZLIB),zlib) \
 > +      $(if $(BR2_PACKAGE_TIFF),tiff) \
 > +      $(if $(BR2_PACKAGE_FREETYPE),freetype) \
 > +      $(if $(BR2_PACKAGE_WEBP),webp) \
 > +      $(if $(BR2_PACKAGE_OPENJPEG),openjpeg)
 > +
 > +PYTHON_PILLOW_BUILD_OPTS += --disable-platform-guessing
 > +PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_JPEG),--enable-jpeg,--disable-jpeg)
 > +PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_ZLIB),--enable-zlib,--disable-zlib)
 > +PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_TIFF),--enable-tiff,--disable-tiff)
 > +PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_FREETYPE),--enable-freetype,--disable-freetype)
 > +PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_WEBP),--enable-webp,--disable-webp)
 > +PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_OPENJPEG),--enable-jpeg2000,--disable-jpeg2000)
 > +
 > +PYTHON_PILLOW_INSTALL_TARGET_OPTS += $(PYTHON_PILLOW_BUILD_OPTS)

If these are build options, why are you passing them to the install
step?

Why are you using += and not just = ? The default value of
_INSTALL_TARGET_OPTS will only be set when python-package is evaluated
below, so this will not append to the default.

 > +
 > +PYTHON_PILLOW_BUILD_CMDS = (cd $(PYTHON_PILLOW_BUILDDIR); \
 > +		$(PYTHON_PILLOW_BASE_ENV) $(PYTHON_PILLOW_ENV) \
 > +		$(PYTHON_PILLOW_PYTHON_INTERPRETER) setup.py build_ext \
 > +		$(PYTHON_PILLOW_BASE_BUILD_OPTS) $(PYTHON_PILLOW_BUILD_OPTS))

Isn't this identical to the default build commands (with
PYTHON_PILLOW_BASE_BUILD_TGT = build_ext)?

 > +
 > +PYTHON_PILLOW_INSTALL_TARGET_CMDS = (cd $(PYTHON_PILLOW_BUILDDIR); \
 > +		$(PYTHON_PILLOW_BASE_ENV) $(PYTHON_PILLOW_ENV) \
 > +		$(PYTHON_PILLOW_PYTHON_INTERPRETER) setup.py build_ext \
 > +		$(PYTHON_PILLOW_INSTALL_TARGET_OPTS) install \
 > +		$(PYTHON_PILLOW_BASE_INSTALL_TARGET_OPTS))
 > +

And this to the default target install. Why do you need to run build_ext
again?
Angelo Compagnucci June 13, 2016, 4:05 p.m. UTC | #2
Dear Peter Korsgaard,

2016-06-13 16:48 GMT+02:00 Peter Korsgaard <peter@korsgaard.com>:
>>>>>> "Angelo" == Angelo Compagnucci <angelo.compagnucci@gmail.com> writes:
>
>  > This patch adds python pillow, the friendly python fork, it
>  > includes a backported patch to disable configuration platfom guessing.
>
> It is afaik a fork of the python imaging library, not of python.

Ops!

>  > Signed-off-by: Angelo Compagnucci <angelo.compagnucci@gmail.com>
>  > ---
>  >  package/Config.in                                  |  1 +
>  >  ...y-add-option-to-disable-platform-guessing.patch | 63 ++++++++++++++++++++++
>  >  package/python-pillow/Config.in                    | 12 +++++
>  >  package/python-pillow/python-pillow.hash           |  2 +
>  >  package/python-pillow/python-pillow.mk             | 39 ++++++++++++++
>  >  5 files changed, 117 insertions(+)
>  >  create mode 100644 package/python-pillow/0001-setup.py-add-option-to-disable-platform-guessing.patch
>  >  create mode 100644 package/python-pillow/Config.in
>  >  create mode 100644 package/python-pillow/python-pillow.hash
>  >  create mode 100644 package/python-pillow/python-pillow.mk
>
>  > +++ b/package/python-pillow/python-pillow.hash
>  > @@ -0,0 +1,2 @@
>  > +https://pypi.python.org/pypi?:action=show_md5&digest=7cfd093c11205d9e2ebe3c51dfcad510
>  > +md5 7cfd093c11205d9e2ebe3c51dfcad510  Pillow-3.2.0.tar.gz
>
> Please also provide a stronger hash like sha256.

Right!

>> diff --git a/package/python-pillow/python-pillow.mk b/package/python-pillow/python-pillow.mk
>  > new file mode 100644
>  > index 0000000..f186ab6
>  > --- /dev/null
>  > +++ b/package/python-pillow/python-pillow.mk
>  > @@ -0,0 +1,39 @@
>  > +################################################################################
>  > +#
>  > +# python-pillow
>  > +#
>  > +################################################################################
>  > +
>  > +PYTHON_PILLOW_VERSION = 3.2.0
>  > +PYTHON_PILLOW_SOURCE = Pillow-$(PYTHON_PILLOW_VERSION).tar.gz
>  > +PYTHON_PILLOW_SITE = https://pypi.python.org/packages/source/P/Pillow
>  > +PYTHON_PILLOW_SETUP_TYPE = setuptools
>  > +PYTHON_PILLOW_DEPENDENCIES = $(if $(BR2_PACKAGE_JPEG),jpeg) \
>  > +      $(if $(BR2_PACKAGE_ZLIB),zlib) \
>  > +      $(if $(BR2_PACKAGE_TIFF),tiff) \
>  > +      $(if $(BR2_PACKAGE_FREETYPE),freetype) \
>  > +      $(if $(BR2_PACKAGE_WEBP),webp) \
>  > +      $(if $(BR2_PACKAGE_OPENJPEG),openjpeg)
>  > +
>  > +PYTHON_PILLOW_BUILD_OPTS += --disable-platform-guessing
>  > +PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_JPEG),--enable-jpeg,--disable-jpeg)
>  > +PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_ZLIB),--enable-zlib,--disable-zlib)
>  > +PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_TIFF),--enable-tiff,--disable-tiff)
>  > +PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_FREETYPE),--enable-freetype,--disable-freetype)
>  > +PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_WEBP),--enable-webp,--disable-webp)
>  > +PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_OPENJPEG),--enable-jpeg2000,--disable-jpeg2000)
>  > +
>  > +PYTHON_PILLOW_INSTALL_TARGET_OPTS += $(PYTHON_PILLOW_BUILD_OPTS)
>
> If these are build options, why are you passing them to the install
> step?

Cause this package as a strange build/install system and requires the
same set of option both in build and install steps.

> Why are you using += and not just = ? The default value of
> _INSTALL_TARGET_OPTS will only be set when python-package is evaluated
> below, so this will not append to the default.

I've not dug so deep inside python-package handling, so I used +=.

>  > +
>  > +PYTHON_PILLOW_BUILD_CMDS = (cd $(PYTHON_PILLOW_BUILDDIR); \
>  > +            $(PYTHON_PILLOW_BASE_ENV) $(PYTHON_PILLOW_ENV) \
>  > +            $(PYTHON_PILLOW_PYTHON_INTERPRETER) setup.py build_ext \
>  > +            $(PYTHON_PILLOW_BASE_BUILD_OPTS) $(PYTHON_PILLOW_BUILD_OPTS))
>
> Isn't this identical to the default build commands (with
> PYTHON_PILLOW_BASE_BUILD_TGT = build_ext)?

In a previous review [1] was said to me to rewrite both BUILD_CMDS and
INSTALL_TARGET_CMDS instead of modifying PYTHON_PILLOW_BASE_BUILD_TGT
cause this is the first package to have such need.

>  > +
>  > +PYTHON_PILLOW_INSTALL_TARGET_CMDS = (cd $(PYTHON_PILLOW_BUILDDIR); \
>  > +            $(PYTHON_PILLOW_BASE_ENV) $(PYTHON_PILLOW_ENV) \
>  > +            $(PYTHON_PILLOW_PYTHON_INTERPRETER) setup.py build_ext \
>  > +            $(PYTHON_PILLOW_INSTALL_TARGET_OPTS) install \
>  > +            $(PYTHON_PILLOW_BASE_INSTALL_TARGET_OPTS))
>  > +
>
> And this to the default target install. Why do you need to run build_ext
> again?

Cause the install step of this package doesn't work if called without build_ext.

[1] http://article.gmane.org/gmane.comp.lib.uclibc.buildroot/141233/match=pillow

Sincerely, Angelo

>
> --
> Bye, Peter Korsgaard
diff mbox

Patch

diff --git a/package/Config.in b/package/Config.in
index 3d99d72..a26043d 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -704,6 +704,7 @@  menu "External python modules"
 	source "package/python-pathtools/Config.in"
 	source "package/python-pathvalidate/Config.in"
 	source "package/python-pexpect/Config.in"
+	source "package/python-pillow/Config.in"
 	source "package/python-posix-ipc/Config.in"
 	source "package/python-protobuf/Config.in"
 	source "package/python-psutil/Config.in"
diff --git a/package/python-pillow/0001-setup.py-add-option-to-disable-platform-guessing.patch b/package/python-pillow/0001-setup.py-add-option-to-disable-platform-guessing.patch
new file mode 100644
index 0000000..a1a4cbe
--- /dev/null
+++ b/package/python-pillow/0001-setup.py-add-option-to-disable-platform-guessing.patch
@@ -0,0 +1,63 @@ 
+From 3344eff32427f1d10f3ca82ca4344c501a1a2055 Mon Sep 17 00:00:00 2001
+From: Angelo Compagnucci <angelo.compagnucci@gmail.com>
+Date: Sun, 12 Jun 2016 12:06:59 +0200
+Subject: [PATCH] setup.py: add option to disable platform guessing
+
+When cross-compiling (ex on Buildroot) platform guessing is not needed
+cause the environment is correctly built externally.
+This patch adds an option to disable platform guessing on Linux.
+---
+ setup.py | 19 ++++++++++++++-----
+ 1 file changed, 14 insertions(+), 5 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 0f74a40..f1eac1e 100644
+--- a/setup.py
++++ b/setup.py
+@@ -121,9 +121,13 @@ class pil_build_ext(build_ext):
+         ('disable-%s' % x, None, 'Disable support for %s' % x) for x in feature
+     ] + [
+         ('enable-%s' % x, None, 'Enable support for %s' % x) for x in feature
++    ] + [
++        ('disable-platform-guessing', None, 'Disable platform guessing on Linux'),
++        ('debug', None, 'Debug logging')
+     ]
+ 
+     def initialize_options(self):
++        self.disable_platform_guessing = None
+         build_ext.initialize_options(self)
+         for x in self.feature:
+             setattr(self, 'disable_%s' % x, None)
+@@ -190,7 +194,10 @@ class pil_build_ext(build_ext):
+         #
+         # add platform directories
+ 
+-        if sys.platform == "cygwin":
++        if self.disable_platform_guessing:
++            pass
++        
++        elif sys.platform == "cygwin":
+             # pythonX.Y.dll.a is in the /usr/lib/pythonX.Y/config directory
+             _add_directory(library_dirs,
+                            os.path.join("/usr/lib", "python%s" %
+@@ -352,11 +359,13 @@ class pil_build_ext(build_ext):
+                 _add_directory(include_dirs, tcl_dir)
+ 
+         # standard locations
+-        _add_directory(library_dirs, "/usr/local/lib")
+-        _add_directory(include_dirs, "/usr/local/include")
++        if not self.disable_platform_guessing:
++            _add_directory(library_dirs, "/usr/local/lib")
++            _add_directory(include_dirs, "/usr/local/include")
++
++            _add_directory(library_dirs, "/usr/lib")
++            _add_directory(include_dirs, "/usr/include")
+ 
+-        _add_directory(library_dirs, "/usr/lib")
+-        _add_directory(include_dirs, "/usr/include")
+ 
+         # on Windows, look for the OpenJPEG libraries in the location that
+         # the official installer puts them
+-- 
+1.9.1
+
diff --git a/package/python-pillow/Config.in b/package/python-pillow/Config.in
new file mode 100644
index 0000000..d5c3809
--- /dev/null
+++ b/package/python-pillow/Config.in
@@ -0,0 +1,12 @@ 
+config BR2_PACKAGE_PYTHON_PILLOW
+	bool "python-pillow"
+	help
+	  Pillow is the "friendly" PIL fork by Alex Clark and Contributors. PIL is
+	  the Python Imaging Library by Fredrik Lundh and Contributors.
+
+	  Pillow relies on external libraries to provide support various
+	  image formats. Select the corresponding package(s) to get this
+	  support. Pillow can use jpeg, zlib (for PNG), tiff, freetype, webp,
+	  and openjpeg (JPEG-2000).
+
+	  https://pypi.python.org/pypi/Pillow/
diff --git a/package/python-pillow/python-pillow.hash b/package/python-pillow/python-pillow.hash
new file mode 100644
index 0000000..0fc349c
--- /dev/null
+++ b/package/python-pillow/python-pillow.hash
@@ -0,0 +1,2 @@ 
+https://pypi.python.org/pypi?:action=show_md5&digest=7cfd093c11205d9e2ebe3c51dfcad510
+md5 7cfd093c11205d9e2ebe3c51dfcad510  Pillow-3.2.0.tar.gz
diff --git a/package/python-pillow/python-pillow.mk b/package/python-pillow/python-pillow.mk
new file mode 100644
index 0000000..f186ab6
--- /dev/null
+++ b/package/python-pillow/python-pillow.mk
@@ -0,0 +1,39 @@ 
+################################################################################
+#
+# python-pillow
+#
+################################################################################
+
+PYTHON_PILLOW_VERSION = 3.2.0
+PYTHON_PILLOW_SOURCE = Pillow-$(PYTHON_PILLOW_VERSION).tar.gz
+PYTHON_PILLOW_SITE = https://pypi.python.org/packages/source/P/Pillow
+PYTHON_PILLOW_SETUP_TYPE = setuptools
+PYTHON_PILLOW_DEPENDENCIES = $(if $(BR2_PACKAGE_JPEG),jpeg) \
+      $(if $(BR2_PACKAGE_ZLIB),zlib) \
+      $(if $(BR2_PACKAGE_TIFF),tiff) \
+      $(if $(BR2_PACKAGE_FREETYPE),freetype) \
+      $(if $(BR2_PACKAGE_WEBP),webp) \
+      $(if $(BR2_PACKAGE_OPENJPEG),openjpeg)
+
+PYTHON_PILLOW_BUILD_OPTS += --disable-platform-guessing
+PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_JPEG),--enable-jpeg,--disable-jpeg)
+PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_ZLIB),--enable-zlib,--disable-zlib)
+PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_TIFF),--enable-tiff,--disable-tiff)
+PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_FREETYPE),--enable-freetype,--disable-freetype)
+PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_WEBP),--enable-webp,--disable-webp)
+PYTHON_PILLOW_BUILD_OPTS += $(if $(BR2_PACKAGE_OPENJPEG),--enable-jpeg2000,--disable-jpeg2000)
+
+PYTHON_PILLOW_INSTALL_TARGET_OPTS += $(PYTHON_PILLOW_BUILD_OPTS)
+
+PYTHON_PILLOW_BUILD_CMDS = (cd $(PYTHON_PILLOW_BUILDDIR); \
+		$(PYTHON_PILLOW_BASE_ENV) $(PYTHON_PILLOW_ENV) \
+		$(PYTHON_PILLOW_PYTHON_INTERPRETER) setup.py build_ext \
+		$(PYTHON_PILLOW_BASE_BUILD_OPTS) $(PYTHON_PILLOW_BUILD_OPTS))
+
+PYTHON_PILLOW_INSTALL_TARGET_CMDS = (cd $(PYTHON_PILLOW_BUILDDIR); \
+		$(PYTHON_PILLOW_BASE_ENV) $(PYTHON_PILLOW_ENV) \
+		$(PYTHON_PILLOW_PYTHON_INTERPRETER) setup.py build_ext \
+		$(PYTHON_PILLOW_INSTALL_TARGET_OPTS) install \
+		$(PYTHON_PILLOW_BASE_INSTALL_TARGET_OPTS))
+
+$(eval $(python-package))