summary refs log tree commit diff
diff options
context:
space:
mode:
authorrewine <luhongxu@deepin.org>2023-03-30 15:06:11 +0800
committerrewine <lhongxu@outlook.com>2023-05-24 09:52:24 +0800
commit9bc545612e3673fbd217ae19056b24d39b19b2e5 (patch)
tree941fbd8fc9e3efe802e76c1fb225e845afc3b196
parent12d74ff0275e2af1b3096d2f21d38e2363368180 (diff)
downloadnixpkgs-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
-rw-r--r--pkgs/development/libraries/qt-6/default.nix1
-rw-r--r--pkgs/development/libraries/qt-6/hooks/qtbase-setup-hook.sh14
-rw-r--r--pkgs/development/libraries/qt-6/patches/0007-qtbase-find-qt-tools-in-QTTOOLSPATH.patch46
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
+