diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2023-02-16 12:53:13 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-02-17 12:31:53 +0000 |
commit | 12568ae69e9d54ed6af3da904476fb98b878b16b (patch) | |
tree | e0b9a4c1772f6e8be9a876d1e60e10a50fc560bb | |
parent | 7e4f907f6bab2240e477d93a8e516705c58dc40f (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.cpp | 32 |
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) |