From d4d2a3d5eaaa45a266c5563fdaff81213d6f52fd Mon Sep 17 00:00:00 2001 From: Mirko Vogt Date: Sat, 27 Aug 2016 21:41:07 +0200 Subject: [PATCH] level Qt up to version 5.7.0 + several bug fixes Qt5-GUI now gets compiled with support for OpenGL, however only links against GL stubs provided by the 2d software renderer. That way we can decide at runtime, whether we want to use GL or not - with almost no overhead, if not. This also enables QtQuick2 being built correctly, which depends on GL support and provides the possibility of using QtQuick2 with the 2d-sw-renderer even on hardware without native support for GL. --- frameworks/qt5base/Makefile | 144 ++++++++++++------ frameworks/qt5base/files/qmake.mk | 6 +- frameworks/qt5base/patches/002-musl.patch | 30 ---- .../qt5base/patches/011-use-posix-iconv.patch | 19 +-- 4 files changed, 106 insertions(+), 93 deletions(-) delete mode 100644 frameworks/qt5base/patches/002-musl.patch diff --git a/frameworks/qt5base/Makefile b/frameworks/qt5base/Makefile index c0fae4e..7b6abdf 100644 --- a/frameworks/qt5base/Makefile +++ b/frameworks/qt5base/Makefile @@ -1,20 +1,20 @@ # -# Copyright (C) 2015 OpenWrt.org -# Author: Mirko Vogt +# Copyright (C) 2016 OpenWrt.org +# Author: Mirko Vogt # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # # TODO / known bugs: -# - only framebuffer (linuxfb) support for now, XBC/DirectFB to come - thus no GL thus no qtquick2 / QML2, as it has a hard dependency on GL -# - host_build functionality seems to be broken - qmake doesn't switch to the host toolchain (linux-g++) when host_build gets invoked +# - plugins don't work when sstrip is used for stripping +# - no X11/wayland/xcb/kms support so far - primary target is linuxfb include $(TOPDIR)/rules.mk PKG_NAME:=qt5base -PKG_VERSION:=5.4.2 +PKG_VERSION:=5.7.0 PKG_RELEASE:=1 -PKG_MD5SUM:=67a95eec79ffc4a14f516ad6f3d24c96 +PKG_MD5SUM:=184f9460b40752d71b15b827260580c2 PKG_SYS_NAME:=qtbase-opensource-src-$(PKG_VERSION) PKG_SOURCE:=$(PKG_SYS_NAME).tar.xz @@ -31,13 +31,17 @@ include $(INCLUDE_DIR)/nls.mk include ./files/qmake.mk PKG_CONFIG_DEPENDS:= \ - CONFIG_PACKAGE_qt5base-plugin-sqldrivers-sqlite \ CONFIG_PACKAGE_qt5base-plugin-imageformats-jpeg \ + CONFIG_PACKAGE_qt5base-plugin-imageformats-png \ CONFIG_PACKAGE_qt5base-network \ CONFIG_PACKAGE_qt5base-gui \ - CONFIG_PACKAGE_qt5base-plugin-imageformats-gif \ + CONFIG_PACKAGE_qt5base-gl \ + CONFIG_PACKAGE_qt5base-widgets \ + CONFIG_PACKAGE_qt5base-examples \ + CONFIG_PACKAGE_qt5base-plugin-platforms-minimal \ CONFIG_PACKAGE_qt5base-plugin-platforms-linuxfb \ - CONFIG_PACKAGE_qt5base-plugin-platforms-minimal +# CONFIG_PACKAGE_qt5base-plugin-platforms-eglfs \ +# CONFIG_PACKAGE_qt5base-plugin-platforms-minimalegl \ # Do not use sstrip for QT5. When sstrip is used the QT5 plugin loading does # not work, because of QT''s internal elf parser, see @@ -60,7 +64,7 @@ define Package/qt5base/Default CATEGORY:=Video SUBMENU:=Frameworks and Toolkits TITLE:=Qt5base - DEPENDS:=qt5base + DEPENDS+=qt5base URL:=http://qt.io MAINTAINER:=Mirko Vogt endef @@ -77,16 +81,22 @@ define Package/qt5base-concurrent DEPENDS+=+qt5base-core endef +define Package/qt5base-gl + $(call Package/qt5base/Default) + TITLE+=gl + DEPENDS+=+qt5base-core +qt5base-gui +qt5base-widgets +endef + define Package/qt5base-core $(call Package/qt5base/Default) TITLE+=core - DEPENDS+=+libpthread +zlib +libpcre16 +libstdcpp +librt $(ICONV_DEPENDS) + DEPENDS+=+libpthread +zlib +libpcre16 +libstdcpp +librt +libdouble-conversion $(ICONV_DEPENDS) #+icu endef define Package/qt5base-gui $(call Package/qt5base/Default) TITLE+=gui - DEPENDS+=+qt5base-core +libpng + DEPENDS+=+qt5base-core +qt5quick2-2d-sw-renderer-GLstubs +libpng +fontconfig +libfreetype +libudev endef define Package/qt5base-network @@ -169,11 +179,11 @@ endef ####### imageformats -define Package/qt5base-plugin-imageformats-gif - $(call Package/qt5base/Default) -TITLE+=imageformat gif (plugin) - DEPENDS+=+qt5base-core +qt5base-gui -endef +#define Package/qt5base-plugin-imageformats-gif +# $(call Package/qt5base/Default) +#TITLE+=imageformat gif (plugin) +# DEPENDS+=+qt5base-core +qt5base-gui +#endef define Package/qt5base-plugin-imageformats-ico $(call Package/qt5base/Default) @@ -189,6 +199,18 @@ endef ####### platforms +#define Package/qt5base-plugin-platforms-eglfs +# $(call Package/qt5base/Default) +# TITLE+=platform eglfs (plugin) +# DEPENDS+=+qt5base-core +qt5base-gui +libfreetype +fontconfig +#endef + +#define Package/qt5base-plugin-platforms-minimalegl +# $(call Package/qt5base/Default) +# TITLE+=platform minimalegl (plugin) +# DEPENDS+=+qt5base-core +qt5base-gui +libfreetype +fontconfig +#endef + define Package/qt5base-plugin-platforms-linuxfb $(call Package/qt5base/Default) TITLE+=platform linuxfb (plugin) @@ -209,11 +231,11 @@ endef ###### sql -define Package/qt5base-plugin-sqldrivers-sqlite - $(call Package/qt5base/Default) - TITLE+=sqldriver sqlite (plugin) - DEPENDS+=+qt5base-core +qt5base-sql +libsqlite3 -endef +#define Package/qt5base-plugin-sqldrivers-sqlite +# $(call Package/qt5base/Default) +# TITLE+=sqldriver sqlite (plugin) +# DEPENDS+=+qt5base-core +qt5base-sql +libsqlite3 +#endef define Package/qt5base-examples $(call Package/qt5base/Default) @@ -226,7 +248,8 @@ define Package/qt5base-examples +qt5base-sql \ +qt5base-xml \ +qt5base-printSupport \ - +qt5base-concurrent + +qt5base-concurrent \ + +qt5base-gl endef define Build/Prepare @@ -236,6 +259,10 @@ define Build/Prepare $(PKG_BUILD_DIR)/mkspecs/ endef +TARGET_CFLAGS += \ + -I$(STAGING_DIR)/usr/include/freetype2 \ + -I$(STAGING_DIR)/usr/include/libdrm + define Build/Configure # CROSS/TARGET_* need to be passed to configure, in order to use cross-compiling tools to check for requirements. # Usually used variables such as CC/CXX/CFLAGS/CXXFLAGS/LDFLAGS would be used for compilation of host tools (qmake, moc, etc.), @@ -249,6 +276,7 @@ define Build/Configure -prefix $(QT_INSTALL_PREFIX) \ -extprefix $(QT_EXTPREFIX) \ -hostprefix $(QT_HOST_PREFIX) \ + -no-gcc-sysroot \ -bindir $(QT_INSTALL_BINS) \ -headerdir $(QT_INSTALL_HEADERS) \ -libdir $(QT_INSTALL_LIBS) \ @@ -268,41 +296,46 @@ define Build/Configure -hostdatadir $(QT_HOST_DATA) \ -v \ -release \ + -no-optimized-tools \ -opensource \ -confirm-license \ - -c++11 \ -shared \ -largefile \ -accessibility \ - $(if $(CONFIG_PACKAGE_qt5base-plugin-sqldrivers-sqlite),-system-sqlite,-no-sql-sqlite) \ -no-sql-db2 \ -no-sql-ibase \ -no-sql-mysql \ -no-sql-oci \ -no-sql-odbc \ -no-sql-psql \ + -no-sql-sqlite \ -no-sql-sqlite2 \ -no-sql-tds \ + -system-sqlite \ -no-qml-debug \ - -no-nis \ - -no-sse2 \ -no-sse3 \ -no-ssse3 \ -no-sse4.1 \ -no-sse4.2 \ -no-avx \ -no-avx2 \ - $(if $(findstring -mdsp,$(TARGET_CFLAGS)),,-no-mips_dsp)\ - $(if $(findstring -mdspr2,$(TARGET_CFLAGS)),,-no-mips_dspr2)\ + -no-avx512 \ + $(if $(findstring -mdsp,$(TARGET_CFLAGS)),,-no-mips_dsp) \ + $(if $(findstring -mdspr2,$(TARGET_CFLAGS)),,-no-mips_dspr2) \ + -no-mips_dspr2 \ -force-pkg-config \ -system-zlib \ - -mtdev \ + -no-mtdev \ -no-journald \ + -syslog \ + -no-gif \ $(if $(CONFIG_PACKAGE_qt5base-gui),-system-libpng,-no-libpng) \ $(if $(CONFIG_PACKAGE_qt5base-plugin-imageformats-jpeg),-system-libjpeg,-no-libjpeg) \ + -system-doubleconversion \ -system-freetype \ -no-harfbuzz \ $(if $(CONFIG_PACKAGE_qt5base-network),-openssl-linked,-no-openssl) \ + -no-libproxy \ -system-pcre \ -system-xcb \ -system-xkbcommon \ @@ -311,16 +344,18 @@ define Build/Configure -no-glib \ -no-pulseaudio \ -no-alsa \ - -no-gtkstyle \ + -no-gtk \ + -no-optimized-qmake \ -nomake tools \ + -make examples \ $(if $(CONFIG_PACKAGE_qt5base-examples),-make examples,-nomake examples) \ $(if $(CONFIG_PACKAGE_qt5base-gui),-gui,-no-gui) \ - $(if $(CONFIG_PACKAGE_qt5base-plugin-imageformats-gif),,-no-gif) \ $(if $(CONFIG_PACKAGE_qt5base-widgets),-widgets,-no-widgets) \ - -no-optimized-qmake \ + -no-nis \ -no-cups \ $(if $(CONFIG_BUILD_NLS),-iconv,-no-iconv) \ -evdev \ + -no-tslib \ -no-icu \ -fontconfig \ -no-strip \ @@ -330,14 +365,18 @@ define Build/Configure -no-use-gold-linker \ -no-xcb \ -no-eglfs \ + -no-kms \ + -no-gbm \ -no-directfb \ $(if $(CONFIG_PACKAGE_qt5base-plugin-platforms-linuxfb),-linuxfb,-no-linuxfb) \ - -no-kms \ + -no-mirclient \ + -opengl \ $(if $(CONFIG_PACKAGE_qt5base-plugin-platforms-minimal),,-qpa minimal) \ - -xplatform linux-openwrt-g++ \ - -no-opengl \ - -no-system-proxies \ + -no-libinput \ + -no-gstreamer \ + -system-proxies \ -no-warnings-are-errors \ + -xplatform linux-openwrt-g++ \ ) endef @@ -362,6 +401,10 @@ define Package/qt5base-core/install $(call Build/Install/Libs,$(1),libQt5Core) endef +define Package/qt5base-gl/install + $(call Build/Install/Libs,$(1),libQt5OpenGL) +endef + define Package/qt5base-gui/install $(call Build/Install/Libs,$(1),libQt5Gui) endef @@ -410,9 +453,9 @@ define Package/qt5base-plugin-input-evdevtouch/install $(call Build/Install/Plugins,$(1),generic,libqevdevtouchplugin) endef -define Package/qt5base-plugin-imageformats-gif/install - $(call Build/Install/Plugins,$(1),imageformats,libqgif) -endef +#define Package/qt5base-plugin-imageformats-gif/install +# $(call Build/Install/Plugins,$(1),imageformats,libqgif) +#endef define Package/qt5base-plugin-imageformats-ico/install $(call Build/Install/Plugins,$(1),imageformats,libqico) @@ -426,6 +469,14 @@ define Package/qt5base-plugin-platforms-linuxfb/install $(call Build/Install/Plugins,$(1),platforms,libqlinuxfb) endef +#define Package/qt5base-plugin-platforms-eglfs/install +# $(call Build/Install/Plugins,$(1),platforms,libqeglfs) +#endef + +#define Package/qt5base-plugin-platforms-minimalegl/install +# $(call Build/Install/Plugins,$(1),platforms,libqminimalegl) +#endef + define Package/qt5base-plugin-platforms-minimal/install $(call Build/Install/Plugins,$(1),platforms,libqminimal) endef @@ -434,9 +485,9 @@ define Package/qt5base-plugin-platforms-offscreen/install $(call Build/Install/Plugins,$(1),platforms,libqoffscreen) endef -define Package/qt5base-plugin-sqldrivers-sqlite/install - $(call Build/Install/Plugins,$(1),sqldrivers,libqsqlite) -endef +#define Package/qt5base-plugin-sqldrivers-sqlite/install +# $(call Build/Install/Plugins,$(1),sqldrivers,libqsqlite) +#endef define Package/qt5base-examples/install $(call Build/Install/Examples,$(1)) @@ -446,6 +497,7 @@ $(eval $(call BuildPackage,qt5base)) $(eval $(call BuildPackage,qt5base-concurrent)) $(eval $(call BuildPackage,qt5base-core)) $(eval $(call BuildPackage,qt5base-gui)) +$(eval $(call BuildPackage,qt5base-gl)) $(eval $(call BuildPackage,qt5base-network)) $(eval $(call BuildPackage,qt5base-printSupport)) $(eval $(call BuildPackage,qt5base-sql)) @@ -457,11 +509,13 @@ $(eval $(call BuildPackage,qt5base-plugin-input-evdevkeyboard)) $(eval $(call BuildPackage,qt5base-plugin-input-evdevmouse)) $(eval $(call BuildPackage,qt5base-plugin-input-evdevtablet)) $(eval $(call BuildPackage,qt5base-plugin-input-evdevtouch)) -$(eval $(call BuildPackage,qt5base-plugin-imageformats-gif)) +#$(eval $(call BuildPackage,qt5base-plugin-imageformats-gif)) $(eval $(call BuildPackage,qt5base-plugin-imageformats-ico)) $(eval $(call BuildPackage,qt5base-plugin-imageformats-jpeg)) $(eval $(call BuildPackage,qt5base-plugin-platforms-linuxfb)) +#$(eval $(call BuildPackage,qt5base-plugin-platforms-eglfs)) +#$(eval $(call BuildPackage,qt5base-plugin-platforms-minimalegl)) $(eval $(call BuildPackage,qt5base-plugin-platforms-minimal)) $(eval $(call BuildPackage,qt5base-plugin-platforms-offscreen)) -$(eval $(call BuildPackage,qt5base-plugin-sqldrivers-sqlite)) +#$(eval $(call BuildPackage,qt5base-plugin-sqldrivers-sqlite)) $(eval $(call BuildPackage,qt5base-examples)) diff --git a/frameworks/qt5base/files/qmake.mk b/frameworks/qt5base/files/qmake.mk index 2115ef4..61d6920 100644 --- a/frameworks/qt5base/files/qmake.mk +++ b/frameworks/qt5base/files/qmake.mk @@ -74,8 +74,8 @@ define Build/Configure/Default TARGET_CXXFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CXXFLAGS)" \ TARGET_LDFLAGS="$(TARGET_LDFLAGS)" \ qmake \ - -o $(PKG_BUILD_DIR)/$(2)/Makefile \ - $(PKG_BUILD_DIR)/$(2)/$(if $(1),$(1),$(PKG_NAME)).pro + -o $(PKG_BUILD_DIR)/$(MAKE_PATH)/Makefile \ + $(PKG_BUILD_DIR)/$(MAKE_PATH)/$(if $(1),$(1),$(PKG_NAME)).pro endef # we need to pass everything to $(MAKE) as well, as Makefiles may invoke qmake once again for creating further Makefiles @@ -138,7 +138,7 @@ define Build/Install/Examples $(PKG_INSTALL_DIR)/$(QT_INSTALL_EXAMPLES)/* \ $(1)/$(QT_INSTALL_EXAMPLES)/ - $(FIND) $(1)/usr/share/qt5/examples/ \ + $(FIND) $(1)/$(QT_INSTALL_EXAMPLES) \ -type f \( -name '*.cpp' -o -name '*.h' -o -name '*.pro' -o -name '*.pri' \) | \ $(XARGS) $(RM) -vf endef diff --git a/frameworks/qt5base/patches/002-musl.patch b/frameworks/qt5base/patches/002-musl.patch deleted file mode 100644 index 2f5fe45..0000000 --- a/frameworks/qt5base/patches/002-musl.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 8f09897de948cea8861ca95e182f442cf15a339e Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Mon, 8 Jun 2015 13:59:25 -0700 -Subject: [PATCH] linux-oe-g++: Invert conditional for defining QT_SOCKLEN_T - -This helps to make sure that QT_SOCKLEN_T is defined to be 'int' -only when its glibc < 2 and not also for the libraries which may define -it as per standards but are not glibc, e.g. musl - -Signed-off-by: Khem Raj ---- - mkspecs/linux-oe-g++/qplatformdefs.h | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - ---- a/mkspecs/linux-g++/qplatformdefs.h -+++ b/mkspecs/linux-g++/qplatformdefs.h -@@ -78,10 +78,10 @@ - - #undef QT_SOCKLEN_T - --#if defined(__GLIBC__) && (__GLIBC__ >= 2) --#define QT_SOCKLEN_T socklen_t --#else -+#if defined(__GLIBC__) && (__GLIBC__ < 2) - #define QT_SOCKLEN_T int -+#else -+#define QT_SOCKLEN_T socklen_t - #endif - - #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500) diff --git a/frameworks/qt5base/patches/011-use-posix-iconv.patch b/frameworks/qt5base/patches/011-use-posix-iconv.patch index 23e4f85..f58b06f 100644 --- a/frameworks/qt5base/patches/011-use-posix-iconv.patch +++ b/frameworks/qt5base/patches/011-use-posix-iconv.patch @@ -1,17 +1,6 @@ --- a/config.tests/unix/iconv/iconv.pro +++ b/config.tests/unix/iconv/iconv.pro -@@ -1,3 +1,3 @@ - SOURCES = iconv.cpp - CONFIG -= qt dylib --mac|mingw|qnx:LIBS += -liconv -+mac|mingw|qnx|linux:LIBS += -liconv ---- a/src/corelib/codecs/codecs.pri -+++ b/src/corelib/codecs/codecs.pri -@@ -44,6 +44,7 @@ contains(QT_CONFIG,icu) { - contains(QT_CONFIG,iconv) { - HEADERS += codecs/qiconvcodec_p.h - SOURCES += codecs/qiconvcodec.cpp -+ LIBS_PRIVATE *= -liconv - } else:contains(QT_CONFIG,gnu-libiconv) { - HEADERS += codecs/qiconvcodec_p.h - SOURCES += codecs/qiconvcodec.cpp +@@ -1,2 +1,2 @@ + CONFIG -= qt dylib +-mac|mingw|qnx|haiku:LIBS += -liconv ++mac|mingw|qnx|haiku|linux:LIBS += -liconv -- 2.30.2