Browse Source

ENH: Add C++ test too

Andy Cedilnik 20 years ago
parent
commit
10b6e2a621
2 changed files with 69 additions and 1 deletions
  1. 53 0
      Modules/CheckCXXSourceCompiles.cmake
  2. 16 1
      Tests/MacroTest/CMakeLists.txt

+ 53 - 0
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)
+

+ 16 - 1
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)