summaryrefslogtreecommitdiff
path: root/pkgs/development/python-modules/shiboken6/fix-include-qt-headers.patch
blob: 4c6d7bdad3fd4d33dca30cb38c19218eeffa35e7 (about) (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
--- a/ApiExtractor/clangparser/compilersupport.cpp
+++ b/ApiExtractor/clangparser/compilersupport.cpp
@@ -16,6 +16,7 @@
 #include <QtCore/QStandardPaths>
 #include <QtCore/QStringList>
 #include <QtCore/QVersionNumber>
+#include <QtCore/QRegularExpression>
 
 #include <clang-c/Index.h>
 
@@ -341,6 +342,13 @@ QByteArrayList emulatedCompilerOptions()
 {
     QByteArrayList result;
     HeaderPaths headerPaths;
+
+    bool isNixDebug = qgetenv("NIX_DEBUG").toInt() > 0;
+    // examples:
+    // /nix/store/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-qtsensors-6.4.2-dev/include
+    // /nix/store/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-qtbase-6.4.2-dev/include
+    QRegularExpression qtHeaderRegex(uR"(/[0-9a-z]{32}-qt[a-z0-9]+-)"_s);
+
     switch (compiler()) {
     case Compiler::Msvc:
         result.append(QByteArrayLiteral("-fms-compatibility-version=19.26.28806"));
@@ -352,9 +360,30 @@ QByteArrayList emulatedCompilerOptions()
             appendClangBuiltinIncludes(&headerPaths);
         break;
     case Compiler::Clang:
-        headerPaths.append(gppInternalIncludePaths(compilerFromCMake(u"clang++"_s)));
+    // fix: error: cannot jump from switch statement to this case label: case Compiler::Gpp
+    // note: jump bypasses variable initialization: const HeaderPaths clangPaths =
+    {
+        //headerPaths.append(gppInternalIncludePaths(compilerFromCMake(u"clang++"_s)));
+        // fix: qt.shiboken: x is specified in typesystem, but not defined. This could potentially lead to compilation errors.
+        // PySide requires that Qt headers are not -isystem
+        // https://bugreports.qt.io/browse/PYSIDE-787
+        const HeaderPaths clangPaths = gppInternalIncludePaths(compilerFromCMake(u"clang++"_qs));
+        for (const HeaderPath &h : clangPaths) {
+            auto match = qtHeaderRegex.match(QString::fromUtf8(h.path));
+            if (!match.hasMatch()) {
+                if (isNixDebug)
+                    qDebug() << "shiboken compilersupport.cpp: found non-qt header: " << h.path;
+                // add using -isystem
+                headerPaths.append(h);
+            } else {
+                if (isNixDebug)
+                    qDebug() << "shiboken compilersupport.cpp: found qt header: " << h.path;
+                headerPaths.append({h.path, HeaderType::Standard});
+            }
+        }
         result.append(noStandardIncludeOption());
         break;
+    }
     case Compiler::Gpp:
         if (needsClangBuiltinIncludes())
             appendClangBuiltinIncludes(&headerPaths);
@@ -363,8 +392,20 @@ QByteArrayList emulatedCompilerOptions()
         // <type_traits> etc (g++ 11.3).
         const HeaderPaths gppPaths = gppInternalIncludePaths(compilerFromCMake(u"g++"_qs));
         for (const HeaderPath &h : gppPaths) {
-            if (h.path.contains("c++") || h.path.contains("sysroot"))
+            // fix: qt.shiboken: x is specified in typesystem, but not defined. This could potentially lead to compilation errors.
+            // PySide requires that Qt headers are not -isystem
+            // https://bugreports.qt.io/browse/PYSIDE-787
+            auto match = qtHeaderRegex.match(QString::fromUtf8(h.path));
+            if (!match.hasMatch()) {
+                if (isNixDebug)
+                    qDebug() << "shiboken compilersupport.cpp: found non-qt header: " << h.path;
+                // add using -isystem
                 headerPaths.append(h);
+            } else {
+                if (isNixDebug)
+                    qDebug() << "shiboken compilersupport.cpp: found qt header: " << h.path;
+                headerPaths.append({h.path, HeaderType::Standard});
+            }
         }
         break;
     }
-- 
2.39.0