94427deb9d
GitOrigin-RevId: f91ee3065de91a3531329a674a45ddcb3467a650
80 lines
3.6 KiB
Diff
80 lines
3.6 KiB
Diff
--- 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
|