MCU: Use qtcEnvironmentVariable* instead of qEnvironmentVariable*

And instead of qgetenv.
Takes Qt Creator's setting at "Environment > System > Environment" into
account, which makes it easier on some platforms to set them (e.g.
macOS), can be configured differently in different settings paths, and
potentially can be changed at runtime (depending on usage).

Change-Id: Ib644dd6178bf9e0a1a75a2c6cf49fd5f3d121cf4
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Piotr Mućko <piotr.mucko@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Eike Ziller
2022-08-24 14:57:06 +02:00
parent 27c8e2a638
commit c79d4bd606
3 changed files with 25 additions and 23 deletions

View File

@@ -15,6 +15,7 @@
#include <projectexplorer/toolchain.h> #include <projectexplorer/toolchain.h>
#include <projectexplorer/toolchainmanager.h> #include <projectexplorer/toolchainmanager.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/environment.h>
#include <utils/infolabel.h> #include <utils/infolabel.h>
#include <utils/pathchooser.h> #include <utils/pathchooser.h>
#include <utils/utilsicons.h> #include <utils/utilsicons.h>
@@ -53,8 +54,7 @@ McuPackage::McuPackage(const SettingsHandler::Ptr &settingsHandler,
, m_downloadUrl(downloadUrl) , m_downloadUrl(downloadUrl)
, m_addToSystemPath(addToSystemPath) , m_addToSystemPath(addToSystemPath)
{ {
m_path = FilePath::fromUserInput( m_path = FilePath::fromUserInput(qtcEnvironmentVariable(m_environmentVariableName));
qEnvironmentVariable(m_environmentVariableName.toStdString().c_str()));
if (!m_path.exists()) { if (!m_path.exists()) {
m_path = this->settingsHandler->getPath(settingsKey, QSettings::UserScope, m_defaultPath); m_path = this->settingsHandler->getPath(settingsKey, QSettings::UserScope, m_defaultPath);
} }

View File

@@ -21,6 +21,7 @@
#include <projectexplorer/toolchain.h> #include <projectexplorer/toolchain.h>
#include <projectexplorer/toolchainmanager.h> #include <projectexplorer/toolchainmanager.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/environment.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/hostosinfo.h> #include <utils/hostosinfo.h>
@@ -60,10 +61,10 @@ namespace Legacy {
static FilePath findInProgramFiles(const QString &folder) static FilePath findInProgramFiles(const QString &folder)
{ {
for (auto envVar : {"ProgramFiles", "ProgramFiles(x86)", "ProgramW6432"}) { for (const auto &envVar : QStringList{"ProgramFiles", "ProgramFiles(x86)", "ProgramW6432"}) {
if (!qEnvironmentVariableIsSet(envVar)) if (!qtcEnvironmentVariableIsSet(envVar))
continue; continue;
const FilePath dir = FilePath::fromUserInput(qEnvironmentVariable(envVar)) / folder; const FilePath dir = FilePath::fromUserInput(qtcEnvironmentVariable(envVar)) / folder;
if (dir.exists()) if (dir.exists())
return dir; return dir;
} }
@@ -101,9 +102,9 @@ McuPackagePtr createBoardSdkPackage(const SettingsHandler::Ptr &settingsHandler,
const QString sdkName = generateSdkName(desc.boardSdk.envVar); const QString sdkName = generateSdkName(desc.boardSdk.envVar);
const FilePath defaultPath = [&] { const FilePath defaultPath = [&] {
const auto envVar = desc.boardSdk.envVar.toLatin1(); const auto envVar = desc.boardSdk.envVar;
if (qEnvironmentVariableIsSet(envVar)) if (qtcEnvironmentVariableIsSet(envVar))
return FilePath::fromUserInput(qEnvironmentVariable(envVar)); return FilePath::fromUserInput(qtcEnvironmentVariable(envVar));
if (!desc.boardSdk.defaultPath.isEmpty()) { if (!desc.boardSdk.defaultPath.isEmpty()) {
FilePath defaultPath = FilePath::fromUserInput(QDir::rootPath() FilePath defaultPath = FilePath::fromUserInput(QDir::rootPath()
+ desc.boardSdk.defaultPath.toString()); + desc.boardSdk.defaultPath.toString());
@@ -134,8 +135,8 @@ McuPackagePtr createFreeRTOSSourcesPackage(const SettingsHandler::Ptr &settingsH
const QString envVarPrefix = removeRtosSuffix(envVar); const QString envVarPrefix = removeRtosSuffix(envVar);
FilePath defaultPath; FilePath defaultPath;
if (qEnvironmentVariableIsSet(envVar.toLatin1())) if (qtcEnvironmentVariableIsSet(envVar))
defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar.toLatin1())); defaultPath = FilePath::fromUserInput(qtcEnvironmentVariable(envVar));
else if (!boardSdkDir.isEmpty()) else if (!boardSdkDir.isEmpty())
defaultPath = boardSdkDir; defaultPath = boardSdkDir;
@@ -239,8 +240,8 @@ McuToolChainPackagePtr createArmGccToolchainPackage(const SettingsHandler::Ptr &
const char envVar[] = "ARMGCC_DIR"; const char envVar[] = "ARMGCC_DIR";
FilePath defaultPath; FilePath defaultPath;
if (qEnvironmentVariableIsSet(envVar)) if (qtcEnvironmentVariableIsSet(envVar))
defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar)); defaultPath = FilePath::fromUserInput(qtcEnvironmentVariable(envVar));
if (defaultPath.isEmpty() && HostOsInfo::isWindowsHost()) { if (defaultPath.isEmpty() && HostOsInfo::isWindowsHost()) {
const FilePath installDir = findInProgramFiles("GNU Tools ARM Embedded"); const FilePath installDir = findInProgramFiles("GNU Tools ARM Embedded");
if (installDir.exists()) { if (installDir.exists()) {
@@ -275,7 +276,7 @@ McuToolChainPackagePtr createGhsToolchainPackage(const SettingsHandler::Ptr &set
{ {
const char envVar[] = "GHS_COMPILER_DIR"; const char envVar[] = "GHS_COMPILER_DIR";
const FilePath defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar)); const FilePath defaultPath = FilePath::fromUserInput(qtcEnvironmentVariable(envVar));
const auto versionDetector const auto versionDetector
= new McuPackageExecutableVersionDetector(FilePath("as850").withExecutableSuffix(), = new McuPackageExecutableVersionDetector(FilePath("as850").withExecutableSuffix(),
@@ -300,7 +301,7 @@ McuToolChainPackagePtr createGhsArmToolchainPackage(const SettingsHandler::Ptr &
{ {
const char envVar[] = "GHS_ARM_COMPILER_DIR"; const char envVar[] = "GHS_ARM_COMPILER_DIR";
const FilePath defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar)); const FilePath defaultPath = FilePath::fromUserInput(qtcEnvironmentVariable(envVar));
const auto versionDetector const auto versionDetector
= new McuPackageExecutableVersionDetector(FilePath("asarm").withExecutableSuffix(), = new McuPackageExecutableVersionDetector(FilePath("asarm").withExecutableSuffix(),
@@ -326,8 +327,8 @@ McuToolChainPackagePtr createIarToolChainPackage(const SettingsHandler::Ptr &set
const char envVar[] = "IAR_ARM_COMPILER_DIR"; const char envVar[] = "IAR_ARM_COMPILER_DIR";
FilePath defaultPath; FilePath defaultPath;
if (qEnvironmentVariableIsSet(envVar)) if (qtcEnvironmentVariableIsSet(envVar))
defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar)); defaultPath = FilePath::fromUserInput(qtcEnvironmentVariable(envVar));
else { else {
const ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainManager::toolChain( const ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainManager::toolChain(
[](const ProjectExplorer::ToolChain *t) { [](const ProjectExplorer::ToolChain *t) {
@@ -397,8 +398,8 @@ McuPackagePtr createMcuXpressoIdePackage(const SettingsHandler::Ptr &settingsHan
const char envVar[] = "MCUXpressoIDE_PATH"; const char envVar[] = "MCUXpressoIDE_PATH";
FilePath defaultPath; FilePath defaultPath;
if (qEnvironmentVariableIsSet(envVar)) { if (qtcEnvironmentVariableIsSet(envVar)) {
defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar)); defaultPath = FilePath::fromUserInput(qtcEnvironmentVariable(envVar));
} else if (HostOsInfo::isWindowsHost()) { } else if (HostOsInfo::isWindowsHost()) {
const FilePath programPath = FilePath::fromString(QDir::rootPath()) / "nxp"; const FilePath programPath = FilePath::fromString(QDir::rootPath()) / "nxp";
if (programPath.exists()) { if (programPath.exists()) {
@@ -432,8 +433,8 @@ McuPackagePtr createCypressProgrammerPackage(const SettingsHandler::Ptr &setting
const char envVar[] = "CYPRESS_AUTO_FLASH_UTILITY_DIR"; const char envVar[] = "CYPRESS_AUTO_FLASH_UTILITY_DIR";
FilePath defaultPath; FilePath defaultPath;
if (qEnvironmentVariableIsSet(envVar)) { if (qtcEnvironmentVariableIsSet(envVar)) {
defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar)); defaultPath = FilePath::fromUserInput(qtcEnvironmentVariable(envVar));
} else if (HostOsInfo::isWindowsHost()) { } else if (HostOsInfo::isWindowsHost()) {
const FilePath candidate = findInProgramFiles("Cypress"); const FilePath candidate = findInProgramFiles("Cypress");
if (candidate.exists()) { if (candidate.exists()) {
@@ -460,8 +461,8 @@ McuPackagePtr createRenesasProgrammerPackage(const SettingsHandler::Ptr &setting
const char envVar[] = "RENESAS_FLASH_PROGRAMMER_PATH"; const char envVar[] = "RENESAS_FLASH_PROGRAMMER_PATH";
FilePath defaultPath; FilePath defaultPath;
if (qEnvironmentVariableIsSet(envVar)) { if (qtcEnvironmentVariableIsSet(envVar)) {
defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar)); defaultPath = FilePath::fromUserInput(qtcEnvironmentVariable(envVar));
} else if (HostOsInfo::isWindowsHost()) { } else if (HostOsInfo::isWindowsHost()) {
const FilePath candidate = findInProgramFiles("Renesas Electronics/Programming Tools"); const FilePath candidate = findInProgramFiles("Renesas Electronics/Programming Tools");
if (candidate.exists()) { if (candidate.exists()) {

View File

@@ -38,6 +38,7 @@
#include <projectexplorer/toolchainmanager.h> #include <projectexplorer/toolchainmanager.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/environment.h>
#include <utils/filepath.h> #include <utils/filepath.h>
#include <QJsonArray> #include <QJsonArray>
@@ -1226,7 +1227,7 @@ void McuSupportTest::test_passDirectoryVersionDetectorToRenesasBoardSdkPackage()
void McuSupportTest::test_resolveEnvironmentVariablesInDefaultPath() void McuSupportTest::test_resolveEnvironmentVariablesInDefaultPath()
{ {
QVERIFY(qputenv(QUL_ENV_VAR, qtForMcuSdkPath)); QVERIFY(qputenv(QUL_ENV_VAR, qtForMcuSdkPath));
QCOMPARE(qEnvironmentVariable(QUL_ENV_VAR), qtForMcuSdkPath); QCOMPARE(qtcEnvironmentVariable(QUL_ENV_VAR), qtForMcuSdkPath);
const QString qulEnvVariable = QString("%{Env:") + QUL_ENV_VAR + "}"; const QString qulEnvVariable = QString("%{Env:") + QUL_ENV_VAR + "}";
toochainFileDescription.defaultPath = FilePath::fromUserInput( toochainFileDescription.defaultPath = FilePath::fromUserInput(