summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Modules/CheckCXXSourceCompiles.cmake53
-rw-r--r--Tests/MacroTest/CMakeLists.txt17
2 files changed, 69 insertions, 1 deletions
diff --git a/Modules/CheckCXXSourceCompiles.cmake b/Modules/CheckCXXSourceCompiles.cmake
new file mode 100644
index 0000000..72fe1a9
--- /dev/null
+++ b/Modules/CheckCXXSourceCompiles.cmake
@@ -0,0 +1,53 @@
+#
+# Check if the source code provided in the SOURCE argument compiles.
+#
+# CHECK_CXX_SOURCE_COMPILES - macro which checks if the source code compiles\
+# SOURCE - source code to try to compile
+# VARIABLE - variable to store size if the type exists.
+#
+# Checks the following optional VARIABLES (not arguments)
+# CMAKE_REQUIRED_LIBRARIES - Link to extra libraries
+# CMAKE_REQUIRED_FLAGS - Extra flags to C compiler
+#
+
+MACRO(CHECK_CXX_SOURCE_COMPILES 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}")
+ ENDIF(CMAKE_REQUIRED_LIBRARIES)
+ IF(CMAKE_REQUIRED_INCLUDES)
+ SET(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES
+ "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
+ ENDIF(CMAKE_REQUIRED_INCLUDES)
+ FILE(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/src.c"
+ "${SOURCE}")
+
+ MESSAGE(STATUS "Performing Test ${VAR}")
+ TRY_COMPILE(${VAR}
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_BINARY_DIR}/CMakeTmp/src.cxx
+ CMAKE_FLAGS
+ "${CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES}"
+ "${CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES}"
+ OUTPUT_VARIABLE OUTPUT)
+ IF(${VAR})
+ SET(${VAR} 1 CACHE INTERNAL "Test ${FUNCTION}")
+ MESSAGE(STATUS "Performing Test ${VAR} - Success")
+ WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeOutput.log
+ "Performing C++ SOURCE FILE Test ${VAR} succeded with the following output:\n"
+ "${OUTPUT}\n"
+ "Source file was:\n${SOURCE}\n" APPEND)
+ ELSE(${VAR})
+ MESSAGE(STATUS "Performing Test ${VAR} - Failed")
+ SET(${VAR} "" CACHE INTERNAL "Test ${FUNCTION}")
+ WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeError.log
+ "Performing C++ SOURCE FILE Test ${VAR} failed with the following output:\n"
+ "${OUTPUT}\n"
+ "Source file was:\n${SOURCE}\n" APPEND)
+ ENDIF(${VAR})
+ ENDIF("${VAR}" MATCHES "^${VAR}$")
+ENDMACRO(CHECK_CXX_SOURCE_COMPILES)
+
diff --git a/Tests/MacroTest/CMakeLists.txt b/Tests/MacroTest/CMakeLists.txt
index 604467c..d4642a7 100644
--- a/Tests/MacroTest/CMakeLists.txt
+++ b/Tests/MacroTest/CMakeLists.txt
@@ -1,5 +1,5 @@
# a simple C only test case
-PROJECT (littleMacroTest C)
+PROJECT (littleMacroTest)
SET(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
@@ -69,4 +69,19 @@ ELSE(SOME_CHECK)
MESSAGE(FATAL_ERROR "CheckCSourceCompiles does not work")
ENDIF(SOME_CHECK)
+INCLUDE(CheckCXXSourceCompiles)
+Check_CXX_Source_Compiles(
+"
+#include <stdio.h>
+int main(int ac, char*av[]){
+ if(ac > 1000){return *av[0];}
+ return 0;
+}"
+SOME_CHECK)
+IF(SOME_CHECK)
+ MESSAGE("CheckCXXSourceCompiles works")
+ELSE(SOME_CHECK)
+ MESSAGE(FATAL_ERROR "CheckCXXSourceCompiles does not work")
+ENDIF(SOME_CHECK)
+
ADD_EXECUTABLE(MacroTest macroTest.c)