diff --git a/CMakeLists.txt b/CMakeLists.txt index d3d8c294..d3418b44 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ * HTTPLIB_REQUIRE_BROTLI (default off) * HTTPLIB_REQUIRE_ZSTD (default off) * HTTPLIB_DISABLE_MACOSX_AUTOMATIC_ROOT_CERTIFICATES (default off) - * HTTPLIB_USE_NON_BLOCKING_GETADDRINFO (default on) + * HTTPLIB_USE_NON_BLOCKING_GETADDRINFO (default on when supported) * HTTPLIB_COMPILE (default off) * HTTPLIB_INSTALL (default on) * HTTPLIB_SHARED (default off) builds as a shared library (if HTTPLIB_COMPILE is ON) @@ -181,6 +181,24 @@ if(HTTPLIB_DISABLE_MACOSX_AUTOMATIC_ROOT_CERTIFICATES) set(HTTPLIB_IS_USING_MACOSX_AUTOMATIC_ROOT_CERTIFICATES FALSE) endif() set(HTTPLIB_IS_USING_NON_BLOCKING_GETADDRINFO ${HTTPLIB_USE_NON_BLOCKING_GETADDRINFO}) +if(HTTPLIB_IS_USING_NON_BLOCKING_GETADDRINFO AND WIN32) + include(CheckCXXSymbolExists) + + set(_httplib_cmake_required_definitions ${CMAKE_REQUIRED_DEFINITIONS}) + set(_httplib_cmake_required_libraries ${CMAKE_REQUIRED_LIBRARIES}) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_WIN32_WINNT=0x0A00) + list(APPEND CMAKE_REQUIRED_LIBRARIES ws2_32) + check_cxx_symbol_exists(GetAddrInfoExCancel "winsock2.h;ws2tcpip.h" HTTPLIB_HAVE_GETADDRINFOEXCANCEL) + set(CMAKE_REQUIRED_DEFINITIONS ${_httplib_cmake_required_definitions}) + set(CMAKE_REQUIRED_LIBRARIES ${_httplib_cmake_required_libraries}) + unset(_httplib_cmake_required_definitions) + unset(_httplib_cmake_required_libraries) + + if(NOT HTTPLIB_HAVE_GETADDRINFOEXCANCEL) + set(HTTPLIB_IS_USING_NON_BLOCKING_GETADDRINFO FALSE) + message(WARNING "GetAddrInfoExCancel is unavailable; disabling non-blocking getaddrinfo.") + endif() +endif() # Threads needed for on some systems, and for on Linux set(THREADS_PREFER_PTHREAD_FLAG TRUE) @@ -367,7 +385,7 @@ target_link_libraries(${PROJECT_NAME} ${_INTERFACE_OR_PUBLIC} # Needed for API from MacOS Security framework "$<$,$,$>:-framework CFNetwork -framework CoreFoundation -framework Security>" # Needed for non-blocking getaddrinfo on MacOS - "$<$,$>:-framework CFNetwork -framework CoreFoundation>" + "$<$,$>:-framework CFNetwork -framework CoreFoundation>" # Can't put multiple targets in a single generator expression or it bugs out. $<$:Brotli::common> $<$:Brotli::encoder> @@ -390,7 +408,7 @@ target_compile_definitions(${PROJECT_NAME} ${_INTERFACE_OR_PUBLIC} $<$:CPPHTTPLIB_WOLFSSL_SUPPORT> $<$:CPPHTTPLIB_MBEDTLS_SUPPORT> $<$,$>:CPPHTTPLIB_DISABLE_MACOSX_AUTOMATIC_ROOT_CERTIFICATES> - $<$:CPPHTTPLIB_USE_NON_BLOCKING_GETADDRINFO> + $<$:CPPHTTPLIB_USE_NON_BLOCKING_GETADDRINFO> ) # CMake configuration files installation directory