From 67d88626d44ec04b9e11dca4cfbf62cd29fe9781 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Fri, 14 Oct 2022 18:19:09 +0000 Subject: [PATCH] cmake: set HAVE_GETADDRINFO_THREADSAFE on Windows autotools enables this configuration option unconditionally for Windows [^1]. Do the same in CMake. The above will make this work for all reasonably recent environments. The logic present in `lib/config-win32.h` [^2] has the following exceptions which we did not cover in this CMake update: - Builds targeting Windows 2000 and earlier - MS Visual C++ 5.0 (1997) and earlier Also make sure to disable this feature when `HAVE_GETADDRINFO` isn't set, to avoid a broken build. We might want to handle that in the C sources in a future commit. [^1]: https://github.com/curl/curl/blob/68fa9bf3f5d7b4fcbb57619f70cb4aabb79a51f6/m4/curl-functions.m4#L2067-L2070 [^2]: https://github.com/curl/curl/blob/68fa9bf3f5d7b4fcbb57619f70cb4aabb79a51f6/lib/config-win32.h#L511-L528 Closes #9727 --- CMake/Platforms/WindowsCache.cmake | 1 + CMakeLists.txt | 3 +++ lib/curl_config.h.cmake | 3 +++ 3 files changed, 7 insertions(+) diff --git a/CMake/Platforms/WindowsCache.cmake b/CMake/Platforms/WindowsCache.cmake index a9930f0b2a..dc46753685 100644 --- a/CMake/Platforms/WindowsCache.cmake +++ b/CMake/Platforms/WindowsCache.cmake @@ -70,6 +70,7 @@ if(NOT UNIX) set(HAVE_UTIME 1) set(HAVE_RAND_EGD 0) set(HAVE_GMTIME_R 0) + set(HAVE_GETADDRINFO_THREADSAFE 1) set(HAVE_GETHOSTBYNAME_R 0) set(HAVE_SIGNAL 1) diff --git a/CMakeLists.txt b/CMakeLists.txt index e1704e34ac..0ee96db6bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1045,6 +1045,9 @@ check_symbol_exists(_strtoi64 "${CURL_INCLUDES}" HAVE__STRTOI64) check_symbol_exists(strerror_r "${CURL_INCLUDES}" HAVE_STRERROR_R) check_symbol_exists(siginterrupt "${CURL_INCLUDES}" HAVE_SIGINTERRUPT) check_symbol_exists(getaddrinfo "${CURL_INCLUDES}" HAVE_GETADDRINFO) +if(NOT HAVE_GETADDRINFO) + set(HAVE_GETADDRINFO_THREADSAFE OFF) +endif() check_symbol_exists(freeaddrinfo "${CURL_INCLUDES}" HAVE_FREEADDRINFO) check_symbol_exists(pipe "${CURL_INCLUDES}" HAVE_PIPE) check_symbol_exists(ftruncate "${CURL_INCLUDES}" HAVE_FTRUNCATE) diff --git a/lib/curl_config.h.cmake b/lib/curl_config.h.cmake index 5ac20dff0b..3ba14923cd 100644 --- a/lib/curl_config.h.cmake +++ b/lib/curl_config.h.cmake @@ -195,6 +195,9 @@ /* Define to 1 if you have a working getaddrinfo function. */ #cmakedefine HAVE_GETADDRINFO 1 +/* Define to 1 if the getaddrinfo function is threadsafe. */ +#cmakedefine HAVE_GETADDRINFO_THREADSAFE 1 + /* Define to 1 if you have the `geteuid' function. */ #cmakedefine HAVE_GETEUID 1