Browse Source

try_compile(): Include languages with _ or - when passing linker vars

Fixes: #25809
Craig Scott 1 year ago
parent
commit
98cc86e265

+ 1 - 1
Source/cmCoreTryCompile.cxx

@@ -1163,7 +1163,7 @@ cm::optional<cmTryCompileResult> cmCoreTryCompile::TryCompileCode(
       vars.insert(kCMAKE_LINKER_TYPE);
       auto defs = this->Makefile->GetDefinitions();
       cmsys::RegularExpression linkerTypeDef{
-        "^CMAKE_[A-Za-z]+_USING_LINKER_"
+        "^CMAKE_[A-Za-z_-]+_USING_LINKER_"
       };
       for (auto const& def : defs) {
         if (linkerTypeDef.find(def)) {

+ 8 - 0
Tests/RunCMake/try_compile/ProjectVars-stdout.txt

@@ -0,0 +1,8 @@
+CMAKE_LINKER_TYPE = DEFAULT
+.*CMAKE_C_USING_LINKER_MODE = [^
+]*
+.*CMAKE_C_USING_LINKER_abc123 = /path/to/somewhere
+.*CMAKE_C_USING_LINKER_Hi_There = some-tool
+.*CMAKE_ASM_NASM_USING_LINKER_custom = /place/holder
+.*CMAKE_ASM-ATT_USING_LINKER_custom = /more/text
+.*CMAKE_ASM-ATT_USING_LINKER_MODE = TOOL

+ 18 - 0
Tests/RunCMake/try_compile/ProjectVars.cmake

@@ -0,0 +1,18 @@
+cmake_minimum_required(VERSION 3.29)
+
+enable_language(C)
+
+set(CMAKE_LINKER_TYPE DEFAULT)
+set(CMAKE_C_USING_LINKER_abc123 /path/to/somewhere)
+set(CMAKE_C_USING_LINKER_Hi_There some-tool)
+set(CMAKE_ASM_NASM_USING_LINKER_custom /place/holder)
+set(CMAKE_ASM-ATT_USING_LINKER_custom /more/text)
+set(CMAKE_ASM-ATT_USING_LINKER_MODE TOOL)
+
+try_compile(RESULT
+  PROJECT TestProject
+  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/proj_vars
+  OUTPUT_VARIABLE output
+)
+
+message(STATUS "\n${output}")

+ 2 - 0
Tests/RunCMake/try_compile/RunCMakeTest.cmake

@@ -47,6 +47,8 @@ run_cmake(NonSourceCompileDefinitions)
 
 run_cmake(Verbose)
 
+run_cmake(ProjectVars)
+
 set(RunCMake_TEST_OPTIONS --debug-trycompile)
 run_cmake(PlatformVariables)
 run_cmake(WarnDeprecated)

+ 12 - 0
Tests/RunCMake/try_compile/proj_vars/CMakeLists.txt

@@ -0,0 +1,12 @@
+cmake_minimum_required(VERSION 3.29)
+project(TestProject LANGUAGES NONE)
+
+add_custom_target(show_vars ALL
+  COMMAND ${CMAKE_COMMAND} -E echo "CMAKE_LINKER_TYPE = ${CMAKE_LINKER_TYPE}"
+  COMMAND ${CMAKE_COMMAND} -E echo "CMAKE_C_USING_LINKER_MODE = ${CMAKE_C_USING_LINKER_MODE}"
+  COMMAND ${CMAKE_COMMAND} -E echo "CMAKE_C_USING_LINKER_abc123 = ${CMAKE_C_USING_LINKER_abc123}"
+  COMMAND ${CMAKE_COMMAND} -E echo "CMAKE_C_USING_LINKER_Hi_There = ${CMAKE_C_USING_LINKER_Hi_There}"
+  COMMAND ${CMAKE_COMMAND} -E echo "CMAKE_ASM_NASM_USING_LINKER_custom = ${CMAKE_ASM_NASM_USING_LINKER_custom}"
+  COMMAND ${CMAKE_COMMAND} -E echo "CMAKE_ASM-ATT_USING_LINKER_custom = ${CMAKE_ASM-ATT_USING_LINKER_custom}"
+  COMMAND ${CMAKE_COMMAND} -E echo "CMAKE_ASM-ATT_USING_LINKER_MODE = ${CMAKE_ASM-ATT_USING_LINKER_MODE}"
+)