From 4e1434d51a5011fd63c7741391ace30742be0896 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 31 Aug 2020 00:05:50 +0200 Subject: [PATCH] McuSupport: Grant kits a Qt version on non Windows host The qul libraries for the Desktop Backend are statically linked against Qt on Windows. Also, the qul host tools are shipped with the Qt runtime libraries (on Windows). Not so on Linux, so a Qt version is required, there. Change-Id: Id49ed2ef01926abc71291751eae03263317a56d4 Reviewed-by: hjk --- src/plugins/mcusupport/mcusupportoptions.cpp | 22 +++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 8c957dd5a1a..ddb6148812a 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -75,6 +75,13 @@ static QString packagePathFromSettings(const QString &settingsKey, return Utils::FilePath::fromFileInfo(path).toString(); } +static bool kitNeedsQtVersion() +{ + // Only on Windows, Qt is linked into the distributed qul Desktop libs. Also, the host tools + // are missing the Qt runtime libraries on non-Windows. + return !Utils::HostOsInfo::isWindowsHost(); +} + McuPackage::McuPackage(const QString &label, const QString &defaultPath, const QString &detectionPath, const QString &settingsKey) : m_label(label) @@ -513,9 +520,10 @@ static void setKitProperties(const QString &kitName, ProjectExplorer::Kit *k, if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop) k->setDeviceTypeForIcon(DEVICE_TYPE); QSet irrelevant = { - SysRootKitAspect::id(), - QtSupport::QtKitAspect::id() + SysRootKitAspect::id() }; + if (!kitNeedsQtVersion()) + irrelevant.insert(QtSupport::QtKitAspect::id()); if (jomExecutablePath().exists()) // TODO: add id() getter to CMakeGeneratorKitAspect irrelevant.insert("CMake.GeneratorKitInformation"); k->setIrrelevantAspects(irrelevant); @@ -584,6 +592,10 @@ static void setKitEnvironment(ProjectExplorer::Kit *k, const McuTarget* mcuTarge pathAdditions.append(QDir::toNativeSeparators(Core::ICore::libexecPath() + "/clang/bin")); const QString path = QLatin1String(Utils::HostOsInfo().isWindowsHost() ? "Path" : "PATH"); changes.append({path, pathAdditions.join(Utils::HostOsInfo::pathListSeparator())}); + + if (kitNeedsQtVersion()) + changes.append({QLatin1String("LD_LIBRARY_PATH"), "%{Qt:QT_INSTALL_LIBS}"}); + EnvironmentKitAspect::setEnvironmentChanges(k, changes); } @@ -619,12 +631,16 @@ static void setKitCMakeOptions(ProjectExplorer::Kit *k, const McuTarget* mcuTarg config.append(CMakeConfigItem("CMAKE_MAKE_PROGRAM", jom.toString().toLatin1())); CMakeGeneratorKitAspect::setGenerator(k, "NMake Makefiles JOM"); } + if (kitNeedsQtVersion()) + config.append(CMakeConfigItem("CMAKE_PREFIX_PATH", "%{Qt:QT_INSTALL_PREFIX}")); CMakeConfigurationKitAspect::setConfiguration(k, config); } static void setKitQtVersionOptions(ProjectExplorer::Kit *k) { - QtSupport::QtKitAspect::setQtVersion(k, nullptr); + if (!kitNeedsQtVersion()) + QtSupport::QtKitAspect::setQtVersion(k, nullptr); + // else: auto-select a Qt version } QString McuSupportOptions::kitName(const McuTarget *mcuTarget)