summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKinan Mahdi <kinan.mahdi@gmail.com>2020-06-04 00:20:11 +0200
committerBrad King <brad.king@kitware.com>2020-06-05 08:01:59 -0400
commit3fd07d30bfdb35fa1f807d58da7bcf18cfb037b2 (patch)
tree57d854ec0c63b42075ea342fd95fcef7bd799114
parent3414ee155e0423284a9171497d7724828fd324a5 (diff)
downloadcmake-3fd07d30bfdb35fa1f807d58da7bcf18cfb037b2.tar.gz
VS: Enable DOTNET_TARGET_FRAMEWORK properties all target types
This makes them compatible with `VS_PACKAGE_REFERENCES` and, in particular, fixes nuget package references in combination with install targets. Fixes: #20764
-rw-r--r--Source/cmTarget.cxx2
-rw-r--r--Tests/RunCMake/VS10Project/VsPackageReferences-check.cmake22
-rw-r--r--Tests/RunCMake/VS10Project/VsPackageReferences.cmake9
3 files changed, 32 insertions, 1 deletions
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 4bb48fb33c..36e1ad5fd1 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -533,7 +533,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
initProp("JOB_POOL_PRECOMPILE_HEADER");
}
- if (impl->TargetType <= cmStateEnums::UTILITY) {
+ if (impl->TargetType <= cmStateEnums::GLOBAL_TARGET) {
initProp("DOTNET_TARGET_FRAMEWORK");
initProp("DOTNET_TARGET_FRAMEWORK_VERSION");
}
diff --git a/Tests/RunCMake/VS10Project/VsPackageReferences-check.cmake b/Tests/RunCMake/VS10Project/VsPackageReferences-check.cmake
index 512a1c99c4..9c0f6e612d 100644
--- a/Tests/RunCMake/VS10Project/VsPackageReferences-check.cmake
+++ b/Tests/RunCMake/VS10Project/VsPackageReferences-check.cmake
@@ -4,6 +4,12 @@ if(NOT EXISTS "${vcProjectFile}")
return()
endif()
+set(installProjectFile "${RunCMake_TEST_BINARY_DIR}/INSTALL.vcxproj")
+if(NOT EXISTS "${installProjectFile}")
+ set(RunCMake_TEST_FAILED "Install file INSTALL.vcxproj does not exist.")
+ return()
+endif()
+
set(test1Library "boost")
set(test1Version "1.7.0")
@@ -37,3 +43,19 @@ if(NOT Library1Found OR NOT Library2Found)
set(RunCMake_TEST_FAILED "Failed to find package references")
return()
endif()
+
+set(DOT_NET_FRAMEWORK_VERSION_FOUND FALSE)
+
+file(STRINGS "${installProjectFile}" installlines)
+foreach(line IN LISTS lines)
+ if(line MATCHES "^ *<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>$")
+ set(DOT_NET_FRAMEWORK_VERSION_FOUND TRUE)
+ message(STATUS "The install target contains the correct TargetFrameworkVersion.")
+ break()
+ endif()
+endforeach()
+
+if(NOT DOT_NET_FRAMEWORK_VERSION_FOUND)
+ set(RunCMake_TEST_FAILED "Failed to find TargetFrameworkVersion in the install target")
+ return()
+endif()
diff --git a/Tests/RunCMake/VS10Project/VsPackageReferences.cmake b/Tests/RunCMake/VS10Project/VsPackageReferences.cmake
index 224ab18d7a..30e8fd47bb 100644
--- a/Tests/RunCMake/VS10Project/VsPackageReferences.cmake
+++ b/Tests/RunCMake/VS10Project/VsPackageReferences.cmake
@@ -1,4 +1,13 @@
enable_language(CXX)
+set(CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION "v4.7.2")
+
add_library(foo foo.cpp)
set_property(TARGET foo PROPERTY VS_PACKAGE_REFERENCES "boost_1.7.0;SFML_2.2.0")
+
+# install and export the targets to test the correct behavior
+# nuget restore will only work with an install target when the correct
+# target framework version is set
+set(INSTALL_CMAKE_DIR CMake)
+install(TARGETS foo EXPORT foo_Export_Target)
+install(EXPORT foo_Export_Target DESTINATION ${INSTALL_CMAKE_DIR} FILE fooConfig.cmake)