From ba6cecea8e0bd6ed8670c3e32df8c15b1b5f5351 Mon Sep 17 00:00:00 2001 From: Maxime Raynaud Date: Wed, 15 Jun 2022 10:59:16 -0400 Subject: VS: Add compile properties to .NET Sdk projects --- Source/cmVisualStudio10TargetGenerator.cxx | 4 ++ Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake | 1 + .../VsDotnetSdk/VsDotnetSdkDefines-check.cmake | 64 ++++++++++++++++++++++ .../RunCMake/VsDotnetSdk/VsDotnetSdkDefines.cmake | 19 +++++++ 4 files changed, 88 insertions(+) create mode 100644 Tests/RunCMake/VsDotnetSdk/VsDotnetSdkDefines-check.cmake create mode 100644 Tests/RunCMake/VsDotnetSdk/VsDotnetSdkDefines.cmake diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index c79331c..d51aed2 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -952,6 +952,10 @@ void cmVisualStudio10TargetGenerator::WriteSdkStyleProjectFile( std::string outDir = this->GeneratorTarget->GetDirectory(config) + "/"; ConvertToWindowsSlash(outDir); e1.Element("OutputPath", outDir); + + Options& o = *(this->ClOptions[config]); + OptionsHelper oh(o, e1); + oh.OutputFlagMap(); } this->WriteDotNetDocumentationFile(e0); diff --git a/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake b/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake index 9c9074e..22e2bb3 100644 --- a/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake +++ b/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake @@ -4,6 +4,7 @@ include(RunCMake) run_cmake(VsDotnetSdkCustomCommandsTarget) run_cmake(VsDotnetSdkCustomCommandsSource) run_cmake(VsDotnetSdkStartupObject) +run_cmake(VsDotnetSdkDefines) run_cmake(DotnetSdkVariables) function(run_VsDotnetSdk) diff --git a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkDefines-check.cmake b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkDefines-check.cmake new file mode 100644 index 0000000..eaeba24 --- /dev/null +++ b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkDefines-check.cmake @@ -0,0 +1,64 @@ +# +# Check C# VS project for required elements. +# +set(csProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.csproj") +if(NOT EXISTS "${csProjectFile}") + set(RunCMake_TEST_FAILED "Project file ${csProjectFile} does not exist.") + return() +endif() + + +set(inDebug FALSE) +set(inRelease FALSE) +set(debugOK FALSE) +set(releaseOK FALSE) + + +file(STRINGS "${csProjectFile}" lines) +foreach(line IN LISTS lines) + #message(STATUS ${line}) + if(line MATCHES "^ * *$") + set(inRelease FALSE) + set(inDebug FALSE) + elseif(inDebug AND + (line MATCHES "^ *.*MY_FOO_DEFINE.* *$") AND + (line MATCHES "^ *.*DEFINE_ONLY_FOR_DEBUG.* *$") AND + (NOT (line MATCHES "^ *.*DEFINE_ONLY_FOR_RELEASE.* *$")) AND + (NOT (line MATCHES "^ *.*MY_BAR_ASSIGNMENT=bar.* *$")) + ) + set(debugOK TRUE) + elseif(inRelease AND + (line MATCHES "^ *.*MY_FOO_DEFINE.* *$") AND + (line MATCHES "^ *.*DEFINE_ONLY_FOR_RELEASE.* *$") AND + (NOT (line MATCHES "^ *.*DEFINE_ONLY_FOR_DEBUG.* *$")) AND + (NOT (line MATCHES "^ *.*MY_BAR_ASSIGNMENT=bar.* *$")) + ) + set(releaseOK TRUE) + endif() +endforeach() + +function(print_csprojfile) + file(STRINGS "${csProjectFile}" lines) + foreach(line IN LISTS lines) + message(STATUS ${line}) + endforeach() +endfunction() + + +if(NOT debugOK) + message(STATUS "Failed to set Debug configuration defines correctly.") + set(RunCMake_TEST_FAILED "Failed to set Debug configuration defines correctly.") + print_csprojfile() + return() +endif() + +if(NOT releaseOK) + message(STATUS "Failed to set Release configuration defines correctly.") + set(RunCMake_TEST_FAILED "Failed to set Release configuration defines correctly.") + print_csprojfile() + return() +endif() diff --git a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkDefines.cmake b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkDefines.cmake new file mode 100644 index 0000000..d89f19b --- /dev/null +++ b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkDefines.cmake @@ -0,0 +1,19 @@ +enable_language(CSharp) +if(NOT CMAKE_CSharp_COMPILER) + return() +endif() + +set(CMAKE_DOTNET_SDK "Microsoft.NET.Sdk") +set(CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION "net5.0") + +add_executable(foo csharponly.cs lib1.cs) + +# Issue 23376 +target_compile_definitions( + foo + PUBLIC + MY_FOO_DEFINE + "MY_BAR_ASSIGNMENT=bar" + $<$:DEFINE_ONLY_FOR_DEBUG> + $<$:DEFINE_ONLY_FOR_RELEASE> +) -- cgit v0.12