[CMake] Enhancement to CHECK_C_RUNS_SOURCE

Clifford Yapp cliffyapp at gmail.com
Tue Jan 31 19:27:22 EST 2012


We currently have a minor local enhancement to CHECK_C_RUNS_SOURCE
that I would like to contribute back to the main module, if it is
acceptable to the developers of CMake:

We often have our own .c file stored in our tree for TRY_RUN testing,
and it is convenient to be able to use CHECK_C_RUNS_SOURCE for testing
those .c files.  At the moment, CHECK_C_RUNS_SOURCE assumes the
incoming SOURCE  variable actually holds the source code - our
enhancement checks to see if SOURCE holds a valid file path first.  If
it DOES hold a valid file path, TRY_RUN then trys that .c file,
otherwise the existing CHECK_C_RUNS_SOURCE is preserved.  I don't know
of any sane pathname that would be valid C code or vice versa, so
there should be no danger of passing in a C source snippit and having
it mistaken for a file path.

The diff is below - would this be of interest for main-line CMake?

Thanks,
CY

--- ../../CheckCSourceRuns.cmake        2012-01-31 19:19:58.000000000 -0500
+++ misc/CMake/CheckCSourceRuns.cmake   2012-01-31 19:16:05.000000000 -0500
@@ -86,13 +86,18 @@
     ELSE(CMAKE_REQUIRED_INCLUDES)
       SET(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES)
     ENDIF(CMAKE_REQUIRED_INCLUDES)
-    FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c"
-      "${SOURCE}\n")
-
+    IF(EXISTS "${SOURCE}")
+      SET(CHECK_SRC "${SOURCE}")
+    ELSE(EXISTS "${SOURCE}")
+      FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c"
+        "${SOURCE}\n")
+      SET(CHECK_SRC
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c")
+    ENDIF(EXISTS "${SOURCE}")
+
     MESSAGE(STATUS "Performing Test ${VAR}")
     TRY_RUN(${VAR}_EXITCODE ${VAR}_COMPILED
       ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c
+      ${CHECK_SRC}
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
       CMAKE_FLAGS
-DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
       -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}


More information about the CMake mailing list