VS: Honor VS_SETTINGS source file property on all sources

Extend the feature added by commit 2ce42f281f (VS: Add VS_SETTINGS
source file property, 2020-03-18, v3.18.0-rc1~449^2~3) to support
all source file types.
This commit is contained in:
Steven Boswell 2021-09-02 17:12:44 -07:00 committed by Brad King
parent 3bf013632d
commit f21158cdfe
6 changed files with 33 additions and 8 deletions

View File

@ -3,7 +3,12 @@ VS_SETTINGS
.. versionadded:: 3.18
Set any item metadata on a non-built file.
Set any item metadata on a file.
.. versionadded:: 3.22
This property is honored for all source file types.
Previously it worked only for non-built files.
Takes a list of ``Key=Value`` pairs. Tells the Visual Studio generator to set
``Key`` to ``Value`` as item metadata on the file.

View File

@ -0,0 +1,5 @@
vs_settings
-----------
* The :prop_sf:`VS_SETTINGS` source file property is now supported for
all source file types. Previously it worked only for non-built sources.

View File

@ -1796,8 +1796,8 @@ void cmVisualStudio10TargetGenerator::WriteGroupSources(
}
}
void cmVisualStudio10TargetGenerator::WriteHeaderSource(Elem& e1,
cmSourceFile const* sf)
void cmVisualStudio10TargetGenerator::WriteHeaderSource(
Elem& e1, cmSourceFile const* sf, ConfigToSettings const& toolSettings)
{
std::string const& fileName = sf->GetFullPath();
Elem e2(e1, "ClInclude");
@ -1808,6 +1808,7 @@ void cmVisualStudio10TargetGenerator::WriteHeaderSource(Elem& e1,
e2.Element("DependentUpon",
fileName.substr(0, fileName.find_last_of(".")));
}
this->FinishWritingSource(e2, toolSettings);
}
void cmVisualStudio10TargetGenerator::ParseSettingsProperty(
@ -2228,7 +2229,7 @@ void cmVisualStudio10TargetGenerator::WriteAllSources(Elem& e0)
this->WriteExtraSource(e1, si.Source, toolSettings);
break;
case cmGeneratorTarget::SourceKindHeader:
this->WriteHeaderSource(e1, si.Source);
this->WriteHeaderSource(e1, si.Source, toolSettings);
break;
case cmGeneratorTarget::SourceKindIDL:
tool = "Midl";
@ -2338,6 +2339,8 @@ void cmVisualStudio10TargetGenerator::WriteAllSources(Elem& e0)
if (!isCSharp && !exclude_configs.empty()) {
this->WriteExcludeFromBuild(e2, exclude_configs);
}
this->FinishWritingSource(e2, toolSettings);
}
}

View File

@ -70,7 +70,8 @@ private:
void WriteCEDebugProjectConfigurationValues(Elem& e0);
void WriteMSToolConfigurationValuesManaged(Elem& e1,
std::string const& config);
void WriteHeaderSource(Elem& e1, cmSourceFile const* sf);
void WriteHeaderSource(Elem& e1, cmSourceFile const* sf,
ConfigToSettings const& toolSettings);
void WriteExtraSource(Elem& e1, cmSourceFile const* sf,
ConfigToSettings& toolSettings);
void WriteNsightTegraConfigurationValues(Elem& e1,

View File

@ -4,20 +4,29 @@ macro(ensure_props_set projectFile)
return()
endif()
set(SettingFound FALSE)
set(Setting1Found FALSE)
set(Setting2Found FALSE)
file(STRINGS "${projectFile}" lines)
foreach(line IN LISTS lines)
if(line MATCHES "<SourceProperty1.*Debug.*>SourceProperty1Value</SourceProperty1>")
message("SourceProperty1 setting found")
set(SettingFound TRUE)
set(Setting1Found TRUE)
endif()
if(line MATCHES "<SourceProperty2.*Debug.*>SourceProperty2Value</SourceProperty2>")
message("SourceProperty2 setting found")
set(Setting2Found TRUE)
endif()
endforeach()
if (NOT SettingFound)
if (NOT Setting1Found)
set(RunCMake_TEST_FAILED "SourceProperty1 setting was not found")
return()
endif()
if (NOT Setting2Found)
set(RunCMake_TEST_FAILED "SourceProperty2 setting was not found")
return()
endif()
endmacro()
ensure_props_set("${RunCMake_TEST_BINARY_DIR}/foo.vcxproj")

View File

@ -3,3 +3,5 @@ enable_language(CXX)
add_library(foo foo.cpp shader.hlsl)
set_property(SOURCE shader.hlsl PROPERTY VS_SETTINGS
"$<$<CONFIG:DEBUG>:SourceProperty1=SourceProperty1Value>")
set_property(SOURCE foo.cpp PROPERTY VS_SETTINGS
"$<$<CONFIG:DEBUG>:SourceProperty2=SourceProperty2Value>")