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.0, [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])
94 AC_ARG_ENABLE(tcmalloc,
95 AS_HELP_STRING([--enable-tcmalloc], [Turn on tcmalloc]),
96 [case "${enableval}" in
97 yes) tcmalloc_enabled=true
98 LIBS="$LIBS -ltcmalloc_minimal"
100 no) tcmalloc_enabled=false ;;
101 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
102 esac],[tcmalloc_enabled=false])
105 dnl Thanks autoconf, but we don't want a default -g -O2. We have our own
106 dnl flag determination logic.
109 dnl --------------------
110 dnl Check CC and friends
111 dnl --------------------
112 dnl note orig_cflags is also used further down
113 orig_cflags="$CFLAGS"
118 dnl remove autoconf default "-g -O2"
119 CFLAGS="$orig_cflags"
121 dnl NB: see C11 below
126 dnl autoconf 2.59 appears not to support AC_PROG_SED
128 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
130 dnl try and enable CFLAGS that are useful for FRR
131 dnl - specifically, options to control warnings
133 AC_USE_SYSTEM_EXTENSIONS
134 AC_DEFUN([AC_C_FLAG], [{
135 m4_pushdef([cachename],[m4_translit([frr_cv_$1],[ =-],[___])])
136 AC_CACHE_CHECK([[whether $CC supports $1]], cachename, [
138 ac_c_flag_save="$CFLAGS"
141 [AC_LANG_PROGRAM([[]])],
147 CFLAGS="$ac_c_flag_save"
150 if test "${cachename}" = yes; then
151 m4_if([$3], [], [CFLAGS="$CFLAGS $1"], [$3])
156 m4_popdef([cachename])
159 AC_DEFUN([AC_LINK_IFELSE_FLAGS], [{
161 ac_cflags_save="$CFLAGS"
169 CFLAGS="$ac_cflags_save"
174 CFLAGS="$ac_cflags_save"
181 dnl ICC won't bail on unknown options without -diag-error 10006
182 dnl need to do this first so we get useful results for the other options
183 AC_C_FLAG([-diag-error 10006])
185 dnl AC_PROG_CC_C99 may change CC to include -std=gnu99 or something
187 CC="${CC% -std=gnu99}"
190 AC_C_FLAG([-std=gnu11], [CC="$ac_cc"], [CC="$CC -std=gnu11"])
192 dnl if the user has specified any CFLAGS, override our settings
193 if test "x${enable_gcov}" = "xyes"; then
194 if test "z$orig_cflags" = "z"; then
195 AC_C_FLAG([-coverage])
199 LDFLAGS="${LDFLAGS} -lgcov"
200 elif test "x${enable_dev_build}" = "xyes"; then
201 AC_DEFINE(DEV_BUILD,,Build for development)
202 if test "z$orig_cflags" = "z"; then
207 if test "z$orig_cflags" = "z"; then
214 AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
216 dnl always want these CFLAGS
217 AC_C_FLAG([-fno-omit-frame-pointer])
218 AC_C_FLAG([-funwind-tables])
221 AC_C_FLAG([-Wmissing-prototypes])
222 AC_C_FLAG([-Wmissing-declarations])
223 AC_C_FLAG([-Wpointer-arith])
224 AC_C_FLAG([-Wbad-function-cast])
225 AC_C_FLAG([-Wwrite-strings])
226 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
227 AC_C_FLAG([-Wcast-qual])
228 AC_C_FLAG([-Wstrict-prototypes])
229 AC_C_FLAG([-Wmissing-noreturn])
230 AC_C_FLAG([-Wmissing-format-attribute])
231 AC_C_FLAG([-Wunreachable-code])
232 AC_C_FLAG([-Wpacked])
233 AC_C_FLAG([-Wpadded])
235 AC_C_FLAG([-Wno-unused-result])
237 AC_C_FLAG([-Wno-unused-parameter])
238 AC_C_FLAG([-Wno-missing-field-initializers])
240 dnl ICC emits a broken warning for const char *x = a ? "b" : "c";
241 dnl for some reason the string consts get 'promoted' to char *,
242 dnl triggering a const to non-const conversion warning.
243 AC_C_FLAG([-diag-disable 3179])
245 if test x"${enable_werror}" = x"yes" ; then
251 if test "$enable_address_sanitizer" = "yes"; then
252 AC_C_FLAG([-fsanitize=address], [
253 AC_MSG_ERROR([$CC does not support Address Sanitizer.])
255 SAN_FLAGS="$SAN_FLAGS -fsanitize=address"
258 if test "$enable_thread_sanitizer" = "yes"; then
259 AC_C_FLAG([-fsanitize=thread], [
260 AC_MSG_ERROR([$CC does not support Thread Sanitizer.])
262 SAN_FLAGS="$SAN_FLAGS -fsanitize=thread"
265 if test "$enable_memory_sanitizer" = "yes"; then
266 AC_C_FLAG([-fsanitize=thread -fPIE -pie], [
267 AC_MSG_ERROR([$CC does not support Thread Sanitizer.])
269 SAN_FLAGS="-fsanitize=memory -fPIE -pie"
272 AC_SUBST([SAN_FLAGS])
280 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
281 LIBS="$PTHREAD_LIBS $LIBS"
283 AC_MSG_FAILURE([This FRR version needs pthreads])
292 AC_CHECK_TOOL(AR, ar)
294 dnl -----------------
295 dnl System extensions
296 dnl -----------------
304 dnl ----------------------
305 dnl Packages configuration
306 dnl ----------------------
307 AC_ARG_WITH(pkg-extra-version,
308 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
309 [EXTRAVERSION=$withval],)
310 AC_ARG_WITH(pkg-git-version,
311 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
312 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
313 AC_ARG_WITH(vtysh_pager,
314 AS_HELP_STRING([--with-vtysh-pager=PAGER], [control what pager is compiled in as default]),
315 VTYSH_PAGER=$withval, VTYSH_PAGER="more")
317 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for FRR]))
319 AS_HELP_STRING([--disable-doc], [do not build docs]))
320 AC_ARG_ENABLE(doc-html,
321 AS_HELP_STRING([--enable-doc-html], [build HTML docs]))
323 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
325 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
327 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
328 AC_ARG_ENABLE(ripngd,
329 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
331 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
332 AC_ARG_ENABLE(ospf6d,
333 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
335 AS_HELP_STRING([--disable-ldpd], [do not build ldpd]))
337 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
338 AC_ARG_ENABLE(eigrpd,
339 AS_HELP_STRING([--disable-eigrpd], [do not build eigrpd]))
340 AC_ARG_ENABLE(babeld,
341 AS_HELP_STRING([--disable-babeld], [do not build babeld]))
342 AC_ARG_ENABLE(watchfrr,
343 AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
345 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
347 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
349 AS_HELP_STRING([--disable-pbrd], [do not build pbrd]))
350 AC_ARG_ENABLE(sharpd,
351 AS_HELP_STRING([--enable-sharpd], [build sharpd]))
352 AC_ARG_ENABLE(staticd,
353 AS_HELP_STRING([--disable-staticd], [do not build staticd]))
354 AC_ARG_ENABLE(bgp-announce,
355 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
356 AC_ARG_ENABLE(bgp-vnc,
357 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
359 AS_HELP_STRING([--enable-snmp], [enable SNMP support for agentx]))
360 AC_ARG_ENABLE(zeromq,
361 AS_HELP_STRING([--enable-zeromq], [enable ZeroMQ handler (libfrrzmq)]))
363 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
364 AC_ARG_ENABLE(ospfapi,
365 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
366 AC_ARG_ENABLE(ospfclient,
367 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
368 (this is the default if --disable-ospfapi is set)]))
369 AC_ARG_ENABLE(multipath,
370 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
372 AS_HELP_STRING([--enable-user=USER], [user to run FRR suite as (default frr)]))
374 AS_HELP_STRING([--enable-group=GROUP], [group to run FRR suite as (default frr)]))
375 AC_ARG_ENABLE(vty_group,
376 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
377 AC_ARG_ENABLE(configfile_mask,
378 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
379 AC_ARG_ENABLE(logfile_mask,
380 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
381 AC_ARG_ENABLE(shell_access,
382 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
383 AC_ARG_ENABLE(realms,
384 AS_HELP_STRING([--enable-realms], [enable REALMS support under Linux]))
386 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
388 AS_HELP_STRING([--disable-irdp], [enable IRDP server support in zebra (default if supported)]))
389 AC_ARG_ENABLE(capabilities,
390 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
391 AC_ARG_ENABLE(rusage,
392 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
393 AC_ARG_ENABLE(gcc_ultra_verbose,
394 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
395 AC_ARG_ENABLE(backtrace,
396 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
397 AC_ARG_ENABLE(time-check,
398 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
399 AC_ARG_ENABLE(pcreposix,
400 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
402 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
403 AC_ARG_ENABLE(systemd,
404 AS_HELP_STRING([--enable-systemd], [enable Systemd support]))
405 AC_ARG_ENABLE(werror,
406 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
407 AC_ARG_ENABLE(cumulus,
408 AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions]))
409 AC_ARG_ENABLE(datacenter,
410 AS_HELP_STRING([--enable-datacenter], [enable Compilation for Data Center Extensions]))
411 AC_ARG_ENABLE(fuzzing,
412 AS_HELP_STRING([--enable-fuzzing], [enable ability to fuzz various parts of FRR]))
413 AC_ARG_ENABLE(netlink_fuzzing,
414 AS_HELP_STRING([--enable-netlink-fuzzing], [enable ability to fuzz netlink listening socket in zebra]))
415 AC_ARG_ENABLE(rr-semantics,
416 AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics]))
417 AC_ARG_ENABLE([protobuf],
418 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
419 AC_ARG_ENABLE([oldvpn_commands],
420 AS_HELP_STRING([--enable-oldvpn-commands], [Keep old vpn commands]))
422 AS_HELP_STRING([--enable-rpki], [enable RPKI prefix validation support]))
423 AC_ARG_ENABLE([clippy-only],
424 AS_HELP_STRING([--enable-clippy-only], [Only build clippy]))
425 AC_ARG_ENABLE([numeric_version],
426 AS_HELP_STRING([--enable-numeric-version], [Only numeric digits allowed in version (for Alpine)]))
427 AC_ARG_ENABLE([gcov],
428 AS_HELP_STRING([--enable-gcov], [Add code coverage information]))
430 AS_HELP_STRING([--disable-bfdd], [do not build bfdd]))
431 AC_ARG_ENABLE([address-sanitizer],
432 AS_HELP_STRING([--enable-address-sanitizer], [enable AddressSanitizer support for detecting a wide variety of memory allocation and deallocation errors]))
433 AC_ARG_ENABLE([thread-sanitizer],
434 AS_HELP_STRING([--enable-thread-sanitizer], [enable ThreadSanitizer support for detecting data races]))
435 AC_ARG_ENABLE([memory-sanitizer],
436 AS_HELP_STRING([--enable-memory-sanitizer], [enable MemorySanitizer support for detecting uninitialized memory reads]))
438 AS_IF([test "${enable_clippy_only}" != "yes"], [
439 AC_CHECK_HEADERS(json-c/json.h)
440 AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c", [], [-lm])
441 if test $ac_cv_lib_json_c_json_object_get = no; then
442 AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
443 if test $ac_cv_lib_json_json_object_get = no; then
444 AC_MSG_ERROR([lib json is needed to compile])
449 AC_ARG_ENABLE([dev_build],
450 AS_HELP_STRING([--enable-dev-build], [build for development]))
452 if test x"${enable_time_check}" != x"no" ; then
453 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
454 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
456 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
460 case "${enable_systemd}" in
463 AC_CHECK_LIB(systemd, sd_notify, LIBS="$LIBS -lsystemd")
464 if test $ac_cv_lib_systemd_sd_notify = no; then
465 AC_MSG_ERROR([enable systemd has been specified but systemd development env not found on your system])
467 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
473 if test "${enable_rr_semantics}" != "no" ; then
474 AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics)
477 if test "${enable_datacenter}" = "yes" ; then
478 AC_DEFINE(HAVE_DATACENTER,,Compile extensions for a DataCenter)
479 DFLT_NAME="datacenter"
481 DFLT_NAME="traditional"
484 if test "${enable_fuzzing}" = "yes" ; then
485 AC_DEFINE(HANDLE_ZAPI_FUZZING,,Compile extensions to use with a fuzzer)
488 if test "${enable_netlink_fuzzing}" = "yes" ; then
489 AC_DEFINE(HANDLE_NETLINK_FUZZING,,Compile extensions to use with a fuzzer for netlink)
492 if test "${enable_cumulus}" = "yes" ; then
493 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
497 AC_DEFINE_UNQUOTED(DFLT_NAME,["$DFLT_NAME"], Name of the configuration default set)
499 if test "${enable_shell_access}" = "yes"; then
500 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
503 AM_CONDITIONAL([FPM], [test "x$enable_fpm" = "xyes"])
509 AC_DEFUN([FRR_PYTHON_CHECK_WORKING], [
510 AC_MSG_CHECKING([whether we found a working Python version])
511 AC_LINK_IFELSE_FLAGS([$PYTHON_CFLAGS], [$PYTHON_LIBS], [AC_LANG_PROGRAM([
513 #if PY_VERSION_HEX < 0x02070000
514 #error python too old
524 # some python installs are missing the zlib dependency...
525 PYTHON_LIBS="${PYTHON_LIBS} -lz"
526 AC_LINK_IFELSE_FLAGS([$PYTHON_CFLAGS], [$PYTHON_LIBS], [AC_LANG_PROGRAM([
528 #if PY_VERSION_HEX < 0x02070000
529 #error python too old
548 AS_IF([test "$host" = "$build"], [
552 # 1. try python3, but respect the user's preference on which minor ver
553 # 2. try python, which might be py3 or py2 again on the user's preference
554 # 3. try python2 (can really only be 2.7 but eh)
555 # 4. try 3.6 > 3.5 > 3.4 > 3.3 > 3.2 > 2.7 through pkg-config (no user pref)
557 # (AX_PYTHON_DEVEL has no clue about py3 vs py2)
558 # (AX_PYTHON does not do what we need)
560 AC_CHECK_TOOLS([PYTHONCONFIG], [ \
570 if test -n "$PYTHONCONFIG"; then
571 PYTHON_CFLAGS="`\"${PYTHONCONFIG}\" --includes`"
572 PYTHON_LIBS="`\"${PYTHONCONFIG}\" --ldflags`"
574 FRR_PYTHON_CHECK_WORKING([])
577 if test -z "$PYTHONCONFIG"; then
578 PKG_CHECK_MODULES([PYTHON], python-3.6, [], [
579 PKG_CHECK_MODULES([PYTHON], python-3.5, [], [
580 PKG_CHECK_MODULES([PYTHON], python-3.4, [], [
581 PKG_CHECK_MODULES([PYTHON], python-3.3, [], [
582 PKG_CHECK_MODULES([PYTHON], python-3.2, [], [
583 PKG_CHECK_MODULES([PYTHON], python-2.7, [], [
584 AC_MSG_FAILURE([could not find python-config or pkg-config python, please install Python development files from libpython-dev or similar])
588 FRR_PYTHON_CHECK_WORKING([
589 AC_MSG_FAILURE([could not find python-config or pkg-config python, please install Python development files from libpython-dev or similar])
593 AC_SUBST(PYTHON_CFLAGS)
594 AC_SUBST(PYTHON_LIBS)
597 # Logic for protobuf support.
599 if test "$enable_protobuf" = "yes"; then
600 # Check for protoc & protoc-c
602 # protoc is not required, it's only for a "be nice" helper target
603 AC_CHECK_PROGS([PROTOC], [protoc], [/bin/false])
605 AC_CHECK_PROGS([PROTOC_C], [protoc-c], [/bin/false])
606 if test "$PROTOC_C" = "/bin/false"; then
607 AC_MSG_FAILURE([protobuf requested but protoc-c not found. Install protobuf-c.])
610 PKG_CHECK_MODULES([PROTOBUF_C], [libprotobuf-c >= 0.14],, [
611 AC_MSG_FAILURE([protobuf requested but libprotobuf-c not found. Install protobuf-c.])
613 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [], [
614 AC_MSG_FAILURE([protobuf requested but protobuf-c.h not found. Install protobuf-c.])
617 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
619 AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$enable_protobuf" = "xyes"])
622 # Logic for old vpn commans support.
624 if test "$enable_oldvpn_commands" = "yes"; then
625 AC_DEFINE(KEEP_OLD_VPN_COMMANDS,, [Define for compiling with old vpn commands])
629 # End of logic for protobuf support.
632 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
633 if test "${enable_rtadv}" != "no"; then
635 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
640 if test x"${enable_user}" = x"no"; then
643 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
646 AC_DEFINE_UNQUOTED(FRR_USER, "${enable_user}", frr User)
649 if test x"${enable_group}" = x"no"; then
652 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
655 AC_DEFINE_UNQUOTED(FRR_GROUP, "${enable_group}", frr Group)
658 if test x"${enable_vty_group}" = x"yes" ; then
659 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
660 elif test x"${enable_vty_group}" != x""; then
661 if test x"${enable_vty_group}" != x"no"; then
662 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
665 AC_SUBST([enable_user])
666 AC_SUBST([enable_group])
667 AC_SUBST([enable_vty_group])
669 enable_configfile_mask=${enable_configfile_mask:-0600}
670 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
672 enable_logfile_mask=${enable_logfile_mask:-0600}
673 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
677 case "${enable_multipath}" in
681 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
682 MPATH_NUM="${enable_multipath}"
687 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
691 AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
693 AC_DEFINE_UNQUOTED(VTYSH_PAGER, "$VTYSH_PAGER", [What pager to use])
695 dnl --------------------
696 dnl Enable code coverage
697 dnl --------------------
698 AM_CONDITIONAL([HAVE_GCOV],[test '!' "$enable_gcov" = no])
700 dnl ------------------------------------
701 dnl Alpine only accepts numeric versions
702 dnl ------------------------------------
703 if test "x${enable_numeric_version}" != "x" ; then
704 VERSION="`echo ${VERSION} | tr -c -d '[[.0-9]]'`"
705 PACKAGE_VERSION="`echo ${PACKAGE_VERSION} | tr -c -d '[[.0-9]]'`"
708 dnl -----------------------------------
709 dnl Add extra version string to package
710 dnl name, string and version fields.
711 dnl -----------------------------------
712 if test "x${EXTRAVERSION}" != "x" ; then
713 VERSION="${VERSION}${EXTRAVERSION}"
714 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
715 AC_SUBST(PACKAGE_EXTRAVERSION, ["${EXTRAVERSION}"])
716 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
719 if test "x$with_pkg_git_version" = "xyes"; then
720 if test -d "${srcdir}/.git"; then
721 AC_DEFINE(GIT_VERSION, [1], [include git version info])
722 else with_pkg_git_version="no"
723 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
726 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
728 dnl ------------------------------------
729 dnl Check C keywords and standard types
730 dnl ------------------------------------
741 dnl -------------------------
742 dnl Check other header files.
743 dnl -------------------------
744 AC_CHECK_HEADERS([stropts.h sys/ksym.h \
745 linux/version.h asm/types.h \
748 ac_stdatomic_ok=false
749 AC_DEFINE(FRR_AUTOCONF_ATOMIC, 1, [did autoconf checks for atomic funcs])
750 AC_CHECK_HEADER([stdatomic.h],[
752 AC_MSG_CHECKING([whether _Atomic qualifier works])
753 AC_LINK_IFELSE([AC_LANG_SOURCE([[
754 #include <stdatomic.h>
755 int main(int argc, char **argv) {
760 AC_DEFINE(HAVE_STDATOMIC_H, 1, [found stdatomic.h])
768 AS_IF([$ac_stdatomic_ok], [true], [
769 AC_MSG_CHECKING([for __atomic_* builtins])
770 AC_LINK_IFELSE([AC_LANG_SOURCE([[
771 int main(int argc, char **argv) {
773 __atomic_store_n (&i, 0, __ATOMIC_RELEASE);
774 return __atomic_load_n (&i, __ATOMIC_ACQUIRE);
777 AC_DEFINE(HAVE___ATOMIC, 1, [found __atomic builtins])
782 dnl FreeBSD 9 has a broken stdatomic.h where _Atomic doesn't work
783 AC_MSG_CHECKING([for __sync_* builtins])
784 AC_LINK_IFELSE([AC_LANG_SOURCE([[
785 int main(int argc, char **argv) {
787 __sync_fetch_and_sub (&i, 1);
788 return __sync_val_compare_and_swap (&i, 0, 1);
791 AC_DEFINE(HAVE___SYNC, 1, [found __sync builtins])
794 AC_MSG_CHECKING([for __sync_swap builtin])
795 AC_LINK_IFELSE([AC_LANG_SOURCE([[
796 int main(int argc, char **argv) {
798 return __sync_swap (&i, 2);
801 AC_DEFINE(HAVE___SYNC_SWAP, 1, [found __sync_swap builtin])
809 AC_MSG_FAILURE([stdatomic.h unavailable and $CC has neither __atomic nor __sync builtins])
814 dnl Utility macro to avoid retyping includes all the time
815 m4_define([FRR_INCLUDES],
818 #define __EXTENSIONS__
823 #include <sys/types.h>
824 /* sys/conf.h depends on param.h on FBSD at least */
825 #include <sys/param.h>
826 /* Required for MAXSIG */
828 #include <sys/socket.h>
830 # define __APPLE_USE_RFC_3542
832 #include <netinet/in.h>
833 #include <sys/time.h>
838 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
839 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
840 dnl an additional round for it.
842 AC_CHECK_HEADERS([net/if_var.h], [], [], FRR_INCLUDES)
844 m4_define([FRR_INCLUDES],
846 [#if HAVE_NET_IF_VAR_H
847 # include <net/if_var.h>
851 AC_CHECK_HEADERS([netinet/in_var.h \
852 net/if_dl.h net/netopt.h \
853 inet/nd.h netinet/ip_icmp.h \
854 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
855 [], [], FRR_INCLUDES)
857 AC_CHECK_HEADERS([ucontext.h], [], [],
860 #endif /* __USE_GNU */
864 m4_define([UCONTEXT_INCLUDES],
865 [#include <ucontext.h>])dnl
867 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
868 [], [], [UCONTEXT_INCLUDES])
869 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
870 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
871 [], [], [UCONTEXT_INCLUDES])],
872 [], [UCONTEXT_INCLUDES])
873 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
874 [], [], [UCONTEXT_INCLUDES])
876 m4_define([FRR_INCLUDES],
880 #include <netinet/in_systm.h>
881 #if HAVE_NETINET_IN_VAR_H
882 # include <netinet/in_var.h>
885 # include <net/if_dl.h>
887 #if HAVE_NET_NETOPT_H
888 # include <net/netopt.h>
890 #include <net/route.h>
892 # include <inet/nd.h>
894 #include <arpa/inet.h>
895 /* Required for IDRP */
896 #if HAVE_NETINET_IP_ICMP_H
897 # include <netinet/ip_icmp.h>
901 dnl V6 headers are checked below, after we check for v6
903 AC_MSG_CHECKING([which operating system interface to use])
906 AC_MSG_RESULT([Solaris])
908 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
909 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
911 AC_CHECK_LIB(socket, main)
912 AC_CHECK_LIB(nsl, main)
913 AC_CHECK_LIB(umem, main)
914 AC_CHECK_FUNCS([printstack], [
915 AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
916 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
922 AC_MSG_RESULT([Linux])
924 AC_DEFINE(GNU_LINUX,,GNU Linux)
925 AC_DEFINE(HAVE_NETLINK,,netlink)
926 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
928 dnl Linux has a compilation problem with mixing
929 dnl netinet/in.h and linux/in6.h they are not
930 dnl compatible. There has been discussion on
931 dnl how to fix it but no real progress on implementation
932 dnl when they fix it, remove this
933 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
936 AC_MSG_RESULT([OpenBSD])
938 AC_DEFINE(OPEN_BSD,,OpenBSD)
939 AC_DEFINE(KAME,1,KAME IPv6)
940 AC_DEFINE(BSD_V6_SYSCTL,1,BSD v6 sysctl to turn on and off forwarding)
942 if test "x${enable_pimd}" != "xno"; then
947 AC_MSG_FAILURE([pimd cannot be enabled as PIM support has been removed from OpenBSD 6.1])
955 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
956 AC_DEFINE(KAME,1,KAME IPv6)
957 AC_DEFINE(BSD_V6_SYSCTL,1,BSD v6 sysctl to turn on and off forwarding)
960 AM_CONDITIONAL(SOLARIS, test "${SOLARIS}" = "solaris")
964 dnl ------------------------
965 dnl Integrated REALMS option
966 dnl ------------------------
967 if test "${enable_realms}" = "yes"; then
970 AC_DEFINE(SUPPORT_REALMS,, Realms support)
973 echo "Sorry, only Linux has REALMS support"
978 AM_CONDITIONAL([SUPPORT_REALMS], [test "${enable_realms}" = "yes"])
980 dnl ---------------------
981 dnl Integrated VTY option
982 dnl ---------------------
983 case "${enable_vtysh}" in
986 AC_DEFINE(VTYSH,,VTY shell)
987 dnl Vtysh uses libreadline, which looks for termcap functions at
988 dnl configure time. We follow readlines search order.
989 dnl The required procedures are in libtermcap on NetBSD, in
990 dnl [TODO] on Linux, and in [TODO] on Solaris.
991 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
992 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
993 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
994 [AC_CHECK_LIB(ncurses, tputs,
995 LIBREADLINE="$LIBREADLINE -lncurses")]
999 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
1001 if test $ac_cv_lib_readline_main = no; then
1002 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
1004 AC_CHECK_HEADER(readline/history.h)
1005 if test $ac_cv_header_readline_history_h = no;then
1006 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
1008 AC_CHECK_LIB(readline, rl_completion_matches,
1009 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
1010 if test $ac_cv_lib_readline_rl_completion_matches = no; then
1011 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
1015 AC_SUBST(LIBREADLINE)
1016 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
1021 dnl FRR detects the PAM library it is built against by checking for a
1022 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
1023 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
1024 dnl openpam.h doesn't do that, although depends on the header too. Hence a
1025 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
1028 if test "$with_libpam" = "yes"; then
1029 AC_CHECK_HEADER([security/pam_misc.h],
1030 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
1031 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
1032 pam_conv_func="misc_conv"
1035 AC_CHECK_HEADER([security/openpam.h],
1036 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
1037 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
1038 pam_conv_func="openpam_ttyconv"
1040 [], FRR_INCLUDES[#include <security/pam_appl.h>])
1041 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
1042 AC_MSG_WARN([*** pam support will not be built ***])
1047 if test "$with_libpam" = "yes"; then
1048 dnl took this test from proftpds configure.in and suited to our needs
1049 dnl -------------------------------------------------------------------------
1051 dnl This next check looks funky due to a linker problem with some versions
1052 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
1053 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
1054 dnl with RedHat 6.2 and Debian 2.2 or better.
1055 AC_CHECK_LIB(pam, pam_start,
1056 [AC_CHECK_LIB(pam, $pam_conv_func,
1057 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1059 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1060 LIBPAM="-lpam -lpam_misc"]
1064 [AC_CHECK_LIB(pam, pam_end,
1065 [AC_CHECK_LIB(pam, $pam_conv_func,
1066 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1067 LIBPAM="-lpam -ldl"],
1068 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1069 LIBPAM="-lpam -ldl -lpam_misc"]
1071 ],AC_MSG_WARN([*** pam support will not be built ***]),
1078 dnl -------------------------------
1079 dnl Endian-ness check
1080 dnl -------------------------------
1083 dnl -------------------------------
1084 dnl check the size in byte of the C
1085 dnl -------------------------------
1086 dnl AC_CHECK_SIZEOF(char)
1087 dnl AC_CHECK_SIZEOF(int)
1088 dnl AC_CHECK_SIZEOF(short)
1089 dnl AC_CHECK_SIZEOF(long)
1091 dnl ----------------------------
1092 dnl check existance of functions
1093 dnl ----------------------------
1099 dnl -------------------------------
1100 dnl bgpd needs pow() and hence libm
1101 dnl -------------------------------
1103 AC_CHECK_HEADER([math.h],
1104 [AC_CHECK_LIB([m], [pow],
1107 AC_CHECK_FUNCS(pow,[],[LIBM=""])
1110 if test x"$LIBM" = x ; then
1111 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
1116 AC_CHECK_FUNCS([ppoll], [
1117 AC_DEFINE([HAVE_PPOLL], 1, [have Linux/BSD ppoll()])
1119 AC_CHECK_FUNCS([pollts], [
1120 AC_DEFINE([HAVE_POLLTS], 1, [have NetBSD pollts()])
1130 AC_CHECK_HEADER([asm-generic/unistd.h],
1131 [AC_CHECK_DECL(__NR_setns,
1132 AC_DEFINE(HAVE_NETNS,, Have netns),,
1133 FRR_INCLUDES [#include <asm-generic/unistd.h>
1135 AC_CHECK_FUNCS(setns)]
1138 dnl --------------------------
1139 dnl Determine IS-IS I/O method
1140 dnl --------------------------
1141 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
1142 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
1143 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
1144 AC_CHECK_HEADER(net/bpf.h)
1145 AC_CHECK_HEADER(sys/dlpi.h)
1146 AC_MSG_CHECKING(zebra IS-IS I/O method)
1150 AC_MSG_RESULT(pfpacket)
1151 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
1155 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
1158 if test $ac_cv_header_net_bpf_h = no; then
1159 if test $ac_cv_header_sys_dlpi_h = no; then
1161 if test "${enable_isisd}" = yes; then
1162 AC_MSG_FAILURE([IS-IS support requested but no packet backend found])
1164 AC_MSG_WARN([*** IS-IS support will not be built ***])
1169 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
1172 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
1176 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
1178 dnl ---------------------------------------------------------------
1179 dnl figure out how to specify an interface in multicast sockets API
1180 dnl ---------------------------------------------------------------
1181 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
1183 AC_CHECK_HEADERS([linux/mroute.h], [], [],[
1184 #include <sys/socket.h>
1185 #include <netinet/in.h>
1186 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
1187 #include <linux/types.h>
1190 m4_define([FRR_INCLUDES],
1192 [#if HAVE_LINUX_MROUTE_H
1193 # include <linux/mroute.h>
1197 AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
1198 #include <sys/socket.h>
1199 #include <sys/types.h>
1200 #include <netinet/in.h>
1201 #include <net/route.h>
1204 m4_define([FRR_INCLUDES],
1206 [#if HAVE_NETINET_IP_MROUTE_H
1207 # include <netinet/ip_mroute.h>
1211 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
1212 AC_TRY_COMPILE([#include <sys/param.h>],
1213 [#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)
1216 #error No support for BSD struct ip_mreq hack detected
1217 #endif],[AC_MSG_RESULT(yes)
1218 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1221 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1223 #include <sys/types.h>
1224 #include <netinet/in.h>
1225 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1226 ], [AC_MSG_RESULT(yes)
1227 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1230 dnl ---------------------------------------------------------------
1231 dnl figure out how to check link-state
1232 dnl ---------------------------------------------------------------
1233 AC_CHECK_HEADER( [net/if_media.h],
1234 [m4_define([LINK_DETECT_INCLUDES],
1236 [#include <net/if_media.h>
1238 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1239 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1240 [], LINK_DETECT_INCLUDES)],
1244 dnl ---------------------------------------------------------------
1245 dnl Additional, newer way to check link-state using ifi_link_state.
1246 dnl Not available in all BSD's when ifmediareq available
1247 dnl ---------------------------------------------------------------
1248 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1249 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1252 dnl ------------------------
1253 dnl TCP_MD5SIG socket option
1254 dnl ------------------------
1256 AC_CHECK_HEADER([netinet/tcp.h],
1257 [m4_define([MD5_INCLUDES],
1259 [#include <netinet/tcp.h>
1261 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1264 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1265 AC_CHECK_HEADER([linux/tcp.h],
1266 [m4_define([MD5_INCLUDES],
1268 [#include <linux/tcp.h>
1270 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1273 dnl ----------------------------------------------------------------------------
1274 dnl figure out if domainname is available in the utsname struct (GNU extension).
1275 dnl ----------------------------------------------------------------------------
1276 AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1278 dnl ------------------
1279 dnl IPv6 header checks
1280 dnl ------------------
1281 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
1282 netinet6/in6_var.h netinet6/nd6.h], [], [],
1285 m4_define([FRR_INCLUDES],dnl
1287 [#if HAVE_NETINET6_IN6_H
1288 #include <netinet6/in6.h>
1290 #if HAVE_NETINET_IN6_VAR_H
1291 #include <netinet/in6_var.h>
1293 #include <netinet/icmp6.h>
1294 #if HAVE_NETINET6_IN6_VAR_H
1295 # include <netinet6/in6_var.h>
1297 #if HAVE_NETINET6_ND6_H
1298 # include <netinet6/nd6.h>
1302 dnl disable doc check
1303 AC_CHECK_PROGS([SPHINXBUILD], [sphinx-build sphinx-build3 sphinx-build2], [/bin/false])
1304 if test "$SPHINXBUILD" = "/bin/false"; then
1305 if test "${enable_doc}" = "yes"; then
1306 AC_MSG_ERROR([Documentation was explicitly requested with --enable-doc but sphinx-build is not available. Please disable docs or install sphinx.])
1309 AM_CONDITIONAL(DOC, test "${enable_doc}" != "no" -a "$SPHINXBUILD" != "/bin/false")
1310 AM_CONDITIONAL(DOC_HTML, test "${enable_doc_html}" = "yes")
1312 dnl --------------------
1313 dnl Daemon disable check
1314 dnl --------------------
1315 AM_CONDITIONAL(ZEBRA, test "${enable_zebra}" != "no")
1317 if test "${enable_bgpd}" = "no";then
1322 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1324 AM_CONDITIONAL(RIPD, test "${enable_ripd}" != "no")
1325 AM_CONDITIONAL(OSPFD, test "${enable_ospfd}" != "no")
1326 AM_CONDITIONAL(LDPD, test "${enable_ldpd}" != "no")
1328 AS_IF([test "${enable_ldpd}" != "no"], [
1329 AC_DEFINE(HAVE_LDPD, 1, ldpd)
1332 if test "$enable_bfdd" = "no"; then
1333 AC_DEFINE(HAVE_BFDD, 0, bfdd)
1336 AC_DEFINE(HAVE_BFDD, 1, bfdd)
1341 AC_DEFINE(BFD_LINUX, 1, bfdd)
1345 AC_DEFINE(BFD_BSD, 1, bfdd)
1350 AM_CONDITIONAL(BFDD, [test "x$BFDD" = "xbfdd"])
1352 if test $ac_cv_lib_json_c_json_object_get = no -a "x$BFDD" = "xbfdd"; then
1353 AC_MSG_ERROR(["you must use json-c library to use bfdd"])
1359 if test "${enable_nhrpd}" != "no"; then
1364 if test "${enable_nhrpd}" = "yes"; then
1365 AC_MSG_ERROR([nhrpd requires kernel APIs that are only present on Linux.])
1369 AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1371 AM_CONDITIONAL(EIGRPD, test "${enable_eigrpd}" != "no")
1373 if test "${enable_watchfrr}" = "no";then
1378 AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
1381 if test "${enable_ospfapi}" != "no";then
1382 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1384 if test "${enable_ospfclient}" != "no";then
1385 OSPFCLIENT="ospfclient"
1389 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1390 AM_CONDITIONAL(RIPNGD, test "${enable_ripngd}" != "no")
1391 AM_CONDITIONAL(BABELD, test "${enable_babeld}" != "no")
1392 AM_CONDITIONAL(OSPF6D, test "${enable_ospf6d}" != "no")
1393 AM_CONDITIONAL(ISISD, test "${enable_isisd}" != "no")
1394 AM_CONDITIONAL(PIMD, test "${enable_pimd}" != "no")
1395 AM_CONDITIONAL(PBRD, test "${enable_pbrd}" != "no")
1396 AM_CONDITIONAL(SHARPD, test "${enable_sharpd}" = "yes")
1397 AM_CONDITIONAL(STATICD, test "${enable_staticd}" != "no")
1399 if test "${enable_bgp_announce}" = "no";then
1400 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1402 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1405 if test "${enable_bgp_vnc}" != "no";then
1406 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
1408 AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
1412 AC_CHECK_LIB(crypt, crypt, [],
1413 [AC_CHECK_LIB(crypto, DES_crypt)])
1414 AC_CHECK_LIB(resolv, res_init)
1416 dnl ---------------------------
1417 dnl check system has PCRE regexp
1418 dnl ---------------------------
1419 if test "x$enable_pcreposix" = "xyes"; then
1420 AC_CHECK_LIB(pcreposix, regexec, [], [
1421 AC_MSG_ERROR([--enable-pcreposix given but unable to find libpcreposix])
1424 AC_SUBST(HAVE_LIBPCREPOSIX)
1426 dnl ------------------
1427 dnl check C-Ares library
1428 dnl ------------------
1429 if test "${NHRPD}" != ""; then
1430 PKG_CHECK_MODULES([CARES], [libcares], , [
1431 AC_MSG_ERROR([trying to build nhrpd, but libcares not found. install c-ares and its -dev headers.])
1436 dnl ------------------
1437 dnl check Net-SNMP library
1438 dnl ------------------
1439 if test "${enable_snmp}" != "" -a "${enable_snmp}" != "no"; then
1440 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1441 if test x"$NETSNMP_CONFIG" = x"no"; then
1442 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1444 SNMP_LIBS="`${NETSNMP_CONFIG} --agent-libs`"
1445 SNMP_CFLAGS="`${NETSNMP_CONFIG} --base-cflags`"
1446 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1447 AC_LINK_IFELSE_FLAGS([$SNMP_CFLAGS], [$SNMP_LIBS], [AC_LANG_PROGRAM([
1455 AC_MSG_ERROR([--enable-snmp given but not usable])])
1456 case "${enable_snmp}" in
1461 SNMP_METHOD="${enable_snmp}"
1464 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use yes or agentx])
1467 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1468 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1470 AM_CONDITIONAL([SNMP], [test "x${SNMP_METHOD}" != "x"])
1472 AC_SUBST(SNMP_CFLAGS)
1477 AC_SEARCH_LIBS([sqrt], [m])
1482 AC_SEARCH_LIBS(dlopen, [dl dld], [], [
1483 AC_MSG_ERROR([unable to find the dlopen()])
1486 AC_CHECK_HEADERS([link.h])
1488 AC_CACHE_CHECK([for dlinfo(RTLD_DI_ORIGIN)], [frr_cv_rtld_di_origin], [
1489 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1497 dlinfo (NULL, RTLD_DI_ORIGIN, &origin);
1499 frr_cv_rtld_di_origin=yes
1501 frr_cv_rtld_di_origin=no
1504 if test "$frr_cv_rtld_di_origin" = yes; then
1505 AC_DEFINE(HAVE_DLINFO_ORIGIN, 1, [Have dlinfo RTLD_DI_ORIGIN])
1508 AC_CACHE_CHECK([for dlinfo(RTLD_DI_LINKMAP)], [frr_cv_rtld_di_linkmap], [
1509 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1516 struct link_map *lm = NULL;
1517 dlinfo (NULL, RTLD_DI_LINKMAP, &lm);
1519 frr_cv_rtld_di_linkmap=yes
1521 frr_cv_rtld_di_linkmap=no
1524 if test "$frr_cv_rtld_di_linkmap" = yes; then
1525 AC_DEFINE(HAVE_DLINFO_LINKMAP, 1, [Have dlinfo RTLD_DI_LINKMAP])
1528 AM_CONDITIONAL(SNMP, test "x$SNMP_METHOD" = "xagentx")
1530 dnl ---------------------------
1531 dnl sockaddr and netinet checks
1532 dnl ---------------------------
1535 struct vifctl, struct mfcctl, struct sioc_sg_req,
1536 vifi_t, struct sioc_vif_req, struct igmpmsg,
1537 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1538 struct nd_opt_adv_interval, struct rt_addrinfo,
1539 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1540 [], [], FRR_INCLUDES)
1542 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1543 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1544 struct sockaddr_dl.sdl_len,
1545 struct if6_aliasreq.ifra_lifetime,
1546 struct nd_opt_adv_interval.nd_opt_ai_type],
1547 [], [], FRR_INCLUDES)
1549 dnl ---------------------------
1550 dnl IRDP/pktinfo/icmphdr checks
1551 dnl ---------------------------
1553 AC_CHECK_TYPES([struct in_pktinfo], [
1554 AC_CHECK_TYPES([struct icmphdr], [
1563 case "${enable_irdp}" in
1565 $IRDP || AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1572 AM_CONDITIONAL(IRDP, $IRDP)
1574 dnl -----------------------
1575 dnl checking for IP_PKTINFO
1576 dnl -----------------------
1577 AC_MSG_CHECKING(for IP_PKTINFO)
1578 AC_TRY_COMPILE([#include <netdb.h>], [
1579 int opt = IP_PKTINFO;
1582 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1587 dnl ---------------------------
1588 dnl checking for IP_RECVDSTADDR
1589 dnl ---------------------------
1590 AC_MSG_CHECKING(for IP_RECVDSTADDR)
1591 AC_TRY_COMPILE([#include <netinet/in.h>], [
1592 int opt = IP_RECVDSTADDR;
1595 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1600 dnl ----------------------
1601 dnl checking for IP_RECVIF
1602 dnl ----------------------
1603 AC_MSG_CHECKING(for IP_RECVIF)
1604 AC_TRY_COMPILE([#include <netinet/in.h>], [
1605 int opt = IP_RECVIF;
1608 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1613 dnl ----------------------
1614 dnl checking for SO_BINDANY
1615 dnl ----------------------
1616 AC_MSG_CHECKING(for SO_BINDANY)
1617 AC_TRY_COMPILE([#include <sys/socket.h>], [
1618 int opt = SO_BINDANY;
1621 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1626 dnl ----------------------
1627 dnl checking for IP_FREEBIND
1628 dnl ----------------------
1629 AC_MSG_CHECKING(for IP_FREEBIND)
1630 AC_TRY_COMPILE([#include <netinet/in.h>], [
1631 int opt = IP_FREEBIND;
1634 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1639 dnl --------------------------------------
1640 dnl checking for be32dec existence or not
1641 dnl --------------------------------------
1642 AC_CHECK_DECLS([be32enc, be32dec], [], [],
1643 [#include <sys/endian.h>])
1645 dnl --------------------------------------
1646 dnl checking for clock_time monotonic struct and call
1647 dnl --------------------------------------
1648 AC_CHECK_DECL(CLOCK_MONOTONIC,
1649 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1650 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1651 ], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
1653 dnl --------------------------------------
1654 dnl checking for flex and bison
1655 dnl --------------------------------------
1658 AC_MSG_CHECKING(version of flex)
1659 frr_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
1660 frr_ac_flex_version="${frr_ac_flex_version##* }"
1661 AC_MSG_RESULT([$frr_ac_flex_version])
1662 AX_COMPARE_VERSION([$frr_ac_flex_version], [lt], [2.5.20], [
1663 LEX="$SHELL $missing_dir/missing flex"
1664 if test -f "${srcdir}/lib/command_lex.c" -a -f "${srcdir}/lib/command_lex.h"; then
1665 AC_MSG_WARN([using pregenerated flex output files])
1667 AC_MSG_ERROR([flex failure and pregenerated files not included (probably a git build)])
1669 AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
1670 AC_SUBST([LEXLIB], [''])
1674 dnl thanks GNU bison for this b*llshit...
1675 AC_MSG_CHECKING(version of bison)
1676 frr_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
1677 frr_ac_bison_version="${frr_ac_bison_version##* }"
1678 frr_ac_bison_missing="false"
1679 case "x${frr_ac_bison_version}" in
1682 BISON_CLOSEBRACE='"'
1684 AC_MSG_RESULT([$frr_ac_bison_version - 2.7 or older])
1687 AC_MSG_RESULT([$frr_ac_bison_version])
1688 AC_MSG_WARN([installed bison is too old. Please install GNU bison 2.7.x or newer.])
1689 frr_ac_bison_missing="true"
1692 AC_MSG_RESULT([none])
1693 AC_MSG_WARN([could not determine bison version. Please install GNU bison 2.7.x or newer.])
1694 frr_ac_bison_missing="true"
1698 BISON_CLOSEBRACE='}'
1699 BISON_VERBOSE='-Dparse.error=verbose'
1700 AC_MSG_RESULT([$frr_ac_bison_version - 3.0 or newer])
1703 AC_SUBST(BISON_OPENBRACE)
1704 AC_SUBST(BISON_CLOSEBRACE)
1705 AC_SUBST(BISON_VERBOSE)
1707 if $frr_ac_bison_missing; then
1708 YACC="$SHELL $missing_dir/missing bison -y"
1709 if test -f "${srcdir}/lib/command_parse.c" -a -f "${srcdir}/lib/command_parse.h"; then
1710 AC_MSG_WARN([using pregenerated bison output files])
1712 AC_MSG_ERROR([bison failure and pregenerated files not included (probably a git build)])
1716 dnl -------------------
1717 dnl capabilities checks
1718 dnl -------------------
1719 if test "${enable_capabilities}" != "no"; then
1720 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1721 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1723 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1724 frr_ac_keepcaps="yes"],
1727 if test x"${frr_ac_keepcaps}" = x"yes"; then
1728 AC_CHECK_HEADERS(sys/capability.h)
1730 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1731 AC_CHECK_LIB(cap, cap_init,
1732 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1737 AC_CHECK_HEADERS(priv.h,
1738 [AC_MSG_CHECKING(Solaris style privileges are available)
1739 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1741 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1742 frr_ac_scaps="yes"],
1748 if test x"${frr_ac_scaps}" = x"yes" \
1749 -o x"${frr_ac_lcaps}" = x"yes"; then
1750 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1755 dnl ---------------------------
1756 dnl check for glibc 'backtrace'
1757 dnl ---------------------------
1758 if test x"${enable_backtrace}" != x"no" ; then
1760 AC_CHECK_HEADER([execinfo.h], [
1761 AC_SEARCH_LIBS([backtrace], [execinfo], [
1762 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1763 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1768 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1769 dnl user explicitly requested backtrace but we failed to find support
1770 AC_MSG_FAILURE([failed to find backtrace support])
1774 dnl -----------------------------------------
1775 dnl check for malloc mallinfo struct and call
1776 dnl this must try and link using LIBS, in
1777 dnl order to check no alternative allocator
1778 dnl has been specified, which might not provide
1779 dnl mallinfo, e.g. such as Umem on Solaris.
1780 dnl -----------------------------------------
1781 AC_CHECK_HEADERS([malloc.h malloc/malloc.h],,, [FRR_INCLUDES])
1783 AC_CACHE_CHECK([whether mallinfo is available], [frr_cv_mallinfo], [
1784 AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES [
1785 #ifdef HAVE_MALLOC_H
1788 #ifdef HAVE_MALLOC_MALLOC_H
1789 #include <malloc/malloc.h>
1792 struct mallinfo ac_x; ac_x = mallinfo ();
1799 if test "$frr_cv_mallinfo" = yes; then
1800 AC_DEFINE(HAVE_MALLINFO,,mallinfo)
1803 AC_MSG_CHECKING(whether malloc_usable_size is available)
1804 AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES [
1805 #ifdef HAVE_MALLOC_H
1808 #ifdef HAVE_MALLOC_MALLOC_H
1809 #include <malloc/malloc.h>
1812 size_t ac_x; ac_x = malloc_usable_size(NULL);
1815 AC_DEFINE(HAVE_MALLOC_USABLE_SIZE,,malloc_usable_size)
1819 AC_MSG_CHECKING(whether malloc_size is available)
1820 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1821 #ifdef HAVE_MALLOC_H
1824 #ifdef HAVE_MALLOC_MALLOC_H
1825 #include <malloc/malloc.h>
1828 size_t ac_x; ac_x = malloc_size(NULL);
1831 AC_DEFINE(HAVE_MALLOC_SIZE,,malloc_size)
1840 if test "x$enable_zeromq" != "xno"; then
1841 PKG_CHECK_MODULES(ZEROMQ, [libzmq >= 4.0.0], [
1842 AC_DEFINE(HAVE_ZEROMQ, 1, [Enable ZeroMQ support])
1845 if test "x$enable_zeromq" = "xyes"; then
1846 AC_MSG_ERROR([configuration specifies --enable-zeromq but libzmq was not found])
1850 AM_CONDITIONAL([ZEROMQ], test "x$ZEROMQ" = "xtrue")
1855 dev_version=`echo $VERSION | grep dev`
1856 #don't expire deprecated code in non 'dev' branch
1857 if test "${dev_version}" = ""; then
1860 CONFDATE=`date '+%Y%m%d'`
1864 dnl ------------------------------
1865 dnl set paths for state directory
1866 dnl ------------------------------
1867 AC_MSG_CHECKING(directory to use for state file)
1868 if test "${prefix}" = "NONE"; then
1869 frr_statedir_prefix="";
1871 frr_statedir_prefix=${prefix}
1873 if test "${localstatedir}" = '${prefix}/var'; then
1874 for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
1875 ${frr_statedir_prefix}/var/adm dnl
1876 ${frr_statedir_prefix}/etc dnl
1882 test -d $FRR_STATE_DIR && break
1884 frr_statedir=$FRR_STATE_DIR
1886 frr_statedir=${localstatedir}
1888 if test $frr_statedir = "/dev/null"; then
1889 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1891 AC_MSG_RESULT(${frr_statedir})
1892 AC_SUBST(frr_statedir)
1894 AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
1895 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
1896 AC_DEFINE_UNQUOTED(BFDD_CONTROL_SOCKET, "$frr_statedir/bfdd.sock", bfdd control socket)
1897 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
1899 dnl autoconf does this, but it does it too late...
1900 test "x$prefix" = xNONE && prefix=$ac_default_prefix
1901 test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
1903 dnl get the full path, recursing through variables...
1904 vtysh_bin="$bindir/vtysh"
1905 for I in 1 2 3 4 5 6 7 8 9 10; do
1906 eval vtysh_bin="\"$vtysh_bin\""
1908 AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
1910 CFG_SYSCONF="$sysconfdir"
1912 CFG_STATE="$frr_statedir"
1913 CFG_MODULE="$moduledir"
1914 for I in 1 2 3 4 5 6 7 8 9 10; do
1915 eval CFG_SYSCONF="\"$CFG_SYSCONF\""
1916 eval CFG_SBIN="\"$CFG_SBIN\""
1917 eval CFG_STATE="\"$CFG_STATE\""
1918 eval CFG_MODULE="\"$CFG_MODULE\""
1920 AC_SUBST(CFG_SYSCONF)
1923 AC_SUBST(CFG_MODULE)
1924 AC_DEFINE_UNQUOTED(MODULE_PATH, "$CFG_MODULE", path to modules)
1926 dnl ------------------------------------
1927 dnl Enable RPKI and add librtr to libs
1928 dnl ------------------------------------
1929 if test "${enable_rpki}" = "yes"; then
1930 PKG_CHECK_MODULES(RTRLIB,[rtrlib >= 0.5.0],
1933 AC_MSG_ERROR([rtrlib was not found on your system or is too old.])]
1936 AM_CONDITIONAL([RPKI], test "x$RPKI" = "xtrue")
1938 dnl ------------------------------------------
1939 dnl Check whether rtrlib was build with ssh support
1940 dnl ------------------------------------------
1941 AC_MSG_CHECKING([whether the RTR Library is compiled with SSH])
1942 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "rtrlib/rtrlib.h"]],
1943 [[struct tr_ssh_config config;]])],
1945 AC_DEFINE(FOUND_SSH,,found_ssh)],
1949 dnl ---------------------------
1950 dnl Check htonl works correctly
1951 dnl ---------------------------
1952 AC_MSG_CHECKING(for working htonl)
1953 AC_CACHE_VAL(ac_cv_htonl_works,
1954 [AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
1955 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1958 AC_MSG_RESULT($ac_cv_htonl_works)
1960 AC_CONFIG_FILES([Makefile],[sed -e 's/^#AUTODERP# //' -i Makefile])
1967 snapcraft/snapcraft.yaml
1969 tests/lib/cli/test_cli.refout
1970 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1971 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh
1974 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1976 AC_CONFIG_COMMANDS([lib/route_types.h], [
1977 dst="${ac_abs_top_builddir}/lib/route_types.h"
1978 ${PERL} "${ac_abs_top_srcdir}/lib/route_types.pl" \
1979 < "${ac_abs_top_srcdir}/lib/route_types.txt" \
1982 && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
1983 && rm "${dst}.tmp" \
1984 || mv "${dst}.tmp" "${dst}"
1989 AS_IF([test "x$with_pkg_git_version" = "xyes"], [
1990 AC_CONFIG_COMMANDS([lib/gitversion.h], [
1991 dst="${ac_abs_top_builddir}/lib/gitversion.h"
1992 ${PERL} "${ac_abs_top_srcdir}/lib/gitversion.pl" \
1993 "${ac_abs_top_srcdir}" \
1996 && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
1997 && rm "${dst}.tmp" \
1998 || mv "${dst}.tmp" "${dst}"
2004 ## Hack, but working solution to avoid rebuilding of frr.info.
2005 ## It's already in CVS until texinfo 4.7 is more common.
2009 FRRouting configuration
2010 ------------------------------
2011 FRR version : ${PACKAGE_VERSION}
2012 host operating system : ${host_os}
2013 source code location : ${srcdir}
2015 compiler flags : ${CFLAGS} ${SAN_FLAGS}
2017 linker flags : ${LDFLAGS} ${SAN_FLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
2018 state file directory : ${frr_statedir}
2019 config file directory : `eval echo \`echo ${sysconfdir}\``
2020 example directory : `eval echo \`echo ${exampledir}\``
2021 module directory : ${CFG_MODULE}
2022 user to run as : ${enable_user}
2023 group to run as : ${enable_group}
2024 group for vty sockets : ${enable_vty_group}
2025 config file mask : ${enable_configfile_mask}
2026 log file mask : ${enable_logfile_mask}
2027 zebra protobuf enabled : ${enable_protobuf:-no}
2029 The above user and group must have read/write access to the state file
2030 directory and to the config files in the config file directory."
2032 if test "${enable_doc}" != "no";then
2033 AS_IF([test "$SPHINXBUILD" = /bin/false],
2034 AC_MSG_WARN(sphinx-build is missing but required to build documentation))