From bcb8c13a7f6e18c545b3535eb57033fc6c0e02ca Mon Sep 17 00:00:00 2001 From: Samuli Piippo Date: Mon, 17 Feb 2020 16:54:55 +0200 Subject: [PATCH] Add support for qmake --- classes/qt6-cmake.bbclass | 34 +-- classes/qt6-paths.bbclass | 32 ++ classes/qt6-qmake.bbclass | 287 ++++++++++++++++++ .../qtbase/0001-Add-linux-oe-g-platform.patch | 112 +++++++ ...ow-to-set-qt.conf-from-the-outside-u.patch | 37 +++ .../qt6/qtbase/0003-Sysrootify-qmake.patch | 26 ++ recipes-qt/qt6/qtbase_git.bb | 16 +- 7 files changed, 510 insertions(+), 34 deletions(-) create mode 100644 classes/qt6-paths.bbclass create mode 100644 classes/qt6-qmake.bbclass create mode 100644 recipes-qt/qt6/qtbase/0001-Add-linux-oe-g-platform.patch create mode 100644 recipes-qt/qt6/qtbase/0002-qlibraryinfo-allow-to-set-qt.conf-from-the-outside-u.patch create mode 100644 recipes-qt/qt6/qtbase/0003-Sysrootify-qmake.patch diff --git a/classes/qt6-cmake.bbclass b/classes/qt6-cmake.bbclass index 9721f18..0ae53a3 100644 --- a/classes/qt6-cmake.bbclass +++ b/classes/qt6-cmake.bbclass @@ -1,39 +1,7 @@ -inherit cmake python3native +inherit cmake python3native qt6-paths DEPENDS_prepend = "qtbase-native " -# Install locations: -# Executables [PREFIX/bin] -QT6_INSTALL_BINDIR = "${bindir}" -# Header files [PREFIX/include] -QT6_INSTALL_INCLUDEDIR = "${includedir}" -# Libraries [PREFIX/lib] -QT6_INSTALL_LIBDIR = "${libdir}" -# Arch-dependent data [PREFIX] -QT6_INSTALL_ARCHDATADIR = "${libdir}" -# Plugins [ARCHDATADIR/plugins] -QT6_INSTALL_PLUGINSDIR = "${libdir}/plugins" -# Helper programs ARCHDATADIR/libexec otherwise -QT6_INSTALL_LIBEXECDIR = "${libexecdir}" -# QML2 imports [ARCHDATADIR/qml] -QT6_INSTALL_QMLDIR = "${libdir}/qml" -# "Arch-independent data [PREFIX] -QT6_INSTALL_DATADIR = "${datadir}" -# Documentation [DATADIR/doc] -QT6_INSTALL_DOCDIR = "${datadir}/doc" -# Translations [DATADIR/translations] -QT6_INSTALL_TRANSLATIONSDIR = "${datadir}/translations" -# Settings used by Qt programs [PREFIX/etc/xdg] -QT6_INSTALL_SYSCONFDIR = "${sysconfdir}/xdg" -# Examples [PREFIX/examples] -QT6_INSTALL_EXAMPLESDIR = "${datadir}/examples" -# Tests [PREFIX/tests] -QT6_INSTALL_TESTSDIR = "${datadir}/tests" -# Module description files directory [DATADIR/modules] -QT6_INSTALL_DESCRIPTIONSDIR = "${datadir}/modules" -# Mkspecs files [PREFIX/mkspecs] -QT6_INSTALL_MKSPECSDIR = "${datadir}/mkspecs" - EXTRA_OECMAKE += "\ -DQT_CMAKE_DEBUG_EXTEND_TARGET=ON \ -DQT_HOST_PATH:PATH=${RECIPE_SYSROOT_NATIVE}/usr/ \ diff --git a/classes/qt6-paths.bbclass b/classes/qt6-paths.bbclass new file mode 100644 index 0000000..a5231bd --- /dev/null +++ b/classes/qt6-paths.bbclass @@ -0,0 +1,32 @@ +# Install locations: + +# Executables [PREFIX/bin] +QT6_INSTALL_BINDIR ?= "${bindir}" +# Header files [PREFIX/include] +QT6_INSTALL_INCLUDEDIR ?= "${includedir}" +# Libraries [PREFIX/lib] +QT6_INSTALL_LIBDIR ?= "${libdir}" +# Arch-dependent data [PREFIX] +QT6_INSTALL_ARCHDATADIR ?= "${libdir}" +# Plugins [ARCHDATADIR/plugins] +QT6_INSTALL_PLUGINSDIR ?= "${libdir}/plugins" +# Helper programs ARCHDATADIR/libexec otherwise +QT6_INSTALL_LIBEXECDIR ?= "${libexecdir}" +# QML2 imports [ARCHDATADIR/qml] +QT6_INSTALL_QMLDIR ?= "${libdir}/qml" +# "Arch-independent data [PREFIX] +QT6_INSTALL_DATADIR ?= "${datadir}" +# Documentation [DATADIR/doc] +QT6_INSTALL_DOCDIR ?= "${docdir}" +# Translations [DATADIR/translations] +QT6_INSTALL_TRANSLATIONSDIR ?= "${datadir}/translations" +# Settings used by Qt programs [PREFIX/etc/xdg] +QT6_INSTALL_SYSCONFDIR ?= "${sysconfdir}/xdg" +# Examples [PREFIX/examples] +QT6_INSTALL_EXAMPLESDIR ?= "${datadir}/examples" +# Tests [PREFIX/tests] +QT6_INSTALL_TESTSDIR ?= "${datadir}/tests" +# Module description files directory [DATADIR/modules] +QT6_INSTALL_DESCRIPTIONSDIR ?= "${datadir}/modules" +# Mkspecs files [PREFIX/mkspecs] +QT6_INSTALL_MKSPECSDIR ?= "${libdir}/mkspecs" diff --git a/classes/qt6-qmake.bbclass b/classes/qt6-qmake.bbclass new file mode 100644 index 0000000..62f707e --- /dev/null +++ b/classes/qt6-qmake.bbclass @@ -0,0 +1,287 @@ +OE_QMAKE_PATH_PREFIX = "${prefix}" +OE_QMAKE_PATH_HEADERS = "${QT6_INSTALL_INCLUDEDIR}" +OE_QMAKE_PATH_LIBS = "${QT6_INSTALL_LIBDIR}" +OE_QMAKE_PATH_ARCHDATA = "${QT6_INSTALL_ARCHDATADIR}" +OE_QMAKE_PATH_DATA = "${QT6_INSTALL_DATADIR}" +OE_QMAKE_PATH_BINS = "${QT6_INSTALL_BINDIR}" +OE_QMAKE_PATH_LIBEXECS = "${QT6_INSTALL_LIBEXECDIR}" +OE_QMAKE_PATH_PLUGINS = "${QT6_INSTALL_PLUGINSDIR}" +OE_QMAKE_PATH_QML = "${QT6_INSTALL_QMLDIR}" +OE_QMAKE_PATH_TRANSLATIONS = "${QT6_INSTALL_TRANSLATIONSDIR}" +OE_QMAKE_PATH_DOCS = "${QT6_INSTALL_DOCDIR}" +OE_QMAKE_PATH_SETTINGS = "${sysconfdir}" +OE_QMAKE_PATH_EXAMPLES = "${QT6_INSTALL_EXAMPLESDIR}" +OE_QMAKE_PATH_TESTS = "${QT6_INSTALL_TESTSDIR}" +OE_QMAKE_PATH_HOST_PREFIX = "" +OE_QMAKE_PATH_HOST_PREFIX_class-target = "${STAGING_DIR_NATIVE}" +OE_QMAKE_PATH_HOST_BINS = "${QT6_INSTALL_BINDIR}" +OE_QMAKE_PATH_HOST_DATA = "${QMAKE_MKSPEC_PATH_TARGET}" +OE_QMAKE_PATH_HOST_LIBS = "${STAGING_LIBDIR}" +OE_QMAKE_PATH_EXTERNAL_HOST_BINS = "${STAGING_BINDIR_NATIVE}" + +# This is useful for target recipes to reference native mkspecs +QMAKE_MKSPEC_PATH_NATIVE = "${STAGING_LIBDIR_NATIVE}" +QMAKE_MKSPEC_PATH_TARGET = "${STAGING_LIBDIR}" + +QMAKE_MKSPEC_PATH = "${QMAKE_MKSPEC_PATH_TARGET}" +QMAKE_MKSPEC_PATH_class-native = "${QMAKE_MKSPEC_PATH_NATIVE}" +QMAKE_MKSPEC_PATH_class-nativesdk = "${QMAKE_MKSPEC_PATH_NATIVE}" + +# hardcode linux, because that's what 0001-Add-linux-oe-g-platform.patch adds +XPLATFORM_toolchain-clang = "linux-oe-clang" +XPLATFORM ?= "linux-oe-g++" + +OE_QMAKE_PLATFORM_NATIVE = "${XPLATFORM}" +OE_QMAKE_PLATFORM = "${XPLATFORM}" + +# Add -d to show debug output from every qmake call, but it prints *a lot*, better to add it only to debugged recipe +OE_QMAKE_DEBUG_OUTPUT ?= "" + +# Look through supplied directories recursively by default +OE_QMAKE_RECURSIVE ?= "-r" + +# Paths in .prl files contain SYSROOT value +SSTATE_SCAN_FILES += "*.pri *.prl *.prf" + +# drop default -e and add needed OE_QMAKE vars explicitly +# the problem is that when generated Makefile has: +# CFLAGS = -pipe $(OE_QMAKE_CFLAGS) -O2 -pthread -D_REENTRANT -Wall -W -fPIC $(DEFINES) +# then OE_QMAKE_CFLAGS are exported and used correctly, but then whole CFLAGS is overwritten from env (and -fPIC lost and build fails) +EXTRA_OEMAKE = " \ + MAKEFLAGS='${PARALLEL_MAKE}' \ + OE_QMAKE_CC='${OE_QMAKE_CC}' \ + OE_QMAKE_CXX='${OE_QMAKE_CXX}' \ + OE_QMAKE_CFLAGS='${OE_QMAKE_CFLAGS}' \ + OE_QMAKE_CXXFLAGS='${OE_QMAKE_CXXFLAGS}' \ + OE_QMAKE_LINK='${OE_QMAKE_LINK}' \ + OE_QMAKE_LDFLAGS='${OE_QMAKE_LDFLAGS}' \ + OE_QMAKE_AR='${OE_QMAKE_AR}' \ + OE_QMAKE_STRIP='${OE_QMAKE_STRIP}' \ + OE_QMAKE_INCDIR_QT='${STAGING_DIR_TARGET}/${OE_QMAKE_PATH_HEADERS}' \ +" + +OE_QMAKE_QMAKE = "${OE_QMAKE_PATH_EXTERNAL_HOST_BINS}/qmake" +export OE_QMAKE_CC = "${CC}" +export OE_QMAKE_CFLAGS = "${CFLAGS}" +export OE_QMAKE_CXX = "${CXX}" +export OE_QMAKE_CXXFLAGS = "${CXXFLAGS}" +export OE_QMAKE_LINK = "${CXX}" +export OE_QMAKE_LDFLAGS = "${LDFLAGS}" +export OE_QMAKE_AR = "${AR}" +export OE_QMAKE_STRIP = "echo" + +# qmake reads if from shell environment +export OE_QMAKE_QTCONF_PATH = "${WORKDIR}/qt.conf" + +inherit qt6-paths remove-libtool + +generate_target_qt_config_file() { + qtconf="$1" + cat > "${qtconf}" < ${OE_QMAKE_QTCONF_PATH} <> ${OE_QMAKE_QTCONF_PATH} < ${CONFIGURESTAMPFILE} + fi +} + +EXTRAQCONFFUNCS ??= "" + +do_configure[prefuncs] += "qmake5_base_preconfigure ${EXTRAQCONFFUNCS}" +do_configure[postfuncs] += "qmake5_base_postconfigure" + +addtask generate_qt_config_file after do_patch before do_configure + +do_configure () { + if [ -z "${QMAKE_PROFILES}" ]; then + PROFILES="`ls ${S}/*.pro`" + else + PROFILES="${QMAKE_PROFILES}" + bbnote "qmake using profiles: '${QMAKE_PROFILES}'" + fi + + if [ ! -z "${EXTRA_QMAKEVARS_POST}" ]; then + AFTER="-after" + QMAKE_VARSUBST_POST="${EXTRA_QMAKEVARS_POST}" + bbnote "qmake postvar substitution: '${EXTRA_QMAKEVARS_POST}'" + fi + + if [ ! -z "${EXTRA_QMAKEVARS_PRE}" ]; then + QMAKE_VARSUBST_PRE="${EXTRA_QMAKEVARS_PRE}" + bbnote "qmake prevar substitution: '${EXTRA_QMAKEVARS_PRE}'" + fi + + if [ ! -z "${EXTRA_QMAKEVARS_CONFIGURE}" ]; then + QMAKE_VARSUBST_CONFIGURE="${EXTRA_QMAKEVARS_CONFIGURE}" + bbnote "qmake configure substitution: '${EXTRA_QMAKEVARS_CONFIGURE}'" + fi + + # for config.tests to read this + export QMAKE_MAKE_ARGS="${EXTRA_OEMAKE}" + + CMD="${OE_QMAKE_QMAKE} -makefile -o Makefile ${OE_QMAKE_DEBUG_OUTPUT} ${OE_QMAKE_RECURSIVE} $QMAKE_VARSUBST_PRE $AFTER $PROFILES $QMAKE_VARSUBST_POST -- $QMAKE_VARSUBST_CONFIGURE" + ${OE_QMAKE_QMAKE} -makefile -o Makefile ${OE_QMAKE_DEBUG_OUTPUT} ${OE_QMAKE_RECURSIVE} $QMAKE_VARSUBST_PRE $AFTER $PROFILES $QMAKE_VARSUBST_POST -- $QMAKE_VARSUBST_CONFIGURE || die "Error calling $CMD" +} + +do_install_class-native() { + oe_runmake install INSTALL_ROOT=${D} + find "${D}" -ignore_readdir_race -name "*.la" -delete + if ls ${D}${libdir}/pkgconfig/Qt5*.pc >/dev/null 2>/dev/null; then + sed -i "s@-L${STAGING_LIBDIR}@-L\${libdir}@g" ${D}${libdir}/pkgconfig/Qt5*.pc + fi +} + +qmake5_base_fix_install() { + STAGING_PATH=$1 + if [ -d ${D}${STAGING_PATH} ] ; then + echo "Some files are installed in wrong directory ${D}${STAGING_PATH}" + cp -ra ${D}${STAGING_PATH}/* ${D} + rm -rf ${D}${STAGING_PATH} + # remove empty dirs + TMP=`dirname ${D}${STAGING_PATH}` + while test ${TMP} != ${D}; do + rmdir ${TMP} + TMP=`dirname ${TMP}`; + done + fi +} + +do_install() { + # Fix install paths for all + find . -name "Makefile*" | xargs -r sed -i "s,(INSTALL_ROOT)${STAGING_DIR_TARGET},(INSTALL_ROOT),g" + find . -name "Makefile*" | xargs -r sed -i "s,(INSTALL_ROOT)${STAGING_DIR_HOST},(INSTALL_ROOT),g" + find . -name "Makefile*" | xargs -r sed -i "s,(INSTALL_ROOT)${STAGING_DIR_NATIVE},(INSTALL_ROOT),g" + + oe_runmake install INSTALL_ROOT=${D} + + # everything except HostData and HostBinaries is prefixed with sysroot value, + # but we cannot remove sysroot override, because that's useful for pkg-config etc + # concurrent builds may cause qmake to regenerate Makefiles and override the above + # sed changes. If that happens, move files manually to correct location. + qmake5_base_fix_install ${STAGING_DIR_TARGET} + qmake5_base_fix_install ${STAGING_DIR_HOST} + qmake5_base_fix_install ${STAGING_DIR_NATIVE} + + # Replace host paths with qmake built-in properties + find ${D} \( -name "*.pri" -or -name "*.prl" \) -exec \ + sed -i -e 's|${STAGING_DIR_NATIVE}|$$[QT_HOST_PREFIX/get]|g' \ + -e 's|${STAGING_DIR_HOST}|$$[QT_SYSROOT]|g' {} \; + + # Replace host paths with pkg-config built-in variable + find ${D} -name "*.pc" -exec \ + sed -i -e 's|prefix=${STAGING_DIR_HOST}|prefix=|g' \ + -e 's|${STAGING_DIR_HOST}|${pc_sysrootdir}|g' {} \; + + # Replace resolved lib path with the lib name + find ${D} -name "*.cmake" -exec \ + sed -i -e 's@/[^;]*/lib\([^;]*\)\.\(so\|a\)@\1@g' {} \; + +} diff --git a/recipes-qt/qt6/qtbase/0001-Add-linux-oe-g-platform.patch b/recipes-qt/qt6/qtbase/0001-Add-linux-oe-g-platform.patch new file mode 100644 index 0000000..667ef5a --- /dev/null +++ b/recipes-qt/qt6/qtbase/0001-Add-linux-oe-g-platform.patch @@ -0,0 +1,112 @@ +From bfec530b6e512e1721eb8de0841f5bf445787597 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Mon, 15 Apr 2013 04:29:32 +0200 +Subject: [PATCH 1/3] Add linux-oe-g++ platform + +* This qmake.conf unlike other platforms reads most variables from + shell environment, because it's easier for qt recipes to export + *FLAGS or CC specific for given recipe + +Upstream-Status: Inappropriate [embedded specific] + too OE specific, probably cannot be upstreamed + +Change-Id: I0591ed5da0d61d7cf1509d420e6b293582f1863c +Signed-off-by: Martin Jansa +--- + mkspecs/features/qt.prf | 6 ++--- + mkspecs/features/qt_functions.prf | 2 +- + mkspecs/linux-oe-g++/qmake.conf | 39 ++++++++++++++++++++++++++++ + mkspecs/linux-oe-g++/qplatformdefs.h | 1 + + 4 files changed, 44 insertions(+), 4 deletions(-) + create mode 100644 mkspecs/linux-oe-g++/qmake.conf + create mode 100644 mkspecs/linux-oe-g++/qplatformdefs.h + +diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf +index 3a71376029..dd6020f1fe 100644 +--- a/mkspecs/features/qt.prf ++++ b/mkspecs/features/qt.prf +@@ -148,7 +148,7 @@ import_plugins:qtConfig(static) { + plug_name = $$QMAKE_PREFIX_STATICLIB$${plug}$$qtPlatformTargetSuffix().$$QMAKE_EXTENSION_STATICLIB + plug_path = $$eval(QT_PLUGIN.$${plug}.PATH) + isEmpty(plug_path): \ +- plug_path = $$[QT_INSTALL_PLUGINS/get] ++ plug_path = $$[QT_INSTALL_PLUGINS] + LIBS += $$plug_path/$$plug_type/$$plug_name + } else { + LIBS += -l$${plug}$$qtPlatformTargetSuffix() +@@ -271,8 +271,8 @@ for(ever) { + # static builds: link qml import plugins into the target. + contains(all_qt_module_deps, qml): \ + qtConfig(static):import_plugins:!host_build:!no_import_scan { +- exists($$[QT_INSTALL_QML/get]): \ +- QMLPATHS *= $$[QT_INSTALL_QML/get] ++ exists($$[QT_INSTALL_QML]): \ ++ QMLPATHS *= $$[QT_INSTALL_QML] + + # run qmlimportscanner + qtPrepareTool(QMLIMPORTSCANNER, qmlimportscanner, , system) +diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf +index 45d4492788..b952104d99 100644 +--- a/mkspecs/features/qt_functions.prf ++++ b/mkspecs/features/qt_functions.prf +@@ -76,7 +76,7 @@ defineTest(qtHaveModule) { + defineTest(qtPrepareTool) { + cmd = $$eval(QT_TOOL.$${2}.binary) + isEmpty(cmd) { +- cmd = $$[QT_HOST_BINS]/$$2 ++ cmd = $$[QT_HOST_BINS/get]/$$2 + exists($${cmd}.pl) { + $${1}_EXE = $${cmd}.pl + cmd = perl -w $$system_path($${cmd}.pl) +diff --git a/mkspecs/linux-oe-g++/qmake.conf b/mkspecs/linux-oe-g++/qmake.conf +new file mode 100644 +index 0000000000..c202c47fa1 +--- /dev/null ++++ b/mkspecs/linux-oe-g++/qmake.conf +@@ -0,0 +1,39 @@ ++# ++# qmake configuration for linux-g++ with modifications for building with OpenEmbedded ++# ++ ++MAKEFILE_GENERATOR = UNIX ++CONFIG += incremental ++QMAKE_INCREMENTAL_STYLE = sublib ++ ++include(../common/linux.conf) ++ ++# QMAKE_ (moc, uic, rcc) are gone, overwrite only ar and strip ++QMAKE_AR = $$(OE_QMAKE_AR) cqs ++QMAKE_STRIP = $$(OE_QMAKE_STRIP) ++ ++include(../common/gcc-base-unix.conf) ++ ++# *FLAGS from gcc-base.conf ++QMAKE_CFLAGS += $$(OE_QMAKE_CFLAGS) ++QMAKE_CXXFLAGS += $$(OE_QMAKE_CXXFLAGS) ++QMAKE_LFLAGS += $$(OE_QMAKE_LDFLAGS) ++ ++include(../common/g++-unix.conf) ++ ++# tc settings from g++-base.conf ++QMAKE_CC = $$(OE_QMAKE_CC) ++QMAKE_CXX = $$(OE_QMAKE_CXX) ++ ++QMAKE_LINK = $$(OE_QMAKE_LINK) ++QMAKE_LINK_SHLIB = $$(OE_QMAKE_LINK) ++QMAKE_LINK_C = $$(OE_QMAKE_LINK) ++QMAKE_LINK_C_SHLIB = $$(OE_QMAKE_LINK) ++QMAKE_CFLAGS_ISYSTEM = ++# for the SDK ++isEmpty(QMAKE_QT_CONFIG):QMAKE_QT_CONFIG = $$(OE_QMAKE_QT_CONFIG) ++ ++include(../oe-device-extra.pri) ++ ++load(device_config) ++load(qt_config) +diff --git a/mkspecs/linux-oe-g++/qplatformdefs.h b/mkspecs/linux-oe-g++/qplatformdefs.h +new file mode 100644 +index 0000000000..5d22fb4101 +--- /dev/null ++++ b/mkspecs/linux-oe-g++/qplatformdefs.h +@@ -0,0 +1 @@ ++#include "../linux-g++/qplatformdefs.h" diff --git a/recipes-qt/qt6/qtbase/0002-qlibraryinfo-allow-to-set-qt.conf-from-the-outside-u.patch b/recipes-qt/qt6/qtbase/0002-qlibraryinfo-allow-to-set-qt.conf-from-the-outside-u.patch new file mode 100644 index 0000000..da36a76 --- /dev/null +++ b/recipes-qt/qt6/qtbase/0002-qlibraryinfo-allow-to-set-qt.conf-from-the-outside-u.patch @@ -0,0 +1,37 @@ +From fd50da53d4de86fe3a9e3eca24a7ae3e5c0f53fa Mon Sep 17 00:00:00 2001 +From: Holger Freyther +Date: Wed, 26 Sep 2012 17:22:30 +0200 +Subject: [PATCH 2/3] qlibraryinfo: allow to set qt.conf from the outside using + the environment + +Allow to set a qt.conf from the outside using the environment. This allows +to inject new prefixes and other paths into qmake. This is needed when using +the same qmake binary to build qt/x11 and qt/embedded + +Upstream-Status: Inappropriate [embedded specific] + again very OE specific to read everything from environment (reusing the same + qmake from sstate and replacing all configured paths in it with qt.conf from + environment). + +Change-Id: I41595c6ce7514e8f197d0a19a1308c9460037d1b +Signed-off-by: Martin Jansa +--- + src/corelib/global/qlibraryinfo.cpp | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp +index c8c7c0bf9b..90e81d0990 100644 +--- a/src/corelib/global/qlibraryinfo.cpp ++++ b/src/corelib/global/qlibraryinfo.cpp +@@ -183,7 +183,10 @@ void QLibrarySettings::load() + QSettings *QLibraryInfoPrivate::findConfiguration() + { + #ifdef QT_BUILD_QMAKE +- QString qtconfig = qmake_libraryInfoFile(); ++ QByteArray config = getenv("OE_QMAKE_QTCONF_PATH"); ++ QString qtconfig = QFile::decodeName(config); ++ if(qtconfig.isEmpty() || !QFile::exists(qtconfig)) ++ qtconfig = qmake_libraryInfoFile(); + if (QFile::exists(qtconfig)) + return new QSettings(qtconfig, QSettings::IniFormat); + #else diff --git a/recipes-qt/qt6/qtbase/0003-Sysrootify-qmake.patch b/recipes-qt/qt6/qtbase/0003-Sysrootify-qmake.patch new file mode 100644 index 0000000..edd03f5 --- /dev/null +++ b/recipes-qt/qt6/qtbase/0003-Sysrootify-qmake.patch @@ -0,0 +1,26 @@ +From 512da3f0552d3ab190b39e801987c11d3d209f88 Mon Sep 17 00:00:00 2001 +From: Samuli Piippo +Date: Mon, 17 Feb 2020 15:33:55 +0200 +Subject: [PATCH 3/3] Sysrootify qmake + +For cross-compilations we need to enable qmake to sysrootify +the install paths. + +Change-Id: I47d210f89203e32da59a1e41fcd6ebd28e968b25 +--- + cmake/QtBuild.cmake | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake +index 4456ea99f1..89c37a3706 100644 +--- a/cmake/QtBuild.cmake ++++ b/cmake/QtBuild.cmake +@@ -3944,7 +3944,7 @@ function(qt_generate_qconfig_cpp) + set(QT_CONFIG_STRS "") + + qt_add_string_to_qconfig_cpp("") +- qt_add_string_to_qconfig_cpp("false") ++ qt_add_string_to_qconfig_cpp("true") + qt_add_string_to_qconfig_cpp("bin") + qt_add_string_to_qconfig_cpp("lib") + qt_add_string_to_qconfig_cpp(".") diff --git a/recipes-qt/qt6/qtbase_git.bb b/recipes-qt/qt6/qtbase_git.bb index 9a19fd0..fdca88f 100644 --- a/recipes-qt/qt6/qtbase_git.bb +++ b/recipes-qt/qt6/qtbase_git.bb @@ -13,6 +13,12 @@ inherit qt6-cmake include recipes-qt/qt6/qt6.inc include recipes-qt/qt6/qt6-git.inc +SRC_URI += "\ + file://0001-Add-linux-oe-g-platform.patch \ + file://0002-qlibraryinfo-allow-to-set-qt.conf-from-the-outside-u.patch \ + file://0003-Sysrootify-qmake.patch \ +" + DEPENDS = "\ freetype \ pcre2 \ @@ -96,10 +102,14 @@ PACKAGECONFIG[dbus] = "-DFEATURE_dbus=ON,-DFEATURE_dbus=OFF,dbus" PACKAGECONFIG[udev] = "-DFEATURE_libudev=ON,-DFEATURE_libudev=OFF,udev" PACKAGECONFIG[zstd] = "-DFEATURE_zstd=ON,-DFEATURE_zstd=OFF,zstd" -EXTRA_OECMAKE += " \ +EXTRA_OECMAKE += "\ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ " +EXTRA_OECMAKE_append_class-target = "\ + -DCMAKE_SKIP_RPATH=ON \ +" + SYSROOT_DIRS += "${prefix}/mkspecs" do_install_append() { @@ -107,6 +117,10 @@ do_install_append() { -e '/QT_SOURCE_TREE/,+2d' \ -e '/CMAKE_INSTALL_PREFIX/,+2d' + if [ ! -e ${D}/${QT6_INSTALL_MKSPECSDIR}/oe-device-extra.pri ]; then + touch ${D}/${QT6_INSTALL_MKSPECSDIR}/oe-device-extra.pri + fi + # confligs with qttools module cmake files rm -rf ${D}${libdir}/cmake/Qt6Tools }