Skip to content

Commit

Permalink
cmake: add ENABLE_THREADED_RESOLVER, rename ARES
Browse files Browse the repository at this point in the history
Fix detection of the AsynchDNS feature which not just depends on
pthreads support, but also on whether USE_POSIX_THREADS is set or not.
Caught by test 1014.

This patch adds a new ENABLE_THREADED_RESOLVER option (corresponding to
--enable-threaded-resolver of autotools) which also needs a check for
HAVE_PTHREAD_H.

For symmetry with autotools, CURL_USE_ARES is renamed to ENABLE_ARES
(--enable-ares). Checks that test for the availability actually use
USE_ARES instead as that is the result of whether a-res is available or
not (in practice this does not matter as CARES is marked as required
package, but nevertheless it is better to write the intent).

Signed-off-by: Peter Wu <peter@lekensteyn.nl>
  • Loading branch information
Lekensteyn authored and bagder committed Nov 10, 2014
1 parent 767aaf5 commit 17d2780
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 9 deletions.
27 changes: 21 additions & 6 deletions CMakeLists.txt
Expand Up @@ -74,12 +74,17 @@ include_directories( ${CURL_SOURCE_DIR}/include )
option(BUILD_CURL_EXE "Set to ON to build cURL executable." ON)
option(BUILD_CURL_TESTS "Set to ON to build cURL tests." ON)
option(CURL_STATICLIB "Set to ON to build libcurl with static linking." OFF)
option(CURL_USE_ARES "Set to ON to enable c-ares support" OFF)
option(ENABLE_ARES "Set to ON to enable c-ares support" OFF)
option(ENABLE_THREADED_RESOLVER "Set to ON to enable POSIX threaded DNS lookup" OFF)
# initialize CURL_LIBS
set(CURL_LIBS "")

if(CURL_USE_ARES)
set(USE_ARES ${CURL_USE_ARES})
if(ENABLE_THREADED_RESOLVER AND ENABLE_ARES)
message(FATAL_ERROR "Options ENABLE_THREADED_RESOLVER and ENABLE_ARES are mutually exclusive")
endif()

if(ENABLE_ARES)
set(USE_ARES 1)
find_package(CARES REQUIRED)
list(APPEND CURL_LIBS ${CARES_LIBRARY} )
set(CURL_LIBS ${CURL_LIBS} ${CARES_LIBRARY})
Expand Down Expand Up @@ -236,6 +241,18 @@ if(WIN32)
include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/Platforms/WindowsCache.cmake)
endif(WIN32)

if(ENABLE_THREADED_RESOLVER)
check_include_file_concat("pthread.h" HAVE_PTHREAD_H)
if(HAVE_PTHREAD_H)
set(CMAKE_THREAD_PREFER_PTHREAD 1)
find_package(Threads)
if(CMAKE_USE_PTHREADS_INIT)
set(CURL_LIBS ${CURL_LIBS} ${CMAKE_THREAD_LIBS_INIT})
set(USE_THREADS_POSIX 1)
endif()
endif()
endif()

# Check for all needed libraries
check_library_exists_concat("dl" dlopen HAVE_LIBDL)
check_library_exists_concat("socket" connect HAVE_LIBSOCKET)
Expand Down Expand Up @@ -1003,9 +1020,7 @@ _add_if("SSL" SSL_ENABLED)
_add_if("IPv6" ENABLE_IPV6)
_add_if("unix-sockets" USE_UNIX_SOCKETS)
_add_if("libz" HAVE_LIBZ)
find_package(Threads)
# AsynchDNS depends or USE_ARES or pthreads (mutually exclusive)
_add_if("AsynchDNS" USE_ARES OR CMAKE_USE_PTHREADS_INIT)
_add_if("AsynchDNS" USE_ARES OR USE_THREADS_POSIX)
_add_if("IDN" HAVE_LIBIDN)
# TODO SSP1 (WinSSL) check is missing
_add_if("SSPI" USE_WINDOWS_SSPI)
Expand Down
2 changes: 1 addition & 1 deletion lib/CMakeLists.txt
Expand Up @@ -57,7 +57,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
if(CURL_USE_ARES)
if(USE_ARES)
include_directories(${CARES_INCLUDE_DIR})
endif()

Expand Down
6 changes: 6 additions & 0 deletions lib/curl_config.h.cmake
Expand Up @@ -467,6 +467,9 @@
/* Define to 1 if you have a working POSIX-style strerror_r function. */
#cmakedefine HAVE_POSIX_STRERROR_R 1

/* Define to 1 if you have the <pthread.h> header file */
#cmakedefine HAVE_PTHREAD_H 1

/* Define to 1 if you have the <pwd.h> header file. */
#cmakedefine HAVE_PWD_H 1

Expand Down Expand Up @@ -879,6 +882,9 @@
/* Define if you want to enable c-ares support */
#cmakedefine USE_ARES 1

/* Define if you want to enable POSIX threaded DNS lookup */
#cmakedefine USE_THREADS_POSIX 1

/* Define to disable non-blocking sockets. */
#cmakedefine USE_BLOCKING_SOCKETS 1

Expand Down
2 changes: 1 addition & 1 deletion tests/libtest/CMakeLists.txt
Expand Up @@ -9,7 +9,7 @@ function(SETUP_TEST TEST_NAME) # ARGN are the files in the test
${CURL_BINARY_DIR}/lib # To be able to reach "curl_config.h"
${CURL_BINARY_DIR}/include # To be able to reach "curl/curlbuild.h"
)
if(CURL_USE_ARES)
if(USE_ARES)
include_directories(${CARES_INCLUDE_DIR})
endif()

Expand Down
2 changes: 1 addition & 1 deletion tests/server/CMakeLists.txt
Expand Up @@ -9,7 +9,7 @@ function(SETUP_EXECUTABLE TEST_NAME) # ARGN are the files in the test
${CURL_BINARY_DIR}/lib # To be able to reach "curl_config.h"
${CURL_BINARY_DIR}/include # To be able to reach "curl/curlbuild.h"
)
if(CURL_USE_ARES)
if(USE_ARES)
include_directories(${CARES_INCLUDE_DIR})
endif()

Expand Down

0 comments on commit 17d2780

Please sign in to comment.