configure.ac 19.4 KB
Newer Older
Ondřej Surý's avatar
Ondřej Surý committed
1 2
#                                               -*- Autoconf -*-

3
AC_PREREQ([2.60])
4

5
m4_define([knot_VERSION_MAJOR],2)dnl
6
m4_define([knot_VERSION_MINOR],5)dnl
7
m4_define([knot_VERSION_PATCH],0)dnl
8
m4_define([knot_VERSION_EXTRA],-dev)dnl
9
m4_define([knot_PKG_VERSION],[knot_VERSION_MAJOR.knot_VERSION_MINOR.knot_VERSION_PATCH]knot_VERSION_EXTRA)dnl
10 11

AC_INIT([knot], knot_PKG_VERSION, [knot-dns@labs.nic.cz])
12
configure_params="$*"
13
AM_INIT_AUTOMAKE([gnits subdir-objects no-dist-gzip dist-xz -Wall -Werror])
14
AM_SILENT_RULES([yes])
15
AC_CONFIG_SRCDIR([src/knot])
Ondřej Surý's avatar
Ondřej Surý committed
16 17
AC_CONFIG_HEADERS([src/config.h])
AC_CONFIG_MACRO_DIR([m4])
18
AC_USE_SYSTEM_EXTENSIONS
19
AC_CANONICAL_HOST
20

21 22 23 24 25
AC_SUBST([KNOT_VERSION_MAJOR], knot_VERSION_MAJOR)
AC_SUBST([KNOT_VERSION_MINOR], knot_VERSION_MINOR)
AC_SUBST([KNOT_VERSION_PATCH], knot_VERSION_PATCH)
AC_SUBST([KNOT_VERSION_EXTRA], knot_VERSION_EXTRA)

26
AC_CONFIG_FILES([src/libknot/version.h
27 28
                 src/zscanner/version.h
                 src/dnssec/lib/dnssec/version.h])
29

30 31 32 33
# Store ./configure parameters into macro
AC_DEFINE_UNQUOTED([CONFIGURE_PARAMS],["$configure_params"],[Params passed to configure])
AC_DEFINE_UNQUOTED([CONFIGURE_CFLAGS],["$CFLAGS"],[Passed CFLAGS from environment])

Jan Včelák's avatar
Jan Včelák committed
34 35
# Updating version info
# https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
36 37
AC_SUBST([libknot_VERSION_INFO],["-version-info 5:0:0"])
AC_SUBST([libdnssec_VERSION_INFO],["-version-info 3:0:1"])
38
AC_SUBST([libzscanner_VERSION_INFO],["-version-info 1:0:0"])
39

40
# Automatically update release date based on configure.ac date
41 42
AC_PROG_SED
release_date=$($SED -n 's/^Knot DNS .* (\(.*\))/\1/p;q;' ${srcdir}/NEWS)
43 44
AC_SUBST([RELEASE_DATE], $release_date)

45 46 47 48
# Set compiler compatibility flags
AC_PROG_CC_C99
AM_PROG_CC_C_O
AC_PROG_CPP_WERROR
Ondřej Surý's avatar
Ondřej Surý committed
49

50
# Default compiler flags
51
CFLAGS="$CFLAGS -Wall -Werror=format-security -Werror=implicit -Wstrict-prototypes"
52

53
# Checks for programs.
54
m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) # call AM_PROG_AR only if available
55

Ondřej Surý's avatar
Ondřej Surý committed
56 57 58
# Initialize libtool
LT_INIT

59
# Use pkg-config
60
PKG_PROG_PKG_CONFIG
61
m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], [AC_SUBST([pkgconfigdir], ['${libdir}/pkgconfig'])])
62
AC_CONFIG_FILES([src/libknot.pc
63 64 65
                 src/dnssec/libdnssec.pc
                 src/zscanner/libzscanner.pc
                 ])
66

67 68 69 70
# Build Knot DNS daemon
AC_ARG_ENABLE([daemon],
    AS_HELP_STRING([--disable-daemon], [Don't build Knot DNS main daemon]), [], [enable_daemon=yes])
AM_CONDITIONAL([HAVE_DAEMON], [test "$enable_daemon" = "yes"])
71

72 73 74 75
# Build Knot DNS utilities
AC_ARG_ENABLE([utilities],
    AS_HELP_STRING([--disable-utilities], [Don't build Knot DNS utilities]), [], [enable_utilities=yes])
AM_CONDITIONAL([HAVE_UTILS], [test "$enable_utilities" = "yes"])
76

77 78 79 80
# Build Knot DNS documentation
AC_ARG_ENABLE([documentation],
    AS_HELP_STRING([--disable-documentation], [Don't build Knot DNS documentation]), [], [enable_documentation=yes])
AM_CONDITIONAL([HAVE_DOCS], [test "$enable_documentation" = "yes"])
81

82 83 84
######################
# Generic dependencies
######################
85

Ondřej Surý's avatar
Ondřej Surý committed
86 87
AC_PROG_INSTALL

88
AC_ARG_ENABLE([fastparser],
89 90 91 92
    AS_HELP_STRING([--disable-fastparser], [Disable use of fastest zone parser]),[],[
    # Set zone parser type - fastest on release build, slowest on dev build
    AS_IF([test -d ".git" -o "$PATCH_VERSION" = "dev"],[
        enable_fastparser=no
93 94 95
        ],[
        enable_fastparser=yes
        ])
96
    ])
97

98
AX_CC_CLANG
99
AS_IF([test "$enable_fastparser" = "yes"],[
100
    AS_IF([test -n "$CC_CLANG_VERSION"],[
101 102 103 104
      enable_fastparser=no
      AC_MSG_WARN([Fast zone parser disabled due to possible compiler bug.])
      AC_MSG_WARN([See https://llvm.org/bugs/show_bug.cgi?id=23490 for details.])
      AC_MSG_WARN([Use --enable-fastparser=force if your know your clang is fixed.])
105
    ])
106 107 108
])

AS_IF([test "$enable_fastparser" = "force"],[enable_fastparser=yes])
109

110
AM_CONDITIONAL([FAST_PARSER], [test "$enable_fastparser" = "yes"])
111 112

# GnuTLS crypto backend
113
PKG_CHECK_MODULES([gnutls], [gnutls >= 3.3 nettle], [
114
    save_CFLAGS=$CFLAGS
115 116
    CFLAGS="$CFLAGS $gnutls_CFLAGS"
    AC_CHECK_HEADERS([nettle/version.h])
117
    CFLAGS=$save_CFLAGS
118

119 120
    save_LIBS=$LIBS
    LIBS="$LIBS $gnutls_LIBS"
121
    AC_CHECK_FUNC([gnutls_pkcs11_copy_pubkey], [enable_pkcs11=yes], [enable_pkcs11=no])
122
    AS_IF([test "$enable_pkcs11" = yes],
Jan Včelák's avatar
Jan Včelák committed
123
        [AC_DEFINE([ENABLE_PKCS11], [1], [PKCS #11 support available])])
124

125
    LIBS=$save_LIBS
126
])
127

128
AC_ARG_ENABLE([recvmmsg],
129 130 131 132 133 134 135 136 137 138 139 140 141 142
   AS_HELP_STRING([--enable-recvmmsg=auto|yes|no], [enable recvmmsg() network API [default=auto]]),
   [], [enable_recvmmsg=auto])

AS_CASE([$enable_recvmmsg],
   [auto|yes],[
      AC_CHECK_FUNC([recvmmsg],
                    [AC_CHECK_FUNC([sendmmsg],[enable_recvmmsg=yes],[enable_recvmmsg=no])],
                    [enable_recvmmsg=no])],
   [no],[],
   [*], [AC_MSG_ERROR([Invalid value of --enable-recvmmsg.]
 )])

AS_IF([test "$enable_recvmmsg" = yes],[
   AC_DEFINE([ENABLE_RECVMMSG], [1], [Use recvmmsg().])])
143

144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
AC_ARG_ENABLE([reuseport],
    AS_HELP_STRING([--enable-reuseport=auto|yes|no], [enable Linux SO_REUSEPORT support [default=auto]]),
    [enable_reuseport="$enableval"], [enable_reuseport=auto])

AC_DEFUN([CHECK_REUSEPORT], [
  AC_CHECK_DECL(
    [SO_REUSEPORT],
    [$1],
    [$2],
    [
    #include <sys/socket.h>
    ]
  )])

AS_IF([test "$enable_reuseport" != no], [
  AS_CASE([$enable_reuseport],
    [auto],[
      AS_CASE([$host_os],
        [linux*], [CHECK_REUSEPORT([enable_reuseport=yes], [enable_reuseport=no])],
        [*], [enable_reuseport=no]
      )],
    [yes],[
      AS_CASE([$host_os],
        [linux*], [CHECK_REUSEPORT([enable_reuseport=yes], [AC_MSG_ERROR([SO_REUSEPORT support not detected.])])],
        [*], [AC_MSG_ERROR(["SO_REUSEPORT not supported on $host_os."])]
      )],
    [*], [AC_MSG_ERROR([Invalid value of --enable-reuseport.])]
  )])

AS_IF([test "$enable_reuseport" = yes],[
   AC_DEFINE([ENABLE_REUSEPORT], [1], [Use SO_REUSEPORT.])])

176
AX_CHECK_COMPILE_FLAG("-fpredictive-commoning", [CFLAGS="$CFLAGS -fpredictive-commoning"], [], "-Werror")
177 178
AX_CHECK_LINK_FLAG(["-Wl,--exclude-libs,ALL"], [ldflag_exclude_libs="-Wl,--exclude-libs,ALL"], [ldflag_exclude_libs=""], "")
AC_SUBST([LDFLAG_EXCLUDE_LIBS], $ldflag_exclude_libs)
179

180 181 182
# Default directories
run_dir="${localstatedir}/run/knot"
AC_ARG_WITH([rundir],
183
        AC_HELP_STRING([--with-rundir=path], [Path to run-time variable data (pid, sockets...). [default=LOCALSTATEDIR/run/knot]]),
184 185 186
        [run_dir=$withval])
AC_SUBST(run_dir)

Ondřej Surý's avatar
Ondřej Surý committed
187
storage_dir="${localstatedir}/lib/knot"
188
AC_ARG_WITH([storage],
189
        AC_HELP_STRING([--with-storage=path], [Default storage directory (slave zones, persistent data). [default=LOCALSTATEDIR/lib/knot]]),
190 191 192
        [storage_dir=$withval])
AC_SUBST(storage_dir)

193 194
config_dir="${sysconfdir}/knot"
AC_ARG_WITH([configdir],
195
        AC_HELP_STRING([--with-configdir=path], [Default directory for configuration. [default=SYSCONFDIR/knot]]),
196 197 198
        [config_dir=$withval])
AC_SUBST(config_dir)

199 200 201 202 203 204 205 206 207 208 209
#########################################
# Dependencies needed for Knot DNS daemon
#########################################

# Systemd integration
AC_ARG_ENABLE([systemd],
    AS_HELP_STRING([--enable-systemd=auto|yes|no], [enable systemd integration [default=auto]]),
    [enable_systemd="$enableval"], [enable_systemd=auto])

AS_IF([test "$enable_daemon" = "yes"],[

210
AS_IF([test "$enable_systemd" != "no"],[
211
  AS_CASE([$enable_systemd],
212 213 214
    [auto],[PKG_CHECK_MODULES([systemd], [libsystemd], [enable_systemd=yes], [
            PKG_CHECK_MODULES([systemd], [libsystemd-daemon libsystemd-journal], [enable_systemd=yes], [enable_systemd=no])])],
    [yes],[PKG_CHECK_MODULES([systemd], [libsystemd], [], [
215
            PKG_CHECK_MODULES([systemd], [libsystemd-daemon libsystemd-journal])])],
216 217 218 219 220
    [*],[AC_MSG_ERROR([Invalid value of --enable-systemd.])])
    ])

AS_IF([test "$enable_systemd" = "yes"],[
  AC_DEFINE([ENABLE_SYSTEMD], [1], [Use systemd integration.])])
221

222 223
]) dnl enable_daemon

224 225 226 227 228

dnl Check for userspace-rcu library
AC_ARG_WITH(urcu,
[  --with-urcu=DIR        where to find userspace-rcu library])

229 230
AS_IF([test "$enable_daemon" = "yes"],[

231 232
AS_IF([test "$with_urcu" != "no"], [
  PKG_CHECK_MODULES([liburcu], liburcu, [
233
    liburcu_PKGCONFIG="liburcu >= 0.4.0"
234
    AC_SUBST([liburcu_PKGCONFIG])
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
    with_urcu=yes
  ],[
    for try_urcu in "$with_urcu" "" "/usr/local"; do
      save_LIBS="$LIBS"
      save_CPPFLAGS="$CPPFLAGS"

      AS_IF([test -d "$try_urcu"], [
        liburcu_CFLAGS="-I$try_urcu/include"
        liburcu_LIBS="-L$try_urcu/lib"
      ],[
        liburcu_CFLAGS=""
        liburcu_LIBS=""
      ])

      CPPFLAGS="$CPPFLAGS $liburcu_CFLAGS"
      LIBS="$LIBS $liburcu_LIBS"

      AC_SEARCH_LIBS([rcu_set_pointer_sym], [urcu], [
        with_urcu=yes
254 255 256 257
        liburcu_LIBS="$liburcu_LIBS -lurcu"
        AC_SUBST([liburcu_CFLAGS])
        AC_SUBST([liburcu_LIBS])
        break
258
      ],[
259 260
        CPPFLAGS="$save_CPPFLAGS"
        LIBS="$save_LIBS"
261
        with_urcu=no
262 263
        # do not cache result of AC_SEARCH_LIBS test
        unset ac_cv_search_rcu_set_pointer_sym
264 265
      ])
    done
266 267
    CPPFLAGS="$save_CPPFLAGS"
    LIBS="$save_LIBS"
268 269 270

    AS_IF([test "$with_urcu" = "no"],[
      AC_MSG_ERROR([liburcu is required])
271
      ])
272 273 274
  ])
])

275
AC_SEARCH_LIBS([urcu_init], [urcu], [AC_MSG_ERROR([liburcu is too old (< 0.4.0), urcu_init symbol found])])
276
])
277

278
opt_dnstap=no
279
AS_IF([test "$enable_daemon" = "yes" -o "$enable_utilities" = "yes"],[
280 281 282
dnl Check for dnstap.
dt_DNSTAP([
    AC_DEFINE([USE_DNSTAP], [1], [Define to 1 to enable dnstap support])
283 284
    AC_SUBST(DNSTAP_CFLAGS)
    AC_SUBST(DNSTAP_LIBS)
285
    ])
286
])
287

288 289
AM_CONDITIONAL([HAVE_DNSTAP], test "$opt_dnstap" != "no")

Jan Včelák's avatar
Jan Včelák committed
290
dnl Check for LMDB
291 292 293 294 295
lmdb_MIN_VERSION_MAJOR=0
lmdb_MIN_VERSION_MINOR=9
lmdb_MIN_VERSION_PATCH=15
lmdb_MIN_VERSION_STRING="$lmdb_MIN_VERSION_MAJOR.$lmdb_MIN_VERSION_MINOR.$lmdb_MIN_VERSION_PATCH"
lmdb_MIN_VERSION_FULL="$((($lmdb_MIN_VERSION_MAJOR << 24) | ($lmdb_MIN_VERSION_MINOR << 16) | $lmdb_MIN_VERSION_PATCH))"
296
AC_ARG_WITH([lmdb],
297
    AC_HELP_STRING([--with-lmdb=[DIR]], [Link with external LMDB (>= $lmdb_MIN_VERSION_STRING)]),[
298 299
    with_lmdb=$withval
    ],[
300
    with_lmdb=auto
301 302 303
    ])

have_lmdb=no
304

305 306 307
AS_IF([test "$with_lmdb" != "no"],[
    save_CPPFLAGS=$CPPFLAGS
    save_LIBS=$LIBS
308 309

    # Look for lmdb in given path and common locations
310 311
    for try_lmdb in "$with_lmdb" "" "/usr/local"; do

312 313 314
      AS_IF([test -d "$try_lmdb"], [
        lmdb_CFLAGS="-I$try_lmdb/include"
        lmdb_LIBS="-L$try_lmdb/lib"
315 316 317
        ],[
        lmdb_CFLAGS=""
        lmdb_LIBS=""
318
        ])
319

320 321
      CPPFLAGS="$save_CPPFLAGS $lmdb_CFLAGS"
      LIBS="$save_LIBS $lmdb_LIBS"
322 323 324

      AC_SEARCH_LIBS([mdb_env_open], [lmdb], [
          AC_CHECK_HEADERS([lmdb.h], [], [
325 326
              AC_MSG_ERROR([lmdb headers not found in `$try_lmdb', is your installation complete?])])
          AC_COMPUTE_INT(lmdb_VERSION_FULL, MDB_VERSION_FULL, [#include <lmdb.h>],
327 328
              AC_MSG_ERROR([Unable to determine lmdb version from MDB_VERSION_FULL]))
          AS_IF([test "$lmdb_VERSION_FULL" -ge "$lmdb_MIN_VERSION_FULL"],[
329 330
              lmdb_LIBS="$lmdb_LIBS -llmdb"
              have_lmdb=yes],[
331 332 333 334 335
              unset lmdb_CFLAGS
              unset lmdb_LIBS
              AC_MSG_WARN([lmdb version 0.9.15 and higher not found, using embedded version])
              ])
          break
336
          ])
337

338 339 340 341
      unset lmdb_CFLAGS
      unset lmdb_LIBS
      # do not cache result of AC_SEARCH_LIBS test
      unset ac_cv_search_mdb_env_open
342
    done
343

344 345
    CPPFLAGS="$save_CPPFLAGS"
    LIBS="$save_LIBS"
346 347

    # fail the configure if we haven't found lmdb library in the system
348
    AS_IF([test "$with_lmdb" != "auto" -a "$have_lmdb" = "no"],[
349
        AC_MSG_ERROR([shared lmdb library not found])
350
        ])
351 352 353
    ])

AS_IF([test "$have_lmdb" != "no"],[
354 355
    AC_SUBST([lmdb_LIBS])
    enable_lmdb=shared
356 357
    ],[
    enable_lmdb=embedded
358
    CFLAGS="$CFLAGS -I\$(top_srcdir)/src/contrib/lmdb"
359
    ])
360
AM_CONDITIONAL([HAVE_LMDB], test "$enable_lmdb" = "shared")
361
AC_SUBST([lmdb_CFLAGS])
362

363
# LMDB mapping sizes
364
conf_mapsize_default=500
365
AC_ARG_WITH([conf_mapsize],
366 367 368 369 370 371 372 373
    AC_HELP_STRING([--with-conf-mapsize=NUM], [Configuration DB mapsize in MiB [default=$conf_mapsize_default]]),
    [conf_mapsize=$withval],[conf_mapsize=$conf_mapsize_default])

AS_CASE([$conf_mapsize],
    [yes],[conf_mapsize=$conf_mapsize_default],
    [no], [AC_MSG_ERROR([conf_mapsize must be a number])],
    [*],  [AS_IF([test $conf_mapsize != $(( $conf_mapsize + 0 ))],
                 [AC_ERROR([conf_mapsize must be an integer number])])])
374 375
AC_DEFINE_UNQUOTED([CONF_MAPSIZE], [$conf_mapsize], [Configuration DB mapsize.])

376
timer_mapsize_default=100
377
AC_ARG_WITH([timer_mapsize],
378 379 380 381 382 383 384 385
        AC_HELP_STRING([--with-timer-mapsize=NUM], [Timer DB mapsize in MiB [default=$timer_mapsize_default]]),
        [timer_mapsize=$withval],[timer_mapsize=$timer_mapsize_default])

AS_CASE([$timer_mapsize],
    [yes],[timer_mapsize=$timer_mapsize_default],
    [no], [AC_MSG_ERROR([timer_mapsize must be a number])],
    [*],  [AS_IF([test $timer_mapsize != $(( $timer_mapsize + 0 ))],
                 [AC_ERROR([timer_mapsize must be an integer number])])])
386 387
AC_DEFINE_UNQUOTED([TIMER_MAPSIZE], [$timer_mapsize], [Timer DB mapsize.])

388 389
AS_IF([test "$enable_daemon" = "yes"],[

390
dnl Check for rosedb module
391
AC_ARG_ENABLE([rosedb],
392
    AS_HELP_STRING([--enable-rosedb], [Enable static RR query module.]),
393
    [], [enable_rosedb=no])
394 395
]) # Knot DNS daemon dependencies

396
AS_IF([test "$enable_rosedb" = yes], [AC_DEFINE([HAVE_ROSEDB], [1], [Define to 1 to enable static RR query module.])])
397 398
AM_CONDITIONAL([HAVE_ROSEDB], [test "$enable_rosedb" = yes])

399
# libedit
400
AS_IF([test "$enable_daemon" = "yes" -o "$enable_utilities" = "yes"], [
401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419
  PKG_CHECK_MODULES([libedit], [libedit], [with_libedit=yes], [
    with_libedit=no
    AC_CHECK_HEADER([histedit.h], [
      # workaround for OpenBSD
      AS_CASE([$host_os],
        [openbsd*], [libedit_deps=-lcurses],
        [libedit_deps=]
      )
      AC_CHECK_LIB([edit], [el_init], [
        with_libedit=yes
        libedit_CFLAGS=
        libedit_LIBS="-ledit $libedit_deps"
        ], [], [$libedit_deps]
      )
    ])
  ])
  AS_IF([test "$with_libedit" != "yes"], [
    AC_MSG_ERROR([libedit not found])
  ])
420
], [
421 422 423 424 425
  with_libedit=no
  libedit_CFLAGS=
  libedit_LIBS=
])

426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444
############################################
# Dependencies needed for Knot DNS utilities
############################################

dnl Check for libidn.
AC_ARG_WITH(libidn,
    AC_HELP_STRING([--with-libidn=[DIR]], [Support IDN (needs GNU Libidn)]),
    with_libidn=$withval,
    with_libidn=yes
    )

AS_IF([test "$enable_utilities" = "yes"],[
AS_IF([test "$with_libidn" != "no"],[
    PKG_CHECK_MODULES([libidn], [libidn >= 0.0.0], [
        with_libidn=yes
        AC_DEFINE([LIBIDN], [1], [Define to 1 to enable IDN support])
        ],[
        with_libidn=no
        AC_MSG_WARN([libidn not found])
445
        ])])
446 447

]) # Knot DNS utilities dependencies
448

449 450
AC_SEARCH_LIBS([pow], [m])
AC_SEARCH_LIBS([pthread_create], [pthread], [], [AC_MSG_ERROR([pthreads not found])])
451
AC_SEARCH_LIBS([dlopen], [dl])
Marek Vavrusa's avatar
Marek Vavrusa committed
452
AC_SEARCH_LIBS([clock_gettime], [rt])
453
AC_SEARCH_LIBS([capng_apply], [cap-ng])
Ondřej Surý's avatar
Ondřej Surý committed
454 455 456

# Checks for header files.
AC_HEADER_RESOLV
457
AC_CHECK_HEADERS_ONCE([cap-ng.h netinet/in_systm.h pthread_np.h signal.h sys/time.h sys/wait.h sys/uio.h])
Ondřej Surý's avatar
Ondřej Surý committed
458 459

# Checks for library functions.
460
AC_CHECK_FUNCS([clock_gettime gettimeofday fgetln getline madvise malloc_trim poll posix_memalign pthread_setaffinity_np regcomp setgroups strlcat strlcpy initgroups accept4])
Ondřej Surý's avatar
Ondřej Surý committed
461

462 463
# Check for be64toh function
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <endian.h>]], [[return be64toh(0);]])],
464
[AC_DEFINE(HAVE_BE64TOH, 1, [Define to 1 if you have the 'be64toh' function.])])
465

466 467 468 469 470 471 472 473
# Check for cpu_set_t/cpuset_t compatibility
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]], [[cpu_set_t set; CPU_ZERO(&set);]])],
[AC_DEFINE(HAVE_CPUSET_LINUX, 1, [Define if Linux-like cpu_set_t exists.])])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread_np.h>]], [[cpuset_t set; CPU_ZERO(&set);]])],
[AC_DEFINE(HAVE_CPUSET_BSD, 1, [Define if FreeBSD-like cpuset_t exists.])])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sched.h>]], [[cpuset_t* set = cpuset_create(); cpuset_destroy(set);]])],
[AC_DEFINE(HAVE_CPUSET_NETBSD, 1, [Define if cpuset_t and cpuset(3) exists.])])

474 475 476 477 478 479
AC_COMPILE_IFELSE(
  [AC_LANG_PROGRAM([[#include <stdint.h>]],
                   [[uint64_t val = 0; __atomic_add_fetch(&val, 1, __ATOMIC_RELAXED);]])],
  [AC_DEFINE(HAVE_ATOMIC, 1, [Define to 1 if you have '__atomic' functions.])]
)

480
# Prepare CFLAG_VISIBILITY to be used where needed
481
gl_VISIBILITY()
482

483 484 485
# Add code coverage macro
AX_CODE_COVERAGE

486 487 488
AX_SANITIZER
AS_IF([test -n "$sanitize_CFLAGS"], [CFLAGS="$CFLAGS $sanitize_CFLAGS"])

489 490 491 492 493 494 495 496 497 498 499
# LibFuzzer
AC_ARG_WITH([libfuzzer],
  AC_HELP_STRING([--with-libfuzzer=path], [Path to LibFuzzer static library]),
  [libfuzzer_LIBS="$withval"], [libfuzzer_LIBS=no]
)
AS_IF([test "$libfuzzer_LIBS" != no -a "$sanitize_coverage_enabled" != yes], [
  AC_MSG_ERROR([Sanitizer coverage required for LibFuzzer.])
])
AM_CONDITIONAL([HAVE_LIBFUZZER], [test "$libfuzzer_LIBS" != "no"])
AC_SUBST([libfuzzer_LIBS])

500 501
AS_IF([test "$enable_documentation" = "yes"],[

502
AC_PATH_PROGS([SPHINXBUILD], [sphinx-build sphinx-build-3], [false])
503 504 505 506 507 508 509 510 511 512
AS_IF([test "$SPHINXBUILD" = "false"],
  [AC_MSG_WARN([Could not find the 'sphinx-build' executable, you will be unable to regenerate documentation.])],
  [AC_PATH_PROG([PDFLATEX], [pdflatex], [false])
   AS_IF([test "$PDFLATEX" = ""],
     [AC_MSG_WARN([Could not find the 'pdflatex' executable, you will be unable to generate PDF documentation.])])
   AC_PATH_PROG([MAKEINFO], [makeinfo], [false])
   AS_IF([test "$MAKEINFO" = "false"],
     [AC_MSG_WARN([Could not find the 'makeinfo' executable, you will be unable to generate info documentation.])])
  ])

513 514
])

515 516 517 518
AM_CONDITIONAL([HAVE_SPHINXBUILD], test "$SPHINXBUILD" != "false")
AM_CONDITIONAL([HAVE_PDFLATEX], test "$PDFLATEX" != "false")
AM_CONDITIONAL([HAVE_MAKEINFO], test "$MAKEINFO" != "false")

519
result_msg_base="  $PACKAGE $VERSION
520 521 522

    Target:   $host_os $host_cpu
    Compiler: ${CC}
523
    CFLAGS:   ${CFLAGS} ${CPPFLAGS}
524 525 526
    LIBS:     ${LIBS} ${LDFLAGS}
    LibURCU:  ${liburcu_LIBS} ${liburcu_CFLAGS}
    GnuTLS:   ${gnutls_LIBS} ${gnutls_CFLAGS}
527
    Libedit:  ${libedit_LIBS} ${libedit_CFLAGS}
528
    LMDB:     ${enable_lmdb} ${lmdb_LIBS} ${lmdb_CFLAGS}
529

530
    Sanitizer: ${sanitize_CFLAGS}
531
    LibFuzzer: ${libfuzzer_LIBS}
532

533 534 535 536
    Prefix:      ${prefix}
    Run dir:     ${run_dir}
    Storage dir: ${storage_dir}
    Config dir:  ${config_dir}
537

538 539 540
    Configuration DB mapsize: ${conf_mapsize} MiB
    Timers DB mapsize:        ${timer_mapsize} MiB

541 542 543 544 545
    Knot DNS libraries:     yes
    Knot DNS daemon:        ${enable_daemon}
    Knot DNS utils:         ${enable_utilities}
    Knot DNS documentation: ${enable_documentation}

546
    Use recvmmsg:        ${enable_recvmmsg}
547
    Use SO_REUSEPORT:    ${enable_reuseport}
548 549 550 551 552
    Fast zone parser:    ${enable_fastparser}
    Utilities with IDN:  ${with_libidn}
    Systemd integration: ${enable_systemd}
    Dnstap support:      ${opt_dnstap}
    Code coverage:       ${enable_code_coverage}
553 554 555 556 557
    PKCS #11 support:    ${enable_pkcs11}"

result_msg_esc=$(echo -n "$result_msg_base" | sed '$!s/$/\\n/' | tr -d '\n')
result_msg_add="
$result_msg_base
558 559

  Continue with 'make' command
560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580
"

AC_DEFINE_UNQUOTED([CONFIGURE_SUMMARY],["$result_msg_esc"],[Configure summary])

AC_CONFIG_FILES([Makefile
                 doc/Makefile
                 libtap/Makefile
                 tests/Makefile
                 tests-fuzz/Makefile
                 samples/Makefile
                 python/Makefile
                 src/Makefile
                 src/contrib/dnstap/Makefile
                 src/dnssec/Makefile
                 src/dnssec/tests/Makefile
                 src/zscanner/Makefile
                 ])

AC_OUTPUT

AC_MSG_RESULT([$result_msg_add])