curl/CMake/Macros.cmake

90 lines
3.9 KiB
CMake
Raw Normal View History

#File defines convenience macros for available feature testing
# This macro checks if the symbol exists in the library and if it
# does, it appends library to the list.
macro(CHECK_LIBRARY_EXISTS_CONCAT LIBRARY SYMBOL VARIABLE)
check_library_exists("${CURL_LIBS};${LIBRARY}" ${SYMBOL} "${CMAKE_LIBRARY_PATH}"
${VARIABLE})
if(${VARIABLE})
list(APPEND CURL_LIBS ${LIBRARY})
endif(${VARIABLE})
endmacro(CHECK_LIBRARY_EXISTS_CONCAT)
# Check if header file exists and add it to the list.
macro(CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE)
Cmake: Don't check for all headers each time One header at a time is the right way. Apart from that the output on windows goes from: ... -- Looking for include files I:/src/libssh2-1.4.3/include/libssh2.h, ws2tcpip.h -- Looking for include files I:/src/libssh2-1.4.3/include/libssh2.h, ws2tcpip.h - found -- Looking for 3 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., wins ock2.h -- Looking for 3 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., wins ock2.h - found -- Looking for 4 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., stdi o.h -- Looking for 4 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., stdi o.h - found -- Looking for 5 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., wind ows.h -- Looking for 5 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., wind ows.h - found -- Looking for 6 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., wins ock.h -- Looking for 6 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., wins ock.h - found -- Looking for 7 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., sys/ filio.h -- Looking for 7 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., sys/ filio.h - not found -- Looking for 7 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., sys/ ioctl.h -- Looking for 7 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., sys/ ioctl.h - not found -- Looking for 7 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., sys/ resource.h ... To much nicer: ... -- Looking for ws2tcpip.h -- Looking for ws2tcpip.h - found -- Looking for winsock2.h -- Looking for winsock2.h - found -- Looking for stdio.h -- Looking for stdio.h - found -- Looking for windows.h -- Looking for windows.h - found -- Looking for winsock.h -- Looking for winsock.h - found -- Looking for sys/filio.h -- Looking for sys/filio.h - not found -- Looking for sys/ioctl.h -- Looking for sys/ioctl.h - not found -- Looking for sys/resource.h
2014-08-15 14:24:25 +02:00
check_include_file("${FILE}" ${VARIABLE})
if(${VARIABLE})
set(CURL_INCLUDES ${CURL_INCLUDES} ${FILE})
set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -D${VARIABLE}")
endif(${VARIABLE})
endmacro(CHECK_INCLUDE_FILE_CONCAT)
# For other curl specific tests, use this macro.
macro(CURL_INTERNAL_TEST CURL_TEST)
if("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
set(MACRO_CHECK_FUNCTION_DEFINITIONS
"-D${CURL_TEST} ${CURL_TEST_DEFINES} ${CMAKE_REQUIRED_FLAGS}")
if(CMAKE_REQUIRED_LIBRARIES)
set(CURL_TEST_ADD_LIBRARIES
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
endif(CMAKE_REQUIRED_LIBRARIES)
message(STATUS "Performing Curl Test ${CURL_TEST}")
try_compile(${CURL_TEST}
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/CMake/CurlTests.c
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
"${CURL_TEST_ADD_LIBRARIES}"
OUTPUT_VARIABLE OUTPUT)
if(${CURL_TEST})
set(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
message(STATUS "Performing Curl Test ${CURL_TEST} - Success")
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
"Performing Curl Test ${CURL_TEST} passed with the following output:\n"
"${OUTPUT}\n")
else(${CURL_TEST})
message(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
set(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
"Performing Curl Test ${CURL_TEST} failed with the following output:\n"
"${OUTPUT}\n")
endif(${CURL_TEST})
endif("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
endmacro(CURL_INTERNAL_TEST)
macro(CURL_INTERNAL_TEST_RUN CURL_TEST)
if("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$")
set(MACRO_CHECK_FUNCTION_DEFINITIONS
"-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}")
if(CMAKE_REQUIRED_LIBRARIES)
set(CURL_TEST_ADD_LIBRARIES
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
endif(CMAKE_REQUIRED_LIBRARIES)
message(STATUS "Performing Curl Test ${CURL_TEST}")
try_run(${CURL_TEST} ${CURL_TEST}_COMPILE
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/CMake/CurlTests.c
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
"${CURL_TEST_ADD_LIBRARIES}"
OUTPUT_VARIABLE OUTPUT)
if(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
set(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
message(STATUS "Performing Curl Test ${CURL_TEST} - Success")
else(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
message(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
set(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
file(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
"Performing Curl Test ${CURL_TEST} failed with the following output:\n"
"${OUTPUT}")
if(${CURL_TEST}_COMPILE)
file(APPEND
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
"There was a problem running this test\n")
endif(${CURL_TEST}_COMPILE)
file(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
"\n\n")
endif(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
endif("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$")
endmacro(CURL_INTERNAL_TEST_RUN)