From 08352251e6f37b7dbae17e3293df5dcb812585b9 Mon Sep 17 00:00:00 2001 From: Samuli Piippo Date: Thu, 2 Jun 2022 04:36:49 +0000 Subject: [PATCH] SDK: make sure initial qt host path is absolute MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit __qt_toolchain_initial_qt_host_path is assigned to QT_HOST_PATH and then to CMAKE_FIND_ROOT_PATH. Problems occurs if that path is relative. CMake doesn't do relative path resolving by default in find_package, when doing sub-prefix checking between find root path and prefix path. Patch the qt.toochain.cmake so that it always uses absolute path for __qt_toolchain_initial_qt_host_path, but make it still based on its own location. Fixes: QTBUG-103818 Change-Id: I1cce126c243c017b1cecd14a0fd616cb0328fe6d Reviewed-by: Alexandru Croitor (cherry picked from commit ea541e308f90109e0a07a055fd8e955d271c7b88) Reviewed-by: Pasi Petäjäjärvi --- ...OLCHAIN_RELOCATABLE-paths-in-qt.tool.patch | 29 ------------ ...4-Fix-qt.toolchain.cmake-for-SDK-use.patch | 47 +++++++++++++++++++ recipes-qt/qt6/qtbase_git.bb | 3 +- 3 files changed, 48 insertions(+), 31 deletions(-) delete mode 100644 recipes-qt/qt6/qtbase/0004-Do-not-use-QT_TOOLCHAIN_RELOCATABLE-paths-in-qt.tool.patch create mode 100644 recipes-qt/qt6/qtbase/0004-Fix-qt.toolchain.cmake-for-SDK-use.patch diff --git a/recipes-qt/qt6/qtbase/0004-Do-not-use-QT_TOOLCHAIN_RELOCATABLE-paths-in-qt.tool.patch b/recipes-qt/qt6/qtbase/0004-Do-not-use-QT_TOOLCHAIN_RELOCATABLE-paths-in-qt.tool.patch deleted file mode 100644 index 7aa108e..0000000 --- a/recipes-qt/qt6/qtbase/0004-Do-not-use-QT_TOOLCHAIN_RELOCATABLE-paths-in-qt.tool.patch +++ /dev/null @@ -1,29 +0,0 @@ -From c15033fd4df14b08fc28ec8da61c990801c7e411 Mon Sep 17 00:00:00 2001 -From: Samuli Piippo -Date: Thu, 16 Dec 2021 13:10:48 +0200 -Subject: [PATCH] Do not use QT_TOOLCHAIN_RELOCATABLE paths in - qt.toolchain.cmake - -The calculated paths for QT_TOOLCHAIN_RELOCATABLE paths point to -host sysroot which must not be used when cross-compiling other projects. - -Upstream-Status: Inappropriate [embedded specific] ---- - cmake/qt.toolchain.cmake.in | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/cmake/qt.toolchain.cmake.in b/cmake/qt.toolchain.cmake.in -index 5e9acd66b8..451de99633 100644 ---- a/cmake/qt.toolchain.cmake.in -+++ b/cmake/qt.toolchain.cmake.in -@@ -68,8 +68,8 @@ get_filename_component(QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR "${CMAKE_CURRENT_LIST_ - # Instead of collapsing the search prefix (which is the case when one is a subdir of the other), - # it concatenates them creating an invalid path. Workaround it by setting the root path to the - # Qt install prefix, and the prefix path to the lib/cmake subdir. --list(PREPEND CMAKE_PREFIX_PATH "${QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR}") --list(PREPEND CMAKE_FIND_ROOT_PATH "${QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX}") -+#list(PREPEND CMAKE_PREFIX_PATH "${QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR}") -+#list(PREPEND CMAKE_FIND_ROOT_PATH "${QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX}") - - # Let CMake load our custom platform modules. - # CMake-provided platform modules take precedence. diff --git a/recipes-qt/qt6/qtbase/0004-Fix-qt.toolchain.cmake-for-SDK-use.patch b/recipes-qt/qt6/qtbase/0004-Fix-qt.toolchain.cmake-for-SDK-use.patch new file mode 100644 index 0000000..81caf15 --- /dev/null +++ b/recipes-qt/qt6/qtbase/0004-Fix-qt.toolchain.cmake-for-SDK-use.patch @@ -0,0 +1,47 @@ +From e3f59a24add346248842a8f28971621469c9161f Mon Sep 17 00:00:00 2001 +From: Samuli Piippo +Date: Thu, 16 Dec 2021 13:10:48 +0200 +Subject: [PATCH] Fix qt.toolchain.cmake for SDK use + +Set initial host path based on the location of the qt.toolchain.cmake file. +This helps us avoid need to relocate the file in SDK. + +The calculated paths for QT_TOOLCHAIN_RELOCATABLE paths point to +host sysroot which must not be used when cross-compiling other projects. + +Change-Id: I52aa2a10d2a13fd27d6bf8b4af6dc1833c7a286a +Upstream-Status: Inappropriate [embedded specific] +--- + cmake/qt.toolchain.cmake.in | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/cmake/qt.toolchain.cmake.in b/cmake/qt.toolchain.cmake.in +index c565e923ff..a917c65d89 100644 +--- a/cmake/qt.toolchain.cmake.in ++++ b/cmake/qt.toolchain.cmake.in +@@ -70,8 +70,8 @@ get_filename_component(QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR "${CMAKE_CURRENT_LIST_ + # Instead of collapsing the search prefix (which is the case when one is a subdir of the other), + # it concatenates them creating an invalid path. Workaround it by setting the root path to the + # Qt install prefix, and the prefix path to the lib/cmake subdir. +-list(PREPEND CMAKE_PREFIX_PATH "${QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR}") +-list(PREPEND CMAKE_FIND_ROOT_PATH "${QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX}") ++#list(PREPEND CMAKE_PREFIX_PATH "${QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR}") ++#list(PREPEND CMAKE_FIND_ROOT_PATH "${QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX}") + + # Let CMake load our custom platform modules. + # CMake-provided platform modules take precedence. +@@ -156,10 +156,10 @@ endif() + # Set up QT_HOST_PATH and do sanity checks. + # A host path is required when cross-compiling but optional when doing a native build. + set(__qt_toolchain_host_path_required "@qt_host_path_required@") +-set(__qt_toolchain_initial_qt_host_path +- "@qt_host_path_absolute@") +-set(__qt_toolchain_initial_qt_host_path_cmake_dir +- "@qt_host_path_cmake_dir_absolute@") ++get_filename_component(__qt_toolchain_initial_qt_host_path ++ "${CMAKE_CURRENT_LIST_DIR}/../../.." ABSOLUTE) ++get_filename_component(__qt_toolchain_initial_qt_host_path_cmake_dir ++ "${CMAKE_CURRENT_LIST_DIR}/../../../lib/cmake" ABSOLUTE) + + # QT_HOST_PATH precedence: + # - cache variable / command line option diff --git a/recipes-qt/qt6/qtbase_git.bb b/recipes-qt/qt6/qtbase_git.bb index ef28636..ebdf17b 100644 --- a/recipes-qt/qt6/qtbase_git.bb +++ b/recipes-qt/qt6/qtbase_git.bb @@ -19,7 +19,7 @@ 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-tests-disable-failing-tests.patch \ - file://0004-Do-not-use-QT_TOOLCHAIN_RELOCATABLE-paths-in-qt.tool.patch \ + file://0004-Fix-qt.toolchain.cmake-for-SDK-use.patch \ " DEPENDS += "\ @@ -168,7 +168,6 @@ EOF RELPATH=${@os.path.relpath(d.getVar('prefix') + '/share/cmake/Qt6Toolchain.cmake', d.getVar('QT6_INSTALL_LIBDIR') + '/cmake/Qt6')} sed -i ${D}${QT6_INSTALL_LIBDIR}/cmake/Qt6/qt.toolchain.cmake \ - -e 's|${RECIPE_SYSROOT_NATIVE}|\${CMAKE_CURRENT_LIST_DIR}/../../../..|' \ -e "s|/.*/toolchain.cmake|\${CMAKE_CURRENT_LIST_DIR}/$RELPATH|" }