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.0-rc0, [https://bugzilla.quagga.net])
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)
37 dnl default is to match previous behavior
38 exampledir=${sysconfdir}
39 AC_ARG_ENABLE([exampledir],
40 AS_HELP_STRING([--enable-exampledir],
41 [specify alternate directory for examples]),
42 exampledir="$enableval",)
43 dnl XXX add --exampledir to autoconf standard directory list somehow
46 dnl default is to match previous behavior
49 AC_ARG_ENABLE([pkgsrcrcdir],
50 AS_HELP_STRING([--enable-pkgsrcrcdir],
51 [specify directory for rc.d scripts]),
52 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
53 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
57 AC_ARG_ENABLE(tcmalloc,
58 AS_HELP_STRING([--enable-tcmalloc], [Turn on tcmalloc]),
59 [case "${enableval}" in
60 yes) tcmalloc_enabled=true
61 LIBS="$LIBS -ltcmalloc_minimal"
63 no) tcmalloc_enabled=false ;;
64 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
65 esac],[tcmalloc_enabled=false])
68 dnl --------------------
69 dnl Check CC and friends
70 dnl --------------------
71 dnl note orig_cflags is also used further down
77 dnl remove autoconf default "-g -O2"
83 dnl autoconf 2.59 appears not to support AC_PROG_SED
85 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
87 dnl try and enable CFLAGS that are useful for Quagga
88 dnl - specifically, options to control warnings
90 AC_USE_SYSTEM_EXTENSIONS()
91 AC_DEFUN([AC_C_FLAG], [{
93 ac_c_flag_save="$CFLAGS"
95 AC_MSG_CHECKING([[whether $CC supports $1]])
97 [AC_LANG_PROGRAM([[]])],
100 m4_if([$3], [], [], [
101 CFLAGS="$ac_c_flag_save"
105 CFLAGS="$ac_c_flag_save"
112 dnl ICC won't bail on unknown options without -diag-error 10006
113 dnl need to do this first so we get useful results for the other options
114 AC_C_FLAG([-diag-error 10006])
116 dnl if the user specified any CFLAGS, we don't add "-g -Os/-O2" here
117 if test "z$orig_cflags" = "z"; then
124 dnl always want these CFLAGS
125 AC_C_FLAG([-fno-omit-frame-pointer])
128 AC_C_FLAG([-Wmissing-prototypes])
129 AC_C_FLAG([-Wmissing-declarations])
130 AC_C_FLAG([-Wpointer-arith])
131 AC_C_FLAG([-Wbad-function-cast])
132 AC_C_FLAG([-Wwrite-strings])
133 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
134 AC_C_FLAG([-Wcast-qual])
135 AC_C_FLAG([-Wstrict-prototypes])
136 AC_C_FLAG([-Wmissing-noreturn])
137 AC_C_FLAG([-Wmissing-format-attribute])
138 AC_C_FLAG([-Wunreachable-code])
139 AC_C_FLAG([-Wpacked])
140 AC_C_FLAG([-Wpadded])
142 AC_C_FLAG([-Wno-unused-result])
144 AC_C_FLAG([-Wno-unused-parameter])
145 AC_C_FLAG([-Wno-missing-field-initializers])
147 dnl ICC emits a broken warning for const char *x = a ? "b" : "c";
148 dnl for some reason the string consts get 'promoted' to char *,
149 dnl triggering a const to non-const conversion warning.
150 AC_C_FLAG([-diag-disable 3179])
152 if test x"${enable_werror}" = x"yes" ; then
157 dnl need link on this one, not compile
159 ac_ld_flag_save="$LDFLAGS"
160 LDFLAGS="$LDFLAGS -rdynamic"
161 AC_MSG_CHECKING([[whether linker supports -rdynamic]])
163 [AC_LANG_PROGRAM([[]])],
164 [AC_MSG_RESULT([yes])],
166 LDFLAGS="$ac_ld_flag_save"
177 AC_CHECK_TOOL(AR, ar)
179 dnl -----------------
180 dnl System extensions
181 dnl -----------------
189 dnl ----------------------
190 dnl Packages configuration
191 dnl ----------------------
192 AC_ARG_WITH(pkg-extra-version,
193 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
194 [EXTRAVERSION=$withval],)
195 AC_ARG_WITH(pkg-git-version,
196 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
197 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
199 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for Quagga]))
201 AS_HELP_STRING([--disable-doc], [do not build docs]))
203 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
205 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
207 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
208 AC_ARG_ENABLE(ripngd,
209 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
211 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
212 AC_ARG_ENABLE(ospf6d,
213 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
215 AS_HELP_STRING([--enable-ldpd], [build ldpd]))
216 AC_ARG_ENABLE(watchfrr,
217 AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
219 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
221 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
222 AC_ARG_ENABLE(bgp-announce,
223 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
224 AC_ARG_ENABLE(bgp-vnc,
225 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
226 AC_ARG_WITH(rfp-path,
227 AS_HELP_STRING([--with-rfp-path[=DIR]],[path to replaced stub RFP used with BGP VNC]))
229 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
231 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
232 AC_ARG_ENABLE(tcp-zebra,
233 AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
234 AC_ARG_ENABLE(ospfapi,
235 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
236 AC_ARG_ENABLE(ospfclient,
237 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
238 (this is the default if --disable-ospfapi is set)]))
239 AC_ARG_ENABLE(multipath,
240 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
242 AS_HELP_STRING([--enable-user=USER], [user to run FRR suite as (default frr)]))
244 AS_HELP_STRING([--enable-group=GROUP], [group to run FRR suite as (default frr)]))
245 AC_ARG_ENABLE(vty_group,
246 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
247 AC_ARG_ENABLE(configfile_mask,
248 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
249 AC_ARG_ENABLE(logfile_mask,
250 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
251 AC_ARG_ENABLE(shell_access,
252 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
254 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
256 AS_HELP_STRING([--enable-irdp], [enable IRDP server support in zebra]))
257 AC_ARG_ENABLE(capabilities,
258 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
259 AC_ARG_ENABLE(rusage,
260 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
261 AC_ARG_ENABLE(gcc_ultra_verbose,
262 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
263 AC_ARG_ENABLE(linux24_tcp_md5,
264 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
265 AC_ARG_ENABLE(backtrace,
266 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
267 AC_ARG_ENABLE(time-check,
268 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
269 AC_ARG_ENABLE(pcreposix,
270 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
272 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
273 AC_ARG_ENABLE(systemd,
274 AS_HELP_STRING([--enable-systemd], [enable Systemd support]))
276 AS_HELP_STRING([--enable-poll], [enable usage of Poll instead of select]))
277 AC_ARG_ENABLE(werror,
278 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
279 AC_ARG_ENABLE(cumulus,
280 AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions]))
281 AC_ARG_ENABLE(rr-semantics,
282 AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics]))
283 AC_ARG_ENABLE([protobuf],
284 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
285 AC_ARG_ENABLE([oldvpn_commands],
286 AS_HELP_STRING([--enable-old-vpn-commands], [Keep old vpn commands]))
288 AC_CHECK_HEADERS(json-c/json.h)
289 AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c")
290 if test $ac_cv_lib_json_c_json_object_get = no; then
291 AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
292 if test $ac_cv_lib_json_json_object_get = no; then
293 AC_MSG_ERROR([lib json is needed to compile])
297 AC_ARG_ENABLE([dev_build],
298 AS_HELP_STRING([--enable-dev-build], [build for development]))
300 if test x"${enable_time_check}" != x"no" ; then
301 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
302 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
304 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
308 case "${enable_systemd}" in
311 AC_CHECK_LIB(systemd, sd_notify, LIBS="$LIBS -lsystemd")
312 if test $ac_cv_lib_systemd_sd_notify = no; then
313 AC_MSG_ERROR([enable systemd has been specified but systemd development env not found on your system])
315 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
321 if test "${enable_rr_semantics}" != "no" ; then
322 AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics)
325 if test "${enable_poll}" = "yes" ; then
326 AC_DEFINE(HAVE_POLL,,Compile systemd support in)
332 AC_MSG_CHECKING(whether this OS has MPLS stack)
335 MPLS_METHOD="zebra_mpls_netlink.o"
336 AC_MSG_RESULT(Linux MPLS)
339 MPLS_METHOD="zebra_mpls_openbsd.o"
340 AC_MSG_RESULT(OpenBSD MPLS)
343 MPLS_METHOD="zebra_mpls_null.o"
344 AC_MSG_RESULT(Unsupported kernel)
347 AC_SUBST(MPLS_METHOD)
349 if test "${enable_cumulus}" = "yes" ; then
350 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
353 if test "${enable_shell_access}" = "yes"; then
354 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
357 if test "${enable_fpm}" = "yes"; then
358 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
361 if test "x${enable_dev_build}" = "xyes"; then
362 AC_DEFINE(DEV_BUILD,,Build for development)
364 AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
367 # Logic for protobuf support.
369 if test "$enable_protobuf" = "yes"; then
373 AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
374 if test "x$PROTOC_C" = "x/bin/false"; then
378 PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
379 [found_protobuf_c=yes],
380 [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
382 if test "x$found_protobuf_c" = "xyes"; then
383 LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
384 CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
386 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
387 [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
393 # Logic for old vpn commans support.
395 if test "$enable_old_vpn_commands" = "yes"; then
396 AC_DEFINE(KEEP_OLD_VPN_COMMANDS,, [Define for compiling with old vpn commands])
399 # Fail if the user explicity enabled protobuf support and we couldn't
400 # find the compiler or libraries.
401 if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
402 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
405 if test "x$have_protobuf" = "xyes"; then
406 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
409 AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
412 # End of logic for protobuf support.
415 if test "${enable_tcp_zebra}" = "yes"; then
416 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
419 if test "${enable_linux24_tcp_md5}" = "yes"; then
420 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
423 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
424 if test "${enable_rtadv}" != "no"; then
426 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
431 if test "${enable_irdp}" = "yes"; then
432 AC_DEFINE(HAVE_IRDP,, IRDP )
435 if test x"${enable_user}" = x"no"; then
438 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
441 AC_DEFINE_UNQUOTED(FRR_USER, "${enable_user}", frr User)
444 if test x"${enable_group}" = x"no"; then
447 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
450 AC_DEFINE_UNQUOTED(FRR_GROUP, "${enable_group}", frr Group)
453 if test x"${enable_vty_group}" = x"yes" ; then
454 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
455 elif test x"${enable_vty_group}" != x""; then
456 if test x"${enable_vty_group}" != x"no"; then
457 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
460 AC_SUBST([enable_user])
461 AC_SUBST([enable_group])
462 AC_SUBST([enable_vty_group])
464 enable_configfile_mask=${enable_configfile_mask:-0600}
465 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
467 enable_logfile_mask=${enable_logfile_mask:-0600}
468 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
472 case "${enable_multipath}" in
476 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
477 MPATH_NUM="${enable_multipath}"
482 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
486 AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
488 dnl -----------------------------------
489 dnl Add extra version string to package
490 dnl name, string and version fields.
491 dnl -----------------------------------
492 if test "x${EXTRAVERSION}" != "x" ; then
493 VERSION="${VERSION}${EXTRAVERSION}"
494 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
495 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
498 if test "x$with_pkg_git_version" = "xyes"; then
499 if test -d "${srcdir}/.git"; then
500 AC_DEFINE(GIT_VERSION, [1], [include git version info])
501 else with_pkg_git_version="no"
502 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
505 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
507 dnl ------------------------------------
508 dnl Check C keywords and standard types
509 dnl ------------------------------------
520 dnl -------------------------
521 dnl Check other header files.
522 dnl -------------------------
523 AC_CHECK_HEADERS([stropts.h sys/ksym.h \
524 linux/version.h asm/types.h \
527 dnl Utility macro to avoid retyping includes all the time
528 m4_define([FRR_INCLUDES],
531 #define __EXTENSIONS__
536 #include <sys/types.h>
537 /* sys/conf.h depends on param.h on FBSD at least */
538 #include <sys/param.h>
539 /* Required for MAXSIG */
541 #include <sys/socket.h>
543 # define __APPLE_USE_RFC_3542
545 #include <netinet/in.h>
546 #include <sys/time.h>
551 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
552 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
553 dnl an additional round for it.
555 AC_CHECK_HEADERS([net/if_var.h], [], [], FRR_INCLUDES)
557 m4_define([FRR_INCLUDES],
559 [#if HAVE_NET_IF_VAR_H
560 # include <net/if_var.h>
564 AC_CHECK_HEADERS([netinet/in_var.h \
565 net/if_dl.h net/netopt.h \
566 inet/nd.h netinet/ip_icmp.h \
567 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
568 [], [], FRR_INCLUDES)
570 AC_CHECK_HEADERS([ucontext.h], [], [],
573 #endif /* __USE_GNU */
577 m4_define([UCONTEXT_INCLUDES],
578 [#include <ucontext.h>])dnl
580 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
581 [], [], [UCONTEXT_INCLUDES])
582 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
583 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
584 [], [], [UCONTEXT_INCLUDES])],
585 [], [UCONTEXT_INCLUDES])
586 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
587 [], [], [UCONTEXT_INCLUDES])
589 m4_define([FRR_INCLUDES],
593 #include <netinet/in_systm.h>
594 #if HAVE_NETINET_IN_VAR_H
595 # include <netinet/in_var.h>
598 # include <net/if_dl.h>
600 #if HAVE_NET_NETOPT_H
601 # include <net/netopt.h>
603 #include <net/route.h>
605 # include <inet/nd.h>
607 #include <arpa/inet.h>
608 /* Required for IDRP */
609 #if HAVE_NETINET_IP_ICMP_H
610 # include <netinet/ip_icmp.h>
614 dnl V6 headers are checked below, after we check for v6
616 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
618 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
620 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
621 AC_DEFINE(SUNOS_5, 1, SunOS 5)
622 AC_CHECK_LIB(xnet, main)
627 | [*-sunos5.1[0-9]] \
628 | [*-sunos5.1[0-9].[0-9]] \
629 | [*-solaris2.[8-9]] \
630 | [*-solaris2.1[0-9]] \
631 | [*-solaris2.1[0-9].[0-9]])
633 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
634 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
635 AC_CHECK_LIB(socket, main)
636 AC_CHECK_LIB(nsl, main)
637 AC_CHECK_LIB(umem, main)
638 AC_CHECK_FUNCS([printstack],
639 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
640 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
645 *-sunos5* | *-solaris2*)
646 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
647 AC_CHECK_LIB(socket, main)
648 AC_CHECK_LIB(nsl, main)
654 AC_DEFINE(GNU_LINUX,,GNU Linux)
658 AC_DEFINE(OPEN_BSD,,OpenBSD)
664 dnl ---------------------
665 dnl Integrated VTY option
666 dnl ---------------------
667 case "${enable_vtysh}" in
670 AC_DEFINE(VTYSH,,VTY shell)
671 dnl Vtysh uses libreadline, which looks for termcap functions at
672 dnl configure time. We follow readlines search order.
673 dnl The required procedures are in libtermcap on NetBSD, in
674 dnl [TODO] on Linux, and in [TODO] on Solaris.
675 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
676 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
677 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
678 [AC_CHECK_LIB(ncurses, tputs,
679 LIBREADLINE="$LIBREADLINE -lncurses")]
683 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
685 if test $ac_cv_lib_readline_main = no; then
686 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
688 AC_CHECK_HEADER(readline/history.h)
689 if test $ac_cv_header_readline_history_h = no;then
690 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
692 AC_CHECK_LIB(readline, rl_completion_matches,
693 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
694 if test $ac_cv_lib_readline_rl_completion_matches = no; then
695 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
699 AC_SUBST(LIBREADLINE)
700 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
705 dnl Quagga detects the PAM library it is built against by checking for a
706 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
707 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
708 dnl openpam.h doesn't do that, although depends on the header too. Hence a
709 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
712 if test "$with_libpam" = "yes"; then
713 AC_CHECK_HEADER([security/pam_misc.h],
714 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
715 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
716 pam_conv_func="misc_conv"
719 AC_CHECK_HEADER([security/openpam.h],
720 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
721 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
722 pam_conv_func="openpam_ttyconv"
724 [], FRR_INCLUDES[#include <security/pam_appl.h>])
725 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
726 AC_MSG_WARN([*** pam support will not be built ***])
731 if test "$with_libpam" = "yes"; then
732 dnl took this test from proftpds configure.in and suited to our needs
733 dnl -------------------------------------------------------------------------
735 dnl This next check looks funky due to a linker problem with some versions
736 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
737 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
738 dnl with RedHat 6.2 and Debian 2.2 or better.
739 AC_CHECK_LIB(pam, pam_start,
740 [AC_CHECK_LIB(pam, $pam_conv_func,
741 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
743 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
744 LIBPAM="-lpam -lpam_misc"]
748 [AC_CHECK_LIB(pam, pam_end,
749 [AC_CHECK_LIB(pam, $pam_conv_func,
750 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
751 LIBPAM="-lpam -ldl"],
752 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
753 LIBPAM="-lpam -ldl -lpam_misc"]
755 ],AC_MSG_WARN([*** pam support will not be built ***]),
762 dnl -------------------------------
763 dnl Endian-ness check
764 dnl -------------------------------
767 dnl -------------------------------
768 dnl check the size in byte of the C
769 dnl -------------------------------
770 dnl AC_CHECK_SIZEOF(char)
771 dnl AC_CHECK_SIZEOF(int)
772 dnl AC_CHECK_SIZEOF(short)
773 dnl AC_CHECK_SIZEOF(long)
775 dnl ----------------------------
776 dnl check existance of functions
777 dnl ----------------------------
783 dnl -------------------------------
784 dnl bgpd needs pow() and hence libm
785 dnl -------------------------------
787 AC_CHECK_HEADER([math.h],
788 [AC_CHECK_LIB([m], [pow],
791 AC_CHECK_FUNCS(pow,[],[LIBM=""])
794 if test x"$LIBM" = x ; then
795 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
808 AC_CHECK_HEADER([asm-generic/unistd.h],
809 [AC_CHECK_DECL(__NR_setns,
810 AC_DEFINE(HAVE_NETNS,, Have netns),,
811 FRR_INCLUDES [#include <asm-generic/unistd.h>
813 AC_CHECK_FUNCS(setns)]
816 dnl ------------------------------------
817 dnl Determine routing get and set method
818 dnl ------------------------------------
819 AC_MSG_CHECKING(zebra between kernel interface method)
820 if test x"$opsys" = x"gnu-linux"; then
821 AC_MSG_RESULT(netlink)
822 RT_METHOD=rt_netlink.o
823 KERNEL_METHOD=kernel_netlink.o
824 AC_DEFINE(HAVE_NETLINK,,netlink)
826 AC_CHECK_DECLS([IFLA_INFO_SLAVE_KIND], [], [], [#include <linux/if_link.h>])
828 AC_MSG_RESULT(Route socket)
829 KERNEL_METHOD="kernel_socket.o"
830 RT_METHOD="rt_socket.o"
833 AC_SUBST(KERNEL_METHOD)
834 AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
836 dnl --------------------------
837 dnl Determine IS-IS I/O method
838 dnl --------------------------
839 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
840 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
841 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
842 AC_CHECK_HEADER(net/bpf.h)
843 AC_CHECK_HEADER(sys/dlpi.h)
844 AC_MSG_CHECKING(zebra IS-IS I/O method)
845 if test x"$opsys" = x"gnu-linux"; then
846 AC_MSG_RESULT(pfpacket)
847 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
848 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
850 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
852 if test $ac_cv_header_net_bpf_h = no; then
853 if test $ac_cv_header_sys_dlpi_h = no; then
855 AC_MSG_WARN([*** IS-IS support will not be built ***])
860 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
863 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
866 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
868 dnl ------------------------------------
869 dnl check for broken CMSG_FIRSTHDR macro
870 dnl ------------------------------------
871 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
872 AC_RUN_IFELSE([AC_LANG_SOURCE([[
875 #define __EXTENSIONS__
878 #include <sys/types.h>
879 #include <sys/socket.h>
886 msg.msg_control = buf;
887 msg.msg_controllen = 0;
889 if (CMSG_FIRSTHDR(&msg) != NULL)
892 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
893 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
895 dnl ------------------------------
896 dnl check kernel route read method
897 dnl ------------------------------
898 AC_CACHE_CHECK([route read method], [frr_cv_rtread_method],
899 [if test "x$netlink" = xyes; then
900 frr_cv_rtread_method="netlink"
902 for frr_cv_rtread_method in /dev/ip /dev/null;
904 test x`ls $frr_cv_rtread_method 2>/dev/null` = x"$frr_cv_rtread_method" && break
906 case $frr_cv_rtread_method in
909 *-freebsd*) frr_cv_rtread_method="sysctl";;
910 *) frr_cv_rtread_method="getmsg";;
913 frr_cv_rtread_method="sysctl";;
916 RTREAD_METHOD=rtread_${frr_cv_rtread_method}.o
917 AC_SUBST(RTREAD_METHOD)
919 dnl -----------------------------
920 dnl check interface lookup method
921 dnl -----------------------------
923 AC_MSG_CHECKING(interface looking up method)
924 if test "$netlink" = yes; then
925 AC_MSG_RESULT(netlink)
926 IF_METHOD=if_netlink.o
927 elif test "$opsys" = "sol2-6";then
928 AC_MSG_RESULT(Solaris GIF)
930 elif test "$opsys" = "sol8";then
931 AC_MSG_RESULT(Solaris GLIF)
932 IF_METHOD=if_ioctl_solaris.o
933 IOCTL_METHOD=ioctl_solaris.o
934 elif test "$opsys" = "openbsd";then
935 AC_MSG_RESULT(openbsd)
937 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
938 AC_MSG_RESULT(sysctl)
939 IF_METHOD=if_sysctl.o
940 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
946 AC_SUBST(IOCTL_METHOD)
948 dnl ---------------------------------------------------------------
949 dnl figure out how to specify an interface in multicast sockets API
950 dnl ---------------------------------------------------------------
951 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
953 AC_CHECK_HEADERS([linux/mroute.h], [], [],[
954 #include <sys/socket.h>
955 #include <netinet/in.h>
956 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
957 #include <linux/types.h>
960 m4_define([FRR_INCLUDES],
962 [#if HAVE_LINUX_MROUTE_H
963 # include <linux/mroute.h>
967 AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
968 #include <sys/socket.h>
969 #include <sys/types.h>
970 #include <netinet/in.h>
971 #include <net/route.h>
974 m4_define([FRR_INCLUDES],
976 [#if HAVE_NETINET_IP_MROUTE_H
977 # include <netinet/ip_mroute.h>
981 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
982 AC_TRY_COMPILE([#include <sys/param.h>],
983 [#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)
986 #error No support for BSD struct ip_mreq hack detected
987 #endif],[AC_MSG_RESULT(yes)
988 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
991 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
993 #include <sys/types.h>
994 #include <netinet/in.h>
995 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
996 ], [AC_MSG_RESULT(yes)
997 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1000 dnl ---------------------------------------------------------------
1001 dnl figure out how to check link-state
1002 dnl ---------------------------------------------------------------
1003 AC_CHECK_HEADER( [net/if_media.h],
1004 [m4_define([LINK_DETECT_INCLUDES],
1006 [#include <net/if_media.h>
1008 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1009 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1010 [], LINK_DETECT_INCLUDES)],
1014 dnl ---------------------------------------------------------------
1015 dnl Additional, newer way to check link-state using ifi_link_state.
1016 dnl Not available in all BSD's when ifmediareq available
1017 dnl ---------------------------------------------------------------
1018 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1019 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1022 dnl ------------------------
1023 dnl TCP_MD5SIG socket option
1024 dnl ------------------------
1026 AC_CHECK_HEADER([netinet/tcp.h],
1027 [m4_define([MD5_INCLUDES],
1029 [#include <netinet/tcp.h>
1031 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1034 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1035 AC_CHECK_HEADER([linux/tcp.h],
1036 [m4_define([MD5_INCLUDES],
1038 [#include <linux/tcp.h>
1040 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1043 dnl -----------------------------
1044 dnl check ipforward detect method
1045 dnl -----------------------------
1046 AC_CACHE_CHECK([ipforward method], [frr_cv_ipforward_method],
1047 [if test x$cross_compiling = xyes; then
1048 if test x"$opsys" = x"gnu-linux"; then
1049 frr_cv_ipforward_method=/proc/net/snmp
1051 frr_cv_ipforward_method=/dev/ip
1054 for frr_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1056 test x`ls $frr_cv_ipforward_method 2>/dev/null` = x"$frr_cv_ipforward_method" && break
1059 case $frr_cv_ipforward_method in
1060 "/proc/net/snmp") frr_cv_ipforward_method="proc";;
1063 *-freebsd*) frr_cv_ipforward_method="sysctl";;
1064 *) frr_cv_ipforward_method="solaris";;
1066 *) frr_cv_ipforward_method="sysctl";;
1068 IPFORWARD=ipforward_${frr_cv_ipforward_method}.o
1071 dnl ----------------------------------------------------------------------------
1072 dnl figure out if domainname is available in the utsname struct (GNU extension).
1073 dnl ----------------------------------------------------------------------------
1074 AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1079 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1083 if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1084 AC_DEFINE(KAME,1,KAME IPv6)
1086 dnl ------------------------------------
1087 dnl Solaris 9, 10 and potentially higher
1088 dnl ------------------------------------
1089 elif test x"$opsys" = x"sol8"; then
1090 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1091 AC_MSG_RESULT(Solaris IPv6)
1095 elif test x"$opsys" = x"gnu-linux"; then
1096 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1097 dnl Linux has a compilation problem with mixing
1098 dnl netinet/in.h and linux/in6.h they are not
1099 dnl compatible. There has been discussion on
1100 dnl how to fix it but no real progress on implementation
1101 dnl when they fix it, remove this
1102 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
1103 AC_MSG_RESULT(Linux IPv6)
1105 AC_MSG_ERROR([Failed to detect IPv6 stack])
1108 dnl ------------------
1109 dnl IPv6 header checks
1110 dnl ------------------
1111 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
1112 netinet6/in6_var.h netinet6/nd6.h], [], [],
1115 m4_define([FRR_INCLUDES],dnl
1117 [#if HAVE_NETINET6_IN6_H
1118 #include <netinet6/in6.h>
1120 #if HAVE_NETINET_IN6_VAR_H
1121 #include <netinet/in6_var.h>
1123 #include <netinet/icmp6.h>
1124 #if HAVE_NETINET6_IN6_VAR_H
1125 # include <netinet6/in6_var.h>
1127 #if HAVE_NETINET6_ND6_H
1128 # include <netinet6/nd6.h>
1132 dnl disable doc check
1133 if test "${enable_doc}" = "no";then
1139 dnl --------------------
1140 dnl Daemon disable check
1141 dnl --------------------
1142 if test "${enable_zebra}" = "no";then
1147 AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
1149 if test "${enable_bgpd}" = "no";then
1154 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1156 if test "${enable_ripd}" = "no";then
1161 AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
1163 if test "${enable_ospfd}" = "no";then
1168 AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
1170 if test "${enable_ldpd}" = "no";then
1173 AX_PROG_PERL_MODULES(XML::LibXML, , [
1174 if test -f "${srcdir}/ldpd/ldp_vty_cmds.c"; then
1175 AC_MSG_WARN([XML::LibXML perl module not found, using pregenerated ldp_vty_cmds.c])
1177 AC_MSG_ERROR([XML::LibXML perl module not found and pregenerated ldp_vty_cmds.c missing])
1182 AC_DEFINE(HAVE_LDPD, 1, ldpd)
1184 AM_CONDITIONAL(LDPD, test "x$LDPD" = "xldpd")
1186 if test "${enable_watchfrr}" = "no";then
1191 AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
1194 if test "${enable_ospfapi}" != "no";then
1195 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1197 if test "${enable_ospfclient}" != "no";then
1198 OSPFCLIENT="ospfclient"
1202 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1204 case "${enable_ripngd}" in
1206 * ) RIPNGD="ripngd";;
1208 AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
1210 case "${enable_ospf6d}" in
1212 * ) OSPF6D="ospf6d";;
1214 AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
1216 case "${enable_isisd}" in
1220 AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
1222 case "${enable_pimd}" in
1226 AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
1228 if test "${enable_bgp_announce}" = "no";then
1229 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1231 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1234 if test "${with_rfp_path}" = "yes" || test x"${with_rfp_path}" = x""; then
1235 with_rfp_path="bgpd/rfp-example"
1237 if test "${with_rfp_path}" != "no"; then
1238 VNC_RFP_PATH="${with_rfp_path}"
1239 AC_SUBST(VNC_RFP_PATH)
1242 if test "${enable_bgp_vnc}" != "no";then
1243 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
1244 RFPTEST="${with_rfp_path}/rfptest"
1245 LIBRFP="${with_rfp_path}/librfp"
1246 RFPINC="${with_rfp_path}/librfp"
1250 RFPINC="bgpd/rfp-example/librfp"
1253 AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
1272 AC_SUBST(OSPFCLIENT)
1274 AC_CHECK_LIB(crypt, crypt)
1275 AC_CHECK_LIB(resolv, res_init)
1277 dnl ---------------------------
1278 dnl check system has PCRE regexp
1279 dnl ---------------------------
1280 if test "x$enable_pcreposix" = "xyes"; then
1281 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1282 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1284 AC_SUBST(HAVE_LIBPCREPOSIX)
1286 dnl ------------------
1287 dnl check Net-SNMP library
1288 dnl ------------------
1289 if test "${enable_snmp}" != ""; then
1290 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1291 if test x"$NETSNMP_CONFIG" = x"no"; then
1292 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1294 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1295 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1296 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1297 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1304 ])],[AC_MSG_RESULT(yes)],[
1306 AC_MSG_ERROR([--enable-snmp given but not usable])])
1307 AC_DEFINE(HAVE_SNMP,,SNMP)
1308 case "${enable_snmp}" in
1313 SNMP_METHOD="${enable_snmp}"
1316 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1319 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1320 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1321 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1324 dnl ---------------------------
1325 dnl sockaddr and netinet checks
1326 dnl ---------------------------
1329 struct vifctl, struct mfcctl, struct sioc_sg_req,
1330 vifi_t, struct sioc_vif_req, struct igmpmsg,
1331 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1332 struct nd_opt_adv_interval, struct rt_addrinfo,
1333 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1334 [], [], FRR_INCLUDES)
1336 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1337 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1338 struct sockaddr_dl.sdl_len,
1339 struct if6_aliasreq.ifra_lifetime,
1340 struct nd_opt_adv_interval.nd_opt_ai_type],
1341 [], [], FRR_INCLUDES)
1343 dnl ---------------------------
1344 dnl IRDP/pktinfo/icmphdr checks
1345 dnl ---------------------------
1346 AC_CHECK_TYPES([struct in_pktinfo],
1347 [AC_CHECK_TYPES([struct icmphdr],
1348 [if test "${enable_irdp}" != "no"; then
1349 AC_DEFINE(HAVE_IRDP,, IRDP)
1351 [if test "${enable_irdp}" = "yes"; then
1352 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1353 fi], [FRR_INCLUDES])],
1354 [if test "${enable_irdp}" = "yes"; then
1355 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1356 fi], [FRR_INCLUDES])
1358 dnl -----------------------
1359 dnl checking for IP_PKTINFO
1360 dnl -----------------------
1361 AC_MSG_CHECKING(for IP_PKTINFO)
1362 AC_TRY_COMPILE([#include <netdb.h>], [
1363 int opt = IP_PKTINFO;
1366 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1371 dnl ---------------------------
1372 dnl checking for IP_RECVDSTADDR
1373 dnl ---------------------------
1374 AC_MSG_CHECKING(for IP_RECVDSTADDR)
1375 AC_TRY_COMPILE([#include <netinet/in.h>], [
1376 int opt = IP_RECVDSTADDR;
1379 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1384 dnl ----------------------
1385 dnl checking for IP_RECVIF
1386 dnl ----------------------
1387 AC_MSG_CHECKING(for IP_RECVIF)
1388 AC_TRY_COMPILE([#include <netinet/in.h>], [
1389 int opt = IP_RECVIF;
1392 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1397 dnl ----------------------
1398 dnl checking for SO_BINDANY
1399 dnl ----------------------
1400 AC_MSG_CHECKING(for SO_BINDANY)
1401 AC_TRY_COMPILE([#include <sys/socket.h>], [
1402 int opt = SO_BINDANY;
1405 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1410 dnl ----------------------
1411 dnl checking for IP_FREEBIND
1412 dnl ----------------------
1413 AC_MSG_CHECKING(for IP_FREEBIND)
1414 AC_TRY_COMPILE([#include <netinet/in.h>], [
1415 int opt = IP_FREEBIND;
1418 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1423 dnl --------------------------------------
1424 dnl checking for clock_time monotonic struct and call
1425 dnl --------------------------------------
1426 AC_CHECK_DECL(CLOCK_MONOTONIC,
1427 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1428 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1429 ], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
1431 dnl --------------------------------------
1432 dnl checking for flex and bison
1433 dnl --------------------------------------
1436 AC_MSG_CHECKING(version of flex)
1437 quagga_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
1438 quagga_ac_flex_version="${quagga_ac_flex_version##* }"
1439 AC_MSG_RESULT([$quagga_ac_flex_version])
1440 AX_COMPARE_VERSION([$quagga_ac_flex_version], [lt], [2.5.20], [
1441 LEX="$SHELL $missing_dir/missing flex"
1442 if test -f "${srcdir}/lib/command_lex.c" -a -f "${srcdir}/lib/command_lex.h"; then
1443 AC_MSG_WARN([using pregenerated flex output files])
1445 AC_MSG_ERROR([flex failure and pregenerated files not included (probably a git build)])
1447 AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
1448 AC_SUBST([LEXLIB], [''])
1452 dnl thanks GNU bison for this b*llshit...
1453 AC_MSG_CHECKING(version of bison)
1454 quagga_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
1455 quagga_ac_bison_version="${quagga_ac_bison_version##* }"
1456 quagga_ac_bison_missing="false"
1457 case "x${quagga_ac_bison_version}" in
1460 BISON_CLOSEBRACE='"'
1461 AC_MSG_RESULT([$quagga_ac_bison_version - 2.7 or older])
1464 AC_MSG_RESULT([$quagga_ac_bison_version])
1465 AC_MSG_WARN([installed bison is too old. Please install GNU bison 2.7.x or newer.])
1466 quagga_ac_bison_missing="true"
1469 AC_MSG_RESULT([none])
1470 AC_MSG_WARN([could not determine bison version. Please install GNU bison 2.7.x or newer.])
1471 quagga_ac_bison_missing="true"
1475 BISON_CLOSEBRACE='}'
1476 AC_MSG_RESULT([$quagga_ac_bison_version - 3.0 or newer])
1479 AC_SUBST(BISON_OPENBRACE)
1480 AC_SUBST(BISON_CLOSEBRACE)
1482 if $quagga_ac_bison_missing; then
1483 YACC="$SHELL $missing_dir/missing bison -y"
1484 if test -f "${srcdir}/lib/command_parse.c" -a -f "${srcdir}/lib/command_parse.h"; then
1485 AC_MSG_WARN([using pregenerated bison output files])
1487 AC_MSG_ERROR([bison failure and pregenerated files not included (probably a git build)])
1491 dnl -------------------
1492 dnl capabilities checks
1493 dnl -------------------
1494 if test "${enable_capabilities}" != "no"; then
1495 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1496 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1498 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1499 frr_ac_keepcaps="yes"],
1502 if test x"${frr_ac_keepcaps}" = x"yes"; then
1503 AC_CHECK_HEADERS(sys/capability.h)
1505 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1506 AC_CHECK_LIB(cap, cap_init,
1507 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1512 AC_CHECK_HEADERS(priv.h,
1513 [AC_MSG_CHECKING(Solaris style privileges are available)
1514 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1516 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1517 frr_ac_scaps="yes"],
1523 if test x"${frr_ac_scaps}" = x"yes" \
1524 -o x"${frr_ac_lcaps}" = x"yes"; then
1525 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1530 dnl ---------------------------
1531 dnl check for glibc 'backtrace'
1532 dnl ---------------------------
1533 if test x"${enable_backtrace}" != x"no" ; then
1535 AC_CHECK_HEADER([execinfo.h], [
1536 AC_SEARCH_LIBS([backtrace], [execinfo], [
1537 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1538 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1543 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1544 dnl user explicitly requested backtrace but we failed to find support
1545 AC_MSG_FAILURE([failed to find backtrace support])
1549 dnl -----------------------------------------
1550 dnl check for malloc mallinfo struct and call
1551 dnl this must try and link using LIBS, in
1552 dnl order to check no alternative allocator
1553 dnl has been specified, which might not provide
1554 dnl mallinfo, e.g. such as Umem on Solaris.
1555 dnl -----------------------------------------
1556 AC_CHECK_HEADER([malloc.h],
1557 [AC_MSG_CHECKING(whether mallinfo is available)
1558 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1559 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1561 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1564 ], [], FRR_INCLUDES)
1569 CONFDATE=`date '+%Y%m%d'`
1575 if test x"$DEJAGNU" = x
1577 DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
1579 RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
1582 AC_SUBST(RUNTESTDEFAULTFLAGS)
1584 dnl ------------------------------
1585 dnl set paths for state directory
1586 dnl ------------------------------
1587 AC_MSG_CHECKING(directory to use for state file)
1588 if test "${prefix}" = "NONE"; then
1589 frr_statedir_prefix="";
1591 frr_statedir_prefix=${prefix}
1593 if test "${localstatedir}" = '${prefix}/var'; then
1594 for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
1595 ${frr_statedir_prefix}/var/adm dnl
1596 ${frr_statedir_prefix}/etc dnl
1602 test -d $FRR_STATE_DIR && break
1604 frr_statedir=$FRR_STATE_DIR
1606 frr_statedir=${localstatedir}
1608 if test $frr_statedir = "/dev/null"; then
1609 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1611 AC_MSG_RESULT(${frr_statedir})
1612 AC_SUBST(frr_statedir)
1614 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$frr_statedir/zebra.pid",zebra PID)
1615 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$frr_statedir/ripd.pid",ripd PID)
1616 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$frr_statedir/ripngd.pid",ripngd PID)
1617 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$frr_statedir/bgpd.pid",bgpd PID)
1618 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$frr_statedir/ospfd.pid",ospfd PID)
1619 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$frr_statedir/ospf6d.pid",ospf6d PID)
1620 AC_DEFINE_UNQUOTED(PATH_LDPD_PID, "$frr_statedir/ldpd.pid",ldpd PID)
1621 AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
1622 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$frr_statedir/isisd.pid",isisd PID)
1623 AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$frr_statedir/pimd.pid",pimd PID)
1624 AC_DEFINE_UNQUOTED(PATH_WATCHFRR_PID, "$frr_statedir/watchfrr.pid",watchfrr PID)
1625 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
1626 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$frr_statedir/zebra.vty",zebra vty socket)
1627 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$frr_statedir/ripd.vty",rip vty socket)
1628 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$frr_statedir/ripngd.vty",ripng vty socket)
1629 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$frr_statedir/bgpd.vty",bgpd vty socket)
1630 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$frr_statedir/ospfd.vty",ospfd vty socket)
1631 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$frr_statedir/ospf6d.vty",ospf6d vty socket)
1632 AC_DEFINE_UNQUOTED(LDP_VTYSH_PATH, "$frr_statedir/ldpd.vty",ldpd vty socket)
1633 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$frr_statedir/isisd.vty",isisd vty socket)
1634 AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$frr_statedir/pimd.vty",pimd vty socket)
1635 AC_DEFINE_UNQUOTED(WATCHFRR_VTYSH_PATH, "$frr_statedir/watchfrr.vty",watchfrr vty socket)
1636 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
1638 dnl autoconf does this, but it does it too late...
1639 test "x$prefix" = xNONE && prefix=$ac_default_prefix
1640 test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
1642 dnl get the full path, recursing through variables...
1643 vtysh_bin="$bindir/vtysh"
1644 for I in 1 2 3 4 5 6 7 8 9 10; do
1645 eval vtysh_bin="\"$vtysh_bin\""
1647 AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
1649 CFG_SYSCONF="$sysconfdir"
1651 CFG_STATE="$frr_statedir"
1652 for I in 1 2 3 4 5 6 7 8 9 10; do
1653 eval CFG_SYSCONF="\"$CFG_SYSCONF\""
1654 eval CFG_SBIN="\"$CFG_SBIN\""
1655 eval CFG_STATE="\"$CFG_STATE\""
1657 AC_SUBST(CFG_SYSCONF)
1661 dnl -------------------------------
1662 dnl Quagga sources should always be
1663 dnl current wrt interfaces. Dont
1664 dnl allow deprecated interfaces to
1666 dnl -------------------------------
1667 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1669 dnl ---------------------------
1670 dnl Check htonl works correctly
1671 dnl ---------------------------
1672 AC_MSG_CHECKING(for working htonl)
1673 AC_CACHE_VAL(ac_cv_htonl_works,
1674 [AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
1675 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1678 AC_MSG_RESULT($ac_cv_htonl_works)
1680 AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
1681 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchfrr/Makefile
1682 ospf6d/Makefile ldpd/Makefile isisd/Makefile vtysh/Makefile
1683 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
1685 tests/bgpd.tests/Makefile
1686 tests/libzebra.tests/Makefile
1708 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1709 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1711 if test "${enable_bgp_vnc}" != "no"; then
1712 if test "${with_rfp_path}" = "bgpd/rfp-example" ; then
1713 AC_CONFIG_FILES([bgpd/rfp-example/rfptest/Makefile bgpd/rfp-example/librfp/Makefile])
1715 AC_CONFIG_FILES([${with_rfp_path}/rfptest/Makefile ${with_rfp_path}/librfp/Makefile])
1719 AC_CONFIG_FILES([solaris/Makefile])
1721 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1723 ## Hack, but working solution to avoid rebuilding of quagga.info.
1724 ## It's already in CVS until texinfo 4.7 is more common.
1728 FreeRangeRouting configuration
1729 ------------------------------
1730 FRR version : ${PACKAGE_VERSION}
1731 host operating system : ${host_os}
1732 source code location : ${srcdir}
1734 compiler flags : ${CFLAGS}
1736 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1737 state file directory : ${frr_statedir}
1738 config file directory : `eval echo \`echo ${sysconfdir}\``
1739 example directory : `eval echo \`echo ${exampledir}\``
1740 user to run as : ${enable_user}
1741 group to run as : ${enable_group}
1742 group for vty sockets : ${enable_vty_group}
1743 config file mask : ${enable_configfile_mask}
1744 log file mask : ${enable_logfile_mask}
1745 zebra protobuf enabled : ${have_protobuf:-no}
1747 The above user and group must have read/write access to the state file
1748 directory and to the config files in the config file directory."