diff options
author | rewine <luhongxu@deepin.org> | 2023-03-30 15:06:11 +0800 |
---|---|---|
committer | rewine <lhongxu@outlook.com> | 2023-05-24 09:52:24 +0800 |
commit | 9bc545612e3673fbd217ae19056b24d39b19b2e5 (patch) | |
tree | 941fbd8fc9e3efe802e76c1fb225e845afc3b196 | |
parent | 12d74ff0275e2af1b3096d2f21d38e2363368180 (diff) | |
download | nixpkgs-9bc545612e3673fbd217ae19056b24d39b19b2e5.tar nixpkgs-9bc545612e3673fbd217ae19056b24d39b19b2e5.tar.gz nixpkgs-9bc545612e3673fbd217ae19056b24d39b19b2e5.tar.bz2 nixpkgs-9bc545612e3673fbd217ae19056b24d39b19b2e5.tar.lz nixpkgs-9bc545612e3673fbd217ae19056b24d39b19b2e5.tar.xz nixpkgs-9bc545612e3673fbd217ae19056b24d39b19b2e5.tar.zst nixpkgs-9bc545612e3673fbd217ae19056b24d39b19b2e5.zip |
qt6.qtbase: allow find qt tools in QTTOOLSPATH
3 files changed, 61 insertions, 0 deletions
diff --git a/pkgs/development/libraries/qt-6/default.nix b/pkgs/development/libraries/qt-6/default.nix index b3098466ac8..0f164fb3ce0 100644 --- a/pkgs/development/libraries/qt-6/default.nix +++ b/pkgs/development/libraries/qt-6/default.nix @@ -47,6 +47,7 @@ let ./patches/0004-qtbase-fix-locating-tzdir-on-NixOS.patch ./patches/0005-qtbase-deal-with-a-font-face-at-index-0-as-Regular-f.patch ./patches/0006-qtbase-qt-cmake-always-use-cmake-from-path.patch + ./patches/0007-qtbase-find-qt-tools-in-QTTOOLSPATH.patch ]; }; env = callPackage ./qt-env.nix { }; diff --git a/pkgs/development/libraries/qt-6/hooks/qtbase-setup-hook.sh b/pkgs/development/libraries/qt-6/hooks/qtbase-setup-hook.sh index b9081e16a28..0b518ac20f7 100644 --- a/pkgs/development/libraries/qt-6/hooks/qtbase-setup-hook.sh +++ b/pkgs/development/libraries/qt-6/hooks/qtbase-setup-hook.sh @@ -49,6 +49,20 @@ else # Only set up Qt once. } envBuildHostHooks+=(qmakePathHook) + export QTTOOLSPATH= + + declare -Ag qttoolsPathSeen=() + qtToolsHook() { + # Skip this path if we have seen it before. + # MUST use 'if' because 'qttoolsPathSeen[$]' may be unset. + if [ -n "${qttoolsPathSeen[$1]-}" ]; then return; fi + qttoolsPathSeen[$1]=1 + if [ -d "$1/libexec" ]; then + QTTOOLSPATH="${QTTOOLSPATH}${QTTOOLSPATH:+:}$1/libexec" + fi + } + envBuildHostHooks+=(qtToolsHook) + postPatchMkspecs() { # Prevent this hook from running multiple times dontPatchMkspecs=1 diff --git a/pkgs/development/libraries/qt-6/patches/0007-qtbase-find-qt-tools-in-QTTOOLSPATH.patch b/pkgs/development/libraries/qt-6/patches/0007-qtbase-find-qt-tools-in-QTTOOLSPATH.patch new file mode 100644 index 00000000000..146cba58b8e --- /dev/null +++ b/pkgs/development/libraries/qt-6/patches/0007-qtbase-find-qt-tools-in-QTTOOLSPATH.patch @@ -0,0 +1,46 @@ +From 31d808a7b0d52a01c3f2875202cd29410a94b39a Mon Sep 17 00:00:00 2001 +From: rewine <luhongxu@deepin.org> +Date: Wed, 29 Mar 2023 11:51:33 +0800 +Subject: [PATCH] qtbase-find-tools-in-PATH + +1. find qt's tools in `QTTOOLSPATH` env + qt assumes that all components use the same install prefix + we can't get the real prefix for qttools when build qtbase + we will add /libexec to `QTTOOLSPATH` in qtToolsHook + find_path will also search in 'PATH' by default + see `CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH` + +2. disable tool_dependencies_enabled + We can guarantee the build order of qt components in nixpkgs + tools in qttools always build before qtdoc + qdoc_bin is not a build target now, since we find it in `QTTOOLSPATH` + +--- + cmake/QtDocsHelpers.cmake | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/cmake/QtDocsHelpers.cmake b/cmake/QtDocsHelpers.cmake +index 48ed5a32..9409d22d 100644 +--- a/cmake/QtDocsHelpers.cmake ++++ b/cmake/QtDocsHelpers.cmake +@@ -47,9 +47,14 @@ function(qt_internal_add_docs) + set(doc_tools_libexec "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}/${INSTALL_LIBEXECDIR}") + endif() + +- set(qdoc_bin "${doc_tools_bin}/qdoc${CMAKE_EXECUTABLE_SUFFIX}") +- set(qtattributionsscanner_bin "${doc_tools_libexec}/qtattributionsscanner${CMAKE_EXECUTABLE_SUFFIX}") +- set(qhelpgenerator_bin "${doc_tools_libexec}/qhelpgenerator${CMAKE_EXECUTABLE_SUFFIX}") ++ set(tool_dependencies_enabled FALSE) ++ ++ find_path(qdoc_path name qdoc PATHS ENV QTTOOLSPATH) ++ find_path(qtattributionsscanner_path name qtattributionsscanner PATHS ENV QTTOOLSPATH) ++ find_path(qhelpgenerator_path name qhelpgenerator PATHS ENV QTTOOLSPATH) ++ set(qdoc_bin "${qdoc_path}/qdoc${CMAKE_EXECUTABLE_SUFFIX}") ++ set(qtattributionsscanner_bin "${qtattributionsscanner_path}/qtattributionsscanner${CMAKE_EXECUTABLE_SUFFIX}") ++ set(qhelpgenerator_bin "${qhelpgenerator_path}/qhelpgenerator${CMAKE_EXECUTABLE_SUFFIX}") + + get_target_property(target_type ${target} TYPE) + if (NOT target_type STREQUAL "INTERFACE_LIBRARY") +-- +2.38.1 + |