diff options
author | Eike Ziller <eike.ziller@qt.io> | 2020-07-06 16:23:13 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2020-07-06 16:23:13 +0200 |
commit | b18711da91a01709f64c4b7d132509aa21ebe0da (patch) | |
tree | dc82d508be7bec62a21548405dff510f19e3a17e | |
parent | c1df1e5d2e8805c4f38872b11bc30bbe72064ede (diff) | |
parent | d35cf4b846a914303675a21300b79dc860e6f73f (diff) |
Merge remote-tracking branch 'origin/4.12' into 4.13
Conflicts:
share/qtcreator/debugger/lldbbridge.py
Change-Id: Ia444f6424fb35b9a539e157afcee868161535272
22 files changed, 226 insertions, 111 deletions
diff --git a/dist/changes-4.12.4.md b/dist/changes-4.12.4.md new file mode 100644 index 0000000000..93775c8615 --- /dev/null +++ b/dist/changes-4.12.4.md @@ -0,0 +1,51 @@ +Qt Creator 4.12.4 +================= + +Qt Creator version 4.12.4 contains bug fixes. + +The most important changes are listed in this document. For a complete +list of changes, see the Git log for the Qt Creator sources that +you can check out from the public Git repository. For example: + + git clone git://code.qt.io/qt-creator/qt-creator.git + git log --cherry-pick --pretty=oneline origin/v4.12.3..v4.12.4 + +Editing +------- + +* Fixed crash when searching in binary files (QTCREATORBUG-21473, QTCREATORBUG-23978) + +### QML + +* Fixed completion of signals from singletons (QTCREATORBUG-24124) +* Fixed import scanning after code model reset (QTCREATORBUG-24082) + +Projects +-------- + +### CMake + +* Fixed search for `ninja` when it is installed with the online installer (QTCREATORBUG-24082) + +Platforms +--------- + +### iOS + +* Fixed C++ debugging on devices (QTCREATORBUG-23995) + +### MCU + +* Adapted to changes in Qt for MCU 1.3 + +Credits for these changes go to: +-------------------------------- +Alessandro Portale +André Pönitz +Christian Kamm +Christian Stenger +Eike Ziller +Fawzi Mohamed +Friedemann Kleint +Robert Löhning +Venugopal Shivashankar diff --git a/doc/qtcreator/images/qtcreator-mcu-options.png b/doc/qtcreator/images/qtcreator-mcu-options.png Binary files differindex 1ebe08f243..5d8758a8e1 100644 --- a/doc/qtcreator/images/qtcreator-mcu-options.png +++ b/doc/qtcreator/images/qtcreator-mcu-options.png diff --git a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc index 268dfde2b4..96fb05b697 100644 --- a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc +++ b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc @@ -49,9 +49,6 @@ For a list of Qt for MCU reference implementations, see the \l{Qt for MCUs - Supported Target Platforms}{Qt for MCUs} documentation. - You use the \l{Connecting Bare Metal Devices}{Bare metal plugin} to connect - to a debug server provider for debugging on MCUs. - \section1 Requirements To use \QC to develop QML applications for MCUs, you need the following: @@ -61,33 +58,40 @@ \li The Bare Metal plugin \li \l{https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm} {GNU ARM Embedded Toolchain} - \li The hardware-specific requirements vary depending on the hardware platform you are developing for. - For more information see: - \list - \li \l{Getting Started on NXP} - \li \l{Getting Started on STM} - \li \l{Getting Started on Renesas} - \endlist \endlist + The hardware-specific requirements vary depending on the hardware platform you are developing for. + For more information see: + \list + \li \l{Getting Started on NXP} + \li \l{Getting Started on STM} + \li \l{Getting Started on Renesas} + \endlist + \section1 Setting Up the Development Environment You must download and install the required software and create connections - between \QC and MCUs. For more information, see \l{Getting Started on Windows}. + between \QC and MCUs. The following subsections guide you through the + setup process. - \section2 Enabling Bare Metal and MCU Plugins + \section2 MCU and Bare Metal Plugins - To be able to develop for MCUs, you must enable the Bare Metal and MCU - plugins: + To be able to develop applications for MCUs, you need the MCU plugin at least. + This plugin is enabled automatically by the installer when you install the + Qt for MCUs SDK. + The Bare Metal plugin is optional unless you want to configure the + debug server provider settings explicitly. For more information + see \l{Connecting Bare Metal Devices}. + + To explicitly disable or enable any of these plugins, follow these + instructions: \list 1 \li Select \uicontrol Help > \uicontrol {About Plugins} > \uicontrol {Device Support} > \uicontrol {Bare Metal} and \uicontrol {MCU Support} to enable the Bare Metal and MCU plugins. \li Select \uicontrol {Restart Now} to restart \QC and load the plugins. - \li Create connections for debugging on the MCU board, as described in - \l{Connecting Bare Metal Devices}. \endlist \section2 Specifying MCU Settings @@ -103,27 +107,30 @@ to the directory where you installed Qt for MCUs SDK. \li In the \uicontrol {Targets supported by the Qt for MCUs SDK} field, select your MCU board. - \li In the \uicontrol {GNU ARM Embedded Toolchain} field, - specify the path to the directory where you installed the - tool chain. - \li For STM32 boards: - \list - \li In the \uicontrol {STM32Cube SDK} field, specify the - path to the directory where you installed the SDK. - \li In the \uicontrol {STM32Cube Programmer} field, - specify the path to the directory where you - installed the tool. - \endlist - \li For NXP boards: + \li In the \uicontrol Requirements section, ensure that the + platform-specific requirements are met. This varies depending + on the target chosen: \list - \li In the \uicontrol {NXP EVKB-IMXRT 1050 SDK} field, - specify the path to the directory where you - installed the SDK. - \li In the \uicontrol {SEGGER JLink} field, specify the - path to the directory where you installed the tool. + \li For STM32 targets: + \list + \li The \uicontrol {GNU ARM Embedded Toolchain} path. + \li The \uicontrol {STM32CubeProgrammer} install path. + \endlist + \li For NXP targets: + \list + \li The \uicontrol {GNU ARM Embedded Toolchain} path. + \li The \uicontrol {MCUXpresso IDE} install path. + \endlist + \li For Renesas targets: + \list + \li The \uicontrol {Green Hills Compiler} path. + \li The \uicontrol {Renesas Graphics Library} path. + \endlist \endlist - \li Select \uicontrol Apply to save the settings and to generate - a MCU device and kit. + \li Select \uicontrol{Create Kit} to create a kit. If you have + an older kit for the selected target, remove it first using + \uicontrol{Remove Kit}. + \li Select \uicontrol Apply to save the settings. \endlist \section2 Adding MCU Devices diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 6020616da4..41d2ebf7f8 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -963,21 +963,25 @@ class Dumper(DumperBase): elif (self.startMode_ == DebuggerStartMode.AttachToRemoteServer or self.startMode_ == DebuggerStartMode.AttachToRemoteProcess): - - f = lldb.SBFileSpec() - f.SetFilename(self.executable_) - - launchInfo = lldb.SBLaunchInfo(self.processArgs_) - #launchInfo.SetWorkingDirectory(self.workingDirectory_) - launchInfo.SetWorkingDirectory('/tmp') - if self.platform_ == 'remote-android': - launchInfo.SetWorkingDirectory('/data/local/tmp') - launchInfo.SetEnvironmentEntries(self.environment_, False) - launchInfo.SetExecutableFile(f, True) - - DumperBase.warn("TARGET: %s" % self.target) - self.process = self.target.Launch(launchInfo, error) - DumperBase.warn("PROCESS: %s" % self.process) + if self.platform_ == 'remote-ios': + self.process = self.target.ConnectRemote( + self.debugger.GetListener(), + self.remoteChannel_, None, error) + else: + f = lldb.SBFileSpec() + f.SetFilename(self.executable_) + + launchInfo = lldb.SBLaunchInfo(self.processArgs_) + #launchInfo.SetWorkingDirectory(self.workingDirectory_) + launchInfo.SetWorkingDirectory('/tmp') + if self.platform_ == 'remote-android': + launchInfo.SetWorkingDirectory('/data/local/tmp') + launchInfo.SetEnvironmentEntries(self.environment_, False) + launchInfo.SetExecutableFile(f, True) + + DumperBase.warn("TARGET: %s" % self.target) + self.process = self.target.Launch(launchInfo, error) + DumperBase.warn("PROCESS: %s" % self.process) if not error.Success(): self.report(self.describeError(error)) diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp index 9189ea7e3c..dc4c855c26 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp @@ -1622,10 +1622,15 @@ void ModelManagerInterface::resetCodeModel() // reset the snapshot m_validSnapshot = Snapshot(); m_newestSnapshot = Snapshot(); + m_scannedPaths.clear(); } // start a reparse thread updateSourceFiles(documents, false); + + // rescan import directories + m_shouldScanImports = true; + updateImportPaths(); } } // namespace QmlJS diff --git a/src/plugins/cmakeprojectmanager/builddirparameters.cpp b/src/plugins/cmakeprojectmanager/builddirparameters.cpp index 82b4b91d22..5424ef8b9a 100644 --- a/src/plugins/cmakeprojectmanager/builddirparameters.cpp +++ b/src/plugins/cmakeprojectmanager/builddirparameters.cpp @@ -77,8 +77,11 @@ BuildDirParameters::BuildDirParameters(CMakeBuildConfiguration *bc) environment.set("ICECC", "no"); CMakeSpecificSettings *settings = CMakeProjectPlugin::projectTypeSpecificSettings(); - if (!settings->ninjaPath().isEmpty()) - environment.appendOrSetPath(settings->ninjaPath().toString()); + if (!settings->ninjaPath().isEmpty()) { + const Utils::FilePath setting = settings->ninjaPath(); + const Utils::FilePath path = setting.toFileInfo().isFile() ? setting.parentDir() : setting; + environment.appendOrSetPath(path.toString()); + } cmakeToolId = CMakeKitAspect::cmakeToolId(k); } diff --git a/src/plugins/mcusupport/mcusupport_global.h b/src/plugins/mcusupport/mcusupport_global.h index 3039bf660b..a436f3cf0d 100644 --- a/src/plugins/mcusupport/mcusupport_global.h +++ b/src/plugins/mcusupport/mcusupport_global.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportconstants.h b/src/plugins/mcusupport/mcusupportconstants.h index 3d223f4809..1b1aa7a135 100644 --- a/src/plugins/mcusupport/mcusupportconstants.h +++ b/src/plugins/mcusupport/mcusupportconstants.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportdevice.cpp b/src/plugins/mcusupport/mcusupportdevice.cpp index fff6c30749..a6cb55e483 100644 --- a/src/plugins/mcusupport/mcusupportdevice.cpp +++ b/src/plugins/mcusupport/mcusupportdevice.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportdevice.h b/src/plugins/mcusupport/mcusupportdevice.h index 6bbd764914..8aff134753 100644 --- a/src/plugins/mcusupport/mcusupportdevice.h +++ b/src/plugins/mcusupport/mcusupportdevice.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 6c2f24d5b0..7d58dbf466 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 BlackBerry Limited. All rights reserved. -** Contact: BlackBerry (qt@blackberry.com) +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** @@ -61,7 +61,7 @@ namespace McuSupport { namespace Internal { -static const int KIT_VERSION = 5; // Bumps up whenever details in Kit creation change +static const int KIT_VERSION = 6; // Bumps up whenever details in Kit creation change static QString packagePathFromSettings(const QString &settingsKey, QSettings::Scope scope = QSettings::UserScope, @@ -95,6 +95,11 @@ QString McuPackage::label() const return m_label; } +QString McuPackage::defaultPath() const +{ + return m_defaultPath; +} + QString McuPackage::detectionPath() const { return m_detectionPath; @@ -331,10 +336,12 @@ QVariant McuToolChainPackage::debuggerId() const return debuggerId; } -McuTarget::McuTarget(const QString &vendor, const QString &platform, OS os, +McuTarget::McuTarget(const QVersionNumber &qulVersion, const QString &vendor, + const QString &platform, OS os, const QVector<McuPackage *> &packages, const McuToolChainPackage *toolChainPackage) - : m_vendor(vendor) + : m_qulVersion(qulVersion) + , m_vendor(vendor) , m_qulPlatform(platform) , m_os(os) , m_packages(packages) @@ -374,6 +381,11 @@ bool McuTarget::isValid() const }); } +QVersionNumber McuTarget::qulVersion() const +{ + return m_qulVersion; +} + int McuTarget::colorDepth() const { return m_colorDepth; @@ -450,9 +462,9 @@ void McuSupportOptions::deletePackagesAndTargets() mcuTargets.clear(); } -const QVersionNumber &McuSupportOptions::supportedQulVersion() +const QVersionNumber &McuSupportOptions::minimalQulVersion() { - static const QVersionNumber v({1, 2}); + static const QVersionNumber v({1, 3}); return v; } @@ -493,7 +505,7 @@ static void setKitProperties(const QString &kitName, ProjectExplorer::Kit *k, k->setValue(KIT_MCUTARGET_VENDOR_KEY, mcuTarget->vendor()); k->setValue(KIT_MCUTARGET_MODEL_KEY, mcuTarget->qulPlatform()); k->setValue(KIT_MCUTARGET_COLORDEPTH_KEY, mcuTarget->colorDepth()); - k->setValue(KIT_MCUTARGET_SDKVERSION_KEY, McuSupportOptions::supportedQulVersion().toString()); + k->setValue(KIT_MCUTARGET_SDKVERSION_KEY, mcuTarget->qulVersion().toString()); k->setValue(KIT_MCUTARGET_KITVERSION_KEY, KIT_VERSION); k->setValue(KIT_MCUTARGET_OS_KEY, static_cast<int>(mcuTarget->os())); k->setAutoDetected(true); @@ -626,7 +638,7 @@ QString McuSupportOptions::kitName(const McuTarget *mcuTarget) ? "Desktop" : mcuTarget->qulPlatform(); return QString::fromLatin1("Qt for MCUs %1 - %2%3%4") - .arg(supportedQulVersion().toString(), targetName, os, colorDepth); + .arg(mcuTarget->qulVersion().toString(), targetName, os, colorDepth); } QList<ProjectExplorer::Kit *> McuSupportOptions::existingKits(const McuTarget *mcuTarget) @@ -636,8 +648,6 @@ QList<ProjectExplorer::Kit *> McuSupportOptions::existingKits(const McuTarget *m return Utils::filtered(KitManager::kits(), [mcuTarget](Kit *kit) { return kit->isAutoDetected() && kit->value(KIT_MCUTARGET_KITVERSION_KEY) == KIT_VERSION - && kit->value(KIT_MCUTARGET_SDKVERSION_KEY) == - McuSupportOptions::supportedQulVersion().toString() && (!mcuTarget || ( kit->value(KIT_MCUTARGET_VENDOR_KEY) == mcuTarget->vendor() && kit->value(KIT_MCUTARGET_MODEL_KEY) == mcuTarget->qulPlatform() diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index 64a0dda1e2..f8a9ac52bf 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 BlackBerry Limited. All rights reserved. -** Contact: BlackBerry (qt@blackberry.com) +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** @@ -64,6 +64,7 @@ public: QString path() const; QString label() const; + QString defaultPath() const; QString detectionPath() const; Status status() const; void setDownloadUrl(const QString &url); @@ -135,9 +136,11 @@ public: FreeRTOS }; - McuTarget(const QString &vendor, const QString &platform, OS os, - const QVector<McuPackage *> &packages, const McuToolChainPackage *toolChainPackage); + McuTarget(const QVersionNumber &qulVersion, const QString &vendor, const QString &platform, + OS os, const QVector<McuPackage *> &packages, + const McuToolChainPackage *toolChainPackage); + QVersionNumber qulVersion() const; QString vendor() const; QVector<McuPackage *> packages() const; const McuToolChainPackage *toolChainPackage() const; @@ -148,6 +151,7 @@ public: bool isValid() const; private: + const QVersionNumber m_qulVersion; const QString m_vendor; const QString m_qulPlatform; const OS m_os = OS::BareMetal; @@ -181,7 +185,7 @@ public: static void registerQchFiles(); static void registerExamples(); - static const QVersionNumber &supportedQulVersion(); + static const QVersionNumber &minimalQulVersion(); private: void deletePackagesAndTargets(); diff --git a/src/plugins/mcusupport/mcusupportoptionspage.cpp b/src/plugins/mcusupport/mcusupportoptionspage.cpp index 216746d578..ba8905e72a 100644 --- a/src/plugins/mcusupport/mcusupportoptionspage.cpp +++ b/src/plugins/mcusupport/mcusupportoptionspage.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 BlackBerry Limited. All rights reserved. -** Contact: BlackBerry (qt@blackberry.com) +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** diff --git a/src/plugins/mcusupport/mcusupportoptionspage.h b/src/plugins/mcusupport/mcusupportoptionspage.h index fdd5a1c586..c7b2db6150 100644 --- a/src/plugins/mcusupport/mcusupportoptionspage.h +++ b/src/plugins/mcusupport/mcusupportoptionspage.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 BlackBerry Limited. All rights reserved. -** Contact: BlackBerry (qt@blackberry.com) +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** diff --git a/src/plugins/mcusupport/mcusupportplugin.cpp b/src/plugins/mcusupport/mcusupportplugin.cpp index ea2ea3b826..5355790a2b 100644 --- a/src/plugins/mcusupport/mcusupportplugin.cpp +++ b/src/plugins/mcusupport/mcusupportplugin.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportplugin.h b/src/plugins/mcusupport/mcusupportplugin.h index 2f7c24e605..d3a1d8779a 100644 --- a/src/plugins/mcusupport/mcusupportplugin.h +++ b/src/plugins/mcusupport/mcusupportplugin.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportrunconfiguration.cpp b/src/plugins/mcusupport/mcusupportrunconfiguration.cpp index 584e21d4f7..63676469b8 100644 --- a/src/plugins/mcusupport/mcusupportrunconfiguration.cpp +++ b/src/plugins/mcusupport/mcusupportrunconfiguration.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportrunconfiguration.h b/src/plugins/mcusupport/mcusupportrunconfiguration.h index 3b0a138e0a..3561306457 100644 --- a/src/plugins/mcusupport/mcusupportrunconfiguration.h +++ b/src/plugins/mcusupport/mcusupportrunconfiguration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index 7ea24c2548..e72760151e 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 BlackBerry Limited. All rights reserved. -** Contact: BlackBerry (qt@blackberry.com) +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** @@ -59,8 +59,8 @@ static QString findInProgramFiles(const QString &folder) McuPackage *createQtForMCUsPackage() { auto result = new McuPackage( - McuPackage::tr("Qt for MCUs %1 SDK").arg( - McuSupportOptions::supportedQulVersion().toString()), + McuPackage::tr("Qt for MCUs %1+ SDK").arg( + McuSupportOptions::minimalQulVersion().toString()), QDir::homePath(), Utils::HostOsInfo::withExecutableSuffix("bin/qmltocpp"), Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK); @@ -202,15 +202,37 @@ static McuPackage *createMcuXpressoIdePackage() return result; } -static McuPackage *createFreeRTOSSourcesPackage(const QString &envVar) +static McuPackage *createBoardSdkPackage(const QString &envVar) { - const QString envVarPrefix = envVar.chopped(strlen("_FREERTOS_DIR")); + const QString envVarPrefix = envVar.chopped(strlen("_SDK_PATH")); const QString defaultPath = qEnvironmentVariableIsSet(envVar.toLatin1()) ? qEnvironmentVariable(envVar.toLatin1()) : QDir::homePath(); auto result = new McuPackage( + QString::fromLatin1("MCU SDK (%1)").arg(envVarPrefix), + defaultPath, + {}, + envVar); + result->setEnvironmentVariableName(envVar); + return result; +} + +static McuPackage *createFreeRTOSSourcesPackage(const QString &envVar, const QString &boardSdkDir, + const QString &freeRTOSBoardSdkSubDir) +{ + const QString envVarPrefix = envVar.chopped(strlen("_FREERTOS_DIR")); + + QString defaultPath; + if (qEnvironmentVariableIsSet(envVar.toLatin1())) + defaultPath = qEnvironmentVariable(envVar.toLatin1()); + else if (!boardSdkDir.isEmpty() && !freeRTOSBoardSdkSubDir.isEmpty()) + defaultPath = boardSdkDir + "/" + freeRTOSBoardSdkSubDir; + else + defaultPath = QDir::homePath(); + + auto result = new McuPackage( QString::fromLatin1("FreeRTOS Sources (%1)").arg(envVarPrefix), defaultPath, {}, @@ -229,6 +251,7 @@ struct McuTargetDescription QString toolchainId; QString boardSdkEnvVar; QString freeRTOSEnvVar; + QString freeRTOSBoardSdkSubDir; }; static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescription> &descriptions, @@ -246,13 +269,15 @@ static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescrip {{"Renesas"}, createRGLPackage()} }; + QHash<QString, McuPackage *> boardSdkPkgs; QHash<QString, McuPackage *> freeRTOSPkgs; QVector<McuTarget *> mcuTargets; for (const auto &desc : descriptions) { McuToolChainPackage *tcPkg = tcPkgs.value(desc.toolchainId); if (desc.toolchainId == "desktop") { - auto mcuTarget = new McuTarget(desc.platformVendor, desc.platform, + auto mcuTarget = new McuTarget(QVersionNumber::fromString(desc.qulVersion), + desc.platformVendor, desc.platform, McuTarget::OS::Desktop, {}, tcPkg); mcuTargets.append(mcuTarget); continue; @@ -262,19 +287,32 @@ static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescrip QVector<McuPackage*> required3rdPartyPkgs = { vendorPkgs.value(desc.platformVendor), tcPkg }; + QString boardSdkDefaultPath; + if (!desc.boardSdkEnvVar.isEmpty() + && desc.boardSdkEnvVar != "RGL_DIR") { // Already included in vendorPkgs + if (!boardSdkPkgs.contains(desc.boardSdkEnvVar)) { + auto boardSdkPkg = createBoardSdkPackage(desc.boardSdkEnvVar); + boardSdkPkgs.insert(desc.boardSdkEnvVar, boardSdkPkg); + } + auto boardSdkPkg = boardSdkPkgs.value(desc.boardSdkEnvVar); + boardSdkDefaultPath = boardSdkPkg->defaultPath(); + required3rdPartyPkgs.append(boardSdkPkg); + } if (os == McuTarget::OS::FreeRTOS) { if (desc.freeRTOSEnvVar.isEmpty()) { continue; } else { if (!freeRTOSPkgs.contains(desc.freeRTOSEnvVar)) { - auto freeRTOSPkg = createFreeRTOSSourcesPackage(desc.freeRTOSEnvVar); - freeRTOSPkgs.insert(desc.freeRTOSEnvVar, freeRTOSPkg); + freeRTOSPkgs.insert(desc.freeRTOSEnvVar, createFreeRTOSSourcesPackage( + desc.freeRTOSEnvVar, boardSdkDefaultPath, + desc.freeRTOSBoardSdkSubDir)); } required3rdPartyPkgs.append(freeRTOSPkgs.value(desc.freeRTOSEnvVar)); } } - auto mcuTarget = new McuTarget(desc.platformVendor, desc.platform, os, + auto mcuTarget = new McuTarget(QVersionNumber::fromString(desc.qulVersion), + desc.platformVendor, desc.platform, os, required3rdPartyPkgs, tcPkg); if (desc.colorDepths.count() > 1) mcuTarget->setColorDepth(colorDepth); @@ -286,6 +324,7 @@ static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescrip packages->append(Utils::transform<QVector<McuPackage *> >( tcPkgs.values(), [&](McuToolChainPackage *tcPkg) { return tcPkg; })); packages->append(vendorPkgs.values().toVector()); + packages->append(boardSdkPkgs.values().toVector()); packages->append(freeRTOSPkgs.values().toVector()); return mcuTargets; @@ -297,24 +336,13 @@ static QFileInfoList targetDescriptionFiles(const Utils::FilePath &dir) return kitsDir.entryInfoList(); } -static QString freeRTOSEnvVarForPlatform(const QString &platform) -{ - if (platform == "STM32F769I-DISCOVERY" || platform == "STM32F7508-DISCOVERY") - return {"STM32F7_FREERTOS_DIR"}; - else if (platform == "MIMXRT1050-EVK") - return {"IMXRT1050_FREERTOS_DIR"}; - else if (platform == "MIMXRT1064-EVK") - return {"IMXRT1064_FREERTOS_DIR"}; - - return {}; -} - static McuTargetDescription parseDescriptionJson(const QByteArray &data) { const QJsonDocument document = QJsonDocument::fromJson(data); const QJsonObject target = document.object(); const QJsonObject toolchain = target.value("toolchain").toObject(); const QJsonObject boardSdk = target.value("boardSdk").toObject(); + const QJsonObject freeRTOS = target.value("freeRTOS").toObject(); const QString platform = target.value("platform").toString(); @@ -328,8 +356,9 @@ static McuTargetDescription parseDescriptionJson(const QByteArray &data) target.value("platformVendor").toString(), colorDepthsVector, toolchain.value("id").toString(), - boardSdk.value("boardSdkEnvVar").toString(), - freeRTOSEnvVarForPlatform(platform) // Workaround for UL-2514: Missing FreeRTOS information + boardSdk.value("envVar").toString(), + freeRTOS.value("envVar").toString(), + freeRTOS.value("boardSdkSubDir").toString() }; } @@ -343,16 +372,17 @@ void targetsAndPackages(const Utils::FilePath &dir, QVector<McuPackage *> *packa if (!file.open(QFile::ReadOnly)) continue; const McuTargetDescription desc = parseDescriptionJson(file.readAll()); - if (!McuSupportOptions::supportedQulVersion() - .isPrefixOf(QVersionNumber::fromString(desc.qulVersion))) + if (QVersionNumber::fromString(desc.qulVersion) < McuSupportOptions::minimalQulVersion()) return; // Invalid version means invalid SDK installation. descriptions.append(desc); } // Workaround for missing JSON file for Desktop target: if (dir.pathAppended("/lib/QulQuickUltralite_QT_32bpp_Windows_Release.lib").exists()) { - descriptions.prepend({McuSupportOptions::supportedQulVersion().toString(), - {"Qt"}, {"Qt"}, {32}, {"desktop"}, {}, {}}); + const QString qulVersion = descriptions.empty() ? + McuSupportOptions::minimalQulVersion().toString() + : descriptions.first().qulVersion; + descriptions.prepend({qulVersion, {"Qt"}, {"Qt"}, {32}, {"desktop"}, {}, {}, {}}); } mcuTargets->append(targetsFromDescriptions(descriptions, packages)); diff --git a/src/plugins/mcusupport/mcusupportsdk.h b/src/plugins/mcusupport/mcusupportsdk.h index 1cc2adadc7..d9111fc584 100644 --- a/src/plugins/mcusupport/mcusupportsdk.h +++ b/src/plugins/mcusupport/mcusupportsdk.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 BlackBerry Limited. All rights reserved. -** Contact: BlackBerry (qt@blackberry.com) +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** diff --git a/tests/system/suite_HELP/tst_HELP02/test.py b/tests/system/suite_HELP/tst_HELP02/test.py index 2eb09773b1..1d776689be 100755 --- a/tests/system/suite_HELP/tst_HELP02/test.py +++ b/tests/system/suite_HELP/tst_HELP02/test.py @@ -78,6 +78,7 @@ def setKeyboardShortcutForAboutQtC(): modelIndex = waitForObject("{column='0' text='AboutQtCreator' type='QModelIndex' " "container={column='0' text='QtCreator' type='QModelIndex' " "container=%s}}" % objectMap.realName(treewidget)) + treewidget.scrollTo(modelIndex) mouseClick(modelIndex) shortcutGB = "{title='Shortcut' type='QGroupBox' unnamed='1' visible='1'}" record = waitForObject("{container=%s type='Core::Internal::ShortcutButton' unnamed='1' " diff --git a/tests/system/suite_tools/tst_git_clone/test.py b/tests/system/suite_tools/tst_git_clone/test.py index 476c1be365..35266deb8f 100644 --- a/tests/system/suite_tools/tst_git_clone/test.py +++ b/tests/system/suite_tools/tst_git_clone/test.py @@ -130,5 +130,5 @@ def main(): test.fail("The checked out project was not being opened.", str(waitForObject(":Cannot Open Project_QTextEdit").plainText)) clickButton(waitForObject(":Cannot Open Project.OK_QPushButton")) - verifyVersionControlView(targetDir, button == "Cancel immediately") + verifyVersionControlView(targetDir, button != ":Git Repository Clone.Finish_QPushButton") invokeMenuItem("File", "Exit") |