diff options
author | Andy Cedilnik <andy.cedilnik@kitware.com> | 2003-01-13 03:28:32 (GMT) |
---|---|---|
committer | Andy Cedilnik <andy.cedilnik@kitware.com> | 2003-01-13 03:28:32 (GMT) |
commit | d87595ede3d958fbece3eedcc312d1e429c7ae10 (patch) | |
tree | b7edbbd5a8f5609460e819751432c7913bdd217e /Modules | |
parent | 8c7456f970d56ea11de6a2fe3fe81b4b3b174993 (diff) | |
download | CMake-d87595ede3d958fbece3eedcc312d1e429c7ae10.zip CMake-d87595ede3d958fbece3eedcc312d1e429c7ae10.tar.gz CMake-d87595ede3d958fbece3eedcc312d1e429c7ae10.tar.bz2 |
Add macro for checking if symbol exists
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/CheckSymbolExists.cmake | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/Modules/CheckSymbolExists.cmake b/Modules/CheckSymbolExists.cmake new file mode 100644 index 0000000..5f62738 --- /dev/null +++ b/Modules/CheckSymbolExists.cmake @@ -0,0 +1,47 @@ +# +# Check if the symbol exists in include files +# +# CHECK_SYMBOL_EXISTS - macro which checks the symbol exists in include files. +# SYMBOL - symbol +# FILES - include files to check +# VARIABLE - variable to return result +# + +MACRO(CHECK_SYMBOL_EXISTS SYMBOL FILES VARIABLE) + IF("${VARIABLE}" MATCHES "^${VARIABLE}$") + SET(CHECK_SYMBOL_EXISTS_CONTENT "/* */\n") + SET(MACRO_CHECK_SYMBOL_EXISTS_FLAGS ${CMAKE_REQUIRED_FLAGS}) + STRING(ASCII 35 POUND) + STRING(ASCII 40 OPEN_PARENT) + STRING(ASCII 41 CLOSE_PARENT) + SET(PARENTS "${OPEN_PARENT}${CLOSE_PARENT}") + FOREACH(FILE ${FILES}) + SET(CHECK_SYMBOL_EXISTS_CONTENT + "${CHECK_SYMBOL_EXISTS_CONTENT}${POUND}include <${FILE}>\n") + ENDFOREACH(FILE) + SET(CHECK_SYMBOL_EXISTS_CONTENT + "${CHECK_SYMBOL_EXISTS_CONTENT}\n\nvoid main${PARENTS}{" + "\n${POUND}ifndef ${SYMBOL}\nchar ${OPEN_PARENT}*f${CLOSE_PARENT} ${PARENTS} = ${SYMBOL};\n${POUND}endif\nreturn 0;\n}\n") + WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeTmp/CheckSymbolExists.c + "${CHECK_SYMBOL_EXISTS_CONTENT}") + + MESSAGE(STATUS "Looking for ${SYMBOL} in ${FILES}") + TRY_COMPILE(${VARIABLE} + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}/CMakeTmp/CheckSymbolExists.c + CMAKE_FLAGS + -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_SYMBOL_EXISTS_FLAGS} + OUTPUT_VARIABLE OUTPUT) + IF(${VARIABLE}) + MESSAGE(STATUS "Looking for ${SYMBOL} in ${FILES} - found") + SET(${VARIABLE} 1 CACHE INTERNAL "Have symbol ${SYMBOL}") + ELSE(${VARIABLE}) + MESSAGE(STATUS "Looking for ${SYMBOL} in ${FILES} - not found.") + SET(${VARIABLE} "" CACHE INTERNAL "Have symbol ${SYMBOL}") + WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeError.log + "Determining if the ${SYMBOL} " + "exist failed with the following output:\n" + "${OUTPUT}\n" APPEND) + ENDIF(${VARIABLE}) + ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$") +ENDMACRO(CHECK_SYMBOL_EXISTS) |