Browse Source

Merge topic 'CheckCompilerFlag-restore-env' into release-3.23

9dd585d12c CheckCompilerFlag: Fix regression in locale environment preservation

Acked-by: Kitware Robot <[email protected]>
Acked-by: buildbot <[email protected]>
Merge-request: !7153
Brad King 3 years ago
parent
commit
c6ee02fc8d

+ 2 - 2
Modules/Internal/CheckFlagCommonConfig.cmake

@@ -59,8 +59,8 @@ macro(CMAKE_CHECK_FLAG_COMMON_INIT _FUNC _LANG _SRC _PATTERNS)
     return()
   endif()
   # Normalize locale during test compilation.
-  set(_locale_vars LC_ALL LC_MESSAGES LANG)
-  foreach(v IN LISTS _locale_vars)
+  set(_CFCC_locale_vars LC_ALL LC_MESSAGES LANG)
+  foreach(v IN LISTS _CFCC_locale_vars)
     set(_CMAKE_CHECK_FLAG_COMMON_CONFIG_locale_vars_saved_${v} "$ENV{${v}}")
     set(ENV{${v}} C)
   endforeach()

+ 9 - 0
Tests/RunCMake/CheckCompilerFlag/CheckCCompilerFlag.cmake

@@ -4,6 +4,10 @@ include(CheckCompilerFlag)
 
 set(C 1) # test that this is tolerated
 
+# test that the check uses an isolated locale
+set(_env_LC_ALL "${LC_ALL}")
+set(ENV{LC_ALL} "BAD")
+
 check_compiler_flag(C "-_this_is_not_a_flag_" SHOULD_FAIL)
 if(SHOULD_FAIL)
   message(SEND_ERROR "invalid C compile flag didn't fail.")
@@ -22,3 +26,8 @@ if(CMAKE_C_COMPILER_ID STREQUAL "GNU") # LCC C compiler silently ignore -frtti i
     message(SEND_ERROR "${CMAKE_C_COMPILER_ID} compiler flag '-frtti' check passed but should have failed")
   endif()
 endif()
+
+if(NOT "$ENV{LC_ALL}" STREQUAL "BAD")
+  message(SEND_ERROR "ENV{LC_ALL} was not preserved by check_compiler_flag")
+endif()
+set(ENV{LC_ALL} ${_env_LC_ALL})

+ 9 - 0
Tests/RunCMake/CheckCompilerFlag/CheckCXXCompilerFlag.cmake

@@ -4,6 +4,10 @@ include(CheckCompilerFlag)
 
 set(CXX 1) # test that this is tolerated
 
+# test that the check uses an isolated locale
+set(_env_LC_ALL "${LC_ALL}")
+set(ENV{LC_ALL} "BAD")
+
 check_compiler_flag(CXX "-_this_is_not_a_flag_" SHOULD_FAIL)
 if(SHOULD_FAIL)
   message(SEND_ERROR "invalid CXX compile flag didn't fail.")
@@ -15,3 +19,8 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|LCC|Clang" AND NOT "x${CMAKE_CXX_SIMULATE_
     message(SEND_ERROR "${CMAKE_CXX_COMPILER_ID} compiler flag '-x c++' check failed")
   endif()
 endif()
+
+if(NOT "$ENV{LC_ALL}" STREQUAL "BAD")
+  message(SEND_ERROR "ENV{LC_ALL} was not preserved by check_compiler_flag")
+endif()
+set(ENV{LC_ALL} ${_env_LC_ALL})