1CMAKE_MINIMUM_REQUIRED (VERSION 3.1.0) 2 3INCLUDE (CheckIncludeFiles) 4INCLUDE (CheckTypeSize) 5INCLUDE (CheckFunctionExists) 6INCLUDE (CheckSymbolExists) 7INCLUDE (CheckCSourceCompiles) 8INCLUDE (CheckStructHasMember) 9INCLUDE (CheckLibraryExists) 10 11PROJECT (c-ares LANGUAGES C VERSION "1.19.1" ) 12 13# Set this version before release 14SET (CARES_VERSION "1.19.1") 15 16INCLUDE (GNUInstallDirs) # include this *AFTER* PROJECT(), otherwise paths are wrong. 17 18# This is for libtool compatibility, and specified in a form that is easily 19# translatable from libtool (even if the actual form doesn't make sense). 20# For instance, in an autotools project, in Makefile.am there is a line that 21# contains something like: 22# -version-info 4:0:2 23# This breaks down into sections of current:revision:age 24# This then generates a version of "(current-age).age.revision" with an 25# interface version of "(current-age)" 26# For example, a version of 4:0:2 would generate output such as: 27# libname.so -> libname.so.2 28# libname.so.2 -> libname.so.2.2.0 29SET (CARES_LIB_VERSIONINFO "8:1:6") 30 31 32OPTION (CARES_STATIC "Build as a static library" OFF) 33OPTION (CARES_SHARED "Build as a shared library" ON) 34OPTION (CARES_INSTALL "Create installation targets (chain builders may want to disable this)" ON) 35OPTION (CARES_STATIC_PIC "Build the static library as PIC (position independent)" OFF) 36OPTION (CARES_BUILD_TESTS "Build and run tests" OFF) 37OPTION (CARES_BUILD_CONTAINER_TESTS "Build and run container tests (implies CARES_BUILD_TESTS, Linux only)" OFF) 38OPTION (CARES_BUILD_TOOLS "Build tools" ON) 39SET (CARES_RANDOM_FILE "/dev/urandom" CACHE STRING "Suitable File / Device Path for entropy, such as /dev/urandom") 40 41 42# Tests require static to be enabled on Windows to be able to access otherwise hidden symbols 43IF (CARES_BUILD_TESTS AND (NOT CARES_STATIC) AND WIN32) 44 SET (CARES_STATIC ON) 45 SET (CARES_STATIC_PIC ON) 46 MESSAGE (WARNING "Static building was requested be disabled, but reenabled to support tests") 47ENDIF () 48 49# allow linking against the static runtime library in msvc 50IF (MSVC) 51 OPTION (CARES_MSVC_STATIC_RUNTIME "Link against the static runtime library" OFF) 52 IF (CARES_MSVC_STATIC_RUNTIME) 53 # CMAKE_CONFIGURATION_TYPES is empty on non-IDE generators (Ninja, NMake) 54 # and that's why we also use CMAKE_BUILD_TYPE to cover for those generators. 55 # For IDE generators, CMAKE_BUILD_TYPE is usually empty 56 FOREACH (config_type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE}) 57 STRING (TOUPPER ${config_type} upper_config_type) 58 SET (flag_var "CMAKE_C_FLAGS_${upper_config_type}") 59 IF (${flag_var} MATCHES "/MD") 60 STRING (REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") 61 ENDIF () 62 ENDFOREACH () 63 64 # clean up 65 SET (upper_config_type) 66 SET (config_type) 67 SET (flag_var) 68 ENDIF () 69ENDIF () 70 71# Keep build organized. 72SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}") 73SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}") 74SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}") 75SET (PACKAGE_DIRECTORY ${PROJECT_BINARY_DIR}/package) 76 77# Destinations for installing different kinds of targets (pass to install command). 78SET (TARGETS_INST_DEST 79 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 80 BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} 81 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 82 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 83) 84 85# Function in Library 86# CHECK_LIBRARY_EXISTS can't be used as it will return true if the function 87# is found in a different required/dependent library. 88MACRO (CARES_FUNCTION_IN_LIBRARY func lib var) 89 90 SET (_ORIG_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}") 91 SET (CMAKE_REQUIRED_LIBRARIES ) 92 CHECK_FUNCTION_EXISTS ("${func}" "_CARES_FUNC_IN_LIB_GLOBAL_${func}") 93 SET (CMAKE_REQUIRED_LIBRARIES "${_ORIG_CMAKE_REQUIRED_LIBRARIES}") 94 95 IF ("${_CARES_FUNC_IN_LIB_GLOBAL_${func}}") 96 SET (${var} FALSE) 97 ELSE () 98 CHECK_LIBRARY_EXISTS ("${lib}" "${func}" "" ${var}) 99 ENDIF () 100ENDMACRO () 101 102# Look for dependent/required libraries 103CARES_FUNCTION_IN_LIBRARY (res_servicename resolv HAVE_RES_SERVICENAME_IN_LIBRESOLV) 104IF (HAVE_RES_SERVICENAME_IN_LIBRESOLV) 105 SET (HAVE_LIBRESOLV 1) 106ENDIF () 107 108IF (APPLE) 109 CHECK_C_SOURCE_COMPILES (" 110 #include <stdio.h> 111 #include <TargetConditionals.h> 112 int main() { 113#if TARGET_OS_IPHONE == 0 114#error Not an iPhone target 115#endif 116return 0; 117 } 118 " 119 IOS) 120 121 CHECK_C_SOURCE_COMPILES (" 122#include <stdio.h> 123#include <TargetConditionals.h> 124 int main() { 125#if TARGET_OS_IPHONE == 0 || __IPHONE_OS_VERSION_MIN_REQUIRED < 100000 126# error Not iOS v10 127#endif 128return 0; 129 } 130 " 131 IOS_V10) 132 133 CHECK_C_SOURCE_COMPILES (" 134#include <stdio.h> 135#include <AvailabilityMacros.h> 136#ifndef MAC_OS_X_VERSION_10_12 137# define MAC_OS_X_VERSION_10_12 101200 138#endif 139 int main() { 140#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_12 141# error Not MacOSX 10.12 or higher 142#endif 143return 0; 144 } 145 " 146 MACOS_V1012) 147ENDIF () 148 149IF ((IOS OR APPLE OR ZOS) AND HAVE_LIBRESOLV) 150 SET (CARES_USE_LIBRESOLV 1) 151ENDIF() 152 153 154CARES_FUNCTION_IN_LIBRARY (gethostbyname nsl HAVE_LIBNSL) 155CARES_FUNCTION_IN_LIBRARY (gethostbyname socket HAVE_GHBN_LIBSOCKET) 156CARES_FUNCTION_IN_LIBRARY (gethostbyname network HAVE_LIBNETWORK) 157CARES_FUNCTION_IN_LIBRARY (socket socket HAVE_SOCKET_LIBSOCKET) 158IF (HAVE_GHBN_LIBSOCKET OR HAVE_SOCKET_LIBSOCKET) 159 SET(HAVE_LIBSOCKET TRUE) 160ENDIF () 161CARES_FUNCTION_IN_LIBRARY (socket network HAVE_LIBNETWORK) 162CARES_FUNCTION_IN_LIBRARY (clock_gettime rt HAVE_LIBRT) 163 164 165# Look for necessary includes 166CHECK_INCLUDE_FILES (sys/types.h HAVE_SYS_TYPES_H) 167CHECK_INCLUDE_FILES (sys/socket.h HAVE_SYS_SOCKET_H) 168CHECK_INCLUDE_FILES (sys/sockio.h HAVE_SYS_SOCKIO_H) 169CHECK_INCLUDE_FILES (arpa/inet.h HAVE_ARPA_INET_H) 170CHECK_INCLUDE_FILES (arpa/nameser_compat.h HAVE_ARPA_NAMESER_COMPAT_H) 171CHECK_INCLUDE_FILES (arpa/nameser.h HAVE_ARPA_NAMESER_H) 172CHECK_INCLUDE_FILES (assert.h HAVE_ASSERT_H) 173CHECK_INCLUDE_FILES (errno.h HAVE_ERRNO_H) 174CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H) 175CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H) 176CHECK_INCLUDE_FILES (limits.h HAVE_LIMITS_H) 177CHECK_INCLUDE_FILES (malloc.h HAVE_MALLOC_H) 178CHECK_INCLUDE_FILES (memory.h HAVE_MEMORY_H) 179CHECK_INCLUDE_FILES (netdb.h HAVE_NETDB_H) 180CHECK_INCLUDE_FILES (netinet/in.h HAVE_NETINET_IN_H) 181CHECK_INCLUDE_FILES (net/if.h HAVE_NET_IF_H) 182CHECK_INCLUDE_FILES (signal.h HAVE_SIGNAL_H) 183CHECK_INCLUDE_FILES (socket.h HAVE_SOCKET_H) 184CHECK_INCLUDE_FILES (stdbool.h HAVE_STDBOOL_H) 185CHECK_INCLUDE_FILES (stdint.h HAVE_STDINT_H) 186CHECK_INCLUDE_FILES (stdlib.h HAVE_STDLIB_H) 187CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H) 188CHECK_INCLUDE_FILES (string.h HAVE_STRING_H) 189CHECK_INCLUDE_FILES (stropts.h HAVE_STROPTS_H) 190CHECK_INCLUDE_FILES (sys/ioctl.h HAVE_SYS_IOCTL_H) 191CHECK_INCLUDE_FILES (sys/param.h HAVE_SYS_PARAM_H) 192CHECK_INCLUDE_FILES (sys/select.h HAVE_SYS_SELECT_H) 193CHECK_INCLUDE_FILES (sys/stat.h HAVE_SYS_STAT_H) 194CHECK_INCLUDE_FILES (sys/time.h HAVE_SYS_TIME_H) 195CHECK_INCLUDE_FILES (sys/uio.h HAVE_SYS_UIO_H) 196CHECK_INCLUDE_FILES (time.h HAVE_TIME_H) 197CHECK_INCLUDE_FILES (dlfcn.h HAVE_DLFCN_H) 198CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H) 199 200# On OpenBSD, you must include sys/types.h before netinet/tcp.h 201IF (HAVE_SYS_TYPES_H) 202 CHECK_INCLUDE_FILES ("sys/types.h;netinet/tcp.h" HAVE_NETINET_TCP_H) 203ELSE () 204 CHECK_INCLUDE_FILES (netinet/tcp.h HAVE_NETINET_TCP_H) 205ENDIF () 206 207# Include order matters for these windows files. 208# As cygwin environment has both socket.h and winsock2.h 209# headers check WIN32 not to include the later one here 210IF (WIN32) 211CHECK_INCLUDE_FILES ("winsock2.h;windows.h" HAVE_WINSOCK2_H) 212CHECK_INCLUDE_FILES ("winsock2.h;ws2tcpip.h;windows.h" HAVE_WS2TCPIP_H) 213CHECK_INCLUDE_FILES ("winsock.h;windows.h" HAVE_WINSOCK_H) 214CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H) 215ENDIF () 216 217# Set system-specific compiler flags 218IF (CMAKE_SYSTEM_NAME STREQUAL "Darwin") 219 LIST (APPEND SYSFLAGS -D_DARWIN_C_SOURCE) 220ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "Linux") 221 LIST (APPEND SYSFLAGS -D_GNU_SOURCE -D_POSIX_C_SOURCE=199309L -D_XOPEN_SOURCE=600) 222ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "SunOS") 223 LIST (APPEND SYSFLAGS -D__EXTENSIONS__ -D_REENTRANT -D_XOPEN_SOURCE=600) 224ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "AIX") 225 LIST (APPEND SYSFLAGS -D_ALL_SOURCE -D_XOPEN_SOURCE=600 -D_USE_IRS) 226ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") 227 # Don't define _XOPEN_SOURCE on FreeBSD, it actually reduces visibility instead of increasing it 228ELSEIF (WIN32) 229 LIST (APPEND SYSFLAGS -DWIN32_LEAN_AND_MEAN -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_WIN32_WINNT=0x0600) 230ENDIF () 231ADD_DEFINITIONS(${SYSFLAGS}) 232 233 234 235# Tell C-Ares about libraries to depend on 236IF (HAVE_LIBRESOLV) 237 LIST (APPEND CARES_DEPENDENT_LIBS resolv) 238ENDIF () 239IF (HAVE_LIBNSL) 240 LIST (APPEND CARES_DEPENDENT_LIBS nsl) 241ENDIF () 242IF (HAVE_LIBSOCKET) 243 LIST (APPEND CARES_DEPENDENT_LIBS socket) 244ENDIF () 245IF (HAVE_LIBNETWORK) 246 LIST (APPEND CARES_DEPENDENT_LIBS network) 247ENDIF () 248IF (HAVE_LIBRT) 249 LIST (APPEND CARES_DEPENDENT_LIBS rt) 250ENDIF () 251IF (WIN32) 252 LIST (APPEND CARES_DEPENDENT_LIBS ws2_32 advapi32 iphlpapi) 253ENDIF () 254 255 256# When checking for symbols, we need to make sure we set the proper 257# headers, libraries, and definitions for the detection to work properly 258# CMAKE_REQUIRED_DEFINITIONS, CMAKE_REQUIRED_LIBRARIES, and 259# CMAKE_EXTRA_INCLUDE_FILES. When we're done with the detection, we'll 260# unset them. 261 262SET (CMAKE_REQUIRED_DEFINITIONS ${SYSFLAGS}) 263LIST (APPEND CMAKE_REQUIRED_LIBRARIES ${CARES_DEPENDENT_LIBS}) 264 265MACRO (CARES_EXTRAINCLUDE_IFSET var include) 266 IF (${var}) 267 LIST (APPEND CMAKE_EXTRA_INCLUDE_FILES ${include}) 268 ENDIF () 269ENDMACRO () 270 271CARES_EXTRAINCLUDE_IFSET (HAVE_STDBOOL_H stdbool.h) 272CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_TYPES_H sys/types.h) 273CARES_EXTRAINCLUDE_IFSET (HAVE_ARPA_INET_H arpa/inet.h) 274CARES_EXTRAINCLUDE_IFSET (HAVE_ARPA_NAMESER_H arpa/nameser.h) 275CARES_EXTRAINCLUDE_IFSET (HAVE_NETDB_H netdb.h) 276CARES_EXTRAINCLUDE_IFSET (HAVE_NET_IF_H net/if.h) 277CARES_EXTRAINCLUDE_IFSET (HAVE_NETINET_IN_H netinet/in.h) 278CARES_EXTRAINCLUDE_IFSET (HAVE_NETINET_TCP_H netinet/tcp.h) 279CARES_EXTRAINCLUDE_IFSET (HAVE_SIGNAL_H signal.h) 280CARES_EXTRAINCLUDE_IFSET (HAVE_STDLIB_H stdlib.h) 281CARES_EXTRAINCLUDE_IFSET (HAVE_STRING_H string.h) 282CARES_EXTRAINCLUDE_IFSET (HAVE_STRINGS_H strings.h) 283CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_IOCTL_H sys/ioctl.h) 284CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_SELECT_H sys/select.h) 285CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_SOCKET_H sys/socket.h) 286CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_SOCKIO_H sys/sockio.h) 287CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_TIME_H sys/time.h) 288CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_UIO_H sys/uio.h) 289CARES_EXTRAINCLUDE_IFSET (HAVE_TIME_H time.h) 290CARES_EXTRAINCLUDE_IFSET (HAVE_FCNTL_H fcntl.h) 291CARES_EXTRAINCLUDE_IFSET (HAVE_UNISTD_H unistd.h) 292CARES_EXTRAINCLUDE_IFSET (HAVE_WINSOCK2_H winsock2.h) 293CARES_EXTRAINCLUDE_IFSET (HAVE_WS2TCPIP_H ws2tcpip.h) 294CARES_EXTRAINCLUDE_IFSET (HAVE_WINDOWS_H windows.h) 295 296# Check Types 297# CHECK_TYPE_SIZE can't be used to see if a type exists because on Apple when 298# building multi-arch, it will throw an error. So we need to wrap 299# CHECK_C_SOURCE_COMPILES for our tests. 300MACRO (CARES_TYPE_EXISTS type var) 301 SET(_CARES_C_SOURCE " 302 #include <stdio.h> 303 #include <stdlib.h> 304 ") 305 FOREACH(_C_HEADER ${CMAKE_EXTRA_INCLUDE_FILES}) 306 SET(_CARES_C_SOURCE "${_CARES_C_SOURCE} 307 #include <${_C_HEADER}>") 308 ENDFOREACH(_C_HEADER) 309 310 SET(_CARES_C_SOURCE "${_CARES_C_SOURCE} 311 int main() { 312 ${type} var_exists; 313 (void)var_exists; 314 return 0; 315 } 316 ") 317 CHECK_C_SOURCE_COMPILES ("${_CARES_C_SOURCE}" ${var}) 318ENDMACRO () 319 320CARES_TYPE_EXISTS (socklen_t HAVE_SOCKLEN_T) 321CARES_TYPE_EXISTS (SOCKET HAVE_TYPE_SOCKET) 322CARES_TYPE_EXISTS (bool HAVE_BOOL_T) 323CARES_TYPE_EXISTS (ssize_t HAVE_SSIZE_T) 324CARES_TYPE_EXISTS ("long long" HAVE_LONGLONG) 325CARES_TYPE_EXISTS (sig_atomic_t HAVE_SIG_ATOMIC_T) 326CARES_TYPE_EXISTS ("struct addrinfo" HAVE_STRUCT_ADDRINFO) 327CARES_TYPE_EXISTS ("struct in6_addr" HAVE_STRUCT_IN6_ADDR) 328CARES_TYPE_EXISTS ("struct sockaddr_in6" HAVE_STRUCT_SOCKADDR_IN6) 329CARES_TYPE_EXISTS ("struct sockaddr_storage" HAVE_STRUCT_SOCKADDR_STORAGE) 330CARES_TYPE_EXISTS ("struct timeval" HAVE_STRUCT_TIMEVAL) 331 332 333# Check for preprocessor defines 334CHECK_SYMBOL_EXISTS (AF_INET6 "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_AF_INET6) 335CHECK_SYMBOL_EXISTS (O_NONBLOCK "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_O_NONBLOCK) 336CHECK_SYMBOL_EXISTS (FIONBIO "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_FIONBIO) 337CHECK_SYMBOL_EXISTS (SIOCGIFADDR "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_IOCTL_SIOCGIFADDR) 338CHECK_SYMBOL_EXISTS (MSG_NOSIGNAL "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_MSG_NOSIGNAL) 339CHECK_SYMBOL_EXISTS (PF_INET6 "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_PF_INET6) 340CHECK_SYMBOL_EXISTS (SO_NONBLOCK "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SO_NONBLOCK) 341 342# XCode v8 bug: iOS when targeting less than v10, or MacOS when targeting less than v10.12 will 343# say clock_gettime exists, it is a weak symbol that only exists in iOS10/MacOS10.12 and will 344# cause a crash at runtime when running on older versions. Skip finding CLOCK_MONOTONIC on older 345# OS's. 346IF ((NOT APPLE) OR IOS_V10 OR MACOS_V1012) 347 CHECK_SYMBOL_EXISTS (CLOCK_MONOTONIC "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_CLOCK_GETTIME_MONOTONIC) 348ENDIF () 349 350CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in6" sin6_scope_id "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID LANGUAGE C) 351 352# Check for "LL" numeric suffix support 353CHECK_C_SOURCE_COMPILES ("int main() { int n=1234LL; return 0; }" HAVE_LL) 354 355 356CHECK_SYMBOL_EXISTS (bitncmp "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_BITNCMP) 357CHECK_SYMBOL_EXISTS (closesocket "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_CLOSESOCKET) 358CHECK_SYMBOL_EXISTS (CloseSocket "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_CLOSESOCKET_CAMEL) 359CHECK_SYMBOL_EXISTS (connect "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_CONNECT) 360CHECK_SYMBOL_EXISTS (fcntl "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_FCNTL) 361CHECK_SYMBOL_EXISTS (freeaddrinfo "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_FREEADDRINFO) 362CHECK_SYMBOL_EXISTS (getaddrinfo "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETADDRINFO) 363CHECK_SYMBOL_EXISTS (getenv "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETENV) 364CHECK_SYMBOL_EXISTS (gethostbyaddr "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETHOSTBYADDR) 365CHECK_SYMBOL_EXISTS (gethostbyname "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETHOSTBYNAME) 366CHECK_SYMBOL_EXISTS (gethostname "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETHOSTNAME) 367CHECK_SYMBOL_EXISTS (getnameinfo "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETNAMEINFO) 368CHECK_SYMBOL_EXISTS (getservbyport_r "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETSERVBYPORT_R) 369CHECK_SYMBOL_EXISTS (getservbyname_r "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETSERVBYNAME_R) 370CHECK_SYMBOL_EXISTS (gettimeofday "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETTIMEOFDAY) 371CHECK_SYMBOL_EXISTS (if_indextoname "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_IF_INDEXTONAME) 372CHECK_SYMBOL_EXISTS (inet_net_pton "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_INET_NET_PTON) 373IF (NOT WIN32) 374 # Disabled on Windows, because these functions are only really supported on Windows 375 # Vista or newer (_WIN32_WINNT >= 0x0600). Older versions of Windows may provide 376 # them as experimental non-working features, so we have to disable them manually. 377 CHECK_SYMBOL_EXISTS (inet_ntop "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_INET_NTOP) 378 CHECK_SYMBOL_EXISTS (inet_pton "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_INET_PTON) 379ENDIF () 380CHECK_SYMBOL_EXISTS (ioctl "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_IOCTL) 381CHECK_SYMBOL_EXISTS (ioctlsocket "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_IOCTLSOCKET) 382CHECK_SYMBOL_EXISTS (IoctlSocket "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_IOCTLSOCKET_CAMEL) 383CHECK_SYMBOL_EXISTS (recv "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_RECV) 384CHECK_SYMBOL_EXISTS (recvfrom "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_RECVFROM) 385CHECK_SYMBOL_EXISTS (send "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SEND) 386CHECK_SYMBOL_EXISTS (setsockopt "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SETSOCKOPT) 387CHECK_SYMBOL_EXISTS (socket "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKET) 388CHECK_SYMBOL_EXISTS (strcasecmp "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRCASECMP) 389CHECK_SYMBOL_EXISTS (strcmpi "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRCMPI) 390CHECK_SYMBOL_EXISTS (strdup "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRDUP) 391CHECK_SYMBOL_EXISTS (stricmp "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRICMP) 392CHECK_SYMBOL_EXISTS (strncasecmp "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRNCASECMP) 393CHECK_SYMBOL_EXISTS (strncmpi "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRNCMPI) 394CHECK_SYMBOL_EXISTS (strnicmp "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRNICMP) 395CHECK_SYMBOL_EXISTS (writev "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_WRITEV) 396CHECK_SYMBOL_EXISTS (arc4random_buf "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_ARC4RANDOM_BUF) 397 398 399# On Android, the system headers may define __system_property_get(), but excluded 400# from libc. We need to perform a link test instead of a header/symbol test. 401CHECK_FUNCTION_EXISTS (__system_property_get HAVE___SYSTEM_PROPERTY_GET) 402 403# Unset temporary data 404SET (CMAKE_EXTRA_INCLUDE_FILES) 405SET (CMAKE_REQUIRED_DEFINITIONS) 406SET (CMAKE_REQUIRED_LIBRARIES) 407 408 409################################################################################ 410# recv, recvfrom, send, getnameinfo, gethostname 411# ARGUMENTS AND RETURN VALUES 412# 413# The AutoTools build tries to be really thorough here. So much so that it 414# takes forever. We really don't want to do that. Lets make some educated 415# guesses based on datatypes we have available, and for others, use some 'sane' 416# defaults. This should be much quicker and nearly as accurate ... and even 417# if not, it probably won't matter in the least. 418 419IF (HAVE_SSIZE_T AND HAVE_SOCKLEN_T) 420 # If we have ssize_t and socklen_t, the API is usually sane and uses ssize_t and size_t for lengths 421 SET (RECVFROM_TYPE_RETV ssize_t) 422 SET (RECVFROM_TYPE_ARG3 size_t) 423ELSE () 424 SET (RECVFROM_TYPE_RETV int) 425 SET (RECVFROM_TYPE_ARG3 int) 426ENDIF () 427 428IF (HAVE_TYPE_SOCKET) 429 # If the SOCKET type is defined, it uses socket ... should be windows only 430 SET (RECVFROM_TYPE_ARG1 SOCKET) 431ELSE () 432 SET (RECVFROM_TYPE_ARG1 int) 433ENDIF() 434 435IF (HAVE_SOCKLEN_T) 436 # If we have socklen_t the APIs pretty much always actually use it 437 SET (RECVFROM_TYPE_ARG6 "socklen_t *") 438 SET (GETNAMEINFO_TYPE_ARG2 socklen_t) 439 SET (GETNAMEINFO_TYPE_ARG46 socklen_t) 440ELSE () 441 SET (RECVFROM_TYPE_ARG6 "int *") 442 SET (GETNAMEINFO_TYPE_ARG2 int) 443 SET (GETNAMEINFO_TYPE_ARG46 int) 444ENDIF () 445 446IF (WIN32) 447 SET (RECV_TYPE_ARG2 "char *") 448ELSE () 449 SET (RECV_TYPE_ARG2 "void *") 450ENDIF () 451 452# Functions are typically consistent so the equivalent fields map ... equivalently 453SET (RECV_TYPE_RETV ${RECVFROM_TYPE_RETV}) 454SET (SEND_TYPE_RETV ${RECVFROM_TYPE_RETV}) 455SET (RECV_TYPE_ARG1 ${RECVFROM_TYPE_ARG1}) 456SET (RECVFROM_TYPE_ARG2 ${RECV_TYPE_ARG2}) 457SET (SEND_TYPE_ARG1 ${RECVFROM_TYPE_ARG1}) 458SET (RECV_TYPE_ARG3 ${RECVFROM_TYPE_ARG3}) 459SET (SEND_TYPE_ARG3 ${RECVFROM_TYPE_ARG3}) 460SET (GETHOSTNAME_TYPE_ARG2 ${RECVFROM_TYPE_ARG3}) 461 462# These should always be "sane" values to use always 463SET (RECVFROM_QUAL_ARG5 ) 464SET (RECVFROM_TYPE_ARG4 int) 465SET (RECVFROM_TYPE_ARG5 "struct sockaddr *") 466SET (RECV_TYPE_ARG4 int) 467SET (GETNAMEINFO_TYPE_ARG1 "struct sockaddr *") 468SET (GETNAMEINFO_TYPE_ARG7 int) 469SET (SEND_TYPE_ARG2 "void *") 470SET (SEND_TYPE_ARG4 int) 471################################################################################ 472 473 474# HAVE_CXX11 ?? 475# HAVE_SIG_ATOMIC_T_VOLATILE ?? 476 477 478# Set a few variables by hand that C-Ares wants, logically, based on detection 479# data. 480 481IF (HAVE_SOCKLEN_T) 482 Set (CARES_TYPEOF_ARES_SOCKLEN_T "socklen_t") 483ELSE () 484 Set (CARES_TYPEOF_ARES_SOCKLEN_T "int") 485ENDIF () 486 487IF (HAVE_SSIZE_T) 488 Set (CARES_TYPEOF_ARES_SSIZE_T "ssize_t") 489ELSE () 490 IF (WIN32) 491 IF ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") 492 Set (CARES_TYPEOF_ARES_SSIZE_T "__int64") 493 ELSE () 494 Set (CARES_TYPEOF_ARES_SSIZE_T "int") 495 ENDIF () 496 ELSE () 497 Set (CARES_TYPEOF_ARES_SSIZE_T "long") 498 ENDIF () 499ENDIF () 500 501IF (HAVE_FCNTL AND HAVE_O_NONBLOCK) 502 SET (HAVE_FCNTL_O_NONBLOCK 1) 503ENDIF () 504 505IF (HAVE_IOCTL AND HAVE_FIONBIO) 506 SET (HAVE_IOCTL_FIONBIO 1) 507ENDIF () 508 509IF (HAVE_IOCTLSOCKET AND HAVE_FIONBIO) 510 SET (HAVE_IOCTLSOCKET_FIONBIO 1) 511ENDIF () 512 513IF (HAVE_IOCTLSOCKET_CAMEL AND HAVE_FIONBIO) 514 SET (HAVE_IOCTLSOCKET_CAMEL_FIONBIO 1) 515ENDIF () 516 517IF (HAVE_GETADDRINFO) 518 IF (CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR 519 CMAKE_SYSTEM_NAME STREQUAL "HPUX" OR 520 CMAKE_SYSTEM_NAME STREQUAL "NetBSD" OR 521 CMAKE_SYSTEM_NAME STREQUAL "SunOS" OR 522 CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR 523 CMAKE_SYSTEM_NAME STREQUAL "AIX" OR 524 WIN32) 525 SET (HAVE_GETADDRINFO_THREADSAFE 1) 526 ENDIF () 527ENDIF () 528 529IF (HAVE_TIME_H AND HAVE_SYS_TIME_H) 530 SET (TIME_WITH_SYS_TIME 1) 531ENDIF () 532 533IF (HAVE_GETSERVBYPORT_R) 534 # TODO : Should probably autodetect 535 IF (CMAKE_SYSTEM_NAME STREQUAL "SunOS") 536 SET (GETSERVBYPORT_R_ARGS 5) 537 ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "AIX" OR 538 CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" OR 539 HAIKU) 540 SET (GETSERVBYPORT_R_ARGS 4) 541 ELSE () 542 # Probably linux 543 SET (GETSERVBYPORT_R_ARGS 6) 544 ENDIF () 545ENDIF () 546 547IF (HAVE_GETSERVBYNAME_R) 548 # TODO : Should probably autodetect 549 IF (CMAKE_SYSTEM_NAME STREQUAL "SunOS") 550 SET (GETSERVBYNAME_R_ARGS 5) 551 ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "AIX" OR 552 CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" OR 553 HAIKU) 554 SET (GETSERVBYNAME_R_ARGS 4) 555 ELSE () 556 # Probably linux 557 SET (GETSERVBYNAME_R_ARGS 6) 558 ENDIF () 559ENDIF () 560 561# Set some aliases used for ares_build.h 562IF (HAVE_SYS_TYPES_H) 563 SET (CARES_HAVE_SYS_TYPES_H 1) 564ENDIF () 565IF (HAVE_SYS_SOCKET_H) 566 SET (CARES_HAVE_SYS_SOCKET_H 1) 567ENDIF() 568IF (HAVE_WS2TCPIP_H) 569 SET (CARES_HAVE_WS2TCPIP_H 1) 570ENDIF() 571IF (HAVE_WINSOCK2_H) 572 SET (CARES_HAVE_WINSOCK2_H 1) 573ENDIF() 574IF (HAVE_WINDOWS_H) 575 SET (CARES_HAVE_WINDOWS_H 1) 576ENDIF() 577IF (HAVE_ARPA_NAMESER_H) 578 SET (CARES_HAVE_ARPA_NAMESER_H 1) 579ENDIF() 580IF (HAVE_ARPA_NAMESER_COMPAT_H) 581 SET (CARES_HAVE_ARPA_NAMESER_COMPAT_H 1) 582ENDIF() 583 584# Record toplevel CMakeLists.txt path 585set(CARES_TOPLEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}") 586 587 588# TRANSFORM_MAKEFILE_INC 589# 590# This function consumes the "Makefile.inc" autotools file, and converts it into 591# "Makefile.inc.cmake", a cmake include file; transforming this: 592# 593# CSOURCES = ares__close_sockets.c \ 594# ares__get_hostent.c \ 595# ares__read_line.c \ 596# ... 597# 598# into this: 599# 600# SET (CSOURCES 601# ares__close_sockets.c 602# ares__get_hostent.c 603# ares__read_line.c 604# ... 605function(TRANSFORM_MAKEFILE_INC INPUT_FILE OUTPUT_FILE) 606 file(READ ${INPUT_FILE} MAKEFILE_INC_TEXT) 607 string(REPLACE "$(top_srcdir)" "\${PROJECT_SOURCE_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) 608 string(REPLACE "$(top_builddir)" "\${PROJECT_BINARY_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) 609 610 string(REGEX REPLACE "\\\\\n" "ß!ß" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) 611 string(REGEX REPLACE "([a-zA-Z_][a-zA-Z0-9_]*)[\t ]*=[\t ]*([^\n]*)" "SET(\\1 \\2)" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) 612 string(REPLACE "ß!ß" "\n" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) 613 614 string(REGEX REPLACE "\\$\\(([a-zA-Z_][a-zA-Z0-9_]*)\\)" "\${\\1}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Replace $() with ${} 615 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. 616 file(WRITE ${OUTPUT_FILE} ${MAKEFILE_INC_TEXT}) 617endfunction() 618 619# Directory for includes 620ADD_SUBDIRECTORY (include) 621 622# Directory for lib and tools 623ADD_SUBDIRECTORY (src) 624 625# Docs 626ADD_SUBDIRECTORY (docs) 627 628# Tests 629IF (CARES_BUILD_TESTS OR CARES_BUILD_CONTAINER_TESTS) 630 ENABLE_TESTING () 631 ADD_SUBDIRECTORY (test) 632ENDIF () 633 634 635# Export targets 636IF (CARES_INSTALL) 637 SET (CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") 638 INCLUDE (CMakePackageConfigHelpers) 639 CONFIGURE_PACKAGE_CONFIG_FILE (${PROJECT_NAME}-config.cmake.in ${PROJECT_NAME}-config.cmake 640 INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR} 641 PATH_VARS CMAKE_INSTALL_INCLUDEDIR 642 NO_CHECK_REQUIRED_COMPONENTS_MACRO 643 ) 644 645 WRITE_BASIC_PACKAGE_VERSION_FILE(${PROJECT_NAME}-config-version.cmake VERSION "${CARES_VERSION}" COMPATIBILITY SameMajorVersion) 646 INSTALL (EXPORT ${PROJECT_NAME}-targets COMPONENT Devel DESTINATION ${CMAKECONFIG_INSTALL_DIR} NAMESPACE ${PROJECT_NAME}::) 647 INSTALL (FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" COMPONENT Devel DESTINATION ${CMAKECONFIG_INSTALL_DIR}) 648 649 # pkgconfig support 650 IF (NOT CARES_SHARED) 651 SET (CPPFLAG_CARES_STATICLIB "-DCARES_STATICLIB") 652 FOREACH (LIB ${CARES_DEPENDENT_LIBS}) 653 SET (CARES_PRIVATE_LIBS "${CARES_PRIVATE_LIBS} -l${LIB}") 654 ENDFOREACH () 655 ENDIF () 656 CONFIGURE_FILE("libcares.pc.cmake" "libcares.pc" @ONLY) 657 INSTALL (FILES "${CMAKE_CURRENT_BINARY_DIR}/libcares.pc" COMPONENT Devel DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") 658ENDIF () 659 660 661# Legacy chain-building variables (provided for compatibility with old code). 662# Don't use these, external code should be updated to refer to the aliases directly (e.g., Cares::cares). 663SET (CARES_FOUND 1 CACHE INTERNAL "CARES LIBRARY FOUND") 664SET (CARES_LIBRARIES ${PROJECT_NAME}::cares CACHE INTERNAL "CARES LIBRARIES") 665 666 667IF (CARES_INSTALL) 668 # Package creation 669 set( CPACK_PACKAGE_NAME ${PROJECT_NAME} ) 670 set( CPACK_PACKAGE_VENDOR "Daniel Stenberg" ) # Github project owner 671 set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "A C library for asynchronous DNS requests" ) 672 set( CPACK_PACKAGE_HOMEPAGE_URL "https://c-ares.org/" ) 673 set( CPACK_PACKAGE_CONTACT "https://c-ares.org/" ) 674 set( CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR} ) 675 set( CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR} ) 676 set( CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH} ) 677 set( CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH} ) 678 set( CPACK_PACKAGE_INSTALL_DIRECTORY ${PROJECT_NAME} ) 679 set( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md" ) 680 set( CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md" ) 681 682 set( CPACK_COMPONENT_Library_DISPLAY_NAME "c-ares Library" ) 683 set( CPACK_COMPONENT_Library_DESCRIPTION "The c-ares binary library." ) 684 set( CPACK_COMPONENT_Library_REQUIRED 1 ) 685 set( CPACK_COMPONENT_Devel_DISPLAY_NAME "c-ares Development Files" ) 686 set( CPACK_COMPONENT_Devel_DESCRIPTION "Development files for compiling against c-ares." ) 687 set( CPACK_COMPONENT_Devel_REQUIRED 0 ) 688 IF (CARES_BUILD_TOOLS) 689 set( CPACK_COMPONENT_Tools_DISPLAY_NAME "c-ares Tools" ) 690 set( CPACK_COMPONENT_Tools_DESCRIPTION "Tools for using c-ares." ) 691 set( CPACK_COMPONENT_Tools_REQUIRED 0 ) 692 ENDIF () 693 694 if( ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" ) 695 696 if ( "${CPACK_PACKAGE_ARCHITECTURE}" STREQUAL "" ) 697 set( CPACK_PACKAGE_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}" ) 698 endif() 699 if ( "${CPACK_PACKAGE_ARCHITECTURE}" STREQUAL "" ) 700 if ( "${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows" ) 701 message( FATAL_ERROR "Failed to determine CPACK_PACKAGE_ARCHITECTURE. Is CMAKE_SYSTEM_PROCESSOR set?" ) 702 endif() 703 # Note: the architecture should default to the local architecture, but it 704 # in fact comes up empty. We call `uname -m` to ask the kernel instead. 705 EXECUTE_PROCESS( COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE ) 706 endif() 707 708 set( CPACK_INCLUDE_TOPLEVEL_DIRECTORY 1 ) 709 set( CPACK_PACKAGE_RELEASE 1 ) 710 711 712 # RPM - https://cmake.org/cmake/help/latest/cpack_gen/rpm.html 713 set( CPACK_RPM_PACKAGE_RELEASE ${CPACK_PACKAGE_RELEASE} ) 714 set( CPACK_RPM_PACKAGE_ARCHITECTURE ${CPACK_PACKAGE_ARCHITECTURE} ) 715 set( CPACK_RPM_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION_SUMMARY} ) 716 set( CPACK_RPM_PACKAGE_URL ${CPACK_PACKAGE_HOMEPAGE_URL} ) 717 set( CPACK_RPM_PACKAGE_LICENSE "MIT" ) 718 set( CPACK_RPM_COMPONENT_INSTALL 1 ) 719 set( CPACK_RPM_COMPRESSION_TYPE "xz" ) 720 set( CPACK_RPM_PACKAGE_AUTOPROV 1 ) 721 722 set( CPACK_RPM_Library_PACKAGE_SUMMARY ${CPACK_COMPONENT_Library_DESCRIPTION} ) 723 set( CPACK_RPM_Library_PACKAGE_ARCHITECTURE ${CPACK_RPM_PACKAGE_ARCHITECTURE} ) 724 set( CPACK_RPM_Library_PACKAGE_NAME "libcares${CARES_LIB_VERSION_MAJOR}" ) 725 set( CPACK_RPM_Library_FILE_NAME "RPM-DEFAULT" ) 726 727 set( CPACK_RPM_Devel_PACKAGE_REQUIRES "cmake >= ${CMAKE_MINIMUM_REQUIRED_VERSION}, ${CPACK_RPM_Library_PACKAGE_NAME} >= ${CPACK_PACKAGE_VERSION}" ) 728 set( CPACK_RPM_Devel_PACKAGE_SUMMARY ${CPACK_COMPONENT_Devel_DESCRIPTION} ) 729 set( CPACK_RPM_Devel_PACKAGE_ARCHITECTURE ${CPACK_RPM_PACKAGE_ARCHITECTURE} ) 730 set( CPACK_RPM_Devel_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-devel" ) 731 set( CPACK_RPM_Devel_FILE_NAME "RPM-DEFAULT" ) 732 733 IF (CARES_BUILD_TOOLS) 734 set( CPACK_RPM_Tools_PACKAGE_REQUIRES "${CPACK_RPM_Library_PACKAGE_NAME} >= ${CPACK_PACKAGE_VERSION}" ) 735 set( CPACK_RPM_Tools_PACKAGE_SUMMARY ${CPACK_COMPONENT_Tools_DESCRIPTION} ) 736 set( CPACK_RPM_Tools_PACKAGE_ARCHITECTURE ${CPACK_RPM_PACKAGE_ARCHITECTURE} ) 737 set( CPACK_RPM_Tools_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-tools" ) 738 set( CPACK_RPM_Tools_FILE_NAME "RPM-DEFAULT" ) 739 ENDIF () 740 741 742 # DEB - https://cmake.org/cmake/help/latest/cpack_gen/deb.html 743 set( CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_PACKAGE_RELEASE} ) 744 set( CPACK_DEBIAN_PACKAGE_HOMEPAGE ${CPACK_PACKAGE_HOMEPAGE_URL} ) 745 set( CPACK_DEB_COMPONENT_INSTALL 1 ) 746 set( CPACK_DEBIAN_COMPRESSION_TYPE "xz") 747 set( CPACK_DEBIAN_PACKAGE_SHLIBDEPS 1 ) 748 749 if ( ${CPACK_PACKAGE_ARCHITECTURE} STREQUAL "x86_64" ) 750 set( CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64" ) # DEB doesn't always use the kernel's arch name 751 else() 752 set( CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${CPACK_PACKAGE_ARCHITECTURE} ) 753 endif() 754 755 set( CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT" ) # Use default naming scheme 756 757 set( CPACK_DEBIAN_LIBRARY_PACKAGE_NAME ${CPACK_RPM_Library_PACKAGE_NAME} ) 758 759 set( CPACK_DEBIAN_DEVEL_PACKAGE_DEPENDS "cmake (>= ${CMAKE_MINIMUM_REQUIRED_VERSION}), ${CPACK_DEBIAN_LIBRARY_PACKAGE_NAME} (>= ${CPACK_PACKAGE_VERSION})" ) 760 set( CPACK_DEBIAN_DEVEL_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-dev" ) 761 762 IF (CARES_BUILD_TOOLS) 763 set( CPACK_DEBIAN_TOOLS_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-tools" ) 764 set( CPACK_DEBIAN_TOOLS_PACKAGE_SHLIBDEPS OFF ) # dpkg-shlibdeps can't find the libs we built 765 set( CPACK_DEBIAN_TOOLS_PACKAGE_DEPENDS "${CPACK_DEBIAN_LIBRARY_PACKAGE_NAME} (>= ${CPACK_PACKAGE_VERSION})" ) 766 ENDIF () 767 768 elseif( ${CMAKE_HOST_WIN32} ) 769 set( CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON ) 770 set( CPACK_NSIS_DISPLAY_NAME ${PROJECT_NAME} ) 771 set( CPACK_NSIS_PACKAGE_NAME ${PROJECT_NAME} ) 772 set( CPACK_NSIS_URL_INFO_ABOUT ${CPACK_PACKAGE_HOMEPAGE_URL} ) 773 endif() 774 775 # This must always be last! 776 include( CPack ) 777ENDIF () 778