aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2023-02-16 12:53:13 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-02-17 12:31:53 +0000
commit12568ae69e9d54ed6af3da904476fb98b878b16b (patch)
treee0b9a4c1772f6e8be9a876d1e60e10a50fc560bb
parent7e4f907f6bab2240e477d93a8e516705c58dc40f (diff)
shiboken6: Fix locating the Clang include dir on NixOS
Add a fallback to query llvm-config. Fixes: PYSIDE-2232 Change-Id: I145808509dec8ee26368f6a4e4cb621832e6ac4f Reviewed-by: Adrian Herrmann <adrian.herrmann@qt.io> Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io> Reviewed-by: Christian Tismer <tismer@stackless.com> (cherry picked from commit 7662cb8a8329bfe160a3b885d403ec59764f399f) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp32
1 files changed, 19 insertions, 13 deletions
diff --git a/sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp b/sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp
index 4145c8dec..d3497de48 100644
--- a/sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp
+++ b/sources/shiboken6/ApiExtractor/clangparser/compilersupport.cpp
@@ -240,6 +240,23 @@ static bool needsClangBuiltinIncludes()
return platform() != Platform::macOS;
}
+static QString queryLlvmConfigDir(const QString &arg)
+{
+ static const QString llvmConfig = QStandardPaths::findExecutable(u"llvm-config"_s);
+ if (llvmConfig.isEmpty())
+ return {};
+ QByteArray stdOut;
+ if (!runProcess(llvmConfig, QStringList{arg}, &stdOut))
+ return {};
+ const QString path = QFile::decodeName(stdOut.trimmed());
+ if (!QFileInfo::exists(path)) {
+ qWarning(R"(%s: "%s" as returned by llvm-config "%s" does not exist.)",
+ __FUNCTION__, qPrintable(QDir::toNativeSeparators(path)), qPrintable(arg));
+ return {};
+ }
+ return path;
+}
+
static QString findClangLibDir()
{
for (const char *envVar : {"LLVM_INSTALL_DIR", "CLANG_INSTALL_DIR"}) {
@@ -250,18 +267,7 @@ static QString findClangLibDir()
qWarning("%s: %s as pointed to by %s does not exist.", __FUNCTION__, qPrintable(path), envVar);
}
}
- const QString llvmConfig =
- QStandardPaths::findExecutable(u"llvm-config"_s);
- if (!llvmConfig.isEmpty()) {
- QByteArray stdOut;
- if (runProcess(llvmConfig, QStringList{u"--libdir"_s}, &stdOut)) {
- const QString path = QFile::decodeName(stdOut.trimmed());
- if (QFileInfo::exists(path))
- return path;
- qWarning("%s: %s as returned by llvm-config does not exist.", __FUNCTION__, qPrintable(path));
- }
- }
- return QString();
+ return queryLlvmConfigDir(u"--libdir"_s);
}
static QString findClangBuiltInIncludesDir()
@@ -290,7 +296,7 @@ static QString findClangBuiltInIncludesDir()
if (!candidate.isEmpty())
return candidate + QStringLiteral("/include");
}
- return QString();
+ return queryLlvmConfigDir(u"--includedir"_s);
}
static QString compilerFromCMake(const QString &defaultCompiler)