mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-09 07:39:47 -05:00
Restore support for backslashes in initial language-wide flags
Refactoring in commit bdc40742bd (CMakeDetermineCompilerId: Test without
COMPILER_ID_FLAGS if REQUIRE_SUCCESS, 2021-02-27, v3.20.0-rc3~6^2) added
an extra macro layer through which flag strings are passed. That caused
an extra level of argument re-parsing, and broke flags with backslashes.
Pass flags to the helper macro through variable names instead.
Fixes: #22041
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||||
|
|
||||||
macro(__determine_compiler_id_test testflags_in userflags)
|
macro(__determine_compiler_id_test testflags_var userflags_var)
|
||||||
separate_arguments(testflags UNIX_COMMAND "${testflags_in}")
|
separate_arguments(testflags UNIX_COMMAND "${${testflags_var}}")
|
||||||
CMAKE_DETERMINE_COMPILER_ID_BUILD("${lang}" "${testflags}" "${userflags}" "${src}")
|
CMAKE_DETERMINE_COMPILER_ID_BUILD("${lang}" "${testflags}" "${${userflags_var}}" "${src}")
|
||||||
CMAKE_DETERMINE_COMPILER_ID_MATCH_VENDOR("${lang}" "${COMPILER_${lang}_PRODUCED_OUTPUT}")
|
CMAKE_DETERMINE_COMPILER_ID_MATCH_VENDOR("${lang}" "${COMPILER_${lang}_PRODUCED_OUTPUT}")
|
||||||
|
|
||||||
if(NOT CMAKE_${lang}_COMPILER_ID)
|
if(NOT CMAKE_${lang}_COMPILER_ID)
|
||||||
@@ -44,7 +44,8 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
foreach(userflags "${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" "")
|
foreach(userflags "${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" "")
|
||||||
__determine_compiler_id_test("${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS_FIRST}" "${userflags}")
|
set(testflags "${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS_FIRST}")
|
||||||
|
__determine_compiler_id_test(testflags userflags)
|
||||||
if(CMAKE_${lang}_COMPILER_ID)
|
if(CMAKE_${lang}_COMPILER_ID)
|
||||||
break()
|
break()
|
||||||
endif()
|
endif()
|
||||||
@@ -55,7 +56,7 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
|||||||
# of helper flags. Stop when the compiler is identified.
|
# of helper flags. Stop when the compiler is identified.
|
||||||
foreach(userflags "${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" "")
|
foreach(userflags "${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" "")
|
||||||
foreach(testflags ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS_FIRST} "" ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS})
|
foreach(testflags ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS_FIRST} "" ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS})
|
||||||
__determine_compiler_id_test("${testflags}" "${userflags}")
|
__determine_compiler_id_test(testflags userflags)
|
||||||
if(CMAKE_${lang}_COMPILER_ID)
|
if(CMAKE_${lang}_COMPILER_ID)
|
||||||
break()
|
break()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -243,6 +243,7 @@ add_RunCMake_test(FileAPI -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
|
|||||||
add_RunCMake_test(FindBoost)
|
add_RunCMake_test(FindBoost)
|
||||||
add_RunCMake_test(FindLua)
|
add_RunCMake_test(FindLua)
|
||||||
add_RunCMake_test(FindOpenGL)
|
add_RunCMake_test(FindOpenGL)
|
||||||
|
add_RunCMake_test(InitialFlags)
|
||||||
if(CMake_TEST_FindOpenSSL)
|
if(CMake_TEST_FindOpenSSL)
|
||||||
add_RunCMake_test(FindOpenSSL)
|
add_RunCMake_test(FindOpenSSL)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
CMAKE_C_FLAGS='[^']*-Denv="a\\b"[^']+-Dvar="b\\c"[^']*'
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
set(CMAKE_C_FLAGS_INIT [[-Dvar="b\c"]])
|
||||||
|
enable_language(C)
|
||||||
|
message(STATUS "CMAKE_C_FLAGS='${CMAKE_C_FLAGS}'")
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.20)
|
||||||
|
project(${RunCMake_TEST} NONE)
|
||||||
|
include(${RunCMake_TEST}.cmake)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
CMAKE_CXX_FLAGS='[^']*-Denv="a\\b"[^']+-Dvar="b\\c"[^']*'
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
set(CMAKE_CXX_FLAGS_INIT [[-Dvar="b\c"]])
|
||||||
|
enable_language(CXX)
|
||||||
|
message(STATUS "CMAKE_CXX_FLAGS='${CMAKE_CXX_FLAGS}'")
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
include(RunCMake)
|
||||||
|
|
||||||
|
set(ENV{CFLAGS} "$ENV{CFLAGS} -Denv=\"a\\b\"")
|
||||||
|
run_cmake(C)
|
||||||
|
|
||||||
|
set(ENV{CXXFLAGS} "$ENV{CXXFLAGS} -Denv=\"a\\b\"")
|
||||||
|
run_cmake(CXX)
|
||||||
Reference in New Issue
Block a user