8e6f6155c0
variable is already added to the cache inside cmTryRunCommand.cxx, so the value used here was ignored. Additionally the INTERNAL made it internal, which shouldn't be done when cross compiling, since here the user is required to edit this variable manually e.g. using ccmake. Alex
68 lines
2.8 KiB
CMake
68 lines
2.8 KiB
CMake
# - Check if the source code provided in the SOURCE argument compiles and runs.
|
|
# CHECK_CXX_SOURCE_RUNS(SOURCE VAR)
|
|
# - macro which checks if the source code compiles
|
|
# SOURCE - source code to try to compile
|
|
# VAR - variable to store the result, 1 for success, empty for failure
|
|
#
|
|
# The following variables may be set before calling this macro to
|
|
# modify the way the check is run:
|
|
#
|
|
# CMAKE_REQUIRED_FLAGS = string of compile command line flags
|
|
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
|
|
# CMAKE_REQUIRED_INCLUDES = list of include directories
|
|
# CMAKE_REQUIRED_LIBRARIES = list of libraries to link
|
|
|
|
MACRO(CHECK_CXX_SOURCE_RUNS SOURCE VAR)
|
|
IF("${VAR}" MATCHES "^${VAR}$")
|
|
SET(MACRO_CHECK_FUNCTION_DEFINITIONS
|
|
"-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
|
|
IF(CMAKE_REQUIRED_LIBRARIES)
|
|
SET(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES
|
|
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
|
|
ELSE(CMAKE_REQUIRED_LIBRARIES)
|
|
SET(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES)
|
|
ENDIF(CMAKE_REQUIRED_LIBRARIES)
|
|
IF(CMAKE_REQUIRED_INCLUDES)
|
|
SET(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES
|
|
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
|
|
ELSE(CMAKE_REQUIRED_INCLUDES)
|
|
SET(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES)
|
|
ENDIF(CMAKE_REQUIRED_INCLUDES)
|
|
FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx"
|
|
"${SOURCE}\n")
|
|
|
|
MESSAGE(STATUS "Performing Test ${VAR}")
|
|
TRY_RUN(${VAR} ${VAR}_COMPILED
|
|
${CMAKE_BINARY_DIR}
|
|
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx
|
|
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
|
|
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
|
|
"${CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES}"
|
|
"${CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES}"
|
|
COMPILE_OUTPUT_VARIABLE OUTPUT)
|
|
|
|
# if it did not compile make the return value fail code of 1
|
|
IF(NOT ${VAR}_COMPILED)
|
|
SET(${VAR} 1)
|
|
ENDIF(NOT ${VAR}_COMPILED)
|
|
# if the return value was 0 then it worked
|
|
SET(result_var ${${VAR}})
|
|
IF("${result_var}" EQUAL 0)
|
|
MESSAGE(STATUS "Performing Test ${VAR} - Success")
|
|
FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
|
"Performing C++ SOURCE FILE Test ${VAR} succeded with the following output:\n"
|
|
"${OUTPUT}\n"
|
|
"Return value: ${${VAR}}\n"
|
|
"Source file was:\n${SOURCE}\n")
|
|
ELSE("${result_var}" EQUAL 0)
|
|
MESSAGE(STATUS "Performing Test ${VAR} - Failed")
|
|
FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
|
"Performing C++ SOURCE FILE Test ${VAR} failed with the following output:\n"
|
|
"${OUTPUT}\n"
|
|
"Return value: ${${VAR}}\n"
|
|
"Source file was:\n${SOURCE}\n")
|
|
ENDIF("${result_var}" EQUAL 0)
|
|
ENDIF("${VAR}" MATCHES "^${VAR}$")
|
|
ENDMACRO(CHECK_CXX_SOURCE_RUNS)
|
|
|