From abbd5c0bdb5541aa8c75beea9e8a119297b6d76f Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 18:39:15 -0400 Subject: [PATCH] unbound: import cmake build system --- CMakeLists.txt | 1 + external/CMakeLists.txt | 88 +- external/unbound/CMakeLists.txt | 180 ++++ external/unbound/config.h.cmake.in | 1034 +++++++++++++++++++++++ external/unbound/configure_checks.cmake | 208 +++++ 5 files changed, 1429 insertions(+), 82 deletions(-) create mode 100644 external/unbound/CMakeLists.txt create mode 100644 external/unbound/config.h.cmake.in create mode 100644 external/unbound/configure_checks.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f57f8ca0..d9dff16ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -117,6 +117,7 @@ endif() # Final setup for libunbound include_directories(${UNBOUND_INCLUDE}) +link_directories(${UNBOUND_LIBRARY_DIRS}) if(MSVC) add_definitions("/bigobj /MP /W3 /GS- /D_CRT_SECURE_NO_WARNINGS /wd4996 /wd4345 /D_WIN32_WINNT=0x0600 /DWIN32_LEAN_AND_MEAN /DGTEST_HAS_TR1_TUPLE=0 /FIinline_c.h /D__SSE4_1__") diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index b1fa8b2ff..eaac66cd0 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -78,90 +78,13 @@ endif() find_package(Unbound) -IF(!UNBOUND_INCLUDE_DIR OR STATIC) - if(STATIC) - message(STATUS "Using libunbound from local source tree for static build") - else() - message(STATUS "Using libunbound from local source tree (/external/unbound)") - endif() - - INCLUDE(ExternalProject) - - FIND_PACKAGE(OpenSSL QUIET) - IF(!OPENSSL_LIBRARIES) - die("Could not find the openssl library. Please make sure you have installed openssl or libssl-dev or the equivalent") - ELSE() - MESSAGE(STATUS "Found openssl libraries") - ENDIF() +IF(NOT UNBOUND_INCLUDE_DIR OR STATIC) + add_subdirectory(unbound) - FIND_PACKAGE(Expat QUIET) - IF(!EXPAT_LIBRARIES) - die("Could not find the expat library. Please make sure you have installed libexpat or libexpat-dev or the equivalent") - ELSE() - MESSAGE(STATUS "Found expat libraries") - ENDIF() - - IF(MINGW) - set(ENV{USE_WINSOCK} 1) - set(ENV{CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) - set(ENV{GCC_PREFIX} ${GCC_PREFIX}) - set(ENV{CMAKE_FIND_ROOT_PATH} ${CMAKE_FIND_ROOT_PATH}) - EXTERNALPROJECT_ADD( - libunbound - PREFIX ${CMAKE_CURRENT_BINARY_DIR}/unbound - URL ${CMAKE_CURRENT_SOURCE_DIR}/unbound/ - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/unbound/monero-config.sh - BUILD_COMMAND $(MAKE) - UPDATE_COMMAND "" - PATCH_COMMAND "" - INSTALL_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build/libtool --mode=install cp ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build/libunbound.la ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build - LOG_DOWNLOAD 1 - LOG_UPDATE 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_TEST 1 - LOG_INSTALL 1 - ) - ELSEIF(APPLE) - execute_process(COMMAND brew --prefix OUTPUT_VARIABLE BREW_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE) - EXTERNALPROJECT_ADD( - libunbound - PREFIX ${CMAKE_CURRENT_BINARY_DIR}/unbound - URL ${CMAKE_CURRENT_SOURCE_DIR}/unbound/ - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/unbound/configure --prefix=${BREW_PREFIX} --enable-shared --enable-static --disable-gost --disable-rpath --with-libevent=no --without-pyunbound --without-pythonmodule --without-pthreads --with-libunbound-only - BUILD_COMMAND $(MAKE) - UPDATE_COMMAND "" - PATCH_COMMAND "" - INSTALL_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build/libtool --mode=install cp ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build/libunbound.la ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build - LOG_DOWNLOAD 1 - LOG_UPDATE 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_TEST 1 - LOG_INSTALL 1 - ) - ELSE() - EXTERNALPROJECT_ADD( - libunbound - PREFIX ${CMAKE_CURRENT_BINARY_DIR}/unbound - URL ${CMAKE_CURRENT_SOURCE_DIR}/unbound/ - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/unbound/configure --disable-shared --enable-static --disable-gost --disable-rpath --with-libevent=no --without-pyunbound --without-pythonmodule --without-pthreads --with-libunbound-only - BUILD_COMMAND $(MAKE) - UPDATE_COMMAND "" - PATCH_COMMAND "" - INSTALL_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build/libtool --mode=install cp ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build/libunbound.la ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build - LOG_DOWNLOAD 1 - LOG_UPDATE 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_TEST 1 - LOG_INSTALL 1 - ) - ENDIF() - set(UNBOUND_STATIC true PARENT_SCOPE) - set(UNBOUND_INCLUDE "${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build" PARENT_SCOPE) - set(UNBOUND_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build/libunbound.a;${OPENSSL_LIBRARIES}" PARENT_SCOPE) + set(UNBOUND_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/unbound/libunbound" PARENT_SCOPE) + set(UNBOUND_LIBRARY "unbound" PARENT_SCOPE) + set(UNBOUND_LIBRARY_DIRS "${LIBEVENT2_LIBRARY_DIRS}" PARENT_SCOPE) ELSE() MESSAGE(STATUS "Found libunbound include (unbound.h) in ${UNBOUND_INCLUDE_DIR}") IF(UNBOUND_LIBRARIES) @@ -169,6 +92,7 @@ ELSE() set(UNBOUND_STATIC false PARENT_SCOPE) set(UNBOUND_INCLUDE ${UNBOUND_INCLUDE_DIR} PARENT_SCOPE) set(UNBOUND_LIBRARY ${UNBOUND_LIBRARIES} PARENT_SCOPE) + set(UNBOUND_LIBRARY_DIRS "" PARENT_SCOPE) ELSE() die("Found libunbound includes, but could not find libunbound library. Please make sure you have installed libunbound or libunbound-dev or the equivalent") ENDIF() diff --git a/external/unbound/CMakeLists.txt b/external/unbound/CMakeLists.txt new file mode 100644 index 000000000..a81e80314 --- /dev/null +++ b/external/unbound/CMakeLists.txt @@ -0,0 +1,180 @@ +cmake_minimum_required(VERSION 2.8.8) + +project(unbound C) + +find_package(OpenSSL REQUIRED) +find_package(Threads) + +include(configure_checks.cmake) + +if (WIN32) + set(USE_MINI_EVENT 1) + set(USE_WINSOCK 1) +else () + find_package(PkgConfig REQUIRED) + pkg_check_modules(LIBEVENT2 REQUIRED libevent) +endif () + +set(RETSIGTYPE void) + +add_definitions(-D_GNU_SOURCE) + +option(USE_ECDSA "Use ECDSA algorithms" ON) +option(USE_SHA2 "Enable SHA2 support" ON) +set(ENABLE_DNSTAP 0) +set(HAVE_SSL 1) +if (CMAKE_USE_PTHREADS_INIT AND NOT CMAKE_USE_WIN32_THREADS_INIT) + set(HAVE_PTHREAD 1) +else () + set(HAVE_PTHREAD 0) +endif () +if (CMAKE_USE_WIN32_THREADS_INIT) + set(HAVE_WINDOWS_THREADS 1) +else () + set(HAVE_WINDOWS_THREADS 0) +endif () +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/config.h") +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/dnstap/dnstap_config.h.in" + "${CMAKE_CURRENT_BINARY_DIR}/dnstap/dnstap_config.h") + +set(common_src + services/cache/dns.c + services/cache/infra.c + services/cache/rrset.c + util/data/dname.c + util/data/msgencode.c + util/data/msgparse.c + util/data/msgreply.c + util/data/packed_rrset.c + iterator/iterator.c + iterator/iter_delegpt.c + iterator/iter_donotq.c + iterator/iter_fwd.c + iterator/iter_hints.c + iterator/iter_priv.c + iterator/iter_resptype.c + iterator/iter_scrub.c + iterator/iter_utils.c + services/listen_dnsport.c + services/localzone.c + services/mesh.c + services/modstack.c + services/outbound_list.c + services/outside_network.c + util/alloc.c + util/config_file.c + util/configlexer.c + util/configparser.c + util/fptr_wlist.c + util/locks.c + util/log.c + util/mini_event.c + util/module.c + util/netevent.c + util/net_help.c + util/random.c + util/rbtree.c + util/regional.c + util/rtt.c + util/storage/dnstree.c + util/storage/lookup3.c + util/storage/lruhash.c + util/storage/slabhash.c + util/timehist.c + util/tube.c + util/winsock_event.c + validator/autotrust.c + validator/val_anchor.c + validator/validator.c + validator/val_kcache.c + validator/val_kentry.c + validator/val_neg.c + validator/val_nsec3.c + validator/val_nsec.c + validator/val_secalgo.c + validator/val_sigcrypt.c + validator/val_utils.c + dns64/dns64.c + + #$(CHECKLOCK_SRC) + testcode/checklocks.c) + +set(compat_src) + +foreach (symbol IN ITEMS ctime_r gmtime_r inet_aton inet_ntop inet_pton malloc memcmp memmove snprintf strlcat strlcpy strptime explicit_bzero arc4random arc4random_uniform sha512) + string(TOUPPER "${symbol}" upper_sym) + if (NOT HAVE_${upper_sym}) + list(APPEND compat_src + compat/${symbol}.c) + endif () +endforeach () + +if (NOT HAVE_ARC4RANDOM) + list(APPEND compat_src + compat/arc4_lock.c) +endif () + +if (CMAKE_SYSTEM_NAME MATCHES "Linux") + list(APPEND compat_src + compat/getentropy_linux.c) +elseif (APPLE) + list(APPEND compat_src + compat/getentropy_osx.c) +#elseif (SunOS) +# list(APPEND compat_src +# compat/getentropy_solaris.c) +elseif (WIN32) + list(APPEND compat_src + compat/getentropy_win.c) +endif () + +if (NOT HAVE_GETADDRINFO) + list(APPEND compat_src + compat/fake-rfc2553.c) +endif () + +set(sldns_src + ldns/keyraw.c + ldns/sbuffer.c + ldns/wire2str.c + ldns/parse.c + ldns/parseutil.c + ldns/rrdef.c + ldns/str2wire.c) + +set(libunbound_src + libunbound/context.c + libunbound/libunbound.c + libunbound/libworker.c) + +include_directories("${CMAKE_CURRENT_SOURCE_DIR}") +include_directories("${CMAKE_CURRENT_BINARY_DIR}") +include_directories(SYSTEM ${OPENSSL_INCLUDE_DIR}) +if (LIBEVENT2_FOUND) + include_directories(SYSTEM ${LIBEVENT2_INCLUDE_DIRS}) + link_directories(${LIBEVENT2_LIBRARY_DIRS}) +endif () +add_library(unbound + ${common_src} + ${sldns_src} + ${compat_src} + ${libunbound_src}) +target_link_libraries(unbound + PRIVATE + ${OPENSSL_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT}) +if (LIBEVENT2_FOUND) + target_link_libraries(unbound + PRIVATE + ${LIBEVENT2_LIBRARIES}) +endif () + +if (WIN32) + target_link_libraries(unbound + PRIVATE + iphlpapi + ws2_32) +endif () diff --git a/external/unbound/config.h.cmake.in b/external/unbound/config.h.cmake.in new file mode 100644 index 000000000..827503b6e --- /dev/null +++ b/external/unbound/config.h.cmake.in @@ -0,0 +1,1034 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* define if a library can reference the 'main' symbol */ +#cmakedefine CAN_REFERENCE_MAIN + +/* Directory to chroot to */ +#define CHROOT_DIR "@UNBOUND_CHROOT_DIR@" + +/* Do sha512 definitions in config.h */ +#cmakedefine COMPAT_SHA512 + +/* Pathname to the Unbound configuration file */ +#define CONFIGFILE "@UNBOUND_CONFIGFILE@" + +/* Define this if on macOSX10.4-darwin8 and setreuid and setregid do not work + */ +#cmakedefine DARWIN_BROKEN_SETREUID + +/* Whether daemon is deprecated */ +#cmakedefine DEPRECATED_DAEMON + +/* default dnstap socket path */ +#cmakedefine DNSTAP_SOCKET_PATH + +/* Define if you want to use debug lock checking (slow). */ +#cmakedefine ENABLE_LOCK_CHECKS + +/* Define this if you enabled-allsymbols from libunbound to link binaries to + it for smaller install size, but the libunbound export table is polluted by + internal symbols */ +#cmakedefine EXPORT_ALL_SYMBOLS + +/* Define to 1 if you have the `arc4random' function. */ +#cmakedefine HAVE_ARC4RANDOM + +/* Define to 1 if you have the `arc4random_uniform' function. */ +#cmakedefine HAVE_ARC4RANDOM_UNIFORM + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ARPA_INET_H + +/* Whether the C compiler accepts the "format" attribute */ +#cmakedefine HAVE_ATTR_FORMAT + +/* Whether the C compiler accepts the "unused" attribute */ +#cmakedefine HAVE_ATTR_UNUSED + +/* Define to 1 if your system has a working `chown' function. */ +#cmakedefine HAVE_CHOWN + +/* Define to 1 if you have the `chroot' function. */ +#cmakedefine HAVE_CHROOT + +/* Define to 1 if you have the `ctime_r' function. */ +#cmakedefine HAVE_CTIME_R + +/* Define to 1 if you have the `daemon' function. */ +#cmakedefine HAVE_DAEMON + +/* Define to 1 if you have the declaration of `arc4random', and to 0 if you + don't. */ +#cmakedefine HAVE_DECL_ARC4RANDOM + +/* Define to 1 if you have the declaration of `arc4random_uniform', and to 0 + if you don't. */ +#cmakedefine HAVE_DECL_ARC4RANDOM_UNIFORM + +/* Define to 1 if you have the declaration of `NID_secp384r1', and to 0 if you + don't. */ +#cmakedefine HAVE_DECL_NID_SECP384R1 + +/* Define to 1 if you have the declaration of `NID_X9_62_prime256v1', and to 0 + if you don't. */ +#cmakedefine HAVE_DECL_NID_X9_62_PRIME256V1 + +/* Define to 1 if you have the declaration of `sk_SSL_COMP_pop_free', and to 0 + if you don't. */ +#cmakedefine HAVE_DECL_SK_SSL_COMP_POP_FREE + +/* Define to 1 if you have the declaration of + `SSL_COMP_get_compression_methods', and to 0 if you don't. */ +#cmakedefine HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS + +/* Define to 1 if you have the declaration of `strlcat', and to 0 if you + don't. */ +#cmakedefine HAVE_DECL_STRLCAT + +/* Define to 1 if you have the declaration of `strlcpy', and to 0 if you + don't. */ +#cmakedefine HAVE_DECL_STRLCPY + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ENDIAN_H + +/* Define to 1 if you have the `endprotoent' function. */ +#cmakedefine HAVE_ENDPROTOENT + +/* Define to 1 if you have the `endservent' function. */ +#cmakedefine HAVE_ENDSERVENT + +/* Define to 1 if you have the `event_base_free' function. */ +#cmakedefine HAVE_EVENT_BASE_FREE + +/* Define to 1 if you have the `event_base_get_method' function. */ +#cmakedefine HAVE_EVENT_BASE_GET_METHOD + +/* Define to 1 if you have the `event_base_new' function. */ +#cmakedefine HAVE_EVENT_BASE_NEW + +/* Define to 1 if you have the `event_base_once' function. */ +#cmakedefine HAVE_EVENT_BASE_ONCE + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_EVENT_H + +/* Define to 1 if you have the `EVP_sha1' function. */ +#cmakedefine HAVE_EVP_SHA1 + +/* Define to 1 if you have the `EVP_sha256' function. */ +#cmakedefine HAVE_EVP_SHA256 + +/* Define to 1 if you have the `EVP_sha512' function. */ +#cmakedefine HAVE_EVP_SHA512 + +/* Define to 1 if you have the `ev_default_loop' function. */ +#cmakedefine HAVE_EV_DEFAULT_LOOP + +/* Define to 1 if you have the `ev_loop' function. */ +#cmakedefine HAVE_EV_LOOP + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_EXPAT_H + +/* Define to 1 if you have the `fcntl' function. */ +#cmakedefine HAVE_FCNTL + +/* Define to 1 if you have the `FIPS_mode' function. */ +#cmakedefine HAVE_FIPS_MODE + +/* Define to 1 if you have the `fork' function. */ +#cmakedefine HAVE_FORK + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#cmakedefine HAVE_FSEEKO + +/* Whether getaddrinfo is available */ +#cmakedefine HAVE_GETADDRINFO + +/* Define to 1 if you have the `getentropy' function. */ +#cmakedefine HAVE_GETENTROPY + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_GETOPT_H + +/* Define to 1 if you have the `getpwnam' function. */ +#cmakedefine HAVE_GETPWNAM + +/* Define to 1 if you have the `getrlimit' function. */ +#cmakedefine HAVE_GETRLIMIT + +/* Define to 1 if you have the `glob' function. */ +#cmakedefine HAVE_GLOB + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_GLOB_H + +/* Define to 1 if you have the `gmtime_r' function. */ +#cmakedefine HAVE_GMTIME_R + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_GRP_H + +/* If you have HMAC_CTX_init */ +#cmakedefine HAVE_HMAC_CTX_INIT + +/* Define to 1 if you have the `inet_aton' function. */ +#cmakedefine HAVE_INET_ATON + +/* Define to 1 if you have the `inet_ntop' function. */ +#cmakedefine HAVE_INET_NTOP + +/* Define to 1 if you have the `inet_pton' function. */ +#cmakedefine HAVE_INET_PTON + +/* Define to 1 if you have the `initgroups' function. */ +#cmakedefine HAVE_INITGROUPS + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_INTTYPES_H + +/* if the function 'ioctlsocket' is available */ +#cmakedefine HAVE_IOCTLSOCKET + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_IPHLPAPI_H + +/* Define to 1 if you have the `kill' function. */ +#cmakedefine HAVE_KILL + +/* Define if we have LibreSSL */ +#cmakedefine HAVE_LIBRESSL + +/* Define to 1 if you have the `localtime_r' function. */ +#cmakedefine HAVE_LOCALTIME_R + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LOGIN_CAP_H + +/* If have GNU libc compatible malloc */ +#cmakedefine HAVE_MALLOC + +/* Define to 1 if you have the `memmove' function. */ +#cmakedefine HAVE_MEMMOVE + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_NETDB_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_NETINET_IN_H + +/* Use libnss for crypto */ +#cmakedefine HAVE_NSS + +/* Define to 1 if you have the `OPENSSL_config' function. */ +#cmakedefine HAVE_OPENSSL_CONFIG + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_OPENSSL_CONF_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_OPENSSL_ENGINE_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_OPENSSL_ERR_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_OPENSSL_RAND_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_OPENSSL_SSL_H + +/* Define if you have POSIX threads libraries and header files. */ +#cmakedefine HAVE_PTHREAD + +/* Have PTHREAD_PRIO_INHERIT. */ +#cmakedefine HAVE_PTHREAD_PRIO_INHERIT + +/* Define to 1 if the system has the type `pthread_rwlock_t'. */ +#cmakedefine HAVE_PTHREAD_RWLOCK_T + +/* Define to 1 if the system has the type `pthread_spinlock_t'. */ +#cmakedefine HAVE_PTHREAD_SPINLOCK_T + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_PWD_H + +/* Define if you have Python libraries and header files. */ +#cmakedefine HAVE_PYTHON + +/* Define to 1 if you have the `random' function. */ +#cmakedefine HAVE_RANDOM + +/* Define to 1 if you have the `recvmsg' function. */ +#cmakedefine HAVE_RECVMSG + +/* Define to 1 if you have the `sbrk' function. */ +#cmakedefine HAVE_SBRK + +/* Define to 1 if you have the `sendmsg' function. */ +#cmakedefine HAVE_SENDMSG + +/* Define to 1 if you have the `setregid' function. */ +#cmakedefine HAVE_SETREGID + +/* Define to 1 if you have the `setresgid' function. */ +#cmakedefine HAVE_SETRESGID + +/* Define to 1 if you have the `setresuid' function. */ +#cmakedefine HAVE_SETRESUID + +/* Define to 1 if you have the `setreuid' function. */ +#cmakedefine HAVE_SETREUID + +/* Define to 1 if you have the `setrlimit' function. */ +#cmakedefine HAVE_SETRLIMIT + +/* Define to 1 if you have the `setsid' function. */ +#cmakedefine HAVE_SETSID + +/* Define to 1 if you have the `setusercontext' function. */ +#cmakedefine HAVE_SETUSERCONTEXT + +/* Define to 1 if you have the `SHA512_Update' function. */ +#cmakedefine HAVE_SHA512_UPDATE + +/* Define to 1 if you have the `sigprocmask' function. */ +#cmakedefine HAVE_SIGPROCMASK + +/* Define to 1 if you have the `sleep' function. */ +#cmakedefine HAVE_SLEEP + +/* Define to 1 if you have the `snprintf' function. */ +#cmakedefine HAVE_SNPRINTF + +/* Define to 1 if you have the `socketpair' function. */ +#cmakedefine HAVE_SOCKETPAIR + +/* Using Solaris threads */ +#cmakedefine HAVE_SOLARIS_THREADS + +/* Define to 1 if you have the `srandom' function. */ +#cmakedefine HAVE_SRANDOM + +/* Define if you have the SSL libraries installed. */ +#cmakedefine HAVE_SSL + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDARG_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDLIB_H + +/* Define to 1 if you have the `strftime' function. */ +#cmakedefine HAVE_STRFTIME + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRING_H + +/* Define to 1 if you have the `strlcat' function. */ +#cmakedefine HAVE_STRLCAT + +/* Define to 1 if you have the `strlcpy' function. */ +#cmakedefine HAVE_STRLCPY + +/* Define to 1 if you have the `strptime' function. */ +#cmakedefine HAVE_STRPTIME + +/* Define to 1 if `ipi_spec_dst' is a member of `struct in_pktinfo'. */ +#cmakedefine HAVE_STRUCT_IN_PKTINFO_IPI_SPEC_DST + +/* Define if you have Swig libraries and header files. */ +#cmakedefine HAVE_SWIG + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYSLOG_H + +/* Define to 1 if you have the header file. */ +#cmakedefine01 HAVE_SYS_PARAM_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_RESOURCE_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_SHA2_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_SYSCTL_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_UIO_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_WAIT_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_TIME_H + +/* Define to 1 if you have the `tzset' function. */ +#cmakedefine HAVE_TZSET + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_UNISTD_H + +/* Define to 1 if you have the `usleep' function. */ +#cmakedefine HAVE_USLEEP + +/* Define to 1 if you have the `vfork' function. */ +#cmakedefine HAVE_VFORK + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_VFORK_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_WINDOWS_H + +/* Using Windows threads */ +#cmakedefine HAVE_WINDOWS_THREADS + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_WINSOCK2_H + +/* Define to 1 if `fork' works. */ +#cmakedefine HAVE_WORKING_FORK + +/* Define to 1 if `vfork' works. */ +#cmakedefine HAVE_WORKING_VFORK + +/* Define to 1 if you have the `writev' function. */ +#cmakedefine HAVE_WRITEV + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_WS2TCPIP_H + +/* Define to 1 if you have the `_beginthreadex' function. */ +#cmakedefine HAVE__BEGINTHREADEX + +/* if lex has yylex_destroy */ +#cmakedefine LEX_HAS_YYLEX_DESTROY + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to the maximum message length to pass to syslog. */ +#define MAXSYSLOGMSGLEN @MAXSYSLOGMSGLEN@ + +/* Define if memcmp() does not compare unsigned bytes */ +#cmakedefine MEMCMP_IS_BROKEN + +/* Define if mkdir has one argument. */ +#cmakedefine MKDIR_HAS_ONE_ARG + +/* Define if the network stack does not fully support nonblocking io (causes + lower performance). */ +#cmakedefine NONBLOCKING_IS_BROKEN + +/* Put -D_ALL_SOURCE define in config.h */ +#cmakedefine OMITTED__D_ALL_SOURCE + +/* Put -D_BSD_SOURCE define in config.h */ +#cmakedefine OMITTED__D_BSD_SOURCE + +/* Put -D_GNU_SOURCE define in config.h */ +#cmakedefine OMITTED__D_GNU_SOURCE + +/* Put -D_LARGEFILE_SOURCE=1 define in config.h */ +#cmakedefine OMITTED__D_LARGEFILE_SOURCE_1 + +/* Put -D_POSIX_C_SOURCE=200112 define in config.h */ +#cmakedefine OMITTED__D_POSIX_C_SOURCE_200112 + +/* Put -D_XOPEN_SOURCE=600 define in config.h */ +#cmakedefine OMITTED__D_XOPEN_SOURCE_600 + +/* Put -D_XOPEN_SOURCE_EXTENDED=1 define in config.h */ +#cmakedefine OMITTED__D_XOPEN_SOURCE_EXTENDED_1 + +/* Put -D__EXTENSIONS__ define in config.h */ +#cmakedefine OMITTED__D__EXTENSIONS__ + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "@PACKAGE_VERSION@" + +/* default pidfile location */ +#define PIDFILE "@UNBOUND_PIDFILE@" + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +#undef PTHREAD_CREATE_JOINABLE + +/* Define as the return type of signal handlers (`int' or `void'). */ +#cmakedefine RETSIGTYPE @RETSIGTYPE@ + +/* default rootkey location */ +#undef ROOT_ANCHOR_FILE + +/* default rootcert location */ +#undef ROOT_CERT_FILE + +/* version number for resource files */ +#undef RSRC_PACKAGE_VERSION + +/* Directory to chdir to */ +#define RUN_DIR "@UNBOUND_RUN_DIR@" + +/* Shared data */ +#define SHARE_DIR "@UNBOUND_SHARE_DIR@" + +/* The size of `time_t', as computed by sizeof. */ +#undef SIZEOF_TIME_T + +/* Define to 1 if you have the ANSI C header files. */ +#cmakedefine STDC_HEADERS + +/* use default strptime. */ +#cmakedefine STRPTIME_WORKS + +/* Use win32 resources and API */ +#cmakedefine UB_ON_WINDOWS + +/* default username */ +#define UB_USERNAME "@UNBOUND_USERNAME@" + +/* use to enable lightweight alloc assertions, for debug use */ +#cmakedefine UNBOUND_ALLOC_LITE + +/* use malloc not regions, for debug use */ +#cmakedefine UNBOUND_ALLOC_NONREGIONAL + +/* use statistics for allocs and frees, for debug use */ +#cmakedefine UNBOUND_ALLOC_STATS + +/* define this to enable debug checks. */ +#cmakedefine UNBOUND_DEBUG + +/* Define to 1 to enable dnstap support */ +#cmakedefine USE_DNSTAP + +/* Define this to enable ECDSA support. */ +#cmakedefine USE_ECDSA + +/* Define this to enable an EVP workaround for older openssl */ +#cmakedefine USE_ECDSA_EVP_WORKAROUND + +/* Define this to enable GOST support. */ +#cmakedefine USE_GOST + +/* Define if you want to use internal select based events */ +#cmakedefine USE_MINI_EVENT + +/* Define this to enable SHA256 and SHA512 support. */ +#cmakedefine USE_SHA2 + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif + + +/* Whether the windows socket API is used */ +#cmakedefine USE_WINSOCK + +/* the version of the windows API enabled */ +#define WINVER @WINVER@ + +/* Define if you want Python module. */ +#cmakedefine WITH_PYTHONMODULE + +/* Define if you want PyUnbound. */ +#cmakedefine WITH_PYUNBOUND + +/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a + `char[]'. */ +#undef YYTEXT_POINTER + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +#cmakedefine _LARGEFILE_SOURCE + +/* Define for large files, on AIX-style hosts. */ +#cmakedefine _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#cmakedefine _MINIX + +/* Enable for compile on Minix */ +#cmakedefine _NETBSD_SOURCE + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#cmakedefine _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#cmakedefine _POSIX_SOURCE + +/* Define to empty if `const' does not conform to ANSI C. */ +#cmakedefine const + +/* Define to `int' if doesn't define. */ +#cmakedefine gid_t @gid_t@ + +/* in_addr_t */ +#cmakedefine in_addr_t @in_addr_t@ + +/* in_port_t */ +#cmakedefine in_port_t @in_port_t@ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#cmakedefine inline @inline@ +#endif + +/* Define to `short' if does not define. */ +#cmakedefine int16_t @int16_t@ + +/* Define to `int' if does not define. */ +#cmakedefine int32_t @int32_t@ + +/* Define to `long long' if does not define. */ +#cmakedefine int64_t @int64_t@ + +/* Define to `signed char' if does not define. */ +#cmakedefine int8_t @int8_t@ + +/* Define if replacement function should be used. */ +#cmakedefine malloc + +/* Define to `long int' if does not define. */ +#cmakedefine off_t + +/* Define to `int' if does not define. */ +#cmakedefine pid_t @pid_t@ + +/* Define to 'int' if not defined */ +#cmakedefine rlim_t @rlim_t@ + +/* Define to `unsigned int' if does not define. */ +#cmakedefine size_t + +/* Define to 'int' if not defined */ +#cmakedefine socklen_t + +/* Define to `int' if does not define. */ +#cmakedefine ssize_t @ssize_t@ + +/* Define to 'unsigned char if not defined */ +#cmakedefine u_char + +/* Define to `int' if doesn't define. */ +#cmakedefine uid_t @uid_t@ + +/* Define to `unsigned short' if does not define. */ +#cmakedefine uint16_t @uint16_t@ + +/* Define to `unsigned int' if does not define. */ +#cmakedefine uint32_t @uint32_t@ + +/* Define to `unsigned long long' if does not define. */ +#cmakedefine uint64_t @uint64_t@ + +/* Define to `unsigned char' if does not define. */ +#cmakedefine uint8_t @uint8_t@ + +/* Define as `fork' if `vfork' does not work. */ +#cmakedefine vfork @vfork@ + +#cmakedefine __func__ @__func__@ + +#if defined(OMITTED__D_GNU_SOURCE) && !defined(_GNU_SOURCE) +#define _GNU_SOURCE 1 +#endif + +#if defined(OMITTED__D_BSD_SOURCE) && !defined(_BSD_SOURCE) +#define _BSD_SOURCE 1 +#endif + +#if defined(OMITTED__D__EXTENSIONS__) && !defined(__EXTENSIONS__) +#define __EXTENSIONS__ 1 +#endif + +#if defined(OMITTED__D_POSIX_C_SOURCE_200112) && !defined(_POSIX_C_SOURCE) +#define _POSIX_C_SOURCE 200112 +#endif + +#if defined(OMITTED__D_XOPEN_SOURCE_600) && !defined(_XOPEN_SOURCE) +#define _XOPEN_SOURCE 600 +#endif + +#if defined(OMITTED__D_XOPEN_SOURCE_EXTENDED_1) && !defined(_XOPEN_SOURCE_EXTENDED) +#define _XOPEN_SOURCE_EXTENDED 1 +#endif + +#if defined(OMITTED__D_ALL_SOURCE) && !defined(_ALL_SOURCE) +#define _ALL_SOURCE 1 +#endif + +#if defined(OMITTED__D_LARGEFILE_SOURCE_1) && !defined(_LARGEFILE_SOURCE) +#define _LARGEFILE_SOURCE 1 +#endif + + + + +#ifndef UNBOUND_DEBUG +# define NDEBUG +#endif + +/** Use small-ldns codebase */ +#define USE_SLDNS 1 +#ifdef HAVE_SSL +# define LDNS_BUILD_CONFIG_HAVE_SSL 1 +#endif + +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#include + +#if STDC_HEADERS +#include +#include +#endif + +#ifdef HAVE_STDARG_H +#include +#endif + +#ifdef HAVE_STDINT_H +#include +#endif + +#include + +#if HAVE_SYS_PARAM_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +#ifdef HAVE_SYS_TYPES_H +#include +#endif + +#ifdef HAVE_SYS_UIO_H +#include +#endif + +#ifdef HAVE_NETINET_IN_H +#include +#endif + +#ifdef HAVE_ARPA_INET_H +#include +#endif + +#ifdef HAVE_WINSOCK2_H +#include +#endif + +#ifdef HAVE_WS2TCPIP_H +#include +#endif + +#ifndef USE_WINSOCK +#define ARG_LL "%ll" +#else +#define ARG_LL "%I64" +#endif + + + +#ifdef HAVE_ATTR_FORMAT +# define ATTR_FORMAT(archetype, string_index, first_to_check) \ + __attribute__ ((format (archetype, string_index, first_to_check))) +#else /* !HAVE_ATTR_FORMAT */ +# define ATTR_FORMAT(archetype, string_index, first_to_check) /* empty */ +#endif /* !HAVE_ATTR_FORMAT */ + + +#if defined(DOXYGEN) +# define ATTR_UNUSED(x) x +#elif defined(__cplusplus) +# define ATTR_UNUSED(x) +#elif defined(HAVE_ATTR_UNUSED) +# define ATTR_UNUSED(x) x __attribute__((unused)) +#else /* !HAVE_ATTR_UNUSED */ +# define ATTR_UNUSED(x) x +#endif /* !HAVE_ATTR_UNUSED */ + + +#ifndef HAVE_FSEEKO +#define fseeko fseek +#define ftello ftell +#endif /* HAVE_FSEEKO */ + + +#ifndef MAXHOSTNAMELEN +#define MAXHOSTNAMELEN 256 +#endif + + +#ifndef HAVE_SNPRINTF +#define snprintf snprintf_unbound +#define vsnprintf vsnprintf_unbound +#include +int snprintf (char *str, size_t count, const char *fmt, ...); +int vsnprintf (char *str, size_t count, const char *fmt, va_list arg); +#endif /* HAVE_SNPRINTF */ + + +#ifndef HAVE_INET_PTON +#define inet_pton inet_pton_unbound +int inet_pton(int af, const char* src, void* dst); +#endif /* HAVE_INET_PTON */ + + +#ifndef HAVE_INET_NTOP +#define inet_ntop inet_ntop_unbound +const char *inet_ntop(int af, const void *src, char *dst, size_t size); +#endif + + +#ifndef HAVE_INET_ATON +#define inet_aton inet_aton_unbound +int inet_aton(const char *cp, struct in_addr *addr); +#endif + + +#ifndef HAVE_MEMMOVE +#define memmove memmove_unbound +void *memmove(void *dest, const void *src, size_t n); +#endif + + +#ifndef HAVE_STRLCAT +#define strlcat strlcat_unbound +size_t strlcat(char *dst, const char *src, size_t siz); +#endif + + +#ifndef HAVE_STRLCPY +#define strlcpy strlcpy_unbound +size_t strlcpy(char *dst, const char *src, size_t siz); +#endif + + +#ifndef HAVE_GMTIME_R +#define gmtime_r gmtime_r_unbound +struct tm *gmtime_r(const time_t *timep, struct tm *result); +#endif + + +#if !defined(HAVE_SLEEP) || defined(HAVE_WINDOWS_H) +#define sleep(x) Sleep((x)*1000) /* on win32 */ +#endif /* HAVE_SLEEP */ + + +#ifndef HAVE_USLEEP +#define usleep(x) Sleep((x)/1000 + 1) /* on win32 */ +#endif /* HAVE_USLEEP */ + + +#ifndef HAVE_RANDOM +#define random rand /* on win32, for tests only (bad random) */ +#endif /* HAVE_RANDOM */ + + +#ifndef HAVE_SRANDOM +#define srandom(x) srand(x) /* on win32, for tests only (bad random) */ +#endif /* HAVE_SRANDOM */ + + +/* detect if we need to cast to unsigned int for FD_SET to avoid warnings */ +#ifdef HAVE_WINSOCK2_H +#define FD_SET_T (u_int) +#else +#define FD_SET_T +#endif + + +#ifndef IPV6_MIN_MTU +#define IPV6_MIN_MTU 1280 +#endif /* IPV6_MIN_MTU */ + + +#ifdef MEMCMP_IS_BROKEN +#include "compat/memcmp.h" +#define memcmp memcmp_unbound +int memcmp(const void *x, const void *y, size_t n); +#endif + + + +#ifndef HAVE_CTIME_R +#define ctime_r unbound_ctime_r +char *ctime_r(const time_t *timep, char *buf); +#endif + +#if !defined(HAVE_STRPTIME) || !defined(STRPTIME_WORKS) +#define strptime unbound_strptime +struct tm; +char *strptime(const char *s, const char *format, struct tm *tm); +#endif + +#ifdef HAVE_LIBRESSL +# if !HAVE_DECL_STRLCPY +size_t strlcpy(char *dst, const char *src, size_t siz); +# endif +# if !HAVE_DECL_STRLCAT +size_t strlcat(char *dst, const char *src, size_t siz); +# endif +# if !HAVE_DECL_ARC4RANDOM && defined(HAVE_ARC4RANDOM) +uint32_t arc4random(void); +# endif +# if !HAVE_DECL_ARC4RANDOM_UNIFORM && defined(HAVE_ARC4RANDOM_UNIFORM) +uint32_t arc4random_uniform(uint32_t upper_bound); +# endif +#endif /* HAVE_LIBRESSL */ +#ifndef HAVE_ARC4RANDOM +void explicit_bzero(void* buf, size_t len); +int getentropy(void* buf, size_t len); +uint32_t arc4random(void); +void arc4random_buf(void* buf, size_t n); +void _ARC4_LOCK(void); +void _ARC4_UNLOCK(void); +#endif +#ifndef HAVE_ARC4RANDOM_UNIFORM +uint32_t arc4random_uniform(uint32_t upper_bound); +#endif +#ifdef COMPAT_SHA512 +#ifndef SHA512_DIGEST_LENGTH +#define SHA512_BLOCK_LENGTH 128 +#define SHA512_DIGEST_LENGTH 64 +#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1) +typedef struct _SHA512_CTX { + uint64_t state[8]; + uint64_t bitcount[2]; + uint8_t buffer[SHA512_BLOCK_LENGTH]; +} SHA512_CTX; +#endif /* SHA512_DIGEST_LENGTH */ +void SHA512_Init(SHA512_CTX*); +void SHA512_Update(SHA512_CTX*, void*, size_t); +void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); +unsigned char *SHA512(void* data, unsigned int data_len, unsigned char *digest); +#endif /* COMPAT_SHA512 */ + + + +#if defined(HAVE_EVENT_H) && !defined(HAVE_EVENT_BASE_ONCE) && !(defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && (defined(HAVE_PTHREAD) || defined(HAVE_SOLARIS_THREADS)) + /* using version of libevent that is not threadsafe. */ +# define LIBEVENT_SIGNAL_PROBLEM 1 +#endif + +#ifndef CHECKED_INET6 +# define CHECKED_INET6 +# ifdef AF_INET6 +# define INET6 +# else +# define AF_INET6 28 +# endif +#endif /* CHECKED_INET6 */ + +#ifndef HAVE_GETADDRINFO +struct sockaddr_storage; +#include "compat/fake-rfc2553.h" +#endif + +#ifdef UNBOUND_ALLOC_STATS +# define malloc(s) unbound_stat_malloc_log(s, __FILE__, __LINE__, __func__) +# define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__) +# define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__) +# define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__) +void *unbound_stat_malloc(size_t size); +void *unbound_stat_calloc(size_t nmemb, size_t size); +void unbound_stat_free(void *ptr); +void *unbound_stat_realloc(void *ptr, size_t size); +void *unbound_stat_malloc_log(size_t size, const char* file, int line, + const char* func); +void *unbound_stat_calloc_log(size_t nmemb, size_t size, const char* file, + int line, const char* func); +void unbound_stat_free_log(void *ptr, const char* file, int line, + const char* func); +void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file, + int line, const char* func); +#elif defined(UNBOUND_ALLOC_LITE) +# include "util/alloc.h" +#endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */ + +/** default port for DNS traffic. */ +#define UNBOUND_DNS_PORT 53 +/** default port for unbound control traffic, registered port with IANA, + ub-dns-control 8953/tcp unbound dns nameserver control */ +#define UNBOUND_CONTROL_PORT 8953 +/** the version of unbound-control that this software implements */ +#define UNBOUND_CONTROL_VERSION 1 + + diff --git a/external/unbound/configure_checks.cmake b/external/unbound/configure_checks.cmake new file mode 100644 index 000000000..281bcf971 --- /dev/null +++ b/external/unbound/configure_checks.cmake @@ -0,0 +1,208 @@ +include(CheckIncludeFile) +include(CheckFunctionExists) +include(CheckSymbolExists) +include(CheckTypeSize) + +# Need expat. + +check_include_file(arpa/inet.h HAVE_ARPA_INET_H) +check_include_file(endian.h HAVE_ENDIAN_H) +check_include_file(dlfcn.h HAVE_DLFCN_H) +check_include_file(event.h HAVE_EVENT_H) +check_include_file(getopt.h HAVE_GETOPT_H) +check_include_file(glob.h HAVE_GLOB_H) +check_include_file(grp.h HAVE_GRP_H) +check_include_file(inttypes.h HAVE_INTTYPES_H) +check_include_file(iphlpapi.h HAVE_IPHLPAPI_H) +check_include_file(login_cap.h HAVE_LOGIN_CAP_H) +check_include_file(memory.h HAVE_MEMORY_H) +check_include_file(netdb.h HAVE_NETDB_H) +check_include_file(netinet/in.h HAVE_NETINET_IN_H) +check_include_file(pwd.h HAVE_PWD_H) +check_include_file(stdarg.h HAVE_STDARG_H) +check_include_file(stdbool.h HAVE_STDBOOL_H) +check_include_file(stdint.h HAVE_STDINT_H) +check_include_file(stdlib.h HAVE_STDLIB_H) +check_include_file(strings.h HAVE_STRINGS_H) +check_include_file(string.h HAVE_STRING_H) +check_include_file(sys/param.h HAVE_SYS_PARAM_H) +check_include_file(sys/resource.h HAVE_SYS_RESOURCE_H) +check_include_file(sys/sha2.h HAVE_SYS_SHA2_H) +check_include_file(sys/socket.h HAVE_SYS_SOCKET_H) +check_include_file(sys/stat.h HAVE_SYS_STAT_H) +check_include_file(sys/sysctl.h HAVE_SYS_SYSCTL_H) +check_include_file(sys/types.h HAVE_SYS_TYPES_H) +check_include_file(sys/uio.h HAVE_SYS_UIO_H) +check_include_file(sys/wait.h HAVE_SYS_WAIT_H) +check_include_file(syslog.h HAVE_SYSLOG_H) +check_include_file(time.h HAVE_TIME_H) +check_include_file(unistd.h HAVE_UNISTD_H) +check_include_file(vfork.h HAVE_VFORK_H) +check_include_file(windows.h HAVE_WINDOWS_H) +check_include_file(winsock2.h HAVE_WINSOCK2_H) +check_include_file(ws2tcpip.h HAVE_WS2TCPIP_H) + +if (WIN32) + set(CMAKE_REQUIRED_LIBRARIES + iphlpapi + ws2_32) +endif () + +check_function_exists(arc4random HAVE_ARC4RANDOM) +check_function_exists(arc4random_uniform HAVE_ARC4RANDOM_UNIFORM) +check_function_exists(chown HAVE_CHOWN) +check_function_exists(chroot HAVE_CHROOT) +check_function_exists(ctime_r HAVE_CTIME_R) +check_function_exists(daemon HAVE_DAEMON) +check_function_exists(endprotoent HAVE_ENDPROTOENT) +check_function_exists(endservent HAVE_ENDSERVENT) +check_function_exists(fnctl HAVE_FNCTL) +check_function_exists(fork HAVE_FORK) +check_function_exists(fseeko HAVE_FSEEKO) +check_function_exists(getaddrinfo HAVE_GETADDRINFO) +check_function_exists(getentropy HAVE_GETENTROPY) +check_function_exists(getpwnam HAVE_GETPWNAM) +check_function_exists(getrlimit HAVE_GETRLIMIT) +check_function_exists(glob HAVE_GLOB) +check_function_exists(gmtime_r HAVE_GMTIME_R) +check_function_exists(inet_aton HAVE_INET_ATON) +check_function_exists(inet_ntop HAVE_INET_NTOP) +check_function_exists(inet_pton HAVE_INET_PTON) +check_function_exists(initgroups HAVE_INITGROUPS) +check_function_exists(ioctlsocket HAVE_IOCTLSOCKET) +check_function_exists(kill HAVE_KILL) +check_function_exists(localtime_r HAVE_LOCALTIME_R) +check_function_exists(malloc HAVE_MALLOC) +check_function_exists(memmove HAVE_MEMMOVE) +check_function_exists(random HAVE_RANDOM) +check_function_exists(recvmsg HAVE_RECVMSG) +check_function_exists(sbrk HAVE_SBRK) +check_function_exists(sendmsg HAVE_SENDMSG) +check_function_exists(setregid HAVE_SETREGID) +check_function_exists(setresgid HAVE_SETRESGID) +check_function_exists(setresuid HAVE_SETRESUID) +check_function_exists(setreuid HAVE_SETREUID) +check_function_exists(setrlimit HAVE_SETRLIMIT) +check_function_exists(setsid HAVE_SETSID) +check_function_exists(setusercontent HAVE_SETUSERCONTENT) +check_function_exists(sigprocmask HAVE_SIGPROCMASK) +check_function_exists(sleep HAVE_SLEEP) +check_function_exists(snprintf HAVE_SNPRINTF) +check_function_exists(socketpair HAVE_SOCKETPAIR) +check_function_exists(srandom HAVE_SRANDOM) +check_function_exists(strftime HAVE_STRFTIME) +check_function_exists(strlcat HAVE_STRLCAT) +check_function_exists(strlcpy HAVE_STRLCPY) +check_function_exists(strptime HAVE_STRPTIME) +check_function_exists(strlcpy HAVE_STRLCPY) +check_function_exists(tzset HAVE_TZSET) +check_function_exists(usleep HAVE_USLEEP) +check_function_exists(writev HAVE_WRITEV) +check_function_exists(_beginthreadex HAVE__BEGINTHREADEX) + +function (check_type_exists type variable header default) + set(CMAKE_EXTRA_INCLUDE_FILES "${header}") + check_type_size("${type}" "${variable}") + + if (${variable} STREQUAL "") + set("${variable}" "${default}" PARENT_SCOPE) + else () + set("${variable}" "" PARENT_SCOPE) + endif () +endfunction () + +set(CMAKE_EXTRA_INCLUDE_FILES "time.h") +check_type_size(time_t SIZEOF_TIME_T) +set(CMAKE_EXTRA_INCLUDE_FILES) + +check_type_exists(gid_t gid_t "sys/types.h" int) +check_type_exists(in_addr_t in_addr_t "netinet/in.h" uint32_t) +check_type_exists(in_port_t in_port_t "netinet/in.h" uint16_t) +check_type_exists(int16_t int16_t "sys/types.h" short) +check_type_exists(int32_t int32_t "sys/types.h" int) +check_type_exists(int64_t int64_t "sys/types.h" __int64) +check_type_exists(int8_t int8_t "sys/types.h" char) +check_type_exists(pid_t pid_t "sys/types.h" int) +check_type_exists(rlim_t rlim_t "sys/resource.h" "unsigned long") +check_type_exists(ssize_t ssize_t "sys/types.h" int) +check_type_exists(uid_t uid_t "sys/types.h" int) +check_type_exists(uint16_t uint16_t "sys/types.h" "unsigned short") +check_type_exists(uint32_t uint32_t "sys/types.h" "unsigned int") +check_type_exists(uint64_t uint64_t "sys/types.h" "unsigned long long") +check_type_exists(uint8_t uint8_t "sys/types.h" "unsigned char") + +if (WIN32) + set(UB_ON_WINDOWS 1) +endif () + +if (MSVC) + set(inline __inline) + set(__func__ __FUNCTION__) +endif () + +if (NOT HAVE_VFORK) + set(vfork fork) +endif () + +# XXX: Check for broken malloc()? +# XXX: Check for broken memcmp()? +# XXX: Check for broken vfork()? +# XXX: Check for one-arg mkdir? + +check_symbol_exists(PTHREAD_PRIO_INHERIT "pthread.h" HAVE_PTHREAD_PRIO_INHERIT) +check_symbol_exists(pthread_rwlock_t "pthread.h" HAVE_PTHREAD_RWLOCK_T) +check_symbol_exists(pthread_spinlock_t "pthread.h" HAVE_PTHREAD_SPINLOCK_T) + +# openssl +set(CMAKE_REQUIRED_INCLUDES + ${OPENSSL_INCLUDE_DIR}) + +check_include_file(openssl/conf.h HAVE_OPENSSL_CONF_H) +check_include_file(openssl/engine.h HAVE_OPENSSL_ENGINE_H) +check_include_file(openssl/err.h HAVE_OPENSSL_ERR_H) +check_include_file(openssl/rand.h HAVE_OPENSSL_RAND_H) +check_include_file(openssl/ssl.h HAVE_OPENSSL_SSL_H) + +set(CMAKE_REQUIRED_INCLUDES) + +check_symbol_exists(NID_secp384r1 "openssl/evp.h" HAVE_DECL_NID_SECP384R1) +check_symbol_exists(NID_X9_62_prime256v1 "openssl/evp.h" HAVE_DECL_NID_X9_62_PRIME256V1) +check_symbol_exists(sk_SSL_COMP_pop_free "openssl/ssl.h" HAVE_DECL_SK_SSL_COMP_POP_FREE) +check_symbol_exists(SSL_COMP_get_compression_methods "openssl/ssl.h" HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS) + +set(CMAKE_REQUIRED_LIBRARIES + ${OPENSSL_LIBRARIES}) + +check_function_exists(EVP_sha1 HAVE_EVP_SHA1) +check_function_exists(EVP_sha256 HAVE_EVP_SHA256) +check_function_exists(EVP_sha512 HAVE_EVP_SHA512) +check_function_exists(FIPS_mode HAVE_FIPS_MODE) +check_function_exists(HMAC_CTX_init HAVE_HMAC_CTX_INIT) +check_function_exists(OPENSSL_config HAVE_OPENSSL_CONFIG) +check_function_exists(SHA512_Update HAVE_SHA512_UPDATE) + +set(CMAKE_REQUIRED_LIBRARIES) + +set(UNBOUND_CONFIGFILE "${CMAKE_INSTALL_PREFIX}/etc/unbound/unbound.conf" + CACHE STRING "default configuration file") +set(UNBOUND_USERNAME "unbound" + CACHE STRING "default user that unbound changes to") +set(UNBOUND_CHROOT_DIR "${CMAKE_INSTALL_PREFIX}/etc/unbound" + CACHE STRING "default directory to chroot to") +set(UNBOUND_RUN_DIR "${CMAKE_INSTALL_PREFIX}/etc/unbound" + CACHE STRING "default directory to chroot to") +set(UNBOUND_SHARE_DIR "${CMAKE_INSTALL_PREFIX}/etc/unbound" + CACHE STRING "default directory with shared data") +set(UNBOUND_PIDFILE "${CMAKE_INSTALL_PREFIX}/etc/unbound/unbound.pid" + CACHE STRING "default pathname to the pidfile") + +# Copied from configure.ac. +set(WINVER 0x0502) +set(PACKAGE_VERSION "1.4.23") +set(PACKAGE_NAME "${PROJECT_NAME}") +set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") +set(MAXSYSLOGMSGLEN 10240) + +# Make assumptions. +set(HAVE_WORKING_FORK ${HAVE_FORK}) +set(HAVE_WORKING_VFORK ${HAVE_VFORK})