From 3fd07d30bfdb35fa1f807d58da7bcf18cfb037b2 Mon Sep 17 00:00:00 2001 From: Kinan Mahdi Date: Thu, 4 Jun 2020 00:20:11 +0200 Subject: 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 --- Source/cmTarget.cxx | 2 +- .../VS10Project/VsPackageReferences-check.cmake | 22 ++++++++++++++++++++++ .../RunCMake/VS10Project/VsPackageReferences.cmake | 9 +++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 4bb48fb..36e1ad5 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 512a1c9..9c0f6e6 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 "^ *v4.7.2$") + 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 224ab18..30e8fd4 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) -- cgit v0.12