diff options
author | Matt Davies <matthew.davies@sony.com> | 2020-03-18 12:25:02 (GMT) |
---|---|---|
committer | Matt Davies <matthew.davies@sony.com> | 2020-03-20 16:16:58 (GMT) |
commit | 2ce42f281fb5403cad398e886f0138d60f6a1dae (patch) | |
tree | 0911f8879b42399db696967f4f925c14b428d6e9 /Source/cmVisualStudio10TargetGenerator.cxx | |
parent | 53116d39424ac3ec8819aab6710211634be6240e (diff) | |
download | CMake-2ce42f281fb5403cad398e886f0138d60f6a1dae.zip CMake-2ce42f281fb5403cad398e886f0138d60f6a1dae.tar.gz CMake-2ce42f281fb5403cad398e886f0138d60f6a1dae.tar.bz2 |
VS: Add VS_SETTINGS source file property
VS_SETTINGS is a list of key value pairs that get written as item
metadata for the associated non-built file. The entire value of
VS_SETTINGS is evaluated as a generator expression.
Diffstat (limited to 'Source/cmVisualStudio10TargetGenerator.cxx')
-rw-r--r-- | Source/cmVisualStudio10TargetGenerator.cxx | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index d55d30d..d67fe72 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -1754,7 +1754,35 @@ void cmVisualStudio10TargetGenerator::WriteHeaderSource(Elem& e1, } } -bool cmVisualStudio10TargetGenerator::cmPropertyIsSameInAllConfigs( +void cmVisualStudio10TargetGenerator::ParseSettingsProperty( + const char* settingsPropertyValue, ConfigToSettings& toolSettings) +{ + if (settingsPropertyValue) { + cmGeneratorExpression ge; + + std::unique_ptr<cmCompiledGeneratorExpression> cge = + ge.Parse(settingsPropertyValue); + + for (const std::string& config : this->Configurations) { + std::string evaluated = cge->Evaluate(this->LocalGenerator, config); + + std::vector<std::string> settings = cmExpandedList(evaluated); + for (const std::string& setting : settings) { + const std::string::size_type assignment = setting.find('='); + if (assignment != std::string::npos) { + const std::string propName = setting.substr(0, assignment); + const std::string propValue = setting.substr(assignment + 1); + + if (!propValue.empty()) { + toolSettings[config][propName] = propValue; + } + } + } + } + } +} + +bool cmVisualStudio10TargetGenerator::PropertyIsSameInAllConfigs( const ConfigToSettings& toolSettings, const std::string& propName) { std::string firstPropValue = ""; @@ -1939,6 +1967,8 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(Elem& e1, } } + ParseSettingsProperty(sf->GetProperty("VS_SETTINGS"), toolSettings); + if (!toolSettings.empty()) { toolHasSettings = true; } @@ -1957,7 +1987,7 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(Elem& e1, continue; } - if (cmPropertyIsSameInAllConfigs(toolSettings, setting.first)) { + if (PropertyIsSameInAllConfigs(toolSettings, setting.first)) { e2.Element(setting.first, setting.second); writtenSettings.push_back(setting.first); } else { |