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} -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake