diff mbox series

[v6,1/1] python-kivy: new package

Message ID 20190626211825.27922-1-joseph.kogut@gmail.com
State Changes Requested
Headers show
Series [v6,1/1] python-kivy: new package | expand

Commit Message

Joseph Kogut June 26, 2019, 9:18 p.m. UTC
Signed-off-by: Joseph Kogut <joseph.kogut@gmail.com>
---

Changes v5 -> v6:
- Bump to version 1.11.1
- Enable building with OpenGL ES and SDL2 window provider


Changes v4 -> v5:
- Explicitly disable unavailable optional features
- Fix DEVELOPERS


Changes v3 -> v4:
- Remove dependency on glibc (tested on aarch64 w/ musl and X11 window
  provider, sdl2 still segfaults)
- Fix dependency on xlib_libX11 and xlib_libXrender


Changes v2 -> v3:
- Bump version to 1.10.1
- Remove upstreamed patch to remove getconf dependency
- Split config comments for OpenGL and glibc deps
- check-packages fixes


Changes v1 -> v2:
- Remove unnecessary build dependencies (suggested by Yegor)
- Require toolchain w/ glibc, as Kivy builds with others, but
  seems to segfault with (at least) musl.


 DEVELOPERS                           |  1 +
 package/Config.in                    |  1 +
 package/python-kivy/Config.in        | 26 ++++++++++++
 package/python-kivy/python-kivy.hash |  4 ++
 package/python-kivy/python-kivy.mk   | 62 ++++++++++++++++++++++++++++
 5 files changed, 94 insertions(+)
 create mode 100644 package/python-kivy/Config.in
 create mode 100644 package/python-kivy/python-kivy.hash
 create mode 100644 package/python-kivy/python-kivy.mk

--
2.22.0

Comments

Thomas Petazzoni Aug. 3, 2019, 10:10 p.m. UTC | #1
Hello Joseph,

Thanks for this new version!

On Wed, 26 Jun 2019 14:18:25 -0700
Joseph Kogut <joseph.kogut@gmail.com> wrote:

> Signed-off-by: Joseph Kogut <joseph.kogut@gmail.com>

First of all, it doesn't build here. The following defconfig:

BR2_arm=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-full-2019.05.1.tar.bz2"
BR2_TOOLCHAIN_EXTERNAL_GCC_4_9=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_14=y
BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_INIT_NONE=y
BR2_SYSTEM_BIN_SH_NONE=y
# BR2_PACKAGE_BUSYBOX is not set
BR2_PACKAGE_RPI_USERLAND=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON_KIVY=y
# BR2_TARGET_ROOTFS_TAR is not set

gives the following errors:

>>> python-kivy 1.11.1 Building
(cd /home/thomas/projets/buildroot/output/build/python-kivy-1.11.1//; PATH="/home/thomas/projets/buildroot/output/host/bin:/home/thomas/projets/buildroot/output/host/sbin:/home/thomas/sys/bin/:/usr/libexec/python3-sphinx:/usr/share/Modules/bin:/usr/lib64/ccache:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/home/thomas/.rvm/bin:/home/thomas/sys/bin:/home/thomas/.gem/ruby/2.1.0/bin:/home/thomas/.rvm/bin:/home/thomas/.local/bin" CC="/home/thomas/projets/buildroot/output/host/bin/arm-linux-gcc" CFLAGS="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64  -Os  " LDFLAGS="" LDSHARED="/home/thomas/projets/buildroot/output/host/bin/arm-linux-gcc -shared"
PYTHONPATH="/home/thomas/projets/buildroot/output/target/usr/lib/python3.7/" PYTHONNOUSERSITE=1 _PYTHON_SYSCONFIGDATA_NAME="_sysconfigdata_m_linux_arm-linux-gnueabi" _python_sysroot=/home/thomas/projets/buildroot/output/host/arm-buildroot-linux-uclibcgnueabi/sysroot _python_prefix=/usr _python_exec_prefix=/usr USE_OPENGL_ES2=1 USE_OPENGL_MOCK=1 USE_GSTREAMER=0 USE_EGL=1 USE_SDL2=1 KIVY_SDL2_PATH=/home/thomas/projets/buildroot/output/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/SDL2 USE_WAYLAND=0 USE_X11=0 /home/thomas/projets/buildroot/output/host/bin/python setup.py build --executable=/usr/bin/python )
Using setuptools
Environ change use_egl -> True
Environ change use_opengl_es2 -> True
Environ change use_opengl_mock -> True
Environ change use_sdl2 -> True
Environ change use_x11 -> False
Environ change use_wayland -> False
Environ change use_gstreamer -> False
Using this graphics system: OpenGL ES 2
SDL2 found via pkg-config
SDL2: found SDL header at /home/thomas/projets/buildroot/output/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/SDL2/SDL.h
SDL2: found SDL_mixer header at /home/thomas/projets/buildroot/output/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/SDL2/SDL_mixer.h
SDL2: found SDL_ttf header at /home/thomas/projets/buildroot/output/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/SDL2/SDL_ttf.h
SDL2: found SDL_image header at /home/thomas/projets/buildroot/output/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/SDL2/SDL_image.h
WARNING: A problem occurred while running pkg-config --libs --cflags pangoft2 (code 1)

b"Package pangoft2 was not found in the pkg-config search path.\nPerhaps you should add the directory containing `pangoft2.pc'\nto the PKG_CONFIG_PATH environment variable\nPackage 'pangoft2', required by 'virtual:world', not found\n"

ERROR: Dependency for context.pyx not resolved: config.pxi
ERROR: Dependency for compiler.pyx not resolved: config.pxi
ERROR: Dependency for context_instructions.pyx not resolved: config.pxi
ERROR: Dependency for fbo.pyx not resolved: config.pxi
ERROR: Dependency for gl_instructions.pyx not resolved: config.pxi
ERROR: Dependency for instructions.pyx not resolved: config.pxi
ERROR: Dependency for opengl.pyx not resolved: config.pxi
ERROR: Dependency for opengl_utils.pyx not resolved: config.pxi
ERROR: Dependency for shader.pyx not resolved: config.pxi
ERROR: Dependency for stencil_instructions.pyx not resolved: config.pxi
ERROR: Dependency for scissor_instructions.pyx not resolved: config.pxi
ERROR: Dependency for texture.pyx not resolved: config.pxi
ERROR: Dependency for vbo.pyx not resolved: config.pxi
ERROR: Dependency for vertex.pyx not resolved: config.pxi
ERROR: Dependency for vertex_instructions.pyx not resolved: config.pxi
ERROR: Dependency for cgl.pyx not resolved: config.pxi
ERROR: Dependency for cgl_mock.pyx not resolved: config.pxi
ERROR: Dependency for cgl_gl.pyx not resolved: config.pxi
ERROR: Dependency for cgl_glew.pyx not resolved: config.pxi
ERROR: Dependency for cgl_sdl2.pyx not resolved: config.pxi
ERROR: Dependency for svg.pyx not resolved: config.pxi
 Download error on https://pypi.org/simple/cython/: unknown url type: https -- Some packages may not be found!
 Download error on https://pypi.org/simple/: unknown url type: https -- Some packages may not be found!
 No local packages or working download links found for cython!=0.27,!=0.27.2,<=0.29.10,>=0.24
 Traceback (most recent call last):
   File "setup.py", line 1206, in <module>
     'tuio': ['oscpy']
   File "/home/thomas/projets/buildroot/output/host/lib/python3.7/site-packages/setuptools/__init__.py", line 144, in setup
     _install_setup_requires(attrs)
   File "/home/thomas/projets/buildroot/output/host/lib/python3.7/site-packages/setuptools/__init__.py", line 139, in _install_setup_requires
     dist.fetch_build_eggs(dist.setup_requires)
   File "/home/thomas/projets/buildroot/output/host/lib/python3.7/site-packages/setuptools/dist.py", line 717, in fetch_build_eggs
     replace_conflicting=True,
   File "/home/thomas/projets/buildroot/output/host/lib/python3.7/site-packages/pkg_resources/__init__.py", line 782, in resolve
     replace_conflicting=replace_conflicting
   File "/home/thomas/projets/buildroot/output/host/lib/python3.7/site-packages/pkg_resources/__init__.py", line 1065, in best_match
     return self.obtain(req, installer)
   File "/home/thomas/projets/buildroot/output/host/lib/python3.7/site-packages/pkg_resources/__init__.py", line 1077, in obtain
     return installer(requirement)
   File "/home/thomas/projets/buildroot/output/host/lib/python3.7/site-packages/setuptools/dist.py", line 784, in fetch_build_egg
     return cmd.easy_install(req)
   File "/home/thomas/projets/buildroot/output/host/lib/python3.7/site-packages/setuptools/command/easy_install.py", line 673, in easy_install
     raise DistutilsError(msg)
 distutils.errors.DistutilsError: Could not find suitable distribution for Requirement.parse('cython!=0.27,!=0.27.2,<=0.29.10,>=0.24')
make[1]: *** [package/pkg-generic.mk:241: /home/thomas/projets/buildroot/output/build/python-kivy-1.11.1/.stamp_built] Error 1
make: *** [Makefile:84: _all] Error 2

There are two things that strike out here:

 - It seems to need pango.

 - It seems like it tries to download some stuff, which is really bad,
   it shouldn't download anything.

See below for some more review comments.


> diff --git a/package/python-kivy/Config.in b/package/python-kivy/Config.in
> new file mode 100644
> index 0000000000..521c69e389
> --- /dev/null
> +++ b/package/python-kivy/Config.in
> @@ -0,0 +1,26 @@
> +config BR2_PACKAGE_KIVY_USE_GLES
> +	bool
> +	default y
> +	depends on !BR2_PACKAGE_HAS_LIBGL && BR2_PACKAGE_HAS_LIBGLES

This config option is probably not needed, see below.

> +
> +config BR2_PACKAGE_PYTHON_KIVY
> +	bool "python-kivy"
> +	depends on BR2_PACKAGE_HAS_LIBGL || BR2_PACKAGE_HAS_LIBGLES
> +	select BR2_PACKAGE_HOST_PYTHON_CYTHON
> +	select BR2_PACKAGE_LIBPNG # runtime
> +	select BR2_PACKAGE_MTDEV # runtime
> +	select BR2_PACKAGE_PYTHON_DOCUTILS # runtime
> +	select BR2_PACKAGE_PYTHON_PYGMENTS # runtime
> +	select BR2_PACKAGE_SDL2 if BR2_PACKAGE_KIVY_USE_GLES
> +	select BR2_PACKAGE_SDL2_IMAGE if BR2_PACKAGE_KIVY_USE_GLES
> +	select BR2_PACKAGE_SDL2_MIXER if BR2_PACKAGE_KIVY_USE_GLES
> +	select BR2_PACKAGE_SDL2_TTF if BR2_PACKAGE_KIVY_USE_GLES
> +	select BR2_PACKAGE_SDL2_OPENGLES if BR2_PACKAGE_KIVY_USE_GLES # runtime

Here you can simply do:

	select BR2_PACKAGE_SDL2 if !BR2_PACKAGE_HAS_LIBGL

and ditto for all other options. This way BR2_PACKAGE_KIVY_USE_GLES is
not needed.

> diff --git a/package/python-kivy/python-kivy.mk b/package/python-kivy/python-kivy.mk
> new file mode 100644
> index 0000000000..deefa8fd07
> --- /dev/null
> +++ b/package/python-kivy/python-kivy.mk
> @@ -0,0 +1,62 @@
> +################################################################################
> +#
> +# python-kivy
> +#
> +################################################################################
> +
> +PYTHON_KIVY_VERSION = 1.11.1
> +PYTHON_KIVY_SITE = $(call github,kivy,kivy,$(PYTHON_KIVY_VERSION))
> +PYTHON_KIVY_SETUP_TYPE = distutils
> +PYTHON_KIVY_LICENSE = MIT
> +PYTHON_KIVY_LICENSE_FILES = LICENSE
> +PYTHON_KIVY_DEPENDENCIES = host-python-cython libgl

I thought you could use libgl or libgles, but here you unconditionally
depend on libgl, that doesn't look good.

Also, the below dependencies look a bit messy, I think there should be
a clear GL / GLES conditional:

ifeq ($(BR2_PACKAGE_HAS_LIBGL),y)
PYTHON_KIVY_DEPENDENCIES += libgl
PYTHON_KIVY_ENV += USE_SDL=0
ifeq ($(BR2_PACKAGE_XLIB_LIBX11)$(BR2_PACKAGE_XLIB_LIBXRENDER),yy)
PYTHON_KIVY_DEPENDENCIES += xlib_libX11 xlib_libXrender
PYTHON_KIVY_ENV += USE_X11=1
else
PYTHON_KIVY_ENV += USE_X11=0
endif
else ifeq ($(BR2_PACKAGE_HAS_LIBGLES),y)
PYTHON_KIVY_DEPENDENCIES += libgles sdl2 sdl2_image sdl2_mixer sdl2_ttf
PYTHON_KIVY_ENV += \
	USE_OPENGL_ES2=1 \
	USE_OPENGL_MOCK=1 \
	USE_SDL=1 \
	KIVY_SDL2_PATH=$(STAGING_DIR)/usr/include/SDL2
endif

> +define PYTHON_KIVY_REMOVE_EXAMPLES
> +	rm -rf $(TARGET_DIR)/usr/share/kivy-examples
> +endef
> +
> +PYTHON_KIVY_POST_INSTALL_TARGET_HOOKS += PYTHON_KIVY_REMOVE_EXAMPLES

Maybe for a package like this it makes sense to have a sub-option to
keep the examples on the target.

Could you have a look at the above issues, and send an updated patch ?

Thanks!

Thomas
diff mbox series

Patch

diff --git a/DEVELOPERS b/DEVELOPERS
index ce3fcb2de8..279f4fe5a4 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1219,6 +1219,7 @@  F:	package/gconf/
 F:	package/libnss/
 F:	package/llvm/
 F:	package/python-cython/
+F:	package/python-kivy/
 F:	package/python-raven/
 F:	package/python-schedule/
 F:	package/python-sentry-sdk/
diff --git a/package/Config.in b/package/Config.in
index bc529e0b56..1a2223a366 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -927,6 +927,7 @@  menu "External python modules"
 	source "package/python-jsonschema/Config.in"
 	source "package/python-json-schema-validator/Config.in"
 	source "package/python-keyring/Config.in"
+	source "package/python-kivy/Config.in"
 	source "package/python-libconfig/Config.in"
 	source "package/python-libusb1/Config.in"
 	source "package/python-lmdb/Config.in"
diff --git a/package/python-kivy/Config.in b/package/python-kivy/Config.in
new file mode 100644
index 0000000000..521c69e389
--- /dev/null
+++ b/package/python-kivy/Config.in
@@ -0,0 +1,26 @@ 
+config BR2_PACKAGE_KIVY_USE_GLES
+	bool
+	default y
+	depends on !BR2_PACKAGE_HAS_LIBGL && BR2_PACKAGE_HAS_LIBGLES
+
+config BR2_PACKAGE_PYTHON_KIVY
+	bool "python-kivy"
+	depends on BR2_PACKAGE_HAS_LIBGL || BR2_PACKAGE_HAS_LIBGLES
+	select BR2_PACKAGE_HOST_PYTHON_CYTHON
+	select BR2_PACKAGE_LIBPNG # runtime
+	select BR2_PACKAGE_MTDEV # runtime
+	select BR2_PACKAGE_PYTHON_DOCUTILS # runtime
+	select BR2_PACKAGE_PYTHON_PYGMENTS # runtime
+	select BR2_PACKAGE_SDL2 if BR2_PACKAGE_KIVY_USE_GLES
+	select BR2_PACKAGE_SDL2_IMAGE if BR2_PACKAGE_KIVY_USE_GLES
+	select BR2_PACKAGE_SDL2_MIXER if BR2_PACKAGE_KIVY_USE_GLES
+	select BR2_PACKAGE_SDL2_TTF if BR2_PACKAGE_KIVY_USE_GLES
+	select BR2_PACKAGE_SDL2_OPENGLES if BR2_PACKAGE_KIVY_USE_GLES # runtime
+	help
+	  A software library for rapid development of
+	  hardware-accelerated multitouch applications.
+
+	  http://kivy.org
+
+comment "python-kivy needs an OpenGL or OpenGL ES provider"
+	depends on !(BR2_PACKAGE_HAS_LIBGL || BR2_PACKAGE_HAS_LIBGLES)
diff --git a/package/python-kivy/python-kivy.hash b/package/python-kivy/python-kivy.hash
new file mode 100644
index 0000000000..5ea435ad94
--- /dev/null
+++ b/package/python-kivy/python-kivy.hash
@@ -0,0 +1,4 @@ 
+# sha256 locally computed
+sha256	8fad63cf6abaf72220b899d776b87327f22c8898d45dbe9635c9ff919ec4de93  python-kivy-1.11.1.tar.gz
+# License file, locally calculated
+sha256	282b3d8735ef6cbdcf8cc480947d50e0aea4ad1cc931d41f3f6a6bc23956f2d6  LICENSE
diff --git a/package/python-kivy/python-kivy.mk b/package/python-kivy/python-kivy.mk
new file mode 100644
index 0000000000..deefa8fd07
--- /dev/null
+++ b/package/python-kivy/python-kivy.mk
@@ -0,0 +1,62 @@ 
+################################################################################
+#
+# python-kivy
+#
+################################################################################
+
+PYTHON_KIVY_VERSION = 1.11.1
+PYTHON_KIVY_SITE = $(call github,kivy,kivy,$(PYTHON_KIVY_VERSION))
+PYTHON_KIVY_SETUP_TYPE = distutils
+PYTHON_KIVY_LICENSE = MIT
+PYTHON_KIVY_LICENSE_FILES = LICENSE
+PYTHON_KIVY_DEPENDENCIES = host-python-cython libgl
+
+ifeq ($(BR2_PACKAGE_KIVY_USE_GLES),y)
+PYTHON_KIVY_ENV += USE_OPENGL_ES2=1
+# disable linking to libGL
+PYTHON_KIVY_ENV += USE_OPENGL_MOCK=1
+endif
+
+ifeq ($(BR2_PACKAGE_GSTREAMER),y)
+PYTHON_KIVY_DEPENDENCIES += gstreamer
+PYTHON_KIVY_ENV += USE_GSTREAMER=1
+else
+PYTHON_KIVY_ENV += USE_GSTREAMER=0
+endif
+
+ifeq ($(BR2_PACKAGE_HAS_LIBEGL),y)
+PYTHON_KIVY_DEPENDENCIES += libegl
+PYTHON_KIVY_ENV += USE_EGL=1
+else
+PYTHON_KIVY_ENV += USE_EGL=0
+endif
+
+ifeq ($(BR2_PACKAGE_SDL2)$(BR2_PACKAGE_SDL2_IMAGE)$(BR2_PACKAGE_SDL2_MIXER)$(BR2_PACKAGE_SDL2_TTF),yyyy)
+PYTHON_KIVY_DEPENDENCIES += sdl2 sdl2_image sdl2_mixer sdl2_ttf
+PYTHON_KIVY_ENV += USE_SDL2=1
+PYTHON_KIVY_ENV += KIVY_SDL2_PATH=$(STAGING_DIR)/usr/include/SDL2
+else
+PYTHON_KIVY_ENV += USE_SDL2=0
+endif
+
+ifeq ($(BR2_PACKAGE_WAYLAND),y)
+PYTHON_KIVY_DEPENDENCIES += wayland
+PYTHON_KIVY_ENV += USE_WAYLAND=1
+else
+PYTHON_KIVY_ENV += USE_WAYLAND=0
+endif
+
+ifeq ($(BR2_PACKAGE_XLIB_LIBX11)$(BR2_PACKAGE_XLIB_LIBXRENDER),yy)
+PYTHON_KIVY_DEPENDENCIES += xlib_libX11 xlib_libXrender
+PYTHON_KIVY_ENV += USE_X11=1
+else
+PYTHON_KIVY_ENV += USE_X11=0
+endif
+
+define PYTHON_KIVY_REMOVE_EXAMPLES
+	rm -rf $(TARGET_DIR)/usr/share/kivy-examples
+endef
+
+PYTHON_KIVY_POST_INSTALL_TARGET_HOOKS += PYTHON_KIVY_REMOVE_EXAMPLES
+
+$(eval $(python-package))