Home | History | Annotate | Download | only in curl
      1 #***************************************************************************
      2 #                                  _   _ ____  _
      3 #  Project                     ___| | | |  _ \| |
      4 #                             / __| | | | |_) | |
      5 #                            | (__| |_| |  _ <| |___
      6 #                             \___|\___/|_| \_\_____|
      7 #
      8 # Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel (a] haxx.se>, et al.
      9 #
     10 # This software is licensed as described in the file COPYING, which
     11 # you should have received as part of this distribution. The terms
     12 # are also available at https://curl.haxx.se/docs/copyright.html.
     13 #
     14 # You may opt to use, copy, modify, merge, publish, distribute and/or sell
     15 # copies of the Software, and permit persons to whom the Software is
     16 # furnished to do so, under the terms of the COPYING file.
     17 #
     18 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
     19 # KIND, either express or implied.
     20 #
     21 ###########################################################################
     22 # cURL/libcurl CMake script
     23 # by Tetetest and Sukender (Benoit Neil)
     24 
     25 # TODO:
     26 # The output .so file lacks the soname number which we currently have within the lib/Makefile.am file
     27 # Add full (4 or 5 libs) SSL support
     28 # Add INSTALL target (EXTRA_DIST variables in Makefile.am may be moved to Makefile.inc so that CMake/CPack is aware of what's to include).
     29 # Add CTests(?)
     30 # Check on all possible platforms
     31 # Test with as many configurations possible (With or without any option)
     32 # Create scripts that help keeping the CMake build system up to date (to reduce maintenance). According to Tetetest:
     33 #  - lists of headers that 'configure' checks for;
     34 #  - curl-specific tests (the ones that are in m4/curl-*.m4 files);
     35 #  - (most obvious thing:) curl version numbers.
     36 # Add documentation subproject
     37 #
     38 # To check:
     39 # (From Daniel Stenberg) The cmake build selected to run gcc with -fPIC on my box while the plain configure script did not.
     40 # (From Daniel Stenberg) The gcc command line use neither -g nor any -O options. As a developer, I also treasure our configure scripts's --enable-debug option that sets a long range of "picky" compiler options.
     41 cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
     42 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}")
     43 include(Utilities)
     44 include(Macros)
     45 
     46 project( CURL C )
     47 
     48 message(WARNING "the curl cmake build system is poorly maintained. Be aware")
     49 
     50 file (READ ${CURL_SOURCE_DIR}/include/curl/curlver.h CURL_VERSION_H_CONTENTS)
     51 string (REGEX MATCH "#define LIBCURL_VERSION \"[^\"]*"
     52   CURL_VERSION ${CURL_VERSION_H_CONTENTS})
     53 string (REGEX REPLACE "[^\"]+\"" "" CURL_VERSION ${CURL_VERSION})
     54 string (REGEX MATCH "#define LIBCURL_VERSION_NUM 0x[0-9a-fA-F]+"
     55   CURL_VERSION_NUM ${CURL_VERSION_H_CONTENTS})
     56 string (REGEX REPLACE "[^0]+0x" "" CURL_VERSION_NUM ${CURL_VERSION_NUM})
     57 
     58 include_regular_expression("^.*$")    # Sukender: Is it necessary?
     59 
     60 # Setup package meta-data
     61 # SET(PACKAGE "curl")
     62 message(STATUS "curl version=[${CURL_VERSION}]")
     63 # SET(PACKAGE_TARNAME "curl")
     64 # SET(PACKAGE_NAME "curl")
     65 # SET(PACKAGE_VERSION "-")
     66 # SET(PACKAGE_STRING "curl-")
     67 # SET(PACKAGE_BUGREPORT "a suitable curl mailing list => https://curl.haxx.se/mail/")
     68 set(OPERATING_SYSTEM "${CMAKE_SYSTEM_NAME}")
     69 set(OS "\"${CMAKE_SYSTEM_NAME}\"")
     70 
     71 include_directories(${PROJECT_BINARY_DIR}/include/curl)
     72 include_directories( ${CURL_SOURCE_DIR}/include )
     73 
     74 option(BUILD_CURL_EXE "Set to ON to build cURL executable." ON)
     75 option(CURL_STATICLIB "Set to ON to build libcurl with static linking." OFF)
     76 option(ENABLE_ARES "Set to ON to enable c-ares support" OFF)
     77 option(ENABLE_THREADED_RESOLVER "Set to ON to enable POSIX threaded DNS lookup" OFF)
     78 
     79 option(ENABLE_DEBUG "Set to ON to enable curl debug features" OFF)
     80 option(ENABLE_CURLDEBUG "Set to ON to build with TrackMemory feature enabled" OFF)
     81 
     82 if (ENABLE_DEBUG)
     83   # DEBUGBUILD will be defined only for Debug builds
     84   if(NOT CMAKE_VERSION VERSION_LESS 3.0)
     85     set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:DEBUGBUILD>)
     86   else()
     87     set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUGBUILD)
     88   endif()
     89   set(ENABLE_CURLDEBUG ON)
     90 endif()
     91 
     92 if (ENABLE_CURLDEBUG)
     93   set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS CURLDEBUG)
     94 endif()
     95 
     96 # initialize CURL_LIBS
     97 set(CURL_LIBS "")
     98 
     99 if(ENABLE_THREADED_RESOLVER AND ENABLE_ARES)
    100   message(FATAL_ERROR "Options ENABLE_THREADED_RESOLVER and ENABLE_ARES are mutually exclusive")
    101 endif()
    102 
    103 if(ENABLE_ARES)
    104   set(USE_ARES 1)
    105   find_package(CARES REQUIRED)
    106   list(APPEND CURL_LIBS ${CARES_LIBRARY} )
    107   set(CURL_LIBS ${CURL_LIBS} ${CARES_LIBRARY})
    108 endif()
    109 
    110 if(MSVC)
    111   option(BUILD_RELEASE_DEBUG_DIRS "Set OFF to build each configuration to a separate directory" OFF)
    112   mark_as_advanced(BUILD_RELEASE_DEBUG_DIRS)
    113 endif()
    114 
    115 option(CURL_HIDDEN_SYMBOLS "Set to ON to hide libcurl internal symbols (=hide all symbols that aren't officially external)." ON)
    116 mark_as_advanced(CURL_HIDDEN_SYMBOLS)
    117 
    118 option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF)
    119 mark_as_advanced(HTTP_ONLY)
    120 option(CURL_DISABLE_FTP "disables FTP" OFF)
    121 mark_as_advanced(CURL_DISABLE_FTP)
    122 option(CURL_DISABLE_LDAP "disables LDAP" OFF)
    123 mark_as_advanced(CURL_DISABLE_LDAP)
    124 option(CURL_DISABLE_TELNET "disables Telnet" OFF)
    125 mark_as_advanced(CURL_DISABLE_TELNET)
    126 option(CURL_DISABLE_DICT "disables DICT" OFF)
    127 mark_as_advanced(CURL_DISABLE_DICT)
    128 option(CURL_DISABLE_FILE "disables FILE" OFF)
    129 mark_as_advanced(CURL_DISABLE_FILE)
    130 option(CURL_DISABLE_TFTP "disables TFTP" OFF)
    131 mark_as_advanced(CURL_DISABLE_TFTP)
    132 option(CURL_DISABLE_HTTP "disables HTTP" OFF)
    133 mark_as_advanced(CURL_DISABLE_HTTP)
    134 
    135 option(CURL_DISABLE_LDAPS "to disable LDAPS" OFF)
    136 mark_as_advanced(CURL_DISABLE_LDAPS)
    137 
    138 option(CURL_DISABLE_RTSP "to disable RTSP" OFF)
    139 mark_as_advanced(CURL_DISABLE_RTSP)
    140 option(CURL_DISABLE_PROXY "to disable proxy" OFF)
    141 mark_as_advanced(CURL_DISABLE_PROXY)
    142 option(CURL_DISABLE_POP3 "to disable POP3" OFF)
    143 mark_as_advanced(CURL_DISABLE_POP3)
    144 option(CURL_DISABLE_IMAP "to disable IMAP" OFF)
    145 mark_as_advanced(CURL_DISABLE_IMAP)
    146 option(CURL_DISABLE_SMTP "to disable SMTP" OFF)
    147 mark_as_advanced(CURL_DISABLE_SMTP)
    148 option(CURL_DISABLE_GOPHER "to disable Gopher" OFF)
    149 mark_as_advanced(CURL_DISABLE_GOPHER)
    150 
    151 if(HTTP_ONLY)
    152   set(CURL_DISABLE_FTP ON)
    153   set(CURL_DISABLE_LDAP ON)
    154   set(CURL_DISABLE_LDAPS ON)
    155   set(CURL_DISABLE_TELNET ON)
    156   set(CURL_DISABLE_DICT ON)
    157   set(CURL_DISABLE_FILE ON)
    158   set(CURL_DISABLE_TFTP ON)
    159   set(CURL_DISABLE_RTSP ON)
    160   set(CURL_DISABLE_POP3 ON)
    161   set(CURL_DISABLE_IMAP ON)
    162   set(CURL_DISABLE_SMTP ON)
    163   set(CURL_DISABLE_GOPHER ON)
    164 endif()
    165 
    166 option(CURL_DISABLE_COOKIES "to disable cookies support" OFF)
    167 mark_as_advanced(CURL_DISABLE_COOKIES)
    168 
    169 option(CURL_DISABLE_CRYPTO_AUTH "to disable cryptographic authentication" OFF)
    170 mark_as_advanced(CURL_DISABLE_CRYPTO_AUTH)
    171 option(CURL_DISABLE_VERBOSE_STRINGS "to disable verbose strings" OFF)
    172 mark_as_advanced(CURL_DISABLE_VERBOSE_STRINGS)
    173 option(DISABLED_THREADSAFE "Set to explicitly specify we don't want to use thread-safe functions" OFF)
    174 mark_as_advanced(DISABLED_THREADSAFE)
    175 option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON)
    176 mark_as_advanced(ENABLE_IPV6)
    177 if(ENABLE_IPV6 AND NOT WIN32)
    178   include(CheckStructHasMember)
    179   check_struct_has_member("struct sockaddr_in6" sin6_addr "netinet/in.h"
    180                           HAVE_SOCKADDR_IN6_SIN6_ADDR)
    181   check_struct_has_member("struct sockaddr_in6" sin6_scope_id "netinet/in.h"
    182                           HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID)
    183   if(NOT HAVE_SOCKADDR_IN6_SIN6_ADDR)
    184     message(WARNING "struct sockaddr_in6 not available, disabling IPv6 support")
    185     # Force the feature off as this name is used as guard macro...
    186     set(ENABLE_IPV6 OFF
    187         CACHE BOOL "Define if you want to enable IPv6 support" FORCE)
    188   endif()
    189 endif()
    190 
    191 option(ENABLE_MANUAL "to provide the built-in manual" ON)
    192 unset(USE_MANUAL CACHE) # TODO: cache NROFF/NROFF_MANOPT/USE_MANUAL vars?
    193 if(ENABLE_MANUAL)
    194   find_program(NROFF NAMES gnroff nroff)
    195   if(NROFF)
    196     # Need a way to write to stdin, this will do
    197     file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt" "test")
    198     # Tests for a valid nroff option to generate a manpage
    199     foreach(_MANOPT "-man" "-mandoc")
    200       execute_process(COMMAND "${NROFF}" ${_MANOPT}
    201         OUTPUT_VARIABLE NROFF_MANOPT_OUTPUT
    202         INPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt"
    203         ERROR_QUIET)
    204       # Save the option if it was valid
    205       if(NROFF_MANOPT_OUTPUT)
    206         message("Found *nroff option: -- ${_MANOPT}")
    207         set(NROFF_MANOPT ${_MANOPT})
    208         set(USE_MANUAL 1)
    209         break()
    210       endif()
    211     endforeach()
    212     # No need for the temporary file
    213     file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt")
    214     if(NOT USE_MANUAL)
    215       message(WARNING "Found no *nroff option to get plaintext from man pages")
    216     endif()
    217   else()
    218     message(WARNING "Found no *nroff program")
    219   endif()
    220 endif()
    221 
    222 # We need ansi c-flags, especially on HP
    223 set(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
    224 set(CMAKE_REQUIRED_FLAGS ${CMAKE_ANSI_CFLAGS})
    225 
    226 # Disable warnings on Borland to avoid changing 3rd party code.
    227 if(BORLAND)
    228   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-")
    229 endif(BORLAND)
    230 
    231 # If we are on AIX, do the _ALL_SOURCE magic
    232 if(${CMAKE_SYSTEM_NAME} MATCHES AIX)
    233   set(_ALL_SOURCE 1)
    234 endif(${CMAKE_SYSTEM_NAME} MATCHES AIX)
    235 
    236 # Include all the necessary files for macros
    237 include (CheckFunctionExists)
    238 include (CheckIncludeFile)
    239 include (CheckIncludeFiles)
    240 include (CheckLibraryExists)
    241 include (CheckSymbolExists)
    242 include (CheckTypeSize)
    243 include (CheckCSourceCompiles)
    244 include (CMakeDependentOption)
    245 
    246 # On windows preload settings
    247 if(WIN32)
    248   set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_WINSOCKAPI_")
    249   include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/Platforms/WindowsCache.cmake)
    250 endif(WIN32)
    251 
    252 if(ENABLE_THREADED_RESOLVER)
    253   check_include_file_concat("pthread.h" HAVE_PTHREAD_H)
    254   if(HAVE_PTHREAD_H)
    255     set(CMAKE_THREAD_PREFER_PTHREAD 1)
    256     find_package(Threads)
    257     if(CMAKE_USE_PTHREADS_INIT)
    258       set(CURL_LIBS ${CURL_LIBS} ${CMAKE_THREAD_LIBS_INIT})
    259       set(USE_THREADS_POSIX 1)
    260     endif()
    261   endif()
    262 endif()
    263 
    264 # Check for all needed libraries
    265 check_library_exists_concat("dl"     dlopen       HAVE_LIBDL)
    266 check_library_exists_concat("socket" connect      HAVE_LIBSOCKET)
    267 check_library_exists("c" gethostbyname "" NOT_NEED_LIBNSL)
    268 
    269 # Yellowtab Zeta needs different libraries than BeOS 5.
    270 if(BEOS)
    271   set(NOT_NEED_LIBNSL 1)
    272   check_library_exists_concat("bind" gethostbyname HAVE_LIBBIND)
    273   check_library_exists_concat("bnetapi" closesocket HAVE_LIBBNETAPI)
    274 endif(BEOS)
    275 
    276 if(NOT NOT_NEED_LIBNSL)
    277   check_library_exists_concat("nsl"    gethostbyname  HAVE_LIBNSL)
    278 endif(NOT NOT_NEED_LIBNSL)
    279 
    280 check_function_exists(gethostname HAVE_GETHOSTNAME)
    281 
    282 set(OPENSSL_DEFAULT ON)
    283 if(WIN32)
    284   set(OPENSSL_DEFAULT OFF)
    285   check_library_exists_concat("ws2_32" getch        HAVE_LIBWS2_32)
    286   check_library_exists_concat("winmm"  getch        HAVE_LIBWINMM)
    287 endif()
    288 
    289 option(CMAKE_USE_OPENSSL "Use OpenSSL code. Experimental" ${OPENSSL_DEFAULT})
    290 mark_as_advanced(CMAKE_USE_OPENSSL)
    291 
    292 if(WIN32)
    293   CMAKE_DEPENDENT_OPTION(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON
    294     "NOT CMAKE_USE_OPENSSL" OFF)
    295   mark_as_advanced(CURL_WINDOWS_SSPI)
    296 endif()
    297 
    298 set(USE_OPENSSL OFF)
    299 set(HAVE_LIBCRYPTO OFF)
    300 set(HAVE_LIBSSL OFF)
    301 
    302 if(CMAKE_USE_OPENSSL)
    303   find_package(OpenSSL)
    304   if(OPENSSL_FOUND)
    305     list(APPEND CURL_LIBS ${OPENSSL_LIBRARIES})
    306     set(USE_OPENSSL ON)
    307     set(HAVE_LIBCRYPTO ON)
    308     set(HAVE_LIBSSL ON)
    309     include_directories(${OPENSSL_INCLUDE_DIR})
    310     set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
    311     check_include_file("openssl/crypto.h" HAVE_OPENSSL_CRYPTO_H)
    312     check_include_file("openssl/engine.h" HAVE_OPENSSL_ENGINE_H)
    313     check_include_file("openssl/err.h"    HAVE_OPENSSL_ERR_H)
    314     check_include_file("openssl/pem.h"    HAVE_OPENSSL_PEM_H)
    315     check_include_file("openssl/pkcs12.h" HAVE_OPENSSL_PKCS12_H)
    316     check_include_file("openssl/rsa.h"    HAVE_OPENSSL_RSA_H)
    317     check_include_file("openssl/ssl.h"    HAVE_OPENSSL_SSL_H)
    318     check_include_file("openssl/x509.h"   HAVE_OPENSSL_X509_H)
    319     check_include_file("openssl/rand.h"   HAVE_OPENSSL_RAND_H)
    320   elseif(WIN32)
    321     set(CURL_WINDOWS_SSPI ON)
    322   endif()
    323 endif()
    324 
    325 if(NOT CURL_DISABLE_LDAP)
    326   if(WIN32)
    327     option(USE_WIN32_LDAP "Use Windows LDAP implementation" ON)
    328     if(USE_WIN32_LDAP)
    329       check_library_exists_concat("wldap32" cldap_open HAVE_WLDAP32)
    330       if(NOT HAVE_WLDAP32)
    331         set(USE_WIN32_LDAP OFF)
    332       endif()
    333     endif()
    334   endif()
    335 
    336   option(CMAKE_USE_OPENLDAP "Use OpenLDAP code." OFF)
    337   mark_as_advanced(CMAKE_USE_OPENLDAP)
    338   set(CMAKE_LDAP_LIB "ldap" CACHE STRING "Name or full path to ldap library")
    339   set(CMAKE_LBER_LIB "lber" CACHE STRING "Name or full path to lber library")
    340 
    341   if(CMAKE_USE_OPENLDAP AND USE_WIN32_LDAP)
    342     message(FATAL_ERROR "Cannot use USE_WIN32_LDAP and CMAKE_USE_OPENLDAP at the same time")
    343   endif()
    344 
    345   # Now that we know, we're not using windows LDAP...
    346   if(USE_WIN32_LDAP)
    347     check_include_file_concat("winldap.h" HAVE_WINLDAP_H)
    348     check_include_file_concat("winber.h"  HAVE_WINBER_H)
    349   else()
    350     # Check for LDAP
    351     set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES})
    352     check_library_exists_concat(${CMAKE_LDAP_LIB} ldap_init HAVE_LIBLDAP)
    353     check_library_exists_concat(${CMAKE_LBER_LIB} ber_init HAVE_LIBLBER)
    354 
    355     set(CMAKE_REQUIRED_INCLUDES_BAK ${CMAKE_REQUIRED_INCLUDES})
    356     set(CMAKE_LDAP_INCLUDE_DIR "" CACHE STRING "Path to LDAP include directory")
    357     if(CMAKE_LDAP_INCLUDE_DIR)
    358       list(APPEND CMAKE_REQUIRED_INCLUDES ${CMAKE_LDAP_INCLUDE_DIR})
    359     endif()
    360     check_include_file_concat("ldap.h"           HAVE_LDAP_H)
    361     check_include_file_concat("lber.h"           HAVE_LBER_H)
    362 
    363     if(NOT HAVE_LDAP_H)
    364       message(STATUS "LDAP_H not found CURL_DISABLE_LDAP set ON")
    365       set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
    366       set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_BAK}) #LDAP includes won't be used
    367     elseif(NOT HAVE_LIBLDAP)
    368       message(STATUS "LDAP library '${CMAKE_LDAP_LIB}' not found CURL_DISABLE_LDAP set ON")
    369       set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
    370       set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_BAK}) #LDAP includes won't be used
    371     else()
    372       if(CMAKE_USE_OPENLDAP)
    373         set(USE_OPENLDAP ON)
    374       endif()
    375       if(CMAKE_LDAP_INCLUDE_DIR)
    376         include_directories(${CMAKE_LDAP_INCLUDE_DIR})
    377       endif()
    378       set(NEED_LBER_H ON)
    379       set(_HEADER_LIST)
    380       if(HAVE_WINDOWS_H)
    381         list(APPEND _HEADER_LIST "windows.h")
    382       endif()
    383       if(HAVE_SYS_TYPES_H)
    384         list(APPEND _HEADER_LIST "sys/types.h")
    385       endif()
    386       list(APPEND _HEADER_LIST "ldap.h")
    387 
    388       set(_SRC_STRING "")
    389       foreach(_HEADER ${_HEADER_LIST})
    390         set(_INCLUDE_STRING "${_INCLUDE_STRING}#include <${_HEADER}>\n")
    391       endforeach()
    392 
    393       set(_SRC_STRING
    394         "
    395         ${_INCLUDE_STRING}
    396         int main(int argc, char ** argv)
    397         {
    398           BerValue *bvp = NULL;
    399           BerElement *bep = ber_init(bvp);
    400           ber_free(bep, 1);
    401           return 0;
    402         }"
    403       )
    404       set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DLDAP_DEPRECATED=1")
    405       list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_LDAP_LIB})
    406       if(HAVE_LIBLBER)
    407         list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_LBER_LIB})
    408       endif()
    409       check_c_source_compiles("${_SRC_STRING}" NOT_NEED_LBER_H)
    410 
    411       if(NOT_NEED_LBER_H)
    412         set(NEED_LBER_H OFF)
    413       else()
    414         set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -DNEED_LBER_H")
    415       endif()
    416     endif()
    417   endif()
    418 
    419 endif()
    420 
    421 # No ldap, no ldaps.
    422 if(CURL_DISABLE_LDAP)
    423   if(NOT CURL_DISABLE_LDAPS)
    424     message(STATUS "LDAP needs to be enabled to support LDAPS")
    425     set(CURL_DISABLE_LDAPS ON CACHE BOOL "" FORCE)
    426   endif()
    427 endif()
    428 
    429 if(NOT CURL_DISABLE_LDAPS)
    430   check_include_file_concat("ldap_ssl.h" HAVE_LDAP_SSL_H)
    431   check_include_file_concat("ldapssl.h"  HAVE_LDAPSSL_H)
    432 endif()
    433 
    434 # Check for idn
    435 check_library_exists_concat("idn" idna_to_ascii_lz HAVE_LIBIDN)
    436 
    437 # Check for symbol dlopen (same as HAVE_LIBDL)
    438 check_library_exists("${CURL_LIBS}" dlopen "" HAVE_DLOPEN)
    439 
    440 option(CURL_ZLIB "Set to ON to enable building cURL with zlib support." ON)
    441 set(HAVE_LIBZ OFF)
    442 set(HAVE_ZLIB_H OFF)
    443 set(HAVE_ZLIB OFF)
    444 if(CURL_ZLIB)
    445   find_package(ZLIB QUIET)
    446   if(ZLIB_FOUND)
    447     set(HAVE_ZLIB_H ON)
    448     set(HAVE_ZLIB ON)
    449     set(HAVE_LIBZ ON)
    450     list(APPEND CURL_LIBS ${ZLIB_LIBRARIES})
    451     include_directories(${ZLIB_INCLUDE_DIRS})
    452     list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS})
    453   endif()
    454 endif()
    455 
    456 #libSSH2
    457 option(CMAKE_USE_LIBSSH2 "Use libSSH2" ON)
    458 mark_as_advanced(CMAKE_USE_LIBSSH2)
    459 set(USE_LIBSSH2 OFF)
    460 set(HAVE_LIBSSH2 OFF)
    461 set(HAVE_LIBSSH2_H OFF)
    462 
    463 if(CMAKE_USE_LIBSSH2)
    464   find_package(LibSSH2)
    465   if(LIBSSH2_FOUND)
    466     list(APPEND CURL_LIBS ${LIBSSH2_LIBRARY})
    467     set(CMAKE_REQUIRED_LIBRARIES ${LIBSSH2_LIBRARY})
    468     list(APPEND CMAKE_REQUIRED_INCLUDES "${LIBSSH2_INCLUDE_DIR}")
    469     include_directories("${LIBSSH2_INCLUDE_DIR}")
    470     set(HAVE_LIBSSH2 ON)
    471     set(USE_LIBSSH2 ON)
    472 
    473     # find_package has already found the headers
    474     set(HAVE_LIBSSH2_H ON)
    475     set(CURL_INCLUDES ${CURL_INCLUDES} "${LIBSSH2_INCLUDE_DIR}/libssh2.h")
    476     set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -DHAVE_LIBSSH2_H")
    477 
    478     # now check for specific libssh2 symbols as they were added in different versions
    479     set(CMAKE_EXTRA_INCLUDE_FILES "libssh2.h")
    480     check_function_exists(libssh2_version           HAVE_LIBSSH2_VERSION)
    481     check_function_exists(libssh2_init              HAVE_LIBSSH2_INIT)
    482     check_function_exists(libssh2_exit              HAVE_LIBSSH2_EXIT)
    483     check_function_exists(libssh2_scp_send64        HAVE_LIBSSH2_SCP_SEND64)
    484     check_function_exists(libssh2_session_handshake HAVE_LIBSSH2_SESSION_HANDSHAKE)
    485     set(CMAKE_EXTRA_INCLUDE_FILES "")
    486 
    487   endif(LIBSSH2_FOUND)
    488 endif(CMAKE_USE_LIBSSH2)
    489 
    490 option(CMAKE_USE_GSSAPI "Use GSSAPI implementation (right now only Heimdal is supported with CMake build)" OFF)
    491 mark_as_advanced(CMAKE_USE_GSSAPI)
    492 
    493 if(CMAKE_USE_GSSAPI)
    494   find_package(GSS)
    495 
    496   set(HAVE_GSSAPI ${GSS_FOUND})
    497   if(GSS_FOUND)
    498 
    499     message(STATUS "Found ${GSS_FLAVOUR} GSSAPI version: \"${GSS_VERSION}\"")
    500 
    501     list(APPEND CMAKE_REQUIRED_INCLUDES ${GSS_INCLUDE_DIRECTORIES})
    502     check_include_file_concat("gssapi/gssapi.h"  HAVE_GSSAPI_GSSAPI_H)
    503     check_include_file_concat("gssapi/gssapi_generic.h" HAVE_GSSAPI_GSSAPI_GENERIC_H)
    504     check_include_file_concat("gssapi/gssapi_krb5.h" HAVE_GSSAPI_GSSAPI_KRB5_H)
    505 
    506     if(GSS_FLAVOUR STREQUAL "Heimdal")
    507       set(HAVE_GSSHEIMDAL ON)
    508     else() # MIT
    509       set(HAVE_GSSMIT ON)
    510       set(_INCLUDE_LIST "")
    511       if(HAVE_GSSAPI_GSSAPI_H)
    512         list(APPEND _INCLUDE_LIST "gssapi/gssapi.h")
    513       endif()
    514       if(HAVE_GSSAPI_GSSAPI_GENERIC_H)
    515         list(APPEND _INCLUDE_LIST "gssapi/gssapi_generic.h")
    516       endif()
    517       if(HAVE_GSSAPI_GSSAPI_KRB5_H)
    518         list(APPEND _INCLUDE_LIST "gssapi/gssapi_krb5.h")
    519       endif()
    520 
    521       string(REPLACE ";" " " _COMPILER_FLAGS_STR "${GSS_COMPILER_FLAGS}")
    522       string(REPLACE ";" " " _LINKER_FLAGS_STR "${GSS_LINKER_FLAGS}")
    523 
    524       foreach(_dir ${GSS_LINK_DIRECTORIES})
    525         set(_LINKER_FLAGS_STR "${_LINKER_FLAGS_STR} -L\"${_dir}\"")
    526       endforeach()
    527 
    528       set(CMAKE_REQUIRED_FLAGS "${_COMPILER_FLAGS_STR} ${_LINKER_FLAGS_STR}")
    529       set(CMAKE_REQUIRED_LIBRARIES ${GSS_LIBRARIES})
    530       check_symbol_exists("GSS_C_NT_HOSTBASED_SERVICE" ${_INCLUDE_LIST} HAVE_GSS_C_NT_HOSTBASED_SERVICE)
    531       if(NOT HAVE_GSS_C_NT_HOSTBASED_SERVICE)
    532         set(HAVE_OLD_GSSMIT ON)
    533       endif()
    534 
    535     endif()
    536 
    537     include_directories(${GSS_INCLUDE_DIRECTORIES})
    538     link_directories(${GSS_LINK_DIRECTORIES})
    539     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GSS_COMPILER_FLAGS}")
    540     set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GSS_LINKER_FLAGS}")
    541     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GSS_LINKER_FLAGS}")
    542     list(APPEND CURL_LIBS ${GSS_LIBRARIES})
    543 
    544   else()
    545     message(WARNING "GSSAPI support has been requested but no supporting libraries found. Skipping.")
    546   endif()
    547 endif()
    548 
    549 option(ENABLE_UNIX_SOCKETS "Define if you want Unix domain sockets support" ON)
    550 if(ENABLE_UNIX_SOCKETS)
    551   include(CheckStructHasMember)
    552   check_struct_has_member("struct sockaddr_un" sun_path "sys/un.h" USE_UNIX_SOCKETS)
    553 else()
    554   unset(USE_UNIX_SOCKETS CACHE)
    555 endif()
    556 
    557 
    558 # Check for header files
    559 if(NOT UNIX)
    560   check_include_file_concat("windows.h"      HAVE_WINDOWS_H)
    561   check_include_file_concat("winsock.h"      HAVE_WINSOCK_H)
    562   check_include_file_concat("ws2tcpip.h"     HAVE_WS2TCPIP_H)
    563   check_include_file_concat("winsock2.h"     HAVE_WINSOCK2_H)
    564   if(CURL_WINDOWS_SSPI)
    565     set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DSECURITY_WIN32")
    566     check_include_file_concat("sspi.h"       HAVE_SSPI_H)
    567     if(HAVE_SSPI_H)
    568       check_include_file_concat("schannel.h" HAVE_SCHANNEL_H)
    569       set(USE_WINDOWS_SSPI ON)
    570       if(HAVE_SCHANNEL_H)
    571         set(USE_SCHANNEL ON)
    572         set(SSL_ENABLED ON)
    573         set(CURL_LIBS ${CURL_LIBS} "crypt32")
    574       endif()
    575     endif()
    576   endif()
    577 endif(NOT UNIX)
    578 
    579 check_include_file_concat("stdio.h"          HAVE_STDIO_H)
    580 check_include_file_concat("inttypes.h"       HAVE_INTTYPES_H)
    581 check_include_file_concat("sys/filio.h"      HAVE_SYS_FILIO_H)
    582 check_include_file_concat("sys/ioctl.h"      HAVE_SYS_IOCTL_H)
    583 check_include_file_concat("sys/param.h"      HAVE_SYS_PARAM_H)
    584 check_include_file_concat("sys/poll.h"       HAVE_SYS_POLL_H)
    585 check_include_file_concat("sys/resource.h"   HAVE_SYS_RESOURCE_H)
    586 check_include_file_concat("sys/select.h"     HAVE_SYS_SELECT_H)
    587 check_include_file_concat("sys/socket.h"     HAVE_SYS_SOCKET_H)
    588 check_include_file_concat("sys/sockio.h"     HAVE_SYS_SOCKIO_H)
    589 check_include_file_concat("sys/stat.h"       HAVE_SYS_STAT_H)
    590 check_include_file_concat("sys/time.h"       HAVE_SYS_TIME_H)
    591 check_include_file_concat("sys/types.h"      HAVE_SYS_TYPES_H)
    592 check_include_file_concat("sys/uio.h"        HAVE_SYS_UIO_H)
    593 check_include_file_concat("sys/un.h"         HAVE_SYS_UN_H)
    594 check_include_file_concat("sys/utime.h"      HAVE_SYS_UTIME_H)
    595 check_include_file_concat("alloca.h"         HAVE_ALLOCA_H)
    596 check_include_file_concat("arpa/inet.h"      HAVE_ARPA_INET_H)
    597 check_include_file_concat("arpa/tftp.h"      HAVE_ARPA_TFTP_H)
    598 check_include_file_concat("assert.h"         HAVE_ASSERT_H)
    599 check_include_file_concat("crypto.h"         HAVE_CRYPTO_H)
    600 check_include_file_concat("des.h"            HAVE_DES_H)
    601 check_include_file_concat("err.h"            HAVE_ERR_H)
    602 check_include_file_concat("errno.h"          HAVE_ERRNO_H)
    603 check_include_file_concat("fcntl.h"          HAVE_FCNTL_H)
    604 check_include_file_concat("idn-free.h"       HAVE_IDN_FREE_H)
    605 check_include_file_concat("ifaddrs.h"        HAVE_IFADDRS_H)
    606 check_include_file_concat("io.h"             HAVE_IO_H)
    607 check_include_file_concat("krb.h"            HAVE_KRB_H)
    608 check_include_file_concat("libgen.h"         HAVE_LIBGEN_H)
    609 check_include_file_concat("limits.h"         HAVE_LIMITS_H)
    610 check_include_file_concat("locale.h"         HAVE_LOCALE_H)
    611 check_include_file_concat("net/if.h"         HAVE_NET_IF_H)
    612 check_include_file_concat("netdb.h"          HAVE_NETDB_H)
    613 check_include_file_concat("netinet/in.h"     HAVE_NETINET_IN_H)
    614 check_include_file_concat("netinet/tcp.h"    HAVE_NETINET_TCP_H)
    615 
    616 check_include_file_concat("pem.h"            HAVE_PEM_H)
    617 check_include_file_concat("poll.h"           HAVE_POLL_H)
    618 check_include_file_concat("pwd.h"            HAVE_PWD_H)
    619 check_include_file_concat("rsa.h"            HAVE_RSA_H)
    620 check_include_file_concat("setjmp.h"         HAVE_SETJMP_H)
    621 check_include_file_concat("sgtty.h"          HAVE_SGTTY_H)
    622 check_include_file_concat("signal.h"         HAVE_SIGNAL_H)
    623 check_include_file_concat("ssl.h"            HAVE_SSL_H)
    624 check_include_file_concat("stdbool.h"        HAVE_STDBOOL_H)
    625 check_include_file_concat("stdint.h"         HAVE_STDINT_H)
    626 check_include_file_concat("stdio.h"          HAVE_STDIO_H)
    627 check_include_file_concat("stdlib.h"         HAVE_STDLIB_H)
    628 check_include_file_concat("string.h"         HAVE_STRING_H)
    629 check_include_file_concat("strings.h"        HAVE_STRINGS_H)
    630 check_include_file_concat("stropts.h"        HAVE_STROPTS_H)
    631 check_include_file_concat("termio.h"         HAVE_TERMIO_H)
    632 check_include_file_concat("termios.h"        HAVE_TERMIOS_H)
    633 check_include_file_concat("time.h"           HAVE_TIME_H)
    634 check_include_file_concat("tld.h"            HAVE_TLD_H)
    635 check_include_file_concat("unistd.h"         HAVE_UNISTD_H)
    636 check_include_file_concat("utime.h"          HAVE_UTIME_H)
    637 check_include_file_concat("x509.h"           HAVE_X509_H)
    638 
    639 check_include_file_concat("process.h"        HAVE_PROCESS_H)
    640 check_include_file_concat("stddef.h"         HAVE_STDDEF_H)
    641 check_include_file_concat("dlfcn.h"          HAVE_DLFCN_H)
    642 check_include_file_concat("malloc.h"         HAVE_MALLOC_H)
    643 check_include_file_concat("memory.h"         HAVE_MEMORY_H)
    644 check_include_file_concat("netinet/if_ether.h" HAVE_NETINET_IF_ETHER_H)
    645 check_include_file_concat("stdint.h"        HAVE_STDINT_H)
    646 check_include_file_concat("sockio.h"        HAVE_SOCKIO_H)
    647 check_include_file_concat("sys/utsname.h"   HAVE_SYS_UTSNAME_H)
    648 check_include_file_concat("idna.h"          HAVE_IDNA_H)
    649 
    650 
    651 
    652 check_type_size(size_t  SIZEOF_SIZE_T)
    653 check_type_size(ssize_t  SIZEOF_SSIZE_T)
    654 check_type_size("long long"  SIZEOF_LONG_LONG)
    655 check_type_size("long"  SIZEOF_LONG)
    656 check_type_size("short"  SIZEOF_SHORT)
    657 check_type_size("int"  SIZEOF_INT)
    658 check_type_size("__int64"  SIZEOF___INT64)
    659 check_type_size("long double"  SIZEOF_LONG_DOUBLE)
    660 check_type_size("time_t"  SIZEOF_TIME_T)
    661 if(NOT HAVE_SIZEOF_SSIZE_T)
    662   if(SIZEOF_LONG EQUAL SIZEOF_SIZE_T)
    663     set(ssize_t long)
    664   endif(SIZEOF_LONG EQUAL SIZEOF_SIZE_T)
    665   if(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T)
    666     set(ssize_t __int64)
    667   endif(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T)
    668 endif(NOT HAVE_SIZEOF_SSIZE_T)
    669 
    670 # Different sizeofs, etc.
    671 
    672 #    define CURL_SIZEOF_LONG        4
    673 #    define CURL_TYPEOF_CURL_OFF_T  long long
    674 #    define CURL_FORMAT_CURL_OFF_T  "lld"
    675 #    define CURL_FORMAT_CURL_OFF_TU "llu"
    676 #    define CURL_FORMAT_OFF_T       "%lld"
    677 #    define CURL_SIZEOF_CURL_OFF_T  8
    678 #    define CURL_SUFFIX_CURL_OFF_T  LL
    679 #    define CURL_SUFFIX_CURL_OFF_TU ULL
    680 
    681 set(CURL_SIZEOF_LONG ${SIZEOF_LONG})
    682 
    683 if(SIZEOF_LONG EQUAL 8)
    684   set(CURL_TYPEOF_CURL_OFF_T long)
    685   set(CURL_SIZEOF_CURL_OFF_T 8)
    686   set(CURL_FORMAT_CURL_OFF_T "ld")
    687   set(CURL_FORMAT_CURL_OFF_TU "lu")
    688   set(CURL_FORMAT_OFF_T "%ld")
    689   set(CURL_SUFFIX_CURL_OFF_T L)
    690   set(CURL_SUFFIX_CURL_OFF_TU UL)
    691 endif(SIZEOF_LONG EQUAL 8)
    692 
    693 if(SIZEOF_LONG_LONG EQUAL 8)
    694   set(CURL_TYPEOF_CURL_OFF_T "long long")
    695   set(CURL_SIZEOF_CURL_OFF_T 8)
    696   set(CURL_FORMAT_CURL_OFF_T "lld")
    697   set(CURL_FORMAT_CURL_OFF_TU "llu")
    698   set(CURL_FORMAT_OFF_T "%lld")
    699   set(CURL_SUFFIX_CURL_OFF_T LL)
    700   set(CURL_SUFFIX_CURL_OFF_TU ULL)
    701 endif(SIZEOF_LONG_LONG EQUAL 8)
    702 
    703 if(NOT CURL_TYPEOF_CURL_OFF_T)
    704   set(CURL_TYPEOF_CURL_OFF_T ${ssize_t})
    705   set(CURL_SIZEOF_CURL_OFF_T ${SIZEOF_SSIZE_T})
    706   # TODO: need adjustment here.
    707   set(CURL_FORMAT_CURL_OFF_T "ld")
    708   set(CURL_FORMAT_CURL_OFF_TU "lu")
    709   set(CURL_FORMAT_OFF_T "%ld")
    710   set(CURL_SUFFIX_CURL_OFF_T L)
    711   set(CURL_SUFFIX_CURL_OFF_TU LU)
    712 endif(NOT CURL_TYPEOF_CURL_OFF_T)
    713 
    714 if(HAVE_SIZEOF_LONG_LONG)
    715   set(HAVE_LONGLONG 1)
    716   set(HAVE_LL 1)
    717 endif(HAVE_SIZEOF_LONG_LONG)
    718 
    719 find_file(RANDOM_FILE urandom /dev)
    720 mark_as_advanced(RANDOM_FILE)
    721 
    722 # Check for some functions that are used
    723 if(HAVE_LIBWS2_32)
    724   set(CMAKE_REQUIRED_LIBRARIES ws2_32)
    725 elseif(HAVE_LIBSOCKET)
    726   set(CMAKE_REQUIRED_LIBRARIES socket)
    727 endif()
    728 
    729 check_symbol_exists(basename      "${CURL_INCLUDES}" HAVE_BASENAME)
    730 check_symbol_exists(socket        "${CURL_INCLUDES}" HAVE_SOCKET)
    731 check_symbol_exists(poll          "${CURL_INCLUDES}" HAVE_POLL)
    732 check_symbol_exists(select        "${CURL_INCLUDES}" HAVE_SELECT)
    733 check_symbol_exists(strdup        "${CURL_INCLUDES}" HAVE_STRDUP)
    734 check_symbol_exists(strstr        "${CURL_INCLUDES}" HAVE_STRSTR)
    735 check_symbol_exists(strtok_r      "${CURL_INCLUDES}" HAVE_STRTOK_R)
    736 check_symbol_exists(strftime      "${CURL_INCLUDES}" HAVE_STRFTIME)
    737 check_symbol_exists(uname         "${CURL_INCLUDES}" HAVE_UNAME)
    738 check_symbol_exists(strcasecmp    "${CURL_INCLUDES}" HAVE_STRCASECMP)
    739 check_symbol_exists(stricmp       "${CURL_INCLUDES}" HAVE_STRICMP)
    740 check_symbol_exists(strcmpi       "${CURL_INCLUDES}" HAVE_STRCMPI)
    741 check_symbol_exists(strncmpi      "${CURL_INCLUDES}" HAVE_STRNCMPI)
    742 check_symbol_exists(alarm         "${CURL_INCLUDES}" HAVE_ALARM)
    743 if(NOT HAVE_STRNCMPI)
    744   set(HAVE_STRCMPI)
    745 endif(NOT HAVE_STRNCMPI)
    746 check_symbol_exists(gethostbyaddr "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR)
    747 check_symbol_exists(gethostbyaddr_r "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR_R)
    748 check_symbol_exists(gettimeofday  "${CURL_INCLUDES}" HAVE_GETTIMEOFDAY)
    749 check_symbol_exists(inet_addr     "${CURL_INCLUDES}" HAVE_INET_ADDR)
    750 check_symbol_exists(inet_ntoa     "${CURL_INCLUDES}" HAVE_INET_NTOA)
    751 check_symbol_exists(inet_ntoa_r   "${CURL_INCLUDES}" HAVE_INET_NTOA_R)
    752 check_symbol_exists(tcsetattr     "${CURL_INCLUDES}" HAVE_TCSETATTR)
    753 check_symbol_exists(tcgetattr     "${CURL_INCLUDES}" HAVE_TCGETATTR)
    754 check_symbol_exists(perror        "${CURL_INCLUDES}" HAVE_PERROR)
    755 check_symbol_exists(closesocket   "${CURL_INCLUDES}" HAVE_CLOSESOCKET)
    756 check_symbol_exists(setvbuf       "${CURL_INCLUDES}" HAVE_SETVBUF)
    757 check_symbol_exists(sigsetjmp     "${CURL_INCLUDES}" HAVE_SIGSETJMP)
    758 check_symbol_exists(getpass_r     "${CURL_INCLUDES}" HAVE_GETPASS_R)
    759 check_symbol_exists(strlcat       "${CURL_INCLUDES}" HAVE_STRLCAT)
    760 check_symbol_exists(getpwuid      "${CURL_INCLUDES}" HAVE_GETPWUID)
    761 check_symbol_exists(geteuid       "${CURL_INCLUDES}" HAVE_GETEUID)
    762 check_symbol_exists(utime         "${CURL_INCLUDES}" HAVE_UTIME)
    763 if(CMAKE_USE_OPENSSL)
    764   check_symbol_exists(RAND_status   "${CURL_INCLUDES}" HAVE_RAND_STATUS)
    765   check_symbol_exists(RAND_screen   "${CURL_INCLUDES}" HAVE_RAND_SCREEN)
    766   check_symbol_exists(RAND_egd      "${CURL_INCLUDES}" HAVE_RAND_EGD)
    767   check_symbol_exists(CRYPTO_cleanup_all_ex_data "${CURL_INCLUDES}"
    768     HAVE_CRYPTO_CLEANUP_ALL_EX_DATA)
    769   if(HAVE_LIBCRYPTO AND HAVE_LIBSSL)
    770     set(USE_OPENSSL 1)
    771   endif(HAVE_LIBCRYPTO AND HAVE_LIBSSL)
    772 endif(CMAKE_USE_OPENSSL)
    773 check_symbol_exists(gmtime_r      "${CURL_INCLUDES}" HAVE_GMTIME_R)
    774 check_symbol_exists(localtime_r   "${CURL_INCLUDES}" HAVE_LOCALTIME_R)
    775 
    776 check_symbol_exists(gethostbyname   "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME)
    777 check_symbol_exists(gethostbyname_r "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME_R)
    778 
    779 check_symbol_exists(signal        "${CURL_INCLUDES}" HAVE_SIGNAL_FUNC)
    780 check_symbol_exists(SIGALRM       "${CURL_INCLUDES}" HAVE_SIGNAL_MACRO)
    781 if(HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO)
    782   set(HAVE_SIGNAL 1)
    783 endif(HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO)
    784 check_symbol_exists(uname          "${CURL_INCLUDES}" HAVE_UNAME)
    785 check_symbol_exists(strtoll        "${CURL_INCLUDES}" HAVE_STRTOLL)
    786 check_symbol_exists(_strtoi64      "${CURL_INCLUDES}" HAVE__STRTOI64)
    787 check_symbol_exists(strerror_r     "${CURL_INCLUDES}" HAVE_STRERROR_R)
    788 check_symbol_exists(siginterrupt   "${CURL_INCLUDES}" HAVE_SIGINTERRUPT)
    789 check_symbol_exists(perror         "${CURL_INCLUDES}" HAVE_PERROR)
    790 check_symbol_exists(fork           "${CURL_INCLUDES}" HAVE_FORK)
    791 check_symbol_exists(getaddrinfo    "${CURL_INCLUDES}" HAVE_GETADDRINFO)
    792 check_symbol_exists(freeaddrinfo   "${CURL_INCLUDES}" HAVE_FREEADDRINFO)
    793 check_symbol_exists(freeifaddrs    "${CURL_INCLUDES}" HAVE_FREEIFADDRS)
    794 check_symbol_exists(pipe           "${CURL_INCLUDES}" HAVE_PIPE)
    795 check_symbol_exists(ftruncate      "${CURL_INCLUDES}" HAVE_FTRUNCATE)
    796 check_symbol_exists(getprotobyname "${CURL_INCLUDES}" HAVE_GETPROTOBYNAME)
    797 check_symbol_exists(getrlimit      "${CURL_INCLUDES}" HAVE_GETRLIMIT)
    798 check_symbol_exists(idn_free       "${CURL_INCLUDES}" HAVE_IDN_FREE)
    799 check_symbol_exists(idna_strerror  "${CURL_INCLUDES}" HAVE_IDNA_STRERROR)
    800 check_symbol_exists(tld_strerror   "${CURL_INCLUDES}" HAVE_TLD_STRERROR)
    801 check_symbol_exists(setlocale      "${CURL_INCLUDES}" HAVE_SETLOCALE)
    802 check_symbol_exists(setrlimit      "${CURL_INCLUDES}" HAVE_SETRLIMIT)
    803 check_symbol_exists(fcntl          "${CURL_INCLUDES}" HAVE_FCNTL)
    804 check_symbol_exists(ioctl          "${CURL_INCLUDES}" HAVE_IOCTL)
    805 check_symbol_exists(setsockopt     "${CURL_INCLUDES}" HAVE_SETSOCKOPT)
    806 
    807 # symbol exists in win32, but function does not.
    808 check_function_exists(inet_pton HAVE_INET_PTON)
    809 
    810 # sigaction and sigsetjmp are special. Use special mechanism for
    811 # detecting those, but only if previous attempt failed.
    812 if(HAVE_SIGNAL_H)
    813   check_symbol_exists(sigaction "signal.h" HAVE_SIGACTION)
    814 endif(HAVE_SIGNAL_H)
    815 
    816 if(NOT HAVE_SIGSETJMP)
    817   if(HAVE_SETJMP_H)
    818     check_symbol_exists(sigsetjmp "setjmp.h" HAVE_MACRO_SIGSETJMP)
    819     if(HAVE_MACRO_SIGSETJMP)
    820       set(HAVE_SIGSETJMP 1)
    821     endif(HAVE_MACRO_SIGSETJMP)
    822   endif(HAVE_SETJMP_H)
    823 endif(NOT HAVE_SIGSETJMP)
    824 
    825 # If there is no stricmp(), do not allow LDAP to parse URLs
    826 if(NOT HAVE_STRICMP)
    827   set(HAVE_LDAP_URL_PARSE 1)
    828 endif(NOT HAVE_STRICMP)
    829 
    830 # Do curl specific tests
    831 foreach(CURL_TEST
    832     HAVE_FCNTL_O_NONBLOCK
    833     HAVE_IOCTLSOCKET
    834     HAVE_IOCTLSOCKET_CAMEL
    835     HAVE_IOCTLSOCKET_CAMEL_FIONBIO
    836     HAVE_IOCTLSOCKET_FIONBIO
    837     HAVE_IOCTL_FIONBIO
    838     HAVE_IOCTL_SIOCGIFADDR
    839     HAVE_SETSOCKOPT_SO_NONBLOCK
    840     HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
    841     TIME_WITH_SYS_TIME
    842     HAVE_O_NONBLOCK
    843     HAVE_GETHOSTBYADDR_R_5
    844     HAVE_GETHOSTBYADDR_R_7
    845     HAVE_GETHOSTBYADDR_R_8
    846     HAVE_GETHOSTBYADDR_R_5_REENTRANT
    847     HAVE_GETHOSTBYADDR_R_7_REENTRANT
    848     HAVE_GETHOSTBYADDR_R_8_REENTRANT
    849     HAVE_GETHOSTBYNAME_R_3
    850     HAVE_GETHOSTBYNAME_R_5
    851     HAVE_GETHOSTBYNAME_R_6
    852     HAVE_GETHOSTBYNAME_R_3_REENTRANT
    853     HAVE_GETHOSTBYNAME_R_5_REENTRANT
    854     HAVE_GETHOSTBYNAME_R_6_REENTRANT
    855     HAVE_SOCKLEN_T
    856     HAVE_IN_ADDR_T
    857     HAVE_BOOL_T
    858     STDC_HEADERS
    859     RETSIGTYPE_TEST
    860     HAVE_INET_NTOA_R_DECL
    861     HAVE_INET_NTOA_R_DECL_REENTRANT
    862     HAVE_GETADDRINFO
    863     HAVE_FILE_OFFSET_BITS
    864     )
    865   curl_internal_test(${CURL_TEST})
    866 endforeach(CURL_TEST)
    867 if(HAVE_FILE_OFFSET_BITS)
    868   set(_FILE_OFFSET_BITS 64)
    869 endif(HAVE_FILE_OFFSET_BITS)
    870 foreach(CURL_TEST
    871     HAVE_GLIBC_STRERROR_R
    872     HAVE_POSIX_STRERROR_R
    873     )
    874   curl_internal_test_run(${CURL_TEST})
    875 endforeach(CURL_TEST)
    876 
    877 # Check for reentrant
    878 foreach(CURL_TEST
    879     HAVE_GETHOSTBYADDR_R_5
    880     HAVE_GETHOSTBYADDR_R_7
    881     HAVE_GETHOSTBYADDR_R_8
    882     HAVE_GETHOSTBYNAME_R_3
    883     HAVE_GETHOSTBYNAME_R_5
    884     HAVE_GETHOSTBYNAME_R_6
    885     HAVE_INET_NTOA_R_DECL_REENTRANT)
    886   if(NOT ${CURL_TEST})
    887     if(${CURL_TEST}_REENTRANT)
    888       set(NEED_REENTRANT 1)
    889     endif(${CURL_TEST}_REENTRANT)
    890   endif(NOT ${CURL_TEST})
    891 endforeach(CURL_TEST)
    892 
    893 if(NEED_REENTRANT)
    894   foreach(CURL_TEST
    895       HAVE_GETHOSTBYADDR_R_5
    896       HAVE_GETHOSTBYADDR_R_7
    897       HAVE_GETHOSTBYADDR_R_8
    898       HAVE_GETHOSTBYNAME_R_3
    899       HAVE_GETHOSTBYNAME_R_5
    900       HAVE_GETHOSTBYNAME_R_6)
    901     set(${CURL_TEST} 0)
    902     if(${CURL_TEST}_REENTRANT)
    903       set(${CURL_TEST} 1)
    904     endif(${CURL_TEST}_REENTRANT)
    905   endforeach(CURL_TEST)
    906 endif(NEED_REENTRANT)
    907 
    908 if(HAVE_INET_NTOA_R_DECL_REENTRANT)
    909   set(HAVE_INET_NTOA_R_DECL 1)
    910   set(NEED_REENTRANT 1)
    911 endif(HAVE_INET_NTOA_R_DECL_REENTRANT)
    912 
    913 # Some other minor tests
    914 
    915 if(NOT HAVE_IN_ADDR_T)
    916   set(in_addr_t "unsigned long")
    917 endif(NOT HAVE_IN_ADDR_T)
    918 
    919 # Fix libz / zlib.h
    920 
    921 if(NOT CURL_SPECIAL_LIBZ)
    922   if(NOT HAVE_LIBZ)
    923     set(HAVE_ZLIB_H 0)
    924   endif(NOT HAVE_LIBZ)
    925 
    926   if(NOT HAVE_ZLIB_H)
    927     set(HAVE_LIBZ 0)
    928   endif(NOT HAVE_ZLIB_H)
    929 endif(NOT CURL_SPECIAL_LIBZ)
    930 
    931 if(_FILE_OFFSET_BITS)
    932   set(_FILE_OFFSET_BITS 64)
    933 endif(_FILE_OFFSET_BITS)
    934 set(CMAKE_REQUIRED_FLAGS "-D_FILE_OFFSET_BITS=64")
    935 set(CMAKE_EXTRA_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/curl/curl.h")
    936 check_type_size("curl_off_t" SIZEOF_CURL_OFF_T)
    937 set(CMAKE_EXTRA_INCLUDE_FILES)
    938 set(CMAKE_REQUIRED_FLAGS)
    939 
    940 
    941 # Check for nonblocking
    942 set(HAVE_DISABLED_NONBLOCKING 1)
    943 if(HAVE_FIONBIO OR
    944     HAVE_IOCTLSOCKET OR
    945     HAVE_IOCTLSOCKET_CASE OR
    946     HAVE_O_NONBLOCK)
    947   set(HAVE_DISABLED_NONBLOCKING)
    948 endif(HAVE_FIONBIO OR
    949   HAVE_IOCTLSOCKET OR
    950   HAVE_IOCTLSOCKET_CASE OR
    951   HAVE_O_NONBLOCK)
    952 
    953 if(RETSIGTYPE_TEST)
    954   set(RETSIGTYPE void)
    955 else(RETSIGTYPE_TEST)
    956   set(RETSIGTYPE int)
    957 endif(RETSIGTYPE_TEST)
    958 
    959 if(CMAKE_COMPILER_IS_GNUCC AND APPLE)
    960   include(CheckCCompilerFlag)
    961   check_c_compiler_flag(-Wno-long-double HAVE_C_FLAG_Wno_long_double)
    962   if(HAVE_C_FLAG_Wno_long_double)
    963     # The Mac version of GCC warns about use of long double.  Disable it.
    964     get_source_file_property(MPRINTF_COMPILE_FLAGS mprintf.c COMPILE_FLAGS)
    965     if(MPRINTF_COMPILE_FLAGS)
    966       set(MPRINTF_COMPILE_FLAGS "${MPRINTF_COMPILE_FLAGS} -Wno-long-double")
    967     else(MPRINTF_COMPILE_FLAGS)
    968       set(MPRINTF_COMPILE_FLAGS "-Wno-long-double")
    969     endif(MPRINTF_COMPILE_FLAGS)
    970     set_source_files_properties(mprintf.c PROPERTIES
    971       COMPILE_FLAGS ${MPRINTF_COMPILE_FLAGS})
    972   endif(HAVE_C_FLAG_Wno_long_double)
    973 endif(CMAKE_COMPILER_IS_GNUCC AND APPLE)
    974 
    975 if(HAVE_SOCKLEN_T)
    976   set(CURL_TYPEOF_CURL_SOCKLEN_T "socklen_t")
    977   if(WIN32)
    978     set(CMAKE_EXTRA_INCLUDE_FILES "winsock2.h;ws2tcpip.h")
    979   elseif(HAVE_SYS_SOCKET_H)
    980     set(CMAKE_EXTRA_INCLUDE_FILES "sys/socket.h")
    981   endif()
    982   check_type_size("socklen_t" CURL_SIZEOF_CURL_SOCKLEN_T)
    983   set(CMAKE_EXTRA_INCLUDE_FILES)
    984   if(NOT HAVE_CURL_SIZEOF_CURL_SOCKLEN_T)
    985     message(FATAL_ERROR
    986      "Check for sizeof socklen_t failed, see CMakeFiles/CMakerror.log")
    987   endif()
    988 else()
    989   set(CURL_TYPEOF_CURL_SOCKLEN_T int)
    990   set(CURL_SIZEOF_CURL_SOCKLEN_T ${SIZEOF_INT})
    991 endif()
    992 
    993 # TODO test which of these headers are required for the typedefs used in curlbuild.h
    994 if(WIN32)
    995   set(CURL_PULL_WS2TCPIP_H ${HAVE_WS2TCPIP_H})
    996 else()
    997   set(CURL_PULL_SYS_TYPES_H ${HAVE_SYS_TYPES_H})
    998   set(CURL_PULL_SYS_SOCKET_H ${HAVE_SYS_SOCKET_H})
    999   set(CURL_PULL_SYS_POLL_H ${HAVE_SYS_POLL_H})
   1000 endif()
   1001 set(CURL_PULL_STDINT_H ${HAVE_STDINT_H})
   1002 set(CURL_PULL_INTTYPES_H ${HAVE_INTTYPES_H})
   1003 
   1004 include(CMake/OtherTests.cmake)
   1005 
   1006 add_definitions(-DHAVE_CONFIG_H)
   1007 
   1008 # For windows, do not allow the compiler to use default target (Vista).
   1009 if(WIN32)
   1010   add_definitions(-D_WIN32_WINNT=0x0501)
   1011 endif(WIN32)
   1012 
   1013 if(MSVC)
   1014   add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
   1015 endif(MSVC)
   1016 
   1017 # Ugly (but functional) way to include "Makefile.inc" by transforming it (= regenerate it).
   1018 function(TRANSFORM_MAKEFILE_INC INPUT_FILE OUTPUT_FILE)
   1019   file(READ ${INPUT_FILE} MAKEFILE_INC_TEXT)
   1020   string(REPLACE "$(top_srcdir)"   "\${CURL_SOURCE_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
   1021   string(REPLACE "$(top_builddir)" "\${CURL_BINARY_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
   1022 
   1023   string(REGEX REPLACE "\\\\\n" "!" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
   1024   string(REGEX REPLACE "([a-zA-Z_][a-zA-Z0-9_]*)[\t ]*=[\t ]*([^\n]*)" "SET(\\1 \\2)" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
   1025   string(REPLACE "!" "\n" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
   1026 
   1027   string(REGEX REPLACE "\\$\\(([a-zA-Z_][a-zA-Z0-9_]*)\\)" "\${\\1}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})    # Replace $() with ${}
   1028   string(REGEX REPLACE "@([a-zA-Z_][a-zA-Z0-9_]*)@" "\${\\1}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})    # Replace @@ with ${}, even if that may not be read by CMake scripts.
   1029   file(WRITE ${OUTPUT_FILE} ${MAKEFILE_INC_TEXT})
   1030 
   1031 endfunction()
   1032 
   1033 add_subdirectory(lib)
   1034 if(BUILD_CURL_EXE)
   1035   add_subdirectory(src)
   1036 endif()
   1037 
   1038 include(CTest)
   1039 if(BUILD_TESTING)
   1040   add_subdirectory(tests)
   1041 endif()
   1042 
   1043 # TODO support GNUTLS, NSS, POLARSSL, AXTLS, CYASSL, WINSSL, DARWINSSL
   1044 if(USE_OPENSSL)
   1045   set(SSL_ENABLED 1)
   1046 endif()
   1047 
   1048 # Helper to populate a list (_items) with a label when conditions (the remaining
   1049 # args) are satisfied
   1050 function(_add_if label)
   1051   # TODO need to disable policy CMP0054 (CMake 3.1) to allow this indirection
   1052   if(${ARGN})
   1053     set(_items ${_items} "${label}" PARENT_SCOPE)
   1054   endif()
   1055 endfunction()
   1056 
   1057 # Clear list and try to detect available features
   1058 set(_items)
   1059 _add_if("WinSSL"        SSL_ENABLED AND USE_WINDOWS_SSPI)
   1060 _add_if("OpenSSL"       SSL_ENABLED AND USE_OPENSSL)
   1061 _add_if("IPv6"          ENABLE_IPV6)
   1062 _add_if("unix-sockets"  USE_UNIX_SOCKETS)
   1063 _add_if("libz"          HAVE_LIBZ)
   1064 _add_if("AsynchDNS"     USE_ARES OR USE_THREADS_POSIX)
   1065 _add_if("IDN"           HAVE_LIBIDN)
   1066 # TODO SSP1 (WinSSL) check is missing
   1067 _add_if("SSPI"          USE_WINDOWS_SSPI)
   1068 _add_if("GSS-API"       HAVE_GSSAPI)
   1069 # TODO SSP1 missing for SPNEGO
   1070 _add_if("SPNEGO"        NOT CURL_DISABLE_CRYPTO_AUTH AND
   1071                         (HAVE_GSSAPI OR USE_WINDOWS_SSPI))
   1072 _add_if("Kerberos"      NOT CURL_DISABLE_CRYPTO_AUTH AND
   1073                         (HAVE_GSSAPI OR USE_WINDOWS_SSPI))
   1074 # NTLM support requires crypto function adaptions from various SSL libs
   1075 # TODO alternative SSL libs tests for SSP1, GNUTLS, NSS, DARWINSSL
   1076 if(NOT CURL_DISABLE_CRYPTO_AUTH AND (USE_OPENSSL OR
   1077    USE_WINDOWS_SSPI OR GNUTLS_ENABLED OR NSS_ENABLED OR DARWINSSL_ENABLED))
   1078   _add_if("NTLM"        1)
   1079   # TODO missing option (autoconf: --enable-ntlm-wb)
   1080   _add_if("NTLM_WB"     NOT CURL_DISABLE_HTTP AND NTLM_WB_ENABLED)
   1081 endif()
   1082 # TODO missing option (--enable-tls-srp), depends on GNUTLS_SRP/OPENSSL_SRP
   1083 _add_if("TLS-SRP"       USE_TLS_SRP)
   1084 # TODO option --with-nghttp2 tests for nghttp2 lib and nghttp2/nghttp2.h header
   1085 _add_if("HTTP2"         USE_NGHTTP2)
   1086 string(REPLACE ";" " " SUPPORT_FEATURES "${_items}")
   1087 message(STATUS "Enabled features: ${SUPPORT_FEATURES}")
   1088 
   1089 # Clear list and try to detect available protocols
   1090 set(_items)
   1091 _add_if("HTTP"          NOT CURL_DISABLE_HTTP)
   1092 _add_if("HTTPS"         NOT CURL_DISABLE_HTTP AND SSL_ENABLED)
   1093 _add_if("FTP"           NOT CURL_DISABLE_FTP)
   1094 _add_if("FTPS"          NOT CURL_DISABLE_FTP AND SSL_ENABLED)
   1095 _add_if("FILE"          NOT CURL_DISABLE_FILE)
   1096 _add_if("TELNET"        NOT CURL_DISABLE_TELNET)
   1097 _add_if("LDAP"          NOT CURL_DISABLE_LDAP)
   1098 # CURL_DISABLE_LDAP implies CURL_DISABLE_LDAPS
   1099 # TODO check HAVE_LDAP_SSL (in autoconf this is enabled with --enable-ldaps)
   1100 _add_if("LDAPS"         NOT CURL_DISABLE_LDAPS AND
   1101                         ((USE_OPENLDAP AND SSL_ENABLED) OR
   1102                         (NOT USE_OPENLDAP AND HAVE_LDAP_SSL)))
   1103 _add_if("DICT"          NOT CURL_DISABLE_DICT)
   1104 _add_if("TFTP"          NOT CURL_DISABLE_TFTP)
   1105 _add_if("GOPHER"        NOT CURL_DISABLE_GOPHER)
   1106 _add_if("POP3"          NOT CURL_DISABLE_POP3)
   1107 _add_if("POP3S"         NOT CURL_DISABLE_POP3 AND SSL_ENABLED)
   1108 _add_if("IMAP"          NOT CURL_DISABLE_IMAP)
   1109 _add_if("IMAPS"         NOT CURL_DISABLE_IMAP AND SSL_ENABLED)
   1110 _add_if("SMTP"          NOT CURL_DISABLE_SMTP)
   1111 _add_if("SMTPS"         NOT CURL_DISABLE_SMTP AND SSL_ENABLED)
   1112 _add_if("SCP"           USE_LIBSSH2)
   1113 _add_if("SFTP"          USE_LIBSSH2)
   1114 _add_if("RTSP"          NOT CURL_DISABLE_RTSP)
   1115 _add_if("RTMP"          USE_LIBRTMP)
   1116 list(SORT _items)
   1117 string(REPLACE ";" " " SUPPORT_PROTOCOLS "${_items}")
   1118 message(STATUS "Enabled protocols: ${SUPPORT_PROTOCOLS}")
   1119 
   1120 # curl-config needs the following options to be set.
   1121 set(CC                      "${CMAKE_C_COMPILER}")
   1122 # TODO probably put a -D... options here?
   1123 set(CONFIGURE_OPTIONS       "")
   1124 # TODO when to set "-DCURL_STATICLIB" for CPPFLAG_CURL_STATICLIB?
   1125 set(CPPFLAG_CURL_STATICLIB  "")
   1126 # TODO need to set this (see CURL_CHECK_CA_BUNDLE in acinclude.m4)
   1127 set(CURL_CA_BUNDLE          "")
   1128 set(CURLVERSION             "${CURL_VERSION}")
   1129 set(ENABLE_SHARED           "yes")
   1130 if(CURL_STATICLIB)
   1131   # Broken: LIBCURL_LIBS below; .a lib is not built
   1132   message(WARNING "Static linking is broken!")
   1133   set(ENABLE_STATIC         "no")
   1134 else()
   1135   set(ENABLE_STATIC         "no")
   1136 endif()
   1137 set(exec_prefix             "\${prefix}")
   1138 set(includedir              "\${prefix}/include")
   1139 set(LDFLAGS                 "${CMAKE_SHARED_LINKER_FLAGS}")
   1140 set(LIBCURL_LIBS            "")
   1141 set(libdir                  "${CMAKE_INSTALL_PREFIX}/lib")
   1142 # TODO CURL_LIBS also contains absolute paths which don't work with static -l...
   1143 foreach(_lib ${CMAKE_C_IMPLICIT_LINK_LIBRARIES} ${CURL_LIBS})
   1144   set(LIBCURL_LIBS          "${LIBCURL_LIBS} -l${_lib}")
   1145 endforeach()
   1146 # "a" (Linux) or "lib" (Windows)
   1147 string(REPLACE "." "" libext "${CMAKE_STATIC_LIBRARY_SUFFIX}")
   1148 set(prefix                  "${CMAKE_INSTALL_PREFIX}")
   1149 # Set this to "yes" to append all libraries on which -lcurl is dependent
   1150 set(REQUIRE_LIB_DEPS        "no")
   1151 # SUPPORT_FEATURES
   1152 # SUPPORT_PROTOCOLS
   1153 set(VERSIONNUM              "${CURL_VERSION_NUM}")
   1154 
   1155 # Finally generate a "curl-config" matching this config
   1156 configure_file("${CURL_SOURCE_DIR}/curl-config.in"
   1157                "${CURL_BINARY_DIR}/curl-config" @ONLY)
   1158 install(FILES "${CURL_BINARY_DIR}/curl-config"
   1159         DESTINATION bin
   1160         PERMISSIONS
   1161           OWNER_READ OWNER_WRITE OWNER_EXECUTE
   1162           GROUP_READ GROUP_EXECUTE
   1163           WORLD_READ WORLD_EXECUTE)
   1164 
   1165 # Finally generate a pkg-config file matching this config
   1166 configure_file("${CURL_SOURCE_DIR}/libcurl.pc.in"
   1167                "${CURL_BINARY_DIR}/libcurl.pc" @ONLY)
   1168 install(FILES "${CURL_BINARY_DIR}/libcurl.pc"
   1169         DESTINATION lib/pkgconfig)
   1170 
   1171 # This needs to be run very last so other parts of the scripts can take advantage of this.
   1172 if(NOT CURL_CONFIG_HAS_BEEN_RUN_BEFORE)
   1173   set(CURL_CONFIG_HAS_BEEN_RUN_BEFORE 1 CACHE INTERNAL "Flag to track whether this is the first time running CMake or if CMake has been configured before")
   1174 endif()
   1175 
   1176 # Installation.
   1177 # First, install generated curlbuild.h
   1178 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/include/curl/curlbuild.h"
   1179     DESTINATION include/curl )
   1180 # Next, install other headers excluding curlbuild.h
   1181 install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/curl"
   1182     DESTINATION include
   1183     FILES_MATCHING PATTERN "*.h"
   1184     PATTERN "curlbuild.h" EXCLUDE)
   1185 
   1186 
   1187 # Workaround for MSVS10 to avoid the Dialog Hell
   1188 # FIXME: This could be removed with future version of CMake.
   1189 if(MSVC_VERSION EQUAL 1600)
   1190   set(CURL_SLN_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/CURL.sln")
   1191   if(EXISTS "${CURL_SLN_FILENAME}")
   1192     file(APPEND "${CURL_SLN_FILENAME}" "\n# This should be regenerated!\n")
   1193   endif()
   1194 endif()
   1195