forked from qt-creator/qt-creator
CMakePM: Add support for build CMake presets
This patchset will add support for version 2 of the CMakePresets feature that has been implemented in CMake 3.20 https://cmake.org/cmake/help/v3.20/manual/cmake-presets.7.html Task-number: QTCREATORBUG-24555 Change-Id: I08934243cc04487d38c4b59c2ad4a4a8d0484492 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -12,9 +12,9 @@
|
||||
|
||||
namespace CMakeProjectManager::Internal::CMakePresets::Macros {
|
||||
|
||||
static void expandAllButEnv(const PresetsDetails::ConfigurePreset &configurePreset,
|
||||
const Utils::FilePath &sourceDirectory,
|
||||
QString &value)
|
||||
void expandAllButEnv(const PresetsDetails::ConfigurePreset &preset,
|
||||
const Utils::FilePath &sourceDirectory,
|
||||
QString &value)
|
||||
{
|
||||
value.replace("${dollar}", "$");
|
||||
|
||||
@@ -22,23 +22,36 @@ static void expandAllButEnv(const PresetsDetails::ConfigurePreset &configurePres
|
||||
value.replace("${sourceParentDir}", sourceDirectory.parentDir().toString());
|
||||
value.replace("${sourceDirName}", sourceDirectory.fileName());
|
||||
|
||||
value.replace("${presetName}", configurePreset.name);
|
||||
if (configurePreset.generator)
|
||||
value.replace("${generator}", configurePreset.generator.value());
|
||||
value.replace("${presetName}", preset.name);
|
||||
if (preset.generator)
|
||||
value.replace("${generator}", preset.generator.value());
|
||||
}
|
||||
|
||||
void expand(const PresetsDetails::ConfigurePreset &configurePreset,
|
||||
void expandAllButEnv(const PresetsDetails::BuildPreset &preset,
|
||||
const Utils::FilePath &sourceDirectory,
|
||||
QString &value)
|
||||
{
|
||||
value.replace("${dollar}", "$");
|
||||
|
||||
value.replace("${sourceDir}", sourceDirectory.toString());
|
||||
value.replace("${sourceParentDir}", sourceDirectory.parentDir().toString());
|
||||
value.replace("${sourceDirName}", sourceDirectory.fileName());
|
||||
|
||||
value.replace("${presetName}", preset.name);
|
||||
}
|
||||
|
||||
template<class PresetType>
|
||||
void expand(const PresetType &preset,
|
||||
Utils::Environment &env,
|
||||
const Utils::FilePath &sourceDirectory)
|
||||
{
|
||||
const QHash<QString, QString> presetEnv = configurePreset.environment
|
||||
? configurePreset.environment.value()
|
||||
: QHash<QString, QString>();
|
||||
const QHash<QString, QString> presetEnv = preset.environment ? preset.environment.value()
|
||||
: QHash<QString, QString>();
|
||||
for (auto it = presetEnv.constKeyValueBegin(); it != presetEnv.constKeyValueEnd(); ++it) {
|
||||
const QString key = it->first;
|
||||
QString value = it->second;
|
||||
|
||||
expandAllButEnv(configurePreset, sourceDirectory, value);
|
||||
expandAllButEnv(preset, sourceDirectory, value);
|
||||
|
||||
QRegularExpression envRegex(R"((\$env\{(\w+)\}))");
|
||||
for (const QRegularExpressionMatch &match : envRegex.globalMatch(value)) {
|
||||
@@ -69,19 +82,19 @@ void expand(const PresetsDetails::ConfigurePreset &configurePreset,
|
||||
}
|
||||
}
|
||||
|
||||
void expand(const PresetsDetails::ConfigurePreset &configurePreset,
|
||||
template<class PresetType>
|
||||
void expand(const PresetType &preset,
|
||||
Utils::EnvironmentItems &envItems,
|
||||
const Utils::FilePath &sourceDirectory)
|
||||
{
|
||||
const QHash<QString, QString> presetEnv = configurePreset.environment
|
||||
? configurePreset.environment.value()
|
||||
: QHash<QString, QString>();
|
||||
const QHash<QString, QString> presetEnv = preset.environment ? preset.environment.value()
|
||||
: QHash<QString, QString>();
|
||||
|
||||
for (auto it = presetEnv.constKeyValueBegin(); it != presetEnv.constKeyValueEnd(); ++it) {
|
||||
const QString key = it->first;
|
||||
QString value = it->second;
|
||||
|
||||
expandAllButEnv(configurePreset, sourceDirectory, value);
|
||||
expandAllButEnv(preset, sourceDirectory, value);
|
||||
|
||||
QRegularExpression envRegex(R"((\$env\{(\w+)\}))");
|
||||
for (const QRegularExpressionMatch &match : envRegex.globalMatch(value)) {
|
||||
@@ -108,16 +121,16 @@ void expand(const PresetsDetails::ConfigurePreset &configurePreset,
|
||||
}
|
||||
}
|
||||
|
||||
void expand(const PresetsDetails::ConfigurePreset &configurePreset,
|
||||
template<class PresetType>
|
||||
void expand(const PresetType &preset,
|
||||
const Utils::Environment &env,
|
||||
const Utils::FilePath &sourceDirectory,
|
||||
QString &value)
|
||||
{
|
||||
expandAllButEnv(configurePreset, sourceDirectory, value);
|
||||
expandAllButEnv(preset, sourceDirectory, value);
|
||||
|
||||
const QHash<QString, QString> presetEnv = configurePreset.environment
|
||||
? configurePreset.environment.value()
|
||||
: QHash<QString, QString>();
|
||||
const QHash<QString, QString> presetEnv = preset.environment ? preset.environment.value()
|
||||
: QHash<QString, QString>();
|
||||
|
||||
QRegularExpression envRegex(R"((\$env\{(\w+)\}))");
|
||||
for (const QRegularExpressionMatch &match : envRegex.globalMatch(value))
|
||||
@@ -128,4 +141,32 @@ void expand(const PresetsDetails::ConfigurePreset &configurePreset,
|
||||
value.replace(match.captured(1), env.value(match.captured(2)));
|
||||
}
|
||||
|
||||
// Expand for PresetsDetails::ConfigurePreset
|
||||
template void expand<PresetsDetails::ConfigurePreset>(const PresetsDetails::ConfigurePreset &preset,
|
||||
Utils::Environment &env,
|
||||
const Utils::FilePath &sourceDirectory);
|
||||
|
||||
template void expand<PresetsDetails::ConfigurePreset>(const PresetsDetails::ConfigurePreset &preset,
|
||||
Utils::EnvironmentItems &envItems,
|
||||
const Utils::FilePath &sourceDirectory);
|
||||
|
||||
template void expand<PresetsDetails::ConfigurePreset>(const PresetsDetails::ConfigurePreset &preset,
|
||||
const Utils::Environment &env,
|
||||
const Utils::FilePath &sourceDirectory,
|
||||
QString &value);
|
||||
|
||||
// Expand for PresetsDetails::BuildPreset
|
||||
template void expand<PresetsDetails::BuildPreset>(const PresetsDetails::BuildPreset &preset,
|
||||
Utils::Environment &env,
|
||||
const Utils::FilePath &sourceDirectory);
|
||||
|
||||
template void expand<PresetsDetails::BuildPreset>(const PresetsDetails::BuildPreset &preset,
|
||||
Utils::EnvironmentItems &envItems,
|
||||
const Utils::FilePath &sourceDirectory);
|
||||
|
||||
template void expand<PresetsDetails::BuildPreset>(const PresetsDetails::BuildPreset &preset,
|
||||
const Utils::Environment &env,
|
||||
const Utils::FilePath &sourceDirectory,
|
||||
QString &value);
|
||||
|
||||
} // namespace CMakeProjectManager::Internal::CMakePresets::Macros
|
||||
|
||||
Reference in New Issue
Block a user