configure.ac 19.8 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
Jan Včelák's avatar
Jan Včelák committed
6
m4_define([knot_VERSION_MINOR],4)dnl
Jan Včelák's avatar
Jan Včelák committed
7
m4_define([knot_VERSION_PATCH],0)dnl
Jan Včelák's avatar
Jan Včelák committed
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
AM_INIT_AUTOMAKE([gnits subdir-objects no-dist-gzip dist-xz -Wall -Werror])
13
AM_SILENT_RULES([yes])
14
AC_CONFIG_SRCDIR([src/knot])
Ondřej Surý's avatar
Ondřej Surý committed
15 16
AC_CONFIG_HEADERS([src/config.h])
AC_CONFIG_MACRO_DIR([m4])
17
AC_USE_SYSTEM_EXTENSIONS([_GNU_SOURCE])
18
AC_CANONICAL_HOST
19

20 21 22 23 24
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)

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

Jan Včelák's avatar
Jan Včelák committed
29 30
# Updating version info
# https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
31 32
AC_SUBST([libknot_VERSION_INFO],["-version-info 3:0:0"])
AC_SUBST([libdnssec_VERSION_INFO],["-version-info 2:0:0"])
33
AC_SUBST([libzscanner_VERSION_INFO],["-version-info 1:0:0"])
34

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

40 41 42 43
# 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
44

45
# Default compiler flags
46
CFLAGS="$CFLAGS -Wall -Werror=format-security -Werror=implicit"
47

48
# Checks for programs.
49
m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) # call AM_PROG_AR only if available
50

Ondřej Surý's avatar
Ondřej Surý committed
51 52 53
# Initialize libtool
LT_INIT

54
# Use pkg-config
55
PKG_PROG_PKG_CONFIG
56
m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], [AC_SUBST([pkgconfigdir], ['${libdir}/pkgconfig'])])
57
AC_CONFIG_FILES([src/libknot.pc
58 59 60
                 src/dnssec/libdnssec.pc
                 src/zscanner/libzscanner.pc
                 ])
61

62 63 64 65
# 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"])
66

67 68 69 70
# 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"])
71

72 73 74 75
# 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"])
76

77 78 79
######################
# Generic dependencies
######################
80

Ondřej Surý's avatar
Ondřej Surý committed
81 82
AC_PROG_INSTALL

83
AC_ARG_ENABLE([fastparser],
84 85 86 87
    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
88 89 90
        ],[
        enable_fastparser=yes
        ])
91
    ])
92

93
AX_CC_CLANG
94
AS_IF([test "$enable_fastparser" = "yes"],[
95
    AS_IF([test -n "$CC_CLANG_VERSION"],[
96 97 98 99
      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.])
100
    ])
101 102 103
])

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

105
AM_CONDITIONAL([FAST_PARSER], [test "$enable_fastparser" = "yes"])
106 107

# GnuTLS crypto backend
108
PKG_CHECK_MODULES([gnutls], [gnutls >= 3.3 nettle], [
109
    save_CFLAGS=$CFLAGS
110 111
    CFLAGS="$CFLAGS $gnutls_CFLAGS"
    AC_CHECK_HEADERS([nettle/version.h])
112
    CFLAGS=$save_CFLAGS
113

114 115
    save_LIBS=$LIBS
    LIBS="$LIBS $gnutls_LIBS"
116
    AC_CHECK_FUNC([gnutls_pkcs11_copy_pubkey], [enable_pkcs11=yes], [enable_pkcs11=no])
117
    AS_IF([test "$enable_pkcs11" = yes],
Jan Včelák's avatar
Jan Včelák committed
118
        [AC_DEFINE([ENABLE_PKCS11], [1], [PKCS #11 support available])])
119

120
    LIBS=$save_LIBS
121
])
122 123 124 125

# JSON for DNSSEC status storage
PKG_CHECK_MODULES([jansson], [jansson >= 2.3])

126
# recvmmsg() (valgrind doesn't support it, so disable for debugging)
127
# The check for struct mmsghdr is required when libc doesn't have an API but the function links
128
AC_ARG_ENABLE([recvmmsg],
129
    AS_HELP_STRING([--enable-recvmmsg=yes|no], [enable recvmmsg() network API under Linux (kernel support required) (set to 'no' if you have trouble running server under valgrind) [default=yes]]),
130 131
    [case "${enableval}" in
      yes)
132
          AC_CHECK_FUNCS([sendmmsg])
133 134
          AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[struct mmsghdr v; recvmmsg(0,0,0,0,0);]])],
          [AC_DEFINE(HAVE_RECVMMSG, 1, [Define if struct mmsghdr and recvmmsg() exists.])])
135
          ;;
136
      no)
137
          ;;
138
      *)
139 140
          AC_MSG_ERROR([bad value ${enableval} for --enable-recvmmsg])
          ;;
141 142 143 144 145 146
    esac],
    [
      AC_CHECK_FUNCS([sendmmsg])
      AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[struct mmsghdr v; recvmmsg(0,0,0,0,0);]])],
      [AC_DEFINE(HAVE_RECVMMSG, 1, [Define if struct mmsghdr and recvmmsg() exists.])])
    ])
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 176 177 178 179
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.])])

180
AX_CHECK_COMPILE_FLAG("-fpredictive-commoning", [CFLAGS="$CFLAGS -fpredictive-commoning"], [], "-Werror")
181

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

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

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

201 202 203 204 205 206 207 208 209 210 211
#########################################
# 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"],[

212
AS_IF([test "$enable_systemd" != "no"],[
213
  AS_CASE([$enable_systemd],
214 215 216
    [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], [], [
217
            PKG_CHECK_MODULES([systemd], [libsystemd-daemon libsystemd-journal])])],
218 219 220 221 222
    [*],[AC_MSG_ERROR([Invalid value of --enable-systemd.])])
    ])

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

224 225
]) dnl enable_daemon

226 227 228 229 230

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

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

233 234
AS_IF([test "$with_urcu" != "no"], [
  PKG_CHECK_MODULES([liburcu], liburcu, [
235
    liburcu_PKGCONFIG="liburcu >= 0.4.0"
236
    AC_SUBST([liburcu_PKGCONFIG])
237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
    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
256 257 258 259
        liburcu_LIBS="$liburcu_LIBS -lurcu"
        AC_SUBST([liburcu_CFLAGS])
        AC_SUBST([liburcu_LIBS])
        break
260
      ],[
261 262
        CPPFLAGS="$save_CPPFLAGS"
        LIBS="$save_LIBS"
263
        with_urcu=no
264 265
        # do not cache result of AC_SEARCH_LIBS test
        unset ac_cv_search_rcu_set_pointer_sym
266 267
      ])
    done
268 269
    CPPFLAGS="$save_CPPFLAGS"
    LIBS="$save_LIBS"
270 271 272

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

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

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

290 291
AM_CONDITIONAL([HAVE_DNSTAP], test "$opt_dnstap" != "no")

Jan Včelák's avatar
Jan Včelák committed
292
dnl Check for LMDB
293 294 295 296 297
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))"
298
AC_ARG_WITH([lmdb],
299
    AC_HELP_STRING([--with-lmdb=[DIR]], [Link with external LMDB (>= $lmdb_MIN_VERSION_STRING)]),[
300 301
    with_lmdb=$withval
    ],[
302
    with_lmdb=auto
303 304 305
    ])

have_lmdb=no
306

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

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

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

322 323
      CPPFLAGS="$save_CPPFLAGS $lmdb_CFLAGS"
      LIBS="$save_LIBS $lmdb_LIBS"
324 325 326

      AC_SEARCH_LIBS([mdb_env_open], [lmdb], [
          AC_CHECK_HEADERS([lmdb.h], [], [
327 328
              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>],
329 330
              AC_MSG_ERROR([Unable to determine lmdb version from MDB_VERSION_FULL]))
          AS_IF([test "$lmdb_VERSION_FULL" -ge "$lmdb_MIN_VERSION_FULL"],[
331 332
              lmdb_LIBS="$lmdb_LIBS -llmdb"
              have_lmdb=yes],[
333 334 335 336 337
              unset lmdb_CFLAGS
              unset lmdb_LIBS
              AC_MSG_WARN([lmdb version 0.9.15 and higher not found, using embedded version])
              ])
          break
338
          ])
339

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

346 347
    CPPFLAGS="$save_CPPFLAGS"
    LIBS="$save_LIBS"
348 349

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

AS_IF([test "$have_lmdb" != "no"],[
356 357 358
    AC_SUBST([lmdb_CFLAGS])
    AC_SUBST([lmdb_LIBS])
    enable_lmdb=shared
359 360 361
    ],[
    enable_lmdb=embedded
    ])
362
AM_CONDITIONAL([HAVE_LMDB], test "$have_lmdb" != "no")
363

364
# LMDB mapping sizes
365
conf_mapsize_default=500
366
AC_ARG_WITH([conf_mapsize],
367 368 369 370 371 372 373 374
    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])])])
375 376
AC_DEFINE_UNQUOTED([CONF_MAPSIZE], [$conf_mapsize], [Configuration DB mapsize.])

377
timer_mapsize_default=100
378
AC_ARG_WITH([timer_mapsize],
379 380 381 382 383 384 385 386
        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])])])
387 388
AC_DEFINE_UNQUOTED([TIMER_MAPSIZE], [$timer_mapsize], [Timer DB mapsize.])

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

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

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

400
# libedit
401
AS_IF([test "$enable_daemon" = "yes" -o "$enable_utilities" = "yes"], [
402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420
  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])
  ])
421
], [
422 423 424 425 426
  with_libedit=no
  libedit_CFLAGS=
  libedit_LIBS=
])

427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445
############################################
# 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])
446
        ])])
447 448

]) # Knot DNS utilities dependencies
449

450 451
# Bash completions
AC_ARG_WITH([bash-completions],
452
  AC_HELP_STRING([--with-bash-completions=[DIR]], [Bash completions directory [default=no]]),
453
  [with_bash_completions="$withval"],
454
  [with_bash_completions=no]
455 456 457 458 459 460 461 462 463 464 465 466
)
AS_CASE([$with_bash_completions],
  [yes], [PKG_CHECK_VAR([bash_completions_dir], [bash-completion], [completionsdir], [], [AC_MSG_ERROR([bash completions not found])])],
  [no], [bash_completions_dir=],
  [bash_completions_dir="$with_bash_completions"]
)
AM_CONDITIONAL([HAVE_BASH_COMPLETIONS], [test -n "$bash_completions_dir"])
AS_IF([test -n "$bash_completions_dir"],
  [bash_completions_output="${bash_completions_dir}"],
  [bash_completions_output=no]
)

467 468
AC_SEARCH_LIBS([pow], [m])
AC_SEARCH_LIBS([pthread_create], [pthread], [], [AC_MSG_ERROR([pthreads not found])])
469
AC_SEARCH_LIBS([dlopen], [dl])
Marek Vavrusa's avatar
Marek Vavrusa committed
470
AC_SEARCH_LIBS([clock_gettime], [rt])
471
AC_SEARCH_LIBS([capng_apply], [cap-ng])
Ondřej Surý's avatar
Ondřej Surý committed
472 473 474

# Checks for header files.
AC_HEADER_RESOLV
475
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
476 477

# Checks for library functions.
478
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
479

480 481
# Check for be64toh function
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <endian.h>]], [[return be64toh(0);]])],
482
[AC_DEFINE(HAVE_BE64TOH, 1, [Define to 1 if you have the 'be64toh' function.])])
483

484 485 486 487 488 489 490 491
# 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.])])

492
# Prepare CFLAG_VISIBILITY to be used where needed
493
gl_VISIBILITY()
494

495 496 497
# Add code coverage macro
AX_CODE_COVERAGE

498 499 500
AX_SANITIZER
AS_IF([test -n "$sanitize_CFLAGS"], [CFLAGS="$CFLAGS $sanitize_CFLAGS"])

501 502 503 504 505 506 507 508 509 510 511
# 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])

512 513
AS_IF([test "$enable_documentation" = "yes"],[

514
AC_PATH_PROGS([SPHINXBUILD], [sphinx-build sphinx-build-3], [false])
515 516 517 518 519 520 521 522 523 524
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.])])
  ])

525 526
])

527 528 529 530
AM_CONDITIONAL([HAVE_SPHINXBUILD], test "$SPHINXBUILD" != "false")
AM_CONDITIONAL([HAVE_PDFLATEX], test "$PDFLATEX" != "false")
AM_CONDITIONAL([HAVE_MAKEINFO], test "$MAKEINFO" != "false")

Ondřej Surý's avatar
Ondřej Surý committed
531
AC_CONFIG_FILES([Makefile
532 533 534 535 536 537 538 539 540 541 542
                 doc/Makefile
                 libtap/Makefile
                 tests/Makefile
                 tests-fuzz/Makefile
                 samples/Makefile
                 src/Makefile
                 src/contrib/dnstap/Makefile
                 src/dnssec/Makefile
                 src/dnssec/tests/Makefile
                 src/zscanner/Makefile
                 ])
543

Ondřej Surý's avatar
Ondřej Surý committed
544
AC_OUTPUT
545

546 547 548 549 550
AC_MSG_RESULT([
  $PACKAGE $VERSION

    Target:   $host_os $host_cpu
    Compiler: ${CC}
551
    CFLAGS:   ${CFLAGS} ${CPPFLAGS}
552 553 554 555
    LIBS:     ${LIBS} ${LDFLAGS}
    LibURCU:  ${liburcu_LIBS} ${liburcu_CFLAGS}
    GnuTLS:   ${gnutls_LIBS} ${gnutls_CFLAGS}
    Jansson:  ${jansson_LIBS} ${jansson_CFLAGS}
556
    Libedit:  ${libedit_LIBS} ${libedit_CFLAGS}
557
    LMDB:     ${enable_lmdb} ${lmdb_LIBS} ${lmdb_CFLAGS}
558

559
    Sanitizer: ${sanitize_CFLAGS}
560
    LibFuzzer: ${libfuzzer_LIBS}
561

562 563 564 565
    Prefix:      ${prefix}
    Run dir:     ${run_dir}
    Storage dir: ${storage_dir}
    Config dir:  ${config_dir}
566

567 568 569
    Configuration DB mapsize: ${conf_mapsize} MiB
    Timers DB mapsize:        ${timer_mapsize} MiB

570 571 572 573 574
    Knot DNS libraries:     yes
    Knot DNS daemon:        ${enable_daemon}
    Knot DNS utils:         ${enable_utilities}
    Knot DNS documentation: ${enable_documentation}

575
    Use SO_REUSEPORT:    ${enable_reuseport}
576 577 578 579 580
    Fast zone parser:    ${enable_fastparser}
    Utilities with IDN:  ${with_libidn}
    Systemd integration: ${enable_systemd}
    Dnstap support:      ${opt_dnstap}
    Code coverage:       ${enable_code_coverage}
581
    Bash completions:    ${bash_completions_output}
Jan Včelák's avatar
Jan Včelák committed
582
    PKCS #11 support:    ${enable_pkcs11}
583 584 585

  Continue with 'make' command
])