2018-10-11 03:15:24 -04:00
#***************************************************************************
2014-01-01 16:35:59 -05:00
# _ _ ____ _
# Project ___| | | | _ \| |
# / __| | | | |_) | |
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
2021-01-29 08:35:13 -05:00
# Copyright (C) 1998 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al.
2014-01-01 16:35:59 -05:00
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
2020-11-04 08:02:01 -05:00
# are also available at https://curl.se/docs/copyright.html.
2014-01-01 16:35:59 -05:00
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
###########################################################################
2016-10-18 07:59:54 -04:00
# curl/libcurl CMake script
2009-04-09 15:59:38 -04:00
# by Tetetest and Sukender (Benoit Neil)
2009-04-02 09:14:53 -04:00
# TODO:
2009-04-07 17:00:50 -04:00
# The output .so file lacks the soname number which we currently have within the lib/Makefile.am file
2009-04-06 16:44:01 -04:00
# Add full (4 or 5 libs) SSL support
2009-04-07 18:49:02 -04:00
# 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).
2009-04-06 16:44:01 -04:00
# Check on all possible platforms
# Test with as many configurations possible (With or without any option)
2009-04-07 17:00:50 -04:00
# Create scripts that help keeping the CMake build system up to date (to reduce maintenance). According to Tetetest:
2009-04-08 19:20:04 -04:00
# - lists of headers that 'configure' checks for;
# - curl-specific tests (the ones that are in m4/curl-*.m4 files);
# - (most obvious thing:) curl version numbers.
2009-04-02 09:14:53 -04:00
# Add documentation subproject
2009-04-07 17:00:50 -04:00
#
# To check:
# (From Daniel Stenberg) The cmake build selected to run gcc with -fPIC on my box while the plain configure script did not.
# (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.
2020-05-09 20:12:12 -04:00
cmake_minimum_required ( VERSION 3.2...3.16 FATAL_ERROR )
2020-02-24 07:34:54 -05:00
2009-06-09 13:29:16 -04:00
set ( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}" )
include ( Utilities )
2014-08-06 08:46:01 -04:00
include ( Macros )
2016-08-08 02:37:29 -04:00
include ( CMakeDependentOption )
2017-08-17 09:55:38 -04:00
include ( CheckCCompilerFlag )
2009-04-08 19:20:04 -04:00
2018-07-17 02:36:59 -04:00
project ( CURL C )
2009-06-10 10:08:00 -04:00
2020-02-24 07:34:54 -05:00
file ( STRINGS ${ CURL_SOURCE_DIR } /include/curl/curlver.h CURL_VERSION_H_CONTENTS REGEX "#define LIBCURL_VERSION( |_NUM )" )
2018-07-17 02:36:59 -04:00
string ( REGEX MATCH "#define LIBCURL_VERSION \" [^\ "]*"
2014-10-14 05:38:16 -04:00
C U R L _ V E R S I O N $ { C U R L _ V E R S I O N _ H _ C O N T E N T S } )
2018-07-17 02:36:59 -04:00
string ( REGEX REPLACE "[^\" ]+\ "" "" CURL_VERSION ${ CURL_VERSION } )
string ( REGEX MATCH "#define LIBCURL_VERSION_NUM 0x[0-9a-fA-F]+"
2014-10-14 05:38:16 -04:00
C U R L _ V E R S I O N _ N U M $ { C U R L _ V E R S I O N _ H _ C O N T E N T S } )
2018-07-17 02:36:59 -04:00
string ( REGEX REPLACE "[^0]+0x" "" CURL_VERSION_NUM ${ CURL_VERSION_NUM } )
2009-04-02 09:14:53 -04:00
# Setup package meta-data
# SET(PACKAGE "curl")
2009-06-10 10:08:00 -04:00
message ( STATUS "curl version=[${CURL_VERSION}]" )
2009-04-02 09:14:53 -04:00
# SET(PACKAGE_TARNAME "curl")
# SET(PACKAGE_NAME "curl")
# SET(PACKAGE_VERSION "-")
# SET(PACKAGE_STRING "curl-")
2020-11-04 08:02:01 -05:00
# SET(PACKAGE_BUGREPORT "a suitable curl mailing list => https://curl.se/mail/")
2009-06-09 13:29:16 -04:00
set ( OPERATING_SYSTEM "${CMAKE_SYSTEM_NAME}" )
set ( OS "\" ${ CMAKE_SYSTEM_NAME } \"")
2009-04-02 09:14:53 -04:00
2018-07-17 02:36:59 -04:00
include_directories ( ${ CURL_SOURCE_DIR } /include )
2009-04-02 09:14:53 -04:00
2017-07-06 06:12:31 -04:00
option ( CURL_WERROR "Turn compiler warnings into errors" OFF )
2017-08-17 09:55:38 -04:00
option ( PICKY_COMPILER "Enable picky compiler options" ON )
2016-10-18 07:59:54 -04:00
option ( BUILD_CURL_EXE "Set to ON to build curl executable." ON )
2018-07-10 05:54:34 -04:00
option ( BUILD_SHARED_LIBS "Build shared libraries" ON )
2014-11-05 19:32:45 -05:00
option ( ENABLE_ARES "Set to ON to enable c-ares support" OFF )
2016-08-08 02:37:29 -04:00
if ( WIN32 )
2017-07-01 19:02:12 -04:00
option ( CURL_STATIC_CRT "Set to ON to build libcurl with static CRT on Windows (/MT)." OFF )
option ( ENABLE_INET_PTON "Set to OFF to prevent usage of inet_pton when building against modern SDKs while still requiring compatibility with older Windows versions, such as Windows XP, Windows Server 2003 etc." ON )
2020-08-22 04:04:29 -04:00
option ( ENABLE_UNICODE "Set to ON to use the Unicode version of the Windows API functions" OFF )
2020-01-14 14:28:20 -05:00
set ( CURL_TARGET_WINDOWS_VERSION "" CACHE STRING "Minimum target Windows version as hex string" )
if ( CURL_TARGET_WINDOWS_VERSION )
add_definitions ( -D_WIN32_WINNT= ${ CURL_TARGET_WINDOWS_VERSION } )
2020-07-08 08:14:53 -04:00
set ( CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_WIN32_WINNT=${CURL_TARGET_WINDOWS_VERSION}" )
2020-01-14 14:28:20 -05:00
elseif ( ENABLE_INET_PTON )
# _WIN32_WINNT_VISTA (0x0600)
add_definitions ( -D_WIN32_WINNT=0x0600 )
2020-07-08 08:14:53 -04:00
set ( CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_WIN32_WINNT=0x0600" )
2020-01-14 14:28:20 -05:00
else ( )
# _WIN32_WINNT_WINXP (0x0501)
add_definitions ( -D_WIN32_WINNT=0x0501 )
2020-07-08 08:14:53 -04:00
set ( CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_WIN32_WINNT=0x0501" )
2020-01-14 14:28:20 -05:00
endif ( )
2020-08-22 04:04:29 -04:00
if ( ENABLE_UNICODE )
add_definitions ( -DUNICODE -D_UNICODE )
if ( MINGW )
add_compile_options ( -municode )
endif ( )
endif ( )
2016-08-08 02:37:29 -04:00
endif ( )
2020-01-09 06:10:55 -05:00
option ( CURL_LTO "Turn on compiler Link Time Optimizations" OFF )
2017-08-01 13:40:29 -04:00
2018-07-17 02:36:59 -04:00
cmake_dependent_option ( ENABLE_THREADED_RESOLVER "Set to ON to enable threaded DNS lookup"
2017-08-01 13:40:29 -04:00
O N " N O T E N A B L E _ A R E S "
O F F )
2015-03-02 18:15:38 -05:00
option ( ENABLE_DEBUG "Set to ON to enable curl debug features" OFF )
option ( ENABLE_CURLDEBUG "Set to ON to build with TrackMemory feature enabled" OFF )
2017-08-17 09:55:38 -04:00
if ( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG )
2018-07-17 02:36:59 -04:00
if ( PICKY_COMPILER )
2020-07-22 16:51:11 -04:00
foreach ( _CCOPT -pedantic -Wall -W -Wpointer-arith -Wwrite-strings -Wunused -Wshadow -Winline -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wfloat-equal -Wsign-compare -Wundef -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement -Wstrict-aliasing=3 -Wcast-align -Wtype-limits -Wold-style-declaration -Wmissing-parameter-type -Wempty-body -Wclobbered -Wignored-qualifiers -Wconversion -Wvla -Wdouble-promotion )
2017-08-17 09:55:38 -04:00
# surprisingly, CHECK_C_COMPILER_FLAG needs a new variable to store each new
# test result in.
2020-02-24 07:34:54 -05:00
string ( MAKE_C_IDENTIFIER "OPT${_CCOPT}" _optvarname )
check_c_compiler_flag ( ${ _CCOPT } ${ _optvarname } )
if ( ${ _optvarname } )
2017-08-17 09:55:38 -04:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_CCOPT}" )
2020-07-22 16:51:11 -04:00
endif ( )
endforeach ( )
foreach ( _CCOPT long-long multichar format-nonliteral sign-conversion system-headers pedantic-ms-format )
# GCC only warns about unknown -Wno- options if there are also other diagnostic messages,
# so test for the positive form instead
string ( MAKE_C_IDENTIFIER "OPT${_CCOPT}" _optvarname )
check_c_compiler_flag ( "-W${_CCOPT}" ${ _optvarname } )
if ( ${ _optvarname } )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-${_CCOPT}" )
2017-08-17 09:55:38 -04:00
endif ( )
endforeach ( )
2018-07-05 06:55:47 -04:00
endif ( )
endif ( )
2017-08-17 09:55:38 -04:00
2018-07-17 02:36:59 -04:00
if ( ENABLE_DEBUG )
2015-03-02 18:15:38 -05:00
# DEBUGBUILD will be defined only for Debug builds
2019-04-07 06:05:23 -04:00
set_property ( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $< $<CONFIG:Debug > :DEBUGBUILD> )
2015-03-02 18:15:38 -05:00
set ( ENABLE_CURLDEBUG ON )
endif ( )
2018-07-17 02:36:59 -04:00
if ( ENABLE_CURLDEBUG )
2015-03-02 18:15:38 -05:00
set_property ( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS CURLDEBUG )
endif ( )
2017-07-06 11:53:41 -04:00
# For debug libs and exes, add "-d" postfix
2018-05-23 17:37:53 -04:00
if ( NOT DEFINED CMAKE_DEBUG_POSTFIX )
set ( CMAKE_DEBUG_POSTFIX "-d" )
endif ( )
2017-07-06 11:53:41 -04:00
2009-07-14 15:03:31 -04:00
# initialize CURL_LIBS
set ( CURL_LIBS "" )
2014-11-05 19:32:45 -05:00
if ( ENABLE_ARES )
set ( USE_ARES 1 )
2010-03-24 10:57:54 -04:00
find_package ( CARES REQUIRED )
2018-07-17 02:36:59 -04:00
list ( APPEND CURL_LIBS ${ CARES_LIBRARY } )
2009-07-14 15:03:31 -04:00
endif ( )
2009-04-08 07:42:45 -04:00
2016-09-04 06:37:46 -04:00
include ( CurlSymbolHiding )
2009-04-07 17:00:50 -04:00
2009-06-09 13:29:16 -04:00
option ( HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF )
mark_as_advanced ( HTTP_ONLY )
option ( CURL_DISABLE_FTP "disables FTP" OFF )
mark_as_advanced ( CURL_DISABLE_FTP )
2010-03-24 14:16:41 -04:00
option ( CURL_DISABLE_LDAP "disables LDAP" OFF )
2009-06-09 13:29:16 -04:00
mark_as_advanced ( CURL_DISABLE_LDAP )
option ( CURL_DISABLE_TELNET "disables Telnet" OFF )
mark_as_advanced ( CURL_DISABLE_TELNET )
option ( CURL_DISABLE_DICT "disables DICT" OFF )
mark_as_advanced ( CURL_DISABLE_DICT )
option ( CURL_DISABLE_FILE "disables FILE" OFF )
mark_as_advanced ( CURL_DISABLE_FILE )
option ( CURL_DISABLE_TFTP "disables TFTP" OFF )
mark_as_advanced ( CURL_DISABLE_TFTP )
option ( CURL_DISABLE_HTTP "disables HTTP" OFF )
mark_as_advanced ( CURL_DISABLE_HTTP )
option ( CURL_DISABLE_LDAPS "to disable LDAPS" OFF )
mark_as_advanced ( CURL_DISABLE_LDAPS )
2014-08-15 07:51:08 -04:00
option ( CURL_DISABLE_RTSP "to disable RTSP" OFF )
mark_as_advanced ( CURL_DISABLE_RTSP )
option ( CURL_DISABLE_PROXY "to disable proxy" OFF )
mark_as_advanced ( CURL_DISABLE_PROXY )
option ( CURL_DISABLE_POP3 "to disable POP3" OFF )
mark_as_advanced ( CURL_DISABLE_POP3 )
option ( CURL_DISABLE_IMAP "to disable IMAP" OFF )
mark_as_advanced ( CURL_DISABLE_IMAP )
option ( CURL_DISABLE_SMTP "to disable SMTP" OFF )
mark_as_advanced ( CURL_DISABLE_SMTP )
option ( CURL_DISABLE_GOPHER "to disable Gopher" OFF )
mark_as_advanced ( CURL_DISABLE_GOPHER )
2020-08-31 03:45:09 -04:00
option ( CURL_DISABLE_MQTT "to disable MQTT" OFF )
mark_as_advanced ( CURL_DISABLE_MQTT )
2014-08-15 07:51:08 -04:00
2009-06-09 13:29:16 -04:00
if ( HTTP_ONLY )
2020-09-07 05:08:35 -04:00
set ( CURL_DISABLE_DICT ON )
set ( CURL_DISABLE_FILE ON )
2009-06-09 13:29:16 -04:00
set ( CURL_DISABLE_FTP ON )
2020-09-07 05:08:35 -04:00
set ( CURL_DISABLE_GOPHER ON )
set ( CURL_DISABLE_IMAP ON )
2009-06-09 13:29:16 -04:00
set ( CURL_DISABLE_LDAP ON )
2012-03-30 12:59:47 -04:00
set ( CURL_DISABLE_LDAPS ON )
2020-09-07 05:08:35 -04:00
set ( CURL_DISABLE_MQTT ON )
2014-08-15 07:51:08 -04:00
set ( CURL_DISABLE_POP3 ON )
2020-09-07 05:08:35 -04:00
set ( CURL_DISABLE_RTSP ON )
2019-12-13 17:23:11 -05:00
set ( CURL_DISABLE_SMB ON )
2014-08-15 07:51:08 -04:00
set ( CURL_DISABLE_SMTP ON )
2020-09-07 05:08:35 -04:00
set ( CURL_DISABLE_TELNET ON )
set ( CURL_DISABLE_TFTP ON )
2009-06-09 13:29:16 -04:00
endif ( )
2020-10-25 18:08:54 -04:00
option ( CURL_DISABLE_ALTSVC "to disable alt-svc support" OFF )
mark_as_advanced ( CURL_DISABLE_ALTSVC )
2009-06-09 13:29:16 -04:00
option ( CURL_DISABLE_COOKIES "to disable cookies support" OFF )
mark_as_advanced ( CURL_DISABLE_COOKIES )
option ( CURL_DISABLE_CRYPTO_AUTH "to disable cryptographic authentication" OFF )
mark_as_advanced ( CURL_DISABLE_CRYPTO_AUTH )
option ( CURL_DISABLE_VERBOSE_STRINGS "to disable verbose strings" OFF )
mark_as_advanced ( CURL_DISABLE_VERBOSE_STRINGS )
2014-10-13 05:19:36 -04:00
option ( ENABLE_IPV6 "Define if you want to enable IPv6 support" ON )
2009-06-09 13:29:16 -04:00
mark_as_advanced ( ENABLE_IPV6 )
2015-09-03 08:20:32 -04:00
if ( ENABLE_IPV6 AND NOT WIN32 )
2014-10-13 05:19:36 -04:00
include ( CheckStructHasMember )
check_struct_has_member ( "struct sockaddr_in6" sin6_addr "netinet/in.h"
H A V E _ S O C K A D D R _ I N 6 _ S I N 6 _ A D D R )
check_struct_has_member ( "struct sockaddr_in6" sin6_scope_id "netinet/in.h"
H A V E _ S O C K A D D R _ I N 6 _ S I N 6 _ S C O P E _ I D )
if ( NOT HAVE_SOCKADDR_IN6_SIN6_ADDR )
message ( WARNING "struct sockaddr_in6 not available, disabling IPv6 support" )
# Force the feature off as this name is used as guard macro...
set ( ENABLE_IPV6 OFF
C A C H E B O O L " D e f i n e i f y o u w a n t t o e n a b l e I P v 6 s u p p o r t " F O R C E )
endif ( )
endif ( )
2009-06-09 13:29:16 -04:00
2020-08-15 05:02:44 -04:00
if ( USE_MANUAL )
#nroff is currently only used when USE_MANUAL is set, so we can prevent the warning of no *NROFF if USE_MANUAL is OFF (or not defined), by not even looking for NROFF..
curl_nroff_check ( )
endif ( )
2017-09-26 03:42:12 -04:00
find_package ( Perl )
2018-07-17 02:36:59 -04:00
cmake_dependent_option ( ENABLE_MANUAL "to provide the built-in manual"
2017-09-26 03:42:12 -04:00
O N " N R O F F _ U S E F U L ; P E R L _ F O U N D "
O F F )
2014-10-12 05:27:07 -04:00
if ( ENABLE_MANUAL )
2017-09-26 03:42:12 -04:00
set ( USE_MANUAL ON )
2014-10-12 05:27:07 -04:00
endif ( )
2009-04-02 09:14:53 -04:00
2017-07-01 19:02:12 -04:00
if ( CURL_STATIC_CRT )
2020-03-30 06:31:21 -04:00
set ( CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>" )
2017-07-01 19:02:12 -04:00
set ( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT" )
set ( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd" )
endif ( )
2009-04-02 09:14:53 -04:00
# Disable warnings on Borland to avoid changing 3rd party code.
2009-06-09 13:29:16 -04:00
if ( BORLAND )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-" )
2018-07-05 06:55:47 -04:00
endif ( )
2009-04-02 09:14:53 -04:00
# If we are on AIX, do the _ALL_SOURCE magic
2009-06-09 13:29:16 -04:00
if ( ${ CMAKE_SYSTEM_NAME } MATCHES AIX )
set ( _ALL_SOURCE 1 )
2018-07-05 06:55:47 -04:00
endif ( )
2009-04-02 09:14:53 -04:00
# Include all the necessary files for macros
2019-11-26 17:05:21 -05:00
include ( CMakePushCheckState )
2018-07-17 02:36:59 -04:00
include ( CheckFunctionExists )
include ( CheckIncludeFile )
include ( CheckIncludeFiles )
include ( CheckLibraryExists )
include ( CheckSymbolExists )
include ( CheckTypeSize )
include ( CheckCSourceCompiles )
2009-04-02 09:14:53 -04:00
# On windows preload settings
2009-06-09 13:29:16 -04:00
if ( WIN32 )
2017-01-09 15:39:25 -05:00
set ( CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_WINSOCKAPI_=" )
2009-06-09 13:29:16 -04:00
include ( ${ CMAKE_CURRENT_SOURCE_DIR } /CMake/Platforms/WindowsCache.cmake )
2018-07-05 06:55:47 -04:00
endif ( )
2009-04-02 09:14:53 -04:00
2014-11-05 19:32:45 -05:00
if ( ENABLE_THREADED_RESOLVER )
2017-08-01 13:40:29 -04:00
find_package ( Threads REQUIRED )
2016-08-08 02:37:29 -04:00
if ( WIN32 )
set ( USE_THREADS_WIN32 ON )
else ( )
2017-08-01 13:40:29 -04:00
set ( USE_THREADS_POSIX ${ CMAKE_USE_PTHREADS_INIT } )
set ( HAVE_PTHREAD_H ${ CMAKE_USE_PTHREADS_INIT } )
2014-11-05 19:32:45 -05:00
endif ( )
2017-08-01 13:40:29 -04:00
set ( CURL_LIBS ${ CURL_LIBS } ${ CMAKE_THREAD_LIBS_INIT } )
2014-11-05 19:32:45 -05:00
endif ( )
2009-04-02 09:14:53 -04:00
# Check for all needed libraries
2019-08-29 03:54:10 -04:00
check_library_exists_concat ( "${CMAKE_DL_LIBS}" dlopen HAVE_LIBDL )
2009-06-09 13:29:16 -04:00
check_library_exists_concat ( "socket" connect HAVE_LIBSOCKET )
check_library_exists ( "c" gethostbyname "" NOT_NEED_LIBNSL )
2009-04-02 09:14:53 -04:00
# Yellowtab Zeta needs different libraries than BeOS 5.
2009-06-09 13:29:16 -04:00
if ( BEOS )
set ( NOT_NEED_LIBNSL 1 )
check_library_exists_concat ( "bind" gethostbyname HAVE_LIBBIND )
check_library_exists_concat ( "bnetapi" closesocket HAVE_LIBBNETAPI )
2018-07-05 06:55:47 -04:00
endif ( )
2009-06-09 13:29:16 -04:00
if ( NOT NOT_NEED_LIBNSL )
check_library_exists_concat ( "nsl" gethostbyname HAVE_LIBNSL )
2018-07-05 06:55:47 -04:00
endif ( )
2009-06-09 13:29:16 -04:00
2014-11-05 19:32:43 -05:00
check_function_exists ( gethostname HAVE_GETHOSTNAME )
2012-03-30 12:59:47 -04:00
if ( WIN32 )
2014-08-08 04:23:26 -04:00
check_library_exists_concat ( "ws2_32" getch HAVE_LIBWS2_32 )
check_library_exists_concat ( "winmm" getch HAVE_LIBWINMM )
endif ( )
2017-01-25 19:35:54 -05:00
# check SSL libraries
2020-03-12 12:18:40 -04:00
# TODO support GnuTLS
2020-08-07 11:11:52 -04:00
if ( CMAKE_USE_WINSSL )
message ( FATAL_ERROR "The cmake option CMAKE_USE_WINSSL was renamed to CMAKE_USE_SCHANNEL." )
endif ( )
2014-08-21 07:15:59 -04:00
2017-01-25 19:05:07 -05:00
if ( APPLE )
2019-04-12 08:44:59 -04:00
option ( CMAKE_USE_SECTRANSP "enable Apple OS native SSL/TLS" OFF )
2017-01-25 19:05:07 -05:00
endif ( )
2016-01-27 07:22:39 -05:00
if ( WIN32 )
2020-08-07 11:11:52 -04:00
option ( CMAKE_USE_SCHANNEL "enable Windows native SSL/TLS" OFF )
2017-01-25 19:35:54 -05:00
cmake_dependent_option ( CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON
2020-08-07 11:11:52 -04:00
C M A K E _ U S E _ S C H A N N E L O F F )
2016-01-27 07:22:39 -05:00
endif ( )
2017-01-25 19:41:40 -05:00
option ( CMAKE_USE_MBEDTLS "Enable mbedTLS for SSL/TLS" OFF )
2019-11-07 23:17:18 -05:00
option ( CMAKE_USE_BEARSSL "Enable BearSSL for SSL/TLS" OFF )
2019-11-26 17:05:21 -05:00
option ( CMAKE_USE_NSS "Enable NSS for SSL/TLS" OFF )
2020-03-12 12:18:40 -04:00
option ( CMAKE_USE_WOLFSSL "enable wolfSSL for SSL/TLS" OFF )
2016-01-27 07:22:39 -05:00
2017-01-25 19:35:54 -05:00
set ( openssl_default ON )
2020-08-07 11:11:52 -04:00
if ( WIN32 OR CMAKE_USE_SECTRANSP OR CMAKE_USE_SCHANNEL OR CMAKE_USE_MBEDTLS OR CMAKE_USE_NSS OR CMAKE_USE_WOLFSSL )
2017-02-20 19:33:53 -05:00
set ( openssl_default OFF )
2017-01-25 19:35:54 -05:00
endif ( )
option ( CMAKE_USE_OPENSSL "Use OpenSSL code. Experimental" ${ openssl_default } )
2021-01-11 06:00:36 -05:00
option ( CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG "Disable automatic loading of OpenSSL configuration" OFF )
2017-01-25 19:35:54 -05:00
2018-07-05 06:21:57 -04:00
count_true ( enabled_ssl_options_count
2020-08-07 11:11:52 -04:00
C M A K E _ U S E _ S C H A N N E L
2019-04-12 08:44:59 -04:00
C M A K E _ U S E _ S E C T R A N S P
2017-02-20 19:33:53 -05:00
C M A K E _ U S E _ O P E N S S L
C M A K E _ U S E _ M B E D T L S
2019-11-07 23:17:18 -05:00
C M A K E _ U S E _ B E A R S S L
2019-11-26 17:05:21 -05:00
C M A K E _ U S E _ N S S
2020-03-12 12:18:40 -04:00
C M A K E _ U S E _ W O L F S S L
2017-02-20 19:33:53 -05:00
)
2018-07-05 06:21:57 -04:00
if ( enabled_ssl_options_count GREATER "1" )
2018-06-17 12:26:44 -04:00
set ( CURL_WITH_MULTI_SSL ON )
2017-02-20 19:33:53 -05:00
endif ( )
2020-08-07 11:11:52 -04:00
if ( CMAKE_USE_SCHANNEL )
2017-01-25 19:35:54 -05:00
set ( SSL_ENABLED ON )
set ( USE_SCHANNEL ON ) # Windows native SSL/TLS support
2020-08-07 11:11:52 -04:00
set ( USE_WINDOWS_SSPI ON ) # CMAKE_USE_SCHANNEL implies CURL_WINDOWS_SSPI
2017-01-25 19:35:54 -05:00
endif ( )
if ( CURL_WINDOWS_SSPI )
set ( USE_WINDOWS_SSPI ON )
set ( CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DSECURITY_WIN32" )
endif ( )
2017-02-20 19:33:53 -05:00
if ( CMAKE_USE_DARWINSSL )
2019-04-12 08:44:59 -04:00
message ( FATAL_ERROR "The cmake option CMAKE_USE_DARWINSSL was renamed to CMAKE_USE_SECTRANSP." )
endif ( )
if ( CMAKE_USE_SECTRANSP )
2017-01-25 19:35:54 -05:00
find_library ( COREFOUNDATION_FRAMEWORK "CoreFoundation" )
if ( NOT COREFOUNDATION_FRAMEWORK )
message ( FATAL_ERROR "CoreFoundation framework not found" )
endif ( )
find_library ( SECURITY_FRAMEWORK "Security" )
if ( NOT SECURITY_FRAMEWORK )
message ( FATAL_ERROR "Security framework not found" )
2014-08-21 07:15:59 -04:00
endif ( )
2017-01-25 19:35:54 -05:00
set ( SSL_ENABLED ON )
2019-04-12 08:44:59 -04:00
set ( USE_SECTRANSP ON )
2017-01-25 19:35:54 -05:00
list ( APPEND CURL_LIBS "${COREFOUNDATION_FRAMEWORK}" "${SECURITY_FRAMEWORK}" )
endif ( )
2017-02-20 19:33:53 -05:00
if ( CMAKE_USE_OPENSSL )
2017-01-25 19:35:54 -05:00
find_package ( OpenSSL REQUIRED )
set ( SSL_ENABLED ON )
set ( USE_OPENSSL ON )
2018-09-21 11:59:33 -04:00
# Depend on OpenSSL via imported targets if supported by the running
# version of CMake. This allows our dependents to get our dependencies
# transitively.
if ( NOT CMAKE_VERSION VERSION_LESS 3.4 )
list ( APPEND CURL_LIBS OpenSSL::SSL OpenSSL::Crypto )
else ( )
list ( APPEND CURL_LIBS ${ OPENSSL_LIBRARIES } )
include_directories ( ${ OPENSSL_INCLUDE_DIR } )
endif ( )
2018-07-17 04:13:18 -04:00
2017-01-25 19:35:54 -05:00
set ( CMAKE_REQUIRED_INCLUDES ${ OPENSSL_INCLUDE_DIR } )
check_include_file ( "openssl/crypto.h" HAVE_OPENSSL_CRYPTO_H )
check_include_file ( "openssl/err.h" HAVE_OPENSSL_ERR_H )
check_include_file ( "openssl/pem.h" HAVE_OPENSSL_PEM_H )
check_include_file ( "openssl/rsa.h" HAVE_OPENSSL_RSA_H )
check_include_file ( "openssl/ssl.h" HAVE_OPENSSL_SSL_H )
check_include_file ( "openssl/x509.h" HAVE_OPENSSL_X509_H )
check_include_file ( "openssl/rand.h" HAVE_OPENSSL_RAND_H )
check_symbol_exists ( RAND_status "${CURL_INCLUDES}" HAVE_RAND_STATUS )
check_symbol_exists ( RAND_screen "${CURL_INCLUDES}" HAVE_RAND_SCREEN )
check_symbol_exists ( RAND_egd "${CURL_INCLUDES}" HAVE_RAND_EGD )
2014-08-21 07:15:59 -04:00
endif ( )
2017-02-20 19:33:53 -05:00
if ( CMAKE_USE_MBEDTLS )
2017-01-25 19:41:40 -05:00
find_package ( MbedTLS REQUIRED )
set ( SSL_ENABLED ON )
set ( USE_MBEDTLS ON )
list ( APPEND CURL_LIBS ${ MBEDTLS_LIBRARIES } )
2017-06-04 19:02:56 -04:00
include_directories ( ${ MBEDTLS_INCLUDE_DIRS } )
2017-01-25 19:41:40 -05:00
endif ( )
2019-11-07 23:17:18 -05:00
if ( CMAKE_USE_BEARSSL )
find_package ( BearSSL REQUIRED )
set ( SSL_ENABLED ON )
set ( USE_BEARSSL ON )
list ( APPEND CURL_LIBS ${ BEARSSL_LIBRARY } )
include_directories ( ${ BEARSSL_INCLUDE_DIRS } )
endif ( )
2020-03-12 12:18:40 -04:00
if ( CMAKE_USE_WOLFSSL )
find_package ( WolfSSL REQUIRED )
set ( SSL_ENABLED ON )
set ( USE_WOLFSSL ON )
list ( APPEND CURL_LIBS ${ WolfSSL_LIBRARIES } )
include_directories ( ${ WolfSSL_INCLUDE_DIRS } )
endif ( )
2019-11-26 17:05:21 -05:00
if ( CMAKE_USE_NSS )
find_package ( NSS REQUIRED )
include_directories ( ${ NSS_INCLUDE_DIRS } )
list ( APPEND CURL_LIBS ${ NSS_LIBRARIES } )
set ( SSL_ENABLED ON )
set ( USE_NSS ON )
cmake_push_check_state ( )
set ( CMAKE_REQUIRED_INCLUDES ${ NSS_INCLUDE_DIRS } )
set ( CMAKE_REQUIRED_LIBRARIES ${ NSS_LIBRARIES } )
check_symbol_exists ( PK11_CreateManagedGenericObject "pk11pub.h" HAVE_PK11_CREATEMANAGEDGENERICOBJECT )
cmake_pop_check_state ( )
endif ( )
2016-07-21 05:28:54 -04:00
option ( USE_NGHTTP2 "Use Nghttp2 library" OFF )
if ( USE_NGHTTP2 )
find_package ( NGHTTP2 REQUIRED )
include_directories ( ${ NGHTTP2_INCLUDE_DIRS } )
list ( APPEND CURL_LIBS ${ NGHTTP2_LIBRARIES } )
endif ( )
2020-05-08 17:13:46 -04:00
function ( CheckQuicSupportInOpenSSL )
# Be sure that the OpenSSL library actually supports QUIC.
cmake_push_check_state ( )
set ( CMAKE_REQUIRED_INCLUDES "${OPENSSL_INCLUDE_DIR}" )
set ( CMAKE_REQUIRED_LIBRARIES "${OPENSSL_LIBRARIES}" )
check_symbol_exists ( SSL_CTX_set_quic_method "openssl/ssl.h" HAVE_SSL_CTX_SET_QUIC_METHOD )
if ( NOT HAVE_SSL_CTX_SET_QUIC_METHOD )
message ( FATAL_ERROR "QUIC support is missing in OpenSSL/boringssl. Try setting -DOPENSSL_ROOT_DIR" )
endif ( )
cmake_pop_check_state ( )
endfunction ( )
option ( USE_NGTCP2 "Use ngtcp2 and nghttp3 libraries for HTTP/3 support" OFF )
if ( USE_NGTCP2 )
if ( USE_OPENSSL )
find_package ( NGTCP2 REQUIRED OpenSSL )
CheckQuicSupportInOpenSSL ( )
elseif ( USE_GNUTLS )
# TODO add GnuTLS support as vtls library.
find_package ( NGTCP2 REQUIRED GnuTLS )
else ( )
message ( FATAL_ERROR "ngtcp2 requires OpenSSL or GnuTLS" )
endif ( )
set ( USE_NGTCP2 ON )
include_directories ( ${ NGTCP2_INCLUDE_DIRS } )
list ( APPEND CURL_LIBS ${ NGTCP2_LIBRARIES } )
find_package ( NGHTTP3 REQUIRED )
set ( USE_NGHTTP3 ON )
include_directories ( ${ NGHTTP3_INCLUDE_DIRS } )
list ( APPEND CURL_LIBS ${ NGHTTP3_LIBRARIES } )
endif ( )
option ( USE_QUICHE "Use quiche library for HTTP/3 support" OFF )
if ( USE_QUICHE )
if ( USE_NGTCP2 )
message ( FATAL_ERROR "Only one HTTP/3 backend can be selected!" )
endif ( )
find_package ( QUICHE REQUIRED )
CheckQuicSupportInOpenSSL ( )
set ( USE_QUICHE ON )
include_directories ( ${ QUICHE_INCLUDE_DIRS } )
list ( APPEND CURL_LIBS ${ QUICHE_LIBRARIES } )
cmake_push_check_state ( )
set ( CMAKE_REQUIRED_INCLUDES "${QUICHE_INCLUDE_DIRS}" )
set ( CMAKE_REQUIRED_LIBRARIES "${QUICHE_LIBRARIES}" )
check_symbol_exists ( quiche_conn_set_qlog_fd "quiche.h" HAVE_QUICHE_CONN_SET_QLOG_FD )
cmake_pop_check_state ( )
endif ( )
2014-08-08 04:23:26 -04:00
if ( NOT CURL_DISABLE_LDAP )
if ( WIN32 )
2015-01-18 15:25:37 -05:00
option ( USE_WIN32_LDAP "Use Windows LDAP implementation" ON )
if ( USE_WIN32_LDAP )
2016-06-14 10:11:48 -04:00
check_library_exists_concat ( "wldap32" cldap_open HAVE_WLDAP32 )
2014-08-08 04:23:26 -04:00
if ( NOT HAVE_WLDAP32 )
2015-01-18 15:25:37 -05:00
set ( USE_WIN32_LDAP OFF )
2014-08-08 04:23:26 -04:00
endif ( )
endif ( )
endif ( )
option ( CMAKE_USE_OPENLDAP "Use OpenLDAP code." OFF )
mark_as_advanced ( CMAKE_USE_OPENLDAP )
set ( CMAKE_LDAP_LIB "ldap" CACHE STRING "Name or full path to ldap library" )
set ( CMAKE_LBER_LIB "lber" CACHE STRING "Name or full path to lber library" )
2015-01-18 15:25:37 -05:00
if ( CMAKE_USE_OPENLDAP AND USE_WIN32_LDAP )
message ( FATAL_ERROR "Cannot use USE_WIN32_LDAP and CMAKE_USE_OPENLDAP at the same time" )
2014-08-08 04:23:26 -04:00
endif ( )
2016-06-14 10:11:48 -04:00
2014-08-08 04:23:26 -04:00
# Now that we know, we're not using windows LDAP...
2016-06-14 10:11:48 -04:00
if ( USE_WIN32_LDAP )
check_include_file_concat ( "winldap.h" HAVE_WINLDAP_H )
check_include_file_concat ( "winber.h" HAVE_WINBER_H )
else ( )
2014-08-08 04:23:26 -04:00
# Check for LDAP
2014-08-21 07:15:59 -04:00
set ( CMAKE_REQUIRED_LIBRARIES ${ OPENSSL_LIBRARIES } )
2014-08-08 04:23:26 -04:00
check_library_exists_concat ( ${ CMAKE_LDAP_LIB } ldap_init HAVE_LIBLDAP )
check_library_exists_concat ( ${ CMAKE_LBER_LIB } ber_init HAVE_LIBLBER )
2016-06-14 10:11:48 -04:00
set ( CMAKE_REQUIRED_INCLUDES_BAK ${ CMAKE_REQUIRED_INCLUDES } )
set ( CMAKE_LDAP_INCLUDE_DIR "" CACHE STRING "Path to LDAP include directory" )
if ( CMAKE_LDAP_INCLUDE_DIR )
list ( APPEND CMAKE_REQUIRED_INCLUDES ${ CMAKE_LDAP_INCLUDE_DIR } )
2014-08-08 04:23:26 -04:00
endif ( )
2016-06-14 10:11:48 -04:00
check_include_file_concat ( "ldap.h" HAVE_LDAP_H )
check_include_file_concat ( "lber.h" HAVE_LBER_H )
if ( NOT HAVE_LDAP_H )
message ( STATUS "LDAP_H not found CURL_DISABLE_LDAP set ON" )
set ( CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE )
set ( CMAKE_REQUIRED_INCLUDES ${ CMAKE_REQUIRED_INCLUDES_BAK } ) #LDAP includes won't be used
elseif ( NOT HAVE_LIBLDAP )
message ( STATUS "LDAP library '${CMAKE_LDAP_LIB}' not found CURL_DISABLE_LDAP set ON" )
set ( CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE )
set ( CMAKE_REQUIRED_INCLUDES ${ CMAKE_REQUIRED_INCLUDES_BAK } ) #LDAP includes won't be used
2014-08-08 04:23:26 -04:00
else ( )
2016-06-14 10:11:48 -04:00
if ( CMAKE_USE_OPENLDAP )
set ( USE_OPENLDAP ON )
endif ( )
if ( CMAKE_LDAP_INCLUDE_DIR )
include_directories ( ${ CMAKE_LDAP_INCLUDE_DIR } )
endif ( )
set ( NEED_LBER_H ON )
set ( _HEADER_LIST )
if ( HAVE_WINDOWS_H )
list ( APPEND _HEADER_LIST "windows.h" )
endif ( )
if ( HAVE_SYS_TYPES_H )
list ( APPEND _HEADER_LIST "sys/types.h" )
endif ( )
list ( APPEND _HEADER_LIST "ldap.h" )
set ( _SRC_STRING "" )
foreach ( _HEADER ${ _HEADER_LIST } )
set ( _INCLUDE_STRING "${_INCLUDE_STRING}#include <${_HEADER}>\n" )
endforeach ( )
set ( _SRC_STRING
"
$ { _ I N C L U D E _ S T R I N G }
i n t main ( int argc, char ** argv )
{
B e r V a l u e * b v p = N U L L ;
B e r E l e m e n t * b e p = ber_init ( bvp ) ;
ber_free ( bep, 1 ) ;
r e t u r n 0 ;
} "
)
set ( CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DLDAP_DEPRECATED=1" )
list ( APPEND CMAKE_REQUIRED_LIBRARIES ${ CMAKE_LDAP_LIB } )
if ( HAVE_LIBLBER )
list ( APPEND CMAKE_REQUIRED_LIBRARIES ${ CMAKE_LBER_LIB } )
endif ( )
check_c_source_compiles ( "${_SRC_STRING}" NOT_NEED_LBER_H )
2019-04-07 06:38:09 -04:00
unset ( CMAKE_REQUIRED_LIBRARIES )
2016-06-14 10:11:48 -04:00
if ( NOT_NEED_LBER_H )
set ( NEED_LBER_H OFF )
else ( )
set ( CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -DNEED_LBER_H" )
endif ( )
2014-08-08 04:23:26 -04:00
endif ( )
2012-03-30 12:59:47 -04:00
endif ( )
endif ( )
2014-08-08 04:23:26 -04:00
# No ldap, no ldaps.
if ( CURL_DISABLE_LDAP )
if ( NOT CURL_DISABLE_LDAPS )
message ( STATUS "LDAP needs to be enabled to support LDAPS" )
set ( CURL_DISABLE_LDAPS ON CACHE BOOL "" FORCE )
endif ( )
endif ( )
2012-03-30 12:59:47 -04:00
2014-08-08 04:23:26 -04:00
if ( NOT CURL_DISABLE_LDAPS )
check_include_file_concat ( "ldap_ssl.h" HAVE_LDAP_SSL_H )
check_include_file_concat ( "ldapssl.h" HAVE_LDAPSSL_H )
endif ( )
2009-04-02 09:14:53 -04:00
# Check for idn
2020-12-22 15:31:03 -05:00
option ( USE_LIBIDN2 "Use libidn2 for IDN support" ON )
set ( HAVE_LIBIDN2 OFF )
if ( USE_LIBIDN2 )
check_library_exists_concat ( "idn2" idn2_lookup_ul HAVE_LIBIDN2 )
endif ( )
2009-04-02 09:14:53 -04:00
2021-03-29 00:58:17 -04:00
if ( WIN32 )
option ( USE_WIN32_IDN "Use WinIDN for IDN support" OFF )
if ( USE_WIN32_IDN )
list ( APPEND CURL_LIBS "Normaliz" )
set ( WANT_IDN_PROTOTYPES ON )
endif ( )
endif ( )
2009-04-02 09:14:53 -04:00
# Check for symbol dlopen (same as HAVE_LIBDL)
2009-06-09 13:29:16 -04:00
check_library_exists ( "${CURL_LIBS}" dlopen "" HAVE_DLOPEN )
2009-04-02 09:14:53 -04:00
2009-06-09 13:29:16 -04:00
set ( HAVE_LIBZ OFF )
set ( HAVE_ZLIB_H OFF )
2018-10-27 06:23:19 -04:00
set ( USE_ZLIB OFF )
2020-11-19 02:54:09 -05:00
optional_dependency ( ZLIB )
if ( ZLIB_FOUND )
set ( HAVE_ZLIB_H ON )
set ( HAVE_LIBZ ON )
set ( USE_ZLIB ON )
# Depend on ZLIB via imported targets if supported by the running
# version of CMake. This allows our dependents to get our dependencies
# transitively.
if ( NOT CMAKE_VERSION VERSION_LESS 3.4 )
list ( APPEND CURL_LIBS ZLIB::ZLIB )
else ( )
list ( APPEND CURL_LIBS ${ ZLIB_LIBRARIES } )
include_directories ( ${ ZLIB_INCLUDE_DIRS } )
2009-06-09 13:29:16 -04:00
endif ( )
2020-11-19 02:54:09 -05:00
list ( APPEND CMAKE_REQUIRED_INCLUDES ${ ZLIB_INCLUDE_DIRS } )
2009-06-09 13:29:16 -04:00
endif ( )
2009-04-02 09:14:53 -04:00
2018-03-16 15:49:13 -04:00
option ( CURL_BROTLI "Set to ON to enable building curl with brotli support." OFF )
set ( HAVE_BROTLI OFF )
if ( CURL_BROTLI )
2019-07-17 02:01:45 -04:00
find_package ( Brotli QUIET )
2018-03-16 15:49:13 -04:00
if ( BROTLI_FOUND )
set ( HAVE_BROTLI ON )
list ( APPEND CURL_LIBS ${ BROTLI_LIBRARIES } )
include_directories ( ${ BROTLI_INCLUDE_DIRS } )
list ( APPEND CMAKE_REQUIRED_INCLUDES ${ BROTLI_INCLUDE_DIRS } )
endif ( )
endif ( )
2020-05-25 11:49:46 -04:00
option ( CURL_ZSTD "Set to ON to enable building curl with zstd support." OFF )
set ( HAVE_ZSTD OFF )
if ( CURL_ZSTD )
find_package ( Zstd REQUIRED )
cmake_push_check_state ( )
set ( CMAKE_REQUIRED_INCLUDES ${ Zstd_INCLUDE_DIRS } )
set ( CMAKE_REQUIRED_LIBRARIES ${ Zstd_LIBRARIES } )
check_symbol_exists ( ZSTD_createDStream "zstd.h" HAVE_ZSTD_CREATEDSTREAM )
cmake_pop_check_state ( )
if ( Zstd_FOUND AND HAVE_ZSTD_CREATEDSTREAM )
set ( HAVE_ZSTD ON )
list ( APPEND CURL_LIBS ${ Zstd_LIBRARIES } )
include_directories ( ${ Zstd_INCLUDE_DIRS } )
endif ( )
endif ( )
2014-08-06 08:50:40 -04:00
#libSSH2
option ( CMAKE_USE_LIBSSH2 "Use libSSH2" ON )
mark_as_advanced ( CMAKE_USE_LIBSSH2 )
set ( USE_LIBSSH2 OFF )
set ( HAVE_LIBSSH2 OFF )
2014-08-08 04:23:26 -04:00
set ( HAVE_LIBSSH2_H OFF )
2014-08-06 08:50:40 -04:00
if ( CMAKE_USE_LIBSSH2 )
find_package ( LibSSH2 )
if ( LIBSSH2_FOUND )
list ( APPEND CURL_LIBS ${ LIBSSH2_LIBRARY } )
set ( CMAKE_REQUIRED_LIBRARIES ${ LIBSSH2_LIBRARY } )
2015-09-16 11:33:23 -04:00
list ( APPEND CMAKE_REQUIRED_INCLUDES "${LIBSSH2_INCLUDE_DIR}" )
2014-08-22 11:02:59 -04:00
include_directories ( "${LIBSSH2_INCLUDE_DIR}" )
2014-08-06 08:50:40 -04:00
set ( HAVE_LIBSSH2 ON )
set ( USE_LIBSSH2 ON )
# find_package has already found the headers
2014-08-08 04:23:26 -04:00
set ( HAVE_LIBSSH2_H ON )
2014-08-06 08:50:40 -04:00
set ( CURL_INCLUDES ${ CURL_INCLUDES } "${LIBSSH2_INCLUDE_DIR}/libssh2.h" )
set ( CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -DHAVE_LIBSSH2_H" )
# now check for specific libssh2 symbols as they were added in different versions
set ( CMAKE_EXTRA_INCLUDE_FILES "libssh2.h" )
check_function_exists ( libssh2_version HAVE_LIBSSH2_VERSION )
check_function_exists ( libssh2_init HAVE_LIBSSH2_INIT )
check_function_exists ( libssh2_exit HAVE_LIBSSH2_EXIT )
check_function_exists ( libssh2_scp_send64 HAVE_LIBSSH2_SCP_SEND64 )
check_function_exists ( libssh2_session_handshake HAVE_LIBSSH2_SESSION_HANDSHAKE )
set ( CMAKE_EXTRA_INCLUDE_FILES "" )
2019-04-07 06:38:09 -04:00
unset ( CMAKE_REQUIRED_LIBRARIES )
2018-07-05 06:55:47 -04:00
endif ( )
endif ( )
2014-08-06 08:50:40 -04:00
2020-05-10 10:23:30 -04:00
# libssh
option ( CMAKE_USE_LIBSSH "Use libSSH" OFF )
mark_as_advanced ( CMAKE_USE_LIBSSH )
if ( NOT HAVE_LIBSSH2 AND CMAKE_USE_LIBSSH )
find_package ( libssh CONFIG )
if ( libssh_FOUND )
message ( STATUS "Found libssh ${libssh_VERSION}" )
# Use imported target for include and library paths.
list ( APPEND CURL_LIBS ssh )
set ( USE_LIBSSH ON )
set ( HAVE_LIBSSH_LIBSSH_H 1 )
endif ( )
endif ( )
2014-09-25 09:03:00 -04:00
option ( CMAKE_USE_GSSAPI "Use GSSAPI implementation (right now only Heimdal is supported with CMake build)" OFF )
mark_as_advanced ( CMAKE_USE_GSSAPI )
if ( CMAKE_USE_GSSAPI )
find_package ( GSS )
2015-08-10 07:09:58 -04:00
set ( HAVE_GSSAPI ${ GSS_FOUND } )
2014-09-25 09:03:00 -04:00
if ( GSS_FOUND )
message ( STATUS "Found ${GSS_FLAVOUR} GSSAPI version: \" ${ GSS_VERSION } \"")
2018-11-27 10:12:35 -05:00
list ( APPEND CMAKE_REQUIRED_INCLUDES ${ GSS_INCLUDE_DIR } )
2014-09-25 09:03:00 -04:00
check_include_file_concat ( "gssapi/gssapi.h" HAVE_GSSAPI_GSSAPI_H )
check_include_file_concat ( "gssapi/gssapi_generic.h" HAVE_GSSAPI_GSSAPI_GENERIC_H )
check_include_file_concat ( "gssapi/gssapi_krb5.h" HAVE_GSSAPI_GSSAPI_KRB5_H )
if ( GSS_FLAVOUR STREQUAL "Heimdal" )
set ( HAVE_GSSHEIMDAL ON )
else ( ) # MIT
set ( HAVE_GSSMIT ON )
set ( _INCLUDE_LIST "" )
if ( HAVE_GSSAPI_GSSAPI_H )
list ( APPEND _INCLUDE_LIST "gssapi/gssapi.h" )
endif ( )
if ( HAVE_GSSAPI_GSSAPI_GENERIC_H )
list ( APPEND _INCLUDE_LIST "gssapi/gssapi_generic.h" )
endif ( )
if ( HAVE_GSSAPI_GSSAPI_KRB5_H )
list ( APPEND _INCLUDE_LIST "gssapi/gssapi_krb5.h" )
endif ( )
string ( REPLACE ";" " " _COMPILER_FLAGS_STR "${GSS_COMPILER_FLAGS}" )
string ( REPLACE ";" " " _LINKER_FLAGS_STR "${GSS_LINKER_FLAGS}" )
foreach ( _dir ${ GSS_LINK_DIRECTORIES } )
set ( _LINKER_FLAGS_STR "${_LINKER_FLAGS_STR} -L\" ${ _dir } \"")
endforeach ( )
set ( CMAKE_REQUIRED_FLAGS "${_COMPILER_FLAGS_STR} ${_LINKER_FLAGS_STR}" )
set ( CMAKE_REQUIRED_LIBRARIES ${ GSS_LIBRARIES } )
check_symbol_exists ( "GSS_C_NT_HOSTBASED_SERVICE" ${ _INCLUDE_LIST } HAVE_GSS_C_NT_HOSTBASED_SERVICE )
if ( NOT HAVE_GSS_C_NT_HOSTBASED_SERVICE )
set ( HAVE_OLD_GSSMIT ON )
endif ( )
2019-04-07 06:38:09 -04:00
unset ( CMAKE_REQUIRED_LIBRARIES )
2014-09-25 09:03:00 -04:00
endif ( )
2018-11-27 10:12:35 -05:00
include_directories ( ${ GSS_INCLUDE_DIR } )
2014-09-25 09:03:00 -04:00
link_directories ( ${ GSS_LINK_DIRECTORIES } )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GSS_COMPILER_FLAGS}" )
set ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GSS_LINKER_FLAGS}" )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GSS_LINKER_FLAGS}" )
2020-11-10 04:45:31 -05:00
set ( CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} ${GSS_LINKER_FLAGS}" )
2014-09-25 09:03:00 -04:00
list ( APPEND CURL_LIBS ${ GSS_LIBRARIES } )
else ( )
message ( WARNING "GSSAPI support has been requested but no supporting libraries found. Skipping." )
endif ( )
endif ( )
2014-08-21 07:37:07 -04:00
2014-12-26 15:45:21 -05:00
option ( ENABLE_UNIX_SOCKETS "Define if you want Unix domain sockets support" ON )
2014-11-27 17:59:25 -05:00
if ( ENABLE_UNIX_SOCKETS )
include ( CheckStructHasMember )
check_struct_has_member ( "struct sockaddr_un" sun_path "sys/un.h" USE_UNIX_SOCKETS )
else ( )
unset ( USE_UNIX_SOCKETS CACHE )
endif ( )
2020-05-08 18:16:39 -04:00
2017-05-01 16:15:15 -04:00
#
# CA handling
#
set ( CURL_CA_BUNDLE "auto" CACHE STRING
" P a t h t o t h e C A b u n d l e . S e t ' n o n e ' t o d i s a b l e o r ' a u t o ' f o r a u t o - d e t e c t i o n . D e f a u l t s t o ' a u t o ' . " )
set ( CURL_CA_FALLBACK OFF CACHE BOOL
" S e t O N t o u s e b u i l t - i n C A s t o r e o f T L S b a c k e n d . D e f a u l t s t o O F F " )
set ( CURL_CA_PATH "auto" CACHE STRING
" L o c a t i o n o f d e f a u l t C A p a t h . S e t ' n o n e ' t o d i s a b l e o r ' a u t o ' f o r a u t o - d e t e c t i o n . D e f a u l t s t o ' a u t o ' . " )
2017-05-01 18:12:55 -04:00
if ( "${CURL_CA_BUNDLE}" STREQUAL "" )
2018-07-17 02:36:59 -04:00
message ( FATAL_ERROR "Invalid value of CURL_CA_BUNDLE. Use 'none', 'auto' or file path." )
2017-05-01 18:12:55 -04:00
elseif ( "${CURL_CA_BUNDLE}" STREQUAL "none" )
2018-07-17 02:36:59 -04:00
unset ( CURL_CA_BUNDLE CACHE )
2017-05-01 16:15:15 -04:00
elseif ( "${CURL_CA_BUNDLE}" STREQUAL "auto" )
2018-07-17 02:36:59 -04:00
unset ( CURL_CA_BUNDLE CACHE )
set ( CURL_CA_BUNDLE_AUTODETECT TRUE )
2017-05-01 18:12:55 -04:00
else ( )
2018-07-17 02:36:59 -04:00
set ( CURL_CA_BUNDLE_SET TRUE )
2017-05-01 16:15:15 -04:00
endif ( )
2017-05-01 18:12:55 -04:00
if ( "${CURL_CA_PATH}" STREQUAL "" )
2018-07-17 02:36:59 -04:00
message ( FATAL_ERROR "Invalid value of CURL_CA_PATH. Use 'none', 'auto' or directory path." )
2017-05-01 18:12:55 -04:00
elseif ( "${CURL_CA_PATH}" STREQUAL "none" )
2018-07-17 02:36:59 -04:00
unset ( CURL_CA_PATH CACHE )
2017-05-01 16:15:15 -04:00
elseif ( "${CURL_CA_PATH}" STREQUAL "auto" )
2018-07-17 02:36:59 -04:00
unset ( CURL_CA_PATH CACHE )
2019-11-26 17:05:21 -05:00
if ( NOT USE_NSS )
set ( CURL_CA_PATH_AUTODETECT TRUE )
endif ( )
2017-05-01 18:12:55 -04:00
else ( )
2018-07-17 02:36:59 -04:00
set ( CURL_CA_PATH_SET TRUE )
2017-05-01 18:12:55 -04:00
endif ( )
if ( CURL_CA_BUNDLE_SET AND CURL_CA_PATH_AUTODETECT )
2018-07-17 02:36:59 -04:00
# Skip autodetection of unset CA path because CA bundle is set explicitly
2017-05-01 18:12:55 -04:00
elseif ( CURL_CA_PATH_SET AND CURL_CA_BUNDLE_AUTODETECT )
2018-07-17 02:36:59 -04:00
# Skip autodetection of unset CA bundle because CA path is set explicitly
2017-05-01 18:12:55 -04:00
elseif ( CURL_CA_PATH_AUTODETECT OR CURL_CA_BUNDLE_AUTODETECT )
2018-07-17 02:36:59 -04:00
# first try autodetecting a CA bundle, then a CA path
if ( CURL_CA_BUNDLE_AUTODETECT )
set ( SEARCH_CA_BUNDLE_PATHS
/ e t c / s s l / c e r t s / c a - c e r t i f i c a t e s . c r t
/ e t c / p k i / t l s / c e r t s / c a - b u n d l e . c r t
/ u s r / s h a r e / s s l / c e r t s / c a - b u n d l e . c r t
/ u s r / l o c a l / s h a r e / c e r t s / c a - r o o t - n s s . c r t
/ e t c / s s l / c e r t . p e m )
foreach ( SEARCH_CA_BUNDLE_PATH ${ SEARCH_CA_BUNDLE_PATHS } )
if ( EXISTS "${SEARCH_CA_BUNDLE_PATH}" )
message ( STATUS "Found CA bundle: ${SEARCH_CA_BUNDLE_PATH}" )
set ( CURL_CA_BUNDLE "${SEARCH_CA_BUNDLE_PATH}" )
set ( CURL_CA_BUNDLE_SET TRUE CACHE BOOL "Path to the CA bundle has been set" )
break ( )
endif ( )
endforeach ( )
endif ( )
2017-05-01 18:12:55 -04:00
2018-07-17 02:36:59 -04:00
if ( CURL_CA_PATH_AUTODETECT AND ( NOT CURL_CA_PATH_SET ) )
if ( EXISTS "/etc/ssl/certs" )
set ( CURL_CA_PATH "/etc/ssl/certs" )
set ( CURL_CA_PATH_SET TRUE CACHE BOOL "Path to the CA bundle has been set" )
2017-05-01 18:12:55 -04:00
endif ( )
2018-07-17 02:36:59 -04:00
endif ( )
2017-05-01 18:12:55 -04:00
endif ( )
2017-06-04 19:02:56 -04:00
if ( CURL_CA_PATH_SET AND NOT USE_OPENSSL AND NOT USE_MBEDTLS )
2020-03-12 12:18:40 -04:00
message ( STATUS
2018-07-17 02:36:59 -04:00
" C A p a t h o n l y s u p p o r t e d b y O p e n S S L , G n u T L S o r m b e d T L S . "
" S e t C U R L _ C A _ P A T H = n o n e o r e n a b l e o n e o f t h o s e T L S b a c k e n d s . " )
2017-05-01 16:15:15 -04:00
endif ( )
2009-04-02 09:14:53 -04:00
# Check for header files
2009-06-09 13:29:16 -04:00
if ( NOT UNIX )
check_include_file_concat ( "windows.h" HAVE_WINDOWS_H )
check_include_file_concat ( "winsock.h" HAVE_WINSOCK_H )
2014-12-23 16:05:57 -05:00
check_include_file_concat ( "ws2tcpip.h" HAVE_WS2TCPIP_H )
check_include_file_concat ( "winsock2.h" HAVE_WINSOCK2_H )
2021-03-06 09:52:09 -05:00
check_include_file_concat ( "wincrypt.h" HAVE_WINCRYPT_H )
2018-07-05 06:55:47 -04:00
endif ( )
2009-06-09 13:29:16 -04:00
2014-12-23 16:05:57 -05:00
check_include_file_concat ( "stdio.h" HAVE_STDIO_H )
2009-06-09 13:29:16 -04:00
check_include_file_concat ( "inttypes.h" HAVE_INTTYPES_H )
check_include_file_concat ( "sys/filio.h" HAVE_SYS_FILIO_H )
check_include_file_concat ( "sys/ioctl.h" HAVE_SYS_IOCTL_H )
check_include_file_concat ( "sys/param.h" HAVE_SYS_PARAM_H )
check_include_file_concat ( "sys/poll.h" HAVE_SYS_POLL_H )
check_include_file_concat ( "sys/resource.h" HAVE_SYS_RESOURCE_H )
check_include_file_concat ( "sys/select.h" HAVE_SYS_SELECT_H )
check_include_file_concat ( "sys/socket.h" HAVE_SYS_SOCKET_H )
check_include_file_concat ( "sys/sockio.h" HAVE_SYS_SOCKIO_H )
check_include_file_concat ( "sys/stat.h" HAVE_SYS_STAT_H )
check_include_file_concat ( "sys/time.h" HAVE_SYS_TIME_H )
check_include_file_concat ( "sys/types.h" HAVE_SYS_TYPES_H )
check_include_file_concat ( "sys/uio.h" HAVE_SYS_UIO_H )
check_include_file_concat ( "sys/un.h" HAVE_SYS_UN_H )
check_include_file_concat ( "sys/utime.h" HAVE_SYS_UTIME_H )
2016-07-18 20:27:20 -04:00
check_include_file_concat ( "sys/xattr.h" HAVE_SYS_XATTR_H )
2009-06-09 13:29:16 -04:00
check_include_file_concat ( "alloca.h" HAVE_ALLOCA_H )
check_include_file_concat ( "arpa/inet.h" HAVE_ARPA_INET_H )
check_include_file_concat ( "arpa/tftp.h" HAVE_ARPA_TFTP_H )
check_include_file_concat ( "assert.h" HAVE_ASSERT_H )
check_include_file_concat ( "crypto.h" HAVE_CRYPTO_H )
check_include_file_concat ( "err.h" HAVE_ERR_H )
check_include_file_concat ( "errno.h" HAVE_ERRNO_H )
check_include_file_concat ( "fcntl.h" HAVE_FCNTL_H )
2016-10-12 03:01:06 -04:00
check_include_file_concat ( "idn2.h" HAVE_IDN2_H )
2009-06-09 13:29:16 -04:00
check_include_file_concat ( "ifaddrs.h" HAVE_IFADDRS_H )
check_include_file_concat ( "io.h" HAVE_IO_H )
check_include_file_concat ( "krb.h" HAVE_KRB_H )
check_include_file_concat ( "libgen.h" HAVE_LIBGEN_H )
check_include_file_concat ( "locale.h" HAVE_LOCALE_H )
check_include_file_concat ( "net/if.h" HAVE_NET_IF_H )
check_include_file_concat ( "netdb.h" HAVE_NETDB_H )
check_include_file_concat ( "netinet/in.h" HAVE_NETINET_IN_H )
check_include_file_concat ( "netinet/tcp.h" HAVE_NETINET_TCP_H )
2020-11-28 12:17:11 -05:00
check_include_file ( "linux/tcp.h" HAVE_LINUX_TCP_H )
2014-08-08 04:23:26 -04:00
2009-06-09 13:29:16 -04:00
check_include_file_concat ( "pem.h" HAVE_PEM_H )
check_include_file_concat ( "poll.h" HAVE_POLL_H )
check_include_file_concat ( "pwd.h" HAVE_PWD_H )
check_include_file_concat ( "rsa.h" HAVE_RSA_H )
check_include_file_concat ( "setjmp.h" HAVE_SETJMP_H )
check_include_file_concat ( "sgtty.h" HAVE_SGTTY_H )
check_include_file_concat ( "signal.h" HAVE_SIGNAL_H )
check_include_file_concat ( "ssl.h" HAVE_SSL_H )
check_include_file_concat ( "stdbool.h" HAVE_STDBOOL_H )
check_include_file_concat ( "stdint.h" HAVE_STDINT_H )
check_include_file_concat ( "stdio.h" HAVE_STDIO_H )
check_include_file_concat ( "stdlib.h" HAVE_STDLIB_H )
check_include_file_concat ( "string.h" HAVE_STRING_H )
check_include_file_concat ( "strings.h" HAVE_STRINGS_H )
check_include_file_concat ( "stropts.h" HAVE_STROPTS_H )
check_include_file_concat ( "termio.h" HAVE_TERMIO_H )
check_include_file_concat ( "termios.h" HAVE_TERMIOS_H )
check_include_file_concat ( "time.h" HAVE_TIME_H )
check_include_file_concat ( "unistd.h" HAVE_UNISTD_H )
check_include_file_concat ( "utime.h" HAVE_UTIME_H )
check_include_file_concat ( "x509.h" HAVE_X509_H )
check_include_file_concat ( "process.h" HAVE_PROCESS_H )
check_include_file_concat ( "stddef.h" HAVE_STDDEF_H )
check_include_file_concat ( "dlfcn.h" HAVE_DLFCN_H )
check_include_file_concat ( "malloc.h" HAVE_MALLOC_H )
check_include_file_concat ( "memory.h" HAVE_MEMORY_H )
check_include_file_concat ( "netinet/if_ether.h" HAVE_NETINET_IF_ETHER_H )
check_include_file_concat ( "stdint.h" HAVE_STDINT_H )
check_include_file_concat ( "sockio.h" HAVE_SOCKIO_H )
check_include_file_concat ( "sys/utsname.h" HAVE_SYS_UTSNAME_H )
2014-08-06 08:53:00 -04:00
2009-06-09 13:29:16 -04:00
check_type_size ( size_t SIZEOF_SIZE_T )
check_type_size ( ssize_t SIZEOF_SSIZE_T )
check_type_size ( "long long" SIZEOF_LONG_LONG )
check_type_size ( "long" SIZEOF_LONG )
2010-03-24 10:57:54 -04:00
check_type_size ( "short" SIZEOF_SHORT )
2009-06-09 13:29:16 -04:00
check_type_size ( "int" SIZEOF_INT )
check_type_size ( "__int64" SIZEOF___INT64 )
check_type_size ( "long double" SIZEOF_LONG_DOUBLE )
check_type_size ( "time_t" SIZEOF_TIME_T )
if ( NOT HAVE_SIZEOF_SSIZE_T )
if ( SIZEOF_LONG EQUAL SIZEOF_SIZE_T )
set ( ssize_t long )
2018-07-05 06:55:47 -04:00
endif ( )
2009-06-09 13:29:16 -04:00
if ( NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T )
set ( ssize_t __int64 )
2018-07-05 06:55:47 -04:00
endif ( )
endif ( )
2016-08-08 00:25:03 -04:00
# off_t is sized later, after the HAVE_FILE_OFFSET_BITS test
2009-04-02 09:14:53 -04:00
2009-06-09 13:29:16 -04:00
if ( HAVE_SIZEOF_LONG_LONG )
set ( HAVE_LONGLONG 1 )
set ( HAVE_LL 1 )
2018-07-05 06:55:47 -04:00
endif ( )
2009-04-02 09:14:53 -04:00
2009-06-09 13:29:16 -04:00
find_file ( RANDOM_FILE urandom /dev )
mark_as_advanced ( RANDOM_FILE )
2009-04-02 09:14:53 -04:00
# Check for some functions that are used
2014-09-25 09:03:00 -04:00
if ( HAVE_LIBWS2_32 )
set ( CMAKE_REQUIRED_LIBRARIES ws2_32 )
elseif ( HAVE_LIBSOCKET )
set ( CMAKE_REQUIRED_LIBRARIES socket )
endif ( )
2009-06-09 13:29:16 -04:00
check_symbol_exists ( basename "${CURL_INCLUDES}" HAVE_BASENAME )
check_symbol_exists ( socket "${CURL_INCLUDES}" HAVE_SOCKET )
check_symbol_exists ( select "${CURL_INCLUDES}" HAVE_SELECT )
2019-01-15 04:50:18 -05:00
check_symbol_exists ( poll "${CURL_INCLUDES}" HAVE_POLL )
2009-06-09 13:29:16 -04:00
check_symbol_exists ( strdup "${CURL_INCLUDES}" HAVE_STRDUP )
check_symbol_exists ( strstr "${CURL_INCLUDES}" HAVE_STRSTR )
check_symbol_exists ( strtok_r "${CURL_INCLUDES}" HAVE_STRTOK_R )
check_symbol_exists ( strftime "${CURL_INCLUDES}" HAVE_STRFTIME )
check_symbol_exists ( uname "${CURL_INCLUDES}" HAVE_UNAME )
check_symbol_exists ( strcasecmp "${CURL_INCLUDES}" HAVE_STRCASECMP )
check_symbol_exists ( stricmp "${CURL_INCLUDES}" HAVE_STRICMP )
check_symbol_exists ( strcmpi "${CURL_INCLUDES}" HAVE_STRCMPI )
check_symbol_exists ( strncmpi "${CURL_INCLUDES}" HAVE_STRNCMPI )
check_symbol_exists ( alarm "${CURL_INCLUDES}" HAVE_ALARM )
if ( NOT HAVE_STRNCMPI )
set ( HAVE_STRCMPI )
2018-07-05 06:55:47 -04:00
endif ( )
2009-06-09 13:29:16 -04:00
check_symbol_exists ( gethostbyaddr "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR )
check_symbol_exists ( gethostbyaddr_r "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR_R )
check_symbol_exists ( gettimeofday "${CURL_INCLUDES}" HAVE_GETTIMEOFDAY )
check_symbol_exists ( inet_addr "${CURL_INCLUDES}" HAVE_INET_ADDR )
check_symbol_exists ( inet_ntoa "${CURL_INCLUDES}" HAVE_INET_NTOA )
check_symbol_exists ( inet_ntoa_r "${CURL_INCLUDES}" HAVE_INET_NTOA_R )
check_symbol_exists ( perror "${CURL_INCLUDES}" HAVE_PERROR )
check_symbol_exists ( closesocket "${CURL_INCLUDES}" HAVE_CLOSESOCKET )
check_symbol_exists ( setvbuf "${CURL_INCLUDES}" HAVE_SETVBUF )
check_symbol_exists ( sigsetjmp "${CURL_INCLUDES}" HAVE_SIGSETJMP )
check_symbol_exists ( getpass_r "${CURL_INCLUDES}" HAVE_GETPASS_R )
check_symbol_exists ( strlcat "${CURL_INCLUDES}" HAVE_STRLCAT )
check_symbol_exists ( getpwuid "${CURL_INCLUDES}" HAVE_GETPWUID )
2018-05-27 04:38:07 -04:00
check_symbol_exists ( getpwuid_r "${CURL_INCLUDES}" HAVE_GETPWUID_R )
2009-06-09 13:29:16 -04:00
check_symbol_exists ( geteuid "${CURL_INCLUDES}" HAVE_GETEUID )
2019-07-20 13:14:00 -04:00
check_symbol_exists ( usleep "${CURL_INCLUDES}" HAVE_USLEEP )
2009-06-09 13:29:16 -04:00
check_symbol_exists ( utime "${CURL_INCLUDES}" HAVE_UTIME )
check_symbol_exists ( gmtime_r "${CURL_INCLUDES}" HAVE_GMTIME_R )
check_symbol_exists ( localtime_r "${CURL_INCLUDES}" HAVE_LOCALTIME_R )
check_symbol_exists ( gethostbyname "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME )
check_symbol_exists ( gethostbyname_r "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME_R )
check_symbol_exists ( signal "${CURL_INCLUDES}" HAVE_SIGNAL_FUNC )
check_symbol_exists ( SIGALRM "${CURL_INCLUDES}" HAVE_SIGNAL_MACRO )
if ( HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO )
set ( HAVE_SIGNAL 1 )
2018-07-05 06:55:47 -04:00
endif ( )
2009-06-09 13:29:16 -04:00
check_symbol_exists ( uname "${CURL_INCLUDES}" HAVE_UNAME )
check_symbol_exists ( strtoll "${CURL_INCLUDES}" HAVE_STRTOLL )
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 ( perror "${CURL_INCLUDES}" HAVE_PERROR )
check_symbol_exists ( fork "${CURL_INCLUDES}" HAVE_FORK )
2014-10-13 05:19:36 -04:00
check_symbol_exists ( getaddrinfo "${CURL_INCLUDES}" HAVE_GETADDRINFO )
2009-06-09 13:29:16 -04:00
check_symbol_exists ( freeaddrinfo "${CURL_INCLUDES}" HAVE_FREEADDRINFO )
check_symbol_exists ( freeifaddrs "${CURL_INCLUDES}" HAVE_FREEIFADDRS )
check_symbol_exists ( pipe "${CURL_INCLUDES}" HAVE_PIPE )
check_symbol_exists ( ftruncate "${CURL_INCLUDES}" HAVE_FTRUNCATE )
check_symbol_exists ( getprotobyname "${CURL_INCLUDES}" HAVE_GETPROTOBYNAME )
2019-05-05 11:08:22 -04:00
check_symbol_exists ( getpeername "${CURL_INCLUDES}" HAVE_GETPEERNAME )
check_symbol_exists ( getsockname "${CURL_INCLUDES}" HAVE_GETSOCKNAME )
2019-05-21 10:47:53 -04:00
check_symbol_exists ( if_nametoindex "${CURL_INCLUDES}" HAVE_IF_NAMETOINDEX )
2009-06-09 13:29:16 -04:00
check_symbol_exists ( getrlimit "${CURL_INCLUDES}" HAVE_GETRLIMIT )
check_symbol_exists ( setlocale "${CURL_INCLUDES}" HAVE_SETLOCALE )
2017-11-10 14:46:41 -05:00
check_symbol_exists ( setmode "${CURL_INCLUDES}" HAVE_SETMODE )
2009-06-09 13:29:16 -04:00
check_symbol_exists ( setrlimit "${CURL_INCLUDES}" HAVE_SETRLIMIT )
check_symbol_exists ( fcntl "${CURL_INCLUDES}" HAVE_FCNTL )
check_symbol_exists ( ioctl "${CURL_INCLUDES}" HAVE_IOCTL )
check_symbol_exists ( setsockopt "${CURL_INCLUDES}" HAVE_SETSOCKOPT )
2017-10-30 08:12:41 -04:00
check_function_exists ( mach_absolute_time HAVE_MACH_ABSOLUTE_TIME )
2020-01-11 05:20:38 -05:00
check_symbol_exists ( inet_pton "${CURL_INCLUDES}" HAVE_INET_PTON )
2009-04-02 09:14:53 -04:00
2016-07-18 20:27:20 -04:00
check_symbol_exists ( fsetxattr "${CURL_INCLUDES}" HAVE_FSETXATTR )
if ( HAVE_FSETXATTR )
foreach ( CURL_TEST HAVE_FSETXATTR_5 HAVE_FSETXATTR_6 )
2018-03-31 06:17:45 -04:00
curl_internal_test ( ${ CURL_TEST } )
2018-07-05 06:55:47 -04:00
endforeach ( )
endif ( )
2016-07-18 20:27:20 -04:00
2009-04-02 09:14:53 -04:00
# sigaction and sigsetjmp are special. Use special mechanism for
# detecting those, but only if previous attempt failed.
2009-06-09 13:29:16 -04:00
if ( HAVE_SIGNAL_H )
check_symbol_exists ( sigaction "signal.h" HAVE_SIGACTION )
2018-07-05 06:55:47 -04:00
endif ( )
2009-06-09 13:29:16 -04:00
if ( NOT HAVE_SIGSETJMP )
if ( HAVE_SETJMP_H )
check_symbol_exists ( sigsetjmp "setjmp.h" HAVE_MACRO_SIGSETJMP )
if ( HAVE_MACRO_SIGSETJMP )
set ( HAVE_SIGSETJMP 1 )
2018-07-05 06:55:47 -04:00
endif ( )
endif ( )
endif ( )
2009-04-02 09:14:53 -04:00
# If there is no stricmp(), do not allow LDAP to parse URLs
if ( NOT HAVE_STRICMP )
2009-06-09 13:29:16 -04:00
set ( HAVE_LDAP_URL_PARSE 1 )
2018-07-05 06:55:47 -04:00
endif ( )
2009-04-02 09:14:53 -04:00
# Do curl specific tests
2010-03-24 10:57:54 -04:00
foreach ( CURL_TEST
2009-04-02 09:14:53 -04:00
H A V E _ F C N T L _ O _ N O N B L O C K
H A V E _ I O C T L S O C K E T
H A V E _ I O C T L S O C K E T _ C A M E L
H A V E _ I O C T L S O C K E T _ C A M E L _ F I O N B I O
H A V E _ I O C T L S O C K E T _ F I O N B I O
H A V E _ I O C T L _ F I O N B I O
H A V E _ I O C T L _ S I O C G I F A D D R
H A V E _ S E T S O C K O P T _ S O _ N O N B L O C K
H A V E _ S O C K A D D R _ I N 6 _ S I N 6 _ S C O P E _ I D
T I M E _ W I T H _ S Y S _ T I M E
H A V E _ O _ N O N B L O C K
2009-04-08 19:20:04 -04:00
H A V E _ G E T H O S T B Y A D D R _ R _ 5
2009-04-02 09:14:53 -04:00
H A V E _ G E T H O S T B Y A D D R _ R _ 7
H A V E _ G E T H O S T B Y A D D R _ R _ 8
H A V E _ G E T H O S T B Y A D D R _ R _ 5 _ R E E N T R A N T
H A V E _ G E T H O S T B Y A D D R _ R _ 7 _ R E E N T R A N T
H A V E _ G E T H O S T B Y A D D R _ R _ 8 _ R E E N T R A N T
H A V E _ G E T H O S T B Y N A M E _ R _ 3
H A V E _ G E T H O S T B Y N A M E _ R _ 5
H A V E _ G E T H O S T B Y N A M E _ R _ 6
H A V E _ G E T H O S T B Y N A M E _ R _ 3 _ R E E N T R A N T
H A V E _ G E T H O S T B Y N A M E _ R _ 5 _ R E E N T R A N T
H A V E _ G E T H O S T B Y N A M E _ R _ 6 _ R E E N T R A N T
H A V E _ I N _ A D D R _ T
H A V E _ B O O L _ T
S T D C _ H E A D E R S
H A V E _ I N E T _ N T O A _ R _ D E C L
H A V E _ I N E T _ N T O A _ R _ D E C L _ R E E N T R A N T
H A V E _ G E T A D D R I N F O
H A V E _ F I L E _ O F F S E T _ B I T S
2019-01-11 04:05:17 -05:00
H A V E _ V A R I A D I C _ M A C R O S _ C 9 9
H A V E _ V A R I A D I C _ M A C R O S _ G C C
2009-04-02 09:14:53 -04:00
)
2009-06-09 13:29:16 -04:00
curl_internal_test ( ${ CURL_TEST } )
2018-07-05 06:55:47 -04:00
endforeach ( )
2016-08-08 00:25:03 -04:00
2009-06-09 13:29:16 -04:00
if ( HAVE_FILE_OFFSET_BITS )
set ( _FILE_OFFSET_BITS 64 )
2016-08-08 00:25:03 -04:00
set ( CMAKE_REQUIRED_FLAGS "-D_FILE_OFFSET_BITS=64" )
2018-07-05 06:55:47 -04:00
endif ( )
2016-08-08 00:25:03 -04:00
check_type_size ( "off_t" SIZEOF_OFF_T )
2017-08-12 09:54:06 -04:00
# include this header to get the type
set ( CMAKE_REQUIRED_INCLUDES "${CURL_SOURCE_DIR}/include" )
set ( CMAKE_EXTRA_INCLUDE_FILES "curl/system.h" )
check_type_size ( "curl_off_t" SIZEOF_CURL_OFF_T )
set ( CMAKE_EXTRA_INCLUDE_FILES "" )
2016-08-08 00:25:03 -04:00
set ( CMAKE_REQUIRED_FLAGS )
2010-03-24 10:57:54 -04:00
foreach ( CURL_TEST
2009-04-02 09:14:53 -04:00
H A V E _ G L I B C _ S T R E R R O R _ R
H A V E _ P O S I X _ S T R E R R O R _ R
)
2018-03-31 06:17:45 -04:00
curl_internal_test ( ${ CURL_TEST } )
2018-07-05 06:55:47 -04:00
endforeach ( )
2009-04-02 09:14:53 -04:00
# Check for reentrant
2009-06-09 13:29:16 -04:00
foreach ( CURL_TEST
2009-04-02 09:14:53 -04:00
H A V E _ G E T H O S T B Y A D D R _ R _ 5
H A V E _ G E T H O S T B Y A D D R _ R _ 7
H A V E _ G E T H O S T B Y A D D R _ R _ 8
H A V E _ G E T H O S T B Y N A M E _ R _ 3
H A V E _ G E T H O S T B Y N A M E _ R _ 5
H A V E _ G E T H O S T B Y N A M E _ R _ 6
H A V E _ I N E T _ N T O A _ R _ D E C L _ R E E N T R A N T )
2009-06-09 13:29:16 -04:00
if ( NOT ${ CURL_TEST } )
if ( ${ CURL_TEST } _REENTRANT )
set ( NEED_REENTRANT 1 )
2018-07-05 06:55:47 -04:00
endif ( )
endif ( )
endforeach ( )
2009-06-09 13:29:16 -04:00
if ( NEED_REENTRANT )
foreach ( CURL_TEST
2009-04-02 09:14:53 -04:00
H A V E _ G E T H O S T B Y A D D R _ R _ 5
H A V E _ G E T H O S T B Y A D D R _ R _ 7
H A V E _ G E T H O S T B Y A D D R _ R _ 8
H A V E _ G E T H O S T B Y N A M E _ R _ 3
H A V E _ G E T H O S T B Y N A M E _ R _ 5
H A V E _ G E T H O S T B Y N A M E _ R _ 6 )
2009-06-09 13:29:16 -04:00
set ( ${ CURL_TEST } 0 )
if ( ${ CURL_TEST } _REENTRANT )
set ( ${ CURL_TEST } 1 )
2018-07-05 06:55:47 -04:00
endif ( )
endforeach ( )
endif ( )
2009-06-09 13:29:16 -04:00
if ( HAVE_INET_NTOA_R_DECL_REENTRANT )
set ( HAVE_INET_NTOA_R_DECL 1 )
set ( NEED_REENTRANT 1 )
2018-07-05 06:55:47 -04:00
endif ( )
2009-04-02 09:14:53 -04:00
2018-10-04 14:31:23 -04:00
# Check clock_gettime(CLOCK_MONOTONIC, x) support
curl_internal_test ( HAVE_CLOCK_GETTIME_MONOTONIC )
# Check compiler support of __builtin_available()
curl_internal_test ( HAVE_BUILTIN_AVAILABLE )
2009-04-02 09:14:53 -04:00
# Some other minor tests
2009-06-09 13:29:16 -04:00
if ( NOT HAVE_IN_ADDR_T )
set ( in_addr_t "unsigned long" )
2018-07-05 06:55:47 -04:00
endif ( )
2009-04-02 09:14:53 -04:00
# Fix libz / zlib.h
2009-06-09 13:29:16 -04:00
if ( NOT CURL_SPECIAL_LIBZ )
if ( NOT HAVE_LIBZ )
set ( HAVE_ZLIB_H 0 )
2018-07-05 06:55:47 -04:00
endif ( )
2009-04-02 09:14:53 -04:00
2009-06-09 13:29:16 -04:00
if ( NOT HAVE_ZLIB_H )
set ( HAVE_LIBZ 0 )
2018-07-05 06:55:47 -04:00
endif ( )
endif ( )
2009-04-02 09:14:53 -04:00
# Check for nonblocking
2009-06-09 13:29:16 -04:00
set ( HAVE_DISABLED_NONBLOCKING 1 )
2010-03-24 10:57:54 -04:00
if ( HAVE_FIONBIO OR
2009-04-02 09:14:53 -04:00
H A V E _ I O C T L S O C K E T O R
H A V E _ I O C T L S O C K E T _ C A S E O R
H A V E _ O _ N O N B L O C K )
2009-06-09 13:29:16 -04:00
set ( HAVE_DISABLED_NONBLOCKING )
2018-07-05 06:55:47 -04:00
endif ( )
2009-04-02 09:14:53 -04:00
2009-06-09 13:29:16 -04:00
if ( CMAKE_COMPILER_IS_GNUCC AND APPLE )
include ( CheckCCompilerFlag )
check_c_compiler_flag ( -Wno-long-double HAVE_C_FLAG_Wno_long_double )
if ( HAVE_C_FLAG_Wno_long_double )
2009-04-02 09:14:53 -04:00
# The Mac version of GCC warns about use of long double. Disable it.
2013-01-03 20:50:28 -05:00
get_source_file_property ( MPRINTF_COMPILE_FLAGS mprintf.c COMPILE_FLAGS )
2009-06-09 13:29:16 -04:00
if ( MPRINTF_COMPILE_FLAGS )
set ( MPRINTF_COMPILE_FLAGS "${MPRINTF_COMPILE_FLAGS} -Wno-long-double" )
2018-07-05 06:55:47 -04:00
else ( )
2009-06-09 13:29:16 -04:00
set ( MPRINTF_COMPILE_FLAGS "-Wno-long-double" )
2018-07-05 06:55:47 -04:00
endif ( )
2013-01-03 20:50:28 -05:00
set_source_files_properties ( mprintf.c PROPERTIES
2009-04-02 09:14:53 -04:00
C O M P I L E _ F L A G S $ { M P R I N T F _ C O M P I L E _ F L A G S } )
2018-07-05 06:55:47 -04:00
endif ( )
endif ( )
2009-04-02 09:14:53 -04:00
2017-05-22 03:05:10 -04:00
# TODO test which of these headers are required
2013-10-20 11:12:56 -04:00
if ( WIN32 )
set ( CURL_PULL_WS2TCPIP_H ${ HAVE_WS2TCPIP_H } )
else ( )
set ( CURL_PULL_SYS_TYPES_H ${ HAVE_SYS_TYPES_H } )
set ( CURL_PULL_SYS_SOCKET_H ${ HAVE_SYS_SOCKET_H } )
set ( CURL_PULL_SYS_POLL_H ${ HAVE_SYS_POLL_H } )
endif ( )
set ( CURL_PULL_STDINT_H ${ HAVE_STDINT_H } )
set ( CURL_PULL_INTTYPES_H ${ HAVE_INTTYPES_H } )
2009-06-09 13:29:16 -04:00
include ( CMake/OtherTests.cmake )
2009-04-02 09:14:53 -04:00
2009-06-09 13:29:16 -04:00
add_definitions ( -DHAVE_CONFIG_H )
2009-04-02 09:14:53 -04:00
2018-05-30 08:08:26 -04:00
# For Windows, all compilers used by CMake should support large files
2016-08-08 00:25:03 -04:00
if ( WIN32 )
set ( USE_WIN32_LARGE_FILES ON )
2018-05-30 08:08:26 -04:00
# Use the manifest embedded in the Windows Resource
set ( CMAKE_RC_FLAGS "${CMAKE_RC_FLAGS} -DCURL_EMBED_MANIFEST" )
2021-03-06 09:52:09 -05:00
# Check if crypto functions in wincrypt.h are actually available
if ( HAVE_WINCRYPT_H )
check_symbol_exists ( CryptAcquireContext "${CURL_INCLUDES}" USE_WINCRYPT )
endif ( )
if ( USE_WINCRYPT )
set ( USE_WIN32_CRYPTO ON )
endif ( )
# Link required libraries for USE_WIN32_CRYPTO or USE_SCHANNEL
if ( USE_WIN32_CRYPTO OR USE_SCHANNEL )
list ( APPEND CURL_LIBS "advapi32" "crypt32" )
endif ( )
2018-07-05 06:55:47 -04:00
endif ( )
2016-08-08 00:25:03 -04:00
2009-06-09 13:29:16 -04:00
if ( MSVC )
2018-05-30 08:08:26 -04:00
# Disable default manifest added by CMake
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO" )
2009-06-09 13:29:16 -04:00
add_definitions ( -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE )
2017-07-18 12:46:53 -04:00
if ( CMAKE_C_FLAGS MATCHES "/W[0-4]" )
string ( REGEX REPLACE "/W[0-4]" "/W4" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" )
2018-07-05 06:55:47 -04:00
else ( )
2017-07-18 12:46:53 -04:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4" )
2018-07-05 06:55:47 -04:00
endif ( )
endif ( )
2009-04-02 09:14:53 -04:00
2018-03-22 09:34:49 -04:00
if ( CURL_WERROR )
if ( MSVC_VERSION )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX" )
else ( )
# this assumes clang or gcc style options
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror" )
endif ( )
2018-07-05 06:55:47 -04:00
endif ( )
2018-03-22 09:34:49 -04:00
2020-01-09 06:10:55 -05:00
if ( CURL_LTO )
if ( CMAKE_VERSION VERSION_LESS 3.9 )
message ( FATAL_ERROR "Requested LTO but your cmake version ${CMAKE_VERSION} is to old. You need at least 3.9" )
endif ( )
cmake_policy ( SET CMP0069 NEW )
include ( CheckIPOSupported )
check_ipo_supported ( RESULT CURL_HAS_LTO OUTPUT CURL_LTO_ERROR LANGUAGES C )
if ( CURL_HAS_LTO )
message ( STATUS "LTO supported and enabled" )
else ( )
message ( FATAL_ERROR "LTO was requested - but compiler doesn't support it\n${CURL_LTO_ERROR}" )
endif ( )
endif ( )
2009-04-06 18:45:17 -04:00
# Ugly (but functional) way to include "Makefile.inc" by transforming it (= regenerate it).
2018-10-30 10:45:46 -04:00
function ( transform_makefile_inc INPUT_FILE OUTPUT_FILE )
2009-06-09 13:29:16 -04:00
file ( READ ${ INPUT_FILE } MAKEFILE_INC_TEXT )
string ( REPLACE "$(top_srcdir)" "\${CURL_SOURCE_DIR}" MAKEFILE_INC_TEXT ${ MAKEFILE_INC_TEXT } )
string ( REPLACE "$(top_builddir)" "\${CURL_BINARY_DIR}" MAKEFILE_INC_TEXT ${ MAKEFILE_INC_TEXT } )
2009-04-08 19:20:04 -04:00
2017-02-20 17:07:58 -05:00
string ( REGEX REPLACE "\\\\\n" "!π!α !" MAKEFILE_INC_TEXT ${ MAKEFILE_INC_TEXT } )
2010-10-12 11:27:56 -04:00
string ( REGEX REPLACE "([a-zA-Z_][a-zA-Z0-9_]*)[\t ]*=[\t ]*([^\n]*)" "SET(\\1 \\2)" MAKEFILE_INC_TEXT ${ MAKEFILE_INC_TEXT } )
2017-02-20 17:07:58 -05:00
string ( REPLACE "!π!α !" "\n" MAKEFILE_INC_TEXT ${ MAKEFILE_INC_TEXT } )
2009-04-08 19:20:04 -04:00
2009-06-09 13:29:16 -04:00
string ( REGEX REPLACE "\\$\\(([a-zA-Z_][a-zA-Z0-9_]*)\\)" "\${\\1}" MAKEFILE_INC_TEXT ${ MAKEFILE_INC_TEXT } ) # Replace $() with ${}
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.
file ( WRITE ${ OUTPUT_FILE } ${ MAKEFILE_INC_TEXT } )
2020-05-27 16:36:22 -04:00
set_property ( DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${INPUT_FILE}" )
2009-06-09 13:29:16 -04:00
endfunction ( )
2009-04-06 18:45:17 -04:00
2018-07-17 19:31:51 -04:00
include ( GNUInstallDirs )
set ( CURL_INSTALL_CMAKE_DIR ${ CMAKE_INSTALL_LIBDIR } /cmake/ ${ PROJECT_NAME } )
set ( TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets" )
set ( generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated" )
set ( project_config "${generated_dir}/${PROJECT_NAME}Config.cmake" )
set ( version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake" )
2017-09-10 10:56:16 -04:00
2017-09-26 03:42:12 -04:00
if ( USE_MANUAL )
add_subdirectory ( docs )
endif ( )
2009-06-09 13:29:16 -04:00
add_subdirectory ( lib )
2017-09-26 03:42:12 -04:00
2009-06-09 13:29:16 -04:00
if ( BUILD_CURL_EXE )
add_subdirectory ( src )
endif ( )
2016-06-16 06:53:50 -04:00
2020-10-13 16:37:15 -04:00
cmake_dependent_option ( BUILD_TESTING "Build tests"
O N " P E R L _ F O U N D ; N O T C U R L _ D I S A B L E _ T E S T S "
O F F )
if ( BUILD_TESTING )
2009-06-09 13:29:16 -04:00
add_subdirectory ( tests )
endif ( )
2009-04-02 09:14:53 -04:00
2014-10-14 05:38:15 -04:00
# Helper to populate a list (_items) with a label when conditions (the remaining
# args) are satisfied
2020-02-24 07:34:54 -05:00
macro ( _add_if label )
# needs to be a macro to allow this indirection
2014-10-14 05:38:15 -04:00
if ( ${ ARGN } )
2020-02-24 07:34:54 -05:00
set ( _items ${ _items } "${label}" )
2014-10-14 05:38:15 -04:00
endif ( )
2020-02-24 07:34:54 -05:00
endmacro ( )
2014-10-14 05:38:15 -04:00
2021-03-06 09:52:09 -05:00
# NTLM support requires crypto function adaptions from various SSL libs
# TODO alternative SSL libs tests for SSP1, GNUTLS, NSS
if ( NOT CURL_DISABLE_CRYPTO_AUTH AND ( USE_OPENSSL OR USE_MBEDTLS OR
U S E _ D A R W I N S S L O R U S E _ W I N 3 2 _ C R Y P T O ) )
set ( use_curl_ntlm_core ON )
endif ( )
2014-10-14 05:38:15 -04:00
# Clear list and try to detect available features
set ( _items )
2019-04-05 10:57:03 -04:00
_add_if ( "SSL" SSL_ENABLED )
2014-10-14 05:38:15 -04:00
_add_if ( "IPv6" ENABLE_IPV6 )
2020-10-20 04:28:01 -04:00
_add_if ( "unixsockets" USE_UNIX_SOCKETS )
2014-10-14 05:38:15 -04:00
_add_if ( "libz" HAVE_LIBZ )
2020-05-25 11:49:46 -04:00
_add_if ( "brotli" HAVE_BROTLI )
_add_if ( "zstd" HAVE_ZSTD )
2016-08-08 02:37:29 -04:00
_add_if ( "AsynchDNS" USE_ARES OR USE_THREADS_POSIX OR USE_THREADS_WIN32 )
2021-03-29 00:58:17 -04:00
_add_if ( "IDN" HAVE_LIBIDN2 OR USE_WIN32_IDN )
2021-03-08 06:30:56 -05:00
_add_if ( "Largefile" ( SIZEOF_CURL_OFF_T GREATER 4 ) AND
2016-08-08 00:25:03 -04:00
( ( S I Z E O F _ O F F _ T G R E A T E R 4 ) O R U S E _ W I N 3 2 _ L A R G E _ F I L E S ) )
2020-08-07 11:11:52 -04:00
# TODO SSP1 (Schannel) check is missing
2014-10-14 05:38:15 -04:00
_add_if ( "SSPI" USE_WINDOWS_SSPI )
2015-08-10 07:09:58 -04:00
_add_if ( "GSS-API" HAVE_GSSAPI )
2020-10-25 18:08:54 -04:00
_add_if ( "alt-svc" NOT CURL_DISABLE_ALTSVC )
2014-10-14 05:38:15 -04:00
# TODO SSP1 missing for SPNEGO
_add_if ( "SPNEGO" NOT CURL_DISABLE_CRYPTO_AUTH AND
2015-08-10 07:09:58 -04:00
( H A V E _ G S S A P I O R U S E _ W I N D O W S _ S S P I ) )
2014-11-19 10:53:22 -05:00
_add_if ( "Kerberos" NOT CURL_DISABLE_CRYPTO_AUTH AND
2015-08-10 07:09:58 -04:00
( H A V E _ G S S A P I O R U S E _ W I N D O W S _ S S P I ) )
2014-10-14 05:38:15 -04:00
# NTLM support requires crypto function adaptions from various SSL libs
2017-01-25 19:05:07 -05:00
# TODO alternative SSL libs tests for SSP1, GNUTLS, NSS
2021-03-28 14:46:54 -04:00
_add_if ( "NTLM" NOT CURL_DISABLE_CRYPTO_AUTH AND
( u s e _ c u r l _ n t l m _ c o r e O R U S E _ W I N D O W S _ S S P I ) )
2019-12-13 17:23:11 -05:00
# TODO missing option (autoconf: --enable-ntlm-wb)
2021-03-28 14:46:54 -04:00
_add_if ( "NTLM_WB" NOT CURL_DISABLE_CRYPTO_AUTH AND
( u s e _ c u r l _ n t l m _ c o r e O R U S E _ W I N D O W S _ S S P I ) A N D
2021-03-06 09:52:09 -05:00
N O T C U R L _ D I S A B L E _ H T T P A N D N T L M _ W B _ E N A B L E D )
2014-10-14 05:38:15 -04:00
# TODO missing option (--enable-tls-srp), depends on GNUTLS_SRP/OPENSSL_SRP
_add_if ( "TLS-SRP" USE_TLS_SRP )
# TODO option --with-nghttp2 tests for nghttp2 lib and nghttp2/nghttp2.h header
_add_if ( "HTTP2" USE_NGHTTP2 )
2020-05-08 17:13:46 -04:00
_add_if ( "HTTP3" USE_NGTCP2 OR USE_QUICHE )
2020-05-08 18:16:39 -04:00
_add_if ( "MultiSSL" CURL_WITH_MULTI_SSL )
2020-03-03 00:25:44 -05:00
_add_if ( "HTTPS-proxy" SSL_ENABLED AND ( USE_OPENSSL OR USE_GNUTLS OR USE_NSS ) )
2020-10-22 08:49:19 -04:00
_add_if ( "unicode" ENABLE_UNICODE )
2014-10-14 05:38:15 -04:00
string ( REPLACE ";" " " SUPPORT_FEATURES "${_items}" )
message ( STATUS "Enabled features: ${SUPPORT_FEATURES}" )
# Clear list and try to detect available protocols
set ( _items )
_add_if ( "HTTP" NOT CURL_DISABLE_HTTP )
_add_if ( "HTTPS" NOT CURL_DISABLE_HTTP AND SSL_ENABLED )
_add_if ( "FTP" NOT CURL_DISABLE_FTP )
_add_if ( "FTPS" NOT CURL_DISABLE_FTP AND SSL_ENABLED )
_add_if ( "FILE" NOT CURL_DISABLE_FILE )
_add_if ( "TELNET" NOT CURL_DISABLE_TELNET )
_add_if ( "LDAP" NOT CURL_DISABLE_LDAP )
# CURL_DISABLE_LDAP implies CURL_DISABLE_LDAPS
# TODO check HAVE_LDAP_SSL (in autoconf this is enabled with --enable-ldaps)
_add_if ( "LDAPS" NOT CURL_DISABLE_LDAPS AND
( ( U S E _ O P E N L D A P A N D S S L _ E N A B L E D ) O R
( N O T U S E _ O P E N L D A P A N D H A V E _ L D A P _ S S L ) ) )
_add_if ( "DICT" NOT CURL_DISABLE_DICT )
_add_if ( "TFTP" NOT CURL_DISABLE_TFTP )
_add_if ( "GOPHER" NOT CURL_DISABLE_GOPHER )
2020-12-17 04:38:27 -05:00
_add_if ( "GOPHERS" NOT CURL_DISABLE_GOPHER AND SSL_ENABLED )
2014-10-14 05:38:15 -04:00
_add_if ( "POP3" NOT CURL_DISABLE_POP3 )
_add_if ( "POP3S" NOT CURL_DISABLE_POP3 AND SSL_ENABLED )
_add_if ( "IMAP" NOT CURL_DISABLE_IMAP )
_add_if ( "IMAPS" NOT CURL_DISABLE_IMAP AND SSL_ENABLED )
2021-03-06 09:52:09 -05:00
_add_if ( "SMB" NOT CURL_DISABLE_SMB AND
u s e _ c u r l _ n t l m _ c o r e AND ( SIZEOF_CURL_OFF_T GREATER 4 ) )
_add_if ( "SMBS" NOT CURL_DISABLE_SMB AND SSL_ENABLED AND
u s e _ c u r l _ n t l m _ c o r e AND ( SIZEOF_CURL_OFF_T GREATER 4 ) )
2014-10-14 05:38:15 -04:00
_add_if ( "SMTP" NOT CURL_DISABLE_SMTP )
_add_if ( "SMTPS" NOT CURL_DISABLE_SMTP AND SSL_ENABLED )
2020-05-10 10:23:30 -04:00
_add_if ( "SCP" USE_LIBSSH2 OR USE_LIBSSH )
_add_if ( "SFTP" USE_LIBSSH2 OR USE_LIBSSH )
2014-10-14 05:38:15 -04:00
_add_if ( "RTSP" NOT CURL_DISABLE_RTSP )
_add_if ( "RTMP" USE_LIBRTMP )
2020-08-31 03:45:09 -04:00
_add_if ( "MQTT" NOT CURL_DISABLE_MQTT )
2019-04-06 09:05:50 -04:00
if ( _items )
list ( SORT _items )
endif ( )
2014-10-14 05:38:15 -04:00
string ( REPLACE ";" " " SUPPORT_PROTOCOLS "${_items}" )
message ( STATUS "Enabled protocols: ${SUPPORT_PROTOCOLS}" )
2019-04-05 10:57:03 -04:00
# Clear list and collect SSL backends
set ( _items )
2021-03-06 09:52:09 -05:00
_add_if ( "Schannel" SSL_ENABLED AND USE_SCHANNEL )
2019-04-12 08:44:59 -04:00
_add_if ( "OpenSSL" SSL_ENABLED AND USE_OPENSSL )
_add_if ( "Secure Transport" SSL_ENABLED AND USE_SECTRANSP )
_add_if ( "mbedTLS" SSL_ENABLED AND USE_MBEDTLS )
2019-11-07 23:17:18 -05:00
_add_if ( "BearSSL" SSL_ENABLED AND USE_BEARSSL )
2019-11-26 17:05:21 -05:00
_add_if ( "NSS" SSL_ENABLED AND USE_NSS )
2020-03-12 12:18:40 -04:00
_add_if ( "wolfSSL" SSL_ENABLED AND USE_WOLFSSL )
2019-04-05 10:57:03 -04:00
if ( _items )
list ( SORT _items )
endif ( )
string ( REPLACE ";" " " SSL_BACKENDS "${_items}" )
message ( STATUS "Enabled SSL backends: ${SSL_BACKENDS}" )
2014-10-14 05:38:17 -04:00
# curl-config needs the following options to be set.
set ( CC "${CMAKE_C_COMPILER}" )
# TODO probably put a -D... options here?
set ( CONFIGURE_OPTIONS "" )
# TODO when to set "-DCURL_STATICLIB" for CPPFLAG_CURL_STATICLIB?
set ( CPPFLAG_CURL_STATICLIB "" )
set ( CURLVERSION "${CURL_VERSION}" )
set ( exec_prefix "\${prefix}" )
set ( includedir "\${prefix}/include" )
set ( LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}" )
set ( LIBCURL_LIBS "" )
set ( libdir "${CMAKE_INSTALL_PREFIX}/lib" )
foreach ( _lib ${ CMAKE_C_IMPLICIT_LINK_LIBRARIES } ${ CURL_LIBS } )
2020-05-10 10:23:30 -04:00
if ( TARGET "${_lib}" )
set ( _libname "${_lib}" )
2020-06-04 05:28:01 -04:00
get_target_property ( _libtype "${_libname}" TYPE )
if ( _libtype STREQUAL INTERFACE_LIBRARY )
# Interface libraries can occur when an external project embeds curl and
# defined targets such as ZLIB::ZLIB by themselves. Ignore these as
# reading the LOCATION property will error out. Assume the user won't need
# this information in the .pc file.
continue ( )
endif ( )
get_target_property ( _lib "${_libname}" LOCATION )
2020-05-10 10:23:30 -04:00
if ( NOT _lib )
message ( WARNING "Bad lib in library list: ${_libname}" )
continue ( )
endif ( )
endif ( )
2017-06-07 15:43:40 -04:00
if ( _lib MATCHES ".*/.*" OR _lib MATCHES "^-" )
2016-06-01 16:24:35 -04:00
set ( LIBCURL_LIBS "${LIBCURL_LIBS} ${_lib}" )
else ( )
set ( LIBCURL_LIBS "${LIBCURL_LIBS} -l${_lib}" )
endif ( )
2014-10-14 05:38:17 -04:00
endforeach ( )
2020-05-11 15:50:02 -04:00
if ( BUILD_SHARED_LIBS )
set ( ENABLE_SHARED "yes" )
set ( ENABLE_STATIC "no" )
set ( LIBCURL_NO_SHARED "" )
else ( )
set ( ENABLE_SHARED "no" )
set ( ENABLE_STATIC "yes" )
set ( LIBCURL_NO_SHARED "${LIBCURL_LIBS}" )
endif ( )
2014-10-14 05:38:17 -04:00
# "a" (Linux) or "lib" (Windows)
string ( REPLACE "." "" libext "${CMAKE_STATIC_LIBRARY_SUFFIX}" )
set ( prefix "${CMAKE_INSTALL_PREFIX}" )
# Set this to "yes" to append all libraries on which -lcurl is dependent
set ( REQUIRE_LIB_DEPS "no" )
# SUPPORT_FEATURES
# SUPPORT_PROTOCOLS
set ( VERSIONNUM "${CURL_VERSION_NUM}" )
# Finally generate a "curl-config" matching this config
2018-07-10 05:54:34 -04:00
# Use:
# * ENABLE_SHARED
# * ENABLE_STATIC
2014-10-14 05:38:17 -04:00
configure_file ( "${CURL_SOURCE_DIR}/curl-config.in"
" $ { C U R L _ B I N A R Y _ D I R } / c u r l - c o n f i g " @ O N L Y )
2015-10-19 10:09:14 -04:00
install ( FILES "${CURL_BINARY_DIR}/curl-config"
2018-07-17 19:31:51 -04:00
D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ B I N D I R }
2014-10-14 05:38:17 -04:00
P E R M I S S I O N S
O W N E R _ R E A D O W N E R _ W R I T E O W N E R _ E X E C U T E
G R O U P _ R E A D G R O U P _ E X E C U T E
W O R L D _ R E A D W O R L D _ E X E C U T E )
# Finally generate a pkg-config file matching this config
configure_file ( "${CURL_SOURCE_DIR}/libcurl.pc.in"
" $ { C U R L _ B I N A R Y _ D I R } / l i b c u r l . p c " @ O N L Y )
2015-10-19 10:09:14 -04:00
install ( FILES "${CURL_BINARY_DIR}/libcurl.pc"
2018-07-17 19:31:51 -04:00
D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ L I B D I R } / p k g c o n f i g )
2014-10-14 05:38:17 -04:00
2017-05-22 03:05:10 -04:00
# install headers
2011-04-27 16:05:07 -04:00
install ( DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/curl"
2018-07-17 19:31:51 -04:00
D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ I N C L U D E D I R }
2017-05-22 03:05:10 -04:00
F I L E S _ M A T C H I N G P A T T E R N " * . h " )
2013-02-04 16:35:09 -05:00
2017-09-10 10:56:16 -04:00
include ( CMakePackageConfigHelpers )
write_basic_package_version_file (
2018-07-17 19:31:51 -04:00
" $ { v e r s i o n _ c o n f i g } "
2017-09-10 10:56:16 -04:00
V E R S I O N $ { C U R L _ V E R S I O N }
C O M P A T I B I L I T Y S a m e M a j o r V e r s i o n
)
2018-07-17 19:31:51 -04:00
# Use:
# * TARGETS_EXPORT_NAME
# * PROJECT_NAME
configure_package_config_file ( CMake/curl-config.cmake.in
" $ { p r o j e c t _ c o n f i g } "
I N S T A L L _ D E S T I N A T I O N $ { C U R L _ I N S T A L L _ C M A K E _ D I R }
)
install (
E X P O R T " $ { T A R G E T S _ E X P O R T _ N A M E } "
N A M E S P A C E " $ { P R O J E C T _ N A M E } : : "
D E S T I N A T I O N $ { C U R L _ I N S T A L L _ C M A K E _ D I R }
2017-09-10 10:56:16 -04:00
)
install (
2018-07-17 19:31:51 -04:00
F I L E S $ { v e r s i o n _ c o n f i g } $ { p r o j e c t _ c o n f i g }
2017-09-10 10:56:16 -04:00
D E S T I N A T I O N $ { C U R L _ I N S T A L L _ C M A K E _ D I R }
)
2013-02-04 16:35:09 -05:00
# Workaround for MSVS10 to avoid the Dialog Hell
# FIXME: This could be removed with future version of CMake.
if ( MSVC_VERSION EQUAL 1600 )
set ( CURL_SLN_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/CURL.sln" )
if ( EXISTS "${CURL_SLN_FILENAME}" )
file ( APPEND "${CURL_SLN_FILENAME}" "\n# This should be regenerated!\n" )
endif ( )
endif ( )
2017-07-10 19:17:15 -04:00
if ( NOT TARGET uninstall )
configure_file (
2017-08-10 07:24:15 -04:00
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / C M a k e / c m a k e _ u n i n s t a l l . c m a k e . i n
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / C M a k e / c m a k e _ u n i n s t a l l . c m a k e
2017-07-10 19:17:15 -04:00
I M M E D I A T E @ O N L Y )
add_custom_target ( uninstall
C O M M A N D $ { C M A K E _ C O M M A N D } - P
2017-08-10 07:24:15 -04:00
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / C M a k e / c m a k e _ u n i n s t a l l . c m a k e )
2017-07-10 19:17:15 -04:00
endif ( )