summaryrefslogtreecommitdiffstats
path: root/pkgs/development/libraries/qt-6/patches/cmake.patch
blob: 84192f669696dd43d86368c063a8e6a77c39d8b2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
commit bd8f6ecea0663bdd150aa48941cbd47d25874396
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 5a33349b19..677a6084d6 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -7,6 +7,7 @@
 #include <cstring>
 #include <sstream>
 #include <utility>
+#include <cstdlib>
 
 #include <cm/memory>
 
@@ -330,9 +331,21 @@ 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, "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 adccdfeece..ba248305bd 100644
--- a/Source/cmExportInstallFileGenerator.cxx
+++ b/Source/cmExportInstallFileGenerator.cxx
@@ -6,6 +6,7 @@
 #include <memory>
 #include <sstream>
 #include <utility>
+#include <cstdlib>
 
 #include "cmExportSet.h"
 #include "cmFileSet.h"
@@ -266,7 +267,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(
@@ -382,9 +383,22 @@ 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, "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 f988e54a19..cc5c7ac9fd 100644
--- a/Source/cmGeneratorExpression.cxx
+++ b/Source/cmGeneratorExpression.cxx
@@ -192,7 +192,20 @@ 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, "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;
   }