1 # - Check if the source code provided in the SOURCE argument compiles.
3 # modified version from cmake distribution
4 # added link directory settings
7 # CHECK_C_SOURCE_COMPILES(SOURCE VAR)
8 # - macro which checks if the source code compiles
9 # SOURCE - source code to try to compile
10 # VAR - variable to store whether the source code compiled
12 # The following variables may be set before calling this macro to
13 # modify the way the check is run:
15 # CMAKE_REQUIRED_FLAGS = string of compile command line flags
16 # CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
17 # CMAKE_REQUIRED_INCLUDES = list of include directories
18 # CMAKE_REQUIRED_LIBRARIES = list of libraries to link
19 # CMAKE_REQUIRED_LIBDIRS = list of libraries directories for linking
21 MACRO(CHECK_C_SOURCE_COMPILES SOURCE VAR)
22 IF("${VAR}" MATCHES "^${VAR}$")
23 SET(MACRO_CHECK_FUNCTION_DEFINITIONS
24 "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
25 IF(CMAKE_REQUIRED_LIBRARIES)
26 SET(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES
27 "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
28 ELSE(CMAKE_REQUIRED_LIBRARIES)
29 SET(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES)
30 ENDIF(CMAKE_REQUIRED_LIBRARIES)
31 IF(CMAKE_REQUIRED_LIBDIRS)
32 SET(CHECK_C_SOURCE_COMPILES_ADD_LIBDIRS
33 "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LIBDIRS}")
34 ELSE(CMAKE_REQUIRED_LIBDIRS)
35 SET(CHECK_C_SOURCE_COMPILES_ADD_LIBDIRS)
36 ENDIF(CMAKE_REQUIRED_LIBDIRS)
37 IF(CMAKE_REQUIRED_INCLUDES)
38 SET(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES
39 "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
40 ELSE(CMAKE_REQUIRED_INCLUDES)
41 SET(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES)
42 ENDIF(CMAKE_REQUIRED_INCLUDES)
43 FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c"
46 MESSAGE(STATUS "Performing Test ${VAR}")
49 ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c
50 COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
51 CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
52 "${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}"
53 "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}"
54 "${CHECK_C_SOURCE_COMPILES_ADD_LIBDIRS}"
55 OUTPUT_VARIABLE OUTPUT)
57 SET(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
58 MESSAGE(STATUS "Performing Test ${VAR} - Success")
59 FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
60 "Performing C SOURCE FILE Test ${VAR} succeded with the following output:\n"
62 "Source file was:\n${SOURCE}\n")
64 MESSAGE(STATUS "Performing Test ${VAR} - Failed")
65 SET(${VAR} "" CACHE INTERNAL "Test ${VAR}")
66 FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
67 "Performing C SOURCE FILE Test ${VAR} failed with the following output:\n"
69 "Source file was:\n${SOURCE}\n")
71 ENDIF("${VAR}" MATCHES "^${VAR}$")
72 ENDMACRO(CHECK_C_SOURCE_COMPILES)