From e46b0a9290808c5680cf817e96064bd2a0000556 Mon Sep 17 00:00:00 2001 From: Andy Cedilnik Date: Thu, 7 Oct 2004 17:32:49 -0400 Subject: ENH: Properly detect strerror_r for glibc or posix" --- Source/CTest/Curl/CMake/CurlTests.c | 45 ++++++++++++++++++++++++++++++++++++ Source/CTest/Curl/CMakeLists.txt | 46 +++++++++++++++++++++++++++++++++++-- 2 files changed, 89 insertions(+), 2 deletions(-) diff --git a/Source/CTest/Curl/CMake/CurlTests.c b/Source/CTest/Curl/CMake/CurlTests.c index fba8dc4..fed3894 100644 --- a/Source/CTest/Curl/CMake/CurlTests.c +++ b/Source/CTest/Curl/CMake/CurlTests.c @@ -476,3 +476,48 @@ main () return 0; } #endif +#ifdef HAVE_SO_NONBLOCK + +/* headers for SO_NONBLOCK test (BeOS) */ +#include +#include +#include + +int main() +{ +/* SO_NONBLOCK source code */ + long b = 1; + int socket; + int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b)); + return 0; +} +#endif +#ifdef HAVE_GLIBC_STRERROR_R +#include +#include +int +main () { + char buffer[1024]; /* big enough to play with */ + char *string = + strerror_r(EACCES, buffer, sizeof(buffer)); + /* this should've returned a string */ + if(!string || !string[0]) + return 99; + return 0; +} +#endif +#ifdef HAVE_POSIX_STRERROR_R +#include +#include +int +main () { + char buffer[1024]; /* big enough to play with */ + int error = + strerror_r(EACCES, buffer, sizeof(buffer)); + /* This should've returned zero, and written an error string in the + buffer.*/ + if(!buffer[0] || error) + return 99; + return 0; +} +#endif diff --git a/Source/CTest/Curl/CMakeLists.txt b/Source/CTest/Curl/CMakeLists.txt index 3d2880c..3b252fd 100644 --- a/Source/CTest/Curl/CMakeLists.txt +++ b/Source/CTest/Curl/CMakeLists.txt @@ -360,12 +360,46 @@ MACRO(CURL_INTERNAL_TEST CURL_TEST) ELSE(${CURL_TEST}) MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Failed") SET(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}") - WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeError.log + FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeError.log "Performing Curl Test ${CURL_TEST} failed with the following output:\n" - "${OUTPUT}\n" APPEND) + "${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} + ${LIBCURL_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}/CMakeError.log" + "Performing Curl Test ${CURL_TEST} failed with the following output:\n" + "${OUTPUT}") + IF(${CURL_TEST}_COMPILE) + FILE(APPEND "${CMAKE_BINARY_DIR}/CMakeError.log" + "There was a running problem of this test\n") + ENDIF(${CURL_TEST}_COMPILE) + FILE(APPEND "${CMAKE_BINARY_DIR}/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) # Do curl specific tests #OPTION(CURL_HAVE_DISABLED_NONBLOCKING "Disable non-blocking socket detection" OFF) @@ -376,6 +410,7 @@ IF(NOT CURL_HAVE_DISABLED_NONBLOCKING) HAVE_IOCTLSOCKET HAVE_IOCTLSOCKET_CASE HAVE_O_NONBLOCK + HAVE_SO_NONBLOCK ) ENDIF(NOT CURL_HAVE_DISABLED_NONBLOCKING) FOREACH(CURL_TEST @@ -408,6 +443,13 @@ IF(HAVE_FILE_OFFSET_BITS) SET(_FILE_OFFSET_BITS 64) ENDIF(HAVE_FILE_OFFSET_BITS) +FOREACH(CURL_TEST + HAVE_GLIBC_STRERROR_R + HAVE_POSIX_STRERROR_R + ) + CURL_INTERNAL_TEST_RUN(${CURL_TEST}) +ENDFOREACH(CURL_TEST) + # Check for reentrant FOREACH(CURL_TEST HAVE_GETHOSTBYADDR_R_5 -- cgit v0.12