From 93669a133944551c852dd5ef4e4dbca0a3946e8a Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 22 Jul 2019 14:57:53 +0200 Subject: Avoid some deprecation warnings for QLatin1Literal uses Change-Id: I8fe64c2ab78b1cf2e1af2a6aa2dad201299a0a94 Reviewed-by: Christian Kandeler --- src/plugins/scanner/cpp/cppscanner.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/plugins/scanner/cpp/cppscanner.cpp b/src/plugins/scanner/cpp/cppscanner.cpp index 067127d00..cbab8a012 100644 --- a/src/plugins/scanner/cpp/cppscanner.cpp +++ b/src/plugins/scanner/cpp/cppscanner.cpp @@ -126,7 +126,7 @@ public: { } - bool equals(const Token &tk, const QLatin1Literal &literal) const + bool equals(const Token &tk, const QLatin1String &literal) const { return static_cast(tk.length()) == literal.size() && memcmp(m_fileContent + tk.begin(), literal.data(), literal.size()) == 0; @@ -136,13 +136,13 @@ public: static void scanCppFile(void *opaq, CPlusPlus::Lexer &yylex, bool scanForFileTags, bool scanForDependencies) { - const QLatin1Literal includeLiteral("include"); - const QLatin1Literal importLiteral("import"); - const QLatin1Literal defineLiteral("define"); - const QLatin1Literal qobjectLiteral("Q_OBJECT"); - const QLatin1Literal qgadgetLiteral("Q_GADGET"); - const QLatin1Literal qnamespaceLiteral("Q_NAMESPACE"); - const QLatin1Literal pluginMetaDataLiteral("Q_PLUGIN_METADATA"); + const QLatin1String includeLiteral("include"); + const QLatin1String importLiteral("import"); + const QLatin1String defineLiteral("define"); + const QLatin1String qobjectLiteral("Q_OBJECT"); + const QLatin1String qgadgetLiteral("Q_GADGET"); + const QLatin1String qnamespaceLiteral("Q_NAMESPACE"); + const QLatin1String pluginMetaDataLiteral("Q_PLUGIN_METADATA"); const auto opaque = static_cast(opaq); const TokenComparator tc(opaque->fileContent); Token tk; -- cgit v1.2.3 From 05ca2e5daa0aedfcfd311658cb62d417acc9b247 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 24 Jul 2019 12:43:07 +0200 Subject: Work around deprecation warnings in Qt Change-Id: Iff45f56fc91f3d513440a3e2aaf519a7aa0f7744 Reviewed-by: Christian Kandeler --- src/lib/corelib/language/jsimports.h | 3 ++- src/lib/corelib/language/language.cpp | 2 +- src/lib/corelib/language/resolvedfilecontext.cpp | 2 +- src/lib/corelib/tools/qttools.h | 15 +++++++++++++++ 4 files changed, 19 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/lib/corelib/language/jsimports.h b/src/lib/corelib/language/jsimports.h index ebde70b7b..a892e0ec0 100644 --- a/src/lib/corelib/language/jsimports.h +++ b/src/lib/corelib/language/jsimports.h @@ -42,6 +42,7 @@ #include #include +#include #include #include @@ -79,7 +80,7 @@ inline bool operator<(const JsImport &lhs, const JsImport &rhs) inline bool operator==(const JsImport &jsi1, const JsImport &jsi2) { - return jsi1.scopeName == jsi2.scopeName && jsi1.filePaths.toSet() == jsi2.filePaths.toSet(); + return jsi1.scopeName == jsi2.scopeName && toSet(jsi1.filePaths) == toSet(jsi2.filePaths); } using JsImports = std::vector; diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp index d888700c5..40549b836 100644 --- a/src/lib/corelib/language/language.cpp +++ b/src/lib/corelib/language/language.cpp @@ -241,7 +241,7 @@ bool operator==(const ResolvedModule &m1, const ResolvedModule &m2) { return m1.name == m2.name && m1.isProduct == m2.isProduct - && m1.moduleDependencies.toSet() == m2.moduleDependencies.toSet() + && toSet(m1.moduleDependencies) == toSet(m2.moduleDependencies) && m1.setupBuildEnvironmentScript == m2.setupBuildEnvironmentScript && m1.setupRunEnvironmentScript == m2.setupRunEnvironmentScript; } diff --git a/src/lib/corelib/language/resolvedfilecontext.cpp b/src/lib/corelib/language/resolvedfilecontext.cpp index f1151f98f..db63a8ef4 100644 --- a/src/lib/corelib/language/resolvedfilecontext.cpp +++ b/src/lib/corelib/language/resolvedfilecontext.cpp @@ -53,7 +53,7 @@ ResolvedFileContext::ResolvedFileContext(const FileContextBase &ctx) bool operator==(const ResolvedFileContext &a, const ResolvedFileContext &b) { return a.filePath() == b.filePath() - && a.jsExtensions().toSet() == b.jsExtensions().toSet() + && toSet(a.jsExtensions()) == toSet(b.jsExtensions()) && sorted(a.jsImports()) == sorted(b.jsImports()); } diff --git a/src/lib/corelib/tools/qttools.h b/src/lib/corelib/tools/qttools.h index b465e3d9e..c3b4d3a9f 100644 --- a/src/lib/corelib/tools/qttools.h +++ b/src/lib/corelib/tools/qttools.h @@ -70,4 +70,19 @@ uint qHash(const QStringList &list); uint qHash(const QProcessEnvironment &env); QT_END_NAMESPACE +namespace qbs { + +template +QSet toSet(const QList &list) +{ +#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0)) + return list.toSet(); +#else + return QSet(list.begin(), list.end()); +#endif +} + +} // namespace qbs + + #endif // QBSQTTOOLS_H -- cgit v1.2.3 From 2269ddc60e47bfea459ef034ab1be112716b4764 Mon Sep 17 00:00:00 2001 From: Ivan Komissarov Date: Tue, 23 Jul 2019 19:42:41 +0200 Subject: Improve clang-cl auto-detection Now also check for the clang-cl in the default install locations Task-number: QBS-1316 Change-Id: I5d0dfd2b98164b0cac08358001cd1946b4f8aadc Reviewed-by: Denis Shienkov Reviewed-by: Christian Kandeler --- src/app/qbs-setup-toolchains/clangclprobe.cpp | 42 ++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/app/qbs-setup-toolchains/clangclprobe.cpp b/src/app/qbs-setup-toolchains/clangclprobe.cpp index 89075c5e8..5c2a87731 100644 --- a/src/app/qbs-setup-toolchains/clangclprobe.cpp +++ b/src/app/qbs-setup-toolchains/clangclprobe.cpp @@ -117,6 +117,46 @@ QString findCompatibleVcsarsallBat() return {}; } +QString wow6432Key() +{ +#ifdef Q_OS_WIN64 + return QStringLiteral("\\Wow6432Node"); +#else + return {}; +#endif +} + +QString findClangCl() +{ + const auto compilerName = HostOsInfo::appendExecutableSuffix(QStringLiteral("clang-cl")); + const auto compilerFromPath = findExecutable(compilerName); + if (!compilerFromPath.isEmpty()) + return compilerFromPath; + + const QSettings registry( + QStringLiteral("HKEY_LOCAL_MACHINE\\SOFTWARE%1\\LLVM\\LLVM").arg(wow6432Key()), + QSettings::NativeFormat); + const auto key = QStringLiteral("."); + if (registry.contains(key)) { + const auto compilerPath = QDir::fromNativeSeparators(registry.value(key).toString()) + + QStringLiteral("/bin/") + compilerName; + if (QFileInfo(compilerPath).exists()) + return compilerPath; + } + + // this branch can be useful in case user had two LLVM installations (e.g. 32bit & 64bit) + // but uninstalled one - in that case, registry will be empty + static const char * const envVarCandidates[] = {"ProgramFiles", "ProgramFiles(x86)"}; + for (const auto &envVar : envVarCandidates) { + const auto value + = QDir::fromNativeSeparators(QString::fromLocal8Bit(qgetenv(envVar))); + const auto compilerPath = value + QStringLiteral("/LLVM/bin/") + compilerName; + if (QFileInfo(compilerPath).exists()) + return compilerPath; + } + return {}; +} + } // namespace void createClangClProfile( @@ -144,7 +184,7 @@ void clangClProbe(Settings *settings, QList &profiles) { const auto compilerName = QStringLiteral("clang-cl"); qbsInfo() << Tr::tr("Trying to detect %1...").arg(compilerName); - const auto compilerFilePath = findExecutable(HostOsInfo::appendExecutableSuffix(compilerName)); + const auto compilerFilePath = findClangCl(); if (compilerFilePath.isEmpty()) { qbsInfo() << Tr::tr("%1 was not found.").arg(compilerName); return; -- cgit v1.2.3