From 2e798a4137b2b7c9876f47878c8d52ba5ed91e79 Mon Sep 17 00:00:00 2001 From: Nikita Nemkin Date: Tue, 11 Feb 2025 17:15:48 +0500 Subject: VS: Fix UnityBuild test selection in VS10Project tests Do not overwrite RunCMake_GENERATOR_TOOLSET and do not assume that it always contains toolset version. (It could be something like "host=x64".) --- Tests/RunCMake/VS10Project/RunCMakeTest.cmake | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake index 37f780c..ac3d2b2 100644 --- a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake +++ b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake @@ -52,9 +52,10 @@ run_cmake(VsToolOverride) run_cmake(VsWinRTByDefault) -set(RunCMake_GENERATOR_TOOLSET "VCTargetsPath=$(VCTargetsPath)") -run_cmake(VsVCTargetsPath) -unset(RunCMake_GENERATOR_TOOLSET) +block() + set(RunCMake_GENERATOR_TOOLSET "VCTargetsPath=$(VCTargetsPath)") + run_cmake(VsVCTargetsPath) +endblock() if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.05) run_cmake(VsJustMyCode) @@ -65,9 +66,8 @@ if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND CMAKE_C_COMPILER_VERSION VERSION_GREA endif() # Visual Studio 2017 has toolset version 141 -string(REPLACE "v" "" generator_toolset "${RunCMake_GENERATOR_TOOLSET}") if (RunCMake_GENERATOR MATCHES "Visual Studio 1[0-4] 201[0-5]" OR - (RunCMake_GENERATOR_TOOLSET AND generator_toolset VERSION_LESS "141")) + (RunCMake_GENERATOR_TOOLSET MATCHES "^v([0-9]+)" AND CMAKE_MATCH_1 LESS 141)) run_cmake(UnityBuildPre2017) else() run_cmake(UnityBuildNative) -- cgit v0.12 From e5fd973b14e25055bd686b55f518ad76cf1ed9fd Mon Sep 17 00:00:00 2001 From: Nikita Nemkin Date: Sat, 8 Feb 2025 03:54:26 +0500 Subject: VS: Set the linker image version using the target's VERSION property This matches the behavior of NMake, Ninja and older Visual Studio generators. Fixes: #13130 --- Source/cmVisualStudio10TargetGenerator.cxx | 7 ++++++ Tests/RunCMake/VS10Project/RunCMakeTest.cmake | 1 + .../VS10Project/VsImageVersion-check.cmake | 28 ++++++++++++++++++++++ Tests/RunCMake/VS10Project/VsImageVersion.cmake | 11 +++++++++ 4 files changed, 47 insertions(+) create mode 100644 Tests/RunCMake/VS10Project/VsImageVersion-check.cmake create mode 100644 Tests/RunCMake/VS10Project/VsImageVersion.cmake diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 57ba964..88b3e9a 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -4590,6 +4590,13 @@ bool cmVisualStudio10TargetGenerator::ComputeLinkOptions( } linkOptions.AddFlag("ProgramDataBaseFile", pdb); + // Add image version + int major, minor; + this->GeneratorTarget->GetTargetVersion(major, minor); + if (major || minor) { + linkOptions.AddFlag("Version", cmStrCat(major, '.', minor)); + } + // A Windows Runtime component uses internal .NET metadata, // so does not have an import library. if (this->GeneratorTarget->GetPropertyAsBool("VS_WINRT_COMPONENT") && diff --git a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake index ac3d2b2..232e637 100644 --- a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake +++ b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake @@ -49,6 +49,7 @@ run_cmake(VsSourceSettingsTool) run_cmake(VsPlatformToolset) run_cmake(VsControlFlowGuardLinkSetting) run_cmake(VsToolOverride) +run_cmake(VsImageVersion) run_cmake(VsWinRTByDefault) diff --git a/Tests/RunCMake/VS10Project/VsImageVersion-check.cmake b/Tests/RunCMake/VS10Project/VsImageVersion-check.cmake new file mode 100644 index 0000000..f0eeecd --- /dev/null +++ b/Tests/RunCMake/VS10Project/VsImageVersion-check.cmake @@ -0,0 +1,28 @@ +macro(ensure_link_version projectFile expected) + if(NOT EXISTS "${projectFile}") + set(RunCMake_TEST_FAILED "Project file ${projectFile} does not exist.") + return() + endif() + + file(STRINGS "${projectFile}" lines) + set(version "") + foreach(line IN LISTS lines) + if(line MATCHES "") + set(in_link TRUE) + elseif(line MATCHES "") + if(NOT version STREQUAL "${expected}") + set(RunCMake_TEST_FAILED " not found or incorrect: ${version} vs ${expected}") + return() + endif() + set(in_link FALSE) + set(version "") + elseif(in_link AND line MATCHES "([^<]+)") + set(version ${CMAKE_MATCH_1}) + endif() + endforeach() +endmacro() + +ensure_link_version("${RunCMake_TEST_BINARY_DIR}/app-C.vcxproj" 0.1) +ensure_link_version("${RunCMake_TEST_BINARY_DIR}/app-CXX.vcxproj" 1.0) +ensure_link_version("${RunCMake_TEST_BINARY_DIR}/lib-C.vcxproj" 65535.65535) +ensure_link_version("${RunCMake_TEST_BINARY_DIR}/lib-CXX.vcxproj" "") diff --git a/Tests/RunCMake/VS10Project/VsImageVersion.cmake b/Tests/RunCMake/VS10Project/VsImageVersion.cmake new file mode 100644 index 0000000..80e49a6 --- /dev/null +++ b/Tests/RunCMake/VS10Project/VsImageVersion.cmake @@ -0,0 +1,11 @@ +enable_language(C CXX) + +add_executable(app-C empty.c) +add_executable(app-CXX empty.cxx) +add_library(lib-C SHARED empty.c) +add_library(lib-CXX SHARED empty.cxx) + +set_property(TARGET app-C PROPERTY VERSION 0.1) +set_property(TARGET app-CXX PROPERTY VERSION 1.0) +set_property(TARGET lib-C PROPERTY VERSION 65535.65535) +set_property(TARGET lib-CXX PROPERTY VERSION "") -- cgit v0.12