From a541d113e606b05073810bb1b5dd5a7a8fd2eec8 Mon Sep 17 00:00:00 2001 From: Wil Stark Date: Mon, 14 Jan 2019 13:52:25 -0800 Subject: VS: Honor target_compile_definitions for C# projects Fixes: #18698 --- Source/cmVisualStudio10TargetGenerator.cxx | 4 ++ Tests/RunCMake/VS10Project/RunCMakeTest.cmake | 1 + .../VS10Project/VsCSharpDefines-check.cmake | 64 ++++++++++++++++++++++ Tests/RunCMake/VS10Project/VsCSharpDefines.cmake | 18 ++++++ 4 files changed, 87 insertions(+) create mode 100644 Tests/RunCMake/VS10Project/VsCSharpDefines-check.cmake create mode 100644 Tests/RunCMake/VS10Project/VsCSharpDefines.cmake diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 655d6f0..35d48f6 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -2620,6 +2620,10 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions( } clOptions.AddDefines(targetDefines); + if (this->ProjectType == csproj) { + clOptions.AppendFlag("DefineConstants", targetDefines); + } + // Get includes for this target if (!this->LangForClCompile.empty()) { clOptions.AddIncludes( diff --git a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake index c796840..7c1ed4e 100644 --- a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake +++ b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake @@ -14,5 +14,6 @@ run_cmake(VsCSharpCustomTags) run_cmake(VsCSharpReferenceProps) run_cmake(VsCSharpWithoutSources) run_cmake(VsCSharpDeployFiles) +run_cmake(VSCSharpDefines) run_cmake(VsSdkDirectories) run_cmake(VsGlobals) diff --git a/Tests/RunCMake/VS10Project/VsCSharpDefines-check.cmake b/Tests/RunCMake/VS10Project/VsCSharpDefines-check.cmake new file mode 100644 index 0000000..152bf9c --- /dev/null +++ b/Tests/RunCMake/VS10Project/VsCSharpDefines-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 + (line MATCHES "^ *.*MY_BAR_ASSIGNMENT=bar.* *$") AND + (NOT (line MATCHES "^ *.*DEFINE_ONLY_FOR_RELEASE.* *$")) + ) + set(debugOK TRUE) + elseif(inRelease AND + (line MATCHES "^ *.*MY_FOO_DEFINE.* *$") AND + (line MATCHES "^ *.*DEFINE_ONLY_FOR_RELEASE.* *$") AND + (line MATCHES "^ *.*MY_BAR_ASSIGNMENT=bar.* *$") AND + (NOT (line MATCHES "^ *.*DEFINE_ONLY_FOR_DEBUG.* *$")) + ) + 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/VS10Project/VsCSharpDefines.cmake b/Tests/RunCMake/VS10Project/VsCSharpDefines.cmake new file mode 100644 index 0000000..62c19c5 --- /dev/null +++ b/Tests/RunCMake/VS10Project/VsCSharpDefines.cmake @@ -0,0 +1,18 @@ +enable_language(CSharp) + +add_library(foo SHARED + foo.cs) + +set_target_properties(foo PROPERTIES + LINKER_LANGUAGE CSharp) + + +# Issue 18698 +target_compile_definitions( + foo + PUBLIC + MY_FOO_DEFINE + "MY_BAR_ASSIGNMENT=bar" + $<$:DEFINE_ONLY_FOR_DEBUG> + $<$:DEFINE_ONLY_FOR_RELEASE> +) -- cgit v0.12