include(CheckSymbolExists)
include(CheckIncludeFiles)

# Check if each symbol in the symbol list exists,
# and define PREFIX__HAVE_SYMNAME to 1 if yes.
#
# SYMLIST: list of symbols to check
# HEADERS: header files to be included in check code
# PREFIX: the prefix of definition
macro(CHECK_SYMBOLS_EXIST SYMLIST HEADERS PREFIX)
 foreach(SYMNAME ${SYMLIST})
   string(TOUPPER "${SYMNAME}" SYMNAME_UPPER)
   if ("${PREFIX}" STREQUAL "")
     set(HAVE_SYM_DEF "HAVE_${SYMNAME_UPPER}")
   else()
     set(HAVE_SYM_DEF "${PREFIX}__HAVE_${SYMNAME_UPPER}")
   endif()
   CHECK_SYMBOL_EXISTS(${SYMNAME} "${HEADERS}" ${HAVE_SYM_DEF})
 endforeach()
endmacro()

# Check if file exists, define PREFIX__HAVE_FILE to 1 if yes,
# and collect file to EVENT_INCLUDES
macro(CHECK_INCLUDE_FILE_CONCAT FILE PREFIX)
 string(REGEX REPLACE "[./]" "_" FILE_UL ${FILE})
 string(TOUPPER "${FILE_UL}" FILE_UL_UPPER)
 if ("${PREFIX}" STREQUAL "")
   set(HAVE_FILE_DEF "HAVE_${FILE_UL_UPPER}")
 else()
   set(HAVE_FILE_DEF "${PREFIX}__HAVE_${FILE_UL_UPPER}")
 endif()
 CHECK_INCLUDE_FILES("${EVENT_INCLUDES};${FILE}" ${HAVE_FILE_DEF})
 if(${HAVE_FILE_DEF})
   set(EVENT_INCLUDES ${EVENT_INCLUDES} ${FILE})
 endif()
endmacro()