Browse Source

BUG: don't fail if a compiler is given in CMAKE_C/CXX_COMPILER but it can't
be found in the path

Alex

Alexander Neundorf 19 years ago
parent
commit
c8dd1caff9
2 changed files with 17 additions and 4 deletions
  1. 7 2
      Modules/CMakeDetermineCCompiler.cmake
  2. 10 2
      Modules/CMakeDetermineCXXCompiler.cmake

+ 7 - 2
Modules/CMakeDetermineCCompiler.cmake

@@ -63,12 +63,17 @@ IF(NOT CMAKE_C_COMPILER)
 ELSE(NOT CMAKE_C_COMPILER)
 
   # if a compiler was specified by the user but without path, 
-  # now try to find it with the full path and force it into the cache
+  # now try to find it with the full path
+  # if it is found, force it into the cache, 
+  # if not, don't overwrite the setting (which was given by the user) with "NOTFOUND"
+  # if the C compiler already had a path, reuse it for searching the CXX compiler
   GET_FILENAME_COMPONENT(_CMAKE_USER_C_COMPILER_PATH "${CMAKE_C_COMPILER}" PATH)
   IF(NOT _CMAKE_USER_C_COMPILER_PATH)
     FIND_PROGRAM(CMAKE_C_COMPILER_WITH_PATH NAMES ${CMAKE_C_COMPILER})
     MARK_AS_ADVANCED(CMAKE_C_COMPILER_WITH_PATH)
-    SET(CMAKE_C_COMPILER ${CMAKE_C_COMPILER_WITH_PATH} CACHE FILEPATH "C compiler" FORCE)
+    IF(CMAKE_C_COMPILER_WITH_PATH)
+      SET(CMAKE_C_COMPILER ${CMAKE_C_COMPILER_WITH_PATH} CACHE FILEPATH "C compiler" FORCE)
+    ENDIF(CMAKE_C_COMPILER_WITH_PATH)
   ENDIF(NOT _CMAKE_USER_C_COMPILER_PATH)
 ENDIF(NOT CMAKE_C_COMPILER)
 MARK_AS_ADVANCED(CMAKE_C_COMPILER)

+ 10 - 2
Modules/CMakeDetermineCXXCompiler.cmake

@@ -60,13 +60,21 @@ IF(NOT CMAKE_CXX_COMPILER)
   ENDIF(CMAKE_CXX_COMPILER_INIT AND NOT CMAKE_CXX_COMPILER)
 ELSE(NOT CMAKE_CXX_COMPILER)
 
+# we only get here if CMAKE_CXX_COMPILER was specified using -D or a pre-made CMakeCache.txt
+# (e.g. via ctest) or set in CMAKE_TOOLCHAIN_FILE
+#
 # if a compiler was specified by the user but without path, 
-# now try to find it with the full path and force it into the cache
+# now try to find it with the full path
+# if it is found, force it into the cache, 
+# if not, don't overwrite the setting (which was given by the user) with "NOTFOUND"
+# if the CXX compiler already had a path, reuse it for searching the C compiler
   GET_FILENAME_COMPONENT(_CMAKE_USER_CXX_COMPILER_PATH "${CMAKE_CXX_COMPILER}" PATH)
   IF(NOT _CMAKE_USER_CXX_COMPILER_PATH)
     FIND_PROGRAM(CMAKE_CXX_COMPILER_WITH_PATH NAMES ${CMAKE_CXX_COMPILER})
     MARK_AS_ADVANCED(CMAKE_CXX_COMPILER_WITH_PATH)
-    SET(CMAKE_CXX_COMPILER ${CMAKE_CXX_COMPILER_WITH_PATH} CACHE FILEPATH "CXX compiler" FORCE)
+    IF(CMAKE_CXX_COMPILER_WITH_PATH)
+      SET(CMAKE_CXX_COMPILER ${CMAKE_CXX_COMPILER_WITH_PATH} CACHE FILEPATH "CXX compiler" FORCE)
+    ENDIF(CMAKE_CXX_COMPILER_WITH_PATH)
   ENDIF(NOT _CMAKE_USER_CXX_COMPILER_PATH)
 ENDIF(NOT CMAKE_CXX_COMPILER)
 MARK_AS_ADVANCED(CMAKE_CXX_COMPILER)