Просмотр исходного кода

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.
Steven Boswell 4 лет назад
Родитель
Сommit
f21158cdfe

+ 6 - 1
Help/prop_sf/VS_SETTINGS.rst

@@ -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.

+ 5 - 0
Help/release/dev/vs_settings.rst

@@ -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.

+ 6 - 3
Source/cmVisualStudio10TargetGenerator.cxx

@@ -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);
     }
   }
 

+ 2 - 1
Source/cmVisualStudio10TargetGenerator.h

@@ -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,

+ 12 - 3
Tests/RunCMake/VS10Project/VsSettings-check.cmake

@@ -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")

+ 2 - 0
Tests/RunCMake/VS10Project/VsSettings.cmake

@@ -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>")