summaryrefslogtreecommitdiffstats
path: root/Source/cmVisualStudio10TargetGenerator.cxx
diff options
context:
space:
mode:
authorMatt Davies <matthew.davies@sony.com>2020-03-18 12:25:02 (GMT)
committerMatt Davies <matthew.davies@sony.com>2020-03-20 16:16:58 (GMT)
commit2ce42f281fb5403cad398e886f0138d60f6a1dae (patch)
tree0911f8879b42399db696967f4f925c14b428d6e9 /Source/cmVisualStudio10TargetGenerator.cxx
parent53116d39424ac3ec8819aab6710211634be6240e (diff)
downloadCMake-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.cxx34
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 {