From 40f1b73c92731f4e18751d3a499f269c65c21a96 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 27 Apr 2018 13:37:25 +0000 Subject: qt5: downgrade to 5.6 * webosose isn't compatible with newer Qt export COMP=qml-webos-framework; for i in `seq -w 1 999`; do echo $i; bitbake -v -v -DDDD -f -c compile ${COMP} 2>${COMP}-logerr.$i >${COMP}-log.$i; bitbake -v -v -DDDD -f -c package_qa ${COMP} 2>${COMP}-logerr.qa.$i >${COMP}-log.qa.$i || { cp -ra tmp-glibc/work/qemux86-oe-linux/${COMP}/ ${COMP}-workdir-$i; bitbake -c cleansstate ${COMP} ; } done in local.conf I have only this to reproduce the failures: PRSERV_HOST = "localhost:0" BB_NUMBER_THREADS = "8" PARALLEL_MAKE = "-j 32" DISTRO_FEATURES_append = " wayland opengl" ERROR_QA_append = " host-user-contaminated" Signed-off-by: Martin Jansa --- meta/classes/cmake_qt5.bbclass | 36 ++++++++ meta/classes/populate_sdk_qt5.bbclass | 8 ++ meta/classes/populate_sdk_qt5_base.bbclass | 29 ++++++ meta/classes/qmake5.bbclass | 4 + meta/classes/qmake5_base.bbclass | 140 +++++++++-------------------- 5 files changed, 118 insertions(+), 99 deletions(-) create mode 100644 meta/classes/cmake_qt5.bbclass create mode 100644 meta/classes/populate_sdk_qt5.bbclass create mode 100644 meta/classes/populate_sdk_qt5_base.bbclass (limited to 'meta/classes') diff --git a/meta/classes/cmake_qt5.bbclass b/meta/classes/cmake_qt5.bbclass new file mode 100644 index 0000000000..5d605a685d --- /dev/null +++ b/meta/classes/cmake_qt5.bbclass @@ -0,0 +1,36 @@ +inherit cmake +inherit qmake5_paths + +DEPENDS_prepend = "qtbase qtbase-native " + +EXTRA_OECMAKE_prepend = " \ + -DOE_QMAKE_PATH_PREFIX=${OE_QMAKE_PATH_PREFIX} \ + -DOE_QMAKE_PATH_HEADERS=${OE_QMAKE_PATH_HEADERS} \ + -DOE_QMAKE_PATH_LIBS=${OE_QMAKE_PATH_LIBS} \ + -DOE_QMAKE_PATH_ARCHDATA=${OE_QMAKE_PATH_ARCHDATA} \ + -DOE_QMAKE_PATH_DATA=${OE_QMAKE_PATH_DATA} \ + -DOE_QMAKE_PATH_BINS=${OE_QMAKE_PATH_BINS} \ + -DOE_QMAKE_PATH_LIBEXECS=${OE_QMAKE_PATH_LIBEXECS} \ + -DOE_QMAKE_PATH_PLUGINS=${OE_QMAKE_PATH_PLUGINS} \ + -DOE_QMAKE_PATH_IMPORTS=${OE_QMAKE_PATH_IMPORTS} \ + -DOE_QMAKE_PATH_QML=${OE_QMAKE_PATH_QML} \ + -DOE_QMAKE_PATH_TRANSLATIONS=${OE_QMAKE_PATH_TRANSLATIONS} \ + -DOE_QMAKE_PATH_DOCS=${OE_QMAKE_PATH_DOCS} \ + -DOE_QMAKE_PATH_SETTINGS=${OE_QMAKE_PATH_SETTINGS} \ + -DOE_QMAKE_PATH_EXAMPLES=${OE_QMAKE_PATH_EXAMPLES} \ + -DOE_QMAKE_PATH_TESTS=${OE_QMAKE_PATH_TESTS} \ + -DOE_QMAKE_PATH_HOST_PREFIX=${OE_QMAKE_PATH_HOST_PREFIX} \ + -DOE_QMAKE_PATH_HOST_BINS=${OE_QMAKE_PATH_HOST_BINS} \ + -DOE_QMAKE_PATH_HOST_DATA=${OE_QMAKE_PATH_HOST_DATA} \ + -DOE_QMAKE_PATH_HOST_LIBS=${OE_QMAKE_PATH_HOST_LIBS} \ + -DOE_QMAKE_PATH_EXTERNAL_HOST_BINS=${OE_QMAKE_PATH_EXTERNAL_HOST_BINS} \ + -DOE_QMAKE_PATH_QT_HEADERS=${OE_QMAKE_PATH_QT_HEADERS} \ + -DOE_QMAKE_PATH_QT_ARCHDATA=${OE_QMAKE_PATH_QT_ARCHDATA} \ + -DOE_QMAKE_PATH_QT_DATA=${OE_QMAKE_PATH_QT_DATA} \ + -DOE_QMAKE_PATH_QT_BINS=${OE_QMAKE_PATH_QT_BINS} \ + -DOE_QMAKE_PATH_QT_TRANSLATIONS=${OE_QMAKE_PATH_QT_TRANSLATIONS} \ + -DOE_QMAKE_PATH_QT_DOCS=${OE_QMAKE_PATH_QT_DOCS} \ + -DOE_QMAKE_PATH_QT_SETTINGS=${OE_QMAKE_PATH_QT_SETTINGS} \ + -DOE_QMAKE_PATH_QT_EXAMPLES=${OE_QMAKE_PATH_QT_EXAMPLES} \ + -DOE_QMAKE_PATH_QT_TESTS=${OE_QMAKE_PATH_QT_TESTS} \ +" diff --git a/meta/classes/populate_sdk_qt5.bbclass b/meta/classes/populate_sdk_qt5.bbclass new file mode 100644 index 0000000000..bbf137d78c --- /dev/null +++ b/meta/classes/populate_sdk_qt5.bbclass @@ -0,0 +1,8 @@ +# Copyright (C) 2014 O.S. Systems Software LTDA. + +inherit populate_sdk_qt5_base + +TOOLCHAIN_HOST_TASK += "nativesdk-packagegroup-qt5-toolchain-host" +TOOLCHAIN_TARGET_TASK += "packagegroup-qt5-toolchain-target" + +FEATURE_PACKAGES_qtcreator-debug = "packagegroup-qt5-qtcreator-debug" diff --git a/meta/classes/populate_sdk_qt5_base.bbclass b/meta/classes/populate_sdk_qt5_base.bbclass new file mode 100644 index 0000000000..b6ce596713 --- /dev/null +++ b/meta/classes/populate_sdk_qt5_base.bbclass @@ -0,0 +1,29 @@ +# This allow reuse of Qt paths +inherit qmake5_paths + +create_sdk_files_prepend () { + # Generate a qt.conf file to be deployed with the SDK + qtconf=${SDK_OUTPUT}/${SDKPATHNATIVE}${OE_QMAKE_PATH_HOST_BINS}/qt.conf + touch $qtconf + echo '[Paths]' >> $qtconf + echo 'Prefix = ${OE_QMAKE_PATH_PREFIX}' >> $qtconf + echo 'Headers = ${OE_QMAKE_PATH_QT_HEADERS}' >> $qtconf + echo 'Libraries = ${OE_QMAKE_PATH_LIBS}' >> $qtconf + echo 'ArchData = ${OE_QMAKE_PATH_QT_ARCHDATA}' >> $qtconf + echo 'Data = ${OE_QMAKE_PATH_QT_DATA}' >> $qtconf + echo 'Binaries = ${OE_QMAKE_PATH_QT_BINS}' >> $qtconf + echo 'LibraryExecutables = ${OE_QMAKE_PATH_LIBEXECS}' >> $qtconf + echo 'Plugins = ${OE_QMAKE_PATH_PLUGINS}' >> $qtconf + echo 'Imports = ${OE_QMAKE_PATH_IMPORTS}' >> $qtconf + echo 'Qml2Imports = ${OE_QMAKE_PATH_QML}' >> $qtconf + echo 'Translations = ${OE_QMAKE_PATH_QT_TRANSLATIONS}' >> $qtconf + echo 'Documentation = ${OE_QMAKE_PATH_QT_DOCS}' >> $qtconf + echo 'Settings = ${OE_QMAKE_PATH_QT_SETTINGS}' >> $qtconf + echo 'Examples = ${OE_QMAKE_PATH_QT_EXAMPLES}' >> $qtconf + echo 'Tests = ${OE_QMAKE_PATH_QT_TESTS}' >> $qtconf + echo 'HostPrefix = ${SDKPATHNATIVE}' >> $qtconf + echo 'HostData = ${SDKTARGETSYSROOT}${OE_QMAKE_PATH_QT_ARCHDATA}' >> $qtconf + echo 'HostBinaries = ${SDKPATHNATIVE}${OE_QMAKE_PATH_HOST_BINS}' >> $qtconf + echo 'HostLibraries = ${SDKPATHNATIVE}${OE_QMAKE_PATH_LIBS}' >> $qtconf + echo 'Sysroot = ${SDKTARGETSYSROOT}' >> $qtconf +} diff --git a/meta/classes/qmake5.bbclass b/meta/classes/qmake5.bbclass index 1a960e8f32..2b43f2e38b 100644 --- a/meta/classes/qmake5.bbclass +++ b/meta/classes/qmake5.bbclass @@ -17,3 +17,7 @@ do_install() { do_install_class-native() { qmake5_base_native_do_install } + +do_install_class-nativesdk() { + qmake5_base_nativesdk_do_install +} diff --git a/meta/classes/qmake5_base.bbclass b/meta/classes/qmake5_base.bbclass index 8f1d143a30..c2a849856f 100644 --- a/meta/classes/qmake5_base.bbclass +++ b/meta/classes/qmake5_base.bbclass @@ -1,9 +1,6 @@ # 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}" +OE_QMAKE_PLATFORM_NATIVE = "linux-oe-g++" +OE_QMAKE_PLATFORM = "linux-oe-g++" # 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 ?= "" @@ -29,61 +26,31 @@ EXTRA_OEMAKE = " \ OE_QMAKE_LDFLAGS='${OE_QMAKE_LDFLAGS}' \ OE_QMAKE_AR='${OE_QMAKE_AR}' \ OE_QMAKE_STRIP='${OE_QMAKE_STRIP}' \ + OE_QMAKE_WAYLAND_SCANNER='${OE_QMAKE_WAYLAND_SCANNER}' \ OE_QMAKE_INCDIR_QT='${STAGING_DIR_TARGET}/${OE_QMAKE_PATH_HEADERS}' \ " -OE_QMAKE_QMAKE = "${OE_QMAKE_PATH_EXTERNAL_HOST_BINS}/qmake" -export OE_QMAKE_COMPILER = "${CC}" -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" +OE_QMAKESPEC = "${QMAKE_MKSPEC_PATH_NATIVE}/mkspecs/${OE_QMAKE_PLATFORM_NATIVE}" +OE_XQMAKESPEC = "${QMAKE_MKSPEC_PATH}/mkspecs/${OE_QMAKE_PLATFORM}" +OE_QMAKE_QMAKE = "${STAGING_BINDIR_NATIVE}${QT_DIR_NAME}/qmake" +OE_QMAKE_COMPILER = "${CC}" +OE_QMAKE_CC = "${CC}" +OE_QMAKE_CFLAGS = "${CFLAGS}" +OE_QMAKE_CXX = "${CXX}" +OE_QMAKE_CXXFLAGS = "${CXXFLAGS}" +OE_QMAKE_LINK = "${CXX}" +OE_QMAKE_LDFLAGS = "${LDFLAGS}" +OE_QMAKE_AR = "${AR}" +OE_QMAKE_STRIP = "echo" +OE_QMAKE_WAYLAND_SCANNER = "${STAGING_BINDIR_NATIVE}/wayland-scanner" + +# this one needs to be exported, because qmake reads it from shell env +export QT_CONF_PATH = "${WORKDIR}/qt.conf" inherit qmake5_paths remove-libtool -generate_target_qt_config_file() { - qtconf="$1" - cat > "${qtconf}" < ${OE_QMAKE_QTCONF_PATH} < ${QT_CONF_PATH} <> ${OE_QMAKE_QTCONF_PATH} </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 +qmake5_base_nativesdk_do_install() { + # Fix install paths for all + find . -name "Makefile*" | xargs -r sed -i "s,(INSTALL_ROOT)${STAGING_DIR_HOST},(INSTALL_ROOT),g" + + oe_runmake install INSTALL_ROOT=${D} } qmake5_base_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} - - if ls ${D}${libdir}/pkgconfig/*.pc >/dev/null 2>/dev/null; then - sed -i ${D}${libdir}/pkgconfig/*.pc \ - -e "s@-L${STAGING_LIBDIR}@-L\${libdir}@g" \ - -e "s@${STAGING_DIR_TARGET}@@g" + # In some cases like QtQmlDevTools in qtdeclarative, the sed above does not work, + # fix them manually + if [ -d ${D}${STAGING_DIR_TARGET} ] ; then + echo "Some files are installed in wrong directory ${D}${STAGING_DIR_TARGET}" + cp -ra ${D}${STAGING_DIR_TARGET}/* ${D} + rm -rf ${D}${STAGING_DIR_TARGET} + # remove empty dirs + TMP=`dirname ${D}/${STAGING_DIR_TARGET}` + while test ${TMP} != ${D}; do + rmdir ${TMP} + TMP=`dirname ${TMP}`; + done fi } -- cgit 1.2.3-korg