forked from qt-creator/qt-creator
CMakeProjectManager: Use aspects more directly in build configuration
Change-Id: I35b9a31c158cac8eccb44ffb3f4e2d21d8183b8b Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
@@ -174,7 +174,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
|
|||||||
m_configTextFilterModel(new CategorySortFilterModel(this))
|
m_configTextFilterModel(new CategorySortFilterModel(this))
|
||||||
{
|
{
|
||||||
QTC_ASSERT(bs, return);
|
QTC_ASSERT(bs, return);
|
||||||
BuildConfiguration *bc = bs->buildConfiguration();
|
CMakeBuildConfiguration *bc = bs->cmakeBuildConfiguration();
|
||||||
|
|
||||||
m_configureDetailsWidget = new DetailsWidget;
|
m_configureDetailsWidget = new DetailsWidget;
|
||||||
|
|
||||||
@@ -189,11 +189,10 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
|
|||||||
m_configModel->flush(); // clear out config cache...;
|
m_configModel->flush(); // clear out config cache...;
|
||||||
});
|
});
|
||||||
|
|
||||||
auto buildTypeAspect = bc->aspect<BuildTypeAspect>();
|
connect(&bc->buildTypeAspect, &BaseAspect::changed, this, [this, bc] {
|
||||||
connect(buildTypeAspect, &BaseAspect::changed, this, [this, buildTypeAspect] {
|
|
||||||
if (!m_buildSystem->isMultiConfig()) {
|
if (!m_buildSystem->isMultiConfig()) {
|
||||||
CMakeConfig config;
|
CMakeConfig config;
|
||||||
config << CMakeConfigItem("CMAKE_BUILD_TYPE", buildTypeAspect->value().toUtf8());
|
config << CMakeConfigItem("CMAKE_BUILD_TYPE", bc->buildTypeAspect().toUtf8());
|
||||||
|
|
||||||
m_configModel->setBatchEditConfiguration(config);
|
m_configModel->setBatchEditConfiguration(config);
|
||||||
}
|
}
|
||||||
@@ -326,15 +325,14 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
auto configureEnvironmentAspectWidget
|
auto configureEnvironmentAspectWidget = bc->configureEnv.createConfigWidget();
|
||||||
= bc->aspect<ConfigureEnvironmentAspect>()->createConfigWidget();
|
|
||||||
configureEnvironmentAspectWidget->setContentsMargins(0, 0, 0, 0);
|
configureEnvironmentAspectWidget->setContentsMargins(0, 0, 0, 0);
|
||||||
configureEnvironmentAspectWidget->layout()->setContentsMargins(0, 0, 0, 0);
|
configureEnvironmentAspectWidget->layout()->setContentsMargins(0, 0, 0, 0);
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
Form {
|
Form {
|
||||||
buildDirAspect, br,
|
buildDirAspect, br,
|
||||||
bc->aspect<BuildTypeAspect>(), br,
|
bc->buildTypeAspect, br,
|
||||||
qmlDebugAspect
|
qmlDebugAspect
|
||||||
},
|
},
|
||||||
m_warningMessageLabel,
|
m_warningMessageLabel,
|
||||||
@@ -345,8 +343,8 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
|
|||||||
Column {
|
Column {
|
||||||
cmakeConfiguration,
|
cmakeConfiguration,
|
||||||
Row {
|
Row {
|
||||||
bc->aspect<InitialCMakeArgumentsAspect>(), br,
|
bc->initialCMakeArguments, br,
|
||||||
bc->aspect<AdditionalCMakeOptionsAspect>()
|
bc->additionalCMakeOptions
|
||||||
},
|
},
|
||||||
m_reconfigureButton,
|
m_reconfigureButton,
|
||||||
}
|
}
|
||||||
@@ -506,14 +504,14 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
|
|||||||
updateInitialCMakeArguments();
|
updateInitialCMakeArguments();
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(bc->aspect<InitialCMakeArgumentsAspect>(),
|
connect(&bc->initialCMakeArguments,
|
||||||
&Utils::BaseAspect::labelLinkActivated,
|
&Utils::BaseAspect::labelLinkActivated,
|
||||||
this,
|
this,
|
||||||
[this](const QString &) {
|
[this](const QString &) {
|
||||||
const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildSystem->kit());
|
const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildSystem->kit());
|
||||||
CMakeTool::openCMakeHelpUrl(tool, "%1/manual/cmake.1.html#options");
|
CMakeTool::openCMakeHelpUrl(tool, "%1/manual/cmake.1.html#options");
|
||||||
});
|
});
|
||||||
connect(bc->aspect<AdditionalCMakeOptionsAspect>(),
|
connect(&bc->additionalCMakeOptions,
|
||||||
&Utils::BaseAspect::labelLinkActivated, this, [this](const QString &) {
|
&Utils::BaseAspect::labelLinkActivated, this, [this](const QString &) {
|
||||||
const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildSystem->kit());
|
const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildSystem->kit());
|
||||||
CMakeTool::openCMakeHelpUrl(tool, "%1/manual/cmake.1.html#options");
|
CMakeTool::openCMakeHelpUrl(tool, "%1/manual/cmake.1.html#options");
|
||||||
@@ -629,14 +627,14 @@ void CMakeBuildSettingsWidget::updateInitialCMakeArguments()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto bc = m_buildSystem->buildConfiguration();
|
auto bc = m_buildSystem->cmakeBuildConfiguration();
|
||||||
bc->aspect<InitialCMakeArgumentsAspect>()->setCMakeConfiguration(initialList);
|
bc->initialCMakeArguments.setCMakeConfiguration(initialList);
|
||||||
|
|
||||||
// value() will contain only the unknown arguments (the non -D/-U arguments)
|
// value() will contain only the unknown arguments (the non -D/-U arguments)
|
||||||
// As the user would expect to have e.g. "--preset" from "Initial Configuration"
|
// As the user would expect to have e.g. "--preset" from "Initial Configuration"
|
||||||
// to "Current Configuration" as additional parameters
|
// to "Current Configuration" as additional parameters
|
||||||
m_buildSystem->setAdditionalCMakeArguments(ProcessArgs::splitArgs(
|
m_buildSystem->setAdditionalCMakeArguments(ProcessArgs::splitArgs(
|
||||||
bc->aspect<InitialCMakeArgumentsAspect>()->value(), HostOsInfo::hostOs()));
|
bc->initialCMakeArguments(), HostOsInfo::hostOs()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMakeBuildSettingsWidget::kitCMakeConfiguration()
|
void CMakeBuildSettingsWidget::kitCMakeConfiguration()
|
||||||
@@ -759,12 +757,12 @@ void CMakeBuildSettingsWidget::updateButtonState()
|
|||||||
const bool isInitial = isInitialConfiguration();
|
const bool isInitial = isInitialConfiguration();
|
||||||
m_resetButton->setEnabled(m_configModel->hasChanges(isInitial) && !isParsing);
|
m_resetButton->setEnabled(m_configModel->hasChanges(isInitial) && !isParsing);
|
||||||
|
|
||||||
BuildConfiguration *bc = m_buildSystem->buildConfiguration();
|
CMakeBuildConfiguration *bc = m_buildSystem->cmakeBuildConfiguration();
|
||||||
bc->aspect<InitialCMakeArgumentsAspect>()->setVisible(isInitialConfiguration());
|
bc->initialCMakeArguments.setVisible(isInitialConfiguration());
|
||||||
bc->aspect<AdditionalCMakeOptionsAspect>()->setVisible(!isInitialConfiguration());
|
bc->additionalCMakeOptions.setVisible(!isInitialConfiguration());
|
||||||
|
|
||||||
bc->aspect<InitialCMakeArgumentsAspect>()->setEnabled(!isParsing);
|
bc->initialCMakeArguments.setEnabled(!isParsing);
|
||||||
bc->aspect<AdditionalCMakeOptionsAspect>()->setEnabled(!isParsing);
|
bc->additionalCMakeOptions.setEnabled(!isParsing);
|
||||||
|
|
||||||
// Update label and text boldness of the reconfigure button
|
// Update label and text boldness of the reconfigure button
|
||||||
QFont reconfigureButtonFont = m_reconfigureButton->font();
|
QFont reconfigureButtonFont = m_reconfigureButton->font();
|
||||||
@@ -823,7 +821,7 @@ void CMakeBuildSettingsWidget::updateFromKit()
|
|||||||
const QStringList additionalKitCMake = ProcessArgs::splitArgs(
|
const QStringList additionalKitCMake = ProcessArgs::splitArgs(
|
||||||
CMakeConfigurationKitAspect::additionalConfiguration(k), HostOsInfo::hostOs());
|
CMakeConfigurationKitAspect::additionalConfiguration(k), HostOsInfo::hostOs());
|
||||||
const QStringList additionalInitialCMake = ProcessArgs::splitArgs(
|
const QStringList additionalInitialCMake = ProcessArgs::splitArgs(
|
||||||
m_buildSystem->buildConfiguration()->aspect<InitialCMakeArgumentsAspect>()->value(),
|
m_buildSystem->cmakeBuildConfiguration()->initialCMakeArguments(),
|
||||||
HostOsInfo::hostOs());
|
HostOsInfo::hostOs());
|
||||||
|
|
||||||
QStringList mergedArgumentList;
|
QStringList mergedArgumentList;
|
||||||
@@ -832,8 +830,8 @@ void CMakeBuildSettingsWidget::updateFromKit()
|
|||||||
additionalKitCMake.begin(),
|
additionalKitCMake.begin(),
|
||||||
additionalKitCMake.end(),
|
additionalKitCMake.end(),
|
||||||
std::back_inserter(mergedArgumentList));
|
std::back_inserter(mergedArgumentList));
|
||||||
m_buildSystem->buildConfiguration()->aspect<InitialCMakeArgumentsAspect>()->setValue(
|
m_buildSystem->cmakeBuildConfiguration()->initialCMakeArguments
|
||||||
ProcessArgs::joinArgs(mergedArgumentList));
|
.setValue(ProcessArgs::joinArgs(mergedArgumentList));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMakeBuildSettingsWidget::updateConfigurationStateIndex(int index)
|
void CMakeBuildSettingsWidget::updateConfigurationStateIndex(int index)
|
||||||
@@ -1362,8 +1360,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
|
|||||||
{
|
{
|
||||||
m_buildSystem = new CMakeBuildSystem(this);
|
m_buildSystem = new CMakeBuildSystem(this);
|
||||||
|
|
||||||
const auto buildDirAspect = aspect<BuildDirectoryAspect>();
|
buildDir.setValueAcceptor(
|
||||||
buildDirAspect->setValueAcceptor(
|
|
||||||
[](const QString &oldDir, const QString &newDir) -> std::optional<QString> {
|
[](const QString &oldDir, const QString &newDir) -> std::optional<QString> {
|
||||||
if (oldDir.isEmpty())
|
if (oldDir.isEmpty())
|
||||||
return newDir;
|
return newDir;
|
||||||
@@ -1385,11 +1382,20 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
|
|||||||
return newDir;
|
return newDir;
|
||||||
});
|
});
|
||||||
|
|
||||||
auto initialCMakeArgumentsAspect = addAspect<InitialCMakeArgumentsAspect>();
|
// Will not be displayed, only persisted
|
||||||
initialCMakeArgumentsAspect->setMacroExpanderProvider([this] { return macroExpander(); });
|
sourceDirectory.setSettingsKey("CMake.Source.Directory");
|
||||||
|
|
||||||
auto additionalCMakeArgumentsAspect = addAspect<AdditionalCMakeOptionsAspect>();
|
buildTypeAspect.setSettingsKey(CMAKE_BUILD_TYPE);
|
||||||
additionalCMakeArgumentsAspect->setMacroExpanderProvider([this] { return macroExpander(); });
|
buildTypeAspect.setLabelText(Tr::tr("Build type:"));
|
||||||
|
buildTypeAspect.setDisplayStyle(StringAspect::LineEditDisplay);
|
||||||
|
buildTypeAspect.setDefaultValue("Unknown");
|
||||||
|
|
||||||
|
initialCMakeArguments.setMacroExpanderProvider([this] { return macroExpander(); });
|
||||||
|
|
||||||
|
additionalCMakeOptions.setSettingsKey("CMake.Additional.Options");
|
||||||
|
additionalCMakeOptions.setLabelText(Tr::tr("Additional CMake <a href=\"options\">options</a>:"));
|
||||||
|
additionalCMakeOptions.setDisplayStyle(StringAspect::LineEditDisplay);
|
||||||
|
additionalCMakeOptions.setMacroExpanderProvider([this] { return macroExpander(); });
|
||||||
|
|
||||||
macroExpander()->registerVariable(DEVELOPMENT_TEAM_FLAG,
|
macroExpander()->registerVariable(DEVELOPMENT_TEAM_FLAG,
|
||||||
Tr::tr("The CMake flag for the development team"),
|
Tr::tr("The CMake flag for the development team"),
|
||||||
@@ -1433,13 +1439,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
|
|||||||
return QLatin1String();
|
return QLatin1String();
|
||||||
});
|
});
|
||||||
|
|
||||||
addAspect<SourceDirectoryAspect>();
|
qmlDebugging.setBuildConfiguration(this);
|
||||||
addAspect<BuildTypeAspect>();
|
|
||||||
|
|
||||||
auto qmlDebuggingAspect = addAspect<QtSupport::QmlDebuggingAspect>();
|
|
||||||
qmlDebuggingAspect->setBuildConfiguration(this);
|
|
||||||
|
|
||||||
addAspect<ConfigureEnvironmentAspect>(this);
|
|
||||||
|
|
||||||
setInitialBuildAndCleanSteps(target);
|
setInitialBuildAndCleanSteps(target);
|
||||||
|
|
||||||
@@ -1450,10 +1450,6 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
|
|||||||
const QString buildType = extraInfoMap.contains(CMAKE_BUILD_TYPE)
|
const QString buildType = extraInfoMap.contains(CMAKE_BUILD_TYPE)
|
||||||
? extraInfoMap.value(CMAKE_BUILD_TYPE).toString()
|
? extraInfoMap.value(CMAKE_BUILD_TYPE).toString()
|
||||||
: info.typeName;
|
: info.typeName;
|
||||||
const TriState qmlDebugging = extraInfoMap.contains(Constants::QML_DEBUG_SETTING)
|
|
||||||
? TriState::fromVariant(
|
|
||||||
extraInfoMap.value(Constants::QML_DEBUG_SETTING))
|
|
||||||
: TriState::Default;
|
|
||||||
|
|
||||||
CommandLine cmd = defaultInitialCMakeCommand(k, buildType);
|
CommandLine cmd = defaultInitialCMakeCommand(k, buildType);
|
||||||
m_buildSystem->setIsMultiConfig(CMakeGeneratorKitAspect::isMultiConfigGenerator(k));
|
m_buildSystem->setIsMultiConfig(CMakeGeneratorKitAspect::isMultiConfigGenerator(k));
|
||||||
@@ -1545,15 +1541,17 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (extraInfoMap.contains(Constants::CMAKE_HOME_DIR))
|
if (extraInfoMap.contains(Constants::CMAKE_HOME_DIR))
|
||||||
setSourceDirectory(FilePath::fromVariant(extraInfoMap.value(Constants::CMAKE_HOME_DIR)));
|
sourceDirectory.setValue(FilePath::fromVariant(extraInfoMap.value(Constants::CMAKE_HOME_DIR)));
|
||||||
|
|
||||||
aspect<QtSupport::QmlDebuggingAspect>()->setValue(qmlDebugging);
|
qmlDebugging.setValue(extraInfoMap.contains(Constants::QML_DEBUG_SETTING)
|
||||||
|
? TriState::fromVariant(extraInfoMap.value(Constants::QML_DEBUG_SETTING))
|
||||||
|
: TriState::Default);
|
||||||
|
|
||||||
if (qt && qt->isQmlDebuggingSupported())
|
if (qt && qt->isQmlDebuggingSupported())
|
||||||
cmd.addArg("-DCMAKE_CXX_FLAGS_INIT:STRING=%{" + QLatin1String(QT_QML_DEBUG_FLAG) + "}");
|
cmd.addArg("-DCMAKE_CXX_FLAGS_INIT:STRING=%{" + QLatin1String(QT_QML_DEBUG_FLAG) + "}");
|
||||||
|
|
||||||
CMakeProject *cmakeProject = static_cast<CMakeProject *>(target->project());
|
CMakeProject *cmakeProject = static_cast<CMakeProject *>(target->project());
|
||||||
aspect<ConfigureEnvironmentAspect>()->setUserEnvironmentChanges(
|
configureEnv.setUserEnvironmentChanges(
|
||||||
getEnvironmentItemsFromCMakeConfigurePreset(cmakeProject, k));
|
getEnvironmentItemsFromCMakeConfigurePreset(cmakeProject, k));
|
||||||
|
|
||||||
QStringList initialCMakeArguments = cmd.splitArguments();
|
QStringList initialCMakeArguments = cmd.splitArguments();
|
||||||
@@ -1664,12 +1662,12 @@ QStringList CMakeBuildSystem::configurationChangesArguments(bool initialParamete
|
|||||||
|
|
||||||
QStringList CMakeBuildSystem::initialCMakeArguments() const
|
QStringList CMakeBuildSystem::initialCMakeArguments() const
|
||||||
{
|
{
|
||||||
return buildConfiguration()->aspect<InitialCMakeArgumentsAspect>()->allValues();
|
return cmakeBuildConfiguration()->initialCMakeArguments.allValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
CMakeConfig CMakeBuildSystem::initialCMakeConfiguration() const
|
CMakeConfig CMakeBuildSystem::initialCMakeConfiguration() const
|
||||||
{
|
{
|
||||||
return buildConfiguration()->aspect<InitialCMakeArgumentsAspect>()->cmakeConfiguration();
|
return cmakeBuildConfiguration()->initialCMakeArguments.cmakeConfiguration();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMakeBuildSystem::setConfigurationFromCMake(const CMakeConfig &config)
|
void CMakeBuildSystem::setConfigurationFromCMake(const CMakeConfig &config)
|
||||||
@@ -1706,7 +1704,7 @@ void CMakeBuildSystem::clearError(ForceEnabledChanged fec)
|
|||||||
void CMakeBuildSystem::setInitialCMakeArguments(const QStringList &args)
|
void CMakeBuildSystem::setInitialCMakeArguments(const QStringList &args)
|
||||||
{
|
{
|
||||||
QStringList additionalArguments;
|
QStringList additionalArguments;
|
||||||
buildConfiguration()->aspect<InitialCMakeArgumentsAspect>()->setAllValues(args.join('\n'), additionalArguments);
|
cmakeBuildConfiguration()->initialCMakeArguments.setAllValues(args.join('\n'), additionalArguments);
|
||||||
|
|
||||||
// Set the unknown additional arguments also for the "Current Configuration"
|
// Set the unknown additional arguments also for the "Current Configuration"
|
||||||
setAdditionalCMakeArguments(additionalArguments);
|
setAdditionalCMakeArguments(additionalArguments);
|
||||||
@@ -1714,7 +1712,7 @@ void CMakeBuildSystem::setInitialCMakeArguments(const QStringList &args)
|
|||||||
|
|
||||||
QStringList CMakeBuildSystem::additionalCMakeArguments() const
|
QStringList CMakeBuildSystem::additionalCMakeArguments() const
|
||||||
{
|
{
|
||||||
return ProcessArgs::splitArgs(buildConfiguration()->aspect<AdditionalCMakeOptionsAspect>()->value(),
|
return ProcessArgs::splitArgs(cmakeBuildConfiguration()->additionalCMakeOptions(),
|
||||||
HostOsInfo::hostOs());
|
HostOsInfo::hostOs());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1727,8 +1725,8 @@ void CMakeBuildSystem::setAdditionalCMakeArguments(const QStringList &args)
|
|||||||
[](const QString &s) {
|
[](const QString &s) {
|
||||||
return !s.isEmpty();
|
return !s.isEmpty();
|
||||||
});
|
});
|
||||||
buildConfiguration()->aspect<AdditionalCMakeOptionsAspect>()->setValue(
|
cmakeBuildConfiguration()->additionalCMakeOptions
|
||||||
ProcessArgs::joinArgs(nonEmptyAdditionalArguments));
|
.setValue(ProcessArgs::joinArgs(nonEmptyAdditionalArguments));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMakeBuildSystem::filterConfigArgumentsFromAdditionalCMakeArguments()
|
void CMakeBuildSystem::filterConfigArgumentsFromAdditionalCMakeArguments()
|
||||||
@@ -1738,12 +1736,12 @@ void CMakeBuildSystem::filterConfigArgumentsFromAdditionalCMakeArguments()
|
|||||||
// which is already part of the CMake variables and should not be also
|
// which is already part of the CMake variables and should not be also
|
||||||
// in the addtional CMake options
|
// in the addtional CMake options
|
||||||
const QStringList arguments = ProcessArgs::splitArgs(
|
const QStringList arguments = ProcessArgs::splitArgs(
|
||||||
buildConfiguration()->aspect<AdditionalCMakeOptionsAspect>()->value(),
|
cmakeBuildConfiguration()->additionalCMakeOptions(),
|
||||||
HostOsInfo::hostOs());
|
HostOsInfo::hostOs());
|
||||||
QStringList unknownOptions;
|
QStringList unknownOptions;
|
||||||
const CMakeConfig config = CMakeConfig::fromArguments(arguments, unknownOptions);
|
const CMakeConfig config = CMakeConfig::fromArguments(arguments, unknownOptions);
|
||||||
|
|
||||||
buildConfiguration()->aspect<AdditionalCMakeOptionsAspect>()->setValue(ProcessArgs::joinArgs(unknownOptions));
|
cmakeBuildConfiguration()->additionalCMakeOptions.setValue(ProcessArgs::joinArgs(unknownOptions));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMakeBuildSystem::setError(const QString &message)
|
void CMakeBuildSystem::setError(const QString &message)
|
||||||
@@ -2038,16 +2036,6 @@ BuildSystem *CMakeBuildConfiguration::buildSystem() const
|
|||||||
return m_buildSystem;
|
return m_buildSystem;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMakeBuildConfiguration::setSourceDirectory(const FilePath &path)
|
|
||||||
{
|
|
||||||
aspect<SourceDirectoryAspect>()->setValue(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
FilePath CMakeBuildConfiguration::sourceDirectory() const
|
|
||||||
{
|
|
||||||
return aspect<SourceDirectoryAspect>()->filePath();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMakeBuildConfiguration::addToEnvironment(Utils::Environment &env) const
|
void CMakeBuildConfiguration::addToEnvironment(Utils::Environment &env) const
|
||||||
{
|
{
|
||||||
const CMakeTool *tool = CMakeKitAspect::cmakeTool(kit());
|
const CMakeTool *tool = CMakeKitAspect::cmakeTool(kit());
|
||||||
@@ -2062,7 +2050,7 @@ void CMakeBuildConfiguration::addToEnvironment(Utils::Environment &env) const
|
|||||||
|
|
||||||
Environment CMakeBuildConfiguration::configureEnvironment() const
|
Environment CMakeBuildConfiguration::configureEnvironment() const
|
||||||
{
|
{
|
||||||
Environment env = aspect<ConfigureEnvironmentAspect>()->environment();
|
Environment env = configureEnv.environment();
|
||||||
addToEnvironment(env);
|
addToEnvironment(env);
|
||||||
|
|
||||||
return env;
|
return env;
|
||||||
@@ -2082,7 +2070,7 @@ QString CMakeBuildSystem::cmakeBuildType() const
|
|||||||
if (!isMultiConfig())
|
if (!isMultiConfig())
|
||||||
setBuildTypeFromConfig(configurationChanges());
|
setBuildTypeFromConfig(configurationChanges());
|
||||||
|
|
||||||
QString cmakeBuildType = buildConfiguration()->aspect<BuildTypeAspect>()->value();
|
QString cmakeBuildType = cmakeBuildConfiguration()->buildTypeAspect();
|
||||||
|
|
||||||
const Utils::FilePath cmakeCacheTxt = buildConfiguration()->buildDirectory().pathAppended("CMakeCache.txt");
|
const Utils::FilePath cmakeCacheTxt = buildConfiguration()->buildDirectory().pathAppended("CMakeCache.txt");
|
||||||
const bool hasCMakeCache = cmakeCacheTxt.exists();
|
const bool hasCMakeCache = cmakeCacheTxt.exists();
|
||||||
@@ -2109,7 +2097,7 @@ QString CMakeBuildSystem::cmakeBuildType() const
|
|||||||
|
|
||||||
void CMakeBuildSystem::setCMakeBuildType(const QString &cmakeBuildType, bool quiet)
|
void CMakeBuildSystem::setCMakeBuildType(const QString &cmakeBuildType, bool quiet)
|
||||||
{
|
{
|
||||||
auto aspect = buildConfiguration()->aspect<BuildTypeAspect>();
|
auto aspect = &cmakeBuildConfiguration()->buildTypeAspect;
|
||||||
if (quiet)
|
if (quiet)
|
||||||
aspect->setValueQuietly(cmakeBuildType);
|
aspect->setValueQuietly(cmakeBuildType);
|
||||||
else
|
else
|
||||||
@@ -2195,52 +2183,21 @@ void InitialCMakeArgumentsAspect::toMap(QVariantMap &map) const
|
|||||||
saveToMap(map, allValues().join('\n'), defaultValue(), settingsKey());
|
saveToMap(map, allValues().join('\n'), defaultValue(), settingsKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
InitialCMakeArgumentsAspect::InitialCMakeArgumentsAspect()
|
InitialCMakeArgumentsAspect::InitialCMakeArgumentsAspect(AspectContainer *container)
|
||||||
|
: StringAspect(container)
|
||||||
{
|
{
|
||||||
setSettingsKey("CMake.Initial.Parameters");
|
setSettingsKey("CMake.Initial.Parameters");
|
||||||
setLabelText(Tr::tr("Additional CMake <a href=\"options\">options</a>:"));
|
setLabelText(Tr::tr("Additional CMake <a href=\"options\">options</a>:"));
|
||||||
setDisplayStyle(LineEditDisplay);
|
setDisplayStyle(LineEditDisplay);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
// - AdditionalCMakeOptionsAspect:
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
AdditionalCMakeOptionsAspect::AdditionalCMakeOptionsAspect()
|
|
||||||
{
|
|
||||||
setSettingsKey("CMake.Additional.Options");
|
|
||||||
setLabelText(Tr::tr("Additional CMake <a href=\"options\">options</a>:"));
|
|
||||||
setDisplayStyle(LineEditDisplay);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
// SourceDirectoryAspect:
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
SourceDirectoryAspect::SourceDirectoryAspect()
|
|
||||||
{
|
|
||||||
// Will not be displayed, only persisted
|
|
||||||
setSettingsKey("CMake.Source.Directory");
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
// BuildTypeAspect:
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
BuildTypeAspect::BuildTypeAspect()
|
|
||||||
{
|
|
||||||
setSettingsKey(CMAKE_BUILD_TYPE);
|
|
||||||
setLabelText(Tr::tr("Build type:"));
|
|
||||||
setDisplayStyle(LineEditDisplay);
|
|
||||||
setDefaultValue("Unknown");
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// ConfigureEnvironmentAspect:
|
// ConfigureEnvironmentAspect:
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
class ConfigureEnvironmentAspectWidget final : public ProjectExplorer::EnvironmentAspectWidget
|
class ConfigureEnvironmentAspectWidget final : public EnvironmentAspectWidget
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ConfigureEnvironmentAspectWidget(ConfigureEnvironmentAspect *aspect,
|
ConfigureEnvironmentAspectWidget(ConfigureEnvironmentAspect *aspect, Target *target)
|
||||||
ProjectExplorer::Target *target)
|
|
||||||
: EnvironmentAspectWidget(aspect)
|
: EnvironmentAspectWidget(aspect)
|
||||||
{
|
{
|
||||||
envWidget()->setOpenTerminalFunc([target](const Environment &env) {
|
envWidget()->setOpenTerminalFunc([target](const Environment &env) {
|
||||||
@@ -2250,7 +2207,9 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
ConfigureEnvironmentAspect::ConfigureEnvironmentAspect(BuildConfiguration *bc)
|
ConfigureEnvironmentAspect::ConfigureEnvironmentAspect(AspectContainer *container,
|
||||||
|
BuildConfiguration *bc)
|
||||||
|
: EnvironmentAspect(container)
|
||||||
{
|
{
|
||||||
Target *target = bc->target();
|
Target *target = bc->target();
|
||||||
setIsLocal(true);
|
setIsLocal(true);
|
||||||
|
@@ -10,6 +10,8 @@
|
|||||||
#include <projectexplorer/buildconfiguration.h>
|
#include <projectexplorer/buildconfiguration.h>
|
||||||
#include <projectexplorer/environmentaspect.h>
|
#include <projectexplorer/environmentaspect.h>
|
||||||
|
|
||||||
|
#include <qtsupport/qtbuildaspects.h>
|
||||||
|
|
||||||
namespace CMakeProjectManager {
|
namespace CMakeProjectManager {
|
||||||
class CMakeProject;
|
class CMakeProject;
|
||||||
|
|
||||||
@@ -19,6 +21,33 @@ class CMakeBuildSystem;
|
|||||||
class CMakeBuildSettingsWidget;
|
class CMakeBuildSettingsWidget;
|
||||||
class CMakeProjectImporter;
|
class CMakeProjectImporter;
|
||||||
|
|
||||||
|
class InitialCMakeArgumentsAspect final : public Utils::StringAspect
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
InitialCMakeArgumentsAspect(Utils::AspectContainer *container);
|
||||||
|
|
||||||
|
const CMakeConfig &cmakeConfiguration() const;
|
||||||
|
const QStringList allValues() const;
|
||||||
|
void setAllValues(const QString &values, QStringList &additionalArguments);
|
||||||
|
void setCMakeConfiguration(const CMakeConfig &config);
|
||||||
|
|
||||||
|
void fromMap(const QVariantMap &map) final;
|
||||||
|
void toMap(QVariantMap &map) const final;
|
||||||
|
|
||||||
|
private:
|
||||||
|
CMakeConfig m_cmakeConfiguration;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ConfigureEnvironmentAspect final: public ProjectExplorer::EnvironmentAspect
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ConfigureEnvironmentAspect(Utils::AspectContainer *container,
|
||||||
|
ProjectExplorer::BuildConfiguration *buildConfig);
|
||||||
|
|
||||||
|
void fromMap(const QVariantMap &map);
|
||||||
|
void toMap(QVariantMap &map) const;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
|
||||||
class CMAKE_EXPORT CMakeBuildConfiguration : public ProjectExplorer::BuildConfiguration
|
class CMAKE_EXPORT CMakeBuildConfiguration : public ProjectExplorer::BuildConfiguration
|
||||||
@@ -39,13 +68,18 @@ public:
|
|||||||
void buildTarget(const QString &buildTarget);
|
void buildTarget(const QString &buildTarget);
|
||||||
ProjectExplorer::BuildSystem *buildSystem() const final;
|
ProjectExplorer::BuildSystem *buildSystem() const final;
|
||||||
|
|
||||||
void setSourceDirectory(const Utils::FilePath& path);
|
|
||||||
Utils::FilePath sourceDirectory() const;
|
|
||||||
|
|
||||||
void addToEnvironment(Utils::Environment &env) const override;
|
void addToEnvironment(Utils::Environment &env) const override;
|
||||||
|
|
||||||
Utils::Environment configureEnvironment() const;
|
Utils::Environment configureEnvironment() const;
|
||||||
|
|
||||||
|
ProjectExplorer::BuildDirectoryAspect buildDir{this};
|
||||||
|
Internal::InitialCMakeArgumentsAspect initialCMakeArguments{this};
|
||||||
|
Utils::StringAspect additionalCMakeOptions{this};
|
||||||
|
Utils::FilePathAspect sourceDirectory{this};
|
||||||
|
Utils::StringAspect buildTypeAspect{this};
|
||||||
|
QtSupport::QmlDebuggingAspect qmlDebugging{this};
|
||||||
|
Internal::ConfigureEnvironmentAspect configureEnv{this, this};
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void signingFlagsChanged();
|
void signingFlagsChanged();
|
||||||
void configureEnvironmentChanged();
|
void configureEnvironmentChanged();
|
||||||
@@ -94,59 +128,4 @@ private:
|
|||||||
friend class Internal::CMakeProjectImporter;
|
friend class Internal::CMakeProjectImporter;
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace Internal {
|
|
||||||
|
|
||||||
class InitialCMakeArgumentsAspect final : public Utils::StringAspect
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
CMakeConfig m_cmakeConfiguration;
|
|
||||||
public:
|
|
||||||
InitialCMakeArgumentsAspect();
|
|
||||||
|
|
||||||
const CMakeConfig &cmakeConfiguration() const;
|
|
||||||
const QStringList allValues() const;
|
|
||||||
void setAllValues(const QString &values, QStringList &additionalArguments);
|
|
||||||
void setCMakeConfiguration(const CMakeConfig &config);
|
|
||||||
|
|
||||||
void fromMap(const QVariantMap &map) final;
|
|
||||||
void toMap(QVariantMap &map) const final;
|
|
||||||
};
|
|
||||||
|
|
||||||
class AdditionalCMakeOptionsAspect final : public Utils::StringAspect
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
AdditionalCMakeOptionsAspect();
|
|
||||||
};
|
|
||||||
|
|
||||||
class SourceDirectoryAspect final : public Utils::FilePathAspect
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
SourceDirectoryAspect();
|
|
||||||
};
|
|
||||||
|
|
||||||
class BuildTypeAspect final : public Utils::StringAspect
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
BuildTypeAspect();
|
|
||||||
};
|
|
||||||
|
|
||||||
class ConfigureEnvironmentAspect final: public ProjectExplorer::EnvironmentAspect
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit ConfigureEnvironmentAspect(ProjectExplorer::BuildConfiguration *buildConfig);
|
|
||||||
|
|
||||||
void fromMap(const QVariantMap &map);
|
|
||||||
void toMap(QVariantMap &map) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace Internal
|
|
||||||
} // namespace CMakeProjectManager
|
} // namespace CMakeProjectManager
|
||||||
|
@@ -1743,10 +1743,9 @@ void CMakeBuildSystem::runGenerator(Id id)
|
|||||||
}
|
}
|
||||||
for (const CMakeConfigItem &item : std::as_const(configItems))
|
for (const CMakeConfigItem &item : std::as_const(configItems))
|
||||||
cmdLine.addArg(item.toArgument(buildConfiguration()->macroExpander()));
|
cmdLine.addArg(item.toArgument(buildConfiguration()->macroExpander()));
|
||||||
if (const auto optionsAspect = buildConfiguration()->aspect<AdditionalCMakeOptionsAspect>();
|
|
||||||
optionsAspect && !optionsAspect->value().isEmpty()) {
|
cmdLine.addArgs(cmakeBuildConfiguration()->additionalCMakeOptions(), CommandLine::Raw);
|
||||||
cmdLine.addArgs(optionsAspect->value(), CommandLine::Raw);
|
|
||||||
}
|
|
||||||
const auto proc = new Process(this);
|
const auto proc = new Process(this);
|
||||||
connect(proc, &Process::done, proc, &Process::deleteLater);
|
connect(proc, &Process::done, proc, &Process::deleteLater);
|
||||||
connect(proc, &Process::readyReadStandardOutput, this, [proc] {
|
connect(proc, &Process::readyReadStandardOutput, this, [proc] {
|
||||||
|
Reference in New Issue
Block a user