From 327ef24fbdd3d6642a42404b01f1469912963e12 Mon Sep 17 00:00:00 2001 From: James Zern Date: Mon, 5 Jul 2021 17:52:51 -0700 Subject: [PATCH] cpu.cmake: fix compiler flag detection w/3.17.0+ Between 3.17.0 and 3.18.2 check_cxx_compiler_flag() sets a normal variable at parent scope while check_cxx_source_compiles() continues to set an internal cache variable, so we unset both to avoid the failure / success state persisting between checks. This was fixed in 3.18.3 [1], but regressed shortly afterward [2]; currently seen with 3.20.0 installed via homebrew. [1] https://gitlab.kitware.com/cmake/cmake/-/issues/21207 [2] 90dead024c CheckCompilerFlag: unified way to check compiler flags per language Change-Id: I57282f89b07a9cfd85aca7569380f7d115c0b3cf --- cmake/cpu.cmake | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cmake/cpu.cmake b/cmake/cpu.cmake index 255714b1..bc0dbc98 100644 --- a/cmake/cpu.cmake +++ b/cmake/cpu.cmake @@ -125,6 +125,12 @@ foreach(I_SIMD RANGE ${WEBP_SIMD_FLAGS_RANGE}) list(GET SIMD_DISABLE_FLAGS ${I_SIMD} SIMD_COMPILE_FLAG) include(CheckCCompilerFlag) if(SIMD_COMPILE_FLAG) + # Between 3.17.0 and 3.18.2 check_cxx_compiler_flag() sets a normal + # variable at parent scope while check_cxx_source_compiles() continues + # to set an internal cache variable, so we unset both to avoid the + # failure / success state persisting between checks. See + # https://gitlab.kitware.com/cmake/cmake/-/issues/21207. + unset(HAS_COMPILE_FLAG) unset(HAS_COMPILE_FLAG CACHE) check_c_compiler_flag(${SIMD_COMPILE_FLAG} HAS_COMPILE_FLAG) if(HAS_COMPILE_FLAG) @@ -142,6 +148,7 @@ foreach(I_SIMD RANGE ${WEBP_SIMD_FLAGS_RANGE}) "warning: argument unused during compilation:" ${COMMON_PATTERNS}) if(NOT FLAG_${SIMD_COMPILE_FLAG}) + unset(HAS_COMPILE_FLAG) unset(HAS_COMPILE_FLAG CACHE) endif() endif()