CMake: Shift multiconfig storage from build config to build system

Change-Id: I6f9b6c590975caeea4ad92c61f354d81d4d90431
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
hjk
2022-05-02 16:58:26 +02:00
parent fdf008a37e
commit 33a385c4d6
6 changed files with 25 additions and 26 deletions

View File

@@ -183,6 +183,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
m_configTextFilterModel(new CategorySortFilterModel(this)) m_configTextFilterModel(new CategorySortFilterModel(this))
{ {
QTC_CHECK(bc); QTC_CHECK(bc);
auto buildSystem = static_cast<CMakeBuildSystem *>(bc->buildSystem());
auto vbox = new QVBoxLayout(this); auto vbox = new QVBoxLayout(this);
vbox->setContentsMargins(0, 0, 0, 0); vbox->setContentsMargins(0, 0, 0, 0);
@@ -200,8 +201,8 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
}); });
auto buildTypeAspect = bc->aspect<BuildTypeAspect>(); auto buildTypeAspect = bc->aspect<BuildTypeAspect>();
connect(buildTypeAspect, &BaseAspect::changed, this, [this, buildTypeAspect]() { connect(buildTypeAspect, &BaseAspect::changed, this, [this, buildSystem, buildTypeAspect] {
if (!m_buildConfiguration->isMultiConfig()) { if (!buildSystem->isMultiConfig()) {
CMakeConfig config; CMakeConfig config;
config << CMakeConfigItem("CMAKE_BUILD_TYPE", buildTypeAspect->value().toUtf8()); config << CMakeConfigItem("CMAKE_BUILD_TYPE", buildTypeAspect->value().toUtf8());
@@ -355,8 +356,6 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
}.setSpacing(0) }.setSpacing(0)
}.attachTo(details, false); }.attachTo(details, false);
auto buildSystem = static_cast<CMakeBuildSystem *>(bc->buildSystem());
updateAdvancedCheckBox(); updateAdvancedCheckBox();
setError(buildSystem->error()); setError(buildSystem->error());
setWarning(buildSystem->warning()); setWarning(buildSystem->warning());
@@ -1196,7 +1195,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
const Kit *k = target->kit(); const Kit *k = target->kit();
CommandLine cmd = defaultInitialCMakeCommand(k, info.typeName); CommandLine cmd = defaultInitialCMakeCommand(k, info.typeName);
setIsMultiConfig(CMakeGeneratorKitAspect::isMultiConfigGenerator(k)); m_buildSystem->setIsMultiConfig(CMakeGeneratorKitAspect::isMultiConfigGenerator(k));
// Android magic: // Android magic:
if (DeviceTypeKitAspect::deviceTypeId(k) == Android::Constants::ANDROID_DEVICE_TYPE) { if (DeviceTypeKitAspect::deviceTypeId(k) == Android::Constants::ANDROID_DEVICE_TYPE) {
@@ -1286,8 +1285,6 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
setInitialCMakeArguments(cmd.splitArguments()); setInitialCMakeArguments(cmd.splitArguments());
setCMakeBuildType(info.typeName); setCMakeBuildType(info.typeName);
}); });
setIsMultiConfig(CMakeGeneratorKitAspect::isMultiConfigGenerator(target->kit()));
} }
CMakeBuildConfiguration::~CMakeBuildConfiguration() CMakeBuildConfiguration::~CMakeBuildConfiguration()
@@ -1660,7 +1657,7 @@ QString CMakeBuildConfiguration::cmakeBuildType() const
->setCMakeBuildType(QString::fromUtf8(it->value)); ->setCMakeBuildType(QString::fromUtf8(it->value));
}; };
if (!isMultiConfig()) if (!m_buildSystem->isMultiConfig())
setBuildTypeFromConfig(configurationChanges()); setBuildTypeFromConfig(configurationChanges());
QString cmakeBuildType = aspect<BuildTypeAspect>()->value(); QString cmakeBuildType = aspect<BuildTypeAspect>()->value();
@@ -1682,7 +1679,7 @@ QString CMakeBuildConfiguration::cmakeBuildType() const
config = initialCMakeConfiguration(); config = initialCMakeConfiguration();
} }
if (!config.isEmpty() && !isMultiConfig()) if (!config.isEmpty() && !m_buildSystem->isMultiConfig())
setBuildTypeFromConfig(config); setBuildTypeFromConfig(config);
return cmakeBuildType; return cmakeBuildType;
@@ -1698,16 +1695,6 @@ void CMakeBuildConfiguration::setCMakeBuildType(const QString &cmakeBuildType, b
} }
} }
bool CMakeBuildConfiguration::isMultiConfig() const
{
return m_isMultiConfig;
}
void CMakeBuildConfiguration::setIsMultiConfig(bool isMultiConfig)
{
m_isMultiConfig = isMultiConfig;
}
namespace Internal { namespace Internal {
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------

View File

@@ -73,9 +73,6 @@ public:
QString cmakeBuildType() const; QString cmakeBuildType() const;
void setCMakeBuildType(const QString &cmakeBuildType, bool quiet = false); void setCMakeBuildType(const QString &cmakeBuildType, bool quiet = false);
bool isMultiConfig() const;
void setIsMultiConfig(bool isMultiConfig);
QStringList additionalCMakeArguments() const; QStringList additionalCMakeArguments() const;
void setAdditionalCMakeArguments(const QStringList &args); void setAdditionalCMakeArguments(const QStringList &args);
void filterConfigArgumentsFromAdditionalCMakeArguments(); void filterConfigArgumentsFromAdditionalCMakeArguments();
@@ -103,8 +100,6 @@ private:
CMakeConfig m_configurationChanges; CMakeConfig m_configurationChanges;
Internal::CMakeBuildSystem *m_buildSystem = nullptr; Internal::CMakeBuildSystem *m_buildSystem = nullptr;
bool m_isMultiConfig = false;
friend class Internal::CMakeBuildSettingsWidget; friend class Internal::CMakeBuildSettingsWidget;
friend class Internal::CMakeBuildSystem; friend class Internal::CMakeBuildSystem;
}; };

View File

@@ -406,7 +406,7 @@ CommandLine CMakeBuildStep::cmakeCommand() const
auto bs = qobject_cast<CMakeBuildSystem*>(buildSystem()); auto bs = qobject_cast<CMakeBuildSystem*>(buildSystem());
auto bc = qobject_cast<CMakeBuildConfiguration*>(buildConfiguration()); auto bc = qobject_cast<CMakeBuildConfiguration*>(buildConfiguration());
if (bc && bs && bs->isMultiConfig()) { if (bc && bs && bs->isMultiConfigReader()) {
cmd.addArg("--config"); cmd.addArg("--config");
cmd.addArg(bc->cmakeBuildType()); cmd.addArg(bc->cmakeBuildType());
} }

View File

@@ -200,6 +200,8 @@ CMakeBuildSystem::CMakeBuildSystem(CMakeBuildConfiguration *bc)
connect(&m_reader, &FileApiReader::dirty, this, &CMakeBuildSystem::becameDirty); connect(&m_reader, &FileApiReader::dirty, this, &CMakeBuildSystem::becameDirty);
wireUpConnections(); wireUpConnections();
m_isMultiConfig = CMakeGeneratorKitAspect::isMultiConfigGenerator(bc->kit());
} }
CMakeBuildSystem::~CMakeBuildSystem() CMakeBuildSystem::~CMakeBuildSystem()
@@ -1060,6 +1062,16 @@ bool CMakeBuildSystem::filteredOutTarget(const CMakeBuildTarget &target)
} }
bool CMakeBuildSystem::isMultiConfig() const bool CMakeBuildSystem::isMultiConfig() const
{
return m_isMultiConfig;
}
void CMakeBuildSystem::setIsMultiConfig(bool isMultiConfig)
{
m_isMultiConfig = isMultiConfig;
}
bool CMakeBuildSystem::isMultiConfigReader() const
{ {
return m_reader.isMultiConfig(); return m_reader.isMultiConfig();
} }

View File

@@ -104,6 +104,9 @@ public:
static bool filteredOutTarget(const CMakeBuildTarget &target); static bool filteredOutTarget(const CMakeBuildTarget &target);
bool isMultiConfig() const; bool isMultiConfig() const;
void setIsMultiConfig(bool isMultiConfig);
bool isMultiConfigReader() const;
bool usesAllCapsTargets() const; bool usesAllCapsTargets() const;
CMakeProject *project() const; CMakeProject *project() const;
@@ -184,6 +187,8 @@ private:
bool m_waitingForParse = false; bool m_waitingForParse = false;
bool m_combinedScanAndParseResult = false; bool m_combinedScanAndParseResult = false;
bool m_isMultiConfig = false;
ParseGuard m_currentGuard; ParseGuard m_currentGuard;
CppEditor::CppProjectUpdater *m_cppCodeModelUpdater = nullptr; CppEditor::CppProjectUpdater *m_cppCodeModelUpdater = nullptr;

View File

@@ -136,7 +136,7 @@ MakeInstallCommand CMakeProject::makeInstallCommand(const Target *target,
if (bs && bc) { if (bs && bc) {
if (bs->usesAllCapsTargets()) if (bs->usesAllCapsTargets())
installTarget = "INSTALL"; installTarget = "INSTALL";
if (bs->isMultiConfig()) if (bs->isMultiConfigReader())
config << "--config" << bc->cmakeBuildType(); config << "--config" << bc->cmakeBuildType();
} }