Hello,

  As cmake become more and more popular we can see more cmake packaged
project. One issue I am having right now is that I cannot finely
control a feature of CMake. I'd like to be able to override the import
of compiler options.
  For instance I have a package (let say VTK) which define:

SET(CMAKE_BUILD_SETTING_CXX_COMPILER "c++")
SET(CMAKE_BUILD_SETTING_CXX_FLAGS "")
SET(CMAKE_BUILD_SETTING_CXX_FLAGS_DEBUG "-g")
SET(CMAKE_BUILD_SETTING_CXX_FLAGS_RELEASE "-O3")
SET(CMAKE_BUILD_SETTING_CXX_FLAGS_MINSIZEREL "-Os")
SET(CMAKE_BUILD_SETTING_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")


  Unless I do the correct symlink of c++ to the compiler I choose (let
say g++-4.2) cmake will not allow me to do so. Same goes for RELEASE
flag, in older cmake release -DNDEBUG was not part of the Release
flag...

  Here is the patch I am currently using (see cmake.patch). Advanced
user who knows that a certain compiler is compatible with another one
can set: CMAKE_OVERRIDE_COMPILER_MISMATCH. By default the old behavior
should be the same.

Thanks for comments,


-- 
Mathieu
Index: Modules/CMakeImportBuildSettings.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/CMakeImportBuildSettings.cmake,v
retrieving revision 1.8
diff -u -r1.8 CMakeImportBuildSettings.cmake
--- Modules/CMakeImportBuildSettings.cmake	24 Jul 2006 20:58:05 -0000	1.8
+++ Modules/CMakeImportBuildSettings.cmake	21 Aug 2007 09:26:56 -0000
@@ -119,7 +119,7 @@
     ENDIF(WIN32)
 
     # Enforce the C++ compiler setting.
-    IF(CMAKE_CXX_COMPILER_MISMATCH)
+    IF(CMAKE_CXX_COMPILER_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
       MESSAGE("Warning: CMake is forcing CMAKE_CXX_COMPILER to "
               "\"${CMAKE_BUILD_SETTING_CXX_COMPILER}\" to match that imported "
               "from ${CMAKE_BUILD_SETTING_PROJECT_NAME}.  This is required "
@@ -129,10 +129,10 @@
               "re-build one of those projects. Was set to ${CMAKE_CXX_COMPILER}")
       SET(CMAKE_CXX_COMPILER ${CMAKE_BUILD_SETTING_CXX_COMPILER}
           CACHE STRING "C++ compiler imported from ${CMAKE_BUILD_SETTING_PROJECT_NAME}." FORCE)
-    ENDIF(CMAKE_CXX_COMPILER_MISMATCH)
+    ENDIF(CMAKE_CXX_COMPILER_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
 
     # Enforce the build type.
-    IF(CMAKE_BUILD_TYPE_MISMATCH)
+    IF(CMAKE_BUILD_TYPE_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
       MESSAGE("Warning: CMake is forcing CMAKE_BUILD_TYPE to "
               "\"${CMAKE_BUILD_SETTING_BUILD_TYPE}\" to match that imported "
               "from ${CMAKE_BUILD_SETTING_PROJECT_NAME}.  This is required "
@@ -142,11 +142,11 @@
               "re-build one of those projects.")
       SET(CMAKE_BUILD_TYPE ${CMAKE_BUILD_SETTING_BUILD_TYPE}
           CACHE STRING "Build type imported from ${CMAKE_BUILD_SETTING_PROJECT_NAME}." FORCE)
-    ENDIF(CMAKE_BUILD_TYPE_MISMATCH)
+    ENDIF(CMAKE_BUILD_TYPE_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
 
     # Enforce the C build variation flags.
 
-    IF(CMAKE_C_FLAGS_DEBUG_MISMATCH)
+    IF(CMAKE_C_FLAGS_DEBUG_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
       MESSAGE("Warning: CMake is forcing CMAKE_C_FLAGS_DEBUG to "
               "\"${CMAKE_BUILD_SETTING_C_FLAGS_DEBUG}\" to match that imported "
               "from ${CMAKE_BUILD_SETTING_PROJECT_NAME}.  "
@@ -155,9 +155,9 @@
               "re-build one of those projects.")
       SET(CMAKE_C_FLAGS_DEBUG ${CMAKE_BUILD_SETTING_C_FLAGS_DEBUG}
           CACHE STRING "C DEBUG flags imported from ${CMAKE_BUILD_SETTING_PROJECT_NAME}." FORCE)
-    ENDIF(CMAKE_C_FLAGS_DEBUG_MISMATCH)
+    ENDIF(CMAKE_C_FLAGS_DEBUG_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
 
-    IF(CMAKE_C_FLAGS_RELEASE_MISMATCH)
+    IF(CMAKE_C_FLAGS_RELEASE_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
       MESSAGE("Warning: CMake is forcing CMAKE_C_FLAGS_RELEASE to "
               "\"${CMAKE_BUILD_SETTING_C_FLAGS_RELEASE}\" to match that imported "
               "from ${CMAKE_BUILD_SETTING_PROJECT_NAME}.  "
@@ -166,9 +166,9 @@
               "re-build one of those projects.")
       SET(CMAKE_C_FLAGS_RELEASE ${CMAKE_BUILD_SETTING_C_FLAGS_RELEASE}
           CACHE STRING "C RELEASE flags imported from ${CMAKE_BUILD_SETTING_PROJECT_NAME}." FORCE)
-    ENDIF(CMAKE_C_FLAGS_RELEASE_MISMATCH)
+    ENDIF(CMAKE_C_FLAGS_RELEASE_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
 
-    IF(CMAKE_C_FLAGS_MINSIZEREL_MISMATCH)
+    IF(CMAKE_C_FLAGS_MINSIZEREL_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
       MESSAGE("Warning: CMake is forcing CMAKE_C_FLAGS_MINSIZEREL to "
               "\"${CMAKE_BUILD_SETTING_C_FLAGS_MINSIZEREL}\" to match that imported "
               "from ${CMAKE_BUILD_SETTING_PROJECT_NAME}.  "
@@ -177,9 +177,9 @@
               "re-build one of those projects.")
       SET(CMAKE_C_FLAGS_MINSIZEREL ${CMAKE_BUILD_SETTING_C_FLAGS_MINSIZEREL}
           CACHE STRING "C MINSIZEREL flags imported from ${CMAKE_BUILD_SETTING_PROJECT_NAME}." FORCE)
-    ENDIF(CMAKE_C_FLAGS_MINSIZEREL_MISMATCH)
+    ENDIF(CMAKE_C_FLAGS_MINSIZEREL_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
 
-    IF(CMAKE_C_FLAGS_RELWITHDEBINFO_MISMATCH)
+    IF(CMAKE_C_FLAGS_RELWITHDEBINFO_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
       MESSAGE("Warning: CMake is forcing CMAKE_C_FLAGS_RELWITHDEBINFO to "
               "\"${CMAKE_BUILD_SETTING_C_FLAGS_RELWITHDEBINFO}\" to match that imported "
               "from ${CMAKE_BUILD_SETTING_PROJECT_NAME}.  "
@@ -188,11 +188,11 @@
               "re-build one of those projects.")
       SET(CMAKE_C_FLAGS_RELWITHDEBINFO ${CMAKE_BUILD_SETTING_C_FLAGS_RELWITHDEBINFO}
           CACHE STRING "C RELWITHDEBINFO flags imported from ${CMAKE_BUILD_SETTING_PROJECT_NAME}." FORCE)
-    ENDIF(CMAKE_C_FLAGS_RELWITHDEBINFO_MISMATCH)
+    ENDIF(CMAKE_C_FLAGS_RELWITHDEBINFO_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
 
     # Enforce the C++ build variation flags.
 
-    IF(CMAKE_CXX_FLAGS_DEBUG_MISMATCH)
+    IF(CMAKE_CXX_FLAGS_DEBUG_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
       MESSAGE("Warning: CMake is forcing CMAKE_CXX_FLAGS_DEBUG to "
               "\"${CMAKE_BUILD_SETTING_CXX_FLAGS_DEBUG}\" to match that imported "
               "from ${CMAKE_BUILD_SETTING_PROJECT_NAME}.  "
@@ -201,9 +201,9 @@
               "re-build one of those projects.")
       SET(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_BUILD_SETTING_CXX_FLAGS_DEBUG}
           CACHE STRING "C++ DEBUG flags imported from ${CMAKE_BUILD_SETTING_PROJECT_NAME}." FORCE)
-    ENDIF(CMAKE_CXX_FLAGS_DEBUG_MISMATCH)
+    ENDIF(CMAKE_CXX_FLAGS_DEBUG_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
 
-    IF(CMAKE_CXX_FLAGS_RELEASE_MISMATCH)
+    IF(CMAKE_CXX_FLAGS_RELEASE_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
       MESSAGE("Warning: CMake is forcing CMAKE_CXX_FLAGS_RELEASE to "
               "\"${CMAKE_BUILD_SETTING_CXX_FLAGS_RELEASE}\" to match that imported "
               "from ${CMAKE_BUILD_SETTING_PROJECT_NAME}.  "
@@ -212,9 +212,9 @@
               "re-build one of those projects.")
       SET(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_BUILD_SETTING_CXX_FLAGS_RELEASE}
           CACHE STRING "C++ RELEASE flags imported from ${CMAKE_BUILD_SETTING_PROJECT_NAME}." FORCE)
-    ENDIF(CMAKE_CXX_FLAGS_RELEASE_MISMATCH)
+    ENDIF(CMAKE_CXX_FLAGS_RELEASE_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
 
-    IF(CMAKE_CXX_FLAGS_MINSIZEREL_MISMATCH)
+    IF(CMAKE_CXX_FLAGS_MINSIZEREL_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
       MESSAGE("Warning: CMake is forcing CMAKE_CXX_FLAGS_MINSIZEREL to "
               "\"${CMAKE_BUILD_SETTING_CXX_FLAGS_MINSIZEREL}\" to match that imported "
               "from ${CMAKE_BUILD_SETTING_PROJECT_NAME}.  "
@@ -223,9 +223,9 @@
               "re-build one of those projects.")
       SET(CMAKE_CXX_FLAGS_MINSIZEREL ${CMAKE_BUILD_SETTING_CXX_FLAGS_MINSIZEREL}
           CACHE STRING "C++ MINSIZEREL flags imported from ${CMAKE_BUILD_SETTING_PROJECT_NAME}." FORCE)
-    ENDIF(CMAKE_CXX_FLAGS_MINSIZEREL_MISMATCH)
+    ENDIF(CMAKE_CXX_FLAGS_MINSIZEREL_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
 
-    IF(CMAKE_CXX_FLAGS_RELWITHDEBINFO_MISMATCH)
+    IF(CMAKE_CXX_FLAGS_RELWITHDEBINFO_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
       MESSAGE("Warning: CMake is forcing CMAKE_CXX_FLAGS_RELWITHDEBINFO to "
               "\"${CMAKE_BUILD_SETTING_CXX_FLAGS_RELWITHDEBINFO}\" to match that imported "
               "from ${CMAKE_BUILD_SETTING_PROJECT_NAME}.  "
@@ -234,7 +234,7 @@
               "re-build one of those projects.")
       SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_BUILD_SETTING_CXX_FLAGS_RELWITHDEBINFO}
           CACHE STRING "C++ RELWITHDEBINFO flags imported from ${CMAKE_BUILD_SETTING_PROJECT_NAME}." FORCE)
-    ENDIF(CMAKE_CXX_FLAGS_RELWITHDEBINFO_MISMATCH)
+    ENDIF(CMAKE_CXX_FLAGS_RELWITHDEBINFO_MISMATCH AND NOT CMAKE_OVERRIDE_COMPILER_MISMATCH)
 
   ELSE(${SETTINGS_FILE} MATCHES ".+")
     MESSAGE(SEND_ERROR "CMAKE_IMPORT_BUILD_SETTINGS called with no argument.")
_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to