summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2024-06-27 15:22:04 (GMT)
committerKitware Robot <kwrobot@kitware.com>2024-06-27 15:22:43 (GMT)
commit9ee9571b2e209fc507bcdcba06cd04db06da17a7 (patch)
tree37b26a0fc97eb206e5273f1f7016579c4765108b
parente053d6f81b725137e61485755e89031d0b9cbfa1 (diff)
parent0721f9bf0fefb159be48c23847e5654e0b31f0cb (diff)
downloadCMake-9ee9571b2e209fc507bcdcba06cd04db06da17a7.zip
CMake-9ee9571b2e209fc507bcdcba06cd04db06da17a7.tar.gz
CMake-9ee9571b2e209fc507bcdcba06cd04db06da17a7.tar.bz2
Merge topic 'vs-framework-references'
0721f9bf0f VS: Add VS_FRAMEWORK_REFERENCES Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !9626
-rw-r--r--Auxiliary/vim/syntax/cmake.vim1
-rw-r--r--Help/manual/cmake-properties.7.rst1
-rw-r--r--Help/prop_tgt/VS_FRAMEWORK_REFERENCES.rst12
-rw-r--r--Help/release/dev/vs-framework-references.rst5
-rw-r--r--Source/cmVisualStudio10TargetGenerator.cxx16
-rw-r--r--Source/cmVisualStudio10TargetGenerator.h1
-rw-r--r--Tests/RunCMake/VS10Project/RunCMakeTest.cmake1
-rw-r--r--Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake24
-rw-r--r--Tests/RunCMake/VS10Project/VsFrameworkReference.cmake8
9 files changed, 69 insertions, 0 deletions
diff --git a/Auxiliary/vim/syntax/cmake.vim b/Auxiliary/vim/syntax/cmake.vim
index 5d412c2..f9efd9e 100644
--- a/Auxiliary/vim/syntax/cmake.vim
+++ b/Auxiliary/vim/syntax/cmake.vim
@@ -416,6 +416,7 @@ syn keyword cmakeProperty contained
\ VS_DOTNET_STARTUP_OBJECT
\ VS_DOTNET_TARGET_FRAMEWORK_VERSION
\ VS_DPI_AWARE
+ \ VS_FRAMEWORK_REFERENCES
\ VS_GLOBAL_KEYWORD
\ VS_GLOBAL_PROJECT_TYPES
\ VS_GLOBAL_ROOTNAMESPACE
diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst
index 673bc7c..fea661a 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -430,6 +430,7 @@ Properties on Targets
/prop_tgt/VS_DOTNET_STARTUP_OBJECT
/prop_tgt/VS_DOTNET_TARGET_FRAMEWORK_VERSION
/prop_tgt/VS_DPI_AWARE
+ /prop_tgt/VS_FRAMEWORK_REFERENCES
/prop_tgt/VS_GLOBAL_KEYWORD
/prop_tgt/VS_GLOBAL_PROJECT_TYPES
/prop_tgt/VS_GLOBAL_ROOTNAMESPACE
diff --git a/Help/prop_tgt/VS_FRAMEWORK_REFERENCES.rst b/Help/prop_tgt/VS_FRAMEWORK_REFERENCES.rst
new file mode 100644
index 0000000..925ac68
--- /dev/null
+++ b/Help/prop_tgt/VS_FRAMEWORK_REFERENCES.rst
@@ -0,0 +1,12 @@
+VS_FRAMEWORK_REFERENCES
+-----------------------
+
+.. versionadded:: 3.31
+
+Visual Studio framework references.
+Specify a :ref:`semicolon-separated list <CMake Language Lists>` of framework references
+to be added to a generated Visual Studio project. For example:
+
+* "Microsoft.WindowsDesktop.App.WPF" for WPF applications
+* "Microsoft.WindowsDesktop.App.WindowsForms" for WinForms applications
+* "Microsoft.WindowsDesktop.App" for applications using both frameworks
diff --git a/Help/release/dev/vs-framework-references.rst b/Help/release/dev/vs-framework-references.rst
new file mode 100644
index 0000000..1f50b50
--- /dev/null
+++ b/Help/release/dev/vs-framework-references.rst
@@ -0,0 +1,5 @@
+vs-framework-references
+-----------------------
+
+* The :prop_tgt:`VS_FRAMEWORK_REFERENCES` target property was added
+ to tell :ref:`Visual Studio Generators` to add framework references.
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index 0fb8bae..eb14e24 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -813,6 +813,7 @@ void cmVisualStudio10TargetGenerator::WriteClassicMsBuildProjectFile(
this->WriteCustomCommands(e0);
this->WriteAllSources(e0);
this->WriteDotNetReferences(e0);
+ this->WriteFrameworkReferences(e0);
this->WritePackageReferences(e0);
this->WriteImports(e0);
this->WriteEmbeddedResourceGroup(e0);
@@ -1187,6 +1188,21 @@ void cmVisualStudio10TargetGenerator::WriteDotNetReference(
this->WriteDotNetReferenceCustomTags(e2, ref);
}
+void cmVisualStudio10TargetGenerator::WriteFrameworkReferences(Elem& e0)
+{
+ cmList references;
+ if (cmValue vsFrameworkReferences =
+ this->GeneratorTarget->GetProperty("VS_FRAMEWORK_REFERENCES")) {
+ references.assign(*vsFrameworkReferences);
+ }
+
+ Elem e1(e0, "ItemGroup");
+ for (auto const& ref : references) {
+ Elem e2(e1, "FrameworkReference");
+ e2.Attribute("Include", ref);
+ }
+}
+
void cmVisualStudio10TargetGenerator::WriteImports(Elem& e0)
{
cmValue imports =
diff --git a/Source/cmVisualStudio10TargetGenerator.h b/Source/cmVisualStudio10TargetGenerator.h
index 056f426..53eb1af 100644
--- a/Source/cmVisualStudio10TargetGenerator.h
+++ b/Source/cmVisualStudio10TargetGenerator.h
@@ -91,6 +91,7 @@ private:
void WriteDotNetReference(Elem& e1, std::string const& ref,
std::string const& hint,
std::string const& config);
+ void WriteFrameworkReferences(Elem& e0);
void WriteDotNetDocumentationFile(Elem& e0);
void WriteImports(Elem& e0);
void WriteDotNetReferenceCustomTags(Elem& e2, std::string const& ref);
diff --git a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake
index e0d74cf..85fefbf 100644
--- a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake
+++ b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake
@@ -98,6 +98,7 @@ run_cmake(DebugInformationFormat)
run_cmake(VsCLREmpty)
run_cmake(VsCLRPure)
run_cmake(VsCLRSafe)
+run_cmake(VsFrameworkReference)
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.20)
run_cmake(VsCLRNetcore)
diff --git a/Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake b/Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake
new file mode 100644
index 0000000..7abe8a0
--- /dev/null
+++ b/Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake
@@ -0,0 +1,24 @@
+set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.vcxproj")
+if(NOT EXISTS "${vcProjectFile}")
+ set(RunCMake_TEST_FAILED "Project file ${vcProjectFile} does not exist.")
+ return()
+endif()
+
+set(frameworkReferenceSet FALSE)
+
+file(STRINGS "${vcProjectFile}" lines)
+foreach(line IN LISTS lines)
+ if(line MATCHES "^ *<FrameworkReference Include=\"([^\"]*)\" />$")
+ if("${CMAKE_MATCH_1}" STREQUAL "Microsoft.WindowsDesktop.App.WPF")
+ message(STATUS "foo.vcxproj has FrameworkReference set")
+ set(frameworkReferenceSet TRUE)
+ else()
+ message(STATUS "foo.vcxproj has FrameworkReference incorrectly set to ${CMAKE_MATCH_1}")
+ endif()
+ endif()
+endforeach()
+
+if(NOT frameworkReferenceSet)
+ set(RunCMake_TEST_FAILED "FrameworkReference not found or not set correctly.")
+ return()
+endif()
diff --git a/Tests/RunCMake/VS10Project/VsFrameworkReference.cmake b/Tests/RunCMake/VS10Project/VsFrameworkReference.cmake
new file mode 100644
index 0000000..0e4d6fb
--- /dev/null
+++ b/Tests/RunCMake/VS10Project/VsFrameworkReference.cmake
@@ -0,0 +1,8 @@
+enable_language(CXX)
+
+add_executable(foo foo.cpp)
+
+set_target_properties(foo PROPERTIES
+ COMMON_LANGUAGE_RUNTIME "netcore"
+ DOTNET_TARGET_FRAMEWORK "net8.0-windows"
+ VS_FRAMEWORK_REFERENCES "Microsoft.WindowsDesktop.App.WPF")