2 ## Configure template file for FreeRangeRouting.
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, 2.1-dev, [https://github.com/freerangerouting/frr/issues])
11 PACKAGE_URL="https://freerangerouting.org/"
12 PACKAGE_FULLNAME="FreeRangeRouting"
13 AC_SUBST(PACKAGE_FULLNAME)
15 CONFIG_ARGS="$ac_configure_args"
18 AC_CONFIG_SRCDIR(lib/zebra.h)
19 AC_CONFIG_MACRO_DIR([m4])
21 dnl -----------------------------------
22 dnl Get hostname and other information.
23 dnl -----------------------------------
28 # Disable portability warnings -- our automake code (in particular
29 # common.am) uses some constructs specific to gmake.
30 AM_INIT_AUTOMAKE([1.12 -Wno-portability])
31 m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
32 AM_SILENT_RULES([yes])
33 AC_CONFIG_HEADERS(config.h)
35 AC_PATH_PROG(PERL, perl)
38 dnl default is to match previous behavior
39 exampledir=${sysconfdir}
40 AC_ARG_ENABLE([exampledir],
41 AS_HELP_STRING([--enable-exampledir],
42 [specify alternate directory for examples]),
43 exampledir="$enableval",)
44 dnl XXX add --exampledir to autoconf standard directory list somehow
47 dnl default is to match previous behavior
50 AC_ARG_ENABLE([pkgsrcrcdir],
51 AS_HELP_STRING([--enable-pkgsrcrcdir],
52 [specify directory for rc.d scripts]),
53 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
54 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
58 AC_ARG_WITH([moduledir], [AS_HELP_STRING([--with-moduledir=DIR], [module directory (${libdir}/frr/modules)])], [
61 moduledir="\${libdir}/frr/modules"
63 AC_SUBST([moduledir], [$moduledir])
65 AC_ARG_ENABLE(tcmalloc,
66 AS_HELP_STRING([--enable-tcmalloc], [Turn on tcmalloc]),
67 [case "${enableval}" in
68 yes) tcmalloc_enabled=true
69 LIBS="$LIBS -ltcmalloc_minimal"
71 no) tcmalloc_enabled=false ;;
72 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
73 esac],[tcmalloc_enabled=false])
76 dnl --------------------
77 dnl Check CC and friends
78 dnl --------------------
79 dnl note orig_cflags is also used further down
85 dnl remove autoconf default "-g -O2"
92 dnl autoconf 2.59 appears not to support AC_PROG_SED
94 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
96 dnl try and enable CFLAGS that are useful for Quagga
97 dnl - specifically, options to control warnings
99 AC_USE_SYSTEM_EXTENSIONS()
100 AC_DEFUN([AC_C_FLAG], [{
102 ac_c_flag_save="$CFLAGS"
104 AC_MSG_CHECKING([[whether $CC supports $1]])
106 [AC_LANG_PROGRAM([[]])],
109 m4_if([$3], [], [], [
110 CFLAGS="$ac_c_flag_save"
114 CFLAGS="$ac_c_flag_save"
121 dnl ICC won't bail on unknown options without -diag-error 10006
122 dnl need to do this first so we get useful results for the other options
123 AC_C_FLAG([-diag-error 10006])
125 dnl if the user specified any CFLAGS, we don't add "-g -Os/-O2" here
126 if test "z$orig_cflags" = "z"; then
133 dnl always want these CFLAGS
134 AC_C_FLAG([-fno-omit-frame-pointer])
137 AC_C_FLAG([-Wmissing-prototypes])
138 AC_C_FLAG([-Wmissing-declarations])
139 AC_C_FLAG([-Wpointer-arith])
140 AC_C_FLAG([-Wbad-function-cast])
141 AC_C_FLAG([-Wwrite-strings])
142 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
143 AC_C_FLAG([-Wcast-qual])
144 AC_C_FLAG([-Wstrict-prototypes])
145 AC_C_FLAG([-Wmissing-noreturn])
146 AC_C_FLAG([-Wmissing-format-attribute])
147 AC_C_FLAG([-Wunreachable-code])
148 AC_C_FLAG([-Wpacked])
149 AC_C_FLAG([-Wpadded])
151 AC_C_FLAG([-Wno-unused-result])
153 AC_C_FLAG([-Wno-unused-parameter])
154 AC_C_FLAG([-Wno-missing-field-initializers])
156 dnl ICC emits a broken warning for const char *x = a ? "b" : "c";
157 dnl for some reason the string consts get 'promoted' to char *,
158 dnl triggering a const to non-const conversion warning.
159 AC_C_FLAG([-diag-disable 3179])
161 if test x"${enable_werror}" = x"yes" ; then
166 dnl need link on this one, not compile
168 ac_ld_flag_save="$LDFLAGS"
169 LDFLAGS="$LDFLAGS -rdynamic"
170 AC_MSG_CHECKING([[whether linker supports -rdynamic]])
172 [AC_LANG_PROGRAM([[]])],
173 [AC_MSG_RESULT([yes])],
175 LDFLAGS="$ac_ld_flag_save"
186 AC_CHECK_TOOL(AR, ar)
188 dnl -----------------
189 dnl System extensions
190 dnl -----------------
198 dnl ----------------------
199 dnl Packages configuration
200 dnl ----------------------
201 AC_ARG_WITH(pkg-extra-version,
202 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
203 [EXTRAVERSION=$withval],)
204 AC_ARG_WITH(pkg-git-version,
205 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
206 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
208 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for Quagga]))
210 AS_HELP_STRING([--disable-doc], [do not build docs]))
212 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
214 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
216 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
217 AC_ARG_ENABLE(ripngd,
218 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
220 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
221 AC_ARG_ENABLE(ospf6d,
222 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
224 AS_HELP_STRING([--enable-ldpd], [build ldpd]))
226 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
227 AC_ARG_ENABLE(watchfrr,
228 AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
230 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
232 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
233 AC_ARG_ENABLE(bgp-announce,
234 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
235 AC_ARG_ENABLE(bgp-vnc,
236 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
237 AC_ARG_WITH(rfp-path,
238 AS_HELP_STRING([--with-rfp-path[=DIR]],[path to replaced stub RFP used with BGP VNC]))
240 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
242 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
243 AC_ARG_ENABLE(tcp-zebra,
244 AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
245 AC_ARG_ENABLE(ospfapi,
246 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
247 AC_ARG_ENABLE(ospfclient,
248 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
249 (this is the default if --disable-ospfapi is set)]))
250 AC_ARG_ENABLE(multipath,
251 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
253 AS_HELP_STRING([--enable-user=USER], [user to run FRR suite as (default frr)]))
255 AS_HELP_STRING([--enable-group=GROUP], [group to run FRR suite as (default frr)]))
256 AC_ARG_ENABLE(vty_group,
257 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
258 AC_ARG_ENABLE(configfile_mask,
259 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
260 AC_ARG_ENABLE(logfile_mask,
261 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
262 AC_ARG_ENABLE(shell_access,
263 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
265 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
267 AS_HELP_STRING([--enable-irdp], [enable IRDP server support in zebra]))
268 AC_ARG_ENABLE(capabilities,
269 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
270 AC_ARG_ENABLE(rusage,
271 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
272 AC_ARG_ENABLE(gcc_ultra_verbose,
273 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
274 AC_ARG_ENABLE(linux24_tcp_md5,
275 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
276 AC_ARG_ENABLE(backtrace,
277 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
278 AC_ARG_ENABLE(time-check,
279 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
280 AC_ARG_ENABLE(pcreposix,
281 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
283 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
284 AC_ARG_ENABLE(systemd,
285 AS_HELP_STRING([--enable-systemd], [enable Systemd support]))
287 AS_HELP_STRING([--enable-poll], [enable usage of Poll instead of select]))
288 AC_ARG_ENABLE(werror,
289 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
290 AC_ARG_ENABLE(cumulus,
291 AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions]))
292 AC_ARG_ENABLE(rr-semantics,
293 AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics]))
294 AC_ARG_ENABLE([protobuf],
295 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
296 AC_ARG_ENABLE([oldvpn_commands],
297 AS_HELP_STRING([--enable-old-vpn-commands], [Keep old vpn commands]))
299 AC_CHECK_HEADERS(json-c/json.h)
300 AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c")
301 if test $ac_cv_lib_json_c_json_object_get = no; then
302 AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
303 if test $ac_cv_lib_json_json_object_get = no; then
304 AC_MSG_ERROR([lib json is needed to compile])
308 AC_ARG_ENABLE([dev_build],
309 AS_HELP_STRING([--enable-dev-build], [build for development]))
311 if test x"${enable_time_check}" != x"no" ; then
312 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
313 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
315 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
319 case "${enable_systemd}" in
322 AC_CHECK_LIB(systemd, sd_notify, LIBS="$LIBS -lsystemd")
323 if test $ac_cv_lib_systemd_sd_notify = no; then
324 AC_MSG_ERROR([enable systemd has been specified but systemd development env not found on your system])
326 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
332 if test "${enable_rr_semantics}" != "no" ; then
333 AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics)
336 if test "${enable_poll}" = "yes" ; then
337 AC_DEFINE(HAVE_POLL,,Compile systemd support in)
343 AC_MSG_CHECKING(whether this OS has MPLS stack)
346 MPLS_METHOD="zebra_mpls_netlink.o"
347 AC_MSG_RESULT(Linux MPLS)
350 MPLS_METHOD="zebra_mpls_openbsd.o"
351 AC_MSG_RESULT(OpenBSD MPLS)
354 MPLS_METHOD="zebra_mpls_null.o"
355 AC_MSG_RESULT(Unsupported kernel)
358 AC_SUBST(MPLS_METHOD)
360 if test "${enable_cumulus}" = "yes" ; then
361 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
364 if test "${enable_shell_access}" = "yes"; then
365 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
368 AM_CONDITIONAL([FPM], [test "x$enable_fpm" = "xyes"])
370 if test "x${enable_dev_build}" = "xyes"; then
371 AC_DEFINE(DEV_BUILD,,Build for development)
373 AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
376 # Logic for protobuf support.
378 if test "$enable_protobuf" = "yes"; then
382 AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
383 if test "x$PROTOC_C" = "x/bin/false"; then
387 PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
388 [found_protobuf_c=yes],
389 [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
391 if test "x$found_protobuf_c" = "xyes"; then
392 LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
393 CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
395 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
396 [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
402 # Logic for old vpn commans support.
404 if test "$enable_old_vpn_commands" = "yes"; then
405 AC_DEFINE(KEEP_OLD_VPN_COMMANDS,, [Define for compiling with old vpn commands])
408 # Fail if the user explicity enabled protobuf support and we couldn't
409 # find the compiler or libraries.
410 if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
411 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
414 if test "x$have_protobuf" = "xyes"; then
415 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
418 AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
421 # End of logic for protobuf support.
424 if test "${enable_tcp_zebra}" = "yes"; then
425 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
428 if test "${enable_linux24_tcp_md5}" = "yes"; then
429 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
432 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
433 if test "${enable_rtadv}" != "no"; then
435 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
440 if test "${enable_irdp}" = "yes"; then
441 AC_DEFINE(HAVE_IRDP,, IRDP )
444 if test x"${enable_user}" = x"no"; then
447 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
450 AC_DEFINE_UNQUOTED(FRR_USER, "${enable_user}", frr User)
453 if test x"${enable_group}" = x"no"; then
456 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
459 AC_DEFINE_UNQUOTED(FRR_GROUP, "${enable_group}", frr Group)
462 if test x"${enable_vty_group}" = x"yes" ; then
463 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
464 elif test x"${enable_vty_group}" != x""; then
465 if test x"${enable_vty_group}" != x"no"; then
466 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
469 AC_SUBST([enable_user])
470 AC_SUBST([enable_group])
471 AC_SUBST([enable_vty_group])
473 enable_configfile_mask=${enable_configfile_mask:-0600}
474 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
476 enable_logfile_mask=${enable_logfile_mask:-0600}
477 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
481 case "${enable_multipath}" in
485 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
486 MPATH_NUM="${enable_multipath}"
491 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
495 AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
497 dnl -----------------------------------
498 dnl Add extra version string to package
499 dnl name, string and version fields.
500 dnl -----------------------------------
501 if test "x${EXTRAVERSION}" != "x" ; then
502 VERSION="${VERSION}${EXTRAVERSION}"
503 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
504 AC_SUBST(PACKAGE_EXTRAVERSION, ["${EXTRAVERSION}"])
505 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
508 if test "x$with_pkg_git_version" = "xyes"; then
509 if test -d "${srcdir}/.git"; then
510 AC_DEFINE(GIT_VERSION, [1], [include git version info])
511 else with_pkg_git_version="no"
512 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
515 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
517 dnl ------------------------------------
518 dnl Check C keywords and standard types
519 dnl ------------------------------------
530 dnl -------------------------
531 dnl Check other header files.
532 dnl -------------------------
533 AC_CHECK_HEADERS([stropts.h sys/ksym.h \
534 linux/version.h asm/types.h \
537 dnl Utility macro to avoid retyping includes all the time
538 m4_define([FRR_INCLUDES],
541 #define __EXTENSIONS__
546 #include <sys/types.h>
547 /* sys/conf.h depends on param.h on FBSD at least */
548 #include <sys/param.h>
549 /* Required for MAXSIG */
551 #include <sys/socket.h>
553 # define __APPLE_USE_RFC_3542
555 #include <netinet/in.h>
556 #include <sys/time.h>
561 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
562 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
563 dnl an additional round for it.
565 AC_CHECK_HEADERS([net/if_var.h], [], [], FRR_INCLUDES)
567 m4_define([FRR_INCLUDES],
569 [#if HAVE_NET_IF_VAR_H
570 # include <net/if_var.h>
574 AC_CHECK_HEADERS([netinet/in_var.h \
575 net/if_dl.h net/netopt.h \
576 inet/nd.h netinet/ip_icmp.h \
577 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
578 [], [], FRR_INCLUDES)
580 AC_CHECK_HEADERS([ucontext.h], [], [],
583 #endif /* __USE_GNU */
587 m4_define([UCONTEXT_INCLUDES],
588 [#include <ucontext.h>])dnl
590 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
591 [], [], [UCONTEXT_INCLUDES])
592 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
593 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
594 [], [], [UCONTEXT_INCLUDES])],
595 [], [UCONTEXT_INCLUDES])
596 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
597 [], [], [UCONTEXT_INCLUDES])
599 m4_define([FRR_INCLUDES],
603 #include <netinet/in_systm.h>
604 #if HAVE_NETINET_IN_VAR_H
605 # include <netinet/in_var.h>
608 # include <net/if_dl.h>
610 #if HAVE_NET_NETOPT_H
611 # include <net/netopt.h>
613 #include <net/route.h>
615 # include <inet/nd.h>
617 #include <arpa/inet.h>
618 /* Required for IDRP */
619 #if HAVE_NETINET_IP_ICMP_H
620 # include <netinet/ip_icmp.h>
624 dnl V6 headers are checked below, after we check for v6
626 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
628 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
630 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
631 AC_DEFINE(SUNOS_5, 1, SunOS 5)
632 AC_CHECK_LIB(xnet, main)
637 | [*-sunos5.1[0-9]] \
638 | [*-sunos5.1[0-9].[0-9]] \
639 | [*-solaris2.[8-9]] \
640 | [*-solaris2.1[0-9]] \
641 | [*-solaris2.1[0-9].[0-9]])
643 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
644 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
645 AC_CHECK_LIB(socket, main)
646 AC_CHECK_LIB(nsl, main)
647 AC_CHECK_LIB(umem, main)
648 AC_CHECK_FUNCS([printstack],
649 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
650 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
655 *-sunos5* | *-solaris2*)
656 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
657 AC_CHECK_LIB(socket, main)
658 AC_CHECK_LIB(nsl, main)
664 AC_DEFINE(GNU_LINUX,,GNU Linux)
668 AC_DEFINE(OPEN_BSD,,OpenBSD)
674 dnl ---------------------
675 dnl Integrated VTY option
676 dnl ---------------------
677 case "${enable_vtysh}" in
680 AC_DEFINE(VTYSH,,VTY shell)
681 dnl Vtysh uses libreadline, which looks for termcap functions at
682 dnl configure time. We follow readlines search order.
683 dnl The required procedures are in libtermcap on NetBSD, in
684 dnl [TODO] on Linux, and in [TODO] on Solaris.
685 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
686 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
687 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
688 [AC_CHECK_LIB(ncurses, tputs,
689 LIBREADLINE="$LIBREADLINE -lncurses")]
693 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
695 if test $ac_cv_lib_readline_main = no; then
696 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
698 AC_CHECK_HEADER(readline/history.h)
699 if test $ac_cv_header_readline_history_h = no;then
700 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
702 AC_CHECK_LIB(readline, rl_completion_matches,
703 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
704 if test $ac_cv_lib_readline_rl_completion_matches = no; then
705 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
709 AC_SUBST(LIBREADLINE)
710 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
715 dnl Quagga detects the PAM library it is built against by checking for a
716 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
717 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
718 dnl openpam.h doesn't do that, although depends on the header too. Hence a
719 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
722 if test "$with_libpam" = "yes"; then
723 AC_CHECK_HEADER([security/pam_misc.h],
724 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
725 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
726 pam_conv_func="misc_conv"
729 AC_CHECK_HEADER([security/openpam.h],
730 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
731 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
732 pam_conv_func="openpam_ttyconv"
734 [], FRR_INCLUDES[#include <security/pam_appl.h>])
735 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
736 AC_MSG_WARN([*** pam support will not be built ***])
741 if test "$with_libpam" = "yes"; then
742 dnl took this test from proftpds configure.in and suited to our needs
743 dnl -------------------------------------------------------------------------
745 dnl This next check looks funky due to a linker problem with some versions
746 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
747 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
748 dnl with RedHat 6.2 and Debian 2.2 or better.
749 AC_CHECK_LIB(pam, pam_start,
750 [AC_CHECK_LIB(pam, $pam_conv_func,
751 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
753 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
754 LIBPAM="-lpam -lpam_misc"]
758 [AC_CHECK_LIB(pam, pam_end,
759 [AC_CHECK_LIB(pam, $pam_conv_func,
760 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
761 LIBPAM="-lpam -ldl"],
762 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
763 LIBPAM="-lpam -ldl -lpam_misc"]
765 ],AC_MSG_WARN([*** pam support will not be built ***]),
772 dnl -------------------------------
773 dnl Endian-ness check
774 dnl -------------------------------
777 dnl -------------------------------
778 dnl check the size in byte of the C
779 dnl -------------------------------
780 dnl AC_CHECK_SIZEOF(char)
781 dnl AC_CHECK_SIZEOF(int)
782 dnl AC_CHECK_SIZEOF(short)
783 dnl AC_CHECK_SIZEOF(long)
785 dnl ----------------------------
786 dnl check existance of functions
787 dnl ----------------------------
793 dnl -------------------------------
794 dnl bgpd needs pow() and hence libm
795 dnl -------------------------------
797 AC_CHECK_HEADER([math.h],
798 [AC_CHECK_LIB([m], [pow],
801 AC_CHECK_FUNCS(pow,[],[LIBM=""])
804 if test x"$LIBM" = x ; then
805 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
818 AC_CHECK_HEADER([asm-generic/unistd.h],
819 [AC_CHECK_DECL(__NR_setns,
820 AC_DEFINE(HAVE_NETNS,, Have netns),,
821 FRR_INCLUDES [#include <asm-generic/unistd.h>
823 AC_CHECK_FUNCS(setns)]
826 dnl ------------------------------------
827 dnl Determine routing get and set method
828 dnl ------------------------------------
829 AC_MSG_CHECKING(zebra between kernel interface method)
830 if test x"$opsys" = x"gnu-linux"; then
831 AC_MSG_RESULT(netlink)
832 RT_METHOD=rt_netlink.o
833 KERNEL_METHOD=kernel_netlink.o
834 AC_DEFINE(HAVE_NETLINK,,netlink)
836 AC_CHECK_DECLS([IFLA_INFO_SLAVE_KIND], [], [], [#include <linux/if_link.h>])
838 AC_MSG_RESULT(Route socket)
839 KERNEL_METHOD="kernel_socket.o"
840 RT_METHOD="rt_socket.o"
843 AC_SUBST(KERNEL_METHOD)
844 AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
846 dnl --------------------------
847 dnl Determine IS-IS I/O method
848 dnl --------------------------
849 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
850 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
851 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
852 AC_CHECK_HEADER(net/bpf.h)
853 AC_CHECK_HEADER(sys/dlpi.h)
854 AC_MSG_CHECKING(zebra IS-IS I/O method)
855 if test x"$opsys" = x"gnu-linux"; then
856 AC_MSG_RESULT(pfpacket)
857 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
858 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
860 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
862 if test $ac_cv_header_net_bpf_h = no; then
863 if test $ac_cv_header_sys_dlpi_h = no; then
865 AC_MSG_WARN([*** IS-IS support will not be built ***])
870 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
873 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
876 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
878 dnl ------------------------------------
879 dnl check for broken CMSG_FIRSTHDR macro
880 dnl ------------------------------------
881 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
882 AC_RUN_IFELSE([AC_LANG_SOURCE([[
885 #define __EXTENSIONS__
888 #include <sys/types.h>
889 #include <sys/socket.h>
896 msg.msg_control = buf;
897 msg.msg_controllen = 0;
899 if (CMSG_FIRSTHDR(&msg) != NULL)
902 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
903 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
905 dnl ------------------------------
906 dnl check kernel route read method
907 dnl ------------------------------
908 AC_CACHE_CHECK([route read method], [frr_cv_rtread_method],
909 [if test "x$netlink" = xyes; then
910 frr_cv_rtread_method="netlink"
912 for frr_cv_rtread_method in /dev/ip /dev/null;
914 test x`ls $frr_cv_rtread_method 2>/dev/null` = x"$frr_cv_rtread_method" && break
916 case $frr_cv_rtread_method in
919 *-freebsd*) frr_cv_rtread_method="sysctl";;
920 *) frr_cv_rtread_method="getmsg";;
923 frr_cv_rtread_method="sysctl";;
926 RTREAD_METHOD=rtread_${frr_cv_rtread_method}.o
927 AC_SUBST(RTREAD_METHOD)
929 dnl -----------------------------
930 dnl check interface lookup method
931 dnl -----------------------------
933 AC_MSG_CHECKING(interface looking up method)
934 if test "$netlink" = yes; then
935 AC_MSG_RESULT(netlink)
936 IF_METHOD=if_netlink.o
937 elif test "$opsys" = "sol2-6";then
938 AC_MSG_RESULT(Solaris GIF)
940 elif test "$opsys" = "sol8";then
941 AC_MSG_RESULT(Solaris GLIF)
942 IF_METHOD=if_ioctl_solaris.o
943 IOCTL_METHOD=ioctl_solaris.o
944 elif test "$opsys" = "openbsd";then
945 AC_MSG_RESULT(openbsd)
947 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
948 AC_MSG_RESULT(sysctl)
949 IF_METHOD=if_sysctl.o
950 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
956 AC_SUBST(IOCTL_METHOD)
958 dnl ---------------------------------------------------------------
959 dnl figure out how to specify an interface in multicast sockets API
960 dnl ---------------------------------------------------------------
961 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
963 AC_CHECK_HEADERS([linux/mroute.h], [], [],[
964 #include <sys/socket.h>
965 #include <netinet/in.h>
966 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
967 #include <linux/types.h>
970 m4_define([FRR_INCLUDES],
972 [#if HAVE_LINUX_MROUTE_H
973 # include <linux/mroute.h>
977 AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
978 #include <sys/socket.h>
979 #include <sys/types.h>
980 #include <netinet/in.h>
981 #include <net/route.h>
984 m4_define([FRR_INCLUDES],
986 [#if HAVE_NETINET_IP_MROUTE_H
987 # include <netinet/ip_mroute.h>
991 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
992 AC_TRY_COMPILE([#include <sys/param.h>],
993 [#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)
996 #error No support for BSD struct ip_mreq hack detected
997 #endif],[AC_MSG_RESULT(yes)
998 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1001 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1003 #include <sys/types.h>
1004 #include <netinet/in.h>
1005 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1006 ], [AC_MSG_RESULT(yes)
1007 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1010 dnl ---------------------------------------------------------------
1011 dnl figure out how to check link-state
1012 dnl ---------------------------------------------------------------
1013 AC_CHECK_HEADER( [net/if_media.h],
1014 [m4_define([LINK_DETECT_INCLUDES],
1016 [#include <net/if_media.h>
1018 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1019 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1020 [], LINK_DETECT_INCLUDES)],
1024 dnl ---------------------------------------------------------------
1025 dnl Additional, newer way to check link-state using ifi_link_state.
1026 dnl Not available in all BSD's when ifmediareq available
1027 dnl ---------------------------------------------------------------
1028 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1029 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1032 dnl ------------------------
1033 dnl TCP_MD5SIG socket option
1034 dnl ------------------------
1036 AC_CHECK_HEADER([netinet/tcp.h],
1037 [m4_define([MD5_INCLUDES],
1039 [#include <netinet/tcp.h>
1041 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1044 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1045 AC_CHECK_HEADER([linux/tcp.h],
1046 [m4_define([MD5_INCLUDES],
1048 [#include <linux/tcp.h>
1050 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1053 dnl -----------------------------
1054 dnl check ipforward detect method
1055 dnl -----------------------------
1056 AC_CACHE_CHECK([ipforward method], [frr_cv_ipforward_method],
1057 [if test x$cross_compiling = xyes; then
1058 if test x"$opsys" = x"gnu-linux"; then
1059 frr_cv_ipforward_method=/proc/net/snmp
1061 frr_cv_ipforward_method=/dev/ip
1064 for frr_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1066 test x`ls $frr_cv_ipforward_method 2>/dev/null` = x"$frr_cv_ipforward_method" && break
1069 case $frr_cv_ipforward_method in
1070 "/proc/net/snmp") frr_cv_ipforward_method="proc";;
1073 *-freebsd*) frr_cv_ipforward_method="sysctl";;
1074 *) frr_cv_ipforward_method="solaris";;
1076 *) frr_cv_ipforward_method="sysctl";;
1078 IPFORWARD=ipforward_${frr_cv_ipforward_method}.o
1081 dnl ----------------------------------------------------------------------------
1082 dnl figure out if domainname is available in the utsname struct (GNU extension).
1083 dnl ----------------------------------------------------------------------------
1084 AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1089 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1093 if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1094 AC_DEFINE(KAME,1,KAME IPv6)
1096 dnl ------------------------------------
1097 dnl Solaris 9, 10 and potentially higher
1098 dnl ------------------------------------
1099 elif test x"$opsys" = x"sol8"; then
1100 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1101 AC_MSG_RESULT(Solaris IPv6)
1105 elif test x"$opsys" = x"gnu-linux"; then
1106 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1107 dnl Linux has a compilation problem with mixing
1108 dnl netinet/in.h and linux/in6.h they are not
1109 dnl compatible. There has been discussion on
1110 dnl how to fix it but no real progress on implementation
1111 dnl when they fix it, remove this
1112 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
1113 AC_MSG_RESULT(Linux IPv6)
1115 AC_MSG_ERROR([Failed to detect IPv6 stack])
1118 dnl ------------------
1119 dnl IPv6 header checks
1120 dnl ------------------
1121 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
1122 netinet6/in6_var.h netinet6/nd6.h], [], [],
1125 m4_define([FRR_INCLUDES],dnl
1127 [#if HAVE_NETINET6_IN6_H
1128 #include <netinet6/in6.h>
1130 #if HAVE_NETINET_IN6_VAR_H
1131 #include <netinet/in6_var.h>
1133 #include <netinet/icmp6.h>
1134 #if HAVE_NETINET6_IN6_VAR_H
1135 # include <netinet6/in6_var.h>
1137 #if HAVE_NETINET6_ND6_H
1138 # include <netinet6/nd6.h>
1142 dnl disable doc check
1143 if test "${enable_doc}" = "no";then
1149 dnl --------------------
1150 dnl Daemon disable check
1151 dnl --------------------
1152 if test "${enable_zebra}" = "no";then
1157 AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
1159 if test "${enable_bgpd}" = "no";then
1164 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1166 if test "${enable_ripd}" = "no";then
1171 AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
1173 if test "${enable_ospfd}" = "no";then
1178 AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
1180 if test "${enable_ldpd}" = "no";then
1183 AX_PROG_PERL_MODULES(XML::LibXML, , [
1184 if test -f "${srcdir}/ldpd/ldp_vty_cmds.c"; then
1185 AC_MSG_WARN([XML::LibXML perl module not found, using pregenerated ldp_vty_cmds.c])
1187 AC_MSG_ERROR([XML::LibXML perl module not found and pregenerated ldp_vty_cmds.c missing])
1192 AC_DEFINE(HAVE_LDPD, 1, ldpd)
1194 AM_CONDITIONAL(LDPD, test "x$LDPD" = "xldpd")
1197 if test "$opsys" = "gnu-linux"; then
1198 if test "${enable_nhrpd}" != "no"; then
1202 if test "${enable_nhrpd}" = "yes"; then
1203 AC_MSG_ERROR([nhrpd requires kernel APIs that are only present on Linux.])
1206 AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1208 if test "${enable_watchfrr}" = "no";then
1213 AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
1216 if test "${enable_ospfapi}" != "no";then
1217 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1219 if test "${enable_ospfclient}" != "no";then
1220 OSPFCLIENT="ospfclient"
1224 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1226 case "${enable_ripngd}" in
1228 * ) RIPNGD="ripngd";;
1230 AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
1232 case "${enable_ospf6d}" in
1234 * ) OSPF6D="ospf6d";;
1236 AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
1238 case "${enable_isisd}" in
1242 AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
1244 case "${enable_pimd}" in
1248 AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
1250 if test "${enable_bgp_announce}" = "no";then
1251 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1253 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1256 if test "${with_rfp_path}" = "yes" || test x"${with_rfp_path}" = x""; then
1257 with_rfp_path="bgpd/rfp-example"
1259 if test "${with_rfp_path}" != "no"; then
1260 VNC_RFP_PATH="${with_rfp_path}"
1261 AC_SUBST(VNC_RFP_PATH)
1264 if test "${enable_bgp_vnc}" != "no";then
1265 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
1266 RFPTEST="${with_rfp_path}/rfptest"
1267 LIBRFP="${with_rfp_path}/librfp"
1268 RFPINC="${with_rfp_path}/librfp"
1272 RFPINC="bgpd/rfp-example/librfp"
1275 AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
1295 AC_SUBST(OSPFCLIENT)
1297 AC_CHECK_LIB(crypt, crypt)
1298 AC_CHECK_LIB(resolv, res_init)
1300 dnl ---------------------------
1301 dnl check system has PCRE regexp
1302 dnl ---------------------------
1303 if test "x$enable_pcreposix" = "xyes"; then
1304 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1305 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1307 AC_SUBST(HAVE_LIBPCREPOSIX)
1309 dnl ------------------
1310 dnl check C-Ares library
1311 dnl ------------------
1312 if test "${NHRPD}" != ""; then
1313 PKG_CHECK_MODULES([CARES], [libcares])
1317 dnl ------------------
1318 dnl check Net-SNMP library
1319 dnl ------------------
1320 if test "${enable_snmp}" != ""; then
1321 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1322 if test x"$NETSNMP_CONFIG" = x"no"; then
1323 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1325 SNMP_LIBS="`${NETSNMP_CONFIG} --agent-libs`"
1326 SNMP_CFLAGS="`${NETSNMP_CONFIG} --base-cflags`"
1327 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1328 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1335 ])],[AC_MSG_RESULT(yes)],[
1337 AC_MSG_ERROR([--enable-snmp given but not usable])])
1338 case "${enable_snmp}" in
1343 SNMP_METHOD="${enable_snmp}"
1346 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1349 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1350 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1351 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1353 AM_CONDITIONAL([SNMP], [test "x${SNMP_METHOD}" != "x"])
1355 AC_SUBST(SNMP_CFLAGS)
1360 AC_SEARCH_LIBS(dlopen, [dl dld], [], [
1361 AC_MSG_ERROR([unable to find the dlopen()])
1364 AC_CHECK_HEADERS([link.h])
1366 AC_MSG_CHECKING([for dlinfo(RTLD_DI_ORIGIN)])
1367 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1375 dlinfo (NULL, RTLD_DI_ORIGIN, &origin);
1378 AC_DEFINE(HAVE_DLINFO_ORIGIN, 1, [Have dlinfo RTLD_DI_ORIGIN])
1383 AC_MSG_CHECKING([for dlinfo(RTLD_DI_LINKMAP)])
1384 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1391 struct link_map *lm = NULL;
1392 dlinfo (NULL, RTLD_DI_LINKMAP, &lm);
1395 AC_DEFINE(HAVE_DLINFO_LINKMAP, 1, [Have dlinfo RTLD_DI_LINKMAP])
1401 dnl ---------------------------
1402 dnl sockaddr and netinet checks
1403 dnl ---------------------------
1406 struct vifctl, struct mfcctl, struct sioc_sg_req,
1407 vifi_t, struct sioc_vif_req, struct igmpmsg,
1408 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1409 struct nd_opt_adv_interval, struct rt_addrinfo,
1410 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1411 [], [], FRR_INCLUDES)
1413 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1414 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1415 struct sockaddr_dl.sdl_len,
1416 struct if6_aliasreq.ifra_lifetime,
1417 struct nd_opt_adv_interval.nd_opt_ai_type],
1418 [], [], FRR_INCLUDES)
1420 dnl ---------------------------
1421 dnl IRDP/pktinfo/icmphdr checks
1422 dnl ---------------------------
1423 AC_CHECK_TYPES([struct in_pktinfo],
1424 [AC_CHECK_TYPES([struct icmphdr],
1425 [if test "${enable_irdp}" != "no"; then
1426 AC_DEFINE(HAVE_IRDP,, IRDP)
1428 [if test "${enable_irdp}" = "yes"; then
1429 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1430 fi], [FRR_INCLUDES])],
1431 [if test "${enable_irdp}" = "yes"; then
1432 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1433 fi], [FRR_INCLUDES])
1435 dnl -----------------------
1436 dnl checking for IP_PKTINFO
1437 dnl -----------------------
1438 AC_MSG_CHECKING(for IP_PKTINFO)
1439 AC_TRY_COMPILE([#include <netdb.h>], [
1440 int opt = IP_PKTINFO;
1443 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1448 dnl ---------------------------
1449 dnl checking for IP_RECVDSTADDR
1450 dnl ---------------------------
1451 AC_MSG_CHECKING(for IP_RECVDSTADDR)
1452 AC_TRY_COMPILE([#include <netinet/in.h>], [
1453 int opt = IP_RECVDSTADDR;
1456 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1461 dnl ----------------------
1462 dnl checking for IP_RECVIF
1463 dnl ----------------------
1464 AC_MSG_CHECKING(for IP_RECVIF)
1465 AC_TRY_COMPILE([#include <netinet/in.h>], [
1466 int opt = IP_RECVIF;
1469 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1474 dnl ----------------------
1475 dnl checking for SO_BINDANY
1476 dnl ----------------------
1477 AC_MSG_CHECKING(for SO_BINDANY)
1478 AC_TRY_COMPILE([#include <sys/socket.h>], [
1479 int opt = SO_BINDANY;
1482 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1487 dnl ----------------------
1488 dnl checking for IP_FREEBIND
1489 dnl ----------------------
1490 AC_MSG_CHECKING(for IP_FREEBIND)
1491 AC_TRY_COMPILE([#include <netinet/in.h>], [
1492 int opt = IP_FREEBIND;
1495 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1500 dnl --------------------------------------
1501 dnl checking for clock_time monotonic struct and call
1502 dnl --------------------------------------
1503 AC_CHECK_DECL(CLOCK_MONOTONIC,
1504 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1505 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1506 ], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
1508 dnl --------------------------------------
1509 dnl checking for flex and bison
1510 dnl --------------------------------------
1513 AC_MSG_CHECKING(version of flex)
1514 quagga_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
1515 quagga_ac_flex_version="${quagga_ac_flex_version##* }"
1516 AC_MSG_RESULT([$quagga_ac_flex_version])
1517 AX_COMPARE_VERSION([$quagga_ac_flex_version], [lt], [2.5.20], [
1518 LEX="$SHELL $missing_dir/missing flex"
1519 if test -f "${srcdir}/lib/command_lex.c" -a -f "${srcdir}/lib/command_lex.h"; then
1520 AC_MSG_WARN([using pregenerated flex output files])
1522 AC_MSG_ERROR([flex failure and pregenerated files not included (probably a git build)])
1524 AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
1525 AC_SUBST([LEXLIB], [''])
1529 dnl thanks GNU bison for this b*llshit...
1530 AC_MSG_CHECKING(version of bison)
1531 quagga_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
1532 quagga_ac_bison_version="${quagga_ac_bison_version##* }"
1533 quagga_ac_bison_missing="false"
1534 case "x${quagga_ac_bison_version}" in
1537 BISON_CLOSEBRACE='"'
1539 AC_MSG_RESULT([$quagga_ac_bison_version - 2.7 or older])
1542 AC_MSG_RESULT([$quagga_ac_bison_version])
1543 AC_MSG_WARN([installed bison is too old. Please install GNU bison 2.7.x or newer.])
1544 quagga_ac_bison_missing="true"
1547 AC_MSG_RESULT([none])
1548 AC_MSG_WARN([could not determine bison version. Please install GNU bison 2.7.x or newer.])
1549 quagga_ac_bison_missing="true"
1553 BISON_CLOSEBRACE='}'
1554 BISON_VERBOSE='-Dparse.error=verbose'
1555 AC_MSG_RESULT([$quagga_ac_bison_version - 3.0 or newer])
1558 AC_SUBST(BISON_OPENBRACE)
1559 AC_SUBST(BISON_CLOSEBRACE)
1560 AC_SUBST(BISON_VERBOSE)
1562 if $quagga_ac_bison_missing; then
1563 YACC="$SHELL $missing_dir/missing bison -y"
1564 if test -f "${srcdir}/lib/command_parse.c" -a -f "${srcdir}/lib/command_parse.h"; then
1565 AC_MSG_WARN([using pregenerated bison output files])
1567 AC_MSG_ERROR([bison failure and pregenerated files not included (probably a git build)])
1571 dnl -------------------
1572 dnl capabilities checks
1573 dnl -------------------
1574 if test "${enable_capabilities}" != "no"; then
1575 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1576 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1578 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1579 frr_ac_keepcaps="yes"],
1582 if test x"${frr_ac_keepcaps}" = x"yes"; then
1583 AC_CHECK_HEADERS(sys/capability.h)
1585 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1586 AC_CHECK_LIB(cap, cap_init,
1587 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1592 AC_CHECK_HEADERS(priv.h,
1593 [AC_MSG_CHECKING(Solaris style privileges are available)
1594 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1596 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1597 frr_ac_scaps="yes"],
1603 if test x"${frr_ac_scaps}" = x"yes" \
1604 -o x"${frr_ac_lcaps}" = x"yes"; then
1605 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1610 dnl ---------------------------
1611 dnl check for glibc 'backtrace'
1612 dnl ---------------------------
1613 if test x"${enable_backtrace}" != x"no" ; then
1615 AC_CHECK_HEADER([execinfo.h], [
1616 AC_SEARCH_LIBS([backtrace], [execinfo], [
1617 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1618 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1623 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1624 dnl user explicitly requested backtrace but we failed to find support
1625 AC_MSG_FAILURE([failed to find backtrace support])
1629 dnl -----------------------------------------
1630 dnl check for malloc mallinfo struct and call
1631 dnl this must try and link using LIBS, in
1632 dnl order to check no alternative allocator
1633 dnl has been specified, which might not provide
1634 dnl mallinfo, e.g. such as Umem on Solaris.
1635 dnl -----------------------------------------
1636 AC_CHECK_HEADER([malloc.h],
1637 [AC_MSG_CHECKING(whether mallinfo is available)
1638 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1639 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1641 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1644 ], [], FRR_INCLUDES)
1649 CONFDATE=`date '+%Y%m%d'`
1652 dnl ------------------------------
1653 dnl set paths for state directory
1654 dnl ------------------------------
1655 AC_MSG_CHECKING(directory to use for state file)
1656 if test "${prefix}" = "NONE"; then
1657 frr_statedir_prefix="";
1659 frr_statedir_prefix=${prefix}
1661 if test "${localstatedir}" = '${prefix}/var'; then
1662 for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
1663 ${frr_statedir_prefix}/var/adm dnl
1664 ${frr_statedir_prefix}/etc dnl
1670 test -d $FRR_STATE_DIR && break
1672 frr_statedir=$FRR_STATE_DIR
1674 frr_statedir=${localstatedir}
1676 if test $frr_statedir = "/dev/null"; then
1677 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1679 AC_MSG_RESULT(${frr_statedir})
1680 AC_SUBST(frr_statedir)
1682 AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
1683 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
1684 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
1686 dnl autoconf does this, but it does it too late...
1687 test "x$prefix" = xNONE && prefix=$ac_default_prefix
1688 test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
1690 dnl get the full path, recursing through variables...
1691 vtysh_bin="$bindir/vtysh"
1692 for I in 1 2 3 4 5 6 7 8 9 10; do
1693 eval vtysh_bin="\"$vtysh_bin\""
1695 AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
1697 CFG_SYSCONF="$sysconfdir"
1699 CFG_STATE="$frr_statedir"
1700 CFG_MODULE="$moduledir"
1701 for I in 1 2 3 4 5 6 7 8 9 10; do
1702 eval CFG_SYSCONF="\"$CFG_SYSCONF\""
1703 eval CFG_SBIN="\"$CFG_SBIN\""
1704 eval CFG_STATE="\"$CFG_STATE\""
1705 eval CFG_MODULE="\"$CFG_MODULE\""
1707 AC_SUBST(CFG_SYSCONF)
1710 AC_SUBST(CFG_MODULE)
1711 AC_DEFINE_UNQUOTED(MODULE_PATH, "$CFG_MODULE", path to modules)
1713 dnl ---------------------------
1714 dnl Check htonl works correctly
1715 dnl ---------------------------
1716 AC_MSG_CHECKING(for working htonl)
1717 AC_CACHE_VAL(ac_cv_htonl_works,
1718 [AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
1719 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1722 AC_MSG_RESULT($ac_cv_htonl_works)
1724 AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
1725 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchfrr/Makefile
1726 ospf6d/Makefile ldpd/Makefile isisd/Makefile vtysh/Makefile
1727 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
1737 snapcraft/snapcraft.yaml
1754 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1755 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1757 if test "${enable_bgp_vnc}" != "no"; then
1758 if test "${with_rfp_path}" = "bgpd/rfp-example" ; then
1759 AC_CONFIG_FILES([bgpd/rfp-example/rfptest/Makefile bgpd/rfp-example/librfp/Makefile])
1761 AC_CONFIG_FILES([${with_rfp_path}/rfptest/Makefile ${with_rfp_path}/librfp/Makefile])
1765 AC_CONFIG_FILES([solaris/Makefile])
1767 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1769 ## Hack, but working solution to avoid rebuilding of quagga.info.
1770 ## It's already in CVS until texinfo 4.7 is more common.
1774 FreeRangeRouting configuration
1775 ------------------------------
1776 FRR version : ${PACKAGE_VERSION}
1777 host operating system : ${host_os}
1778 source code location : ${srcdir}
1780 compiler flags : ${CFLAGS}
1782 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1783 state file directory : ${frr_statedir}
1784 config file directory : `eval echo \`echo ${sysconfdir}\``
1785 example directory : `eval echo \`echo ${exampledir}\``
1786 module directory : ${CFG_MODULE}
1787 user to run as : ${enable_user}
1788 group to run as : ${enable_group}
1789 group for vty sockets : ${enable_vty_group}
1790 config file mask : ${enable_configfile_mask}
1791 log file mask : ${enable_logfile_mask}
1792 zebra protobuf enabled : ${have_protobuf:-no}
1794 The above user and group must have read/write access to the state file
1795 directory and to the config files in the config file directory."