qt: fix build for arm with BR2_STATIC_LIBS
PATCH 1/1 qt: fix build for arm with BR2_STATIC_LIBS
Some Buildroot-generated static toolchains for ARM do not have dlfcn.h header, which breaks builds of qt-4.8.7 because its QtCore's plugin loader expects this header to be present (and dynamic libraries to be supported). For certain platforms without dynamic libraries, there is a QT_NO_DYNAMIC_LIBRARY constant defined in plugin loader's source. This patch puts that constant into Qt's build environment if Buildroot is configured without shared library support, and prevents plugin loader from defining it if it has already been defined.
Fixes:
- http://autobuild.buildroot.net/results/11a4c19638ca211bd2a424fd92602166235c9433
- http://autobuild.buildroot.net/results/c056e8781558267f6971a5f017f47e90dcf24e07
- http://autobuild.buildroot.net/results/b8f34afa8686e890a1a3882a52081bb6a3b9c13b
and several others.
--- package/qt/0009-no-dynamic-library-plugins.patch | 27 ++++++++++++++++++++++++ package/qt/qt.mk | 4 ++++ 2 files changed, 31 insertions(+) create mode 100644 package/qt/0009-no-dynamic-library-plugins.patch
package/qt/0009-no-dynamic-library-plugins.patch new file +27 -0
@@ -0,0 +1,27 @@ +Do not define QT_NO_DYNAMIC_LIBRARY if it is already defined + +QtCore plugin loader behaves correctly on platforms that do not support +dynamic libraries. This is implemented by QT_NO_DYNAMIC_LIBRARY constant +defined at compile time in the loader's source for specific platforms. +Since Buildroot does not have a separate platform defined for it in +mkspecs, if shared libraries are not supported by its configuration, the +constant is specified in Qt's build environment. This patch prevents +compilation error in such cases. + +Signed-off-by: Alexander Lukichev <[email protected]> + +diff -uNrp qt-4.8.7.orig/src/corelib/plugin/qlibrary_unix.cpp qt-4.8.7/src/corelib/plugin/qlibrary_unix.cpp +--- qt-4.8.7.orig/src/corelib/plugin/qlibrary_unix.cpp 2015-05-07 17:14:48.000000000 +0300 ++++ qt-4.8.7/src/corelib/plugin/qlibrary_unix.cpp 2015-10-06 08:53:27.189232642 +0300 +@@ -56,9 +56,11 @@ + #include <string.h> + #endif + ++#ifndef QT_NO_DYNAMIC_LIBRARY + #if (defined(Q_OS_VXWORKS) && !defined(VXWORKS_RTP)) || defined (Q_OS_NACL) + #define QT_NO_DYNAMIC_LIBRARY + #endif ++#endif + + QT_BEGIN_NAMESPACE +
package/qt/qt.mk +4 -0
@@ -203,6 +203,10 @@ else QT_CONFIGURE_OPTS += -static endif +ifeq ($(BR2_STATIC_LIBS),y) +QT_CONFIGURE_OPTS += -D QT_NO_DYNAMIC_LIBRARY +endif + ifeq ($(BR2_ENDIAN),"LITTLE") QT_CONFIGURE_OPTS += -little-endian else
Signature · 1 line
1.8.0.1
PATCH 1/1 qt: fix build for arm with BR2_STATIC_LIBS
Quoted 29 lines · Alexander Lukichev
Some Buildroot-generated static toolchains for ARM do not have
dlfcn.hheader, which breaks builds of qt-4.8.7 because its QtCore's plugin loader expects this header to be present (and dynamic libraries to be supported). For certain platforms without dynamic libraries, there is aQT_NO_DYNAMIC_LIBRARYconstant defined in plugin loader's source. This patch puts that constant into Qt's build environment if Buildroot is configured without shared library support, and prevents plugin loader from defining it if it has already been defined.Fixes:
- http://autobuild.buildroot.net/results/11a4c19638ca211bd2a424fd92602166235c9433
- http://autobuild.buildroot.net/results/c056e8781558267f6971a5f017f47e90dcf24e07
- http://autobuild.buildroot.net/results/b8f34afa8686e890a1a3882a52081bb6a3b9c13b
and several others.Signed-off-by Alexander Lukichev <[email protected]>--- package/qt/0009-no-dynamic-library-plugins.patch | 27 ++++++++++++++++++++++++ package/qt/qt.mk | 4 ++++ 2 files changed, 31 insertions(+) create mode 100644 package/qt/0009-no-dynamic-library-plugins.patchpackage/qt/0009-no-dynamic-library-plugins.patch new file +0
-0
package/qt/0009-no-dynamic-library-plugins.patch line 9
Quoted 9 lines
package/qt/0009-no-dynamic-library-plugins.patch new file +9
-0@@ -0,0 +1,27 @@ +Do not define QT_NO_DYNAMIC_LIBRARY if it is already defined + +QtCore plugin loader behaves correctly on platforms that do not support +dynamic libraries. This is implemented by QT_NO_DYNAMIC_LIBRARY constant +defined at compile time in the loader's source for specific platforms. +Since Buildroot does not have a separate platform defined for it in +mkspecs, if shared libraries are not supported by its configuration, the +constant is specified in Qt's build environment. This patch prevents +compilation error in such cases.
I'm sorry, but I fail to understand how there can be a compilation error...
We're not building for VxWorks or NaCl, so why should there be a problem?
Otherwise the patch looks good to me BTW.
Regards,
Arnout
Quoted 34 lines
package/qt/0009-no-dynamic-library-plugins.patch new file +18
-0+ +Signed-off-by: Alexander Lukichev <[email protected]> + +diff -uNrp qt-4.8.7.orig/src/corelib/plugin/qlibrary_unix.cpp qt-4.8.7/src/corelib/plugin/qlibrary_unix.cpp +--- qt-4.8.7.orig/src/corelib/plugin/qlibrary_unix.cpp 2015-05-07 17:14:48.000000000 +0300 ++++ qt-4.8.7/src/corelib/plugin/qlibrary_unix.cpp 2015-10-06 08:53:27.189232642 +0300 +@@ -56,9 +56,11 @@ + #include <string.h> + #endif + ++#ifndef QT_NO_DYNAMIC_LIBRARY + #if (defined(Q_OS_VXWORKS) && !defined(VXWORKS_RTP)) || defined (Q_OS_NACL) + #define QT_NO_DYNAMIC_LIBRARY + #endif ++#endif + + QT_BEGIN_NAMESPACE +package/qt/qt.mk +4
-0@@ -203,6 +203,10 @@ else QT_CONFIGURE_OPTS += -static endif +ifeq ($(BR2_STATIC_LIBS),y) +QT_CONFIGURE_OPTS += -D QT_NO_DYNAMIC_LIBRARY +endif + ifeq ($(BR2_ENDIAN),"LITTLE") QT_CONFIGURE_OPTS += -little-endian else
Signature · 6 lines
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
PATCH 1/1 qt: fix build for arm with BR2_STATIC_LIBS
Hi, Arnout!
Thanks for taking a look!
Quoted 4 lines · Arnout Vandecappelle
Quoted 4 lines
package/qt/0009-no-dynamic-library-plugins.patch new file +1
-0@@ -0,0 +1,27 @@ +Do not define QT_NO_DYNAMIC_LIBRARY if it is already defined
[...]
Quoted 8 lines
Quoted 5 lines
++#ifndef
QT_NO_DYNAMIC_LIBRARY
+ #if (defined(Q_OS_VXWORKS)&& !defined(VXWORKS_RTP)) || defined (Q_OS_NACL)
+ #defineQT_NO_DYNAMIC_LIBRARY
+ #endif
++#endifI'm sorry, but I fail to understand how there can be a compilation error...
We're not building for VxWorks or NaCl, so why should there be a problem?
Indeed. I will remove unnecessary Qt patch and send a new version. Thanks again!
--
Best regards,
Alexander Lukichev
PATCH v2 1/1 qt: fix build for arm with BR2_STATIC_LIBS
In reply to Alexander LukichevSome Buildroot-generated static toolchains for ARM do not have dlfcn.h header, which breaks builds of qt-4.8.7 because its QtCore's plugin loader expects this header to be present (and dynamic libraries to be supported). For certain platforms without dynamic libraries, there is a QT_NO_DYNAMIC_LIBRARY constant defined in plugin loader's source. This patch puts that constant into Qt's build environment if Buildroot is configured without shared library support.
Fixes:
- http://autobuild.buildroot.net/results/11a4c19638ca211bd2a424fd92602166235c9433
- http://autobuild.buildroot.net/results/c056e8781558267f6971a5f017f47e90dcf24e07
- http://autobuild.buildroot.net/results/b8f34afa8686e890a1a3882a52081bb6a3b9c13b
and several others.
---
Changes
v2: unnecessary Qt patch removed (Arnout).
--- package/qt/qt.mk | 4 ++++ 1 file changed, 4 insertions(+)
package/qt/qt.mk +4 -0
@@ -203,6 +203,10 @@ else QT_CONFIGURE_OPTS += -static endif +ifeq ($(BR2_STATIC_LIBS),y) +QT_CONFIGURE_OPTS += -D QT_NO_DYNAMIC_LIBRARY +endif + ifeq ($(BR2_ENDIAN),"LITTLE") QT_CONFIGURE_OPTS += -little-endian else
Signature · 1 line
2.6.1
Thomas Petazzoni
AppliedPATCH v2 1/1 qt: fix build for arm with BR2_STATIC_LIBS
Dear Alexander Lukichev,
Quoted 15 lines · Alexander Lukichev
Some Buildroot-generated static toolchains for ARM do not have
dlfcn.hheader, which breaks builds of qt-4.8.7 because its QtCore's plugin loader expects this header to be present (and dynamic libraries to be supported). For certain platforms without dynamic libraries, there is aQT_NO_DYNAMIC_LIBRARYconstant defined in plugin loader's source. This patch puts that constant into Qt's build environment if Buildroot is configured without shared library support.Fixes:
- http://autobuild.buildroot.net/results/11a4c19638ca211bd2a424fd92602166235c9433
- http://autobuild.buildroot.net/results/c056e8781558267f6971a5f017f47e90dcf24e07
- http://autobuild.buildroot.net/results/b8f34afa8686e890a1a3882a52081bb6a3b9c13b
and several others.
Quoted 7 lines
Signed-off-by Alexander Lukichev <[email protected]>---
Changes
v2: unnecessary Qt patch removed (Arnout).--- package/qt/qt.mk | 4 ++++ 1 file changed, 4 insertions(+)
Applied, thanks.
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH v2 1/1 qt: fix build for arm with BR2_STATIC_LIBS
In reply to Alexander LukichevQuoted 30 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Alexander" == Alexander Lukichev <[email protected]> writes:
Some Buildroot-generated static toolchains for ARM do not have
dlfcn.hheader, which breaks builds of qt-4.8.7 because its QtCore's plugin loader expects this header to be present (and dynamic libraries to be supported). For certain platforms without dynamic libraries, there is aQT_NO_DYNAMIC_LIBRARYconstant defined in plugin loader's source. This patch puts that constant into Qt's build environment if Buildroot is configured without shared library support.Fixes:
- http://autobuild.buildroot.net/results/11a4c19638ca211bd2a424fd92602166235c9433
- http://autobuild.buildroot.net/results/c056e8781558267f6971a5f017f47e90dcf24e07
- http://autobuild.buildroot.net/results/b8f34afa8686e890a1a3882a52081bb6a3b9c13b
and several others.Signed-off-by Alexander Lukichev <[email protected]>---
Changes
v2: unnecessary Qt patch removed (Arnout).--- package/qt/qt.mk | 4 ++++ 1 file changed, 4 insertions(+)package/qt/qt.mk +0
-0
package/qt/qt.mk else · line 207
Quoted 5 lines
package/qt/qt.mk +2
-0@@ -203,6 +203,10 @@ else QT_CONFIGURE_OPTS += -static endif +ifeq ($(BR2_STATIC_LIBS),y) +QT_CONFIGURE_OPTS += -D QT_NO_DYNAMIC_LIBRARY
Hmm, shouldn't this be checking BR2_PACKAGE_QT_STATIC instead?
Signature · 1 line
Bye, Peter Korsgaard
PATCH v2 1/1 qt: fix build for arm with BR2_STATIC_LIBS
Hi Peter,
Quoted 10 lines · Peter Korsgaard
Quoted 10 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Alexander" == Alexander Lukichev <[email protected]> writes:
Some Buildroot-generated static toolchains for ARM do not have
dlfcn.hheader, which breaks builds of qt-4.8.7 because its QtCore's plugin loader expects this header to be present (and dynamic libraries to be supported). For certain platforms without dynamic libraries, there is aQT_NO_DYNAMIC_LIBRARYconstant defined in plugin loader's source. This patch puts that constant into Qt's build environment if Buildroot is configured without shared library support.
[...]
Quoted 4 lines
package/qt/qt.mk else · line 207
Quoted 2 lines
package/qt/qt.mk +2
-0+ifeq ($(BR2_STATIC_LIBS),y) +QT_CONFIGURE_OPTS += -D QT_NO_DYNAMIC_LIBRARYHmm, shouldn't this be checking
BR2_PACKAGE_QT_STATICinstead?
I think, no. If BR2_PACKAGE_QT_STATIC means to compile only Qt statically. The problem is when the whole platform is built with static libraries (BR2_STATIC_LIBS). Then loading plugins dynamically is not possible in principle. When the Buildroot build is not static, some dynamic libraries (e.g., compiled later) may be put onto the target system and be loaded by Qt, even if it itself is statically built. Correct me if I'm wrong but I have not been able to confirm that static Qt cannot load / work with dynamic libraries.
--
Best regards,
Alexander Lukichev