2 ## Configure template file for FRRouting.
3 ## autoconf will generate configure script.
5 ## Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
6 ## Portions Copyright (c) 2003 Paul Jakma <paul@dishone.st>
10 AC_INIT(frr, 6.1-dev, [https://github.com/frrouting/frr/issues])
11 PACKAGE_URL="https://frrouting.org/"
13 PACKAGE_FULLNAME="FRRouting"
14 AC_SUBST(PACKAGE_FULLNAME)
16 CONFIG_ARGS="$ac_configure_args"
19 AC_CONFIG_SRCDIR(lib/zebra.h)
20 AC_CONFIG_MACRO_DIR([m4])
22 dnl -----------------------------------
23 dnl Get hostname and other information.
24 dnl -----------------------------------
28 AS_IF([test "$host" != "$build"], [
29 if test "$srcdir" = "."; then
30 AC_MSG_ERROR([cross-compilation is only possible with builddir separate from srcdir. create a separate directory and run as .../path-to-frr/configure.])
32 test -d hosttools || mkdir hosttools
33 abssrc="`cd \"${srcdir}\"; pwd`"
36 AC_MSG_NOTICE([... cross-compilation: creating hosttools directory and self-configuring for build platform tools])
37 AC_MSG_NOTICE([... use HOST_CPPFLAGS / HOST_CFLAGS / HOST_LDFLAGS if neccessary])
40 ( CPPFLAGS="$HOST_CPPFLAGS"; \
41 CFLAGS="$HOST_CFLAGS"; \
42 LDFLAGS="$HOST_LDFLAGS"; \
43 cd hosttools; "${abssrc}/configure" "--host=$build" "--build=$build" "--enable-clippy-only" "--disable-nhrpd" "--disable-vtysh"; )
46 AC_MSG_NOTICE([... cross-compilation: finished self-configuring for build platform tools])
50 HOSTTOOLS="hosttools/"
56 AM_CONDITIONAL([BUILD_CLIPPY], [$build_clippy])
58 # Disable portability warnings -- our automake code (in particular
59 # common.am) uses some constructs specific to gmake.
60 AM_INIT_AUTOMAKE([1.12 -Wno-portability foreign])
61 m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
62 AM_SILENT_RULES([yes])
63 AC_CONFIG_HEADERS(config.h)
65 AC_PATH_PROG(PERL, perl)
68 dnl default is to match previous behavior
69 exampledir=${sysconfdir}
70 AC_ARG_ENABLE([exampledir],
71 AS_HELP_STRING([--enable-exampledir],
72 [specify alternate directory for examples]),
73 exampledir="$enableval",)
74 dnl XXX add --exampledir to autoconf standard directory list somehow
77 dnl default is to match previous behavior
79 AC_ARG_ENABLE([pkgsrcrcdir],
80 AS_HELP_STRING([--enable-pkgsrcrcdir],
81 [specify directory for rc.d scripts]),
82 pkgsrcrcdir="$enableval",)
83 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
85 AM_CONDITIONAL([PKGSRC], [test "x$pkgsrcrcdir" != "x"])
87 AC_ARG_WITH([moduledir], [AS_HELP_STRING([--with-moduledir=DIR], [module directory (${libdir}/frr/modules)])], [
90 moduledir="\${libdir}/frr/modules"
92 AC_SUBST([moduledir], [$moduledir])
95 AC_ARG_WITH([yangmodelsdir], [AS_HELP_STRING([--with-yangmodelsdir=DIR], [yang models directory (${datarootdir}/yang)])], [
96 yangmodelsdir="$withval"
98 yangmodelsdir="\${datarootdir}/yang"
100 AC_SUBST(yangmodelsdir)
102 AC_ARG_WITH([libyang_pluginsdir], [AS_HELP_STRING([--with-libyang-pluginsdir=DIR], [yangmodule plugins directory (${libdir}/frr/libyang_plugins)])], [
103 libyang_pluginsdir="$withval"
105 libyang_pluginsdir="\${libdir}/frr/libyang_plugins"
107 AC_SUBST(libyang_pluginsdir)
109 AC_ARG_ENABLE(tcmalloc,
110 AS_HELP_STRING([--enable-tcmalloc], [Turn on tcmalloc]),
111 [case "${enableval}" in
112 yes) tcmalloc_enabled=true
113 LIBS="$LIBS -ltcmalloc_minimal"
115 no) tcmalloc_enabled=false ;;
116 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
117 esac],[tcmalloc_enabled=false])
120 dnl Thanks autoconf, but we don't want a default -g -O2. We have our own
121 dnl flag determination logic.
124 dnl --------------------
125 dnl Check CC and friends
126 dnl --------------------
127 dnl note orig_cflags is also used further down
128 orig_cflags="$CFLAGS"
133 dnl remove autoconf default "-g -O2"
134 CFLAGS="$orig_cflags"
136 dnl NB: see C11 below
141 dnl autoconf 2.59 appears not to support AC_PROG_SED
143 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
145 dnl try and enable CFLAGS that are useful for FRR
146 dnl - specifically, options to control warnings
148 AC_USE_SYSTEM_EXTENSIONS
149 AC_DEFUN([AC_C_FLAG], [{
150 m4_pushdef([cachename],[m4_translit([frr_cv_$1],[ =-],[___])])
151 AC_CACHE_CHECK([[whether $CC supports $1]], cachename, [
153 ac_c_flag_save="$CFLAGS"
156 [AC_LANG_PROGRAM([[]])],
162 CFLAGS="$ac_c_flag_save"
165 if test "${cachename}" = yes; then
166 m4_if([$3], [], [CFLAGS="$CFLAGS $1"], [$3])
171 m4_popdef([cachename])
174 AC_DEFUN([AC_LINK_IFELSE_FLAGS], [{
176 ac_cflags_save="$CFLAGS"
184 CFLAGS="$ac_cflags_save"
189 CFLAGS="$ac_cflags_save"
196 dnl ICC won't bail on unknown options without -diag-error 10006
197 dnl need to do this first so we get useful results for the other options
198 AC_C_FLAG([-diag-error 10006])
200 dnl AC_PROG_CC_C99 may change CC to include -std=gnu99 or something
202 CC="${CC% -std=gnu99}"
205 AC_C_FLAG([-std=gnu11], [CC="$ac_cc"], [CC="$CC -std=gnu11"])
207 dnl if the user has specified any CFLAGS, override our settings
208 if test "x${enable_gcov}" = "xyes"; then
209 if test "z$orig_cflags" = "z"; then
210 AC_C_FLAG([-coverage])
214 LDFLAGS="${LDFLAGS} -lgcov"
215 elif test "x${enable_dev_build}" = "xyes"; then
216 AC_DEFINE(DEV_BUILD,,Build for development)
217 if test "z$orig_cflags" = "z"; then
221 if test "x${enable_lua}" = "xyes"; then
222 AC_CHECK_LIB([lua], [lua_newstate],
223 [LIBS="$LIBS -llua"])
224 AC_DEFINE(HAVE_LUA,,Lua enabled for development)
227 if test "x${enable_lua}" = "xyes"; then
228 AC_MSG_ERROR([Lua is not meant to be built/used outside of development at this time])
230 if test "z$orig_cflags" = "z"; then
237 AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
239 dnl always want these CFLAGS
240 AC_C_FLAG([-fno-omit-frame-pointer])
241 AC_C_FLAG([-funwind-tables])
244 AC_C_FLAG([-Wmissing-prototypes])
245 AC_C_FLAG([-Wmissing-declarations])
246 AC_C_FLAG([-Wpointer-arith])
247 AC_C_FLAG([-Wbad-function-cast])
248 AC_C_FLAG([-Wwrite-strings])
249 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
250 AC_C_FLAG([-Wcast-qual])
251 AC_C_FLAG([-Wstrict-prototypes])
252 AC_C_FLAG([-Wmissing-noreturn])
253 AC_C_FLAG([-Wmissing-format-attribute])
254 AC_C_FLAG([-Wunreachable-code])
255 AC_C_FLAG([-Wpacked])
256 AC_C_FLAG([-Wpadded])
257 AC_C_FLAG([-Wshadow])
259 AC_C_FLAG([-Wno-unused-result])
261 AC_C_FLAG([-Wno-unused-parameter])
262 AC_C_FLAG([-Wno-missing-field-initializers])
264 dnl ICC emits a broken warning for const char *x = a ? "b" : "c";
265 dnl for some reason the string consts get 'promoted' to char *,
266 dnl triggering a const to non-const conversion warning.
267 AC_C_FLAG([-diag-disable 3179])
269 if test x"${enable_werror}" = x"yes" ; then
275 if test "$enable_address_sanitizer" = "yes"; then
276 AC_C_FLAG([-fsanitize=address], [
277 AC_MSG_ERROR([$CC does not support Address Sanitizer.])
279 SAN_FLAGS="$SAN_FLAGS -fsanitize=address"
282 if test "$enable_thread_sanitizer" = "yes"; then
283 AC_C_FLAG([-fsanitize=thread], [
284 AC_MSG_ERROR([$CC does not support Thread Sanitizer.])
286 SAN_FLAGS="$SAN_FLAGS -fsanitize=thread"
289 if test "$enable_memory_sanitizer" = "yes"; then
290 AC_C_FLAG([-fsanitize=thread -fPIE -pie], [
291 AC_MSG_ERROR([$CC does not support Thread Sanitizer.])
293 SAN_FLAGS="-fsanitize=memory -fPIE -pie"
296 AC_SUBST([SAN_FLAGS])
304 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
305 LIBS="$PTHREAD_LIBS $LIBS"
307 AC_MSG_FAILURE([This FRR version needs pthreads])
310 AC_SEARCH_LIBS([pthread_condattr_setclock], [],
311 [frr_cv_pthread_condattr_setclock=yes],
312 [frr_cv_pthread_condattr_setclock=no])
313 if test "$frr_cv_pthread_condattr_setclock" = yes; then
314 AC_DEFINE(HAVE_PTHREAD_CONDATTR_SETCLOCK, 1, [Have pthread.h pthread_condattr_setclock])
323 AC_CHECK_TOOL(AR, ar)
328 AC_ARG_ENABLE(static-bin,
329 AS_HELP_STRING([--enable-static-bin], [link binaries statically]))
332 patch -N -i "${srcdir}/m4/libtool-whole-archive.patch" libtool >&AS_MESSAGE_LOG_FD || \
333 AC_MSG_WARN([Could not patch libtool for static linking support. Loading modules into a statically linked daemon will fail.])
335 if test "$enable_static_bin" = "yes"; then
339 AM_CONDITIONAL([STATIC_BIN], [test "x$enable_static_bin" = "xyes"])
341 dnl $AR and $RANLIB are set by LT_INIT above
342 AC_MSG_CHECKING([whether $AR supports D option])
343 if $AR crD conftest.a; then
345 dnl ARFLAGS is for automake, AR_FLAGS for libtool m-(
356 AC_MSG_CHECKING([whether $RANLIB supports D option])
357 if $RANLIB -D conftest.a; then
365 test -f conftest.a && rm conftest.a
367 dnl ----------------------
368 dnl Packages configuration
369 dnl ----------------------
370 if test -f config.version; then
372 elif test -f "${srcdir}/config.version"; then
373 . "${srcdir}/config.version"
375 AC_ARG_WITH(pkg-extra-version,
376 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]), [
377 if test "$withval" = "no"; then
380 EXTRAVERSION=$withval
383 AC_ARG_WITH(pkg-git-version,
384 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
385 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
386 AC_ARG_WITH(vtysh_pager,
387 AS_HELP_STRING([--with-vtysh-pager=PAGER], [control what pager is compiled in as default]),
388 VTYSH_PAGER=$withval, VTYSH_PAGER="more")
390 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for FRR]))
392 AS_HELP_STRING([--disable-doc], [do not build docs]))
393 AC_ARG_ENABLE(doc-html,
394 AS_HELP_STRING([--enable-doc-html], [build HTML docs]))
396 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
398 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
400 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
401 AC_ARG_ENABLE(ripngd,
402 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
404 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
405 AC_ARG_ENABLE(ospf6d,
406 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
408 AS_HELP_STRING([--disable-ldpd], [do not build ldpd]))
410 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
411 AC_ARG_ENABLE(eigrpd,
412 AS_HELP_STRING([--disable-eigrpd], [do not build eigrpd]))
413 AC_ARG_ENABLE(babeld,
414 AS_HELP_STRING([--disable-babeld], [do not build babeld]))
415 AC_ARG_ENABLE(watchfrr,
416 AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
418 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
420 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
422 AS_HELP_STRING([--disable-pbrd], [do not build pbrd]))
423 AC_ARG_ENABLE(sharpd,
424 AS_HELP_STRING([--enable-sharpd], [build sharpd]))
425 AC_ARG_ENABLE(staticd,
426 AS_HELP_STRING([--disable-staticd], [do not build staticd]))
427 AC_ARG_ENABLE(fabricd,
428 AS_HELP_STRING([--disable-fabricd], [do not build fabricd]))
429 AC_ARG_ENABLE(bgp-announce,
430 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
431 AC_ARG_ENABLE(bgp-vnc,
432 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
434 AS_HELP_STRING([--enable-snmp], [enable SNMP support for agentx]))
435 AC_ARG_ENABLE(config_rollbacks,
436 AS_HELP_STRING([--enable-config-rollbacks], [enable configuration rollbacks (requires sqlite3)]))
438 AS_HELP_STRING([--enable-confd=ARG], [enable confd integration]))
439 AC_ARG_ENABLE(sysrepo,
440 AS_HELP_STRING([--enable-sysrepo], [enable sysrepo integration]))
441 AC_ARG_ENABLE(zeromq,
442 AS_HELP_STRING([--enable-zeromq], [enable ZeroMQ handler (libfrrzmq)]))
444 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
445 AC_ARG_ENABLE(ospfapi,
446 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
447 AC_ARG_ENABLE(ospfclient,
448 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
449 (this is the default if --disable-ospfapi is set)]))
450 AC_ARG_ENABLE(multipath,
451 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
453 AS_HELP_STRING([--enable-user=USER], [user to run FRR suite as (default frr)]))
455 AS_HELP_STRING([--enable-group=GROUP], [group to run FRR suite as (default frr)]))
456 AC_ARG_ENABLE(vty_group,
457 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
458 AC_ARG_ENABLE(configfile_mask,
459 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
460 AC_ARG_ENABLE(logfile_mask,
461 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
462 AC_ARG_ENABLE(shell_access,
463 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
464 AC_ARG_ENABLE(realms,
465 AS_HELP_STRING([--enable-realms], [enable REALMS support under Linux]))
467 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
469 AS_HELP_STRING([--disable-irdp], [enable IRDP server support in zebra (default if supported)]))
470 AC_ARG_ENABLE(capabilities,
471 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
472 AC_ARG_ENABLE(rusage,
473 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
474 AC_ARG_ENABLE(gcc_ultra_verbose,
475 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
476 AC_ARG_ENABLE(backtrace,
477 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
478 AC_ARG_ENABLE(time-check,
479 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
480 AC_ARG_ENABLE(pcreposix,
481 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
483 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
484 AC_ARG_ENABLE(systemd,
485 AS_HELP_STRING([--enable-systemd], [enable Systemd support]))
486 AC_ARG_ENABLE(werror,
487 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
488 AC_ARG_ENABLE(cumulus,
489 AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions]))
490 AC_ARG_ENABLE(datacenter,
491 AS_HELP_STRING([--enable-datacenter], [enable Compilation for Data Center Extensions]))
492 AC_ARG_ENABLE(fuzzing,
493 AS_HELP_STRING([--enable-fuzzing], [enable ability to fuzz various parts of FRR]))
494 AC_ARG_ENABLE(netlink_fuzzing,
495 AS_HELP_STRING([--enable-netlink-fuzzing], [enable ability to fuzz netlink listening socket in zebra]))
496 AC_ARG_ENABLE(rr-semantics,
497 AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics]))
498 AC_ARG_ENABLE([protobuf],
499 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
500 AC_ARG_ENABLE([oldvpn_commands],
501 AS_HELP_STRING([--enable-oldvpn-commands], [Keep old vpn commands]))
503 AS_HELP_STRING([--enable-rpki], [enable RPKI prefix validation support]))
504 AC_ARG_ENABLE([clippy-only],
505 AS_HELP_STRING([--enable-clippy-only], [Only build clippy]))
506 AC_ARG_ENABLE([numeric_version],
507 AS_HELP_STRING([--enable-numeric-version], [Only numeric digits allowed in version (for Alpine)]))
508 AC_ARG_ENABLE([gcov],
509 AS_HELP_STRING([--enable-gcov], [Add code coverage information]))
511 AS_HELP_STRING([--disable-bfdd], [do not build bfdd]))
512 AC_ARG_ENABLE([address-sanitizer],
513 AS_HELP_STRING([--enable-address-sanitizer], [enable AddressSanitizer support for detecting a wide variety of memory allocation and deallocation errors]))
514 AC_ARG_ENABLE([thread-sanitizer],
515 AS_HELP_STRING([--enable-thread-sanitizer], [enable ThreadSanitizer support for detecting data races]))
516 AC_ARG_ENABLE([memory-sanitizer],
517 AS_HELP_STRING([--enable-memory-sanitizer], [enable MemorySanitizer support for detecting uninitialized memory reads]))
519 AS_IF([test "${enable_clippy_only}" != "yes"], [
520 AC_CHECK_HEADERS(json-c/json.h)
521 AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c", [], [-lm])
522 if test "$ac_cv_lib_json_c_json_object_get" = no; then
523 AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
524 if test "$ac_cv_lib_json_json_object_get" = no; then
525 AC_MSG_ERROR([libjson is needed to compile])
530 AC_ARG_ENABLE([dev_build],
531 AS_HELP_STRING([--enable-dev-build], [build for development]))
534 AS_HELP_STRING([--enable-lua], [Build Lua scripting]))
536 if test x"${enable_time_check}" != x"no" ; then
537 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
538 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
540 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
544 case "${enable_systemd}" in
547 AC_CHECK_LIB(systemd, sd_notify, LIBS="$LIBS -lsystemd")
548 if test $ac_cv_lib_systemd_sd_notify = no; then
549 AC_MSG_ERROR([enable systemd has been specified but systemd development env not found on your system])
551 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
557 if test "${enable_rr_semantics}" != "no" ; then
558 AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics)
561 if test "${enable_datacenter}" = "yes" ; then
562 AC_DEFINE(HAVE_DATACENTER,,Compile extensions for a DataCenter)
563 DFLT_NAME="datacenter"
565 DFLT_NAME="traditional"
568 if test "${enable_fuzzing}" = "yes" ; then
569 AC_DEFINE(HANDLE_ZAPI_FUZZING,,Compile extensions to use with a fuzzer)
572 if test "${enable_netlink_fuzzing}" = "yes" ; then
573 AC_DEFINE(HANDLE_NETLINK_FUZZING,,Compile extensions to use with a fuzzer for netlink)
576 if test "${enable_cumulus}" = "yes" ; then
577 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
581 AC_DEFINE_UNQUOTED(DFLT_NAME,["$DFLT_NAME"], Name of the configuration default set)
583 if test "${enable_shell_access}" = "yes"; then
584 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
587 AM_CONDITIONAL([FPM], [test "x$enable_fpm" = "xyes"])
593 AC_DEFUN([FRR_PYTHON_CHECK_WORKING], [
594 AC_MSG_CHECKING([whether we found a working Python version])
595 AC_LINK_IFELSE_FLAGS([$PYTHON_CFLAGS], [$PYTHON_LIBS], [AC_LANG_PROGRAM([
597 #if PY_VERSION_HEX < 0x02070000
598 #error python too old
608 # some python installs are missing the zlib dependency...
609 PYTHON_LIBS="${PYTHON_LIBS} -lz"
610 AC_LINK_IFELSE_FLAGS([$PYTHON_CFLAGS], [$PYTHON_LIBS], [AC_LANG_PROGRAM([
612 #if PY_VERSION_HEX < 0x02070000
613 #error python too old
632 AS_IF([test "$host" = "$build"], [
636 # 1. try python3, but respect the user's preference on which minor ver
637 # 2. try python, which might be py3 or py2 again on the user's preference
638 # 3. try python2 (can really only be 2.7 but eh)
639 # 4. try 3.6 > 3.5 > 3.4 > 3.3 > 3.2 > 2.7 through pkg-config (no user pref)
641 # (AX_PYTHON_DEVEL has no clue about py3 vs py2)
642 # (AX_PYTHON does not do what we need)
644 AC_CHECK_TOOLS([PYTHONCONFIG], [ \
654 if test -n "$PYTHONCONFIG"; then
655 PYTHON_CFLAGS="`\"${PYTHONCONFIG}\" --includes`"
656 PYTHON_LIBS="`\"${PYTHONCONFIG}\" --ldflags`"
658 FRR_PYTHON_CHECK_WORKING([])
661 if test -z "$PYTHONCONFIG"; then
662 PKG_CHECK_MODULES([PYTHON], python-3.6, [], [
663 PKG_CHECK_MODULES([PYTHON], python-3.5, [], [
664 PKG_CHECK_MODULES([PYTHON], python-3.4, [], [
665 PKG_CHECK_MODULES([PYTHON], python-3.3, [], [
666 PKG_CHECK_MODULES([PYTHON], python-3.2, [], [
667 PKG_CHECK_MODULES([PYTHON], python-2.7, [], [
668 AC_MSG_FAILURE([could not find python-config or pkg-config python, please install Python development files from libpython-dev or similar])
672 FRR_PYTHON_CHECK_WORKING([
673 AC_MSG_FAILURE([could not find python-config or pkg-config python, please install Python development files from libpython-dev or similar])
677 AC_SUBST(PYTHON_CFLAGS)
678 AC_SUBST(PYTHON_LIBS)
681 # Logic for protobuf support.
683 if test "$enable_protobuf" = "yes"; then
684 # Check for protoc & protoc-c
686 # protoc is not required, it's only for a "be nice" helper target
687 AC_CHECK_PROGS([PROTOC], [protoc], [/bin/false])
689 AC_CHECK_PROGS([PROTOC_C], [protoc-c], [/bin/false])
690 if test "$PROTOC_C" = "/bin/false"; then
691 AC_MSG_FAILURE([protobuf requested but protoc-c not found. Install protobuf-c.])
694 PKG_CHECK_MODULES([PROTOBUF_C], [libprotobuf-c >= 0.14],, [
695 AC_MSG_FAILURE([protobuf requested but libprotobuf-c not found. Install protobuf-c.])
697 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [], [
698 AC_MSG_FAILURE([protobuf requested but protobuf-c.h not found. Install protobuf-c.])
701 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
703 AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$enable_protobuf" = "xyes"])
706 # Logic for old vpn commans support.
708 if test "$enable_oldvpn_commands" = "yes"; then
709 AC_DEFINE(KEEP_OLD_VPN_COMMANDS,, [Define for compiling with old vpn commands])
713 # End of logic for protobuf support.
716 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
717 if test "${enable_rtadv}" != "no"; then
719 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
724 if test x"${enable_user}" = x"no"; then
727 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
730 AC_DEFINE_UNQUOTED(FRR_USER, "${enable_user}", frr User)
733 if test x"${enable_group}" = x"no"; then
736 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
739 AC_DEFINE_UNQUOTED(FRR_GROUP, "${enable_group}", frr Group)
742 if test x"${enable_vty_group}" = x"yes" ; then
743 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
744 elif test x"${enable_vty_group}" != x""; then
745 if test x"${enable_vty_group}" != x"no"; then
746 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
749 AC_SUBST([enable_user])
750 AC_SUBST([enable_group])
751 AC_SUBST([enable_vty_group])
753 enable_configfile_mask=${enable_configfile_mask:-0600}
754 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
756 enable_logfile_mask=${enable_logfile_mask:-0600}
757 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
761 case "${enable_multipath}" in
765 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
766 MPATH_NUM="${enable_multipath}"
771 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
775 AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
777 AC_DEFINE_UNQUOTED(VTYSH_PAGER, "$VTYSH_PAGER", [What pager to use])
779 dnl --------------------
780 dnl Enable code coverage
781 dnl --------------------
782 AM_CONDITIONAL([HAVE_GCOV],[test '!' "$enable_gcov" = no])
784 dnl ------------------------------------
785 dnl Alpine only accepts numeric versions
786 dnl ------------------------------------
787 if test "x${enable_numeric_version}" != "x" ; then
788 VERSION="`echo ${VERSION} | tr -c -d '[[.0-9]]'`"
789 PACKAGE_VERSION="`echo ${PACKAGE_VERSION} | tr -c -d '[[.0-9]]'`"
792 dnl -----------------------------------
793 dnl Add extra version string to package
794 dnl name, string and version fields.
795 dnl -----------------------------------
796 if test "x${EXTRAVERSION}" != "x" ; then
797 VERSION="${VERSION}${EXTRAVERSION}"
798 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
799 AC_SUBST(PACKAGE_EXTRAVERSION, ["${EXTRAVERSION}"])
800 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
802 AC_SUBST(EXTRAVERSION)
804 if test "x$with_pkg_git_version" = "xyes"; then
805 if test -d "${srcdir}/.git"; then
806 AC_DEFINE(GIT_VERSION, [1], [include git version info])
807 else with_pkg_git_version="no"
808 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
811 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
813 AC_CHECK_TOOL([OBJCOPY], [objcopy], [:])
814 AC_CACHE_CHECK([for .interp value to use], [frr_cv_interp], [
816 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])], [
817 if $OBJCOPY -j.interp -Obinary conftest conftest.interp; then
818 frr_cv_interp="`xargs -0 echo < conftest.interp`"
820 test -f conftest.interp && rm conftest.interp
823 if test -n "$frr_cv_interp"; then
824 AC_DEFINE_UNQUOTED(INTERP, ["$frr_cv_interp"], [.interp value])
827 dnl ------------------------------------
828 dnl Check C keywords and standard types
829 dnl ------------------------------------
840 dnl -------------------------
841 dnl Check other header files.
842 dnl -------------------------
843 AC_CHECK_HEADERS([stropts.h sys/ksym.h \
844 linux/version.h asm/types.h \
847 ac_stdatomic_ok=false
848 AC_DEFINE(FRR_AUTOCONF_ATOMIC, 1, [did autoconf checks for atomic funcs])
849 AC_CHECK_HEADER([stdatomic.h],[
851 AC_MSG_CHECKING([whether _Atomic qualifier works])
852 AC_LINK_IFELSE([AC_LANG_SOURCE([[
853 #include <stdatomic.h>
854 int main(int argc, char **argv) {
859 AC_DEFINE(HAVE_STDATOMIC_H, 1, [found stdatomic.h])
867 AS_IF([$ac_stdatomic_ok], [true], [
868 AC_MSG_CHECKING([for __atomic_* builtins])
869 AC_LINK_IFELSE([AC_LANG_SOURCE([[
870 int main(int argc, char **argv) {
872 __atomic_store_n (&i, 0, __ATOMIC_RELEASE);
873 return __atomic_load_n (&i, __ATOMIC_ACQUIRE);
876 AC_DEFINE(HAVE___ATOMIC, 1, [found __atomic builtins])
881 dnl FreeBSD 9 has a broken stdatomic.h where _Atomic doesn't work
882 AC_MSG_CHECKING([for __sync_* builtins])
883 AC_LINK_IFELSE([AC_LANG_SOURCE([[
884 int main(int argc, char **argv) {
886 __sync_fetch_and_sub (&i, 1);
887 return __sync_val_compare_and_swap (&i, 0, 1);
890 AC_DEFINE(HAVE___SYNC, 1, [found __sync builtins])
893 AC_MSG_CHECKING([for __sync_swap builtin])
894 AC_LINK_IFELSE([AC_LANG_SOURCE([[
895 int main(int argc, char **argv) {
897 return __sync_swap (&i, 2);
900 AC_DEFINE(HAVE___SYNC_SWAP, 1, [found __sync_swap builtin])
908 AC_MSG_FAILURE([stdatomic.h unavailable and $CC has neither __atomic nor __sync builtins])
913 AC_CHECK_HEADERS([pthread_np.h],,, [
916 AC_CHECK_FUNCS([pthread_setname_np pthread_set_name_np])
918 dnl Utility macro to avoid retyping includes all the time
919 m4_define([FRR_INCLUDES],
921 #define _POSIX_C_SOURCE 200809L
922 #define __EXTENSIONS__
927 #include <sys/types.h>
928 /* sys/conf.h depends on param.h on FBSD at least */
929 #include <sys/param.h>
930 /* Required for MAXSIG */
932 #include <sys/socket.h>
934 # define __APPLE_USE_RFC_3542
936 #include <netinet/in.h>
937 #include <sys/time.h>
942 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
943 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
944 dnl an additional round for it.
946 AC_CHECK_HEADERS([net/if_var.h], [], [], FRR_INCLUDES)
948 m4_define([FRR_INCLUDES],
950 [#if HAVE_NET_IF_VAR_H
951 # include <net/if_var.h>
955 AC_CHECK_HEADERS([netinet/in_var.h \
956 net/if_dl.h net/netopt.h \
957 inet/nd.h netinet/ip_icmp.h \
958 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
959 [], [], FRR_INCLUDES)
961 AC_CHECK_HEADERS([ucontext.h], [], [],
964 #endif /* __USE_GNU */
968 m4_define([UCONTEXT_INCLUDES],
969 [#include <ucontext.h>])dnl
971 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
972 [], [], [UCONTEXT_INCLUDES])
973 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
974 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
975 [], [], [UCONTEXT_INCLUDES])],
976 [], [UCONTEXT_INCLUDES])
977 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
978 [], [], [UCONTEXT_INCLUDES])
980 m4_define([FRR_INCLUDES],
984 #include <netinet/in_systm.h>
985 #if HAVE_NETINET_IN_VAR_H
986 # include <netinet/in_var.h>
989 # include <net/if_dl.h>
991 #if HAVE_NET_NETOPT_H
992 # include <net/netopt.h>
994 #include <net/route.h>
996 # include <inet/nd.h>
998 #include <arpa/inet.h>
999 /* Required for IDRP */
1000 #if HAVE_NETINET_IP_ICMP_H
1001 # include <netinet/ip_icmp.h>
1005 dnl V6 headers are checked below, after we check for v6
1007 AC_MSG_CHECKING([which operating system interface to use])
1010 AC_MSG_RESULT([Solaris])
1012 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
1013 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1014 AC_DEFINE(_POSIX_C_SOURCE, 200809L, [enable POSIX.1-2008 and XPG7/SUSv4])
1016 AC_CHECK_LIB(socket, main)
1017 AC_CHECK_LIB(nsl, main)
1018 AC_CHECK_LIB(umem, main)
1022 AC_MSG_RESULT([Linux])
1024 AC_DEFINE(GNU_LINUX,,GNU Linux)
1025 AC_DEFINE(HAVE_NETLINK,,netlink)
1026 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1028 dnl Linux has a compilation problem with mixing
1029 dnl netinet/in.h and linux/in6.h they are not
1030 dnl compatible. There has been discussion on
1031 dnl how to fix it but no real progress on implementation
1032 dnl when they fix it, remove this
1033 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
1036 AC_MSG_RESULT([OpenBSD])
1038 AC_DEFINE(OPEN_BSD,,OpenBSD)
1039 AC_DEFINE(KAME,1,KAME IPv6)
1040 AC_DEFINE(BSD_V6_SYSCTL,1,BSD v6 sysctl to turn on and off forwarding)
1042 if test "x${enable_pimd}" != "xno"; then
1047 AC_MSG_FAILURE([pimd cannot be enabled as PIM support has been removed from OpenBSD 6.1])
1053 AC_MSG_RESULT([BSD])
1055 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
1056 AC_DEFINE(KAME,1,KAME IPv6)
1057 AC_DEFINE(BSD_V6_SYSCTL,1,BSD v6 sysctl to turn on and off forwarding)
1060 AM_CONDITIONAL(SOLARIS, test "${SOLARIS}" = "solaris")
1064 dnl ------------------------
1065 dnl Integrated REALMS option
1066 dnl ------------------------
1067 if test "${enable_realms}" = "yes"; then
1070 AC_DEFINE(SUPPORT_REALMS,, Realms support)
1073 echo "Sorry, only Linux has REALMS support"
1078 AM_CONDITIONAL([SUPPORT_REALMS], [test "${enable_realms}" = "yes"])
1080 dnl ---------------------
1081 dnl Integrated VTY option
1082 dnl ---------------------
1083 case "${enable_vtysh}" in
1088 AC_DEFINE(VTYSH,,VTY shell)
1091 AC_CHECK_LIB(readline, main, [
1092 LIBREADLINE="-lreadline"
1094 dnl readline failed - it might be incorrectly linked and missing its
1095 dnl termcap/tinfo/curses dependency. see if we can fix that...
1096 AC_SEARCH_LIBS(tputs, [termcap tinfo curses ncurses], [
1097 LIBREADLINE="$ac_cv_search_tputs"
1099 AC_MSG_ERROR([libreadline (needed for vtysh) not found and/or missing dependencies])
1102 dnl re-try with the lib we found above
1103 unset ac_cv_lib_readline_main
1104 AC_CHECK_LIB(readline, main, [
1105 LIBREADLINE="-lreadline $LIBREADLINE"
1107 AC_MSG_ERROR([libreadline (needed for vtysh) not found and/or missing dependencies])
1112 AC_CHECK_HEADER(readline/history.h)
1113 if test $ac_cv_header_readline_history_h = no;then
1114 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
1116 AC_CHECK_LIB(readline, rl_completion_matches, [true], [], [$LIBREADLINE])
1117 if test $ac_cv_lib_readline_rl_completion_matches = no; then
1118 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
1120 AC_CHECK_LIB(readline, [append_history], [frr_cv_append_history=yes], [frr_cv_append_history=no], [$LIBREADLINE])
1121 if test "$frr_cv_append_history" = yes; then
1122 AC_DEFINE(HAVE_APPEND_HISTORY, 1, [Have history.h append_history])
1126 AC_SUBST(LIBREADLINE)
1127 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
1132 dnl FRR detects the PAM library it is built against by checking for a
1133 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
1134 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
1135 dnl openpam.h doesn't do that, although depends on the header too. Hence a
1136 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
1139 if test "$with_libpam" = "yes"; then
1140 AC_CHECK_HEADER([security/pam_misc.h],
1141 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
1142 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
1143 pam_conv_func="misc_conv"
1146 AC_CHECK_HEADER([security/openpam.h],
1147 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
1148 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
1149 pam_conv_func="openpam_ttyconv"
1151 [], FRR_INCLUDES[#include <security/pam_appl.h>])
1152 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
1153 AC_MSG_WARN([*** pam support will not be built ***])
1158 if test "$with_libpam" = "yes"; then
1159 dnl took this test from proftpds configure.in and suited to our needs
1160 dnl -------------------------------------------------------------------------
1162 dnl This next check looks funky due to a linker problem with some versions
1163 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
1164 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
1165 dnl with RedHat 6.2 and Debian 2.2 or better.
1166 AC_CHECK_LIB(pam, pam_start,
1167 [AC_CHECK_LIB(pam, $pam_conv_func,
1168 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1170 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1171 LIBPAM="-lpam -lpam_misc"]
1175 [AC_CHECK_LIB(pam, pam_end,
1176 [AC_CHECK_LIB(pam, $pam_conv_func,
1177 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1178 LIBPAM="-lpam -ldl"],
1179 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1180 LIBPAM="-lpam -ldl -lpam_misc"]
1182 ],AC_MSG_WARN([*** pam support will not be built ***]),
1189 dnl -------------------------------
1190 dnl Endian-ness check
1191 dnl -------------------------------
1194 dnl -------------------------------
1195 dnl check the size in byte of the C
1196 dnl -------------------------------
1197 dnl AC_CHECK_SIZEOF(char)
1198 dnl AC_CHECK_SIZEOF(int)
1199 dnl AC_CHECK_SIZEOF(short)
1200 dnl AC_CHECK_SIZEOF(long)
1202 dnl ----------------------------
1203 dnl check existance of functions
1204 dnl ----------------------------
1210 dnl -------------------------------
1211 dnl bgpd needs pow() and hence libm
1212 dnl -------------------------------
1214 AC_CHECK_HEADER([math.h],
1215 [AC_CHECK_LIB([m], [pow],
1218 AC_CHECK_FUNCS(pow,[],[LIBM=""])
1221 if test x"$LIBM" = x ; then
1222 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
1228 AC_CHECK_FUNCS([ppoll], [
1229 AC_DEFINE([HAVE_PPOLL], 1, [have Linux/BSD ppoll()])
1231 AC_CHECK_FUNCS([pollts], [
1232 AC_DEFINE([HAVE_POLLTS], 1, [have NetBSD pollts()])
1242 AC_CHECK_HEADER([asm-generic/unistd.h],
1243 [AC_CHECK_DECL(__NR_setns,
1244 AC_DEFINE(HAVE_NETNS,, Have netns),,
1245 FRR_INCLUDES [#include <asm-generic/unistd.h>
1247 AC_CHECK_FUNCS(setns)]
1250 dnl --------------------------
1251 dnl Determine IS-IS I/O method
1252 dnl --------------------------
1253 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
1254 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
1255 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
1256 AC_CHECK_HEADER(net/bpf.h)
1257 AC_CHECK_HEADER(sys/dlpi.h)
1258 AC_MSG_CHECKING(zebra IS-IS I/O method)
1262 AC_MSG_RESULT(pfpacket)
1263 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
1267 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
1270 if test $ac_cv_header_net_bpf_h = no; then
1271 if test $ac_cv_header_sys_dlpi_h = no; then
1273 if test "${enable_isisd}" = yes -o "${enable_fabricd}" = yes; then
1274 AC_MSG_FAILURE([IS-IS support requested but no packet backend found])
1276 AC_MSG_WARN([*** IS-IS support will not be built ***])
1282 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
1285 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
1289 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
1291 dnl ---------------------------------------------------------------
1292 dnl figure out how to specify an interface in multicast sockets API
1293 dnl ---------------------------------------------------------------
1294 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
1296 AC_CHECK_HEADERS([linux/mroute.h], [], [],[
1297 #include <sys/socket.h>
1298 #include <netinet/in.h>
1299 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
1300 #include <linux/types.h>
1303 m4_define([FRR_INCLUDES],
1305 [#if HAVE_LINUX_MROUTE_H
1306 # include <linux/mroute.h>
1310 AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
1311 #include <sys/socket.h>
1312 #include <sys/types.h>
1313 #include <netinet/in.h>
1314 #include <net/route.h>
1317 m4_define([FRR_INCLUDES],
1319 [#if HAVE_NETINET_IP_MROUTE_H
1320 # include <netinet/ip_mroute.h>
1324 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
1325 AC_TRY_COMPILE([#include <sys/param.h>],
1326 [#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__sun)
1329 #error No support for BSD struct ip_mreq hack detected
1330 #endif],[AC_MSG_RESULT(yes)
1331 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1334 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1336 #include <sys/types.h>
1337 #include <netinet/in.h>
1338 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1339 ], [AC_MSG_RESULT(yes)
1340 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1343 dnl ---------------------------------------------------------------
1344 dnl figure out how to check link-state
1345 dnl ---------------------------------------------------------------
1346 AC_CHECK_HEADER( [net/if_media.h],
1347 [m4_define([LINK_DETECT_INCLUDES],
1349 [#include <net/if_media.h>
1351 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1352 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1353 [], LINK_DETECT_INCLUDES)],
1357 dnl ---------------------------------------------------------------
1358 dnl Additional, newer way to check link-state using ifi_link_state.
1359 dnl Not available in all BSD's when ifmediareq available
1360 dnl ---------------------------------------------------------------
1361 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1362 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1365 dnl ------------------------
1366 dnl TCP_MD5SIG socket option
1367 dnl ------------------------
1369 AC_CHECK_HEADER([netinet/tcp.h],
1370 [m4_define([MD5_INCLUDES],
1372 [#include <netinet/tcp.h>
1374 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1377 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1378 AC_CHECK_HEADER([linux/tcp.h],
1379 [m4_define([MD5_INCLUDES],
1381 [#include <linux/tcp.h>
1383 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1386 dnl ----------------------------------------------------------------------------
1387 dnl figure out if domainname is available in the utsname struct (GNU extension).
1388 dnl ----------------------------------------------------------------------------
1389 AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1391 dnl ------------------
1392 dnl IPv6 header checks
1393 dnl ------------------
1394 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
1395 netinet6/in6_var.h netinet6/nd6.h], [], [],
1398 m4_define([FRR_INCLUDES],dnl
1400 [#if HAVE_NETINET6_IN6_H
1401 #include <netinet6/in6.h>
1403 #if HAVE_NETINET_IN6_VAR_H
1404 #include <netinet/in6_var.h>
1406 #include <netinet/icmp6.h>
1407 #if HAVE_NETINET6_IN6_VAR_H
1408 # include <netinet6/in6_var.h>
1410 #if HAVE_NETINET6_ND6_H
1411 # include <netinet6/nd6.h>
1415 dnl disable doc check
1416 AC_CHECK_PROGS([SPHINXBUILD], [sphinx-build sphinx-build3 sphinx-build2], [/bin/false])
1417 if test "$SPHINXBUILD" = "/bin/false"; then
1418 if test "${enable_doc}" = "yes"; then
1419 AC_MSG_ERROR([Documentation was explicitly requested with --enable-doc but sphinx-build is not available. Please disable docs or install sphinx.])
1422 AM_CONDITIONAL(DOC, test "${enable_doc}" != "no" -a "$SPHINXBUILD" != "/bin/false")
1423 AM_CONDITIONAL(DOC_HTML, test "${enable_doc_html}" = "yes")
1425 dnl --------------------
1426 dnl Daemon disable check
1427 dnl --------------------
1428 AM_CONDITIONAL(ZEBRA, test "${enable_zebra}" != "no")
1430 if test "${enable_bgpd}" = "no";then
1435 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1437 AM_CONDITIONAL(RIPD, test "${enable_ripd}" != "no")
1438 AM_CONDITIONAL(OSPFD, test "${enable_ospfd}" != "no")
1439 AM_CONDITIONAL(LDPD, test "${enable_ldpd}" != "no")
1441 AS_IF([test "${enable_ldpd}" != "no"], [
1442 AC_DEFINE(HAVE_LDPD, 1, ldpd)
1445 if test "$enable_bfdd" = "no"; then
1446 AC_DEFINE(HAVE_BFDD, 0, bfdd)
1449 AC_DEFINE(HAVE_BFDD, 1, bfdd)
1454 AC_DEFINE(BFD_LINUX, 1, bfdd)
1458 AC_DEFINE(BFD_BSD, 1, bfdd)
1463 AM_CONDITIONAL(BFDD, [test "x$BFDD" = "xbfdd"])
1465 if test "$ac_cv_lib_json_c_json_object_get" = no -a "x$BFDD" = "xbfdd"; then
1466 AC_MSG_ERROR(["you must use json-c library to use bfdd"])
1472 if test "${enable_nhrpd}" != "no"; then
1477 if test "${enable_nhrpd}" = "yes"; then
1478 AC_MSG_ERROR([nhrpd requires kernel APIs that are only present on Linux.])
1482 AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1484 AM_CONDITIONAL(EIGRPD, test "${enable_eigrpd}" != "no")
1486 if test "${enable_watchfrr}" = "no";then
1491 AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
1494 if test "${enable_ospfapi}" != "no";then
1495 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1497 if test "${enable_ospfclient}" != "no";then
1498 OSPFCLIENT="ospfclient"
1502 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1503 AM_CONDITIONAL(RIPNGD, test "${enable_ripngd}" != "no")
1504 AM_CONDITIONAL(BABELD, test "${enable_babeld}" != "no")
1505 AM_CONDITIONAL(OSPF6D, test "${enable_ospf6d}" != "no")
1506 AM_CONDITIONAL(ISISD, test "${enable_isisd}" != "no")
1507 AM_CONDITIONAL(PIMD, test "${enable_pimd}" != "no")
1508 AM_CONDITIONAL(PBRD, test "${enable_pbrd}" != "no")
1509 AM_CONDITIONAL(SHARPD, test "${enable_sharpd}" = "yes")
1510 AM_CONDITIONAL(STATICD, test "${enable_staticd}" != "no")
1511 AM_CONDITIONAL(FABRICD, test "${enable_fabricd}" != "no")
1513 if test "${enable_bgp_announce}" = "no";then
1514 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1516 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1519 if test "${enable_bgp_vnc}" != "no";then
1520 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
1522 AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
1525 AC_CHECK_LIB(crypt, crypt, [],
1526 [AC_CHECK_LIB(crypto, DES_crypt)])
1527 AC_CHECK_LIB(resolv, res_init)
1529 dnl ---------------------------
1530 dnl check system has PCRE regexp
1531 dnl ---------------------------
1532 if test "x$enable_pcreposix" = "xyes"; then
1533 AC_CHECK_LIB(pcreposix, regexec, [], [
1534 AC_MSG_ERROR([--enable-pcreposix given but unable to find libpcreposix])
1537 AC_SUBST(HAVE_LIBPCREPOSIX)
1539 dnl ------------------
1540 dnl check C-Ares library
1541 dnl ------------------
1542 if test "${NHRPD}" != ""; then
1543 PKG_CHECK_MODULES([CARES], [libcares], , [
1544 AC_MSG_ERROR([trying to build nhrpd, but libcares not found. install c-ares and its -dev headers.])
1549 dnl ------------------
1550 dnl check Net-SNMP library
1551 dnl ------------------
1552 if test "${enable_snmp}" != "" -a "${enable_snmp}" != "no"; then
1553 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1554 if test x"$NETSNMP_CONFIG" = x"no"; then
1555 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1557 SNMP_LIBS="`${NETSNMP_CONFIG} --agent-libs`"
1558 SNMP_CFLAGS="`${NETSNMP_CONFIG} --base-cflags`"
1559 # net-snmp lists all of its own dependencies. we absolutely do not want that
1560 # among other things we avoid a GPL vs. OpenSSL license conflict here
1561 for removelib in crypto ssl sensors pci wrap; do
1562 SNMP_LIBS="`echo $SNMP_LIBS | sed -e 's/\(^\|\s\)-l'$removelib'\b/ /g' -e 's/\(^\|\s\)\([^\s]*\/\)\?lib'$removelib'\.[^\s]\+\b/ /g'`"
1564 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1565 AC_LINK_IFELSE_FLAGS([$SNMP_CFLAGS], [$SNMP_LIBS], [AC_LANG_PROGRAM([
1573 AC_MSG_ERROR([--enable-snmp given but not usable])])
1574 case "${enable_snmp}" in
1579 SNMP_METHOD="${enable_snmp}"
1582 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use yes or agentx])
1585 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1586 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1588 AM_CONDITIONAL([SNMP], [test "x${SNMP_METHOD}" != "x"])
1590 AC_SUBST(SNMP_CFLAGS)
1595 PKG_CHECK_MODULES(libyang, [libyang >= 0.16.7], , [
1596 AC_MSG_ERROR([libyang (>= 0.16.7) was not found on your system.])
1598 AC_CHECK_MEMBER([struct lyd_node.priv], [], [
1599 AC_MSG_ERROR([m4_normalize([
1600 libyang needs to be compiled with ENABLE_LYD_PRIV=ON.
1601 See http://docs.frrouting.org/projects/dev-guide/en/latest/building-libyang.html for details.])
1603 ], [[#include <libyang/libyang.h>]])
1606 dnl configuration rollbacks
1609 if test "$enable_config_rollbacks" = "yes"; then
1610 PKG_CHECK_MODULES(sqlite3,[sqlite3], [
1611 AC_DEFINE(HAVE_CONFIG_ROLLBACKS,1,Enable configuration rollbacks)
1612 AC_DEFINE(HAVE_SQLITE3,1,Enable sqlite3 database)
1615 AC_MSG_ERROR([--enable-config-rollbacks given but sqlite3 was not found on your system.])
1618 AM_CONDITIONAL(SQLITE3, $SQLITE3)
1623 if test "$enable_confd" != "" -a "$enable_confd" != "no"; then
1624 AC_CHECK_PROG([CONFD], [confd], [confd], [/bin/false])
1625 if test "x$CONFD" = "x/bin/false"; then
1626 AC_MSG_ERROR([confd was not found on your system.])]
1628 CONFD_CFLAGS="-I${enable_confd}/include -L${enable_confd}/lib"
1629 AC_SUBST(CONFD_CFLAGS)
1630 AC_DEFINE(HAVE_CONFD,1,Enable confd integration)
1632 AM_CONDITIONAL([CONFD], [test "x$enable_confd" != "x"])
1637 if test "$enable_sysrepo" = "yes"; then
1638 PKG_CHECK_MODULES(sysrepo,[libsysrepo],
1639 [AC_DEFINE(HAVE_SYSREPO,1,Enable sysrepo integration)
1642 AC_MSG_ERROR([sysrepo was not found on your system.])]
1645 AM_CONDITIONAL([SYSREPO], [test "x$enable_sysrepo" = "xyes"])
1650 AC_SEARCH_LIBS([sqrt], [m])
1655 AC_SEARCH_LIBS(dlopen, [dl dld], [], [
1656 AC_MSG_ERROR([unable to find the dlopen()])
1659 AC_CHECK_HEADERS([link.h])
1661 AC_CACHE_CHECK([for dlinfo(RTLD_DI_ORIGIN)], [frr_cv_rtld_di_origin], [
1662 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1670 dlinfo (NULL, RTLD_DI_ORIGIN, &origin);
1672 frr_cv_rtld_di_origin=yes
1674 frr_cv_rtld_di_origin=no
1677 if test "$frr_cv_rtld_di_origin" = yes; then
1678 AC_DEFINE(HAVE_DLINFO_ORIGIN, 1, [Have dlinfo RTLD_DI_ORIGIN])
1681 AC_CACHE_CHECK([for dlinfo(RTLD_DI_LINKMAP)], [frr_cv_rtld_di_linkmap], [
1682 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1689 struct link_map *lm = NULL;
1690 dlinfo (NULL, RTLD_DI_LINKMAP, &lm);
1692 frr_cv_rtld_di_linkmap=yes
1694 frr_cv_rtld_di_linkmap=no
1697 if test "$frr_cv_rtld_di_linkmap" = yes; then
1698 AC_DEFINE(HAVE_DLINFO_LINKMAP, 1, [Have dlinfo RTLD_DI_LINKMAP])
1701 AM_CONDITIONAL(SNMP, test "x$SNMP_METHOD" = "xagentx")
1703 dnl ---------------------------
1704 dnl sockaddr and netinet checks
1705 dnl ---------------------------
1708 struct vifctl, struct mfcctl, struct sioc_sg_req,
1709 vifi_t, struct sioc_vif_req, struct igmpmsg,
1710 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1711 struct nd_opt_adv_interval, struct rt_addrinfo,
1712 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1713 [], [], FRR_INCLUDES)
1715 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1716 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1717 struct sockaddr_dl.sdl_len,
1718 struct if6_aliasreq.ifra_lifetime,
1719 struct nd_opt_adv_interval.nd_opt_ai_type],
1720 [], [], FRR_INCLUDES)
1722 dnl ---------------------------
1723 dnl IRDP/pktinfo/icmphdr checks
1724 dnl ---------------------------
1726 AC_CHECK_TYPES([struct in_pktinfo], [
1727 AC_CHECK_TYPES([struct icmphdr], [
1736 case "${enable_irdp}" in
1738 $IRDP || AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1745 AM_CONDITIONAL(IRDP, $IRDP)
1747 dnl -----------------------
1748 dnl checking for IP_PKTINFO
1749 dnl -----------------------
1750 AC_MSG_CHECKING(for IP_PKTINFO)
1751 AC_TRY_COMPILE([#include <netdb.h>], [
1752 int opt = IP_PKTINFO;
1755 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1760 dnl ---------------------------
1761 dnl checking for IP_RECVDSTADDR
1762 dnl ---------------------------
1763 AC_MSG_CHECKING(for IP_RECVDSTADDR)
1764 AC_TRY_COMPILE([#include <netinet/in.h>], [
1765 int opt = IP_RECVDSTADDR;
1768 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1773 dnl ----------------------
1774 dnl checking for IP_RECVIF
1775 dnl ----------------------
1776 AC_MSG_CHECKING(for IP_RECVIF)
1777 AC_TRY_COMPILE([#include <netinet/in.h>], [
1778 int opt = IP_RECVIF;
1781 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1786 dnl ----------------------
1787 dnl checking for SO_BINDANY
1788 dnl ----------------------
1789 AC_MSG_CHECKING(for SO_BINDANY)
1790 AC_TRY_COMPILE([#include <sys/socket.h>], [
1791 int opt = SO_BINDANY;
1794 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1799 dnl ----------------------
1800 dnl checking for IP_FREEBIND
1801 dnl ----------------------
1802 AC_MSG_CHECKING(for IP_FREEBIND)
1803 AC_TRY_COMPILE([#include <netinet/in.h>], [
1804 int opt = IP_FREEBIND;
1807 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1812 dnl --------------------------------------
1813 dnl checking for be32dec existence or not
1814 dnl --------------------------------------
1815 AC_CHECK_DECLS([be32enc, be32dec], [], [],
1816 [#include <sys/endian.h>])
1818 dnl --------------------------------------
1819 dnl checking for clock_time monotonic struct and call
1820 dnl --------------------------------------
1821 AC_CHECK_DECL(CLOCK_MONOTONIC,
1822 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1823 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1824 ], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
1826 dnl --------------------------------------
1827 dnl checking for flex and bison
1828 dnl --------------------------------------
1831 AC_MSG_CHECKING(version of flex)
1832 frr_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
1833 frr_ac_flex_version="${frr_ac_flex_version##* }"
1834 AC_MSG_RESULT([$frr_ac_flex_version])
1835 AX_COMPARE_VERSION([$frr_ac_flex_version], [lt], [2.5.20], [
1836 LEX="$SHELL $missing_dir/missing flex"
1837 if test -f "${srcdir}/lib/command_lex.c" -a -f "${srcdir}/lib/command_lex.h"; then
1838 AC_MSG_WARN([using pregenerated flex output files])
1840 AC_MSG_ERROR([flex failure and pregenerated files not included (probably a git build)])
1842 AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
1843 AC_SUBST([LEXLIB], [''])
1847 dnl thanks GNU bison for this b*llshit...
1848 AC_MSG_CHECKING(version of bison)
1849 frr_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
1850 frr_ac_bison_version="${frr_ac_bison_version##* }"
1851 frr_ac_bison_missing="false"
1852 case "x${frr_ac_bison_version}" in
1855 BISON_CLOSEBRACE='"'
1857 AC_MSG_RESULT([$frr_ac_bison_version - 2.7 or older])
1860 AC_MSG_RESULT([$frr_ac_bison_version])
1861 AC_MSG_WARN([installed bison is too old. Please install GNU bison 2.7.x or newer.])
1862 frr_ac_bison_missing="true"
1865 AC_MSG_RESULT([none])
1866 AC_MSG_WARN([could not determine bison version. Please install GNU bison 2.7.x or newer.])
1867 frr_ac_bison_missing="true"
1871 BISON_CLOSEBRACE='}'
1872 BISON_VERBOSE='-Dparse.error=verbose'
1873 AC_MSG_RESULT([$frr_ac_bison_version - 3.0 or newer])
1876 AC_SUBST(BISON_OPENBRACE)
1877 AC_SUBST(BISON_CLOSEBRACE)
1878 AC_SUBST(BISON_VERBOSE)
1880 if $frr_ac_bison_missing; then
1881 YACC="$SHELL $missing_dir/missing bison -y"
1882 if test -f "${srcdir}/lib/command_parse.c" -a -f "${srcdir}/lib/command_parse.h"; then
1883 AC_MSG_WARN([using pregenerated bison output files])
1885 AC_MSG_ERROR([bison failure and pregenerated files not included (probably a git build)])
1889 dnl -------------------
1890 dnl capabilities checks
1891 dnl -------------------
1892 if test "${enable_capabilities}" != "no"; then
1893 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1894 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1896 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1897 frr_ac_keepcaps="yes"],
1900 if test x"${frr_ac_keepcaps}" = x"yes"; then
1901 AC_CHECK_HEADERS(sys/capability.h)
1903 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1904 AC_CHECK_LIB(cap, cap_init,
1905 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1910 AC_CHECK_HEADERS(priv.h,
1911 [AC_MSG_CHECKING(Solaris style privileges are available)
1912 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1914 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1915 frr_ac_scaps="yes"],
1921 if test x"${frr_ac_scaps}" = x"yes" \
1922 -o x"${frr_ac_lcaps}" = x"yes"; then
1923 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1928 dnl ---------------------------
1929 dnl check for glibc 'backtrace'
1930 dnl ---------------------------
1931 if test x"${enable_backtrace}" != x"no" ; then
1933 PKG_CHECK_MODULES([UNWIND], [libunwind], [
1934 AC_DEFINE(HAVE_LIBUNWIND, 1, [libunwind])
1939 AC_CHECK_FUNCS([printstack], [
1940 AC_DEFINE([HAVE_PRINTSTACK], 1, [Solaris printstack])
1945 if test "$backtrace_ok" = no; then
1946 AC_CHECK_HEADER([execinfo.h], [
1947 AC_SEARCH_LIBS([backtrace], [execinfo], [
1948 AC_DEFINE(HAVE_GLIBC_BACKTRACE, 1, [Glibc backtrace])
1955 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1956 dnl user explicitly requested backtrace but we failed to find support
1957 AC_MSG_FAILURE([failed to find backtrace or libunwind support])
1961 dnl -----------------------------------------
1962 dnl check for malloc mallinfo struct and call
1963 dnl this must try and link using LIBS, in
1964 dnl order to check no alternative allocator
1965 dnl has been specified, which might not provide
1966 dnl mallinfo, e.g. such as Umem on Solaris.
1967 dnl -----------------------------------------
1968 AC_CHECK_HEADERS([malloc.h malloc_np.h malloc/malloc.h],,, [FRR_INCLUDES])
1970 AC_CACHE_CHECK([whether mallinfo is available], [frr_cv_mallinfo], [
1971 AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES [
1972 #ifdef HAVE_MALLOC_H
1975 #ifdef HAVE_MALLOC_NP_H
1976 #include <malloc_np.h>
1978 #ifdef HAVE_MALLOC_MALLOC_H
1979 #include <malloc/malloc.h>
1982 struct mallinfo ac_x; ac_x = mallinfo ();
1989 if test "$frr_cv_mallinfo" = yes; then
1990 AC_DEFINE(HAVE_MALLINFO,,mallinfo)
1993 AC_MSG_CHECKING(whether malloc_usable_size is available)
1994 AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES [
1995 #ifdef HAVE_MALLOC_H
1998 #ifdef HAVE_MALLOC_MALLOC_H
1999 #include <malloc/malloc.h>
2002 size_t ac_x; ac_x = malloc_usable_size(NULL);
2005 AC_DEFINE(HAVE_MALLOC_USABLE_SIZE,,malloc_usable_size)
2009 AC_MSG_CHECKING(whether malloc_size is available)
2010 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
2011 #ifdef HAVE_MALLOC_H
2014 #ifdef HAVE_MALLOC_MALLOC_H
2015 #include <malloc/malloc.h>
2018 size_t ac_x; ac_x = malloc_size(NULL);
2021 AC_DEFINE(HAVE_MALLOC_SIZE,,malloc_size)
2030 if test "x$enable_zeromq" != "xno"; then
2031 PKG_CHECK_MODULES(ZEROMQ, [libzmq >= 4.0.0], [
2032 AC_DEFINE(HAVE_ZEROMQ, 1, [Enable ZeroMQ support])
2035 if test "x$enable_zeromq" = "xyes"; then
2036 AC_MSG_ERROR([configuration specifies --enable-zeromq but libzmq was not found])
2040 AM_CONDITIONAL([ZEROMQ], test "x$ZEROMQ" = "xtrue")
2045 dev_version=`echo $VERSION | grep dev`
2046 #don't expire deprecated code in non 'dev' branch
2047 if test "${dev_version}" = ""; then
2050 CONFDATE=`date '+%Y%m%d'`
2054 dnl ------------------------------
2055 dnl set paths for state directory
2056 dnl ------------------------------
2057 AC_MSG_CHECKING(directory to use for state file)
2058 if test "${prefix}" = "NONE"; then
2059 frr_statedir_prefix="";
2061 frr_statedir_prefix=${prefix}
2063 if test "${localstatedir}" = '${prefix}/var'; then
2064 for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
2065 ${frr_statedir_prefix}/var/adm dnl
2066 ${frr_statedir_prefix}/etc dnl
2072 test -d $FRR_STATE_DIR && break
2074 frr_statedir=$FRR_STATE_DIR
2076 frr_statedir=${localstatedir}
2078 if test $frr_statedir = "/dev/null"; then
2079 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
2081 AC_MSG_RESULT(${frr_statedir})
2082 AC_SUBST(frr_statedir)
2084 AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
2085 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
2086 AC_DEFINE_UNQUOTED(BFDD_CONTROL_SOCKET, "$frr_statedir/bfdd.sock", bfdd control socket)
2087 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
2088 AC_DEFINE_UNQUOTED(DAEMON_DB_DIR, "$frr_statedir",daemon database directory)
2090 dnl autoconf does this, but it does it too late...
2091 test "x$prefix" = xNONE && prefix=$ac_default_prefix
2092 test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
2094 dnl get the full path, recursing through variables...
2095 vtysh_bin="$bindir/vtysh"
2096 for I in 1 2 3 4 5 6 7 8 9 10; do
2097 eval vtysh_bin="\"$vtysh_bin\""
2099 AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
2102 CFG_SYSCONF="$sysconfdir"
2104 CFG_STATE="$frr_statedir"
2105 CFG_MODULE="$moduledir"
2106 CFG_YANGMODELS="$yangmodelsdir"
2107 CFG_LIBYANG_PLUGINS="$libyang_pluginsdir"
2108 for I in 1 2 3 4 5 6 7 8 9 10; do
2109 eval CFG_SYSCONF="\"$CFG_SYSCONF\""
2110 eval CFG_SBIN="\"$CFG_SBIN\""
2111 eval CFG_STATE="\"$CFG_STATE\""
2112 eval CFG_MODULE="\"$CFG_MODULE\""
2113 eval CFG_YANGMODELS="\"$CFG_YANGMODELS\""
2114 eval CFG_LIBYANG_PLUGINS="\"$CFG_LIBYANG_PLUGINS\""
2116 AC_SUBST(CFG_SYSCONF)
2119 AC_SUBST(CFG_MODULE)
2120 AC_SUBST(CFG_YANGMODELS)
2121 AC_SUBST(CFG_LIBYANG_PLUGINS)
2122 AC_DEFINE_UNQUOTED(MODULE_PATH, "$CFG_MODULE", path to modules)
2123 AC_DEFINE_UNQUOTED(YANG_MODELS_PATH, "$CFG_YANGMODELS", path to YANG data models)
2124 AC_DEFINE_UNQUOTED(LIBYANG_PLUGINS_PATH, "$CFG_LIBYANG_PLUGINS", path to libyang plugins)
2126 dnl ------------------------------------
2127 dnl Enable RPKI and add librtr to libs
2128 dnl ------------------------------------
2129 if test "${enable_rpki}" = "yes"; then
2130 PKG_CHECK_MODULES(RTRLIB,[rtrlib >= 0.5.0],
2133 AC_MSG_ERROR([rtrlib was not found on your system or is too old.])]
2136 AM_CONDITIONAL([RPKI], test "x$RPKI" = "xtrue")
2138 dnl ------------------------------------------
2139 dnl Check whether rtrlib was build with ssh support
2140 dnl ------------------------------------------
2141 AC_MSG_CHECKING([whether the RTR Library is compiled with SSH])
2142 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "rtrlib/rtrlib.h"]],
2143 [[struct tr_ssh_config config;]])],
2145 AC_DEFINE(FOUND_SSH,,found_ssh)],
2149 dnl ---------------------------
2150 dnl Check htonl works correctly
2151 dnl ---------------------------
2152 AC_MSG_CHECKING(for working htonl)
2153 AC_CACHE_VAL(ac_cv_htonl_works,
2154 [AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
2155 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
2158 AC_MSG_RESULT($ac_cv_htonl_works)
2160 AC_CONFIG_FILES([Makefile],[sed -e 's/^#AUTODERP# //' -i Makefile])
2168 snapcraft/snapcraft.yaml
2170 tests/lib/cli/test_cli.refout
2171 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
2172 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh
2175 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
2176 AC_CONFIG_FILES([tools/frr],[chmod +x tools/frr])
2178 AC_CONFIG_COMMANDS([lib/route_types.h], [
2179 dst="${ac_abs_top_builddir}/lib/route_types.h"
2180 ${PERL} "${ac_abs_top_srcdir}/lib/route_types.pl" \
2181 < "${ac_abs_top_srcdir}/lib/route_types.txt" \
2184 && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
2185 && rm "${dst}.tmp" \
2186 || mv "${dst}.tmp" "${dst}"
2191 AS_IF([test "x$with_pkg_git_version" = "xyes"], [
2192 AC_CONFIG_COMMANDS([lib/gitversion.h], [
2193 dst="${ac_abs_top_builddir}/lib/gitversion.h"
2194 ${PERL} "${ac_abs_top_srcdir}/lib/gitversion.pl" \
2195 "${ac_abs_top_srcdir}" \
2198 && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
2199 && rm "${dst}.tmp" \
2200 || mv "${dst}.tmp" "${dst}"
2206 ## Hack, but working solution to avoid rebuilding of frr.info.
2207 ## It's already in CVS until texinfo 4.7 is more common.
2211 FRRouting configuration
2212 ------------------------------
2213 FRR version : ${PACKAGE_VERSION}
2214 host operating system : ${host_os}
2215 source code location : ${srcdir}
2217 compiler flags : ${CFLAGS} ${SAN_FLAGS}
2219 linker flags : ${LDFLAGS} ${SAN_FLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
2220 state file directory : ${frr_statedir}
2221 config file directory : `eval echo \`echo ${sysconfdir}\``
2222 example directory : `eval echo \`echo ${exampledir}\``
2223 module directory : ${CFG_MODULE}
2224 user to run as : ${enable_user}
2225 group to run as : ${enable_group}
2226 group for vty sockets : ${enable_vty_group}
2227 config file mask : ${enable_configfile_mask}
2228 log file mask : ${enable_logfile_mask}
2229 zebra protobuf enabled : ${enable_protobuf:-no}
2231 The above user and group must have read/write access to the state file
2232 directory and to the config files in the config file directory."
2234 if test "${enable_doc}" != "no";then
2235 AS_IF([test "$SPHINXBUILD" = /bin/false],
2236 AC_MSG_WARN(sphinx-build is missing but required to build documentation))