diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2018-09-11 11:03:43 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2018-09-11 11:08:18 +0200 |
commit | 21dd16562fddb3bef5d0dd91c5bf3533b2b533fc (patch) | |
tree | 38317eb55c710293ee3329b9122a54f231764186 /cmake | |
parent | b12767a8bb3b87cc89e871d73d65291883df1270 (diff) | |
download | cmocka-21dd16562fddb3bef5d0dd91c5bf3533b2b533fc.tar.gz cmocka-21dd16562fddb3bef5d0dd91c5bf3533b2b533fc.tar.xz cmocka-21dd16562fddb3bef5d0dd91c5bf3533b2b533fc.zip |
cmake: Improve CheckCCompilerFlagSSP
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/Modules/CheckCCompilerFlagSSP.cmake | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/cmake/Modules/CheckCCompilerFlagSSP.cmake b/cmake/Modules/CheckCCompilerFlagSSP.cmake index ab206ca..eeaf4fc 100644 --- a/cmake/Modules/CheckCCompilerFlagSSP.cmake +++ b/cmake/Modules/CheckCCompilerFlagSSP.cmake @@ -18,12 +18,31 @@ # Requires cmake 3.10 #include_guard(GLOBAL) include(CheckCSourceCompiles) +include(CMakeCheckCompilerFlagCommonPatterns) macro(CHECK_C_COMPILER_FLAG_SSP _FLAG _RESULT) set(SAFE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") set(CMAKE_REQUIRED_FLAGS "${_FLAG}") - check_c_source_compiles("int main(int argc, char **argv) { char buffer[256]; return buffer[argc]=0;}" ${_RESULT}) + # Normalize locale during test compilation. + set(_CheckCCompilerFlag_LOCALE_VARS LC_ALL LC_MESSAGES LANG) + foreach(v ${_CheckCCompilerFlag_LOCALE_VARS}) + set(_CheckCCompilerFlag_SAVED_${v} "$ENV{${v}}") + set(ENV{${v}} C) + endforeach() + + CHECK_COMPILER_FLAG_COMMON_PATTERNS(_CheckCCompilerFlag_COMMON_PATTERNS) + check_c_source_compiles("int main(int argc, char **argv) { char buffer[256]; return buffer[argc]=0;}" + ${_RESULT} + # Some compilers do not fail with a bad flag + FAIL_REGEX "command line option .* is valid for .* but not for C" # GNU + ${_CheckCCompilerFlag_COMMON_PATTERNS}) + foreach(v ${_CheckCCompilerFlag_LOCALE_VARS}) + set(ENV{${v}} ${_CheckCCompilerFlag_SAVED_${v}}) + unset(_CheckCCompilerFlag_SAVED_${v}) + endforeach() + unset(_CheckCCompilerFlag_LOCALE_VARS) + unset(_CheckCCompilerFlag_COMMON_PATTERNS) set(CMAKE_REQUIRED_FLAGS "${SAFE_CMAKE_REQUIRED_FLAGS}") endmacro(CHECK_C_COMPILER_FLAG_SSP) |