aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qbsprojectmanager
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qbsprojectmanager')
-rw-r--r--src/plugins/qbsprojectmanager/CMakeLists.txt38
-rw-r--r--src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp233
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp134
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.h12
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.cpp109
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.h66
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.cpp43
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.h2
-rw-r--r--src/plugins/qbsprojectmanager/qbscleanstep.cpp2
-rw-r--r--src/plugins/qbsprojectmanager/qbsinstallstep.cpp2
-rw-r--r--src/plugins/qbsprojectmanager/qbskitinformation.cpp49
-rw-r--r--src/plugins/qbsprojectmanager/qbskitinformation.h10
-rw-r--r--src/plugins/qbsprojectmanager/qbslogsink.cpp2
-rw-r--r--src/plugins/qbsprojectmanager/qbsnodes.cpp103
-rw-r--r--src/plugins/qbsprojectmanager/qbsnodes.h51
-rw-r--r--src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp135
-rw-r--r--src/plugins/qbsprojectmanager/qbsparser.cpp2
-rw-r--r--src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp2
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp57
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.h8
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectimporter.cpp43
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectimporter.h4
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanager.cpp2
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanager.pro2
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanager.qbs2
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h1
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp131
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.h7
-rw-r--r--src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp66
-rw-r--r--src/plugins/qbsprojectmanager/qbsrunconfiguration.h8
30 files changed, 508 insertions, 818 deletions
diff --git a/src/plugins/qbsprojectmanager/CMakeLists.txt b/src/plugins/qbsprojectmanager/CMakeLists.txt
new file mode 100644
index 00000000000..e02a516f1a9
--- /dev/null
+++ b/src/plugins/qbsprojectmanager/CMakeLists.txt
@@ -0,0 +1,38 @@
+find_package(Qbs)
+
+add_qtc_plugin(QbsProjectManager
+ CONDITION TARGET Qbs::QbsCore
+ DEPENDS Qbs::QbsCore Qt5::Widgets qmljs
+ DEFINES
+ QBS_INSTALL_DIR="${QBS_INSTALL_DIR}"
+ IDE_LIBRARY_BASENAME="${IDE_LIBRARY_BASE_PATH}"
+ PLUGIN_DEPENDS Core ProjectExplorer CppTools QtSupport QmlJSTools
+ SOURCES
+ customqbspropertiesdialog.cpp customqbspropertiesdialog.h customqbspropertiesdialog.ui
+ defaultpropertyprovider.cpp defaultpropertyprovider.h
+ propertyprovider.h
+ qbsbuildconfiguration.cpp qbsbuildconfiguration.h
+ qbsbuildstep.cpp qbsbuildstep.h
+ qbsbuildstepconfigwidget.ui
+ qbscleanstep.cpp qbscleanstep.h
+ qbscleanstepconfigwidget.ui
+ qbsinstallstep.cpp qbsinstallstep.h
+ qbsinstallstepconfigwidget.ui
+ qbskitinformation.cpp qbskitinformation.h
+ qbslogsink.cpp qbslogsink.h
+ qbsnodes.cpp qbsnodes.h
+ qbsnodetreebuilder.cpp qbsnodetreebuilder.h
+ qbsparser.cpp qbsparser.h
+ qbspmlogging.cpp qbspmlogging.h
+ qbsprofilessettingspage.cpp qbsprofilessettingspage.h
+ qbsprofilessettingswidget.ui
+ qbsproject.cpp qbsproject.h
+ qbsprojectimporter.cpp qbsprojectimporter.h
+ qbsprojectmanager.cpp qbsprojectmanager.h qbsprojectmanager.qrc
+ qbsprojectmanager_global.h
+ qbsprojectmanagerconstants.h
+ qbsprojectmanagerplugin.cpp qbsprojectmanagerplugin.h
+ qbsprojectmanagersettings.cpp qbsprojectmanagersettings.h
+ qbsprojectparser.cpp qbsprojectparser.h
+ qbsrunconfiguration.cpp qbsrunconfiguration.h
+)
diff --git a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
index a014d7a758b..1444c3d98f7 100644
--- a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
+++ b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
@@ -29,18 +29,21 @@
#include "qbsprojectmanagerconstants.h"
#include <coreplugin/messagemanager.h>
+#include <baremetal/baremetalconstants.h>
#include <projectexplorer/abi.h>
#include <projectexplorer/gcctoolchain.h>
#include <projectexplorer/kit.h>
#include <projectexplorer/kitinformation.h>
#include <projectexplorer/toolchain.h>
#include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/msvctoolchain.h>
#include <utils/hostosinfo.h>
#include <utils/qtcassert.h>
#include <qbs.h>
+#include <android/androidconstants.h>
#include <ios/iosconstants.h>
#include <winrt/winrtconstants.h>
@@ -76,7 +79,7 @@ static QString extractToolchainPrefix(QString *compilerName)
static QString targetPlatform(const ProjectExplorer::Abi &abi, const ProjectExplorer::Kit *k)
{
- const Core::Id device = ProjectExplorer::DeviceTypeKitInformation::deviceTypeId(k);
+ const Core::Id device = ProjectExplorer::DeviceTypeKitAspect::deviceTypeId(k);
switch (abi.os()) {
case ProjectExplorer::Abi::WindowsOS:
return QLatin1String("windows");
@@ -122,14 +125,26 @@ static QString targetPlatform(const ProjectExplorer::Abi &abi, const ProjectExpl
static QStringList toolchainList(const ProjectExplorer::ToolChain *tc)
{
QStringList list;
- if (tc->typeId() == ProjectExplorer::Constants::CLANG_TOOLCHAIN_TYPEID)
+ if (tc->typeId() == ProjectExplorer::Constants::CLANG_TOOLCHAIN_TYPEID
+ || (tc->typeId() == Android::Constants::ANDROID_TOOLCHAIN_ID
+ && tc->compilerCommand().toString().contains("clang"))) {
list << QLatin1String("clang") << QLatin1String("llvm") << QLatin1String("gcc");
- else if (tc->typeId() == ProjectExplorer::Constants::GCC_TOOLCHAIN_TYPEID)
+ } else if (tc->typeId() == ProjectExplorer::Constants::GCC_TOOLCHAIN_TYPEID
+ || tc->typeId() == Android::Constants::ANDROID_TOOLCHAIN_ID) {
list << QLatin1String("gcc"); // TODO: Detect llvm-gcc
- else if (tc->typeId() == ProjectExplorer::Constants::MINGW_TOOLCHAIN_TYPEID)
+ } else if (tc->typeId() == ProjectExplorer::Constants::MINGW_TOOLCHAIN_TYPEID) {
list << QLatin1String("mingw") << QLatin1String("gcc");
- else if (tc->typeId() == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID)
+ } else if (tc->typeId() == ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID) {
+ list << QLatin1String("clang-cl") << QLatin1String("msvc");
+ } else if (tc->typeId() == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID) {
list << QLatin1String("msvc");
+ } else if (tc->typeId() == BareMetal::Constants::IAREW_TOOLCHAIN_TYPEID) {
+ list << QLatin1String("iar");
+ } else if (tc->typeId() == BareMetal::Constants::KEIL_TOOLCHAIN_TYPEID) {
+ list << QLatin1String("keil");
+ } else if (tc->typeId() == BareMetal::Constants::SDCC_TOOLCHAIN_TYPEID) {
+ list << QLatin1String("sdcc");
+ }
return list;
}
@@ -138,6 +153,22 @@ static QString architecture(const ProjectExplorer::Abi &targetAbi)
if (targetAbi.architecture() != ProjectExplorer::Abi::UnknownArchitecture) {
QString architecture = ProjectExplorer::Abi::toString(targetAbi.architecture());
+ if (targetAbi.osFlavor() == ProjectExplorer::Abi::AndroidLinuxFlavor) {
+ switch (targetAbi.architecture()) {
+ case ProjectExplorer::Abi::X86Architecture:
+ if (targetAbi.wordWidth() == 64)
+ architecture += "_64";
+ return architecture;
+ case ProjectExplorer::Abi::ArmArchitecture:
+ if (targetAbi.wordWidth() == 64)
+ architecture += "64";
+ else
+ architecture += "v7a";
+ return architecture;
+ default:
+ break;
+ }
+ }
// We have to be conservative tacking on suffixes to arch names because an arch that is
// already 64-bit may get an incorrect name as a result (i.e. Itanium)
if (targetAbi.wordWidth() == 64) {
@@ -195,7 +226,7 @@ QVariantMap DefaultPropertyProvider::properties(const ProjectExplorer::Kit *k,
{
QTC_ASSERT(k, return defaultData);
QVariantMap data = autoGeneratedProperties(k, defaultData);
- const QVariantMap customProperties = QbsKitInformation::properties(k);
+ const QVariantMap customProperties = QbsKitAspect::properties(k);
for (QVariantMap::ConstIterator it = customProperties.constBegin();
it != customProperties.constEnd(); ++it) {
data.insert(it.key(), it.value());
@@ -222,14 +253,14 @@ QVariantMap DefaultPropertyProvider::autoGeneratedProperties(const ProjectExplor
{
QVariantMap data = defaultData;
- const QString sysroot = ProjectExplorer::SysRootKitInformation::sysRoot(k).toUserOutput();
+ const QString sysroot = ProjectExplorer::SysRootKitAspect::sysRoot(k).toUserOutput();
if (!sysroot.isEmpty())
data.insert(QLatin1String(QBS_SYSROOT), sysroot);
ProjectExplorer::ToolChain *tcC
- = ProjectExplorer::ToolChainKitInformation::toolChain(k, ProjectExplorer::Constants::C_LANGUAGE_ID);
+ = ProjectExplorer::ToolChainKitAspect::toolChain(k, ProjectExplorer::Constants::C_LANGUAGE_ID);
ProjectExplorer::ToolChain *tcCxx
- = ProjectExplorer::ToolChainKitInformation::toolChain(k, ProjectExplorer::Constants::CXX_LANGUAGE_ID);
+ = ProjectExplorer::ToolChainKitAspect::toolChain(k, ProjectExplorer::Constants::CXX_LANGUAGE_ID);
if (!tcC && !tcCxx)
return data;
@@ -241,101 +272,119 @@ QVariantMap DefaultPropertyProvider::autoGeneratedProperties(const ProjectExplor
if (!archs.isEmpty())
data.insert(QLatin1String(QBS_ARCHITECTURES), archs);
if (mainTc->targetAbi() !=
- ProjectExplorer::Abi::abiFromTargetTriplet(mainTc->originalTargetTriple())) {
+ ProjectExplorer::Abi::abiFromTargetTriplet(mainTc->originalTargetTriple())
+ || targetAbi.osFlavor() == ProjectExplorer::Abi::AndroidLinuxFlavor) {
data.insert(QLatin1String(QBS_ARCHITECTURE), architecture(mainTc->targetAbi()));
}
data.insert(QLatin1String(QBS_TARGETPLATFORM), targetPlatform(targetAbi, k));
QStringList toolchain = toolchainList(mainTc);
-
- Utils::FileName cCompilerPath;
- if (tcC)
- cCompilerPath = tcC->compilerCommand();
-
- Utils::FileName cxxCompilerPath;
- if (tcCxx)
- cxxCompilerPath = tcCxx->compilerCommand();
-
- const QFileInfo cFileInfo = cCompilerPath.toFileInfo();
- const QFileInfo cxxFileInfo = cxxCompilerPath.toFileInfo();
- QString cCompilerName = cFileInfo.fileName();
- QString cxxCompilerName = cxxFileInfo.fileName();
- const QString cToolchainPrefix = extractToolchainPrefix(&cCompilerName);
- const QString cxxToolchainPrefix = extractToolchainPrefix(&cxxCompilerName);
-
- QFileInfo mainFileInfo;
- QString mainCompilerName;
- QString mainToolchainPrefix;
- if (tcCxx) {
- mainFileInfo = cxxFileInfo;
- mainCompilerName = cxxCompilerName;
- mainToolchainPrefix = cxxToolchainPrefix;
+ if (targetAbi.osFlavor() == ProjectExplorer::Abi::AndroidLinuxFlavor) {
+ const ProjectExplorer::IDevice::ConstPtr dev = ProjectExplorer::DeviceKitAspect::device(k);
+ if (dev) {
+ const QString sdkDir = k->value(Android::Constants::ANDROID_KIT_SDK).toString();
+ if (!sdkDir.isEmpty())
+ data.insert("Android.sdk.sdkDir", sdkDir);
+ const QString ndkDir = k->value(Android::Constants::ANDROID_KIT_NDK).toString();
+ if (!ndkDir.isEmpty()) {
+ data.insert("Android.sdk.ndkDir", ndkDir);
+ data.insert("Android.ndk.ndkDir", ndkDir);
+ }
+ }
} else {
- mainFileInfo = cFileInfo;
- mainCompilerName = cCompilerName;
- mainToolchainPrefix = cToolchainPrefix;
- }
+ Utils::FilePath cCompilerPath;
+ if (tcC)
+ cCompilerPath = tcC->compilerCommand();
+
+ Utils::FilePath cxxCompilerPath;
+ if (tcCxx)
+ cxxCompilerPath = tcCxx->compilerCommand();
+
+ const QFileInfo cFileInfo = cCompilerPath.toFileInfo();
+ const QFileInfo cxxFileInfo = cxxCompilerPath.toFileInfo();
+ QString cCompilerName = cFileInfo.fileName();
+ QString cxxCompilerName = cxxFileInfo.fileName();
+ const QString cToolchainPrefix = extractToolchainPrefix(&cCompilerName);
+ const QString cxxToolchainPrefix = extractToolchainPrefix(&cxxCompilerName);
+
+ QFileInfo mainFileInfo;
+ QString mainCompilerName;
+ QString mainToolchainPrefix;
+ if (tcCxx) {
+ mainFileInfo = cxxFileInfo;
+ mainCompilerName = cxxCompilerName;
+ mainToolchainPrefix = cxxToolchainPrefix;
+ } else {
+ mainFileInfo = cFileInfo;
+ mainCompilerName = cCompilerName;
+ mainToolchainPrefix = cToolchainPrefix;
+ }
- if (!mainToolchainPrefix.isEmpty())
- data.insert(QLatin1String(CPP_TOOLCHAINPREFIX), mainToolchainPrefix);
+ if (!mainToolchainPrefix.isEmpty())
+ data.insert(QLatin1String(CPP_TOOLCHAINPREFIX), mainToolchainPrefix);
- if (toolchain.contains(QLatin1String("msvc"))) {
- data.insert(QLatin1String(CPP_COMPILERNAME), mainCompilerName);
- } else {
- if (!mainCompilerName.isEmpty())
+ if (toolchain.contains(QLatin1String("clang-cl"))) {
data.insert(QLatin1String(CPP_COMPILERNAME), mainCompilerName);
- if (!cCompilerName.isEmpty())
- data.insert(QLatin1String(CPP_CCOMPILERNAME), cCompilerName);
- if (!cxxCompilerName.isEmpty())
- data.insert(QLatin1String(CPP_CXXCOMPILERNAME), cxxCompilerName);
- }
-
- if (tcC && tcCxx && cFileInfo.absolutePath() != cxxFileInfo.absolutePath()) {
- Core::MessageManager::write(tr("C and C++ compiler paths differ. C compiler may not work."),
- Core::MessageManager::ModeSwitch);
- }
- data.insert(QLatin1String(CPP_TOOLCHAINPATH), mainFileInfo.absolutePath());
+ const auto clangClToolchain =
+ static_cast<ProjectExplorer::Internal::ClangClToolChain *>(mainTc);
+ data.insert(QLatin1String(CPP_VCVARSALLPATH), clangClToolchain->varsBat());
+ } else if (toolchain.contains(QLatin1String("msvc"))) {
+ data.insert(QLatin1String(CPP_COMPILERNAME), mainCompilerName);
+ } else {
+ if (!mainCompilerName.isEmpty())
+ data.insert(QLatin1String(CPP_COMPILERNAME), mainCompilerName);
+ if (!cCompilerName.isEmpty())
+ data.insert(QLatin1String(CPP_CCOMPILERNAME), cCompilerName);
+ if (!cxxCompilerName.isEmpty())
+ data.insert(QLatin1String(CPP_CXXCOMPILERNAME), cxxCompilerName);
+ }
- if (auto gcc = dynamic_cast<ProjectExplorer::GccToolChain *>(mainTc)) {
- QStringList compilerFlags = gcc->platformCodeGenFlags();
- filterCompilerLinkerFlags(targetAbi, compilerFlags);
- data.insert(QLatin1String(CPP_PLATFORMCOMMONCOMPILERFLAGS), compilerFlags);
+ if (tcC && tcCxx && cFileInfo.absolutePath() != cxxFileInfo.absolutePath()) {
+ Core::MessageManager::write(tr("C and C++ compiler paths differ. C compiler may not work."),
+ Core::MessageManager::ModeSwitch);
+ }
+ data.insert(QLatin1String(CPP_TOOLCHAINPATH), mainFileInfo.absolutePath());
- QStringList linkerFlags = gcc->platformLinkerFlags();
- filterCompilerLinkerFlags(targetAbi, linkerFlags);
- data.insert(QLatin1String(CPP_PLATFORMLINKERFLAGS), linkerFlags);
- }
+ if (auto gcc = dynamic_cast<ProjectExplorer::GccToolChain *>(mainTc)) {
+ QStringList compilerFlags = gcc->platformCodeGenFlags();
+ filterCompilerLinkerFlags(targetAbi, compilerFlags);
+ data.insert(QLatin1String(CPP_PLATFORMCOMMONCOMPILERFLAGS), compilerFlags);
- if (targetAbi.os() == ProjectExplorer::Abi::DarwinOS) {
- // Reverse engineer the Xcode developer path from the compiler path
- const QRegularExpression compilerRe(
- QStringLiteral("^(?<developerpath>.*)/Toolchains/(?:.+)\\.xctoolchain/usr/bin$"));
- const QRegularExpressionMatch compilerReMatch = compilerRe.match(cxxFileInfo.absolutePath());
- if (compilerReMatch.hasMatch()) {
- const QString developerPath = compilerReMatch.captured(QStringLiteral("developerpath"));
- data.insert(QLatin1String(XCODE_DEVELOPERPATH), developerPath);
- toolchain.insert(0, QStringLiteral("xcode"));
-
- // If the sysroot is part of this developer path, set the canonical SDK name
- const QDir sysrootdir(QDir::cleanPath(sysroot));
- const QString sysrootAbs = sysrootdir.absolutePath();
- const QSettings sdkSettings(
- sysrootdir.absoluteFilePath(QStringLiteral("SDKSettings.plist")),
- QSettings::NativeFormat);
- const QString version(
- sdkSettings.value(QStringLiteral("Version")).toString());
- QString canonicalName(
- sdkSettings.value(QStringLiteral("CanonicalName")).toString());
- canonicalName.chop(version.size());
- if (!canonicalName.isEmpty() && !version.isEmpty()
- && sysrootAbs.startsWith(developerPath)) {
- if (sysrootAbs.endsWith(QStringLiteral("/%1.sdk").arg(canonicalName + version),
- Qt::CaseInsensitive)) {
- data.insert(QLatin1String(XCODE_SDK), QString(canonicalName + version));
- }
- if (sysrootAbs.endsWith(QStringLiteral("/%1.sdk").arg(canonicalName),
- Qt::CaseInsensitive)) {
- data.insert(QLatin1String(XCODE_SDK), canonicalName);
+ QStringList linkerFlags = gcc->platformLinkerFlags();
+ filterCompilerLinkerFlags(targetAbi, linkerFlags);
+ data.insert(QLatin1String(CPP_PLATFORMLINKERFLAGS), linkerFlags);
+ }
+ if (targetAbi.os() == ProjectExplorer::Abi::DarwinOS) {
+ // Reverse engineer the Xcode developer path from the compiler path
+ const QRegularExpression compilerRe(
+ QStringLiteral("^(?<developerpath>.*)/Toolchains/(?:.+)\\.xctoolchain/usr/bin$"));
+ const QRegularExpressionMatch compilerReMatch = compilerRe.match(cxxFileInfo.absolutePath());
+ if (compilerReMatch.hasMatch()) {
+ const QString developerPath = compilerReMatch.captured(QStringLiteral("developerpath"));
+ data.insert(QLatin1String(XCODE_DEVELOPERPATH), developerPath);
+ toolchain.insert(0, QStringLiteral("xcode"));
+
+ // If the sysroot is part of this developer path, set the canonical SDK name
+ const QDir sysrootdir(QDir::cleanPath(sysroot));
+ const QString sysrootAbs = sysrootdir.absolutePath();
+ const QSettings sdkSettings(
+ sysrootdir.absoluteFilePath(QStringLiteral("SDKSettings.plist")),
+ QSettings::NativeFormat);
+ const QString version(
+ sdkSettings.value(QStringLiteral("Version")).toString());
+ QString canonicalName(
+ sdkSettings.value(QStringLiteral("CanonicalName")).toString());
+ canonicalName.chop(version.size());
+ if (!canonicalName.isEmpty() && !version.isEmpty()
+ && sysrootAbs.startsWith(developerPath)) {
+ if (sysrootAbs.endsWith(QStringLiteral("/%1.sdk").arg(canonicalName + version),
+ Qt::CaseInsensitive)) {
+ data.insert(QLatin1String(XCODE_SDK), QString(canonicalName + version));
+ }
+ if (sysrootAbs.endsWith(QStringLiteral("/%1.sdk").arg(canonicalName),
+ Qt::CaseInsensitive)) {
+ data.insert(QLatin1String(XCODE_SDK), canonicalName);
+ }
}
}
}
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
index 43ac1608f6e..f3fd3d9f569 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
@@ -25,7 +25,6 @@
#include "qbsbuildconfiguration.h"
-#include "qbsbuildconfigurationwidget.h"
#include "qbsbuildstep.h"
#include "qbscleanstep.h"
#include "qbsinstallstep.h"
@@ -34,7 +33,6 @@
#include "qbsprojectmanagersettings.h"
#include <coreplugin/documentmanager.h>
-#include <coreplugin/icore.h>
#include <projectexplorer/buildinfo.h>
#include <projectexplorer/buildsteplist.h>
@@ -54,7 +52,6 @@
#include <utils/qtcprocess.h>
#include <QCoreApplication>
-#include <QInputDialog>
using namespace ProjectExplorer;
using namespace Utils;
@@ -62,17 +59,15 @@ using namespace Utils;
namespace QbsProjectManager {
namespace Internal {
-static QString configNameKey() { return QStringLiteral("Qbs.configName"); }
-
-static FileName defaultBuildDirectory(const QString &projectFilePath, const Kit *k,
+static FilePath defaultBuildDirectory(const QString &projectFilePath, const Kit *k,
const QString &bcName,
BuildConfiguration::BuildType buildType)
{
const QString projectName = QFileInfo(projectFilePath).completeBaseName();
ProjectMacroExpander expander(projectFilePath, projectName, k, bcName, buildType);
- QString projectDir = Project::projectDirectory(FileName::fromString(projectFilePath)).toString();
+ QString projectDir = Project::projectDirectory(FilePath::fromString(projectFilePath)).toString();
QString buildPath = expander.expand(ProjectExplorerPlugin::buildDirectoryTemplate());
- return FileName::fromString(FileUtils::resolvePath(projectDir, buildPath));
+ return FilePath::fromString(FileUtils::resolvePath(projectDir, buildPath));
}
// ---------------------------------------------------------------------------
@@ -82,6 +77,15 @@ static FileName defaultBuildDirectory(const QString &projectFilePath, const Kit
QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id)
: BuildConfiguration(target, id)
{
+ setConfigWidgetHasFrame(true);
+
+ m_configurationName = addAspect<BaseStringAspect>();
+ m_configurationName->setLabelText(tr("Configuration name:"));
+ m_configurationName->setSettingsKey("Qbs.configName");
+ m_configurationName->setDisplayStyle(BaseStringAspect::LineEditDisplay);
+ connect(m_configurationName, &BaseStringAspect::changed,
+ this, &BuildConfiguration::buildDirectoryChanged);
+
connect(project(), &Project::parsingStarted, this, &BuildConfiguration::enabledChanged);
connect(project(), &Project::parsingFinished, this, &BuildConfiguration::enabledChanged);
}
@@ -96,7 +100,7 @@ void QbsBuildConfiguration::initialize(const BuildInfo &info)
? QLatin1String(Constants::QBS_VARIANT_DEBUG)
: QLatin1String(Constants::QBS_VARIANT_RELEASE));
- Utils::FileName buildDir = info.buildDirectory;
+ Utils::FilePath buildDir = info.buildDirectory;
if (buildDir.isEmpty())
buildDir = defaultBuildDirectory(target()->project()->projectFilePath().toString(),
target()->kit(), info.displayName, info.buildType);
@@ -109,7 +113,8 @@ void QbsBuildConfiguration::initialize(const BuildInfo &info)
configName = "qtc_" + target()->kit()->fileSystemFriendlyName() + '_'
+ Utils::FileUtils::fileSystemFriendlyName(info.displayName);
}
- setConfigurationName(configName);
+
+ m_configurationName->setValue(configName);
BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
auto bs = new QbsBuildStep(buildSteps);
@@ -121,7 +126,6 @@ void QbsBuildConfiguration::initialize(const BuildInfo &info)
BuildStepList *cleanSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
cleanSteps->appendStep(new QbsCleanStep(cleanSteps));
- connect(bs, &QbsBuildStep::qbsConfigurationChanged, this, &QbsBuildConfiguration::qbsConfigurationChanged);
emit qbsConfigurationChanged();
}
@@ -130,36 +134,16 @@ bool QbsBuildConfiguration::fromMap(const QVariantMap &map)
if (!BuildConfiguration::fromMap(map))
return false;
- m_configurationName = map.value(configNameKey()).toString();
- if (m_configurationName.isEmpty()) { // pre-4.4 backwards compatibility
+ if (m_configurationName->value().isEmpty()) { // pre-4.4 backwards compatibility
const QString profileName = QbsManager::profileForKit(target()->kit());
const QString buildVariant = qbsConfiguration()
.value(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY)).toString();
- m_configurationName = profileName + QLatin1Char('-') + buildVariant;
- }
- BuildStepList *bsl = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
- // Fix up the existing build steps:
- for (int i = 0; i < bsl->count(); ++i) {
- auto bs = qobject_cast<QbsBuildStep *>(bsl->at(i));
- if (bs)
- connect(bs, &QbsBuildStep::qbsConfigurationChanged, this, &QbsBuildConfiguration::qbsConfigurationChanged);
+ m_configurationName->setValue(profileName + '-' + buildVariant);
}
return true;
}
-QVariantMap QbsBuildConfiguration::toMap() const
-{
- QVariantMap map = BuildConfiguration::toMap();
- map.insert(configNameKey(), m_configurationName);
- return map;
-}
-
-NamedWidget *QbsBuildConfiguration::createConfigWidget()
-{
- return new QbsBuildConfigurationWidget(this);
-}
-
QbsBuildStep *QbsBuildConfiguration::qbsStep() const
{
return stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD)->firstOfType<QbsBuildStep>();
@@ -236,22 +220,9 @@ QStringList QbsBuildConfiguration::products() const
return m_products;
}
-void QbsBuildConfiguration::emitBuildTypeChanged()
-{
- emit buildTypeChanged();
-}
-
-void QbsBuildConfiguration::setConfigurationName(const QString &configName)
-{
- if (m_configurationName == configName)
- return;
- m_configurationName = configName;
- emit buildDirectoryChanged();
-}
-
QString QbsBuildConfiguration::configurationName() const
{
- return m_configurationName;
+ return m_configurationName->value();
}
class StepProxy
@@ -312,7 +283,7 @@ public:
return m_qbsBuildStep ? m_qbsBuildStep->maxJobs() : 0;
}
- Utils::FileName installRoot() const {
+ Utils::FilePath installRoot() const {
const QbsBuildStep *bs = nullptr;
if (m_qbsBuildStep) {
bs = m_qbsBuildStep;
@@ -322,7 +293,7 @@ public:
}
if (bs && bs->hasCustomInstallRoot())
return bs->installRoot();
- return Utils::FileName();
+ return Utils::FilePath();
}
private:
@@ -333,60 +304,53 @@ private:
QString QbsBuildConfiguration::equivalentCommandLine(const BuildStep *buildStep) const
{
- QString commandLine;
+ CommandLine commandLine;
const QString qbsInstallDir = QString::fromLocal8Bit(qgetenv("QBS_INSTALL_DIR"));
- const QString qbsFilePath = Utils::HostOsInfo::withExecutableSuffix(!qbsInstallDir.isEmpty()
+ const QString qbsFilePath = HostOsInfo::withExecutableSuffix(!qbsInstallDir.isEmpty()
? qbsInstallDir + QLatin1String("/bin/qbs")
: QCoreApplication::applicationDirPath() + QLatin1String("/qbs"));
- Utils::QtcProcess::addArg(&commandLine, QDir::toNativeSeparators(qbsFilePath));
+ commandLine.addArg(QDir::toNativeSeparators(qbsFilePath));
const StepProxy stepProxy(buildStep);
- Utils::QtcProcess::addArg(&commandLine, stepProxy.command());
+ commandLine.addArg(stepProxy.command());
const QString buildDir = buildDirectory().toUserOutput();
- Utils::QtcProcess::addArgs(&commandLine, QStringList({"-d", buildDir}));
- Utils::QtcProcess::addArgs(&commandLine, QStringList("-f")
- << buildStep->project()->projectFilePath().toUserOutput());
+ commandLine.addArgs({"-d", buildDir});
+ commandLine.addArgs({"-f", buildStep->project()->projectFilePath().toUserOutput()});
if (QbsProjectManagerSettings::useCreatorSettingsDirForQbs()) {
- Utils::QtcProcess::addArgs(&commandLine, QStringList({"--settings-dir",
- QDir::toNativeSeparators(QbsProjectManagerSettings::qbsSettingsBaseDir())}));
+ commandLine.addArgs({"--settings-dir",
+ QDir::toNativeSeparators(QbsProjectManagerSettings::qbsSettingsBaseDir())});
}
if (stepProxy.dryRun())
- Utils::QtcProcess::addArg(&commandLine, QLatin1String("--dry-run"));
+ commandLine.addArg("--dry-run");
if (stepProxy.keepGoing())
- Utils::QtcProcess::addArg(&commandLine, QLatin1String("--keep-going"));
+ commandLine.addArg("--keep-going");
if (stepProxy.forceProbeExecution())
- Utils::QtcProcess::addArg(&commandLine, QLatin1String("--force-probe-execution"));
+ commandLine.addArg("--force-probe-execution");
if (stepProxy.showCommandLines())
- Utils::QtcProcess::addArgs(&commandLine, QStringList({"--command-echo-mode",
- "command-line"}));
+ commandLine.addArgs({"--command-echo-mode", "command-line"});
if (stepProxy.noInstall())
- Utils::QtcProcess::addArg(&commandLine, QLatin1String("--no-install"));
+ commandLine.addArg("--no-install");
if (stepProxy.noBuild())
- Utils::QtcProcess::addArg(&commandLine, QLatin1String("--no-build"));
+ commandLine.addArg("--no-build");
if (stepProxy.cleanInstallRoot())
- Utils::QtcProcess::addArg(&commandLine, QLatin1String("--clean-install-root"));
+ commandLine.addArg("--clean-install-root");
const int jobCount = stepProxy.jobCount();
- if (jobCount > 0) {
- Utils::QtcProcess::addArgs(&commandLine, QStringList({"--jobs",
- QString::number(jobCount)}));
- }
+ if (jobCount > 0)
+ commandLine.addArgs({"--jobs", QString::number(jobCount)});
+
const QString profileName = QbsManager::profileForKit(buildStep->target()->kit());
const QString buildVariant = qbsConfiguration()
.value(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY)).toString();
- Utils::QtcProcess::addArg(&commandLine, QLatin1String("config:") + configurationName());
- Utils::QtcProcess::addArg(&commandLine, QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY)
- + QLatin1Char(':') + buildVariant);
- const Utils::FileName installRoot = stepProxy.installRoot();
+ commandLine.addArg("config:" + configurationName());
+ commandLine.addArg(QString(Constants::QBS_CONFIG_VARIANT_KEY) + ':' + buildVariant);
+ const FilePath installRoot = stepProxy.installRoot();
if (!installRoot.isEmpty()) {
- Utils::QtcProcess::addArg(&commandLine, QLatin1String(Constants::QBS_INSTALL_ROOT_KEY)
- + QLatin1Char(':') + installRoot.toUserOutput());
- if (qobject_cast<const QbsInstallStep *>(buildStep)) {
- Utils::QtcProcess::addArgs(&commandLine, QStringList({ QLatin1String("--installRoot"),
- installRoot.toUserOutput() } ));
- }
+ commandLine.addArg(QString(Constants::QBS_INSTALL_ROOT_KEY) + ':' + installRoot.toUserOutput());
+ if (qobject_cast<const QbsInstallStep *>(buildStep))
+ commandLine.addArgs({"--installRoot", installRoot.toUserOutput()});
}
- Utils::QtcProcess::addArg(&commandLine, QLatin1String("profile:") + profileName);
+ commandLine.addArg("profile:" + profileName);
- return commandLine;
+ return commandLine.arguments();
}
// ---------------------------------------------------------------------------
@@ -398,10 +362,10 @@ QbsBuildConfigurationFactory::QbsBuildConfigurationFactory()
registerBuildConfiguration<QbsBuildConfiguration>(Constants::QBS_BC_ID);
setSupportedProjectType(Constants::PROJECT_ID);
setSupportedProjectMimeTypeName(Constants::MIME_TYPE);
- setIssueReporter([](Kit *k, const QString &projectPath, const QString &buildDir) -> QList<Task> {
- const QtSupport::BaseQtVersion * const version = QtSupport::QtKitInformation::qtVersion(k);
+ setIssueReporter([](Kit *k, const QString &projectPath, const QString &buildDir) -> Tasks {
+ const QtSupport::BaseQtVersion * const version = QtSupport::QtKitAspect::qtVersion(k);
return version ? version->reportIssues(projectPath, buildDir)
- : QList<ProjectExplorer::Task>();
+ : Tasks();
});
}
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
index 1db60592522..f34e552a40b 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
@@ -37,7 +37,6 @@ namespace ProjectExplorer { class BuildStep; }
namespace QbsProjectManager {
namespace Internal {
-class QbsBuildConfigurationWidget;
class QbsBuildStep;
class QbsProject;
@@ -50,7 +49,6 @@ class QbsBuildConfiguration : public ProjectExplorer::BuildConfiguration
public:
void initialize(const ProjectExplorer::BuildInfo &info) override;
- ProjectExplorer::NamedWidget *createConfigWidget() override;
QbsBuildStep *qbsStep() const;
QVariantMap qbsConfiguration() const;
@@ -71,9 +69,6 @@ public:
void setProducts(const QStringList &products);
QStringList products() const;
- void emitBuildTypeChanged();
-
- void setConfigurationName(const QString &configName);
QString configurationName() const;
QString equivalentCommandLine(const ProjectExplorer::BuildStep *buildStep) const;
@@ -83,16 +78,11 @@ signals:
private:
bool fromMap(const QVariantMap &map) override;
- QVariantMap toMap() const override;
- bool m_isParsing = true;
- bool m_parsingError = false;
QStringList m_changedFiles;
QStringList m_activeFileTags;
QStringList m_products;
- QString m_configurationName;
-
- friend class QbsBuildConfigurationWidget;
+ ProjectExplorer::BaseStringAspect *m_configurationName;
};
class QbsBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.cpp
deleted file mode 100644
index 057280a21a8..00000000000
--- a/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "qbsbuildconfigurationwidget.h"
-
-#include "qbsbuildconfiguration.h"
-
-#include <projectexplorer/target.h>
-#include <projectexplorer/project.h>
-#include <utils/detailswidget.h>
-#include <utils/pathchooser.h>
-
-#include <QGridLayout>
-#include <QLabel>
-#include <QLineEdit>
-#include <QWidget>
-
-namespace QbsProjectManager {
-namespace Internal {
-
-QbsBuildConfigurationWidget::QbsBuildConfigurationWidget(QbsProjectManager::Internal::QbsBuildConfiguration *bc) :
- m_buildConfiguration(bc),
- m_ignoreChange(false)
-{
- connect(bc, &ProjectExplorer::BuildConfiguration::buildDirectoryChanged,
- this, &QbsBuildConfigurationWidget::buildDirectoryChanged);
- connect(bc, &ProjectExplorer::BuildConfiguration::environmentChanged,
- this, &QbsBuildConfigurationWidget::environmentHasChanged);
-
- auto vbox = new QVBoxLayout(this);
- vbox->setMargin(0);
- auto container = new Utils::DetailsWidget(this);
- container->setState(Utils::DetailsWidget::NoSummary);
- vbox->addWidget(container);
-
- QWidget *details = new QWidget(container);
- container->setWidget(details);
-
- auto layout = new QGridLayout(details);
- layout->setMargin(0);
- layout->addWidget(new QLabel(tr("Build directory:")), 0, 0);
-
- m_buildDirChooser = new Utils::PathChooser;
- m_buildDirChooser->setExpectedKind(Utils::PathChooser::Directory);
- m_buildDirChooser->setBaseFileName(bc->target()->project()->projectDirectory());
- m_buildDirChooser->setEnvironment(bc->environment());
- layout->addWidget(m_buildDirChooser, 0, 1);
- layout->addWidget(new QLabel(tr("Configuration name:")), 1, 0);
- m_configNameEdit = new QLineEdit;
- m_configNameEdit->setText(m_buildConfiguration->configurationName());
- layout->addWidget(m_configNameEdit, 1, 1);
-
- connect(m_buildDirChooser, &Utils::PathChooser::rawPathChanged,
- this, &QbsBuildConfigurationWidget::buildDirEdited);
- connect(m_configNameEdit, &QLineEdit::textEdited,
- this, &QbsBuildConfigurationWidget::configNameEdited);
-
- buildDirectoryChanged();
-}
-
-void QbsBuildConfigurationWidget::buildDirEdited()
-{
- m_ignoreChange = true;
- m_buildConfiguration->setBuildDirectory(m_buildDirChooser->fileName());
-}
-
-void QbsBuildConfigurationWidget::configNameEdited()
-{
- m_ignoreChange = true;
- m_buildConfiguration->setConfigurationName(m_configNameEdit->text());
-}
-
-void QbsBuildConfigurationWidget::buildDirectoryChanged()
-{
- if (m_ignoreChange)
- return;
-
- m_buildDirChooser->setPath(m_buildConfiguration->rawBuildDirectory().toString());
-}
-
-void QbsBuildConfigurationWidget::environmentHasChanged()
-{
- m_buildDirChooser->setEnvironment(m_buildConfiguration->environment());
-}
-
-} // namespace Internal
-} // namespace QbsProjectManager
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.h b/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.h
deleted file mode 100644
index 48ffaa5fcc1..00000000000
--- a/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include <projectexplorer/namedwidget.h>
-
-namespace Utils {
-class DetailsWidget;
-class PathChooser;
-} // namespace Utils
-
-QT_BEGIN_NAMESPACE
-class QLineEdit;
-QT_END_NAMESPACE
-
-namespace QbsProjectManager {
-namespace Internal {
-class QbsBuildConfiguration;
-
-class QbsBuildConfigurationWidget : public ProjectExplorer::NamedWidget
-{
- Q_OBJECT
-
-public:
- QbsBuildConfigurationWidget(Internal::QbsBuildConfiguration *bc);
-
-private:
- void buildDirEdited();
- void configNameEdited();
-
- // Changes triggered from creator
- void buildDirectoryChanged();
- void environmentHasChanged();
-
-private:
- Internal::QbsBuildConfiguration *m_buildConfiguration;
- Utils::PathChooser *m_buildDirChooser;
- QLineEdit *m_configNameEdit;
- bool m_ignoreChange;
-};
-
-} // namespace Internal
-} // namespace QbsProjectManager
diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
index 45eb7535ce4..da09f51c050 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
@@ -128,6 +128,11 @@ QbsBuildStep::QbsBuildStep(ProjectExplorer::BuildStepList *bsl) :
setDisplayName(tr("Qbs Build"));
setQbsConfiguration(QVariantMap());
+ auto qbsBuildConfig = qobject_cast<QbsBuildConfiguration *>(buildConfiguration());
+ QTC_CHECK(qbsBuildConfig);
+ connect(this, &QbsBuildStep::qbsConfigurationChanged,
+ qbsBuildConfig, &QbsBuildConfiguration::qbsConfigurationChanged);
+
// setQbsConfiguration(other->qbsConfiguration(PreserveVariables));
}
@@ -222,9 +227,8 @@ void QbsBuildStep::setQbsConfiguration(const QVariantMap &config)
if (tmp == m_qbsConfiguration)
return;
m_qbsConfiguration = tmp;
- auto bc = static_cast<QbsBuildConfiguration *>(buildConfiguration());
- if (bc)
- bc->emitBuildTypeChanged();
+ if (ProjectExplorer::BuildConfiguration *bc = buildConfiguration())
+ emit bc->buildTypeChanged();
emit qbsConfigurationChanged();
}
@@ -253,17 +257,17 @@ bool QbsBuildStep::hasCustomInstallRoot() const
return m_qbsConfiguration.contains(Constants::QBS_INSTALL_ROOT_KEY);
}
-Utils::FileName QbsBuildStep::installRoot(VariableHandling variableHandling) const
+Utils::FilePath QbsBuildStep::installRoot(VariableHandling variableHandling) const
{
- Utils::FileName root = Utils::FileName::fromString(qbsConfiguration(variableHandling)
- .value(Constants::QBS_INSTALL_ROOT_KEY).toString());
- if (root.isNull()) {
- const QbsBuildConfiguration * const bc
- = static_cast<QbsBuildConfiguration *>(buildConfiguration());
- root = bc->buildDirectory().appendPath(bc->configurationName())
- .appendPath(qbs::InstallOptions::defaultInstallRoot());
- }
- return root;
+ const QString root =
+ qbsConfiguration(variableHandling).value(Constants::QBS_INSTALL_ROOT_KEY).toString();
+ if (!root.isNull())
+ return Utils::FilePath::fromString(root);
+
+ const QbsBuildConfiguration * const bc
+ = static_cast<QbsBuildConfiguration *>(buildConfiguration());
+ return bc->buildDirectory().pathAppended(bc->configurationName())
+ .pathAppended(qbs::InstallOptions::defaultInstallRoot());
}
int QbsBuildStep::maxJobs() const
@@ -395,7 +399,7 @@ void QbsBuildStep::createTaskAndOutput(ProjectExplorer::Task::TaskType type, con
const QString &file, int line)
{
ProjectExplorer::Task task = ProjectExplorer::Task(type, message,
- Utils::FileName::fromString(file), line,
+ Utils::FilePath::fromString(file), line,
ProjectExplorer::Constants::TASK_CATEGORY_COMPILE);
emit addTask(task, 1);
emit addOutput(message, OutputFormat::Stdout);
@@ -412,9 +416,8 @@ void QbsBuildStep::setBuildVariant(const QString &variant)
return;
m_qbsConfiguration.insert(Constants::QBS_CONFIG_VARIANT_KEY, variant);
emit qbsConfigurationChanged();
- auto bc = static_cast<QbsBuildConfiguration *>(buildConfiguration());
- if (bc)
- bc->emitBuildTypeChanged();
+ if (ProjectExplorer::BuildConfiguration *bc = buildConfiguration())
+ emit bc->buildTypeChanged();
}
QString QbsBuildStep::profile() const
@@ -553,11 +556,11 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) :
m_ui->qmlDebuggingWarningIcon->setPixmap(Utils::Icons::WARNING.pixmap());
connect(m_ui->buildVariantComboBox,
- static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+ QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &QbsBuildStepConfigWidget::changeBuildVariant);
connect(m_ui->keepGoingCheckBox, &QAbstractButton::toggled,
this, &QbsBuildStepConfigWidget::changeKeepGoing);
- connect(m_ui->jobSpinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
+ connect(m_ui->jobSpinBox, QOverload<int>::of(&QSpinBox::valueChanged),
this, &QbsBuildStepConfigWidget::changeJobCount);
connect(m_ui->showCommandLinesCheckBox, &QCheckBox::toggled, this,
&QbsBuildStepConfigWidget::changeShowCommandLines);
@@ -573,8 +576,6 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) :
&QbsBuildStepConfigWidget::changeForceProbes);
connect(m_ui->qmlDebuggingLibraryCheckBox, &QAbstractButton::toggled,
this, &QbsBuildStepConfigWidget::linkQmlDebuggingLibraryChecked);
- connect(QtSupport::QtVersionManager::instance(), &QtSupport::QtVersionManager::dumpUpdatedFor,
- this, &QbsBuildStepConfigWidget::updateQmlDebuggingOption);
updateState();
}
diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.h b/src/plugins/qbsprojectmanager/qbsbuildstep.h
index 8c3622385d1..913bf61268e 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.h
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.h
@@ -66,7 +66,7 @@ public:
bool install() const;
bool cleanInstallRoot() const;
bool hasCustomInstallRoot() const;
- Utils::FileName installRoot(VariableHandling variableHandling = ExpandVariables) const;
+ Utils::FilePath installRoot(VariableHandling variableHandling = ExpandVariables) const;
int maxJobs() const;
QString buildVariant() const;
diff --git a/src/plugins/qbsprojectmanager/qbscleanstep.cpp b/src/plugins/qbsprojectmanager/qbscleanstep.cpp
index f648e14aee1..167299a0bb7 100644
--- a/src/plugins/qbsprojectmanager/qbscleanstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbscleanstep.cpp
@@ -170,7 +170,7 @@ void QbsCleanStep::updateState()
void QbsCleanStep::createTaskAndOutput(ProjectExplorer::Task::TaskType type, const QString &message, const QString &file, int line)
{
ProjectExplorer::Task task = ProjectExplorer::Task(type, message,
- Utils::FileName::fromString(file), line,
+ Utils::FilePath::fromString(file), line,
ProjectExplorer::Constants::TASK_CATEGORY_COMPILE);
emit addTask(task, 1);
emit addOutput(message, OutputFormat::Stdout);
diff --git a/src/plugins/qbsprojectmanager/qbsinstallstep.cpp b/src/plugins/qbsprojectmanager/qbsinstallstep.cpp
index c375c87cacd..ddfaadf8df2 100644
--- a/src/plugins/qbsprojectmanager/qbsinstallstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbsinstallstep.cpp
@@ -198,7 +198,7 @@ void QbsInstallStep::createTaskAndOutput(ProjectExplorer::Task::TaskType type,
const QString &message, const QString &file, int line)
{
ProjectExplorer::Task task = ProjectExplorer::Task(type, message,
- Utils::FileName::fromString(file), line,
+ Utils::FilePath::fromString(file), line,
ProjectExplorer::Constants::TASK_CATEGORY_COMPILE);
emit addTask(task, 1);
emit addOutput(message, OutputFormat::Stdout);
diff --git a/src/plugins/qbsprojectmanager/qbskitinformation.cpp b/src/plugins/qbsprojectmanager/qbskitinformation.cpp
index 95242e5e37a..53f3b9a1429 100644
--- a/src/plugins/qbsprojectmanager/qbskitinformation.cpp
+++ b/src/plugins/qbsprojectmanager/qbskitinformation.cpp
@@ -27,7 +27,6 @@
#include "customqbspropertiesdialog.h"
-#include <projectexplorer/kitconfigwidget.h>
#include <projectexplorer/kitmanager.h>
#include <utils/elidinglabel.h>
@@ -42,49 +41,44 @@ using namespace ProjectExplorer;
namespace QbsProjectManager {
namespace Internal {
-class ConfigWidget final : public KitConfigWidget
+class AspectWidget final : public KitAspectWidget
{
- Q_OBJECT
+ Q_DECLARE_TR_FUNCTIONS(QbsProjectManager::Internal::AspectWidget)
public:
- ConfigWidget(Kit *kit, const KitInformation *kitInfo)
- : KitConfigWidget(kit, kitInfo),
+ AspectWidget(Kit *kit, const KitAspect *kitInfo)
+ : KitAspectWidget(kit, kitInfo),
m_contentLabel(new Utils::ElidingLabel),
m_changeButton(new QPushButton(tr("Change...")))
{
- connect(m_changeButton, &QPushButton::clicked, this, &ConfigWidget::changeProperties);
+ connect(m_changeButton, &QPushButton::clicked, this, &AspectWidget::changeProperties);
}
private:
- QString displayName() const override { return QbsKitInformation::displayName(); }
void makeReadOnly() override { m_changeButton->setEnabled(false); }
- void refresh() override { m_contentLabel->setText(QbsKitInformation::representation(kit())); }
+ void refresh() override { m_contentLabel->setText(QbsKitAspect::representation(kit())); }
QWidget *mainWidget() const override { return m_contentLabel; }
QWidget *buttonWidget() const override { return m_changeButton; }
void changeProperties()
{
- CustomQbsPropertiesDialog dlg(QbsKitInformation::properties(kit()));
+ CustomQbsPropertiesDialog dlg(QbsKitAspect::properties(kit()));
if (dlg.exec() == QDialog::Accepted)
- QbsKitInformation::setProperties(kit(), dlg.properties());
+ QbsKitAspect::setProperties(kit(), dlg.properties());
}
QLabel * const m_contentLabel;
QPushButton * const m_changeButton;
};
-QbsKitInformation::QbsKitInformation()
+QbsKitAspect::QbsKitAspect()
{
- setObjectName(QLatin1String("QbsKitInformation"));
- setId(QbsKitInformation::id());
+ setObjectName(QLatin1String("QbsKitAspect"));
+ setId(QbsKitAspect::id());
+ setDisplayName(tr("Additional Qbs Profile Settings"));
setPriority(22000);
}
-QString QbsKitInformation::displayName()
-{
- return tr("Additional Qbs Profile Settings");
-}
-
-QString QbsKitInformation::representation(const Kit *kit)
+QString QbsKitAspect::representation(const Kit *kit)
{
const QVariantMap props = properties(kit);
QString repr;
@@ -96,37 +90,34 @@ QString QbsKitInformation::representation(const Kit *kit)
return repr;
}
-QVariantMap QbsKitInformation::properties(const Kit *kit)
+QVariantMap QbsKitAspect::properties(const Kit *kit)
{
QTC_ASSERT(kit, return QVariantMap());
return kit->value(id()).toMap();
}
-void QbsKitInformation::setProperties(Kit *kit, const QVariantMap &properties)
+void QbsKitAspect::setProperties(Kit *kit, const QVariantMap &properties)
{
QTC_ASSERT(kit, return);
kit->setValue(id(), properties);
}
-Core::Id QbsKitInformation::id()
+Core::Id QbsKitAspect::id()
{
return "Qbs.KitInformation";
}
-QVariant QbsKitInformation::defaultValue(const Kit *) const { return QString(); }
-QList<Task> QbsKitInformation::validate(const Kit *) const { return QList<Task>(); }
+Tasks QbsKitAspect::validate(const Kit *) const { return {}; }
-KitInformation::ItemList QbsKitInformation::toUserOutput(const Kit *k) const
+KitAspect::ItemList QbsKitAspect::toUserOutput(const Kit *k) const
{
return ItemList({qMakePair(displayName(), representation(k))});
}
-KitConfigWidget *QbsKitInformation::createConfigWidget(Kit *k) const
+KitAspectWidget *QbsKitAspect::createConfigWidget(Kit *k) const
{
- return new ConfigWidget(k, this);
+ return new AspectWidget(k, this);
}
} // namespace Internal
} // namespace QbsProjectManager
-
-#include <qbskitinformation.moc>
diff --git a/src/plugins/qbsprojectmanager/qbskitinformation.h b/src/plugins/qbsprojectmanager/qbskitinformation.h
index ef5a5b93512..1113f2ce01d 100644
--- a/src/plugins/qbsprojectmanager/qbskitinformation.h
+++ b/src/plugins/qbsprojectmanager/qbskitinformation.h
@@ -30,14 +30,13 @@
namespace QbsProjectManager {
namespace Internal {
-class QbsKitInformation final : public ProjectExplorer::KitInformation
+class QbsKitAspect final : public ProjectExplorer::KitAspect
{
Q_OBJECT
public:
- QbsKitInformation();
+ QbsKitAspect();
- static QString displayName();
static QString representation(const ProjectExplorer::Kit *kit);
static QVariantMap properties(const ProjectExplorer::Kit *kit);
static void setProperties(ProjectExplorer::Kit *kit, const QVariantMap &properties);
@@ -45,10 +44,9 @@ public:
private:
static Core::Id id();
- QVariant defaultValue(const ProjectExplorer::Kit *) const override;
- QList<ProjectExplorer::Task> validate(const ProjectExplorer::Kit *) const override;
+ ProjectExplorer::Tasks validate(const ProjectExplorer::Kit *) const override;
ItemList toUserOutput(const ProjectExplorer::Kit *) const override;
- ProjectExplorer::KitConfigWidget *createConfigWidget(ProjectExplorer::Kit *) const override;
+ ProjectExplorer::KitAspectWidget *createConfigWidget(ProjectExplorer::Kit *) const override;
};
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbslogsink.cpp b/src/plugins/qbsprojectmanager/qbslogsink.cpp
index c9a2f28d641..9e635c2958c 100644
--- a/src/plugins/qbsprojectmanager/qbslogsink.cpp
+++ b/src/plugins/qbsprojectmanager/qbslogsink.cpp
@@ -70,7 +70,7 @@ void QbsLogSink::doPrintWarning(const qbs::ErrorInfo &warning)
foreach (const qbs::ErrorItem &item, warning.items())
emit newTask(Task(Task::Warning,
item.description(),
- Utils::FileName::fromString(item.codeLocation().filePath()),
+ Utils::FilePath::fromString(item.codeLocation().filePath()),
item.codeLocation().line(),
Constants::TASK_CATEGORY_BUILDSYSTEM));
}
diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp
index 50b3957eca1..cbc6e597401 100644
--- a/src/plugins/qbsprojectmanager/qbsnodes.cpp
+++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp
@@ -30,6 +30,7 @@
#include "qbsprojectmanagerconstants.h"
#include "qbsrunconfiguration.h"
+#include <android/androidconstants.h>
#include <coreplugin/fileiconprovider.h>
#include <coreplugin/idocument.h>
#include <projectexplorer/projectexplorerconstants.h>
@@ -223,63 +224,19 @@ static bool supportsNodeAction(ProjectAction action, const Node *node)
};
if (action == RemoveFile || action == Rename) {
- if (node->nodeType() == ProjectExplorer::NodeType::File)
+ if (node->asFileNode())
return !Utils::contains(project->qbsProject().buildSystemFiles(), equalsNodeFilePath);
}
return false;
}
-// ----------------------------------------------------------------------
-// QbsFileNode:
-// ----------------------------------------------------------------------
-
-QbsFileNode::QbsFileNode(const Utils::FileName &filePath,
- const ProjectExplorer::FileType fileType,
- bool generated,
- int line) :
- ProjectExplorer::FileNode(filePath, fileType, generated, line)
-{ }
-
-QString QbsFileNode::displayName() const
-{
- int l = line();
- if (l < 0)
- return ProjectExplorer::FileNode::displayName();
- return ProjectExplorer::FileNode::displayName() + QLatin1Char(':') + QString::number(l);
-}
-
-
-QbsFolderNode::QbsFolderNode(const Utils::FileName &folderPath, ProjectExplorer::NodeType nodeType,
- const QString &displayName)
- : ProjectExplorer::FolderNode(folderPath, nodeType, displayName)
-{
-}
-
-bool QbsFolderNode::supportsAction(ProjectAction action, const Node *node) const
-{
- return supportsNodeAction(action, node);
-}
-
-// ---------------------------------------------------------------------------
-// QbsBaseProjectNode:
-// ---------------------------------------------------------------------------
-
-QbsBaseProjectNode::QbsBaseProjectNode(const Utils::FileName &path) :
- ProjectExplorer::ProjectNode(path)
-{ }
-
-bool QbsBaseProjectNode::showInSimpleTree() const
-{
- return false;
-}
-
// --------------------------------------------------------------------
// QbsGroupNode:
// --------------------------------------------------------------------
QbsGroupNode::QbsGroupNode(const qbs::GroupData &grp, const QString &productPath) :
- QbsBaseProjectNode(Utils::FileName())
+ ProjectNode(Utils::FilePath())
{
static QIcon groupIcon = QIcon(QString(Constants::QBS_GROUP_ICON));
setIcon(groupIcon);
@@ -356,7 +313,7 @@ bool QbsGroupNode::renameFile(const QString &filePath, const QString &newFilePat
FolderNode::AddNewInformation QbsGroupNode::addNewInformation(const QStringList &files,
Node *context) const
{
- AddNewInformation info = QbsBaseProjectNode::addNewInformation(files, context);
+ AddNewInformation info = ProjectNode::addNewInformation(files, context);
if (context != this)
--info.priority;
return info;
@@ -367,16 +324,12 @@ FolderNode::AddNewInformation QbsGroupNode::addNewInformation(const QStringList
// --------------------------------------------------------------------
QbsProductNode::QbsProductNode(const qbs::ProductData &prd) :
- QbsBaseProjectNode(Utils::FileName::fromString(prd.location().filePath())),
+ ProjectNode(Utils::FilePath::fromString(prd.location().filePath())),
m_qbsProductData(prd)
{
static QIcon productIcon = Core::FileIconProvider::directoryIcon(Constants::QBS_PRODUCT_OVERLAY_ICON);
setIcon(productIcon);
-}
-
-bool QbsProductNode::showInSimpleTree() const
-{
- return true;
+ setIsProduct();
}
bool QbsProductNode::supportsAction(ProjectAction action, const Node *node) const
@@ -448,12 +401,47 @@ QString QbsProductNode::buildKey() const
return QbsProject::uniqueProductName(m_qbsProductData);
}
+QVariant QbsProductNode::data(Core::Id role) const
+{
+ if (role == Android::Constants::AndroidDeploySettingsFile) {
+ for (const auto &artifact : m_qbsProductData.generatedArtifacts()) {
+ if (artifact.fileTags().contains("qt_androiddeployqt_input"))
+ return artifact.filePath();
+ }
+ return {};
+ }
+
+ if (role == Android::Constants::AndroidSoLibPath) {
+ QStringList ret{m_qbsProductData.buildDirectory()};
+ for (const auto &artifact : m_qbsProductData.generatedArtifacts()) {
+ if (artifact.fileTags().contains("dynamiclibrary")) {
+ ret << QFileInfo(artifact.filePath()).path();
+ }
+ }
+ ret.removeDuplicates();
+ return ret;
+ }
+
+ if (role == Android::Constants::AndroidManifest) {
+ for (const auto &artifact : m_qbsProductData.generatedArtifacts()) {
+ if (artifact.fileTags().contains("android.manifest_final"))
+ return artifact.filePath();
+ }
+ return {};
+ }
+
+ if (role == Android::Constants::AndroidApk)
+ return m_qbsProductData.targetExecutable();
+
+ return {};
+}
+
// --------------------------------------------------------------------
// QbsProjectNode:
// --------------------------------------------------------------------
-QbsProjectNode::QbsProjectNode(const Utils::FileName &projectDirectory) :
- QbsBaseProjectNode(projectDirectory)
+QbsProjectNode::QbsProjectNode(const Utils::FilePath &projectDirectory) :
+ ProjectNode(projectDirectory)
{
static QIcon projectIcon = Core::FileIconProvider::directoryIcon(ProjectExplorer::Constants::FILEOVERLAY_QT);
setIcon(projectIcon);
@@ -469,11 +457,6 @@ const qbs::Project QbsProjectNode::qbsProject() const
return project()->qbsProject();
}
-bool QbsProjectNode::showInSimpleTree() const
-{
- return true;
-}
-
void QbsProjectNode::setProjectData(const qbs::ProjectData &data)
{
m_projectData = data;
diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h
index cdf85b39ed4..3d8f90c3df4 100644
--- a/src/plugins/qbsprojectmanager/qbsnodes.h
+++ b/src/plugins/qbsprojectmanager/qbsnodes.h
@@ -35,59 +35,21 @@ namespace Internal {
class QbsNodeTreeBuilder;
class QbsProject;
-// ----------------------------------------------------------------------
-// QbsFileNode:
-// ----------------------------------------------------------------------
-
-class QbsFileNode : public ProjectExplorer::FileNode
-{
-public:
- QbsFileNode(const Utils::FileName &filePath, const ProjectExplorer::FileType fileType, bool generated,
- int line);
-
- QString displayName() const override;
-};
-
-class QbsFolderNode : public ProjectExplorer::FolderNode
-{
-public:
- QbsFolderNode(const Utils::FileName &folderPath, ProjectExplorer::NodeType nodeType,
- const QString &displayName);
-
-private:
- bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const final;
-};
-
-// ---------------------------------------------------------------------------
-// QbsBaseProjectNode:
-// ---------------------------------------------------------------------------
-
-class QbsGroupNode;
-
-class QbsBaseProjectNode : public ProjectExplorer::ProjectNode
-{
-public:
- explicit QbsBaseProjectNode(const Utils::FileName &absoluteFilePath);
-
- bool showInSimpleTree() const override;
-};
-
// --------------------------------------------------------------------
// QbsGroupNode:
// --------------------------------------------------------------------
-class QbsGroupNode : public QbsBaseProjectNode
+class QbsGroupNode : public ProjectExplorer::ProjectNode
{
public:
QbsGroupNode(const qbs::GroupData &grp, const QString &productPath);
+ bool showInSimpleTree() const final { return false; }
bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const final;
bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) override;
bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr) override;
bool renameFile(const QString &filePath, const QString &newFilePath) override;
- qbs::GroupData qbsGroupData() const { return m_qbsGroupData; }
-
private:
AddNewInformation addNewInformation(const QStringList &files, Node *context) const override;
@@ -99,12 +61,11 @@ private:
// QbsProductNode:
// --------------------------------------------------------------------
-class QbsProductNode : public QbsBaseProjectNode
+class QbsProductNode : public ProjectExplorer::ProjectNode
{
public:
explicit QbsProductNode(const qbs::ProductData &prd);
- bool showInSimpleTree() const override;
bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const final;
bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) override;
bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr) override;
@@ -114,6 +75,7 @@ public:
QString buildKey() const override;
const qbs::ProductData qbsProductData() const { return m_qbsProductData; }
+ QVariant data(Core::Id role) const override;
private:
const qbs::ProductData m_qbsProductData;
@@ -123,16 +85,15 @@ private:
// QbsProjectNode:
// ---------------------------------------------------------------------------
-class QbsProjectNode : public QbsBaseProjectNode
+class QbsProjectNode : public ProjectExplorer::ProjectNode
{
public:
- explicit QbsProjectNode(const Utils::FileName &projectDirectory);
+ explicit QbsProjectNode(const Utils::FilePath &projectDirectory);
virtual QbsProject *project() const;
const qbs::Project qbsProject() const;
const qbs::ProjectData qbsProjectData() const { return m_projectData; }
- bool showInSimpleTree() const override;
void setProjectData(const qbs::ProjectData &data); // FIXME: Needed?
private:
diff --git a/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp b/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp
index 022d1191905..f7f143b0253 100644
--- a/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp
+++ b/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp
@@ -30,36 +30,43 @@
#include <utils/algorithm.h>
#include <utils/qtcassert.h>
-namespace {
+using namespace ProjectExplorer;
+using namespace Utils;
-ProjectExplorer::FileType fileType(const qbs::ArtifactData &artifact)
-{
- QTC_ASSERT(artifact.isValid(), return ProjectExplorer::FileType::Unknown);
+namespace QbsProjectManager {
+namespace Internal {
+
+namespace {
- if (artifact.fileTags().contains("c")
- || artifact.fileTags().contains("cpp")
- || artifact.fileTags().contains("objc")
- || artifact.fileTags().contains("objcpp")) {
- return ProjectExplorer::FileType::Source;
+FileType fileType(const qbs::ArtifactData &artifact)
+{
+ QTC_ASSERT(artifact.isValid(), return FileType::Unknown);
+
+ const QStringList fileTags = artifact.fileTags();
+ if (fileTags.contains("c")
+ || fileTags.contains("cpp")
+ || fileTags.contains("objc")
+ || fileTags.contains("objcpp")) {
+ return FileType::Source;
}
- if (artifact.fileTags().contains("hpp"))
- return ProjectExplorer::FileType::Header;
- if (artifact.fileTags().contains("qrc"))
- return ProjectExplorer::FileType::Resource;
- if (artifact.fileTags().contains("ui"))
- return ProjectExplorer::FileType::Form;
- if (artifact.fileTags().contains("scxml"))
- return ProjectExplorer::FileType::StateChart;
- if (artifact.fileTags().contains("qt.qml.qml"))
- return ProjectExplorer::FileType::QML;
- return ProjectExplorer::FileType::Unknown;
+ if (fileTags.contains("hpp"))
+ return FileType::Header;
+ if (fileTags.contains("qrc"))
+ return FileType::Resource;
+ if (fileTags.contains("ui"))
+ return FileType::Form;
+ if (fileTags.contains("scxml"))
+ return FileType::StateChart;
+ if (fileTags.contains("qt.qml.qml"))
+ return FileType::QML;
+ return FileType::Unknown;
}
-void setupArtifacts(ProjectExplorer::FolderNode *root, const QList<qbs::ArtifactData> &artifacts)
+void setupArtifacts(FolderNode *root, const QList<qbs::ArtifactData> &artifacts)
{
for (const qbs::ArtifactData &ad : artifacts) {
- const Utils::FileName path = Utils::FileName::fromString(ad.filePath());
- const ProjectExplorer::FileType type = fileType(ad);
+ const FilePath path = FilePath::fromString(ad.filePath());
+ const FileType type = fileType(ad);
const bool isGenerated = ad.isGenerated();
// A list of human-readable file types that we can reasonably expect
@@ -73,51 +80,48 @@ void setupArtifacts(ProjectExplorer::FolderNode *root, const QList<qbs::Artifact
QLatin1String("linkerscript"),
QLatin1String("qrc"), QLatin1String("java.java")
};
- auto node = std::make_unique<ProjectExplorer::FileNode>(path, type, isGenerated);
+ auto node = std::make_unique<FileNode>(path, type);
+ node->setIsGenerated(isGenerated);
node->setListInProject(!isGenerated || ad.fileTags().toSet().intersects(sourceTags));
root->addNestedNode(std::move(node));
}
root->compress();
}
-std::unique_ptr<QbsProjectManager::Internal::QbsGroupNode>
+std::unique_ptr<QbsGroupNode>
buildGroupNodeTree(const qbs::GroupData &grp, const QString &productPath, bool productIsEnabled)
{
QTC_ASSERT(grp.isValid(), return nullptr);
- auto result = std::make_unique<QbsProjectManager::Internal::QbsGroupNode>(grp, productPath);
+ auto fileNode = std::make_unique<FileNode>(FilePath::fromString(grp.location().filePath()),
+ FileType::Project);
+ fileNode->setLine(grp.location().line());
+
+ auto result = std::make_unique<QbsGroupNode>(grp, productPath);
result->setEnabled(productIsEnabled && grp.isEnabled());
result->setAbsoluteFilePathAndLine(
- Utils::FileName::fromString(grp.location().filePath()).parentDir(), -1);
+ FilePath::fromString(grp.location().filePath()).parentDir(), -1);
result->setDisplayName(grp.name());
- result->addNode(std::make_unique<QbsProjectManager::Internal::QbsFileNode>(
- Utils::FileName::fromString(grp.location().filePath()),
- ProjectExplorer::FileType::Project, false,
- grp.location().line()));
+ result->addNode(std::move(fileNode));
- ::setupArtifacts(result.get(), grp.allSourceArtifacts());
+ setupArtifacts(result.get(), grp.allSourceArtifacts());
return result;
}
-void setupQbsProductData(QbsProjectManager::Internal::QbsProductNode *node,
- const qbs::ProductData &prd)
+void setupQbsProductData(QbsProductNode *node, const qbs::ProductData &prd)
{
- using namespace QbsProjectManager::Internal;
+ auto fileNode = std::make_unique<FileNode>(FilePath::fromString(prd.location().filePath()),
+ FileType::Project);
+ fileNode->setLine(prd.location().line());
node->setEnabled(prd.isEnabled());
-
node->setDisplayName(prd.fullDisplayName());
- node->setAbsoluteFilePathAndLine(Utils::FileName::fromString(prd.location().filePath()).parentDir(), -1);
- const QString &productPath = QFileInfo(prd.location().filePath()).absolutePath();
-
- // Add QbsFileNode:
- node->addNode(std::make_unique<QbsFileNode>(Utils::FileName::fromString(prd.location().filePath()),
- ProjectExplorer::FileType::Project, false,
- prd.location().line()));
-
+ node->setAbsoluteFilePathAndLine(FilePath::fromString(prd.location().filePath()).parentDir(), -1);
+ node->addNode(std::move(fileNode));
+ const QString &productPath = QFileInfo(prd.location().filePath()).absolutePath();
foreach (const qbs::GroupData &grp, prd.groups()) {
if (grp.name() == prd.name() && grp.location() == prd.location()) {
// Set implicit product group right onto this node:
@@ -128,34 +132,31 @@ void setupQbsProductData(QbsProjectManager::Internal::QbsProductNode *node,
}
// Add "Generated Files" Node:
- auto genFiles
- = std::make_unique<ProjectExplorer::VirtualFolderNode>(node->filePath(),
- ProjectExplorer::Node::DefaultProjectFilePriority - 10);
+ auto genFiles = std::make_unique<VirtualFolderNode>(FilePath::fromString(prd.buildDirectory()));
genFiles->setDisplayName(QCoreApplication::translate("QbsProductNode", "Generated files"));
setupArtifacts(genFiles.get(), prd.generatedArtifacts());
node->addNode(std::move(genFiles));
}
-std::unique_ptr<QbsProjectManager::Internal::QbsProductNode>
-buildProductNodeTree(const qbs::ProductData &prd)
+std::unique_ptr<QbsProductNode> buildProductNodeTree(const qbs::ProductData &prd)
{
- auto result = std::make_unique<QbsProjectManager::Internal::QbsProductNode>(prd);
+ auto result = std::make_unique<QbsProductNode>(prd);
setupQbsProductData(result.get(), prd);
return result;
}
-void setupProjectNode(QbsProjectManager::Internal::QbsProjectNode *node, const qbs::ProjectData &prjData,
+void setupProjectNode(QbsProjectNode *node, const qbs::ProjectData &prjData,
const qbs::Project &qbsProject)
{
- using namespace QbsProjectManager::Internal;
- node->addNode(std::make_unique<QbsFileNode>(Utils::FileName::fromString(prjData.location().filePath()),
- ProjectExplorer::FileType::Project, false,
- prjData.location().line()));
+ auto fileNode = std::make_unique<FileNode>(FilePath::fromString(prjData.location().filePath()),
+ FileType::Project);
+ fileNode->setLine(prjData.location().line());
+
+ node->addNode(std::move(fileNode));
foreach (const qbs::ProjectData &subData, prjData.subProjects()) {
- auto subProject =
- std::make_unique<QbsProjectManager::Internal::QbsProjectNode>(
- Utils::FileName::fromString(subData.location().filePath()).parentDir());
+ auto subProject = std::make_unique<QbsProjectNode>(
+ FilePath::fromString(subData.location().filePath()).parentDir());
setupProjectNode(subProject.get(), subData, qbsProject);
node->addNode(std::move(subProject));
}
@@ -202,9 +203,6 @@ QStringList unreferencedBuildSystemFiles(const qbs::Project &p)
} // namespace
-namespace QbsProjectManager {
-namespace Internal {
-
std::unique_ptr<QbsRootProjectNode> QbsNodeTreeBuilder::buildTree(QbsProject *project)
{
if (!project->qbsProjectData().isValid())
@@ -212,17 +210,16 @@ std::unique_ptr<QbsRootProjectNode> QbsNodeTreeBuilder::buildTree(QbsProject *pr
auto root = std::make_unique<QbsRootProjectNode>(project);
setupProjectNode(root.get(), project->qbsProjectData(), project->qbsProject());
- auto buildSystemFiles
- = std::make_unique<ProjectExplorer::FolderNode>(project->projectDirectory(),
- ProjectExplorer::NodeType::Folder,
- QCoreApplication::translate("QbsRootProjectNode", "Qbs files"));
- Utils::FileName base = project->projectDirectory();
- const QStringList &files = unreferencedBuildSystemFiles(project->qbsProject());
+ auto buildSystemFiles = std::make_unique<FolderNode>(project->projectDirectory());
+ buildSystemFiles->setDisplayName(QCoreApplication::translate("QbsRootProjectNode", "Qbs files"));
+
+ const FilePath base = project->projectDirectory();
+ const QStringList files = unreferencedBuildSystemFiles(project->qbsProject());
for (const QString &f : files) {
- const Utils::FileName filePath = Utils::FileName::fromString(f);
+ const FilePath filePath = FilePath::fromString(f);
if (filePath.isChildOf(base))
- buildSystemFiles->addNestedNode(std::make_unique<ProjectExplorer::FileNode>(filePath, ProjectExplorer::FileType::Project, false));
+ buildSystemFiles->addNestedNode(std::make_unique<FileNode>(filePath, FileType::Project));
}
buildSystemFiles->compress();
root->addNode(std::move(buildSystemFiles));
diff --git a/src/plugins/qbsprojectmanager/qbsparser.cpp b/src/plugins/qbsprojectmanager/qbsparser.cpp
index 8aa0ed7e962..d6b2339dbbf 100644
--- a/src/plugins/qbsprojectmanager/qbsparser.cpp
+++ b/src/plugins/qbsprojectmanager/qbsparser.cpp
@@ -52,7 +52,7 @@ void QbsParser::taskAdded(const ProjectExplorer::Task &task, int linkedLines, in
QString filePath = task.file.toString();
if (!filePath.isEmpty())
- editable.file = Utils::FileName::fromUserInput(m_workingDirectory.absoluteFilePath(filePath));
+ editable.file = Utils::FilePath::fromUserInput(m_workingDirectory.absoluteFilePath(filePath));
IOutputParser::taskAdded(editable, linkedLines, skipLines);
}
diff --git a/src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp b/src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp
index 418f30e2117..5a79d420624 100644
--- a/src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp
@@ -152,7 +152,7 @@ void QbsProfilesSettingsWidget::refreshKitsList()
m_ui.kitsComboBox->setCurrentIndex(0);
displayCurrentProfile();
connect(m_ui.kitsComboBox,
- static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+ QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &QbsProfilesSettingsWidget::displayCurrentProfile);
}
diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp
index 94bcb5a988c..209e87b4bca 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.cpp
+++ b/src/plugins/qbsprojectmanager/qbsproject.cpp
@@ -121,7 +121,7 @@ private:
// QbsProject:
// --------------------------------------------------------------------
-QbsProject::QbsProject(const FileName &fileName) :
+QbsProject::QbsProject(const FilePath &fileName) :
Project(Constants::MIME_TYPE, fileName, [this] { delayParsing(); }),
m_cppCodeModelUpdater(new CppTools::CppProjectUpdater)
{
@@ -201,6 +201,11 @@ QVariant QbsProject::additionalData(Id id, const Target *target) const
return Project::additionalData(id, target);
}
+ProjectExplorer::DeploymentKnowledge QbsProject::deploymentKnowledge() const
+{
+ return DeploymentKnowledge::Perfect;
+}
+
QStringList QbsProject::filesGeneratedFrom(const QString &sourceFile) const
{
QStringList generated;
@@ -464,6 +469,7 @@ void QbsProject::updateAfterParse()
updateCppCodeModel();
updateQmlJsCodeModel();
emit fileListChanged();
+ m_envCache.clear();
emit dataChanged();
}
@@ -478,16 +484,16 @@ void QbsProject::updateProjectNodes()
rebuildProjectTree();
}
-FileName QbsProject::installRoot()
+FilePath QbsProject::installRoot()
{
if (!activeTarget())
- return FileName();
+ return FilePath();
const auto * const bc
= qobject_cast<QbsBuildConfiguration *>(activeTarget()->activeBuildConfiguration());
if (!bc)
- return FileName();
+ return FilePath();
const QbsBuildStep * const buildStep = bc->qbsStep();
- return buildStep && buildStep->install() ? buildStep->installRoot() : FileName();
+ return buildStep && buildStep->install() ? buildStep->installRoot() : FilePath();
}
void QbsProject::handleQbsParsingDone(bool success)
@@ -647,6 +653,7 @@ void QbsProject::updateAfterBuild()
m_extraCompilersPending = false;
updateCppCodeModel();
}
+ m_envCache.clear();
emit dataChanged();
}
@@ -674,7 +681,7 @@ void QbsProject::generateErrors(const qbs::ErrorInfo &e)
foreach (const qbs::ErrorItem &item, e.items())
TaskHub::addTask(Task::Error, item.description(),
ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM,
- FileName::fromString(item.codeLocation().filePath()),
+ FilePath::fromString(item.codeLocation().filePath()),
item.codeLocation().line());
}
@@ -693,7 +700,7 @@ void QbsProject::configureAsExampleProject(const QSet<Id> &platforms)
};
foreach (Kit *k, kits) {
const QtSupport::BaseQtVersion * const qtVersion
- = QtSupport::QtKitInformation::qtVersion(k);
+ = QtSupport::QtKitAspect::qtVersion(k);
if (!qtVersion || !qtVersionMatchesPlatform(qtVersion))
continue;
if (auto factory = BuildConfigurationFactory::find(k, projectFilePath().toString()))
@@ -756,11 +763,11 @@ void QbsProject::updateDocuments(const QSet<QString> &files)
}
}
QSet<IDocument *> toAdd;
- const FileName buildDir = FileName::fromString(m_projectData.buildDirectory());
+ const FilePath buildDir = FilePath::fromString(m_projectData.buildDirectory());
for (const QString &f : qAsConst(filesToAdd)) {
// A changed qbs file (project, module etc) should trigger a re-parse, but not if
// the file was generated by qbs itself, in which case that might cause an infinite loop.
- const FileName fp = FileName::fromString(f);
+ const FilePath fp = FilePath::fromString(f);
static const ProjectDocument::ProjectCallback noOpCallback = []{};
const ProjectDocument::ProjectCallback reparseCallback = [this]() { delayParsing(); };
toAdd.insert(new ProjectDocument(Constants::MIME_TYPE, fp, fp.isChildOf(buildDir)
@@ -964,7 +971,7 @@ void QbsProject::updateCppCodeModel()
list.removeDuplicates();
ProjectExplorer::HeaderPaths grpHeaderPaths;
foreach (const QString &p, list)
- grpHeaderPaths += {FileName::fromUserInput(p).toString(), HeaderPathType::User};
+ grpHeaderPaths += {FilePath::fromUserInput(p).toString(), HeaderPathType::User};
list = props.getModulePropertiesAsStringList(QLatin1String(CONFIG_CPP_MODULE),
QLatin1String(CONFIG_FRAMEWORKPATHS));
@@ -972,7 +979,7 @@ void QbsProject::updateCppCodeModel()
QLatin1String(CONFIG_SYSTEM_FRAMEWORKPATHS)));
list.removeDuplicates();
foreach (const QString &p, list)
- grpHeaderPaths += {FileName::fromUserInput(p).toString(), HeaderPathType::Framework};
+ grpHeaderPaths += {FilePath::fromUserInput(p).toString(), HeaderPathType::Framework};
rpp.setHeaderPaths(grpHeaderPaths);
@@ -1011,12 +1018,12 @@ void QbsProject::updateCppCodeModel()
continue;
}
- const FileNameList fileNames = Utils::transform(generated,
+ const FilePathList fileNames = Utils::transform(generated,
[](const QString &s) {
- return Utils::FileName::fromString(s);
+ return Utils::FilePath::fromString(s);
});
m_extraCompilers.append((*i)->create(
- this, FileName::fromString(source.filePath()), fileNames));
+ this, FilePath::fromString(source.filePath()), fileNames));
}
}
}
@@ -1072,7 +1079,7 @@ void QbsProject::updateQmlJsCodeModel()
foreach (const qbs::ProductData &product, m_projectData.allProducts()) {
static const QString propertyName = QLatin1String("qmlImportPaths");
foreach (const QString &path, product.properties().value(propertyName).toStringList()) {
- projectInfo.importPaths.maybeInsert(Utils::FileName::fromString(path),
+ projectInfo.importPaths.maybeInsert(Utils::FilePath::fromString(path),
QmlJS::Dialect::Qml);
}
}
@@ -1084,7 +1091,7 @@ void QbsProject::updateQmlJsCodeModel()
void QbsProject::updateApplicationTargets()
{
- BuildTargetInfoList applications;
+ QList<BuildTargetInfo> applications;
foreach (const qbs::ProductData &productData, m_projectData.allProducts()) {
if (!productData.isEnabled() || !productData.isRunnable())
continue;
@@ -1102,14 +1109,24 @@ void QbsProject::updateApplicationTargets()
BuildTargetInfo bti;
bti.buildKey = QbsProject::uniqueProductName(productData);
- bti.targetFilePath = FileName::fromString(targetFile);
- bti.projectFilePath = FileName::fromString(projectFile);
+ bti.targetFilePath = FilePath::fromString(targetFile);
+ bti.projectFilePath = FilePath::fromString(projectFile);
bti.isQtcRunnable = isQtcRunnable; // Fixed up below.
bti.usesTerminal = usesTerminal;
bti.displayName = productData.fullDisplayName();
bti.runEnvModifier = [targetFile, productData, this](Utils::Environment &env, bool usingLibraryPaths) {
if (!qbsProject().isValid())
return;
+
+ const QString key = env.toStringList().join(QChar())
+ + QbsProject::uniqueProductName(productData)
+ + QString::number(usingLibraryPaths);
+ const auto it = m_envCache.constFind(key);
+ if (it != m_envCache.constEnd()) {
+ env = it.value();
+ return;
+ }
+
QProcessEnvironment procEnv = env.toProcessEnvironment();
procEnv.insert(QLatin1String("QBS_RUN_FILE_PATH"), targetFile);
QStringList setupRunEnvConfig;
@@ -1128,9 +1145,11 @@ void QbsProject::updateApplicationTargets()
foreach (const QString &key, procEnv.keys())
env.set(key, procEnv.value(key));
}
+
+ m_envCache.insert(key, env);
};
- applications.list.append(bti);
+ applications.append(bti);
}
if (activeTarget())
activeTarget()->setApplicationTargets(applications);
diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h
index 5a2db0fa659..f186bb2c13f 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.h
+++ b/src/plugins/qbsprojectmanager/qbsproject.h
@@ -54,7 +54,7 @@ class QbsProject : public ProjectExplorer::Project
Q_OBJECT
public:
- explicit QbsProject(const Utils::FileName &filename);
+ explicit QbsProject(const Utils::FilePath &filename);
~QbsProject() override;
QStringList filesGeneratedFrom(const QString &sourceFile) const override;
@@ -128,12 +128,14 @@ private:
void updateAfterParse();
void delayedUpdateAfterParse();
void updateProjectNodes();
- Utils::FileName installRoot();
+ Utils::FilePath installRoot();
void projectLoaded() override;
ProjectExplorer::ProjectImporter *projectImporter() const override;
QVariant additionalData(Core::Id id, const ProjectExplorer::Target *target) const final;
+ ProjectExplorer::DeploymentKnowledge deploymentKnowledge() const override;
+
static bool ensureWriteableQbsFile(const QString &file);
template<typename Options> qbs::AbstractJob *buildOrClean(const Options &opts,
@@ -162,6 +164,8 @@ private:
QTimer m_parsingDelay;
QList<ProjectExplorer::ExtraCompiler *> m_extraCompilers;
bool m_extraCompilersPending = false;
+
+ QHash<QString, Utils::Environment> m_envCache;
};
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp b/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp
index b1d5adb8494..69c4e5af1d5 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp
@@ -54,18 +54,18 @@ namespace Internal {
struct BuildGraphData
{
- FileName bgFilePath;
+ FilePath bgFilePath;
QVariantMap overriddenProperties;
- FileName cCompilerPath;
- FileName cxxCompilerPath;
- FileName qtBinPath;
- FileName sysroot;
+ FilePath cCompilerPath;
+ FilePath cxxCompilerPath;
+ FilePath qtBinPath;
+ FilePath sysroot;
QString buildVariant;
};
static BuildGraphData extractBgData(const qbs::Project::BuildGraphInfo &bgInfo)
{
BuildGraphData bgData;
- bgData.bgFilePath = FileName::fromString(bgInfo.bgFilePath);
+ bgData.bgFilePath = FilePath::fromString(bgInfo.bgFilePath);
bgData.overriddenProperties = bgInfo.overriddenProperties;
const QVariantMap &moduleProps = bgInfo.requestedProperties;
const QVariantMap prjCompilerPathByLanguage
@@ -73,17 +73,17 @@ static BuildGraphData extractBgData(const qbs::Project::BuildGraphInfo &bgInfo)
const QString prjCompilerPath = moduleProps.value("cpp.compilerPath").toString();
const QStringList prjToolchain = moduleProps.value("qbs.toolchain").toStringList();
const bool prjIsMsvc = prjToolchain.contains("msvc");
- bgData.cCompilerPath = FileName::fromString(
+ bgData.cCompilerPath = FilePath::fromString(
prjIsMsvc ? prjCompilerPath : prjCompilerPathByLanguage.value("c").toString());
- bgData.cxxCompilerPath = FileName::fromString(
+ bgData.cxxCompilerPath = FilePath::fromString(
prjIsMsvc ? prjCompilerPath : prjCompilerPathByLanguage.value("cpp").toString());
- bgData.qtBinPath = FileName::fromString(moduleProps.value("Qt.core.binPath").toString());
- bgData.sysroot = FileName::fromString(moduleProps.value("qbs.sysroot").toString());
+ bgData.qtBinPath = FilePath::fromString(moduleProps.value("Qt.core.binPath").toString());
+ bgData.sysroot = FilePath::fromString(moduleProps.value("qbs.sysroot").toString());
bgData.buildVariant = moduleProps.value("qbs.buildVariant").toString();
return bgData;
}
-QbsProjectImporter::QbsProjectImporter(const FileName &path) : QtProjectImporter(path)
+QbsProjectImporter::QbsProjectImporter(const FilePath &path) : QtProjectImporter(path)
{
}
@@ -93,7 +93,7 @@ static QString buildDir(const QString &projectFilePath, const Kit *k)
ProjectMacroExpander expander(projectFilePath, projectName, k, QString(),
BuildConfiguration::Unknown);
const QString projectDir
- = Project::projectDirectory(FileName::fromString(projectFilePath)).toString();
+ = Project::projectDirectory(FilePath::fromString(projectFilePath)).toString();
const QString buildPath = expander.expand(ProjectExplorerPlugin::buildDirectoryTemplate());
return FileUtils::resolvePath(projectDir, buildPath);
}
@@ -136,7 +136,7 @@ QStringList QbsProjectImporter::importCandidates()
return candidates;
}
-QList<void *> QbsProjectImporter::examineDirectory(const FileName &importPath) const
+QList<void *> QbsProjectImporter::examineDirectory(const FilePath &importPath) const
{
qCDebug(qbsPmLog) << "examining build directory" << importPath.toUserOutput();
QList<void *> data;
@@ -163,14 +163,14 @@ bool QbsProjectImporter::matchKit(void *directoryData, const Kit *k) const
const auto * const bgData = static_cast<BuildGraphData *>(directoryData);
qCDebug(qbsPmLog) << "matching kit" << k->displayName() << "against imported build"
<< bgData->bgFilePath.toUserOutput();
- if (ToolChainKitInformation::toolChains(k).isEmpty() && bgData->cCompilerPath.isEmpty()
+ if (ToolChainKitAspect::toolChains(k).isEmpty() && bgData->cCompilerPath.isEmpty()
&& bgData->cxxCompilerPath.isEmpty()) {
return true;
}
const ToolChain * const cToolchain
- = ToolChainKitInformation::toolChain(k, Constants::C_LANGUAGE_ID);
+ = ToolChainKitAspect::toolChain(k, Constants::C_LANGUAGE_ID);
const ToolChain * const cxxToolchain
- = ToolChainKitInformation::toolChain(k, Constants::CXX_LANGUAGE_ID);
+ = ToolChainKitAspect::toolChain(k, Constants::CXX_LANGUAGE_ID);
if (!bgData->cCompilerPath.isEmpty()) {
if (!cToolchain)
return false;
@@ -183,14 +183,14 @@ bool QbsProjectImporter::matchKit(void *directoryData, const Kit *k) const
if (bgData->cxxCompilerPath != cxxToolchain->compilerCommand())
return false;
}
- const QtSupport::BaseQtVersion * const qtVersion = QtSupport::QtKitInformation::qtVersion(k);
+ const QtSupport::BaseQtVersion * const qtVersion = QtSupport::QtKitAspect::qtVersion(k);
if (!bgData->qtBinPath.isEmpty()) {
if (!qtVersion)
return false;
if (bgData->qtBinPath != qtVersion->binPath())
return false;
}
- if (bgData->sysroot != SysRootKitInformation::sysRoot(k))
+ if (bgData->sysroot != SysRootKitAspect::sysRoot(k))
return false;
qCDebug(qbsPmLog) << "Kit matches";
@@ -203,8 +203,7 @@ Kit *QbsProjectImporter::createKit(void *directoryData) const
qCDebug(qbsPmLog) << "creating kit for imported build" << bgData->bgFilePath.toUserOutput();
QtVersionData qtVersionData;
if (!bgData->qtBinPath.isEmpty()) {
- FileName qmakeFilePath = bgData->qtBinPath;
- qmakeFilePath.appendPath(HostOsInfo::withExecutableSuffix("qmake"));
+ const FilePath qmakeFilePath = bgData->qtBinPath.pathAppended(HostOsInfo::withExecutableSuffix("qmake"));
qtVersionData = findOrCreateQtVersion(qmakeFilePath);
}
return createTemporaryKit(qtVersionData,[this, bgData](Kit *k) -> void {
@@ -215,9 +214,9 @@ Kit *QbsProjectImporter::createKit(void *directoryData) const
tcData << findOrCreateToolChains(bgData->cCompilerPath, Constants::C_LANGUAGE_ID);
foreach (const ToolChainData &tc, tcData) {
if (!tc.tcs.isEmpty())
- ToolChainKitInformation::setToolChain(k, tc.tcs.first());
+ ToolChainKitAspect::setToolChain(k, tc.tcs.first());
}
- SysRootKitInformation::setSysRoot(k, bgData->sysroot);
+ SysRootKitAspect::setSysRoot(k, bgData->sysroot);
});
}
diff --git a/src/plugins/qbsprojectmanager/qbsprojectimporter.h b/src/plugins/qbsprojectmanager/qbsprojectimporter.h
index 4aa3682a384..345e57522bd 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectimporter.h
+++ b/src/plugins/qbsprojectmanager/qbsprojectimporter.h
@@ -35,11 +35,11 @@ class QbsProjectImporter final : public QtSupport::QtProjectImporter
Q_OBJECT
public:
- QbsProjectImporter(const Utils::FileName &path);
+ QbsProjectImporter(const Utils::FilePath &path);
private:
QStringList importCandidates() override;
- QList<void *> examineDirectory(const Utils::FileName &importPath) const override;
+ QList<void *> examineDirectory(const Utils::FilePath &importPath) const override;
bool matchKit(void *directoryData, const ProjectExplorer::Kit *k) const override;
ProjectExplorer::Kit *createKit(void *directoryData) const override;
const QList<ProjectExplorer::BuildInfo> buildInfoListForKit(const ProjectExplorer::Kit *k,
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp
index b82a93987f9..41cbe1763bd 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp
@@ -165,7 +165,7 @@ void QbsManager::addProfile(const QString &name, const QVariantMap &data)
void QbsManager::addQtProfileFromKit(const QString &profileName, const ProjectExplorer::Kit *k)
{
- if (const QtSupport::BaseQtVersion * const qt = QtSupport::QtKitInformation::qtVersion(k)) {
+ if (const QtSupport::BaseQtVersion * const qt = QtSupport::QtKitAspect::qtVersion(k)) {
qbs::Profile(profileName, settings()).setValue("moduleProviders.Qt.qmakeFilePaths",
qt->qmakeCommand().toString());
}
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.pro b/src/plugins/qbsprojectmanager/qbsprojectmanager.pro
index bef7cd2a059..831422f2621 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanager.pro
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.pro
@@ -20,7 +20,6 @@ HEADERS = \
defaultpropertyprovider.h \
propertyprovider.h \
qbsbuildconfiguration.h \
- qbsbuildconfigurationwidget.h \
qbsbuildstep.h \
qbscleanstep.h \
qbskitinformation.h \
@@ -45,7 +44,6 @@ SOURCES = \
customqbspropertiesdialog.cpp \
defaultpropertyprovider.cpp \
qbsbuildconfiguration.cpp \
- qbsbuildconfigurationwidget.cpp \
qbsbuildstep.cpp \
qbscleanstep.cpp \
qbsinstallstep.cpp \
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs b/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs
index 45e5d1f3a4c..1ef3f1b63bc 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs
@@ -66,8 +66,6 @@ QtcPlugin {
"propertyprovider.h",
"qbsbuildconfiguration.cpp",
"qbsbuildconfiguration.h",
- "qbsbuildconfigurationwidget.cpp",
- "qbsbuildconfigurationwidget.h",
"qbsbuildstep.cpp",
"qbsbuildstep.h",
"qbsbuildstepconfigwidget.ui",
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h b/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h
index 8fe5f9170e1..43cf1ce722a 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h
@@ -88,6 +88,7 @@ const char CPP_CCOMPILERNAME[] = "cpp.cCompilerName";
const char CPP_CXXCOMPILERNAME[] = "cpp.cxxCompilerName";
const char CPP_PLATFORMCOMMONCOMPILERFLAGS[] = "cpp.platformCommonCompilerFlags";
const char CPP_PLATFORMLINKERFLAGS[] = "cpp.platformLinkerFlags";
+const char CPP_VCVARSALLPATH[] = "cpp.vcvarsallPath";
const char XCODE_DEVELOPERPATH[] = "xcode.developerPath";
const char XCODE_SDK[] = "xcode.sdk";
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp
index 3087dfc7a91..f8eb477e649 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp
@@ -54,6 +54,7 @@
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/projectmanager.h>
#include <projectexplorer/projecttree.h>
+#include <projectexplorer/runcontrol.h>
#include <projectexplorer/session.h>
#include <projectexplorer/target.h>
@@ -91,7 +92,9 @@ public:
QbsCleanStepFactory cleanStepFactory;
QbsInstallStepFactory installStepFactory;
QbsRunConfigurationFactory runConfigFactory;
+ SimpleRunWorkerFactory<SimpleTargetRunner, QbsRunConfiguration> runWorkerFactory;
QbsProfilesSettingsPage profilesSetttingsPage;
+ QbsKitAspect qbsKitAspect;
};
QbsProjectManagerPlugin::~QbsProjectManagerPlugin()
@@ -112,7 +115,6 @@ bool QbsProjectManagerPlugin::initialize(const QStringList &arguments, QString *
Core::HelpManager::registerDocumentation({Core::HelpManager::documentationPath() + "/qbs.qch"});
ProjectManager::registerProjectType<QbsProject>(QmlJSTools::Constants::QBS_MIMETYPE);
- KitManager::registerKitInformation<QbsKitInformation>();
//menus
// Build Menu:
@@ -219,16 +221,6 @@ bool QbsProjectManagerPlugin::initialize(const QStringList &arguments, QString *
connect(m_buildSubprojectCtx, &QAction::triggered,
this, &QbsProjectManagerPlugin::buildSubprojectContextMenu);
- m_buildSubproject = new Utils::ParameterAction(tr("Build Subproject"), tr("Build Subproject \"%1\""),
- Utils::ParameterAction::AlwaysEnabled, this);
- command = Core::ActionManager::registerAction(m_buildSubproject, Constants::ACTION_BUILD_SUBPROJECT);
- command->setAttribute(Core::Command::CA_Hide);
- command->setAttribute(Core::Command::CA_UpdateText);
- command->setDescription(m_buildFile->text());
- command->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+B")));
- mbuild->addAction(command, ProjectExplorer::Constants::G_BUILD_BUILD);
- connect(m_buildSubproject, &QAction::triggered, this, &QbsProjectManagerPlugin::buildSubproject);
-
m_cleanSubprojectCtx = new QAction(tr("Clean"), this);
command = Core::ActionManager::registerAction(
m_cleanSubprojectCtx, Constants::ACTION_CLEAN_SUBPROJECT_CONTEXT, projectContext);
@@ -237,17 +229,6 @@ bool QbsProjectManagerPlugin::initialize(const QStringList &arguments, QString *
connect(m_cleanSubprojectCtx, &QAction::triggered,
this, &QbsProjectManagerPlugin::cleanSubprojectContextMenu);
- m_cleanSubproject = new Utils::ParameterAction(
- tr("Clean Subproject"), tr("Clean Subproject \"%1\""),
- Utils::ParameterAction::AlwaysEnabled, this);
- command = Core::ActionManager::registerAction(m_cleanSubproject,
- Constants::ACTION_CLEAN_SUBPROJECT);
- command->setAttribute(Core::Command::CA_Hide);
- command->setAttribute(Core::Command::CA_UpdateText);
- mbuild->addAction(command, ProjectExplorer::Constants::G_BUILD_CLEAN);
- connect(m_cleanSubproject, &QAction::triggered, this,
- &QbsProjectManagerPlugin::cleanSubproject);
-
m_rebuildSubprojectCtx = new QAction(tr("Rebuild"), this);
command = Core::ActionManager::registerAction(
m_rebuildSubprojectCtx, Constants::ACTION_REBUILD_SUBPROJECT_CONTEXT,
@@ -257,17 +238,6 @@ bool QbsProjectManagerPlugin::initialize(const QStringList &arguments, QString *
connect(m_rebuildSubprojectCtx, &QAction::triggered,
this, &QbsProjectManagerPlugin::rebuildSubprojectContextMenu);
- m_rebuildSubproject = new Utils::ParameterAction(
- tr("Rebuild Subproject"), tr("Rebuild Subproject \"%1\""),
- Utils::ParameterAction::AlwaysEnabled, this);
- command = Core::ActionManager::registerAction(m_rebuildSubproject,
- Constants::ACTION_REBUILD_SUBPROJECT);
- command->setAttribute(Core::Command::CA_Hide);
- command->setAttribute(Core::Command::CA_UpdateText);
- mbuild->addAction(command, ProjectExplorer::Constants::G_BUILD_REBUILD);
- connect(m_rebuildSubproject, &QAction::triggered, this,
- &QbsProjectManagerPlugin::rebuildSubproject);
-
// Connect
connect(ProjectTree::instance(), &ProjectTree::currentNodeChanged,
@@ -313,12 +283,12 @@ void QbsProjectManagerPlugin::projectWasAdded(Project *project)
void QbsProjectManagerPlugin::updateContextActions()
{
auto project = qobject_cast<Internal::QbsProject *>(ProjectTree::currentProject());
- const Node *node = ProjectTree::findCurrentNode();
+ const Node *node = ProjectTree::currentNode();
bool isEnabled = !BuildManager::isBuilding(project)
&& project && !project->isParsing()
&& node && node->isEnabled();
- bool isFile = project && node && (node->nodeType() == NodeType::File);
+ const bool isFile = project && node && node->asFileNode();
const bool isProduct = project && node && dynamic_cast<const QbsProductNode *>(node);
const auto subproject = dynamic_cast<const QbsProjectNode *>(node);
bool isSubproject = project && subproject && subproject != project->rootProjectNode();
@@ -346,32 +316,31 @@ void QbsProjectManagerPlugin::updateBuildActions()
bool enabled = false;
bool fileVisible = false;
bool productVisible = false;
- bool subprojectVisible = false;
QString fileName;
QString productName;
- QString subprojectName;
if (Node *editorNode = currentEditorNode()) {
- QbsProject *editorProject = currentEditorProject();
- enabled = editorProject
- && !BuildManager::isBuilding(editorProject)
- && !editorProject->isParsing();
-
fileName = editorNode->filePath().fileName();
- fileVisible = editorProject && editorNode && dynamic_cast<QbsBaseProjectNode *>(editorNode->parentProjectNode());
- auto productNode =
- dynamic_cast<QbsProductNode *>(editorNode ? editorNode->parentProjectNode() : nullptr);
+ ProjectNode *parentProjectNode = editorNode->parentProjectNode();
+ const QbsProductNode *productNode = nullptr;
+ for (const ProjectNode *potentialProductNode = parentProjectNode;
+ potentialProductNode && !productNode;
+ potentialProductNode = potentialProductNode->parentProjectNode()) {
+ productNode = dynamic_cast<const QbsProductNode *>(potentialProductNode);
+ }
+
if (productNode) {
productVisible = true;
productName = productNode->displayName();
}
- auto subprojectNode =
- dynamic_cast<QbsProjectNode *>(productNode ? productNode->parentFolderNode() : nullptr);
- if (subprojectNode && editorProject && subprojectNode != editorProject->rootProjectNode()) {
- subprojectVisible = true;
- subprojectName = subprojectNode->displayName();
+
+ if (QbsProject *editorProject = currentEditorProject()) {
+ enabled = !BuildManager::isBuilding(editorProject) && !editorProject->isParsing();
+ fileVisible = productNode
+ || dynamic_cast<QbsProjectNode *>(parentProjectNode)
+ || dynamic_cast<QbsGroupNode *>(parentProjectNode);
}
}
@@ -388,16 +357,6 @@ void QbsProjectManagerPlugin::updateBuildActions()
m_rebuildProduct->setEnabled(enabled);
m_rebuildProduct->setVisible(productVisible);
m_rebuildProduct->setParameter(productName);
-
- m_buildSubproject->setEnabled(enabled);
- m_buildSubproject->setVisible(subprojectVisible);
- m_buildSubproject->setParameter(subprojectName);
- m_cleanSubproject->setEnabled(enabled);
- m_cleanSubproject->setVisible(subprojectVisible);
- m_cleanSubproject->setParameter(subprojectName);
- m_rebuildSubproject->setEnabled(enabled);
- m_rebuildSubproject->setVisible(subprojectVisible);
- m_rebuildSubproject->setParameter(subprojectName);
}
void QbsProjectManagerPlugin::projectChanged()
@@ -416,7 +375,7 @@ void QbsProjectManagerPlugin::projectChanged()
void QbsProjectManagerPlugin::buildFileContextMenu()
{
- const Node *node = ProjectTree::findCurrentNode();
+ const Node *node = ProjectTree::currentNode();
QTC_ASSERT(node, return);
auto project = dynamic_cast<QbsProject *>(ProjectTree::currentProject());
QTC_ASSERT(project, return);
@@ -453,7 +412,7 @@ void QbsProjectManagerPlugin::rebuildProductContextMenu()
void QbsProjectManagerPlugin::runStepsForProductContextMenu(const QList<Core::Id> &stepTypes)
{
- const Node *node = ProjectTree::findCurrentNode();
+ const Node *node = ProjectTree::currentNode();
QTC_ASSERT(node, return);
auto project = dynamic_cast<QbsProject *>(ProjectTree::currentProject());
QTC_ASSERT(project, return);
@@ -518,7 +477,7 @@ void QbsProjectManagerPlugin::rebuildSubprojectContextMenu()
void QbsProjectManagerPlugin::runStepsForSubprojectContextMenu(const QList<Core::Id> &stepTypes)
{
- const Node *node = ProjectTree::findCurrentNode();
+ const Node *node = ProjectTree::currentNode();
QTC_ASSERT(node, return);
auto project = dynamic_cast<QbsProject *>(ProjectTree::currentProject());
QTC_ASSERT(project, return);
@@ -533,52 +492,6 @@ void QbsProjectManagerPlugin::runStepsForSubprojectContextMenu(const QList<Core:
runStepsForProducts(project, toBuild, {stepTypes});
}
-void QbsProjectManagerPlugin::buildSubproject()
-{
- runStepsForSubproject({Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD)});
-}
-
-void QbsProjectManagerPlugin::cleanSubproject()
-{
- runStepsForSubproject({Core::Id(ProjectExplorer::Constants::BUILDSTEPS_CLEAN)});
-}
-
-void QbsProjectManagerPlugin::rebuildSubproject()
-{
- runStepsForSubproject({
- Core::Id(ProjectExplorer::Constants::BUILDSTEPS_CLEAN),
- Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD)
- });
-}
-
-void QbsProjectManagerPlugin::runStepsForSubproject(const QList<Core::Id> &stepTypes)
-{
- Node *editorNode = currentEditorNode();
- QbsProject *editorProject = currentEditorProject();
- if (!editorNode || !editorProject)
- return;
-
- QbsProjectNode *subproject = nullptr;
- auto start = dynamic_cast<QbsBaseProjectNode *>(editorNode->parentProjectNode());
- while (start && start != editorProject->rootProjectNode()) {
- auto tmp = dynamic_cast<QbsProjectNode *>(start);
- if (tmp) {
- subproject = tmp;
- break;
- }
- start = dynamic_cast<QbsProjectNode *>(start->parentFolderNode());
- }
-
- if (!subproject)
- return;
-
- QStringList toBuild;
- foreach (const qbs::ProductData &data, subproject->qbsProjectData().allProducts())
- toBuild << QbsProject::uniqueProductName(data);
-
- runStepsForProducts(editorProject, toBuild, {stepTypes});
-}
-
void QbsProjectManagerPlugin::buildFiles(QbsProject *project, const QStringList &files,
const QStringList &activeFileTags)
{
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.h b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.h
index 99aa566eff6..f7b37e8d809 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.h
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.h
@@ -64,10 +64,6 @@ class QbsProjectManagerPlugin : public ExtensionSystem::IPlugin
void cleanSubprojectContextMenu();
void rebuildSubprojectContextMenu();
void runStepsForSubprojectContextMenu(const QList<Core::Id> &stepTypes);
- void buildSubproject();
- void cleanSubproject();
- void rebuildSubproject();
- void runStepsForSubproject(const QList<Core::Id> &stepTypes);
void reparseSelectedProject();
void reparseCurrentProject();
@@ -98,9 +94,6 @@ class QbsProjectManagerPlugin : public ExtensionSystem::IPlugin
Utils::ParameterAction *m_buildProduct = nullptr;
Utils::ParameterAction *m_cleanProduct = nullptr;
Utils::ParameterAction *m_rebuildProduct = nullptr;
- Utils::ParameterAction *m_buildSubproject = nullptr;
- Utils::ParameterAction *m_cleanSubproject = nullptr;
- Utils::ParameterAction *m_rebuildSubproject = nullptr;
};
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
index 03cff5f4eb9..d4960b3524e 100644
--- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
@@ -34,6 +34,7 @@
#include <projectexplorer/deploymentdata.h>
#include <projectexplorer/localenvironmentaspect.h>
#include <projectexplorer/project.h>
+#include <projectexplorer/runcontrol.h>
#include <projectexplorer/runconfigurationaspects.h>
#include <projectexplorer/target.h>
@@ -54,12 +55,18 @@ namespace Internal {
QbsRunConfiguration::QbsRunConfiguration(Target *target, Core::Id id)
: RunConfiguration(target, id)
{
- auto envAspect = addAspect<LocalEnvironmentAspect>(target,
- [this](Environment &env) { addToBaseEnvironment(env); });
+ auto envAspect = addAspect<LocalEnvironmentAspect>(target);
+ envAspect->addModifier([this](Environment &env) {
+ bool usingLibraryPaths = aspect<UseLibraryPathsAspect>()->value();
+
+ BuildTargetInfo bti = buildTargetInfo();
+ if (bti.runEnvModifier)
+ bti.runEnvModifier(env, usingLibraryPaths);
+ });
addAspect<ExecutableAspect>();
addAspect<ArgumentsAspect>();
- addAspect<WorkingDirectoryAspect>(envAspect);
+ addAspect<WorkingDirectoryAspect>();
addAspect<TerminalAspect>();
setOutputFormatter<QtSupport::QtOutputFormatter>();
@@ -71,6 +78,10 @@ QbsRunConfiguration::QbsRunConfiguration(Target *target, Core::Id id)
auto dyldAspect = addAspect<UseDyldSuffixAspect>();
connect(dyldAspect, &UseDyldSuffixAspect::changed,
envAspect, &EnvironmentAspect::environmentChanged);
+ envAspect->addModifier([dyldAspect](Environment &env) {
+ if (dyldAspect->value())
+ env.set("DYLD_IMAGE_SUFFIX", "_debug");
+ });
}
connect(project(), &Project::parsingFinished, this,
@@ -85,7 +96,6 @@ QbsRunConfiguration::QbsRunConfiguration(Target *target, Core::Id id)
this, &QbsRunConfiguration::updateTargetInformation);
auto qbsProject = static_cast<QbsProject *>(target->project());
- connect(qbsProject, &QbsProject::dataChanged, this, [this] { m_envCache.clear(); });
connect(qbsProject, &Project::parsingFinished,
this, &QbsRunConfiguration::updateTargetInformation);
}
@@ -110,41 +120,16 @@ void QbsRunConfiguration::doAdditionalSetup(const RunConfigurationCreationInfo &
updateTargetInformation();
}
-void QbsRunConfiguration::addToBaseEnvironment(Utils::Environment &env) const
+Utils::FilePath QbsRunConfiguration::executableToRun(const BuildTargetInfo &targetInfo) const
{
- if (auto dyldAspect = aspect<UseDyldSuffixAspect>()) {
- if (dyldAspect->value())
- env.set("DYLD_IMAGE_SUFFIX", "_debug");
- }
- bool usingLibraryPaths = aspect<UseLibraryPathsAspect>()->value();
-
- const auto key = qMakePair(env.toStringList(), usingLibraryPaths);
- const auto it = m_envCache.constFind(key);
- if (it != m_envCache.constEnd()) {
- env = it.value();
- return;
- }
- BuildTargetInfo bti = buildTargetInfo();
- if (bti.runEnvModifier) {
- if (project()->isParsing() || BuildManager::isBuilding(target())) {
- qCDebug(qbsPmLog) << "qbs project in flux, cannot modify environment";
- return; // Intentionally skips the cache update below.
- }
- bti.runEnvModifier(env, usingLibraryPaths);
- }
- m_envCache.insert(key, env);
-}
-
-Utils::FileName QbsRunConfiguration::executableToRun(const BuildTargetInfo &targetInfo) const
-{
- const FileName appInBuildDir = targetInfo.targetFilePath;
+ const FilePath appInBuildDir = targetInfo.targetFilePath;
if (target()->deploymentData().localInstallRoot().isEmpty())
return appInBuildDir;
const QString deployedAppFilePath = target()->deploymentData()
.deployableForLocalFile(appInBuildDir.toString()).remoteFilePath();
if (deployedAppFilePath.isEmpty())
return appInBuildDir;
- const FileName appInLocalInstallDir = target()->deploymentData().localInstallRoot()
+ const FilePath appInLocalInstallDir = target()->deploymentData().localInstallRoot()
+ deployedAppFilePath;
return appInLocalInstallDir.exists() ? appInLocalInstallDir : appInBuildDir;
}
@@ -152,10 +137,9 @@ Utils::FileName QbsRunConfiguration::executableToRun(const BuildTargetInfo &targ
void QbsRunConfiguration::updateTargetInformation()
{
BuildTargetInfo bti = buildTargetInfo();
- const FileName executable = executableToRun(bti);
+ const FilePath executable = executableToRun(bti);
auto terminalAspect = aspect<TerminalAspect>();
- if (!terminalAspect->isUserSet())
- terminalAspect->setUseTerminal(bti.usesTerminal);
+ terminalAspect->setUseTerminalHint(bti.usesTerminal);
aspect<ExecutableAspect>()->setExecutable(executable);
@@ -163,21 +147,13 @@ void QbsRunConfiguration::updateTargetInformation()
QString defaultWorkingDir = QFileInfo(executable.toString()).absolutePath();
if (!defaultWorkingDir.isEmpty()) {
auto wdAspect = aspect<WorkingDirectoryAspect>();
- wdAspect->setDefaultWorkingDirectory(FileName::fromString(defaultWorkingDir));
+ wdAspect->setDefaultWorkingDirectory(FilePath::fromString(defaultWorkingDir));
}
}
emit enabledChanged();
}
-bool QbsRunConfiguration::canRunForNode(const Node *node) const
-{
- if (auto pn = dynamic_cast<const QbsProductNode *>(node))
- return buildKey() == pn->buildKey();
-
- return false;
-}
-
// --------------------------------------------------------------------
// QbsRunConfigurationFactory:
// --------------------------------------------------------------------
@@ -187,8 +163,6 @@ QbsRunConfigurationFactory::QbsRunConfigurationFactory()
registerRunConfiguration<QbsRunConfiguration>("Qbs.RunConfiguration:");
addSupportedProjectType(Constants::PROJECT_ID);
addSupportedTargetDeviceType(ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE);
-
- addRunWorkerFactory<SimpleTargetRunner>(ProjectExplorer::Constants::NORMAL_RUN_MODE);
}
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
index 94b3ae65350..934f676624b 100644
--- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
+++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
@@ -41,19 +41,13 @@ class QbsRunConfiguration : public ProjectExplorer::RunConfiguration
public:
QbsRunConfiguration(ProjectExplorer::Target *target, Core::Id id);
- void addToBaseEnvironment(Utils::Environment &env) const;
-
private:
- Utils::FileName executableToRun(const ProjectExplorer::BuildTargetInfo &targetInfo) const;
+ Utils::FilePath executableToRun(const ProjectExplorer::BuildTargetInfo &targetInfo) const;
QVariantMap toMap() const final;
bool fromMap(const QVariantMap &map) final;
void doAdditionalSetup(const ProjectExplorer::RunConfigurationCreationInfo &rci) final;
- bool canRunForNode(const ProjectExplorer::Node *node) const final;
void updateTargetInformation();
-
- using EnvCache = QHash<QPair<QStringList, bool>, Utils::Environment>;
- mutable EnvCache m_envCache;
};
class QbsRunConfigurationFactory : public ProjectExplorer::RunConfigurationFactory