Browse Source

Merge topic 'fix-ctkFunctionCheckCompilerFlags'

* fix-ctkFunctionCheckCompilerFlags:
  Fix ctkFunctionCheckCompilerFlags so that successive invocation works
Jean-Christophe Fillion-Robin 14 years ago
parent
commit
8c5f353051
1 changed files with 10 additions and 3 deletions
  1. 10 3
      CMake/ctkFunctionCheckCompilerFlags.cmake

+ 10 - 3
CMake/ctkFunctionCheckCompilerFlags.cmake

@@ -32,9 +32,16 @@ FUNCTION(ctkFunctionCheckCompilerFlags CXX_FLAG_TO_TEST RESULT_VAR)
     MESSAGE(FATAL_ERROR "CXX_FLAG_TO_TEST shouldn't be empty")
   ENDIF()
   
-  CHECK_CXX_ACCEPTS_FLAG(${CXX_FLAG_TO_TEST} HAS_FLAG)
-
-  IF(HAS_FLAG)
+  # Internally, the macro CMAKE_CXX_ACCEPTS_FLAG calls TRY_COMPILE. To avoid 
+  # the cost of compiling the test each time the project is configured, the variable set by 
+  # the macro is added to the cache so that following invocation of the macro with 
+  # the same variable name skip the compilation step. 
+  # For that same reason, ctkFunctionCheckCompilerFlags function appends a unique suffix to 
+  # the HAS_FLAG variable. This suffix is created using a 'clean version' of the flag to test.
+  STRING(REGEX REPLACE "-\\s\\$\\+\\*\\{\\}\\(\\)\\#" "" suffix ${CXX_FLAG_TO_TEST})
+  CHECK_CXX_ACCEPTS_FLAG(${CXX_FLAG_TO_TEST} HAS_FLAG_${suffix})
+  
+  IF(HAS_FLAG_${suffix})
     SET(${RESULT_VAR} "${${RESULT_VAR}} ${CXX_FLAG_TO_TEST}" PARENT_SCOPE)
   ENDIF()