aboutsummaryrefslogtreecommitdiff
path: root/external
diff options
context:
space:
mode:
authorBen Boeckel <ben.boeckel@kitware.com>2014-10-21 18:39:15 -0400
committerBen Boeckel <ben.boeckel@kitware.com>2014-10-23 16:42:35 -0400
commitabbd5c0bdb5541aa8c75beea9e8a119297b6d76f (patch)
tree70e8ca8046db54a4523987f98f4b2de9fad76975 /external
parentminiupnpc: clean up build system (diff)
downloadmonero-abbd5c0bdb5541aa8c75beea9e8a119297b6d76f.tar.xz
unbound: import cmake build system
Diffstat (limited to 'external')
-rw-r--r--external/CMakeLists.txt88
-rw-r--r--external/unbound/CMakeLists.txt180
-rw-r--r--external/unbound/config.h.cmake.in1034
-rw-r--r--external/unbound/configure_checks.cmake208
4 files changed, 1428 insertions, 82 deletions
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 <arpa/inet.h> 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 <dlfcn.h> header file. */
+#cmakedefine HAVE_DLFCN_H
+
+/* Define to 1 if you have the <endian.h> 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 <event.h> 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 <expat.h> 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 <getopt.h> 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 <glob.h> 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 <grp.h> 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 <inttypes.h> header file. */
+#cmakedefine HAVE_INTTYPES_H
+
+/* if the function 'ioctlsocket' is available */
+#cmakedefine HAVE_IOCTLSOCKET
+
+/* Define to 1 if you have the <iphlpapi.h> 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 <login_cap.h> 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 <memory.h> header file. */
+#cmakedefine HAVE_MEMORY_H
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#cmakedefine HAVE_NETDB_H
+
+/* Define to 1 if you have the <netinet/in.h> 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 <openssl/conf.h> header file. */
+#cmakedefine HAVE_OPENSSL_CONF_H
+
+/* Define to 1 if you have the <openssl/engine.h> header file. */
+#cmakedefine HAVE_OPENSSL_ENGINE_H
+
+/* Define to 1 if you have the <openssl/err.h> header file. */
+#cmakedefine HAVE_OPENSSL_ERR_H
+
+/* Define to 1 if you have the <openssl/rand.h> header file. */
+#cmakedefine HAVE_OPENSSL_RAND_H
+
+/* Define to 1 if you have the <openssl/ssl.h> 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 <pwd.h> 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 <stdarg.h> header file. */
+#cmakedefine HAVE_STDARG_H
+
+/* Define to 1 if you have the <stdbool.h> header file. */
+#cmakedefine HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#cmakedefine HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> 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 <strings.h> header file. */
+#cmakedefine HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> 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 <syslog.h> header file. */
+#cmakedefine HAVE_SYSLOG_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#cmakedefine01 HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#cmakedefine HAVE_SYS_RESOURCE_H
+
+/* Define to 1 if you have the <sys/sha2.h> header file. */
+#cmakedefine HAVE_SYS_SHA2_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#cmakedefine HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#cmakedefine HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/sysctl.h> header file. */
+#cmakedefine HAVE_SYS_SYSCTL_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#cmakedefine HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#cmakedefine HAVE_SYS_UIO_H
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#cmakedefine HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the <time.h> 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 <unistd.h> 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 <vfork.h> header file. */
+#cmakedefine HAVE_VFORK_H
+
+/* Define to 1 if you have the <windows.h> header file. */
+#cmakedefine HAVE_WINDOWS_H
+
+/* Using Windows threads */
+#cmakedefine HAVE_WINDOWS_THREADS
+
+/* Define to 1 if you have the <winsock2.h> 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 <ws2tcpip.h> 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 <sys/types.h> 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 <sys/types.h> does not define. */
+#cmakedefine int16_t @int16_t@
+
+/* Define to `int' if <sys/types.h> does not define. */
+#cmakedefine int32_t @int32_t@
+
+/* Define to `long long' if <sys/types.h> does not define. */
+#cmakedefine int64_t @int64_t@
+
+/* Define to `signed char' if <sys/types.h> does not define. */
+#cmakedefine int8_t @int8_t@
+
+/* Define if replacement function should be used. */
+#cmakedefine malloc
+
+/* Define to `long int' if <sys/types.h> does not define. */
+#cmakedefine off_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#cmakedefine pid_t @pid_t@
+
+/* Define to 'int' if not defined */
+#cmakedefine rlim_t @rlim_t@
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#cmakedefine size_t
+
+/* Define to 'int' if not defined */
+#cmakedefine socklen_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#cmakedefine ssize_t @ssize_t@
+
+/* Define to 'unsigned char if not defined */
+#cmakedefine u_char
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#cmakedefine uid_t @uid_t@
+
+/* Define to `unsigned short' if <sys/types.h> does not define. */
+#cmakedefine uint16_t @uint16_t@
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#cmakedefine uint32_t @uint32_t@
+
+/* Define to `unsigned long long' if <sys/types.h> does not define. */
+#cmakedefine uint64_t @uint64_t@
+
+/* Define to `unsigned char' if <sys/types.h> 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 <stdio.h>
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <assert.h>
+
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+
+#ifdef HAVE_STDARG_H
+#include <stdarg.h>
+#endif
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#include <errno.h>
+
+#if HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#ifdef HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#endif
+
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#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 <stdarg.h>
+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})