[Cmake-commits] [cmake-commits] alex committed CMakeSystemSpecificInformation.cmake 1.41 1.42

cmake-commits at cmake.org cmake-commits at cmake.org
Fri Mar 13 16:53:00 EDT 2009


Update of /cvsroot/CMake/CMake/Modules
In directory public:/mounts/ram/cvs-serv20400/Modules

Modified Files:
	CMakeSystemSpecificInformation.cmake 
Log Message:
ENH: when using the Eclipse project generator, run gcc so that it tells us
its system include directories. These are catched in CMakeSystemSpecificInformation.cmake 
(only with the Eclipse generator) and then written by the Eclipse generator
in the Eclipse project file. This way Eclipse can find the standard headers
(#7585)
Not sure CMakeSystemSpecificInformation.cmake is the best place to do this.

Alex


Index: CMakeSystemSpecificInformation.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/CMakeSystemSpecificInformation.cmake,v
retrieving revision 1.41
retrieving revision 1.42
diff -C 2 -d -r1.41 -r1.42
*** CMakeSystemSpecificInformation.cmake	10 Jan 2009 01:26:07 -0000	1.41
--- CMakeSystemSpecificInformation.cmake	13 Mar 2009 20:52:58 -0000	1.42
***************
*** 36,39 ****
--- 36,77 ----
  
  
+ # The Eclipse generator needs to know the standard include path
+ # so that Eclipse ca find the headers at runtime and parsing etc. works better
+ # This is done here by actually running gcc with the options so it prints its
+ # system include directories, which are parsed then and stored in the cache.
+ IF("${CMAKE_EXTRA_GENERATOR}" MATCHES "Eclipse")
+ 
+   MACRO(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang _result)
+     SET(${_result})
+     SET(_gccOutput)
+     FILE(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy" "\n" )
+     EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -v -E -x ${_lang} dummy
+                    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles
+                    ERROR_VARIABLE _gccOutput
+                    OUTPUT_QUIET )
+     FILE(REMOVE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy")
+ 
+     IF( "${_gccOutput}" MATCHES "> search starts here[^\n]+\n *(.+) *\n *End of (search) list" )
+       SET(${_result} ${CMAKE_MATCH_1})
+       STRING(REPLACE "\n" " " ${_result} "${${_result}}")
+       SEPARATE_ARGUMENTS(${_result})
+     ENDIF( "${_gccOutput}" MATCHES "> search starts here[^\n]+\n *(.+) *\n *End of (search) list" )
+   ENDMACRO(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang)
+ 
+   # Now check for C
+   IF ("${CMAKE_C_COMPILER_ID}" MATCHES GNU  AND NOT  CMAKE_ECLIPSE_C_SYSTEM_INCLUDE_DIRS)
+     _DETERMINE_GCC_SYSTEM_INCLUDE_DIRS(c _dirs)
+     SET(CMAKE_ECLIPSE_C_SYSTEM_INCLUDE_DIRS "${_dirs}" CACHE INTERNAL "C compiler system include directories")
+   ENDIF ("${CMAKE_C_COMPILER_ID}" MATCHES GNU  AND NOT  CMAKE_ECLIPSE_C_SYSTEM_INCLUDE_DIRS)
+ 
+   # And now the same for C++
+   IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES GNU  AND NOT  CMAKE_ECLIPSE_CXX_SYSTEM_INCLUDE_DIRS)
+     _DETERMINE_GCC_SYSTEM_INCLUDE_DIRS(c++ _dirs)
+     SET(CMAKE_ECLIPSE_CXX_SYSTEM_INCLUDE_DIRS "${_dirs}" CACHE INTERNAL "CXX compiler system include directories")
+   ENDIF ("${CMAKE_CXX_COMPILER_ID}" MATCHES GNU  AND NOT  CMAKE_ECLIPSE_CXX_SYSTEM_INCLUDE_DIRS)
+ 
+ ENDIF("${CMAKE_EXTRA_GENERATOR}" MATCHES "Eclipse")
+ 
+ 
  # for most systems a module is the same as a shared library
  # so unless the variable CMAKE_MODULE_EXISTS is set just



More information about the Cmake-commits mailing list