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_ENABLE(tcmalloc,
59 AS_HELP_STRING([--enable-tcmalloc], [Turn on tcmalloc]),
60 [case "${enableval}" in
61 yes) tcmalloc_enabled=true
62 LIBS="$LIBS -ltcmalloc_minimal"
64 no) tcmalloc_enabled=false ;;
65 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
66 esac],[tcmalloc_enabled=false])
69 dnl Thanks autoconf, but we don't want a default -g -O2. We have our own
70 dnl flag determination logic.
73 dnl --------------------
74 dnl Check CC and friends
75 dnl --------------------
76 dnl note orig_cflags is also used further down
82 dnl remove autoconf default "-g -O2"
90 dnl autoconf 2.59 appears not to support AC_PROG_SED
92 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
94 dnl try and enable CFLAGS that are useful for Quagga
95 dnl - specifically, options to control warnings
97 AC_USE_SYSTEM_EXTENSIONS()
98 AC_DEFUN([AC_C_FLAG], [{
100 ac_c_flag_save="$CFLAGS"
102 AC_MSG_CHECKING([[whether $CC supports $1]])
104 [AC_LANG_PROGRAM([[]])],
107 m4_if([$3], [], [], [
108 CFLAGS="$ac_c_flag_save"
112 CFLAGS="$ac_c_flag_save"
119 dnl ICC won't bail on unknown options without -diag-error 10006
120 dnl need to do this first so we get useful results for the other options
121 AC_C_FLAG([-diag-error 10006])
123 dnl AC_PROG_CC_C99 may change CC to include -std=gnu99 or something
125 CC="${CC% -std=gnu99}"
128 AC_C_FLAG([-std=gnu11], [CC="$ac_cc"], [CC="$CC -std=gnu11"])
130 dnl if the user specified any CFLAGS, we don't add "-g -Os/-O2" here
131 if test "z$orig_cflags" = "z"; then
138 dnl always want these CFLAGS
139 AC_C_FLAG([-fno-omit-frame-pointer])
142 AC_C_FLAG([-Wmissing-prototypes])
143 AC_C_FLAG([-Wmissing-declarations])
144 AC_C_FLAG([-Wpointer-arith])
145 AC_C_FLAG([-Wbad-function-cast])
146 AC_C_FLAG([-Wwrite-strings])
147 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
148 AC_C_FLAG([-Wcast-qual])
149 AC_C_FLAG([-Wstrict-prototypes])
150 AC_C_FLAG([-Wmissing-noreturn])
151 AC_C_FLAG([-Wmissing-format-attribute])
152 AC_C_FLAG([-Wunreachable-code])
153 AC_C_FLAG([-Wpacked])
154 AC_C_FLAG([-Wpadded])
156 AC_C_FLAG([-Wno-unused-result])
158 AC_C_FLAG([-Wno-unused-parameter])
159 AC_C_FLAG([-Wno-missing-field-initializers])
161 dnl ICC emits a broken warning for const char *x = a ? "b" : "c";
162 dnl for some reason the string consts get 'promoted' to char *,
163 dnl triggering a const to non-const conversion warning.
164 AC_C_FLAG([-diag-disable 3179])
166 if test x"${enable_werror}" = x"yes" ; then
171 dnl need link on this one, not compile
173 ac_ld_flag_save="$LDFLAGS"
174 LDFLAGS="$LDFLAGS -rdynamic"
175 AC_MSG_CHECKING([[whether linker supports -rdynamic]])
177 [AC_LANG_PROGRAM([[]])],
178 [AC_MSG_RESULT([yes])],
180 LDFLAGS="$ac_ld_flag_save"
191 AC_CHECK_TOOL(AR, ar)
193 dnl -----------------
194 dnl System extensions
195 dnl -----------------
203 dnl ----------------------
204 dnl Packages configuration
205 dnl ----------------------
206 AC_ARG_WITH(pkg-extra-version,
207 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
208 [EXTRAVERSION=$withval],)
209 AC_ARG_WITH(pkg-git-version,
210 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
211 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
213 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for Quagga]))
215 AS_HELP_STRING([--disable-doc], [do not build docs]))
217 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
219 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
221 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
222 AC_ARG_ENABLE(ripngd,
223 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
225 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
226 AC_ARG_ENABLE(ospf6d,
227 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
229 AS_HELP_STRING([--enable-ldpd], [build ldpd]))
231 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
232 AC_ARG_ENABLE(watchfrr,
233 AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
235 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
237 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
238 AC_ARG_ENABLE(bgp-announce,
239 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
240 AC_ARG_ENABLE(bgp-vnc,
241 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
242 AC_ARG_WITH(rfp-path,
243 AS_HELP_STRING([--with-rfp-path[=DIR]],[path to replaced stub RFP used with BGP VNC]))
245 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
247 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
248 AC_ARG_ENABLE(tcp-zebra,
249 AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
250 AC_ARG_ENABLE(ospfapi,
251 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
252 AC_ARG_ENABLE(ospfclient,
253 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
254 (this is the default if --disable-ospfapi is set)]))
255 AC_ARG_ENABLE(multipath,
256 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
258 AS_HELP_STRING([--enable-user=USER], [user to run FRR suite as (default frr)]))
260 AS_HELP_STRING([--enable-group=GROUP], [group to run FRR suite as (default frr)]))
261 AC_ARG_ENABLE(vty_group,
262 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
263 AC_ARG_ENABLE(configfile_mask,
264 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
265 AC_ARG_ENABLE(logfile_mask,
266 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
267 AC_ARG_ENABLE(shell_access,
268 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
270 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
272 AS_HELP_STRING([--enable-irdp], [enable IRDP server support in zebra]))
273 AC_ARG_ENABLE(capabilities,
274 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
275 AC_ARG_ENABLE(rusage,
276 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
277 AC_ARG_ENABLE(gcc_ultra_verbose,
278 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
279 AC_ARG_ENABLE(linux24_tcp_md5,
280 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
281 AC_ARG_ENABLE(backtrace,
282 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
283 AC_ARG_ENABLE(time-check,
284 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
285 AC_ARG_ENABLE(pcreposix,
286 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
288 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
289 AC_ARG_ENABLE(systemd,
290 AS_HELP_STRING([--enable-systemd], [enable Systemd support]))
292 AS_HELP_STRING([--enable-poll], [enable usage of Poll instead of select]))
293 AC_ARG_ENABLE(werror,
294 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
295 AC_ARG_ENABLE(cumulus,
296 AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions]))
297 AC_ARG_ENABLE(rr-semantics,
298 AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics]))
299 AC_ARG_ENABLE([protobuf],
300 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
301 AC_ARG_ENABLE([oldvpn_commands],
302 AS_HELP_STRING([--enable-old-vpn-commands], [Keep old vpn commands]))
304 AC_CHECK_HEADERS(json-c/json.h)
305 AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c")
306 if test $ac_cv_lib_json_c_json_object_get = no; then
307 AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
308 if test $ac_cv_lib_json_json_object_get = no; then
309 AC_MSG_ERROR([lib json is needed to compile])
313 AC_ARG_ENABLE([dev_build],
314 AS_HELP_STRING([--enable-dev-build], [build for development]))
316 if test x"${enable_time_check}" != x"no" ; then
317 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
318 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
320 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
324 case "${enable_systemd}" in
327 AC_CHECK_LIB(systemd, sd_notify, LIBS="$LIBS -lsystemd")
328 if test $ac_cv_lib_systemd_sd_notify = no; then
329 AC_MSG_ERROR([enable systemd has been specified but systemd development env not found on your system])
331 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
337 if test "${enable_rr_semantics}" != "no" ; then
338 AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics)
341 if test "${enable_poll}" = "yes" ; then
342 AC_DEFINE(HAVE_POLL,,Compile systemd support in)
348 AC_MSG_CHECKING(whether this OS has MPLS stack)
351 MPLS_METHOD="zebra_mpls_netlink.o"
352 AC_MSG_RESULT(Linux MPLS)
355 MPLS_METHOD="zebra_mpls_openbsd.o"
356 AC_MSG_RESULT(OpenBSD MPLS)
359 MPLS_METHOD="zebra_mpls_null.o"
360 AC_MSG_RESULT(Unsupported kernel)
363 AC_SUBST(MPLS_METHOD)
365 if test "${enable_cumulus}" = "yes" ; then
366 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
369 if test "${enable_shell_access}" = "yes"; then
370 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
373 if test "${enable_fpm}" = "yes"; then
374 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
377 if test "x${enable_dev_build}" = "xyes"; then
378 AC_DEFINE(DEV_BUILD,,Build for development)
380 AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
383 # Logic for protobuf support.
385 if test "$enable_protobuf" = "yes"; then
389 AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
390 if test "x$PROTOC_C" = "x/bin/false"; then
394 PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
395 [found_protobuf_c=yes],
396 [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
398 if test "x$found_protobuf_c" = "xyes"; then
399 LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
400 CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
402 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
403 [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
409 # Logic for old vpn commans support.
411 if test "$enable_old_vpn_commands" = "yes"; then
412 AC_DEFINE(KEEP_OLD_VPN_COMMANDS,, [Define for compiling with old vpn commands])
415 # Fail if the user explicity enabled protobuf support and we couldn't
416 # find the compiler or libraries.
417 if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
418 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
421 if test "x$have_protobuf" = "xyes"; then
422 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
425 AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
428 # End of logic for protobuf support.
431 if test "${enable_tcp_zebra}" = "yes"; then
432 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
435 if test "${enable_linux24_tcp_md5}" = "yes"; then
436 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
439 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
440 if test "${enable_rtadv}" != "no"; then
442 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
447 if test "${enable_irdp}" = "yes"; then
448 AC_DEFINE(HAVE_IRDP,, IRDP )
451 if test x"${enable_user}" = x"no"; then
454 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
457 AC_DEFINE_UNQUOTED(FRR_USER, "${enable_user}", frr User)
460 if test x"${enable_group}" = x"no"; then
463 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
466 AC_DEFINE_UNQUOTED(FRR_GROUP, "${enable_group}", frr Group)
469 if test x"${enable_vty_group}" = x"yes" ; then
470 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
471 elif test x"${enable_vty_group}" != x""; then
472 if test x"${enable_vty_group}" != x"no"; then
473 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
476 AC_SUBST([enable_user])
477 AC_SUBST([enable_group])
478 AC_SUBST([enable_vty_group])
480 enable_configfile_mask=${enable_configfile_mask:-0600}
481 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
483 enable_logfile_mask=${enable_logfile_mask:-0600}
484 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
488 case "${enable_multipath}" in
492 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
493 MPATH_NUM="${enable_multipath}"
498 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
502 AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
504 dnl -----------------------------------
505 dnl Add extra version string to package
506 dnl name, string and version fields.
507 dnl -----------------------------------
508 if test "x${EXTRAVERSION}" != "x" ; then
509 VERSION="${VERSION}${EXTRAVERSION}"
510 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
511 AC_SUBST(PACKAGE_EXTRAVERSION, ["${EXTRAVERSION}"])
512 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
515 if test "x$with_pkg_git_version" = "xyes"; then
516 if test -d "${srcdir}/.git"; then
517 AC_DEFINE(GIT_VERSION, [1], [include git version info])
518 else with_pkg_git_version="no"
519 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
522 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
524 dnl ------------------------------------
525 dnl Check C keywords and standard types
526 dnl ------------------------------------
537 dnl -------------------------
538 dnl Check other header files.
539 dnl -------------------------
540 AC_CHECK_HEADERS([stropts.h sys/ksym.h \
541 linux/version.h asm/types.h \
544 dnl Utility macro to avoid retyping includes all the time
545 m4_define([FRR_INCLUDES],
548 #define __EXTENSIONS__
553 #include <sys/types.h>
554 /* sys/conf.h depends on param.h on FBSD at least */
555 #include <sys/param.h>
556 /* Required for MAXSIG */
558 #include <sys/socket.h>
560 # define __APPLE_USE_RFC_3542
562 #include <netinet/in.h>
563 #include <sys/time.h>
568 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
569 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
570 dnl an additional round for it.
572 AC_CHECK_HEADERS([net/if_var.h], [], [], FRR_INCLUDES)
574 m4_define([FRR_INCLUDES],
576 [#if HAVE_NET_IF_VAR_H
577 # include <net/if_var.h>
581 AC_CHECK_HEADERS([netinet/in_var.h \
582 net/if_dl.h net/netopt.h \
583 inet/nd.h netinet/ip_icmp.h \
584 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
585 [], [], FRR_INCLUDES)
587 AC_CHECK_HEADERS([ucontext.h], [], [],
590 #endif /* __USE_GNU */
594 m4_define([UCONTEXT_INCLUDES],
595 [#include <ucontext.h>])dnl
597 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
598 [], [], [UCONTEXT_INCLUDES])
599 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
600 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
601 [], [], [UCONTEXT_INCLUDES])],
602 [], [UCONTEXT_INCLUDES])
603 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
604 [], [], [UCONTEXT_INCLUDES])
606 m4_define([FRR_INCLUDES],
610 #include <netinet/in_systm.h>
611 #if HAVE_NETINET_IN_VAR_H
612 # include <netinet/in_var.h>
615 # include <net/if_dl.h>
617 #if HAVE_NET_NETOPT_H
618 # include <net/netopt.h>
620 #include <net/route.h>
622 # include <inet/nd.h>
624 #include <arpa/inet.h>
625 /* Required for IDRP */
626 #if HAVE_NETINET_IP_ICMP_H
627 # include <netinet/ip_icmp.h>
631 dnl V6 headers are checked below, after we check for v6
633 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
635 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
637 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
638 AC_DEFINE(SUNOS_5, 1, SunOS 5)
639 AC_CHECK_LIB(xnet, main)
644 | [*-sunos5.1[0-9]] \
645 | [*-sunos5.1[0-9].[0-9]] \
646 | [*-solaris2.[8-9]] \
647 | [*-solaris2.1[0-9]] \
648 | [*-solaris2.1[0-9].[0-9]])
650 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
651 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
652 AC_CHECK_LIB(socket, main)
653 AC_CHECK_LIB(nsl, main)
654 AC_CHECK_LIB(umem, main)
655 AC_CHECK_FUNCS([printstack],
656 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
657 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
662 *-sunos5* | *-solaris2*)
663 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
664 AC_CHECK_LIB(socket, main)
665 AC_CHECK_LIB(nsl, main)
671 AC_DEFINE(GNU_LINUX,,GNU Linux)
675 AC_DEFINE(OPEN_BSD,,OpenBSD)
681 dnl ---------------------
682 dnl Integrated VTY option
683 dnl ---------------------
684 case "${enable_vtysh}" in
687 AC_DEFINE(VTYSH,,VTY shell)
688 dnl Vtysh uses libreadline, which looks for termcap functions at
689 dnl configure time. We follow readlines search order.
690 dnl The required procedures are in libtermcap on NetBSD, in
691 dnl [TODO] on Linux, and in [TODO] on Solaris.
692 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
693 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
694 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
695 [AC_CHECK_LIB(ncurses, tputs,
696 LIBREADLINE="$LIBREADLINE -lncurses")]
700 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
702 if test $ac_cv_lib_readline_main = no; then
703 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
705 AC_CHECK_HEADER(readline/history.h)
706 if test $ac_cv_header_readline_history_h = no;then
707 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
709 AC_CHECK_LIB(readline, rl_completion_matches,
710 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
711 if test $ac_cv_lib_readline_rl_completion_matches = no; then
712 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
716 AC_SUBST(LIBREADLINE)
717 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
722 dnl Quagga detects the PAM library it is built against by checking for a
723 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
724 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
725 dnl openpam.h doesn't do that, although depends on the header too. Hence a
726 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
729 if test "$with_libpam" = "yes"; then
730 AC_CHECK_HEADER([security/pam_misc.h],
731 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
732 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
733 pam_conv_func="misc_conv"
736 AC_CHECK_HEADER([security/openpam.h],
737 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
738 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
739 pam_conv_func="openpam_ttyconv"
741 [], FRR_INCLUDES[#include <security/pam_appl.h>])
742 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
743 AC_MSG_WARN([*** pam support will not be built ***])
748 if test "$with_libpam" = "yes"; then
749 dnl took this test from proftpds configure.in and suited to our needs
750 dnl -------------------------------------------------------------------------
752 dnl This next check looks funky due to a linker problem with some versions
753 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
754 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
755 dnl with RedHat 6.2 and Debian 2.2 or better.
756 AC_CHECK_LIB(pam, pam_start,
757 [AC_CHECK_LIB(pam, $pam_conv_func,
758 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
760 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
761 LIBPAM="-lpam -lpam_misc"]
765 [AC_CHECK_LIB(pam, pam_end,
766 [AC_CHECK_LIB(pam, $pam_conv_func,
767 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
768 LIBPAM="-lpam -ldl"],
769 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
770 LIBPAM="-lpam -ldl -lpam_misc"]
772 ],AC_MSG_WARN([*** pam support will not be built ***]),
779 dnl -------------------------------
780 dnl Endian-ness check
781 dnl -------------------------------
784 dnl -------------------------------
785 dnl check the size in byte of the C
786 dnl -------------------------------
787 dnl AC_CHECK_SIZEOF(char)
788 dnl AC_CHECK_SIZEOF(int)
789 dnl AC_CHECK_SIZEOF(short)
790 dnl AC_CHECK_SIZEOF(long)
792 dnl ----------------------------
793 dnl check existance of functions
794 dnl ----------------------------
800 dnl -------------------------------
801 dnl bgpd needs pow() and hence libm
802 dnl -------------------------------
804 AC_CHECK_HEADER([math.h],
805 [AC_CHECK_LIB([m], [pow],
808 AC_CHECK_FUNCS(pow,[],[LIBM=""])
811 if test x"$LIBM" = x ; then
812 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
825 AC_CHECK_HEADER([asm-generic/unistd.h],
826 [AC_CHECK_DECL(__NR_setns,
827 AC_DEFINE(HAVE_NETNS,, Have netns),,
828 FRR_INCLUDES [#include <asm-generic/unistd.h>
830 AC_CHECK_FUNCS(setns)]
833 dnl ------------------------------------
834 dnl Determine routing get and set method
835 dnl ------------------------------------
836 AC_MSG_CHECKING(zebra between kernel interface method)
837 if test x"$opsys" = x"gnu-linux"; then
838 AC_MSG_RESULT(netlink)
839 RT_METHOD=rt_netlink.o
840 KERNEL_METHOD=kernel_netlink.o
841 AC_DEFINE(HAVE_NETLINK,,netlink)
843 AC_CHECK_DECLS([IFLA_INFO_SLAVE_KIND], [], [], [#include <linux/if_link.h>])
845 AC_MSG_RESULT(Route socket)
846 KERNEL_METHOD="kernel_socket.o"
847 RT_METHOD="rt_socket.o"
850 AC_SUBST(KERNEL_METHOD)
851 AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
853 dnl --------------------------
854 dnl Determine IS-IS I/O method
855 dnl --------------------------
856 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
857 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
858 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
859 AC_CHECK_HEADER(net/bpf.h)
860 AC_CHECK_HEADER(sys/dlpi.h)
861 AC_MSG_CHECKING(zebra IS-IS I/O method)
862 if test x"$opsys" = x"gnu-linux"; then
863 AC_MSG_RESULT(pfpacket)
864 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
865 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
867 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
869 if test $ac_cv_header_net_bpf_h = no; then
870 if test $ac_cv_header_sys_dlpi_h = no; then
872 AC_MSG_WARN([*** IS-IS support will not be built ***])
877 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
880 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
883 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
885 dnl ------------------------------------
886 dnl check for broken CMSG_FIRSTHDR macro
887 dnl ------------------------------------
888 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
889 AC_RUN_IFELSE([AC_LANG_SOURCE([[
892 #define __EXTENSIONS__
895 #include <sys/types.h>
896 #include <sys/socket.h>
903 msg.msg_control = buf;
904 msg.msg_controllen = 0;
906 if (CMSG_FIRSTHDR(&msg) != NULL)
909 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
910 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
912 dnl ------------------------------
913 dnl check kernel route read method
914 dnl ------------------------------
915 AC_CACHE_CHECK([route read method], [frr_cv_rtread_method],
916 [if test "x$netlink" = xyes; then
917 frr_cv_rtread_method="netlink"
919 for frr_cv_rtread_method in /dev/ip /dev/null;
921 test x`ls $frr_cv_rtread_method 2>/dev/null` = x"$frr_cv_rtread_method" && break
923 case $frr_cv_rtread_method in
926 *-freebsd*) frr_cv_rtread_method="sysctl";;
927 *) frr_cv_rtread_method="getmsg";;
930 frr_cv_rtread_method="sysctl";;
933 RTREAD_METHOD=rtread_${frr_cv_rtread_method}.o
934 AC_SUBST(RTREAD_METHOD)
936 dnl -----------------------------
937 dnl check interface lookup method
938 dnl -----------------------------
940 AC_MSG_CHECKING(interface looking up method)
941 if test "$netlink" = yes; then
942 AC_MSG_RESULT(netlink)
943 IF_METHOD=if_netlink.o
944 elif test "$opsys" = "sol2-6";then
945 AC_MSG_RESULT(Solaris GIF)
947 elif test "$opsys" = "sol8";then
948 AC_MSG_RESULT(Solaris GLIF)
949 IF_METHOD=if_ioctl_solaris.o
950 IOCTL_METHOD=ioctl_solaris.o
951 elif test "$opsys" = "openbsd";then
952 AC_MSG_RESULT(openbsd)
954 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
955 AC_MSG_RESULT(sysctl)
956 IF_METHOD=if_sysctl.o
957 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
963 AC_SUBST(IOCTL_METHOD)
965 dnl ---------------------------------------------------------------
966 dnl figure out how to specify an interface in multicast sockets API
967 dnl ---------------------------------------------------------------
968 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
970 AC_CHECK_HEADERS([linux/mroute.h], [], [],[
971 #include <sys/socket.h>
972 #include <netinet/in.h>
973 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
974 #include <linux/types.h>
977 m4_define([FRR_INCLUDES],
979 [#if HAVE_LINUX_MROUTE_H
980 # include <linux/mroute.h>
984 AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
985 #include <sys/socket.h>
986 #include <sys/types.h>
987 #include <netinet/in.h>
988 #include <net/route.h>
991 m4_define([FRR_INCLUDES],
993 [#if HAVE_NETINET_IP_MROUTE_H
994 # include <netinet/ip_mroute.h>
998 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
999 AC_TRY_COMPILE([#include <sys/param.h>],
1000 [#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)
1003 #error No support for BSD struct ip_mreq hack detected
1004 #endif],[AC_MSG_RESULT(yes)
1005 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1008 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1010 #include <sys/types.h>
1011 #include <netinet/in.h>
1012 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1013 ], [AC_MSG_RESULT(yes)
1014 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1017 dnl ---------------------------------------------------------------
1018 dnl figure out how to check link-state
1019 dnl ---------------------------------------------------------------
1020 AC_CHECK_HEADER( [net/if_media.h],
1021 [m4_define([LINK_DETECT_INCLUDES],
1023 [#include <net/if_media.h>
1025 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1026 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1027 [], LINK_DETECT_INCLUDES)],
1031 dnl ---------------------------------------------------------------
1032 dnl Additional, newer way to check link-state using ifi_link_state.
1033 dnl Not available in all BSD's when ifmediareq available
1034 dnl ---------------------------------------------------------------
1035 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1036 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1039 dnl ------------------------
1040 dnl TCP_MD5SIG socket option
1041 dnl ------------------------
1043 AC_CHECK_HEADER([netinet/tcp.h],
1044 [m4_define([MD5_INCLUDES],
1046 [#include <netinet/tcp.h>
1048 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1051 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1052 AC_CHECK_HEADER([linux/tcp.h],
1053 [m4_define([MD5_INCLUDES],
1055 [#include <linux/tcp.h>
1057 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1060 dnl -----------------------------
1061 dnl check ipforward detect method
1062 dnl -----------------------------
1063 AC_CACHE_CHECK([ipforward method], [frr_cv_ipforward_method],
1064 [if test x$cross_compiling = xyes; then
1065 if test x"$opsys" = x"gnu-linux"; then
1066 frr_cv_ipforward_method=/proc/net/snmp
1068 frr_cv_ipforward_method=/dev/ip
1071 for frr_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1073 test x`ls $frr_cv_ipforward_method 2>/dev/null` = x"$frr_cv_ipforward_method" && break
1076 case $frr_cv_ipforward_method in
1077 "/proc/net/snmp") frr_cv_ipforward_method="proc";;
1080 *-freebsd*) frr_cv_ipforward_method="sysctl";;
1081 *) frr_cv_ipforward_method="solaris";;
1083 *) frr_cv_ipforward_method="sysctl";;
1085 IPFORWARD=ipforward_${frr_cv_ipforward_method}.o
1088 dnl ----------------------------------------------------------------------------
1089 dnl figure out if domainname is available in the utsname struct (GNU extension).
1090 dnl ----------------------------------------------------------------------------
1091 AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1096 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1100 if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1101 AC_DEFINE(KAME,1,KAME IPv6)
1103 dnl ------------------------------------
1104 dnl Solaris 9, 10 and potentially higher
1105 dnl ------------------------------------
1106 elif test x"$opsys" = x"sol8"; then
1107 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1108 AC_MSG_RESULT(Solaris IPv6)
1112 elif test x"$opsys" = x"gnu-linux"; then
1113 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1114 dnl Linux has a compilation problem with mixing
1115 dnl netinet/in.h and linux/in6.h they are not
1116 dnl compatible. There has been discussion on
1117 dnl how to fix it but no real progress on implementation
1118 dnl when they fix it, remove this
1119 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
1120 AC_MSG_RESULT(Linux IPv6)
1122 AC_MSG_ERROR([Failed to detect IPv6 stack])
1125 dnl ------------------
1126 dnl IPv6 header checks
1127 dnl ------------------
1128 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
1129 netinet6/in6_var.h netinet6/nd6.h], [], [],
1132 m4_define([FRR_INCLUDES],dnl
1134 [#if HAVE_NETINET6_IN6_H
1135 #include <netinet6/in6.h>
1137 #if HAVE_NETINET_IN6_VAR_H
1138 #include <netinet/in6_var.h>
1140 #include <netinet/icmp6.h>
1141 #if HAVE_NETINET6_IN6_VAR_H
1142 # include <netinet6/in6_var.h>
1144 #if HAVE_NETINET6_ND6_H
1145 # include <netinet6/nd6.h>
1149 dnl disable doc check
1150 if test "${enable_doc}" = "no";then
1156 dnl --------------------
1157 dnl Daemon disable check
1158 dnl --------------------
1159 if test "${enable_zebra}" = "no";then
1164 AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
1166 if test "${enable_bgpd}" = "no";then
1171 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1173 if test "${enable_ripd}" = "no";then
1178 AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
1180 if test "${enable_ospfd}" = "no";then
1185 AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
1187 if test "${enable_ldpd}" = "no";then
1190 AX_PROG_PERL_MODULES(XML::LibXML, , [
1191 if test -f "${srcdir}/ldpd/ldp_vty_cmds.c"; then
1192 AC_MSG_WARN([XML::LibXML perl module not found, using pregenerated ldp_vty_cmds.c])
1194 AC_MSG_ERROR([XML::LibXML perl module not found and pregenerated ldp_vty_cmds.c missing])
1199 AC_DEFINE(HAVE_LDPD, 1, ldpd)
1201 AM_CONDITIONAL(LDPD, test "x$LDPD" = "xldpd")
1204 if test "$opsys" = "gnu-linux"; then
1205 if test "${enable_nhrpd}" != "no"; then
1209 if test "${enable_nhrpd}" = "yes"; then
1210 AC_MSG_ERROR([nhrpd requires kernel APIs that are only present on Linux.])
1213 AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1215 if test "${enable_watchfrr}" = "no";then
1220 AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
1223 if test "${enable_ospfapi}" != "no";then
1224 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1226 if test "${enable_ospfclient}" != "no";then
1227 OSPFCLIENT="ospfclient"
1231 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1233 case "${enable_ripngd}" in
1235 * ) RIPNGD="ripngd";;
1237 AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
1239 case "${enable_ospf6d}" in
1241 * ) OSPF6D="ospf6d";;
1243 AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
1245 case "${enable_isisd}" in
1249 AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
1251 case "${enable_pimd}" in
1255 AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
1257 if test "${enable_bgp_announce}" = "no";then
1258 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1260 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1263 if test "${with_rfp_path}" = "yes" || test x"${with_rfp_path}" = x""; then
1264 with_rfp_path="bgpd/rfp-example"
1266 if test "${with_rfp_path}" != "no"; then
1267 VNC_RFP_PATH="${with_rfp_path}"
1268 AC_SUBST(VNC_RFP_PATH)
1271 if test "${enable_bgp_vnc}" != "no";then
1272 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
1273 RFPTEST="${with_rfp_path}/rfptest"
1274 LIBRFP="${with_rfp_path}/librfp"
1275 RFPINC="${with_rfp_path}/librfp"
1279 RFPINC="bgpd/rfp-example/librfp"
1282 AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
1302 AC_SUBST(OSPFCLIENT)
1304 AC_CHECK_LIB(crypt, crypt)
1305 AC_CHECK_LIB(resolv, res_init)
1307 dnl ---------------------------
1308 dnl check system has PCRE regexp
1309 dnl ---------------------------
1310 if test "x$enable_pcreposix" = "xyes"; then
1311 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1312 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1314 AC_SUBST(HAVE_LIBPCREPOSIX)
1316 dnl ------------------
1317 dnl check C-Ares library
1318 dnl ------------------
1319 if test "${NHRPD}" != ""; then
1320 PKG_CHECK_MODULES([CARES], [libcares])
1324 dnl ------------------
1325 dnl check Net-SNMP library
1326 dnl ------------------
1327 if test "${enable_snmp}" != ""; then
1328 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1329 if test x"$NETSNMP_CONFIG" = x"no"; then
1330 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1332 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1333 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1334 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1335 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1342 ])],[AC_MSG_RESULT(yes)],[
1344 AC_MSG_ERROR([--enable-snmp given but not usable])])
1345 AC_DEFINE(HAVE_SNMP,,SNMP)
1346 case "${enable_snmp}" in
1351 SNMP_METHOD="${enable_snmp}"
1354 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1357 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1358 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1359 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1362 dnl ---------------------------
1363 dnl sockaddr and netinet checks
1364 dnl ---------------------------
1367 struct vifctl, struct mfcctl, struct sioc_sg_req,
1368 vifi_t, struct sioc_vif_req, struct igmpmsg,
1369 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1370 struct nd_opt_adv_interval, struct rt_addrinfo,
1371 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1372 [], [], FRR_INCLUDES)
1374 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1375 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1376 struct sockaddr_dl.sdl_len,
1377 struct if6_aliasreq.ifra_lifetime,
1378 struct nd_opt_adv_interval.nd_opt_ai_type],
1379 [], [], FRR_INCLUDES)
1381 dnl ---------------------------
1382 dnl IRDP/pktinfo/icmphdr checks
1383 dnl ---------------------------
1384 AC_CHECK_TYPES([struct in_pktinfo],
1385 [AC_CHECK_TYPES([struct icmphdr],
1386 [if test "${enable_irdp}" != "no"; then
1387 AC_DEFINE(HAVE_IRDP,, IRDP)
1389 [if test "${enable_irdp}" = "yes"; then
1390 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1391 fi], [FRR_INCLUDES])],
1392 [if test "${enable_irdp}" = "yes"; then
1393 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1394 fi], [FRR_INCLUDES])
1396 dnl -----------------------
1397 dnl checking for IP_PKTINFO
1398 dnl -----------------------
1399 AC_MSG_CHECKING(for IP_PKTINFO)
1400 AC_TRY_COMPILE([#include <netdb.h>], [
1401 int opt = IP_PKTINFO;
1404 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1409 dnl ---------------------------
1410 dnl checking for IP_RECVDSTADDR
1411 dnl ---------------------------
1412 AC_MSG_CHECKING(for IP_RECVDSTADDR)
1413 AC_TRY_COMPILE([#include <netinet/in.h>], [
1414 int opt = IP_RECVDSTADDR;
1417 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1422 dnl ----------------------
1423 dnl checking for IP_RECVIF
1424 dnl ----------------------
1425 AC_MSG_CHECKING(for IP_RECVIF)
1426 AC_TRY_COMPILE([#include <netinet/in.h>], [
1427 int opt = IP_RECVIF;
1430 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1435 dnl ----------------------
1436 dnl checking for SO_BINDANY
1437 dnl ----------------------
1438 AC_MSG_CHECKING(for SO_BINDANY)
1439 AC_TRY_COMPILE([#include <sys/socket.h>], [
1440 int opt = SO_BINDANY;
1443 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1448 dnl ----------------------
1449 dnl checking for IP_FREEBIND
1450 dnl ----------------------
1451 AC_MSG_CHECKING(for IP_FREEBIND)
1452 AC_TRY_COMPILE([#include <netinet/in.h>], [
1453 int opt = IP_FREEBIND;
1456 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1461 dnl --------------------------------------
1462 dnl checking for clock_time monotonic struct and call
1463 dnl --------------------------------------
1464 AC_CHECK_DECL(CLOCK_MONOTONIC,
1465 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1466 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1467 ], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
1469 dnl --------------------------------------
1470 dnl checking for flex and bison
1471 dnl --------------------------------------
1474 AC_MSG_CHECKING(version of flex)
1475 quagga_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
1476 quagga_ac_flex_version="${quagga_ac_flex_version##* }"
1477 AC_MSG_RESULT([$quagga_ac_flex_version])
1478 AX_COMPARE_VERSION([$quagga_ac_flex_version], [lt], [2.5.20], [
1479 LEX="$SHELL $missing_dir/missing flex"
1480 if test -f "${srcdir}/lib/command_lex.c" -a -f "${srcdir}/lib/command_lex.h"; then
1481 AC_MSG_WARN([using pregenerated flex output files])
1483 AC_MSG_ERROR([flex failure and pregenerated files not included (probably a git build)])
1485 AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
1486 AC_SUBST([LEXLIB], [''])
1490 dnl thanks GNU bison for this b*llshit...
1491 AC_MSG_CHECKING(version of bison)
1492 quagga_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
1493 quagga_ac_bison_version="${quagga_ac_bison_version##* }"
1494 quagga_ac_bison_missing="false"
1495 case "x${quagga_ac_bison_version}" in
1498 BISON_CLOSEBRACE='"'
1500 AC_MSG_RESULT([$quagga_ac_bison_version - 2.7 or older])
1503 AC_MSG_RESULT([$quagga_ac_bison_version])
1504 AC_MSG_WARN([installed bison is too old. Please install GNU bison 2.7.x or newer.])
1505 quagga_ac_bison_missing="true"
1508 AC_MSG_RESULT([none])
1509 AC_MSG_WARN([could not determine bison version. Please install GNU bison 2.7.x or newer.])
1510 quagga_ac_bison_missing="true"
1514 BISON_CLOSEBRACE='}'
1515 BISON_VERBOSE='-Dparse.error=verbose'
1516 AC_MSG_RESULT([$quagga_ac_bison_version - 3.0 or newer])
1519 AC_SUBST(BISON_OPENBRACE)
1520 AC_SUBST(BISON_CLOSEBRACE)
1521 AC_SUBST(BISON_VERBOSE)
1523 if $quagga_ac_bison_missing; then
1524 YACC="$SHELL $missing_dir/missing bison -y"
1525 if test -f "${srcdir}/lib/command_parse.c" -a -f "${srcdir}/lib/command_parse.h"; then
1526 AC_MSG_WARN([using pregenerated bison output files])
1528 AC_MSG_ERROR([bison failure and pregenerated files not included (probably a git build)])
1532 dnl -------------------
1533 dnl capabilities checks
1534 dnl -------------------
1535 if test "${enable_capabilities}" != "no"; then
1536 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1537 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1539 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1540 frr_ac_keepcaps="yes"],
1543 if test x"${frr_ac_keepcaps}" = x"yes"; then
1544 AC_CHECK_HEADERS(sys/capability.h)
1546 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1547 AC_CHECK_LIB(cap, cap_init,
1548 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1553 AC_CHECK_HEADERS(priv.h,
1554 [AC_MSG_CHECKING(Solaris style privileges are available)
1555 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1557 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1558 frr_ac_scaps="yes"],
1564 if test x"${frr_ac_scaps}" = x"yes" \
1565 -o x"${frr_ac_lcaps}" = x"yes"; then
1566 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1571 dnl ---------------------------
1572 dnl check for glibc 'backtrace'
1573 dnl ---------------------------
1574 if test x"${enable_backtrace}" != x"no" ; then
1576 AC_CHECK_HEADER([execinfo.h], [
1577 AC_SEARCH_LIBS([backtrace], [execinfo], [
1578 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1579 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1584 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1585 dnl user explicitly requested backtrace but we failed to find support
1586 AC_MSG_FAILURE([failed to find backtrace support])
1590 dnl -----------------------------------------
1591 dnl check for malloc mallinfo struct and call
1592 dnl this must try and link using LIBS, in
1593 dnl order to check no alternative allocator
1594 dnl has been specified, which might not provide
1595 dnl mallinfo, e.g. such as Umem on Solaris.
1596 dnl -----------------------------------------
1597 AC_CHECK_HEADER([malloc.h],
1598 [AC_MSG_CHECKING(whether mallinfo is available)
1599 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1600 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1602 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1605 ], [], FRR_INCLUDES)
1610 CONFDATE=`date '+%Y%m%d'`
1613 dnl ------------------------------
1614 dnl set paths for state directory
1615 dnl ------------------------------
1616 AC_MSG_CHECKING(directory to use for state file)
1617 if test "${prefix}" = "NONE"; then
1618 frr_statedir_prefix="";
1620 frr_statedir_prefix=${prefix}
1622 if test "${localstatedir}" = '${prefix}/var'; then
1623 for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
1624 ${frr_statedir_prefix}/var/adm dnl
1625 ${frr_statedir_prefix}/etc dnl
1631 test -d $FRR_STATE_DIR && break
1633 frr_statedir=$FRR_STATE_DIR
1635 frr_statedir=${localstatedir}
1637 if test $frr_statedir = "/dev/null"; then
1638 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1640 AC_MSG_RESULT(${frr_statedir})
1641 AC_SUBST(frr_statedir)
1643 AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
1644 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
1645 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
1647 dnl autoconf does this, but it does it too late...
1648 test "x$prefix" = xNONE && prefix=$ac_default_prefix
1649 test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
1651 dnl get the full path, recursing through variables...
1652 vtysh_bin="$bindir/vtysh"
1653 for I in 1 2 3 4 5 6 7 8 9 10; do
1654 eval vtysh_bin="\"$vtysh_bin\""
1656 AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
1658 CFG_SYSCONF="$sysconfdir"
1660 CFG_STATE="$frr_statedir"
1661 for I in 1 2 3 4 5 6 7 8 9 10; do
1662 eval CFG_SYSCONF="\"$CFG_SYSCONF\""
1663 eval CFG_SBIN="\"$CFG_SBIN\""
1664 eval CFG_STATE="\"$CFG_STATE\""
1666 AC_SUBST(CFG_SYSCONF)
1670 dnl ---------------------------
1671 dnl Check htonl works correctly
1672 dnl ---------------------------
1673 AC_MSG_CHECKING(for working htonl)
1674 AC_CACHE_VAL(ac_cv_htonl_works,
1675 [AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
1676 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1679 AC_MSG_RESULT($ac_cv_htonl_works)
1681 AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
1682 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchfrr/Makefile
1683 ospf6d/Makefile ldpd/Makefile isisd/Makefile vtysh/Makefile
1684 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
1694 snapcraft/snapcraft.yaml
1711 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1712 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1714 if test "${enable_bgp_vnc}" != "no"; then
1715 if test "${with_rfp_path}" = "bgpd/rfp-example" ; then
1716 AC_CONFIG_FILES([bgpd/rfp-example/rfptest/Makefile bgpd/rfp-example/librfp/Makefile])
1718 AC_CONFIG_FILES([${with_rfp_path}/rfptest/Makefile ${with_rfp_path}/librfp/Makefile])
1722 AC_CONFIG_FILES([solaris/Makefile])
1724 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1726 ## Hack, but working solution to avoid rebuilding of quagga.info.
1727 ## It's already in CVS until texinfo 4.7 is more common.
1731 FreeRangeRouting configuration
1732 ------------------------------
1733 FRR version : ${PACKAGE_VERSION}
1734 host operating system : ${host_os}
1735 source code location : ${srcdir}
1737 compiler flags : ${CFLAGS}
1739 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1740 state file directory : ${frr_statedir}
1741 config file directory : `eval echo \`echo ${sysconfdir}\``
1742 example directory : `eval echo \`echo ${exampledir}\``
1743 user to run as : ${enable_user}
1744 group to run as : ${enable_group}
1745 group for vty sockets : ${enable_vty_group}
1746 config file mask : ${enable_configfile_mask}
1747 log file mask : ${enable_logfile_mask}
1748 zebra protobuf enabled : ${have_protobuf:-no}
1750 The above user and group must have read/write access to the state file
1751 directory and to the config files in the config file directory."