From 12d74ff0275e2af1b3096d2f21d38e2363368180 Mon Sep 17 00:00:00 2001 From: rewine Date: Mon, 27 Mar 2023 00:09:13 +0800 Subject: [PATCH 1/4] qt6.qttools: build qdoc --- pkgs/development/libraries/qt-6/modules/qttools.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/qt-6/modules/qttools.nix b/pkgs/development/libraries/qt-6/modules/qttools.nix index 42bf495134a..7d13e9a03e5 100644 --- a/pkgs/development/libraries/qt-6/modules/qttools.nix +++ b/pkgs/development/libraries/qt-6/modules/qttools.nix @@ -3,12 +3,16 @@ , lib , qtbase , qtdeclarative +, llvmPackages , cups -, substituteAll }: qtModule { pname = "qttools"; + buildInputs = [ + llvmPackages.libclang + llvmPackages.llvm + ]; qtInputs = [ qtbase qtdeclarative ]; propagatedBuildInputs = lib.optionals stdenv.isDarwin [ cups ]; patches = [ From 9bc545612e3673fbd217ae19056b24d39b19b2e5 Mon Sep 17 00:00:00 2001 From: rewine Date: Thu, 30 Mar 2023 15:06:11 +0800 Subject: [PATCH 2/4] qt6.qtbase: allow find qt tools in QTTOOLSPATH --- pkgs/development/libraries/qt-6/default.nix | 1 + .../libraries/qt-6/hooks/qtbase-setup-hook.sh | 14 ++++++ ...-qtbase-find-qt-tools-in-QTTOOLSPATH.patch | 46 +++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 pkgs/development/libraries/qt-6/patches/0007-qtbase-find-qt-tools-in-QTTOOLSPATH.patch 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 +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 + From a0402498c24a25fb07491308cfb7022dad51141b Mon Sep 17 00:00:00 2001 From: rewine Date: Thu, 30 Mar 2023 15:17:42 +0800 Subject: [PATCH 3/4] qt6.qtdoc: fix build --- .../libraries/qt-6/modules/qtdoc.nix | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/pkgs/development/libraries/qt-6/modules/qtdoc.nix b/pkgs/development/libraries/qt-6/modules/qtdoc.nix index cde9af30ab9..004a18f53c7 100644 --- a/pkgs/development/libraries/qt-6/modules/qtdoc.nix +++ b/pkgs/development/libraries/qt-6/modules/qtdoc.nix @@ -1,9 +1,26 @@ { qtModule , qtdeclarative +, qtbase +, qttools }: qtModule { pname = "qtdoc"; + # avoid fix-qt-builtin-paths hook substitute QT_INSTALL_DOCS to qtdoc's path + postPatch = '' + for file in $(grep -rl '$QT_INSTALL_DOCS'); do + substituteInPlace $file \ + --replace '$QT_INSTALL_DOCS' "${qtbase}/share/doc" + done + ''; + nativeBuildInputs = [ qttools ]; qtInputs = [ qtdeclarative ]; + cmakeFlags = [ + "-DCMAKE_MESSAGE_LOG_LEVEL=STATUS" + ]; + dontUseNinjaBuild = true; + buildFlags = [ "docs" ]; + dontUseNinjaInstall = true; + installFlags = [ "install_docs" ]; outputs = [ "out" ]; } From df8475e7860873715b789d1d1602880fab38b296 Mon Sep 17 00:00:00 2001 From: rewine Date: Mon, 3 Apr 2023 15:05:56 +0800 Subject: [PATCH 4/4] qtbase-setup-hook: don't use envBuildHostHooks --- pkgs/development/libraries/qt-6/hooks/qtbase-setup-hook.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 0b518ac20f7..9bc68e6cd3d 100644 --- a/pkgs/development/libraries/qt-6/hooks/qtbase-setup-hook.sh +++ b/pkgs/development/libraries/qt-6/hooks/qtbase-setup-hook.sh @@ -61,7 +61,7 @@ else # Only set up Qt once. QTTOOLSPATH="${QTTOOLSPATH}${QTTOOLSPATH:+:}$1/libexec" fi } - envBuildHostHooks+=(qtToolsHook) + addEnvHooks "$hostOffset" qtToolsHook postPatchMkspecs() { # Prevent this hook from running multiple times