summary refs log tree commit diff
path: root/pkgs/development/libraries/qt-6/cmake.patch
diff options
context:
space:
mode:
authormilahu <milahu@gmail.com>2021-10-16 14:22:24 +0200
committerNick Cao <nickcao@nichi.co>2022-05-23 09:37:40 +0800
commit5baa20d7c8bd2b04ac30316d4c8ee4d8f4db3ad6 (patch)
treebe20c2e406ff77ae59b091b2137b3d370e0acb7b /pkgs/development/libraries/qt-6/cmake.patch
parenta29130b9324b7824919c90b370bbad501945faf8 (diff)
downloadnixpkgs-5baa20d7c8bd2b04ac30316d4c8ee4d8f4db3ad6.tar
nixpkgs-5baa20d7c8bd2b04ac30316d4c8ee4d8f4db3ad6.tar.gz
nixpkgs-5baa20d7c8bd2b04ac30316d4c8ee4d8f4db3ad6.tar.bz2
nixpkgs-5baa20d7c8bd2b04ac30316d4c8ee4d8f4db3ad6.tar.lz
nixpkgs-5baa20d7c8bd2b04ac30316d4c8ee4d8f4db3ad6.tar.xz
nixpkgs-5baa20d7c8bd2b04ac30316d4c8ee4d8f4db3ad6.tar.zst
nixpkgs-5baa20d7c8bd2b04ac30316d4c8ee4d8f4db3ad6.zip
qt6: init at 6.3.0
Diffstat (limited to 'pkgs/development/libraries/qt-6/cmake.patch')
-rw-r--r--pkgs/development/libraries/qt-6/cmake.patch129
1 files changed, 129 insertions, 0 deletions
diff --git a/pkgs/development/libraries/qt-6/cmake.patch b/pkgs/development/libraries/qt-6/cmake.patch
new file mode 100644
index 00000000000..1fb2ea26c35
--- /dev/null
+++ b/pkgs/development/libraries/qt-6/cmake.patch
@@ -0,0 +1,129 @@
+commit 4f497c358e0386b65df1c1d636aadf72f8647134
+Author: Nick Cao <nickcao@nichi.co>
+Date:   Tue Apr 19 13:49:59 2022 +0800
+
+    patch cmake file generation for nixpkgs packaging
+    
+    As of qt 6.3.0, installing components into different prefixes is not
+    supported. To workaround that, we move files to their designated in the
+    postInstall hook. However the generated cmake files still have
+    references to the original prefix, and would cause issues when using
+    said components as the dependency of other packages. The purpose of this
+    patch is to closely match the output layout of qt, and rewrite the
+    generated cmake files to point to the corrected pathes.
+
+diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
+index 8b0f64e23b..03291e2ee2 100644
+--- a/Source/cmExportFileGenerator.cxx
++++ b/Source/cmExportFileGenerator.cxx
+@@ -6,6 +6,7 @@
+ #include <cstring>
+ #include <sstream>
+ #include <utility>
++#include <cstdlib>
+ 
+ #include <cm/memory>
+ 
+@@ -325,9 +326,23 @@ static void prefixItems(std::string& exportDirs)
+   for (std::string const& e : entries) {
+     exportDirs += sep;
+     sep = ";";
+-    if (!cmSystemTools::FileIsFullPath(e) &&
+-        e.find("${_IMPORT_PREFIX}") == std::string::npos) {
+-      exportDirs += "${_IMPORT_PREFIX}/";
++    if (!cmSystemTools::FileIsFullPath(e)) {
++      if (std::getenv("dev")) {
++        if (cmHasLiteralPrefix(e, "include") || cmHasLiteralPrefix(e, "./include")) {
++          exportDirs += std::getenv("dev");
++        } else if (cmHasLiteralPrefix(e, "bin") || cmHasLiteralPrefix(e, "./bin")) {
++          exportDirs += std::getenv("dev");
++        } else if (cmHasLiteralPrefix(e, "mkspecs") || cmHasLiteralPrefix(e, "./mkspecs")) {
++          exportDirs += std::getenv("dev");
++        } else if (cmHasLiteralPrefix(e, "libexec") || cmHasLiteralPrefix(e, "./libexec")) {
++          exportDirs += std::getenv("dev");
++        } else {
++          exportDirs += std::getenv("out");
++        }
++      } else {
++        exportDirs += std::getenv("out");
++      }
++      exportDirs += "/";
+     }
+     exportDirs += e;
+   }
+diff --git a/Source/cmExportInstallFileGenerator.cxx b/Source/cmExportInstallFileGenerator.cxx
+index 4a3c565bce..5afa9e5e50 100644
+--- a/Source/cmExportInstallFileGenerator.cxx
++++ b/Source/cmExportInstallFileGenerator.cxx
+@@ -5,6 +5,7 @@
+ #include <memory>
+ #include <sstream>
+ #include <utility>
++#include <cstdlib>
+ 
+ #include "cmExportSet.h"
+ #include "cmGeneratedFileStream.h"
+@@ -263,7 +264,7 @@ void cmExportInstallFileGenerator::LoadConfigFiles(std::ostream& os)
+ 
+ void cmExportInstallFileGenerator::ReplaceInstallPrefix(std::string& input)
+ {
+-  cmGeneratorExpression::ReplaceInstallPrefix(input, "${_IMPORT_PREFIX}");
++  cmGeneratorExpression::ReplaceInstallPrefix(input, std::getenv("out"));
+ }
+ 
+ bool cmExportInstallFileGenerator::GenerateImportFileConfig(
+@@ -381,9 +382,24 @@ void cmExportInstallFileGenerator::SetImportLocationProperty(
+   // Construct the installed location of the target.
+   std::string dest = itgen->GetDestination(config);
+   std::string value;
++
+   if (!cmSystemTools::FileIsFullPath(dest)) {
+-    // The target is installed relative to the installation prefix.
+-    value = "${_IMPORT_PREFIX}/";
++    if (std::getenv("dev")) {
++      if (cmHasLiteralPrefix(dest, "include") || cmHasLiteralPrefix(dest, "./include")) {
++        value = std::getenv("dev");
++      } else if (cmHasLiteralPrefix(dest, "bin") || cmHasLiteralPrefix(dest, "./bin")) {
++        value = std::getenv("dev");
++      } else if (cmHasLiteralPrefix(dest, "mkspecs") || cmHasLiteralPrefix(dest, "./mkspecs")) {
++        value = std::getenv("dev");
++      } else if (cmHasLiteralPrefix(dest, "libexec") || cmHasLiteralPrefix(dest, "./libexec")) {
++        value = std::getenv("dev");
++      } else {
++        value = std::getenv("out");
++      }
++    } else {
++      value = std::getenv("out");
++    }
++    value += "/";
+   }
+   value += dest;
+   value += "/";
+diff --git a/Source/cmGeneratorExpression.cxx b/Source/cmGeneratorExpression.cxx
+index 840f5112d6..7bb4ab41aa 100644
+--- a/Source/cmGeneratorExpression.cxx
++++ b/Source/cmGeneratorExpression.cxx
+@@ -197,7 +197,22 @@ static void prefixItems(const std::string& content, std::string& result,
+     sep = ";";
+     if (!cmSystemTools::FileIsFullPath(e) &&
+         cmGeneratorExpression::Find(e) != 0) {
+-      result += prefix;
++      if (std::getenv("dev")) {
++        if (cmHasLiteralPrefix(e, "include") || cmHasLiteralPrefix(e, "./include")) {
++          result += std::getenv("dev");
++        } else if (cmHasLiteralPrefix(e, "bin") || cmHasLiteralPrefix(e, "./bin")) {
++          result += std::getenv("dev");
++        } else if (cmHasLiteralPrefix(e, "mkspecs") || cmHasLiteralPrefix(e, "./mkspecs")) {
++          result += std::getenv("dev");
++        } else if (cmHasLiteralPrefix(e, "libexec") || cmHasLiteralPrefix(e, "./libexec")) {
++          result += std::getenv("dev");
++        } else {
++          result += std::getenv("out");
++        }
++      } else {
++        result += std::getenv("out");
++      }
++      result += "/";
+     }
+     result += e;
+   }