* [Buildroot] [PATCH 0/2] PyQt5 package
@ 2016-08-19 13:42 Manuel Vögele
2016-08-19 13:42 ` [Buildroot] [PATCH 1/2] python-sip: allow package to be built using Qt5 Manuel Vögele
2016-08-19 13:42 ` [Buildroot] [PATCH 2/2] python-pyqt5: new package Manuel Vögele
0 siblings, 2 replies; 11+ messages in thread
From: Manuel Vögele @ 2016-08-19 13:42 UTC (permalink / raw)
To: buildroot
This package contains Python bindings for Qt5. Since PyQt4 and PyQt5
are similar in many ways most of the package configuration is taken
directly from the python-pyqt package and altered to fit PyQt5.
Manuel V?gele (2):
python-sip: allow package to be built using Qt5
python-pyqt5: new package
package/Config.in | 1 +
.../0001-configure-skip-qtdetail.patch | 29 +++++++
package/python-pyqt5/Config.in | 23 ++++++
package/python-pyqt5/python-pyqt5.hash | 3 +
package/python-pyqt5/python-pyqt5.mk | 88 ++++++++++++++++++++++
package/python-sip/Config.in | 7 +-
package/python-sip/python-sip.mk | 4 +
7 files changed, 154 insertions(+), 1 deletion(-)
create mode 100644 package/python-pyqt5/0001-configure-skip-qtdetail.patch
create mode 100644 package/python-pyqt5/Config.in
create mode 100644 package/python-pyqt5/python-pyqt5.hash
create mode 100644 package/python-pyqt5/python-pyqt5.mk
--
2.1.4
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] [PATCH 1/2] python-sip: allow package to be built using Qt5
2016-08-19 13:42 [Buildroot] [PATCH 0/2] PyQt5 package Manuel Vögele
@ 2016-08-19 13:42 ` Manuel Vögele
2016-08-19 13:58 ` Thomas Petazzoni
2016-08-19 13:42 ` [Buildroot] [PATCH 2/2] python-pyqt5: new package Manuel Vögele
1 sibling, 1 reply; 11+ messages in thread
From: Manuel Vögele @ 2016-08-19 13:42 UTC (permalink / raw)
To: buildroot
Signed-off-by: Manuel V?gele <develop@manuel-voegele.de>
---
package/python-sip/Config.in | 7 ++++++-
package/python-sip/python-sip.mk | 4 ++++
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/package/python-sip/Config.in b/package/python-sip/Config.in
index 45e48ad..1f8961d 100644
--- a/package/python-sip/Config.in
+++ b/package/python-sip/Config.in
@@ -2,12 +2,17 @@ comment "python-sip needs a toolchain w/ C++, threads"
depends on BR2_USE_MMU
depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS
+comment "python-sip needs qt or qt5"
+ depends on BR2_USE_MMU
+ depends on BR2_INSTALL_LIBSTDCPP && BR2_TOOLCHAIN_HAS_THREADS
+ depends on !BR2_PACKAGE_QT && !BR2_PACKAGE_QT5
+
config BR2_PACKAGE_PYTHON_SIP
bool "python-sip"
depends on BR2_INSTALL_LIBSTDCPP # qt
depends on BR2_TOOLCHAIN_HAS_THREADS # qt
depends on BR2_USE_MMU # qt
- select BR2_PACKAGE_QT
+ depends on BR2_PACKAGE_QT || BR2_PACKAGE_QT5
help
SIP is a tool that makes it very easy to create Python
bindings for C and C++ libraries. It was originally
diff --git a/package/python-sip/python-sip.mk b/package/python-sip/python-sip.mk
index d13801f..0c0a947 100644
--- a/package/python-sip/python-sip.mk
+++ b/package/python-sip/python-sip.mk
@@ -10,7 +10,11 @@ PYTHON_SIP_SITE = http://downloads.sourceforge.net/project/pyqt/sip/sip-$(PYTHON
PYTHON_SIP_LICENSE = SIP license or GPLv2 or GPLv3
PYTHON_SIP_LICENSE_FILES = LICENSE LICENSE-GPL2 LICENSE-GPL3
+ifeq ($(BR2_PACKAGE_QT5),y)
+PYTHON_SIP_DEPENDENCIES = qt5base
+else
PYTHON_SIP_DEPENDENCIES = qt
+endif
ifeq ($(BR2_PACKAGE_PYTHON),y)
PYTHON_SIP_DEPENDENCIES += python
--
2.1.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Buildroot] [PATCH 2/2] python-pyqt5: new package
2016-08-19 13:42 [Buildroot] [PATCH 0/2] PyQt5 package Manuel Vögele
2016-08-19 13:42 ` [Buildroot] [PATCH 1/2] python-sip: allow package to be built using Qt5 Manuel Vögele
@ 2016-08-19 13:42 ` Manuel Vögele
2016-08-19 14:07 ` Thomas Petazzoni
2016-08-23 9:26 ` [Buildroot] [PATCH v2] " Manuel Vögele
1 sibling, 2 replies; 11+ messages in thread
From: Manuel Vögele @ 2016-08-19 13:42 UTC (permalink / raw)
To: buildroot
Signed-off-by: Manuel V?gele <develop@manuel-voegele.de>
---
package/Config.in | 1 +
.../0001-configure-skip-qtdetail.patch | 29 +++++++
package/python-pyqt5/Config.in | 23 ++++++
package/python-pyqt5/python-pyqt5.hash | 3 +
package/python-pyqt5/python-pyqt5.mk | 88 ++++++++++++++++++++++
5 files changed, 144 insertions(+)
create mode 100644 package/python-pyqt5/0001-configure-skip-qtdetail.patch
create mode 100644 package/python-pyqt5/Config.in
create mode 100644 package/python-pyqt5/python-pyqt5.hash
create mode 100644 package/python-pyqt5/python-pyqt5.mk
diff --git a/package/Config.in b/package/Config.in
index 1e51a45..c4b4ed1 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -734,6 +734,7 @@ menu "External python modules"
source "package/python-pyparted/Config.in"
source "package/python-pypcap/Config.in"
source "package/python-pyqt/Config.in"
+ source "package/python-pyqt5/Config.in"
source "package/python-pyratemp/Config.in"
source "package/python-pyro/Config.in"
source "package/python-pyroute2/Config.in"
diff --git a/package/python-pyqt5/0001-configure-skip-qtdetail.patch b/package/python-pyqt5/0001-configure-skip-qtdetail.patch
new file mode 100644
index 0000000..2e7b331
--- /dev/null
+++ b/package/python-pyqt5/0001-configure-skip-qtdetail.patch
@@ -0,0 +1,29 @@
+Do not run qtdetail
+
+qtdetail is a tool that generates qtdetail.out. Since this program is
+cross-compiled, it's not possible to run it on the host.
+
+Consequently, python-pyqt5.mk generates the qtdetail.out file before
+calling configure.py.
+
+Therefore, this patch makes sure that the pre-generated qtdetail.out
+file is kept, and that qtdetail is not executed.
+
+Signed-off-by: Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>
+Signed-off-by: Sergey Kostanbaev <sergey.kostanbaev@gmail.com>
+---
+Index: PyQt5_gpl-5.7/configure.py
+===================================================================
+--- PyQt5_gpl-5.7.orig/configure.py
++++ PyQt5_gpl-5.7/configure.py
+@@ -672,10 +672,6 @@ int main(int argc, char **argv)
+ if cmd is None:
+ error("Failed to determine the detail of your Qt installation. Try again using the --verbose flag to see more detail about the problem.")
+
+- # Create the output file, first making sure it doesn't exist.
+- remove_file(out_file)
+- run_command(cmd, verbose)
+-
+ if not os.access(out_file, os.F_OK):
+ error("%s failed to create %s. Make sure your Qt installation is correct." % (cmd, out_file))
+
diff --git a/package/python-pyqt5/Config.in b/package/python-pyqt5/Config.in
new file mode 100644
index 0000000..6dcdd84
--- /dev/null
+++ b/package/python-pyqt5/Config.in
@@ -0,0 +1,23 @@
+comment "python-pyqt5 needs a toolchain w/ C++, threads"
+ depends on BR2_USE_MMU
+ depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS
+
+config BR2_PACKAGE_PYTHON_PYQT5
+ bool "python-pyqt5"
+ depends on BR2_INSTALL_LIBSTDCPP
+ depends on BR2_TOOLCHAIN_HAS_THREADS # qt
+ depends on BR2_USE_MMU # qt
+ select BR2_PACKAGE_QT5
+ select BR2_PACKAGE_PYTHON_SIP
+ help
+ PyQt4 for Qt Embedded 4 bindings.
+
+ http://www.riverbankcomputing.com/software/pyqt/
+
+if BR2_PACKAGE_PYTHON_PYQT5
+
+config BR2_PACKAGE_PYTHON_PYQT5_ARCH_USES_QREAL_FLOAT
+ bool
+ default y if BR2_arm || BR2_armeb
+ default y if BR2_sh4 || BR2_sh4eb || BR2_sh4a || BR2_sh4aeb
+endif
diff --git a/package/python-pyqt5/python-pyqt5.hash b/package/python-pyqt5/python-pyqt5.hash
new file mode 100644
index 0000000..2a7d05b
--- /dev/null
+++ b/package/python-pyqt5/python-pyqt5.hash
@@ -0,0 +1,3 @@
+# md5 from http://http://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.7, sha256 locally computed
+md5 e3dc21f31fd714659f0688e1eb31bacf PyQt5_gpl-5.7.tar.gz
+sha256 892693ba5f79989abb2061dad2d5c4e6f127e9dd3240f73f8220c7152cd35b05 PyQt5_gpl-5.7.tar.gz
diff --git a/package/python-pyqt5/python-pyqt5.mk b/package/python-pyqt5/python-pyqt5.mk
new file mode 100644
index 0000000..a2defa3
--- /dev/null
+++ b/package/python-pyqt5/python-pyqt5.mk
@@ -0,0 +1,88 @@
+################################################################################
+#
+# python-pyqt5
+#
+################################################################################
+
+PYTHON_PYQT5_VERSION = 5.7
+PYTHON_PYQT5_SOURCE = PyQt5_gpl-$(PYTHON_PYQT5_VERSION).tar.gz
+PYTHON_PYQT5_SITE = http://downloads.sourceforge.net/project/pyqt/PyQt5/PyQt-$(PYTHON_PYQT5_VERSION)
+PYTHON_PYQT5_LICENSE = GPLv3
+PYTHON_PYQT5_LICENSE_FILES = LICENSE
+
+PYTHON_PYQT5_DEPENDENCIES = python-sip host-python-sip qt5base
+
+ifeq ($(BR2_PACKAGE_PYTHON),y)
+PYTHON_PYQT5_PYTHON_DIR = python$(PYTHON_VERSION_MAJOR)
+PYTHON_PYQT5_RM_PORT_BASE = port_v3
+else ifeq ($(BR2_PACKAGE_PYTHON3),y)
+PYTHON_PYQT5_PYTHON_DIR = python$(PYTHON3_VERSION_MAJOR)
+PYTHON_PYQT5_RM_PORT_BASE = port_v2
+endif
+
+PYTHON_PYQT5_QTDETAIL_LICENSE = Open Source
+
+PYTHON_PYQT5_QTDETAIL_TYPE = shared
+
+# Turn off features that aren't available in current qt configuration
+
+PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES += $(if $(BR2_PACKAGE_OPENSSL),,PyQt_SSL)
+PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES += $(if $(BR2_PACKAGE_QT5BASE_OPENGL),,PyQt_OpenGL)
+
+# PyQt_qreal_double must be disabled on a number of architectures that
+# use float for qreal.
+ifeq ($(BR2_PACKAGE_PYTHON_PYQT5_ARCH_USES_QREAL_FLOAT),y)
+PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES += PyQt_qreal_double
+endif
+
+define PYTHON_PYQT5_QTDETAIL
+ echo $(1) >> $(2)/qtdetail.out
+endef
+
+# Since we can't run generate qtdetail.out by running qtdetail on target device
+# we must generate the configuration.
+define PYTHON_PYQT5_GENERATE_QTDETAIL
+ $(RM) -f $(1)/qtdetail.out
+ $(call PYTHON_PYQT5_QTDETAIL,$(PYTHON_PYQT5_QTDETAIL_LICENSE),$(1))
+ $(call PYTHON_PYQT5_QTDETAIL,$(PYTHON_PYQT5_QTDETAIL_TYPE),$(1))
+ $(foreach f,$(PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES),
+ $(call PYTHON_PYQT5_QTDETAIL,$(f),$(1)) \
+ )
+endef
+
+PYTHON_PYQT5_CONF_OPTS = \
+ --bindir $(TARGET_DIR)/usr/bin \
+ --destdir $(TARGET_DIR)/usr/lib/$(PYTHON_PYQT5_PYTHON_DIR)/site-packages \
+ --qmake $(HOST_DIR)/usr/bin/qmake \
+ --sysroot $(STAGING_DIR)/usr \
+ -w --confirm-license \
+ --no-designer-plugin \
+ --no-docstrings \
+ --no-sip-files
+
+define PYTHON_PYQT5_CONFIGURE_CMDS
+ $(call PYTHON_PYQT5_GENERATE_QTDETAIL,$(@D))
+ (cd $(@D); \
+ $(TARGET_MAKE_ENV) \
+ $(TARGET_CONFIGURE_OPTS) \
+ $(HOST_DIR)/usr/bin/python configure.py \
+ $(PYTHON_PYQT5_CONF_OPTS) \
+ )
+endef
+
+define PYTHON_PYQT5_BUILD_CMDS
+ $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)
+endef
+
+# __init__.py is needed to import PyQt5
+# __init__.pyc is needed if BR2_PACKAGE_PYTHON_PYC_ONLY is set
+define PYTHON_PYQT5_INSTALL_TARGET_CMDS
+ $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) install
+ touch $(TARGET_DIR)/usr/lib/$(PYTHON_PYQT5_PYTHON_DIR)/site-packages/PyQt5/__init__.py
+ $(RM) -rf $(TARGET_DIR)/usr/lib/$(PYTHON_PYQT5_PYTHON_DIR)/site-packages/PyQt5/uic/$(PYTHON_PYQT5_RM_PORT_BASE)
+ PYTHONPATH="$(PYTHON_PATH)" \
+ $(HOST_DIR)/usr/bin/python -c "import compileall; \
+ compileall.compile_dir('$(TARGET_DIR)/usr/lib/$(PYTHON_PYQT5_PYTHON_DIR)/site-packages/PyQt5')"
+endef
+
+$(eval $(generic-package))
--
2.1.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Buildroot] [PATCH 1/2] python-sip: allow package to be built using Qt5
2016-08-19 13:42 ` [Buildroot] [PATCH 1/2] python-sip: allow package to be built using Qt5 Manuel Vögele
@ 2016-08-19 13:58 ` Thomas Petazzoni
0 siblings, 0 replies; 11+ messages in thread
From: Thomas Petazzoni @ 2016-08-19 13:58 UTC (permalink / raw)
To: buildroot
Hello,
On Fri, 19 Aug 2016 15:42:24 +0200, Manuel V?gele wrote:
> Signed-off-by: Manuel V?gele <develop@manuel-voegele.de>
> ---
> package/python-sip/Config.in | 7 ++++++-
> package/python-sip/python-sip.mk | 4 ++++
> 2 files changed, 10 insertions(+), 1 deletion(-)
Applied to next, thanks.
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] [PATCH 2/2] python-pyqt5: new package
2016-08-19 13:42 ` [Buildroot] [PATCH 2/2] python-pyqt5: new package Manuel Vögele
@ 2016-08-19 14:07 ` Thomas Petazzoni
2016-08-19 14:40 ` Manuel Vögele
2016-08-23 9:26 ` [Buildroot] [PATCH v2] " Manuel Vögele
1 sibling, 1 reply; 11+ messages in thread
From: Thomas Petazzoni @ 2016-08-19 14:07 UTC (permalink / raw)
To: buildroot
Hello,
Thanks for this contribution!
First question: this package seems to really be an adapted copy/paste
from python-pyqt. Have you double checked that all aspects of
python-pyqt.mk are also needed for the Qt5 version? I'm especially
thinking about all the qtdetail related tricks.
On Fri, 19 Aug 2016 15:42:25 +0200, Manuel V?gele wrote:
> diff --git a/package/python-pyqt5/0001-configure-skip-qtdetail.patch b/package/python-pyqt5/0001-configure-skip-qtdetail.patch
> new file mode 100644
> index 0000000..2e7b331
> --- /dev/null
> +++ b/package/python-pyqt5/0001-configure-skip-qtdetail.patch
> @@ -0,0 +1,29 @@
> +Do not run qtdetail
> +
> +qtdetail is a tool that generates qtdetail.out. Since this program is
> +cross-compiled, it's not possible to run it on the host.
> +
> +Consequently, python-pyqt5.mk generates the qtdetail.out file before
> +calling configure.py.
> +
> +Therefore, this patch makes sure that the pre-generated qtdetail.out
> +file is kept, and that qtdetail is not executed.
> +
> +Signed-off-by: Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>
> +Signed-off-by: Sergey Kostanbaev <sergey.kostanbaev@gmail.com>
Since I guess PyQt5 is managed in Git upstream, I would very much
prefer a Git formatted patch if possible. Of course, if Git is not used
upstream, then it's fine.
> diff --git a/package/python-pyqt5/Config.in b/package/python-pyqt5/Config.in
> new file mode 100644
> index 0000000..6dcdd84
> --- /dev/null
> +++ b/package/python-pyqt5/Config.in
> @@ -0,0 +1,23 @@
> +comment "python-pyqt5 needs a toolchain w/ C++, threads"
> + depends on BR2_USE_MMU
> + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS
> +
> +config BR2_PACKAGE_PYTHON_PYQT5
> + bool "python-pyqt5"
> + depends on BR2_INSTALL_LIBSTDCPP
> + depends on BR2_TOOLCHAIN_HAS_THREADS # qt
> + depends on BR2_USE_MMU # qt
These "depends on" are the one from qt. You need to use the ones from
"qt5", i.e:
depends on BR2_INSTALL_LIBSTDCPP # qt5
depends on BR2_USE_WCHAR # qt5
depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # qt5
depends on !BR2_STATIC_LIBS # qt5
depends on !BR2_PACKAGE_QT # qt5
and obviously adjust the comment above accordingly.
> + select BR2_PACKAGE_QT5
> + select BR2_PACKAGE_PYTHON_SIP
> + help
> + PyQt4 for Qt Embedded 4 bindings.
Really PyQt4 ?
> + http://www.riverbankcomputing.com/software/pyqt/
> +
> +if BR2_PACKAGE_PYTHON_PYQT5
> +
> +config BR2_PACKAGE_PYTHON_PYQT5_ARCH_USES_QREAL_FLOAT
> + bool
> + default y if BR2_arm || BR2_armeb
> + default y if BR2_sh4 || BR2_sh4eb || BR2_sh4a || BR2_sh4aeb
An empty new line here would be good.
Is this thing still needed for PyQt5 ?
> +endif
> +PYTHON_PYQT5_QTDETAIL_LICENSE = Open Source
> +
> +PYTHON_PYQT5_QTDETAIL_TYPE = shared
> +
> +# Turn off features that aren't available in current qt configuration
> +
> +PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES += $(if $(BR2_PACKAGE_OPENSSL),,PyQt_SSL)
> +PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES += $(if $(BR2_PACKAGE_QT5BASE_OPENGL),,PyQt_OpenGL)
> +
> +# PyQt_qreal_double must be disabled on a number of architectures that
> +# use float for qreal.
> +ifeq ($(BR2_PACKAGE_PYTHON_PYQT5_ARCH_USES_QREAL_FLOAT),y)
> +PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES += PyQt_qreal_double
> +endif
> +
> +define PYTHON_PYQT5_QTDETAIL
> + echo $(1) >> $(2)/qtdetail.out
> +endef
> +
> +# Since we can't run generate qtdetail.out by running qtdetail on target device
> +# we must generate the configuration.
> +define PYTHON_PYQT5_GENERATE_QTDETAIL
> + $(RM) -f $(1)/qtdetail.out
> + $(call PYTHON_PYQT5_QTDETAIL,$(PYTHON_PYQT5_QTDETAIL_LICENSE),$(1))
> + $(call PYTHON_PYQT5_QTDETAIL,$(PYTHON_PYQT5_QTDETAIL_TYPE),$(1))
> + $(foreach f,$(PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES),
> + $(call PYTHON_PYQT5_QTDETAIL,$(f),$(1)) \
> + )
> +endef
So this is all exactly the same as PyQt4 ?
> +# __init__.py is needed to import PyQt5
> +# __init__.pyc is needed if BR2_PACKAGE_PYTHON_PYC_ONLY is set
> +define PYTHON_PYQT5_INSTALL_TARGET_CMDS
> + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) install
> + touch $(TARGET_DIR)/usr/lib/$(PYTHON_PYQT5_PYTHON_DIR)/site-packages/PyQt5/__init__.py
> + $(RM) -rf $(TARGET_DIR)/usr/lib/$(PYTHON_PYQT5_PYTHON_DIR)/site-packages/PyQt5/uic/$(PYTHON_PYQT5_RM_PORT_BASE)
> + PYTHONPATH="$(PYTHON_PATH)" \
> + $(HOST_DIR)/usr/bin/python -c "import compileall; \
> + compileall.compile_dir('$(TARGET_DIR)/usr/lib/$(PYTHON_PYQT5_PYTHON_DIR)/site-packages/PyQt5')"
Can you test after removing this compileall line? Indeed, we are now
byte-compiling all Python modules globally. If it works, a patch
removing this line for python-pyqt.mk would be good to have.
Thanks!
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] [PATCH 2/2] python-pyqt5: new package
2016-08-19 14:07 ` Thomas Petazzoni
@ 2016-08-19 14:40 ` Manuel Vögele
2016-08-19 14:48 ` Thomas Petazzoni
0 siblings, 1 reply; 11+ messages in thread
From: Manuel Vögele @ 2016-08-19 14:40 UTC (permalink / raw)
To: buildroot
Hello,
thanks for your review.
>> diff --git a/package/python-pyqt5/0001-configure-skip-qtdetail.patch
>> b/package/python-pyqt5/0001-configure-skip-qtdetail.patch
>> new file mode 100644
>> index 0000000..2e7b331
>> --- /dev/null
>> +++ b/package/python-pyqt5/0001-configure-skip-qtdetail.patch
>> @@ -0,0 +1,29 @@
>> +Do not run qtdetail
>> +
>> +qtdetail is a tool that generates qtdetail.out. Since this program is
>> +cross-compiled, it's not possible to run it on the host.
>> +
>> +Consequently, python-pyqt5.mk generates the qtdetail.out file before
>> +calling configure.py.
>> +
>> +Therefore, this patch makes sure that the pre-generated qtdetail.out
>> +file is kept, and that qtdetail is not executed.
>> +
>> +Signed-off-by: Gwenhael Goavec-Merou
>> <gwenhael.goavec-merou@trabucayre.com>
>> +Signed-off-by: Sergey Kostanbaev <sergey.kostanbaev@gmail.com>
>
> Since I guess PyQt5 is managed in Git upstream, I would very much
> prefer a Git formatted patch if possible. Of course, if Git is not used
> upstream, then it's fine.
I didn't manage to find any official PyQt repository. But if it exists I
suppose it would be a Mercurial repo since all the other Riverbank
projects use Mercurial too.
>> +PYTHON_PYQT5_QTDETAIL_LICENSE = Open Source
>> +
>> +PYTHON_PYQT5_QTDETAIL_TYPE = shared
>> +
>> +# Turn off features that aren't available in current qt configuration
>> +
>> +PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES += $(if
>> $(BR2_PACKAGE_OPENSSL),,PyQt_SSL)
>> +PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES += $(if
>> $(BR2_PACKAGE_QT5BASE_OPENGL),,PyQt_OpenGL)
>> +
>> +# PyQt_qreal_double must be disabled on a number of architectures
>> that
>> +# use float for qreal.
>> +ifeq ($(BR2_PACKAGE_PYTHON_PYQT5_ARCH_USES_QREAL_FLOAT),y)
>> +PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES += PyQt_qreal_double
>> +endif
>> +
>> +define PYTHON_PYQT5_QTDETAIL
>> + echo $(1) >> $(2)/qtdetail.out
>> +endef
>> +
>> +# Since we can't run generate qtdetail.out by running qtdetail on
>> target device
>> +# we must generate the configuration.
>> +define PYTHON_PYQT5_GENERATE_QTDETAIL
>> + $(RM) -f $(1)/qtdetail.out
>> + $(call PYTHON_PYQT5_QTDETAIL,$(PYTHON_PYQT5_QTDETAIL_LICENSE),$(1))
>> + $(call PYTHON_PYQT5_QTDETAIL,$(PYTHON_PYQT5_QTDETAIL_TYPE),$(1))
>> + $(foreach f,$(PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES),
>> + $(call PYTHON_PYQT5_QTDETAIL,$(f),$(1)) \
>> + )
>> +endef
>
> So this is all exactly the same as PyQt4 ?
It's not all the same - I already removed some switches which aren't
required in PyQt5. But I'm gonna recheck if I can remove even more.
>> +# __init__.py is needed to import PyQt5
>> +# __init__.pyc is needed if BR2_PACKAGE_PYTHON_PYC_ONLY is set
>> +define PYTHON_PYQT5_INSTALL_TARGET_CMDS
>> + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) install
>> + touch
>> $(TARGET_DIR)/usr/lib/$(PYTHON_PYQT5_PYTHON_DIR)/site-packages/PyQt5/__init__.py
>> + $(RM) -rf
>> $(TARGET_DIR)/usr/lib/$(PYTHON_PYQT5_PYTHON_DIR)/site-packages/PyQt5/uic/$(PYTHON_PYQT5_RM_PORT_BASE)
>> + PYTHONPATH="$(PYTHON_PATH)" \
>> + $(HOST_DIR)/usr/bin/python -c "import compileall; \
>> + compileall.compile_dir('$(TARGET_DIR)/usr/lib/$(PYTHON_PYQT5_PYTHON_DIR)/site-packages/PyQt5')"
>
> Can you test after removing this compileall line? Indeed, we are now
> byte-compiling all Python modules globally. If it works, a patch
> removing this line for python-pyqt.mk would be good to have.
I'm gonna do that.
Thanks for you review
Manuel
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] [PATCH 2/2] python-pyqt5: new package
2016-08-19 14:40 ` Manuel Vögele
@ 2016-08-19 14:48 ` Thomas Petazzoni
0 siblings, 0 replies; 11+ messages in thread
From: Thomas Petazzoni @ 2016-08-19 14:48 UTC (permalink / raw)
To: buildroot
Hello,
On Fri, 19 Aug 2016 16:40:05 +0200, Manuel V?gele wrote:
> > Since I guess PyQt5 is managed in Git upstream, I would very much
> > prefer a Git formatted patch if possible. Of course, if Git is not used
> > upstream, then it's fine.
>
> I didn't manage to find any official PyQt repository. But if it exists I
> suppose it would be a Mercurial repo since all the other Riverbank
> projects use Mercurial too.
OK. Then the patch format is OK as-is.
> >> +# Since we can't run generate qtdetail.out by running qtdetail on
> >> target device
> >> +# we must generate the configuration.
> >> +define PYTHON_PYQT5_GENERATE_QTDETAIL
> >> + $(RM) -f $(1)/qtdetail.out
> >> + $(call PYTHON_PYQT5_QTDETAIL,$(PYTHON_PYQT5_QTDETAIL_LICENSE),$(1))
> >> + $(call PYTHON_PYQT5_QTDETAIL,$(PYTHON_PYQT5_QTDETAIL_TYPE),$(1))
> >> + $(foreach f,$(PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES),
> >> + $(call PYTHON_PYQT5_QTDETAIL,$(f),$(1)) \
> >> + )
> >> +endef
> >
> > So this is all exactly the same as PyQt4 ?
> It's not all the same - I already removed some switches which aren't
> required in PyQt5. But I'm gonna recheck if I can remove even more.
OK.
> > Can you test after removing this compileall line? Indeed, we are now
> > byte-compiling all Python modules globally. If it works, a patch
> > removing this line for python-pyqt.mk would be good to have.
>
> I'm gonna do that.
Great, thanks!
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] [PATCH v2] python-pyqt5: new package
2016-08-19 13:42 ` [Buildroot] [PATCH 2/2] python-pyqt5: new package Manuel Vögele
2016-08-19 14:07 ` Thomas Petazzoni
@ 2016-08-23 9:26 ` Manuel Vögele
2016-09-20 19:14 ` Thomas Petazzoni
1 sibling, 1 reply; 11+ messages in thread
From: Manuel Vögele @ 2016-08-23 9:26 UTC (permalink / raw)
To: buildroot
Signed-off-by: Manuel V?gele <develop@manuel-voegele.de>
---
Changes v1 -> v2:
- Config.in
- Dependencies & comment now match those from qt5 (instead of qt4)
- Adjusted help text
- Removed ARCH_USES_QREAL_FLOAT setting
- python-pyqt5.mk
- Removed ARCH_USES_QREAL_FLOAT setting
- Added PyQt_Desktop_OpenGL compile switch
- Fixed a typo in a comment
- Removed the compileall directive in INSTALL_TARGET_CMDS
I also rechecked if i could remove PyQt_SSL or PyQt_OpenGL (I can't)
Signed-off-by: Manuel V?gele <develop@manuel-voegele.de>
---
package/Config.in | 1 +
.../0001-configure-skip-qtdetail.patch | 29 ++++++++
package/python-pyqt5/Config.in | 17 +++++
package/python-pyqt5/python-pyqt5.hash | 3 +
package/python-pyqt5/python-pyqt5.mk | 79 ++++++++++++++++++++++
5 files changed, 129 insertions(+)
create mode 100644 package/python-pyqt5/0001-configure-skip-qtdetail.patch
create mode 100644 package/python-pyqt5/Config.in
create mode 100644 package/python-pyqt5/python-pyqt5.hash
create mode 100644 package/python-pyqt5/python-pyqt5.mk
diff --git a/package/Config.in b/package/Config.in
index 1e51a45..c4b4ed1 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -734,6 +734,7 @@ menu "External python modules"
source "package/python-pyparted/Config.in"
source "package/python-pypcap/Config.in"
source "package/python-pyqt/Config.in"
+ source "package/python-pyqt5/Config.in"
source "package/python-pyratemp/Config.in"
source "package/python-pyro/Config.in"
source "package/python-pyroute2/Config.in"
diff --git a/package/python-pyqt5/0001-configure-skip-qtdetail.patch b/package/python-pyqt5/0001-configure-skip-qtdetail.patch
new file mode 100644
index 0000000..2e7b331
--- /dev/null
+++ b/package/python-pyqt5/0001-configure-skip-qtdetail.patch
@@ -0,0 +1,29 @@
+Do not run qtdetail
+
+qtdetail is a tool that generates qtdetail.out. Since this program is
+cross-compiled, it's not possible to run it on the host.
+
+Consequently, python-pyqt5.mk generates the qtdetail.out file before
+calling configure.py.
+
+Therefore, this patch makes sure that the pre-generated qtdetail.out
+file is kept, and that qtdetail is not executed.
+
+Signed-off-by: Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>
+Signed-off-by: Sergey Kostanbaev <sergey.kostanbaev@gmail.com>
+---
+Index: PyQt5_gpl-5.7/configure.py
+===================================================================
+--- PyQt5_gpl-5.7.orig/configure.py
++++ PyQt5_gpl-5.7/configure.py
+@@ -672,10 +672,6 @@ int main(int argc, char **argv)
+ if cmd is None:
+ error("Failed to determine the detail of your Qt installation. Try again using the --verbose flag to see more detail about the problem.")
+
+- # Create the output file, first making sure it doesn't exist.
+- remove_file(out_file)
+- run_command(cmd, verbose)
+-
+ if not os.access(out_file, os.F_OK):
+ error("%s failed to create %s. Make sure your Qt installation is correct." % (cmd, out_file))
+
diff --git a/package/python-pyqt5/Config.in b/package/python-pyqt5/Config.in
new file mode 100644
index 0000000..98c709e
--- /dev/null
+++ b/package/python-pyqt5/Config.in
@@ -0,0 +1,17 @@
+comment "python-pyqt5 needs a toolchain w/ wchar, NPTL, C++, dynamic library"
+ depends on !BR2_PACKAGE_QT
+ depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS
+
+config BR2_PACKAGE_PYTHON_PYQT5
+ bool "python-pyqt5"
+ depends on BR2_INSTALL_LIBSTDCPP
+ depends on BR2_USE_WCHAR # qt5
+ depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # qt5
+ depends on !BR2_STATIC_LIBS # qt5
+ depends on !BR2_PACKAGE_QT # qt5
+ select BR2_PACKAGE_QT5
+ select BR2_PACKAGE_PYTHON_SIP
+ help
+ Python bindings for Qt 5
+
+ http://www.riverbankcomputing.com/software/pyqt/
diff --git a/package/python-pyqt5/python-pyqt5.hash b/package/python-pyqt5/python-pyqt5.hash
new file mode 100644
index 0000000..2a7d05b
--- /dev/null
+++ b/package/python-pyqt5/python-pyqt5.hash
@@ -0,0 +1,3 @@
+# md5 from http://http://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.7, sha256 locally computed
+md5 e3dc21f31fd714659f0688e1eb31bacf PyQt5_gpl-5.7.tar.gz
+sha256 892693ba5f79989abb2061dad2d5c4e6f127e9dd3240f73f8220c7152cd35b05 PyQt5_gpl-5.7.tar.gz
diff --git a/package/python-pyqt5/python-pyqt5.mk b/package/python-pyqt5/python-pyqt5.mk
new file mode 100644
index 0000000..e58ee5a
--- /dev/null
+++ b/package/python-pyqt5/python-pyqt5.mk
@@ -0,0 +1,79 @@
+################################################################################
+#
+# python-pyqt5
+#
+################################################################################
+
+PYTHON_PYQT5_VERSION = 5.7
+PYTHON_PYQT5_SOURCE = PyQt5_gpl-$(PYTHON_PYQT5_VERSION).tar.gz
+PYTHON_PYQT5_SITE = http://downloads.sourceforge.net/project/pyqt/PyQt5/PyQt-$(PYTHON_PYQT5_VERSION)
+PYTHON_PYQT5_LICENSE = GPLv3
+PYTHON_PYQT5_LICENSE_FILES = LICENSE
+
+PYTHON_PYQT5_DEPENDENCIES = python-sip host-python-sip qt5base
+
+ifeq ($(BR2_PACKAGE_PYTHON),y)
+PYTHON_PYQT5_PYTHON_DIR = python$(PYTHON_VERSION_MAJOR)
+PYTHON_PYQT5_RM_PORT_BASE = port_v3
+else ifeq ($(BR2_PACKAGE_PYTHON3),y)
+PYTHON_PYQT5_PYTHON_DIR = python$(PYTHON3_VERSION_MAJOR)
+PYTHON_PYQT5_RM_PORT_BASE = port_v2
+endif
+
+PYTHON_PYQT5_QTDETAIL_LICENSE = Open Source
+
+PYTHON_PYQT5_QTDETAIL_TYPE = shared
+
+# Turn off features that aren't available in current qt configuration
+PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES += $(if $(BR2_PACKAGE_OPENSSL),,PyQt_SSL)
+PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES += $(if $(BR2_PACKAGE_QT5BASE_OPENGL),,PyQt_OpenGL)
+PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES += $(if $(BR2_PACKAGE_QT5BASE_OPENGL_DESKTOP),,PyQt_Desktop_OpenGL)
+
+define PYTHON_PYQT5_QTDETAIL
+ echo $(1) >> $(2)/qtdetail.out
+endef
+
+# Since we can't run generate qtdetail.out by running qtdetail on target device
+# we must generate the configuration.
+define PYTHON_PYQT5_GENERATE_QTDETAIL
+ $(RM) -f $(1)/qtdetail.out
+ $(call PYTHON_PYQT5_QTDETAIL,$(PYTHON_PYQT5_QTDETAIL_LICENSE),$(1))
+ $(call PYTHON_PYQT5_QTDETAIL,$(PYTHON_PYQT5_QTDETAIL_TYPE),$(1))
+ $(foreach f,$(PYTHON_PYQT5_QTDETAIL_DISABLE_FEATURES),
+ $(call PYTHON_PYQT5_QTDETAIL,$(f),$(1)) \
+ )
+endef
+
+PYTHON_PYQT5_CONF_OPTS = \
+ --bindir $(TARGET_DIR)/usr/bin \
+ --destdir $(TARGET_DIR)/usr/lib/$(PYTHON_PYQT5_PYTHON_DIR)/site-packages \
+ --qmake $(HOST_DIR)/usr/bin/qmake \
+ --sysroot $(STAGING_DIR)/usr \
+ -w --confirm-license \
+ --no-designer-plugin \
+ --no-docstrings \
+ --no-sip-files
+
+define PYTHON_PYQT5_CONFIGURE_CMDS
+ $(call PYTHON_PYQT5_GENERATE_QTDETAIL,$(@D))
+ (cd $(@D); \
+ $(TARGET_MAKE_ENV) \
+ $(TARGET_CONFIGURE_OPTS) \
+ $(HOST_DIR)/usr/bin/python configure.py \
+ $(PYTHON_PYQT5_CONF_OPTS) \
+ )
+endef
+
+define PYTHON_PYQT5_BUILD_CMDS
+ $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)
+endef
+
+# __init__.py is needed to import PyQt5
+# __init__.pyc is needed if BR2_PACKAGE_PYTHON_PYC_ONLY is set
+define PYTHON_PYQT5_INSTALL_TARGET_CMDS
+ $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) install
+ touch $(TARGET_DIR)/usr/lib/$(PYTHON_PYQT5_PYTHON_DIR)/site-packages/PyQt5/__init__.py
+ $(RM) -rf $(TARGET_DIR)/usr/lib/$(PYTHON_PYQT5_PYTHON_DIR)/site-packages/PyQt5/uic/$(PYTHON_PYQT5_RM_PORT_BASE)
+endef
+
+$(eval $(generic-package))
--
2.1.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Buildroot] [PATCH v2] python-pyqt5: new package
2016-08-23 9:26 ` [Buildroot] [PATCH v2] " Manuel Vögele
@ 2016-09-20 19:14 ` Thomas Petazzoni
2016-09-22 20:54 ` Arnout Vandecappelle
0 siblings, 1 reply; 11+ messages in thread
From: Thomas Petazzoni @ 2016-09-20 19:14 UTC (permalink / raw)
To: buildroot
Hello,
I've applied your patch, after doing just a small change to it, see
below.
On Tue, 23 Aug 2016 11:26:06 +0200, Manuel V?gele wrote:
> new file mode 100644
> index 0000000..98c709e
> --- /dev/null
> +++ b/package/python-pyqt5/Config.in
> @@ -0,0 +1,17 @@
> +comment "python-pyqt5 needs a toolchain w/ wchar, NPTL, C++, dynamic library"
> + depends on !BR2_PACKAGE_QT
This line is unrelated (mentions Qt, while this package is for Qt5),
and in fact not needed: this package is *selecting* Qt5, so there is
no need to take into account a Qt dependency here.
> + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS
This line is intended with spaces, while it should have been intended
with a tab. Also, it was too long, so I've split the line.
I've fixed those minor details and applied.
Thanks!
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] [PATCH v2] python-pyqt5: new package
2016-09-20 19:14 ` Thomas Petazzoni
@ 2016-09-22 20:54 ` Arnout Vandecappelle
2016-09-27 14:45 ` Thomas Petazzoni
0 siblings, 1 reply; 11+ messages in thread
From: Arnout Vandecappelle @ 2016-09-22 20:54 UTC (permalink / raw)
To: buildroot
On 20-09-16 21:14, Thomas Petazzoni wrote:
>> +comment "python-pyqt5 needs a toolchain w/ wchar, NPTL, C++, dynamic library"
>> > + depends on !BR2_PACKAGE_QT
> This line is unrelated (mentions Qt, while this package is for Qt5),
> and in fact not needed: this package is *selecting* Qt5, so there is
> no need to take into account a Qt dependency here.
Well, since the main symbol depends on !BR2_PACKAGE_QT, you would expect either
a comment that explains that, or you would expect the other comments to be
hidden. So to me it makes sense to have that depends for the comment. Otherwise,
you go and enable wchar, NPTL, C++, dynlib, you come back, and hey presto the
comment disappears but the package still can't be selected.
Regards,
Arnout
--
Arnout Vandecappelle arnout at mind be
Senior Embedded Software Architect +32-16-286500
Essensium/Mind http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] [PATCH v2] python-pyqt5: new package
2016-09-22 20:54 ` Arnout Vandecappelle
@ 2016-09-27 14:45 ` Thomas Petazzoni
0 siblings, 0 replies; 11+ messages in thread
From: Thomas Petazzoni @ 2016-09-27 14:45 UTC (permalink / raw)
To: buildroot
Hello,
On Thu, 22 Sep 2016 22:54:08 +0200, Arnout Vandecappelle wrote:
> Well, since the main symbol depends on !BR2_PACKAGE_QT, you would expect either
> a comment that explains that, or you would expect the other comments to be
> hidden. So to me it makes sense to have that depends for the comment. Otherwise,
> you go and enable wchar, NPTL, C++, dynlib, you come back, and hey presto the
> comment disappears but the package still can't be selected.
Indeed. Thanks for correcting me on this. Fixed in
https://git.buildroot.org/buildroot/commit/?id=b62fdfdc274e592675a4894b893841991e72c913.
Thanks again!
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2016-09-27 14:45 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-19 13:42 [Buildroot] [PATCH 0/2] PyQt5 package Manuel Vögele
2016-08-19 13:42 ` [Buildroot] [PATCH 1/2] python-sip: allow package to be built using Qt5 Manuel Vögele
2016-08-19 13:58 ` Thomas Petazzoni
2016-08-19 13:42 ` [Buildroot] [PATCH 2/2] python-pyqt5: new package Manuel Vögele
2016-08-19 14:07 ` Thomas Petazzoni
2016-08-19 14:40 ` Manuel Vögele
2016-08-19 14:48 ` Thomas Petazzoni
2016-08-23 9:26 ` [Buildroot] [PATCH v2] " Manuel Vögele
2016-09-20 19:14 ` Thomas Petazzoni
2016-09-22 20:54 ` Arnout Vandecappelle
2016-09-27 14:45 ` Thomas Petazzoni
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox