aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2020-04-17 08:09:55 +0200
committerEike Ziller <eike.ziller@qt.io>2020-04-17 08:09:55 +0200
commit602d690baba3784e1761037e787f0e7d14af5a8a (patch)
tree4923aa77ad98f6cb88a98e4d34cd5d30dda2c926 /src/plugins
parent2795292c74ff64d06b12eeed5c41bd107c3ce5b9 (diff)
parente85c0746215609b6c2efcd30a7b3407b3de21c17 (diff)
Merge remote-tracking branch 'origin/4.12'
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/android/androidsdkmodel.cpp9
-rw-r--r--src/plugins/android/androidsettingswidget.cpp2
-rw-r--r--src/plugins/autotest/quick/quicktestvisitors.cpp2
-rw-r--r--src/plugins/cmakeprojectmanager/fileapidataextractor.cpp28
-rw-r--r--src/plugins/mcusupport/mcusupportoptions.cpp134
-rw-r--r--src/plugins/mcusupport/mcusupportoptions.h4
-rw-r--r--src/plugins/mcusupport/mcusupportsdk.cpp102
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp8
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.cpp9
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.h2
-rw-r--r--src/plugins/qbsprojectmanager/qbscleanstep.cpp9
-rw-r--r--src/plugins/qbsprojectmanager/qbscleanstep.h2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/dragtool.cpp3
-rw-r--r--src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp2
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp8
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp7
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h2
17 files changed, 253 insertions, 80 deletions
diff --git a/src/plugins/android/androidsdkmodel.cpp b/src/plugins/android/androidsdkmodel.cpp
index 7e18b19ff4..b2dce193c5 100644
--- a/src/plugins/android/androidsdkmodel.cpp
+++ b/src/plugins/android/androidsdkmodel.cpp
@@ -285,14 +285,9 @@ void AndroidSdkModel::selectMissingEssentials()
if (!pendingPkgs.contains((*tool)->sdkStylePath()))
continue;
- if ((*tool)->type() == AndroidSdkPackage::PlatformToolsPackage)
- addTool(tool); // Select Platform tools
- else if ((*tool)->type() == AndroidSdkPackage::BuildToolsPackage)
- addTool(tool); // Select build tools
- else if ((*tool)->type() == AndroidSdkPackage::NDKPackage)
- addTool(tool); // Select NDK Bundle
-
+ addTool(tool);
pendingPkgs.removeOne((*tool)->sdkStylePath());
+
if (pendingPkgs.isEmpty())
break;
}
diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp
index db793e05cf..7f27b2544f 100644
--- a/src/plugins/android/androidsettingswidget.cpp
+++ b/src/plugins/android/androidsettingswidget.cpp
@@ -820,7 +820,7 @@ void AndroidSettingsWidget::downloadOpenSslRepo(const bool silent)
const QString openSslRepo("https://github.com/KDAB/android_openssl.git");
Utils::QtcProcess *gitCloner = new Utils::QtcProcess(this);
- gitCloner->setCommand(Utils::CommandLine("git", {"clone", openSslRepo, openSslPath.fileName()}));
+ gitCloner->setCommand(Utils::CommandLine("git", {"clone", "--depth=1", openSslRepo, openSslPath.fileName()}));
gitCloner->setWorkingDirectory(openSslPath.parentDir().toString());
QDir openSslDir(openSslPath.toString());
diff --git a/src/plugins/autotest/quick/quicktestvisitors.cpp b/src/plugins/autotest/quick/quicktestvisitors.cpp
index 598b16afec..0b6548131e 100644
--- a/src/plugins/autotest/quick/quicktestvisitors.cpp
+++ b/src/plugins/autotest/quick/quicktestvisitors.cpp
@@ -212,6 +212,8 @@ bool QuickTestAstVisitor::visit(CPlusPlus::CallAST *ast)
if (expressionListAST && expressionListAST->value) {
const auto *stringLitAST = expressionListAST->value->asStringLiteral();
+ if (!stringLitAST)
+ return false;
const auto *string
= translationUnit()->stringLiteral(stringLitAST->literal_token);
if (string) {
diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp
index 79891a8b5b..568b9510bd 100644
--- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp
+++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp
@@ -312,11 +312,10 @@ RawProjectParts generateRawProjectParts(const PreprocessedData &input,
const FilePath &sourceDirectory)
{
RawProjectParts rpps;
+ const QDir sourceDir(sourceDirectory.toString());
int counter = 0;
for (const TargetDetails &t : input.targetDetails) {
- QDir sourceDir(sourceDirectory.toString());
-
bool needPostfix = t.compileGroups.size() > 1;
int count = 1;
for (const CompileInfo &ci : t.compileGroups) {
@@ -359,14 +358,15 @@ RawProjectParts generateRawProjectParts(const PreprocessedData &input,
cxxProjectFlags.commandLineFlags = cProjectFlags.commandLineFlags;
rpp.setFlagsForCxx(cxxProjectFlags);
- FilePath precompiled_header
- = FilePath::fromString(findOrDefault(t.sources, [&ending](const SourceInfo &si) {
- return si.path.endsWith(ending);
- }).path);
+ FilePath precompiled_header = FilePath::fromString(
+ findOrDefault(t.sources, [&ending](const SourceInfo &si) {
+ return si.path.endsWith(ending);
+ }).path);
rpp.setFiles(transform<QList>(ci.sources, [&t, &sourceDir](const int si) {
return sourceDir.absoluteFilePath(t.sources[static_cast<size_t>(si)].path);
}));
+
if (!precompiled_header.isEmpty()) {
if (precompiled_header.toFileInfo().isRelative()) {
const FilePath parentDir = FilePath::fromString(sourceDir.absolutePath());
@@ -381,6 +381,22 @@ RawProjectParts generateRawProjectParts(const PreprocessedData &input,
rpps.append(rpp);
++count;
}
+
+ // Check sources for more files and associate them with the current target
+ const QStringList extraSources = Utils::transform<QList>(
+ Utils::filtered(t.sources, [](const SourceInfo &si) { return si.compileGroup == -1; }),
+ [&sourceDir](const SourceInfo &si) { return sourceDir.absoluteFilePath(si.path); });
+ if (!extraSources.isEmpty()) {
+ RawProjectPart rpp;
+ rpp.setProjectFileLocation(t.sourceDir.pathAppended("CMakeLists.txt").toString());
+ rpp.setBuildSystemTarget(t.name);
+ rpp.setDisplayName(t.id + "_extra");
+
+ rpp.setFiles(extraSources);
+
+ // This is all the information we have :-/
+ rpps.append(rpp);
+ }
}
return rpps;
diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp
index 9b0b8f576f..ca55f08eca 100644
--- a/src/plugins/mcusupport/mcusupportoptions.cpp
+++ b/src/plugins/mcusupport/mcusupportoptions.cpp
@@ -27,18 +27,21 @@
#include "mcusupportoptions.h"
#include "mcusupportsdk.h"
+#include <cmakeprojectmanager/cmaketoolmanager.h>
#include <coreplugin/icore.h>
#include <coreplugin/helpmanager.h>
#include <cmakeprojectmanager/cmakekitinformation.h>
#include <debugger/debuggeritem.h>
#include <debugger/debuggeritemmanager.h>
#include <debugger/debuggerkitinformation.h>
+#include <projectexplorer/abi.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/toolchain.h>
#include <projectexplorer/toolchainmanager.h>
#include <projectexplorer/kitmanager.h>
#include <projectexplorer/kitinformation.h>
#include <projectexplorer/devicesupport/devicemanager.h>
+#include <qtsupport/qtkitinformation.h>
#include <qtsupport/qtversionmanager.h>
#include <utils/algorithm.h>
#include <utils/fileutils.h>
@@ -182,7 +185,7 @@ void McuPackage::updateStatus()
const Utils::FilePath detectionPath = Utils::FilePath::fromString(
m_fileChooser->filePath().toString() + "/" + m_detectionPath);
const QString displayDetectionPath = Utils::FilePath::fromString(m_detectionPath).toUserOutput();
- const bool validPackage = detectionPath.exists();
+ const bool validPackage = m_detectionPath.isEmpty() || detectionPath.exists();
m_status = validPath ? (validPackage ? ValidPackage : ValidPathInvalidPackage) : InvalidPath;
@@ -192,7 +195,9 @@ void McuPackage::updateStatus()
QString statusText;
switch (m_status) {
case ValidPackage:
- statusText = tr("Path is valid, \"%1\" was found.").arg(displayDetectionPath);
+ statusText = m_detectionPath.isEmpty()
+ ? "Path exists." // TODO tr()
+ : tr("Path is valid, \"%1\" was found.").arg(displayDetectionPath);
break;
case ValidPathInvalidPackage:
statusText = tr("Path exists, but does not contain \"%1\".").arg(displayDetectionPath);
@@ -217,6 +222,22 @@ McuToolChainPackage::Type McuToolChainPackage::type() const
return m_type;
}
+static ProjectExplorer::ToolChain *desktopToolChain(Core::Id language)
+{
+ using namespace ProjectExplorer;
+
+ ToolChain *toolChain = ToolChainManager::toolChain([language](const ToolChain *t) {
+ const Abi abi = t->targetAbi();
+ return (abi.os() != Abi::WindowsOS
+ || (abi.osFlavor() == Abi::WindowsMsvc2017Flavor
+ || abi.osFlavor() == Abi::WindowsMsvc2019Flavor))
+ && abi.architecture() == Abi::X86Architecture
+ && abi.wordWidth() == 64
+ && t->language() == language;
+ });
+ return toolChain;
+}
+
static ProjectExplorer::ToolChain* armGccToolChain(const Utils::FilePath &path, Core::Id language)
{
using namespace ProjectExplorer;
@@ -245,24 +266,30 @@ static ProjectExplorer::ToolChain* armGccToolChain(const Utils::FilePath &path,
ProjectExplorer::ToolChain *McuToolChainPackage::toolChain(Core::Id language) const
{
- const QLatin1String compilerName(
- language == ProjectExplorer::Constants::C_LANGUAGE_ID ? "gcc" : "g++");
- const Utils::FilePath compiler = Utils::FilePath::fromUserInput(
- Utils::HostOsInfo::withExecutableSuffix(
- path() + (
- m_type == TypeArmGcc
- ? "/bin/arm-none-eabi-%1" : m_type == TypeIAR
- ? "/foo/bar-iar-%1" : "/bar/foo-keil-%1")).arg(compilerName));
-
- ProjectExplorer::ToolChain *tc = armGccToolChain(compiler, language);
+ ProjectExplorer::ToolChain *tc = nullptr;
+ if (m_type == TypeDesktop) {
+ tc = desktopToolChain(language);
+ } else {
+ const QLatin1String compilerName(
+ language == ProjectExplorer::Constants::C_LANGUAGE_ID ? "gcc" : "g++");
+ const Utils::FilePath compiler = Utils::FilePath::fromUserInput(
+ Utils::HostOsInfo::withExecutableSuffix(
+ path() + (
+ m_type == TypeArmGcc
+ ? "/bin/arm-none-eabi-%1" : m_type == TypeIAR
+ ? "/foo/bar-iar-%1" : "/bar/foo-keil-%1")).arg(compilerName));
+
+ tc = armGccToolChain(compiler, language);
+ }
return tc;
}
QString McuToolChainPackage::cmakeToolChainFileName() const
{
return QLatin1String(m_type == TypeArmGcc
- ? "armgcc.cmake" : m_type == McuToolChainPackage::TypeIAR
- ? "iar.cmake" : "keil.cmake");
+ ? "armgcc" : m_type == McuToolChainPackage::TypeIAR
+ ? "iar" : m_type == McuToolChainPackage::TypeKEIL
+ ? "keil" : "ghs") + QLatin1String(".cmake");
}
QVariant McuToolChainPackage::debuggerId() const
@@ -429,11 +456,6 @@ Utils::FilePath McuSupportOptions::qulDirFromSettings()
packagePathFromSettings(Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK));
}
-static bool mcuTargetIsDesktop(const McuTarget* mcuTarget)
-{
- return mcuTarget->qulPlatform() == "Qt";
-}
-
static Utils::FilePath jomExecutablePath()
{
return Utils::HostOsInfo::isWindowsHost() ?
@@ -453,21 +475,23 @@ static void setKitProperties(const QString &kitName, ProjectExplorer::Kit *k,
McuSupportOptions::supportedQulVersion().toString());
k->setAutoDetected(true);
k->makeSticky();
- if (mcuTargetIsDesktop(mcuTarget)) {
+ if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop)
k->setDeviceTypeForIcon(Constants::DEVICE_TYPE);
- } else {
- QSet<Core::Id> irrelevant = {
- SysRootKitAspect::id(),
- "QtSupport.QtInformation" // QtKitAspect::id()
- };
- if (jomExecutablePath().exists()) // TODO: add id() getter to CMakeGeneratorKitAspect
- irrelevant.insert("CMake.GeneratorKitInformation");
- k->setIrrelevantAspects(irrelevant);
- }
+ QSet<Core::Id> irrelevant = {
+ SysRootKitAspect::id(),
+ QtSupport::QtKitAspect::id()
+ };
+ if (jomExecutablePath().exists()) // TODO: add id() getter to CMakeGeneratorKitAspect
+ irrelevant.insert("CMake.GeneratorKitInformation");
+ k->setIrrelevantAspects(irrelevant);
}
static void setKitToolchains(ProjectExplorer::Kit *k, const McuToolChainPackage *tcPackage)
{
+ // No Green Hills toolchain, because support for it is missing.
+ if (tcPackage->type() == McuToolChainPackage::TypeGHS)
+ return;
+
ProjectExplorer::ToolChainKitAspect::setToolChain(k, tcPackage->toolChain(
ProjectExplorer::Constants::C_LANGUAGE_ID));
ProjectExplorer::ToolChainKitAspect::setToolChain(k, tcPackage->toolChain(
@@ -476,11 +500,22 @@ static void setKitToolchains(ProjectExplorer::Kit *k, const McuToolChainPackage
static void setKitDebugger(ProjectExplorer::Kit *k, const McuToolChainPackage *tcPackage)
{
+ // Qt Creator seems to be smart enough to deduce the right Kit debugger from the ToolChain
+ // We rely on that at least in the Desktop case.
+ if (tcPackage->type() == McuToolChainPackage::TypeDesktop
+ // No Green Hills debugger, because support for it is missing.
+ || tcPackage->type() == McuToolChainPackage::TypeGHS)
+ return;
+
Debugger::DebuggerKitAspect::setDebugger(k, tcPackage->debuggerId());
}
-static void setKitDevice(ProjectExplorer::Kit *k)
+static void setKitDevice(ProjectExplorer::Kit *k, const McuTarget* mcuTarget)
{
+ // "Device Type" Desktop is the default. We use that for the Qt for MCUs Desktop Kit
+ if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop)
+ return;
+
ProjectExplorer::DeviceTypeKitAspect::setDeviceTypeId(k, Constants::DEVICE_TYPE);
}
@@ -492,6 +527,13 @@ static void setKitEnvironment(ProjectExplorer::Kit *k, const McuTarget* mcuTarge
Utils::EnvironmentItems changes;
QStringList pathAdditions;
+ // The Desktop version depends on the Qt shared libs in Qul_DIR/bin.
+ // If CMake's fileApi is avaialble, we can rely on the "Add library search path to PATH"
+ // feature of the run configuration. Otherwise, we just prepend the path, here.
+ if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop
+ && !CMakeProjectManager::CMakeToolManager::defaultCMakeTool()->hasFileApi())
+ pathAdditions.append(QDir::toNativeSeparators(qtForMCUsSdkPackage->path() + "/bin"));
+
QVector<McuPackage *> packagesIncludingSdk;
packagesIncludingSdk.reserve(mcuTarget->packages().size() + 1);
packagesIncludingSdk.append(mcuTarget->packages());
@@ -517,9 +559,12 @@ static void setKitCMakeOptions(ProjectExplorer::Kit *k, const McuTarget* mcuTarg
using namespace CMakeProjectManager;
CMakeConfig config = CMakeConfigurationKitAspect::configuration(k);
- config.append(CMakeConfigItem("CMAKE_CXX_COMPILER", "%{Compiler:Executable:Cxx}"));
- config.append(CMakeConfigItem("CMAKE_C_COMPILER", "%{Compiler:Executable:C}"));
- if (mcuTarget->toolChainPackage())
+ // CMake ToolChain file for ghs handles CMAKE_*_COMPILER autonomously
+ if (mcuTarget->toolChainPackage()->type() != McuToolChainPackage::TypeGHS) {
+ config.append(CMakeConfigItem("CMAKE_CXX_COMPILER", "%{Compiler:Executable:Cxx}"));
+ config.append(CMakeConfigItem("CMAKE_C_COMPILER", "%{Compiler:Executable:C}"));
+ }
+ if (mcuTarget->toolChainPackage()->type() != McuToolChainPackage::TypeDesktop)
config.append(CMakeConfigItem(
"CMAKE_TOOLCHAIN_FILE",
(qulDir + "/lib/cmake/Qul/toolchain/"
@@ -528,8 +573,6 @@ static void setKitCMakeOptions(ProjectExplorer::Kit *k, const McuTarget* mcuTarg
(qulDir + "/lib/cmake/Qul/QulGenerators.cmake").toUtf8()));
config.append(CMakeConfigItem("QUL_PLATFORM",
mcuTarget->qulPlatform().toUtf8()));
- if (mcuTargetIsDesktop(mcuTarget))
- config.append(CMakeConfigItem("CMAKE_PREFIX_PATH", "%{Qt:QT_INSTALL_PREFIX}"));
if (mcuTarget->colorDepth() >= 0)
config.append(CMakeConfigItem("QUL_COLOR_DEPTH",
QString::number(mcuTarget->colorDepth()).toLatin1()));
@@ -541,14 +584,24 @@ static void setKitCMakeOptions(ProjectExplorer::Kit *k, const McuTarget* mcuTarg
CMakeConfigurationKitAspect::setConfiguration(k, config);
}
+static void setKitQtVersionOptions(ProjectExplorer::Kit *k)
+{
+ QtSupport::QtKitAspect::setQtVersion(k, nullptr);
+}
+
QString McuSupportOptions::kitName(const McuTarget *mcuTarget) const
{
// TODO: get version from qulSdkPackage and insert into name
const QString colorDepth = mcuTarget->colorDepth() > 0
? QString::fromLatin1(" %1bpp").arg(mcuTarget->colorDepth())
: "";
+ // Hack: Use the platform name in the kit name. Exception for the "Qt" platform: use "Desktop"
+ const QString targetName =
+ mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop
+ ? "Desktop"
+ : mcuTarget->qulPlatform();
return QString::fromLatin1("Qt for MCUs %1 - %2%3")
- .arg(supportedQulVersion().toString(), mcuTarget->qulPlatform(), colorDepth);
+ .arg(supportedQulVersion().toString(), targetName, colorDepth);
}
QList<ProjectExplorer::Kit *> McuSupportOptions::existingKits(const McuTarget *mcuTargt)
@@ -568,13 +621,12 @@ ProjectExplorer::Kit *McuSupportOptions::newKit(const McuTarget *mcuTarget)
KitGuard kitGuard(k);
setKitProperties(kitName(mcuTarget), k, mcuTarget);
- if (!mcuTargetIsDesktop(mcuTarget)) {
- setKitToolchains(k, mcuTarget->toolChainPackage());
- setKitDebugger(k, mcuTarget->toolChainPackage());
- setKitDevice(k);
- }
+ setKitDevice(k, mcuTarget);
+ setKitToolchains(k, mcuTarget->toolChainPackage());
+ setKitDebugger(k, mcuTarget->toolChainPackage());
setKitEnvironment(k, mcuTarget, qtForMCUsSdkPackage);
setKitCMakeOptions(k, mcuTarget, qtForMCUsSdkPackage->path());
+ setKitQtVersionOptions(k);
k->setup();
k->fix();
diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h
index afc26c5003..b87452cca5 100644
--- a/src/plugins/mcusupport/mcusupportoptions.h
+++ b/src/plugins/mcusupport/mcusupportoptions.h
@@ -109,7 +109,9 @@ public:
enum Type {
TypeArmGcc,
TypeIAR,
- TypeKEIL
+ TypeKEIL,
+ TypeGHS,
+ TypeDesktop
};
McuToolChainPackage(const QString &label, const QString &defaultPath,
diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp
index b4b72ad5e7..73afb438f5 100644
--- a/src/plugins/mcusupport/mcusupportsdk.cpp
+++ b/src/plugins/mcusupport/mcusupportsdk.cpp
@@ -60,6 +60,11 @@ McuPackage *createQtForMCUsPackage()
return result;
}
+static McuToolChainPackage *createDesktopToolChainPackage()
+{
+ return new McuToolChainPackage({}, {}, {}, {}, McuToolChainPackage::TypeDesktop);
+}
+
static McuToolChainPackage *createArmGccPackage()
{
const char envVar[] = "ARMGCC_DIR";
@@ -93,6 +98,50 @@ static McuToolChainPackage *createArmGccPackage()
return result;
}
+static McuToolChainPackage *createGhsToolchainPackage()
+{
+ const char envVar[] = "GHS_COMPILER_DIR";
+
+ const QString defaultPath =
+ qEnvironmentVariableIsSet(envVar) ? qEnvironmentVariable(envVar) : QDir::homePath();
+
+ auto result = new McuToolChainPackage(
+ "Green Hills Compiler",
+ defaultPath,
+ Utils::HostOsInfo::withExecutableSuffix("ccv850"),
+ "GHSToolchain",
+ McuToolChainPackage::TypeGHS);
+ result->setEnvironmentVariableName(envVar);
+ return result;
+}
+
+static McuPackage *createRGLPackage()
+{
+ const char envVar[] = "RGL_DIR";
+
+ QString defaultPath;
+ if (qEnvironmentVariableIsSet(envVar)) {
+ defaultPath = qEnvironmentVariable(envVar);
+ } else if (Utils::HostOsInfo::isWindowsHost()) {
+ defaultPath = QDir::rootPath() + "Renesas_Electronics/D1x_RGL";
+ if (QFileInfo::exists(defaultPath)) {
+ const QFileInfoList subDirs =
+ QDir(defaultPath).entryInfoList({QLatin1String("rgl_ghs_D1Mx_*")},
+ QDir::Dirs | QDir::NoDotAndDotDot);
+ if (subDirs.count() == 1)
+ defaultPath = subDirs.first().filePath() + '/';
+ }
+ }
+
+ auto result = new McuPackage(
+ "Renesas Graphics Library",
+ defaultPath,
+ {},
+ "RGL");
+ result->setEnvironmentVariableName(envVar);
+ return result;
+}
+
static McuPackage *createStm32CubeFwF7SdkPackage()
{
auto result = new McuPackage(
@@ -140,21 +189,34 @@ static McuPackage *createEvkbImxrt1050SdkPackage()
return result;
}
-static McuPackage *createSeggerJLinkPackage()
+static McuPackage *createMcuXpressoIdePackage()
{
- QString defaultPath = QString("%{Env:SEGGER_JLINK_SOFTWARE_AND_DOCUMENTATION_PATH}");
- if (Utils::HostOsInfo::isWindowsHost()) {
- const QString programPath = findInProgramFiles("/SEGGER/JLink");
- if (!programPath.isEmpty())
- defaultPath = programPath;
+ const char envVar[] = "MCUXpressoIDE_PATH";
+
+ QString defaultPath;
+ if (qEnvironmentVariableIsSet(envVar)) {
+ defaultPath = qEnvironmentVariable(envVar);
+ } else if (Utils::HostOsInfo::isWindowsHost()) {
+ defaultPath = QDir::rootPath() + "nxp";
+ if (QFileInfo::exists(defaultPath)) {
+ // If default dir has exactly one sub dir that could be the IDE path, pre-select that.
+ const QFileInfoList subDirs =
+ QDir(defaultPath).entryInfoList({QLatin1String("MCUXpressoIDE*")},
+ QDir::Dirs | QDir::NoDotAndDotDot);
+ if (subDirs.count() == 1)
+ defaultPath = subDirs.first().filePath() + '/';
+ }
+ } else {
+ defaultPath = "/usr/local/mcuxpressoide/";
}
+
auto result = new McuPackage(
- McuPackage::tr("SEGGER JLink"),
+ "MCUXpresso IDE",
defaultPath,
- Utils::HostOsInfo::withExecutableSuffix("JLink"),
- "SeggerJLink");
- result->setDownloadUrl("https://www.segger.com/downloads/jlink");
- result->setEnvironmentVariableName("SEGGER_JLINK_SOFTWARE_AND_DOCUMENTATION_PATH");
+ Utils::HostOsInfo::withExecutableSuffix("ide/binaries/crt_emu_cm_redlink"),
+ "MCUXpressoIDE");
+ result->setDownloadUrl("https://www.nxp.com/mcuxpresso/ide");
+ result->setEnvironmentVariableName(envVar);
return result;
}
@@ -162,21 +224,25 @@ void hardcodedTargetsAndPackages(const Utils::FilePath &dir, QVector<McuPackage
QVector<McuTarget *> *mcuTargets)
{
McuToolChainPackage* armGccPackage = Sdk::createArmGccPackage();
+ McuToolChainPackage *ghsToolchainPackage = createGhsToolchainPackage();
+ McuToolChainPackage* desktopToolChainPackage = createDesktopToolChainPackage();
McuPackage* stm32CubeFwF7SdkPackage = Sdk::createStm32CubeFwF7SdkPackage();
McuPackage* stm32CubeProgrammerPackage = Sdk::createStm32CubeProgrammerPackage();
McuPackage* evkbImxrt1050SdkPackage = Sdk::createEvkbImxrt1050SdkPackage();
- McuPackage* seggerJLinkPackage = Sdk::createSeggerJLinkPackage();
+ McuPackage *mcuXpressoIdePackage = createMcuXpressoIdePackage();
+ McuPackage *rglPackage = createRGLPackage();
QVector<McuPackage*> stmEvalPackages = {
armGccPackage, stm32CubeProgrammerPackage};
QVector<McuPackage*> nxpEvalPackages = {
- armGccPackage, seggerJLinkPackage};
+ armGccPackage, mcuXpressoIdePackage};
QVector<McuPackage*> renesasEvalPackages = {
- armGccPackage, seggerJLinkPackage};
+ ghsToolchainPackage, rglPackage};
QVector<McuPackage*> desktopPackages = {};
*packages = {
- armGccPackage, stm32CubeFwF7SdkPackage, stm32CubeProgrammerPackage, evkbImxrt1050SdkPackage,
- seggerJLinkPackage};
+ armGccPackage, desktopToolChainPackage, ghsToolchainPackage,
+ stm32CubeFwF7SdkPackage, stm32CubeProgrammerPackage, evkbImxrt1050SdkPackage,
+ mcuXpressoIdePackage, rglPackage};
const QString vendorStm = "STM";
const QString vendorNxp = "NXP";
@@ -192,8 +258,8 @@ void hardcodedTargetsAndPackages(const Utils::FilePath &dir, QVector<McuPackage
} targets[] = {
{vendorNxp, {"MIMXRT1050-EVK"}, nxpEvalPackages, armGccPackage, {16}},
{vendorNxp, {"MIMXRT1064-EVK"}, nxpEvalPackages, armGccPackage, {16}},
- {vendorQt, {"Qt"}, desktopPackages, nullptr, {32}},
- {vendorRenesas, {"RH850-D1M1A"}, renesasEvalPackages, armGccPackage, {32}},
+ {vendorQt, {"Qt"}, desktopPackages, desktopToolChainPackage, {32}},
+ {vendorRenesas, {"RH850-D1M1A"}, renesasEvalPackages, ghsToolchainPackage, {32}},
{vendorStm, {"STM32F469I-DISCOVERY"}, stmEvalPackages, armGccPackage, {24}},
{vendorStm, {"STM32F7508-DISCOVERY"}, stmEvalPackages, armGccPackage, {32, 16}},
{vendorStm, {"STM32F769I-DISCOVERY"}, stmEvalPackages, armGccPackage, {32}},
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
index eb6be29f10..33e41c31c7 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
@@ -159,6 +159,14 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id)
QbsBuildConfiguration::~QbsBuildConfiguration()
{
+ for (BuildStep * const bs : buildSteps()->steps()) {
+ if (const auto qbs = qobject_cast<QbsBuildStep *>(bs))
+ qbs->dropSession();
+ }
+ for (BuildStep * const cs : cleanSteps()->steps()) {
+ if (const auto qcs = qobject_cast<QbsCleanStep *>(cs))
+ qcs->dropSession();
+ }
delete m_buildSystem;
}
diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
index fb5ca63f91..d403ad0589 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
@@ -537,6 +537,15 @@ QbsBuildStepData QbsBuildStep::stepData() const
return data;
}
+void QbsBuildStep::dropSession()
+{
+ if (m_session) {
+ doCancel();
+ m_session->disconnect(this);
+ m_session = nullptr;
+ }
+}
+
// --------------------------------------------------------------------
// QbsBuildStepConfigWidget:
diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.h b/src/plugins/qbsprojectmanager/qbsbuildstep.h
index 53ef60ed7e..f0906936b6 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.h
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.h
@@ -73,6 +73,8 @@ public:
QbsBuildSystem *qbsBuildSystem() const;
QbsBuildStepData stepData() const;
+ void dropSession();
+
signals:
void qbsConfigurationChanged();
void qbsBuildOptionsChanged();
diff --git a/src/plugins/qbsprojectmanager/qbscleanstep.cpp b/src/plugins/qbsprojectmanager/qbscleanstep.cpp
index f6753fa411..07adf568d2 100644
--- a/src/plugins/qbsprojectmanager/qbscleanstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbscleanstep.cpp
@@ -85,6 +85,15 @@ QbsCleanStep::~QbsCleanStep()
m_session->disconnect(this);
}
+void QbsCleanStep::dropSession()
+{
+ if (m_session) {
+ doCancel();
+ m_session->disconnect(this);
+ m_session = nullptr;
+ }
+}
+
bool QbsCleanStep::init()
{
if (buildSystem()->isParsing() || m_session)
diff --git a/src/plugins/qbsprojectmanager/qbscleanstep.h b/src/plugins/qbsprojectmanager/qbscleanstep.h
index 24aac0008e..81a51351da 100644
--- a/src/plugins/qbsprojectmanager/qbscleanstep.h
+++ b/src/plugins/qbsprojectmanager/qbscleanstep.h
@@ -46,6 +46,8 @@ public:
QbsBuildStepData stepData() const;
+ void dropSession();
+
private:
bool init() override;
void doRun() override;
diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
index eef9515750..84c8fc1523 100644
--- a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
@@ -106,7 +106,8 @@ void DragTool::createQmlItemNode(const ItemLibraryEntry &itemLibraryEntry,
m_dragNode = QmlItemNode::createQmlItemNode(view(), itemLibraryEntry, itemPos, parentNode);
- m_dragNode.setFlowItemPosition(positonInItemSpace);
+ if (rootIsFlow)
+ m_dragNode.setFlowItemPosition(positonInItemSpace);
QList<QmlItemNode> nodeList;
nodeList.append(m_dragNode);
diff --git a/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp b/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp
index f26178c456..df9590af64 100644
--- a/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp
+++ b/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp
@@ -87,6 +87,8 @@ void ImportManagerView::importsChanged(const QList<Import> &/*addedImports*/, co
void ImportManagerView::possibleImportsChanged(const QList<Import> &/*possibleImports*/)
{
+ QmlDesignerPlugin::instance()->currentDesignDocument()->updateSubcomponentManager();
+
if (m_importsWidget)
m_importsWidget->setPossibleImports(model()->possibleImports());
}
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp
index ee290d01f3..34fa71222d 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp
@@ -512,20 +512,18 @@ void ItemLibraryAssetImporter::finalizeQuick3DImport()
addInfo(progressTitle);
notifyProgress(0, progressTitle);
- // Trigger underlying qmljs snapshot update by making a non-change to the doc
- model->rewriterView()->textModifier()->replace(0, 0, {});
-
// There is an inbuilt delay before rewriter change actually updates the data model,
// so we need to wait for a moment to allow the change to take effect.
// Otherwise subsequent subcomponent manager update won't detect new imports properly.
QTimer *timer = new QTimer(parent());
static int counter;
counter = 0;
- timer->callOnTimeout([this, timer, progressTitle, doc]() {
+ timer->callOnTimeout([this, timer, progressTitle, model]() {
if (!isCancelled()) {
notifyProgress(++counter * 10, progressTitle);
if (counter >= 10) {
- doc->updateSubcomponentManager();
+ // Trigger underlying qmljs snapshot update by making a non-change to the doc
+ model->rewriterView()->textModifier()->replace(0, 0, {});
timer->stop();
notifyFinished();
}
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp
index 9cf92f1440..0bf0503888 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp
@@ -39,6 +39,7 @@
#include <QApplication>
#include <QCursor>
+#include <QFontDatabase>
#include <QQmlContext>
#include <coreplugin/icore.h>
@@ -410,6 +411,12 @@ void PropertyEditorContextObject::restoreCursor()
QApplication::restoreOverrideCursor();
}
+QStringList PropertyEditorContextObject::styleNamesForFamily(const QString &family)
+{
+ const QFontDatabase dataBase;
+ return dataBase.styles(family);
+}
+
void EasingCurveEditor::registerDeclarativeType()
{
qmlRegisterType<EasingCurveEditor>("HelperWidgets", 2, 0, "EasingCurveEditor");
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h
index c38531ce8b..4b74f7331b 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h
@@ -90,6 +90,8 @@ public:
Q_INVOKABLE void hideCursor();
Q_INVOKABLE void restoreCursor();
+ Q_INVOKABLE QStringList styleNamesForFamily(const QString &family);
+
int majorVersion() const;
int majorQtQuickVersion() const;
int minorQtQuickVersion() const;