[Cmake-commits] [cmake-commits] alex committed CMakeFindEclipseCDT4.cmake 1.2 1.3

cmake-commits at cmake.org cmake-commits at cmake.org
Wed Sep 16 14:37:23 EDT 2009


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

Modified Files:
	CMakeFindEclipseCDT4.cmake 
Log Message:
Put compiler defined macros into eclipse project files

Now gcc is queried also for the builtin definitions, and they are then added
to the .cproject file. This should make the preprocessor highlighting in
eclipse work better (#9272)
Patch mostly from Miguel.

Alex


Index: CMakeFindEclipseCDT4.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/CMakeFindEclipseCDT4.cmake,v
retrieving revision 1.2
retrieving revision 1.3
diff -C 2 -d -r1.2 -r1.3
*** CMakeFindEclipseCDT4.cmake	28 Jun 2009 09:59:42 -0000	1.2
--- CMakeFindEclipseCDT4.cmake	16 Sep 2009 18:37:21 -0000	1.3
***************
*** 9,20 ****
  # 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.
! 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")
  
--- 9,20 ----
  # 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.
! MACRO(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang _result _resultDefines)
    SET(${_result})
    SET(_gccOutput)
    FILE(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy" "\n" )
!   EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -v -E -x ${_lang} -dD dummy
                    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles
                    ERROR_VARIABLE _gccOutput
!                   OUTPUT_VARIABLE _gccStdout )
    FILE(REMOVE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy")
  
***************
*** 24,27 ****
--- 24,40 ----
      SEPARATE_ARGUMENTS(${_result})
    ENDIF( "${_gccOutput}" MATCHES "> search starts here[^\n]+\n *(.+) *\n *End of (search) list" )
+   
+   IF( "${_gccStdout}" MATCHES "built-in>\"\n(.+)# 1 +\"dummy\"" )
+     SET(_builtinDefines ${CMAKE_MATCH_1})
+     # Remove the '# 1 "<command-line>"' lines
+     STRING(REGEX REPLACE "# 1[^\n]+\n" "" _filteredOutput "${_builtinDefines}")
+     # Remove the "#define " parts from the output:
+     STRING(REGEX REPLACE "#define " "" _defineRemoved "${_filteredOutput}")
+     # Replace the line breaks with spaces, so we can use separate arguments afterwards
+     STRING(REGEX REPLACE "\n" " " _defineRemoved "${_defineRemoved}")
+     # Remove space at the end, this would produce empty list items
+     STRING(REGEX REPLACE " +$" "" ${_resultDefines} "${_defineRemoved}")
+     SEPARATE_ARGUMENTS(${_resultDefines})
+   ENDIF( "${_gccStdout}" MATCHES "built-in>\"\n(.+)# 1 +\"dummy\"" )
  ENDMACRO(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang)
  
***************
*** 43,54 ****
  # 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)
  
--- 56,69 ----
  # 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 _defines)
    SET(CMAKE_ECLIPSE_C_SYSTEM_INCLUDE_DIRS "${_dirs}" CACHE INTERNAL "C compiler system include directories")
+   SET(CMAKE_ECLIPSE_C_SYSTEM_DEFINED_MACROS "${_defines}" CACHE INTERNAL "C compiler system defined macros")
  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 _defines)
    SET(CMAKE_ECLIPSE_CXX_SYSTEM_INCLUDE_DIRS "${_dirs}" CACHE INTERNAL "CXX compiler system include directories")
+   SET(CMAKE_ECLIPSE_CXX_SYSTEM_DEFINED_MACROS "${_defines}" CACHE INTERNAL "CXX compiler system defined macros")
  ENDIF ("${CMAKE_CXX_COMPILER_ID}" MATCHES GNU  AND NOT  CMAKE_ECLIPSE_CXX_SYSTEM_INCLUDE_DIRS)
  



More information about the Cmake-commits mailing list