@@ -15,18 +15,35 @@ function(EnableCompilerFlag _flag _C _CXX _LD)
15
15
string (REGEX REPLACE "[^A-Za-z0-9]+" "_" varname "${varname} " )
16
16
string (REGEX REPLACE "^_+" "" varname "${varname} " )
17
17
string (TOUPPER "${varname} " varname )
18
+
19
+ # _C is expected to be a direct boolean-like value (e.g., "ON", "OFF", true, false)
20
+ # passed from ADD_ZSTD_COMPILATION_FLAGS, indicating if the C flag should be checked.
18
21
if (_C )
19
22
CHECK_C_COMPILER_FLAG (${_flag} C_FLAG_${varname} )
20
23
if (C_FLAG_${varname} )
21
24
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flag} " PARENT_SCOPE )
22
25
endif ()
23
26
endif ()
24
- if (_CXX )
27
+
28
+ # _CXX is unique: it can be a direct boolean-like value (e.g., false) or
29
+ # the *name* of a variable (e.g., "ZSTD_ENABLE_CXX") that holds the boolean-like value.
30
+ # Therefore, it must be dereferenced with ${} to get its actual value.
31
+ if (${_CXX} ) # Dereference _CXX to get the value of the variable whose name is passed
25
32
CHECK_CXX_COMPILER_FLAG (${_flag} CXX_FLAG_${varname} )
26
33
if (CXX_FLAG_${varname} )
27
34
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flag} " PARENT_SCOPE )
28
35
endif ()
36
+ # If CHECK_CXX_COMPILER_FLAG was run, CXX_FLAG_${varname} is now defined (as TRUE or FALSE).
37
+ else ()
38
+ # If the condition ${_CXX} is false (e.g., ZSTD_ENABLE_CXX is OFF),
39
+ # CHECK_CXX_COMPILER_FLAG is skipped.
40
+ # We must ensure CXX_FLAG_${varname} is defined as FALSE for subsequent logic
41
+ # that might read it (e.g., for ZSTD_HAS_NOEXECSTACK).
42
+ set (CXX_FLAG_${varname} FALSE PARENT_SCOPE )
29
43
endif ()
44
+
45
+ # _LD is expected to be a direct boolean-like value (e.g., "ON", "OFF", true, false)
46
+ # passed from ADD_ZSTD_COMPILATION_FLAGS, indicating if the Linker flag should be checked.
30
47
if (_LD )
31
48
# We never add a linker flag with CMake < 3.18. We will
32
49
# implement CHECK_LINKER_FLAG() like feature for CMake < 3.18
0 commit comments