From 66bd326e28ca1cb6837956f62f1db1d286ba7dd4 Mon Sep 17 00:00:00 2001 From: Calum Robinson Date: Wed, 11 Sep 2024 12:25:08 +0100 Subject: [PATCH] VS: Use OUTPUT_NAME in DOTNET_SDK projects Fixes: #26285 --- Source/cmVisualStudio10TargetGenerator.cxx | 23 +++++++++++++------ Source/cmVisualStudio10TargetGenerator.h | 1 + Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake | 1 + .../VsDotnetSdkAssemblyName-check.cmake | 22 ++++++++++++++++++ .../VsDotnetSdk/VsDotnetSdkAssemblyName.cmake | 9 ++++++++ 5 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 Tests/RunCMake/VsDotnetSdk/VsDotnetSdkAssemblyName-check.cmake create mode 100644 Tests/RunCMake/VsDotnetSdk/VsDotnetSdkAssemblyName.cmake diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 72c1d7e469..79df9a491c 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -1004,6 +1004,8 @@ void cmVisualStudio10TargetGenerator::WriteSdkStyleProjectFile( ConvertToWindowsSlash(outDir); e1.Element("OutputPath", outDir); + e1.Element("AssemblyName", GetAssemblyName(config)); + Options& o = *(this->ClOptions[config]); OptionsHelper oh(o, e1); oh.OutputFlagMap(); @@ -1609,13 +1611,7 @@ void cmVisualStudio10TargetGenerator::WriteMSToolConfigurationValuesManaged( this->WriteMSToolConfigurationValuesCommon(e1, config); - std::string postfixName = - cmStrCat(cmSystemTools::UpperCase(config), "_POSTFIX"); - std::string assemblyName = this->GeneratorTarget->GetOutputName( - config, cmStateEnums::RuntimeBinaryArtifact); - if (cmValue postfix = this->GeneratorTarget->GetProperty(postfixName)) { - assemblyName += *postfix; - } + std::string assemblyName = GetAssemblyName(config); e1.Element("AssemblyName", assemblyName); if (cmStateEnums::EXECUTABLE == this->GeneratorTarget->GetType()) { @@ -3274,6 +3270,19 @@ std::string cmVisualStudio10TargetGenerator::GetTargetOutputName() const return cmStrCat(nameComponents.prefix, nameComponents.base); } +std::string cmVisualStudio10TargetGenerator::GetAssemblyName( + std::string const& config) const +{ + std::string postfixName = + cmStrCat(cmSystemTools::UpperCase(config), "_POSTFIX"); + std::string assemblyName = this->GeneratorTarget->GetOutputName( + config, cmStateEnums::RuntimeBinaryArtifact); + if (cmValue postfix = this->GeneratorTarget->GetProperty(postfixName)) { + assemblyName += *postfix; + } + return assemblyName; +} + bool cmVisualStudio10TargetGenerator::ComputeClOptions() { return std::all_of( diff --git a/Source/cmVisualStudio10TargetGenerator.h b/Source/cmVisualStudio10TargetGenerator.h index 9aae2d3ec5..aae9ca3f91 100644 --- a/Source/cmVisualStudio10TargetGenerator.h +++ b/Source/cmVisualStudio10TargetGenerator.h @@ -122,6 +122,7 @@ private: std::vector GetIncludes(std::string const& config, std::string const& lang) const; std::string GetTargetOutputName() const; + std::string GetAssemblyName(std::string const& config) const; bool ComputeClOptions(); bool ComputeClOptions(std::string const& configName); diff --git a/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake b/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake index 0be77ae600..0b2525c7ca 100644 --- a/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake +++ b/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake @@ -6,6 +6,7 @@ run_cmake(VsDotnetSdkStartupObject) run_cmake(VsDotnetSdkDefines) run_cmake(DotnetSdkVariables) run_cmake(VsDotnetSdkXamlFiles) +run_cmake(VsDotnetSdkAssemblyName) function(run_VsDotnetSdk) set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/VsDotnetSdk-build) diff --git a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkAssemblyName-check.cmake b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkAssemblyName-check.cmake new file mode 100644 index 0000000000..3d865b8b61 --- /dev/null +++ b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkAssemblyName-check.cmake @@ -0,0 +1,22 @@ +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(hasAssemblyName FALSE) + +file(STRINGS "${csProjectFile}" lines) + +foreach(line IN LISTS lines) + if(NOT inLib1) + if(line MATCHES "longer name") + set(hasAssemblyName TRUE) + endif() + endif() +endforeach() + +if(NOT hasAssemblyName) + set(RunCMake_TEST_FAILED " not found in ${csProjectFile}.") +endif() diff --git a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkAssemblyName.cmake b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkAssemblyName.cmake new file mode 100644 index 0000000000..b057b723e9 --- /dev/null +++ b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkAssemblyName.cmake @@ -0,0 +1,9 @@ +enable_language(CSharp) + +if(NOT CMAKE_CSharp_COMPILER) + return() +endif() + +set(CMAKE_DOTNET_SDK "Microsoft.NET.Sdk") +add_library(foo SHARED lib1.cs) +set_target_properties(foo PROPERTIES OUTPUT_NAME "longer name")