summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Cedilnik <andy.cedilnik@kitware.com>2004-10-07 21:32:49 (GMT)
committerAndy Cedilnik <andy.cedilnik@kitware.com>2004-10-07 21:32:49 (GMT)
commite46b0a9290808c5680cf817e96064bd2a0000556 (patch)
treed5d9ed3ba342e0fafdf78809f1bb3f7c6d4f9bdb
parent387ffe941959ab8fa849e5afbe654b15fa9447fe (diff)
downloadCMake-e46b0a9290808c5680cf817e96064bd2a0000556.zip
CMake-e46b0a9290808c5680cf817e96064bd2a0000556.tar.gz
CMake-e46b0a9290808c5680cf817e96064bd2a0000556.tar.bz2
ENH: Properly detect strerror_r for glibc or posix"
-rw-r--r--Source/CTest/Curl/CMake/CurlTests.c45
-rw-r--r--Source/CTest/Curl/CMakeLists.txt46
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 <sys/types.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+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 <string.h>
+#include <errno.h>
+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 <string.h>
+#include <errno.h>
+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