2 ## Configure template file for Quagga.
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(Quagga, 2.0.999, [https://bugzilla.quagga.net])
11 CONFIG_ARGS="$ac_configure_args"
13 AC_CONFIG_SRCDIR(lib/zebra.h)
14 AC_CONFIG_MACRO_DIR([m4])
16 dnl -----------------------------------
17 dnl Get hostname and other information.
18 dnl -----------------------------------
23 # Disable portability warnings -- our automake code (in particular
24 # common.am) uses some constructs specific to gmake.
25 AM_INIT_AUTOMAKE([1.12 -Wno-portability])
26 m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
27 AM_SILENT_RULES([yes])
28 AC_CONFIG_HEADERS(config.h)
30 AC_PATH_PROG(PERL, perl)
32 dnl default is to match previous behavior
33 exampledir=${sysconfdir}
34 AC_ARG_ENABLE([exampledir],
35 AS_HELP_STRING([--enable-exampledir],
36 [specify alternate directory for examples]),
37 exampledir="$enableval",)
38 dnl XXX add --exampledir to autoconf standard directory list somehow
41 dnl default is to match previous behavior
44 AC_ARG_ENABLE([pkgsrcrcdir],
45 AS_HELP_STRING([--enable-pkgsrcrcdir],
46 [specify directory for rc.d scripts]),
47 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
48 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
52 AC_ARG_ENABLE(tcmalloc,
53 AS_HELP_STRING([--enable-tcmalloc], [Turn on tcmalloc]),
54 [case "${enableval}" in
55 yes) tcmalloc_enabled=true
56 LIBS="$LIBS -ltcmalloc_minimal"
58 no) tcmalloc_enabled=false ;;
59 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
60 esac],[tcmalloc_enabled=false])
63 dnl --------------------
64 dnl Check CC and friends
65 dnl --------------------
66 dnl note orig_cflags is also used further down
72 dnl remove autoconf default "-g -O2"
78 dnl autoconf 2.59 appears not to support AC_PROG_SED
80 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
82 dnl try and enable CFLAGS that are useful for Quagga
83 dnl - specifically, options to control warnings
85 AC_USE_SYSTEM_EXTENSIONS()
86 AC_DEFUN([AC_C_FLAG], [{
88 ac_c_flag_save="$CFLAGS"
90 AC_MSG_CHECKING([[whether $CC supports $1]])
92 [AC_LANG_PROGRAM([[]])],
96 CFLAGS="$ac_c_flag_save"
100 CFLAGS="$ac_c_flag_save"
107 dnl ICC won't bail on unknown options without -diag-error 10006
108 dnl need to do this first so we get useful results for the other options
109 AC_C_FLAG([-diag-error 10006])
111 dnl if the user specified any CFLAGS, we don't add "-g -Os/-O2" here
112 if test "z$orig_cflags" = "z"; then
119 dnl always want these CFLAGS
120 AC_C_FLAG([-fno-omit-frame-pointer])
123 AC_C_FLAG([-Wmissing-prototypes])
124 AC_C_FLAG([-Wmissing-declarations])
125 AC_C_FLAG([-Wpointer-arith])
126 AC_C_FLAG([-Wbad-function-cast])
127 AC_C_FLAG([-Wwrite-strings])
128 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
129 AC_C_FLAG([-Wcast-qual])
130 AC_C_FLAG([-Wstrict-prototypes])
131 AC_C_FLAG([-Wmissing-noreturn])
132 AC_C_FLAG([-Wmissing-format-attribute])
133 AC_C_FLAG([-Wunreachable-code])
134 AC_C_FLAG([-Wpacked])
135 AC_C_FLAG([-Wpadded])
137 AC_C_FLAG([-Wno-unused-result])
139 AC_C_FLAG([-Wno-unused-parameter])
140 AC_C_FLAG([-Wno-missing-field-initializers])
142 dnl ICC emits a broken warning for const char *x = a ? "b" : "c";
143 dnl for some reason the string consts get 'promoted' to char *,
144 dnl triggering a const to non-const conversion warning.
145 AC_C_FLAG([-diag-disable 3179])
147 if test x"${enable_werror}" = x"yes" ; then
152 dnl need link on this one, not compile
154 ac_ld_flag_save="$LDFLAGS"
155 LDFLAGS="$LDFLAGS -rdynamic"
156 AC_MSG_CHECKING([[whether linker supports -rdynamic]])
158 [AC_LANG_PROGRAM([[]])],
159 [AC_MSG_RESULT([yes])],
161 LDFLAGS="$ac_ld_flag_save"
172 AC_CHECK_TOOL(AR, ar)
174 dnl -----------------
175 dnl System extensions
176 dnl -----------------
184 dnl ----------------------
185 dnl Packages configuration
186 dnl ----------------------
187 AC_ARG_WITH(pkg-extra-version,
188 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
189 [EXTRAVERSION=$withval],)
190 AC_ARG_WITH(pkg-git-version,
191 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
192 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
194 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for Quagga]))
196 AS_HELP_STRING([--disable-doc], [do not build docs]))
198 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
200 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
202 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
203 AC_ARG_ENABLE(ripngd,
204 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
206 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
207 AC_ARG_ENABLE(ospf6d,
208 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
210 AS_HELP_STRING([--enable-ldpd], [build ldpd]))
211 AC_ARG_ENABLE(watchquagga,
212 AS_HELP_STRING([--disable-watchquagga], [do not build watchquagga]))
214 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
216 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
217 AC_ARG_ENABLE(bgp-announce,
218 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
219 AC_ARG_ENABLE(bgp-vnc,
220 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
221 AC_ARG_WITH(rfp-path,
222 AS_HELP_STRING([--with-rfp-path[=DIR]],[path to replaced stub RFP used with BGP VNC]))
224 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
226 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
227 AC_ARG_ENABLE(tcp-zebra,
228 AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
229 AC_ARG_ENABLE(ospfapi,
230 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
231 AC_ARG_ENABLE(ospfclient,
232 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
233 (this is the default if --disable-ospfapi is set)]))
234 AC_ARG_ENABLE(multipath,
235 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
237 AS_HELP_STRING([--enable-user=USER], [user to run Quagga suite as (default quagga)]))
239 AS_HELP_STRING([--enable-group=GROUP], [group to run Quagga suite as (default quagga)]))
240 AC_ARG_ENABLE(vty_group,
241 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
242 AC_ARG_ENABLE(configfile_mask,
243 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
244 AC_ARG_ENABLE(logfile_mask,
245 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
246 AC_ARG_ENABLE(shell_access,
247 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
249 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
251 AS_HELP_STRING([--enable-irdp], [enable IRDP server support in zebra]))
252 AC_ARG_ENABLE(capabilities,
253 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
254 AC_ARG_ENABLE(rusage,
255 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
256 AC_ARG_ENABLE(gcc_ultra_verbose,
257 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
258 AC_ARG_ENABLE(linux24_tcp_md5,
259 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
260 AC_ARG_ENABLE(backtrace,
261 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
262 AC_ARG_ENABLE(time-check,
263 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
264 AC_ARG_ENABLE(pcreposix,
265 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
267 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
268 AC_ARG_ENABLE(systemd,
269 AS_HELP_STRING([--enable-systemd], [enable Systemd support]))
271 AS_HELP_STRING([--enable-poll], [enable usage of Poll instead of select]))
272 AC_ARG_ENABLE(werror,
273 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
274 AC_ARG_ENABLE(cumulus,
275 AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions]))
276 AC_ARG_ENABLE(rr-semantics,
277 AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics]))
278 AC_ARG_ENABLE([protobuf],
279 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
281 AC_CHECK_HEADERS(json-c/json.h)
282 AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c")
283 if test $ac_cv_lib_json_c_json_object_get = no; then
284 AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
285 if test $ac_cv_lib_json_json_object_get = no; then
286 AC_MSG_ERROR([lib json is needed to compile])
290 AC_ARG_ENABLE([dev_build],
291 AS_HELP_STRING([--enable-dev-build], [build for development]))
293 if test x"${enable_time_check}" != x"no" ; then
294 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
295 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
297 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
301 case "${enable_systemd}" in
304 AC_CHECK_LIB(systemd, sd_notify, LIBS="$LIBS -lsystemd")
305 if test $ac_cv_lib_systemd_sd_notify = no; then
306 AC_MSG_ERROR([enable systemd has been specified but systemd development env not found on your system])
308 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
314 if test "${enable_rr_semantics}" != "no" ; then
315 AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics)
318 if test "${enable_poll}" = "yes" ; then
319 AC_DEFINE(HAVE_POLL,,Compile systemd support in)
325 AC_MSG_CHECKING(whether this OS has MPLS stack)
328 MPLS_METHOD="zebra_mpls_netlink.o"
329 AC_MSG_RESULT(Linux MPLS)
332 MPLS_METHOD="zebra_mpls_openbsd.o"
333 AC_MSG_RESULT(OpenBSD MPLS)
336 MPLS_METHOD="zebra_mpls_null.o"
337 AC_MSG_RESULT(Unsupported kernel)
340 AC_SUBST(MPLS_METHOD)
342 if test "${enable_cumulus}" = "yes" ; then
343 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
346 if test "${enable_shell_access}" = "yes"; then
347 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
350 if test "${enable_fpm}" = "yes"; then
351 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
354 if test "x${enable_dev_build}" = "xyes"; then
355 AC_DEFINE(DEV_BUILD,,Build for development)
357 AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
360 # Logic for protobuf support.
362 if test "$enable_protobuf" = "yes"; then
366 AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
367 if test "x$PROTOC_C" = "x/bin/false"; then
371 PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
372 [found_protobuf_c=yes],
373 [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
375 if test "x$found_protobuf_c" = "xyes"; then
376 LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
377 CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
379 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
380 [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
385 # Fail if the user explicity enabled protobuf support and we couldn't
386 # find the compiler or libraries.
387 if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
388 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
391 if test "x$have_protobuf" = "xyes"; then
392 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
395 AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
398 # End of logic for protobuf support.
401 if test "${enable_tcp_zebra}" = "yes"; then
402 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
405 if test "${enable_linux24_tcp_md5}" = "yes"; then
406 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
409 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
410 if test "${enable_rtadv}" != "no"; then
412 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
417 if test "${enable_irdp}" = "yes"; then
418 AC_DEFINE(HAVE_IRDP,, IRDP )
421 if test x"${enable_user}" = x"no"; then
424 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
427 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
430 if test x"${enable_group}" = x"no"; then
433 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
434 enable_group="quagga"
436 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
439 if test x"${enable_vty_group}" = x"yes" ; then
440 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
441 elif test x"${enable_vty_group}" != x""; then
442 if test x"${enable_vty_group}" != x"no"; then
443 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
446 AC_SUBST([enable_user])
447 AC_SUBST([enable_group])
448 AC_SUBST([enable_vty_group])
450 enable_configfile_mask=${enable_configfile_mask:-0600}
451 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
453 enable_logfile_mask=${enable_logfile_mask:-0600}
454 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
458 case "${enable_multipath}" in
462 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
463 MPATH_NUM="${enable_multipath}"
468 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
472 AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
474 dnl -----------------------------------
475 dnl Add extra version string to package
476 dnl name, string and version fields.
477 dnl -----------------------------------
478 if test "x${EXTRAVERSION}" != "x" ; then
479 VERSION="${VERSION}${EXTRAVERSION}"
480 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
481 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
484 if test "x$with_pkg_git_version" = "xyes"; then
485 if test -d "${srcdir}/.git"; then
486 AC_DEFINE(GIT_VERSION, [1], [include git version info])
487 else with_pkg_git_version="no"
488 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
491 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
493 dnl ------------------------------------
494 dnl Check C keywords and standard types
495 dnl ------------------------------------
506 dnl -------------------------
507 dnl Check other header files.
508 dnl -------------------------
509 AC_CHECK_HEADERS([stropts.h sys/ksym.h \
510 linux/version.h asm/types.h \
513 dnl Utility macro to avoid retyping includes all the time
514 m4_define([QUAGGA_INCLUDES],
517 #define __EXTENSIONS__
522 #include <sys/types.h>
523 /* sys/conf.h depends on param.h on FBSD at least */
524 #include <sys/param.h>
525 /* Required for MAXSIG */
527 #include <sys/socket.h>
529 # define __APPLE_USE_RFC_3542
531 #include <netinet/in.h>
532 #include <sys/time.h>
537 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
538 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
539 dnl an additional round for it.
541 AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
543 m4_define([QUAGGA_INCLUDES],
545 [#if HAVE_NET_IF_VAR_H
546 # include <net/if_var.h>
550 AC_CHECK_HEADERS([netinet/in_var.h \
551 net/if_dl.h net/netopt.h \
552 inet/nd.h netinet/ip_icmp.h \
553 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
554 [], [], QUAGGA_INCLUDES)
556 AC_CHECK_HEADERS([ucontext.h], [], [],
559 #endif /* __USE_GNU */
563 m4_define([UCONTEXT_INCLUDES],
564 [#include <ucontext.h>])dnl
566 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
567 [], [], [UCONTEXT_INCLUDES])
568 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
569 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
570 [], [], [UCONTEXT_INCLUDES])],
571 [], [UCONTEXT_INCLUDES])
572 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
573 [], [], [UCONTEXT_INCLUDES])
575 m4_define([QUAGGA_INCLUDES],
579 #include <netinet/in_systm.h>
580 #if HAVE_NETINET_IN_VAR_H
581 # include <netinet/in_var.h>
584 # include <net/if_dl.h>
586 #if HAVE_NET_NETOPT_H
587 # include <net/netopt.h>
589 #include <net/route.h>
591 # include <inet/nd.h>
593 #include <arpa/inet.h>
594 /* Required for IDRP */
595 #if HAVE_NETINET_IP_ICMP_H
596 # include <netinet/ip_icmp.h>
600 dnl V6 headers are checked below, after we check for v6
602 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
604 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
606 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
607 AC_DEFINE(SUNOS_5, 1, SunOS 5)
608 AC_CHECK_LIB(xnet, main)
613 | [*-sunos5.1[0-9]] \
614 | [*-sunos5.1[0-9].[0-9]] \
615 | [*-solaris2.[8-9]] \
616 | [*-solaris2.1[0-9]] \
617 | [*-solaris2.1[0-9].[0-9]])
619 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
620 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
621 AC_CHECK_LIB(socket, main)
622 AC_CHECK_LIB(nsl, main)
623 AC_CHECK_LIB(umem, main)
624 AC_CHECK_FUNCS([printstack],
625 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
626 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
631 *-sunos5* | *-solaris2*)
632 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
633 AC_CHECK_LIB(socket, main)
634 AC_CHECK_LIB(nsl, main)
640 AC_DEFINE(GNU_LINUX,,GNU Linux)
644 AC_DEFINE(OPEN_BSD,,OpenBSD)
650 dnl ---------------------
651 dnl Integrated VTY option
652 dnl ---------------------
653 case "${enable_vtysh}" in
656 AC_DEFINE(VTYSH,,VTY shell)
657 dnl Vtysh uses libreadline, which looks for termcap functions at
658 dnl configure time. We follow readlines search order.
659 dnl The required procedures are in libtermcap on NetBSD, in
660 dnl [TODO] on Linux, and in [TODO] on Solaris.
661 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
662 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
663 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
664 [AC_CHECK_LIB(ncurses, tputs,
665 LIBREADLINE="$LIBREADLINE -lncurses")]
669 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
671 if test $ac_cv_lib_readline_main = no; then
672 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
674 AC_CHECK_HEADER(readline/history.h)
675 if test $ac_cv_header_readline_history_h = no;then
676 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
678 AC_CHECK_LIB(readline, rl_completion_matches,
679 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
680 if test $ac_cv_lib_readline_rl_completion_matches = no; then
681 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
685 AC_SUBST(LIBREADLINE)
686 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
691 dnl Quagga detects the PAM library it is built against by checking for a
692 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
693 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
694 dnl openpam.h doesn't do that, although depends on the header too. Hence a
695 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
698 if test "$with_libpam" = "yes"; then
699 AC_CHECK_HEADER([security/pam_misc.h],
700 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
701 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
702 pam_conv_func="misc_conv"
705 AC_CHECK_HEADER([security/openpam.h],
706 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
707 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
708 pam_conv_func="openpam_ttyconv"
710 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
711 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
712 AC_MSG_WARN([*** pam support will not be built ***])
717 if test "$with_libpam" = "yes"; then
718 dnl took this test from proftpds configure.in and suited to our needs
719 dnl -------------------------------------------------------------------------
721 dnl This next check looks funky due to a linker problem with some versions
722 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
723 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
724 dnl with RedHat 6.2 and Debian 2.2 or better.
725 AC_CHECK_LIB(pam, pam_start,
726 [AC_CHECK_LIB(pam, $pam_conv_func,
727 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
729 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
730 LIBPAM="-lpam -lpam_misc"]
734 [AC_CHECK_LIB(pam, pam_end,
735 [AC_CHECK_LIB(pam, $pam_conv_func,
736 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
737 LIBPAM="-lpam -ldl"],
738 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
739 LIBPAM="-lpam -ldl -lpam_misc"]
741 ],AC_MSG_WARN([*** pam support will not be built ***]),
748 dnl -------------------------------
749 dnl Endian-ness check
750 dnl -------------------------------
753 dnl -------------------------------
754 dnl check the size in byte of the C
755 dnl -------------------------------
756 dnl AC_CHECK_SIZEOF(char)
757 dnl AC_CHECK_SIZEOF(int)
758 dnl AC_CHECK_SIZEOF(short)
759 dnl AC_CHECK_SIZEOF(long)
761 dnl ----------------------------
762 dnl check existance of functions
763 dnl ----------------------------
769 dnl -------------------------------
770 dnl bgpd needs pow() and hence libm
771 dnl -------------------------------
773 AC_CHECK_HEADER([math.h],
774 [AC_CHECK_LIB([m], [pow],
777 AC_DEFINE(HAVE_LIBM,, Have libm)
778 AC_CHECK_FUNCS(pow,[],[LIBM=""])
781 if test x"$LIBM" = x ; then
782 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
795 AC_CHECK_HEADER([asm-generic/unistd.h],
796 [AC_CHECK_DECL(__NR_setns,
797 AC_DEFINE(HAVE_NETNS,, Have netns),,
798 QUAGGA_INCLUDES [#include <asm-generic/unistd.h>
800 AC_CHECK_FUNCS(setns)]
803 dnl ------------------------------------
804 dnl Determine routing get and set method
805 dnl ------------------------------------
806 AC_MSG_CHECKING(zebra between kernel interface method)
807 if test x"$opsys" = x"gnu-linux"; then
808 AC_MSG_RESULT(netlink)
809 RT_METHOD=rt_netlink.o
810 KERNEL_METHOD=kernel_netlink.o
811 AC_DEFINE(HAVE_NETLINK,,netlink)
813 AC_CHECK_DECLS([IFLA_INFO_SLAVE_KIND], [], [], [#include <linux/if_link.h>])
815 AC_MSG_RESULT(Route socket)
816 KERNEL_METHOD="kernel_socket.o"
817 RT_METHOD="rt_socket.o"
820 AC_SUBST(KERNEL_METHOD)
821 AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
823 dnl --------------------------
824 dnl Determine IS-IS I/O method
825 dnl --------------------------
826 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
827 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
828 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
829 AC_CHECK_HEADER(net/bpf.h)
830 AC_CHECK_HEADER(sys/dlpi.h)
831 AC_MSG_CHECKING(zebra IS-IS I/O method)
832 if test x"$opsys" = x"gnu-linux"; then
833 AC_MSG_RESULT(pfpacket)
834 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
835 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
837 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
839 if test $ac_cv_header_net_bpf_h = no; then
840 if test $ac_cv_header_sys_dlpi_h = no; then
842 AC_MSG_WARN([*** IS-IS support will not be built ***])
847 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
850 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
853 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
855 dnl ------------------------------------
856 dnl check for broken CMSG_FIRSTHDR macro
857 dnl ------------------------------------
858 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
859 AC_RUN_IFELSE([AC_LANG_SOURCE([[
862 #define __EXTENSIONS__
865 #include <sys/types.h>
866 #include <sys/socket.h>
873 msg.msg_control = buf;
874 msg.msg_controllen = 0;
876 if (CMSG_FIRSTHDR(&msg) != NULL)
879 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
880 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
882 dnl ------------------------------
883 dnl check kernel route read method
884 dnl ------------------------------
885 AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
886 [if test "x$netlink" = xyes; then
887 quagga_cv_rtread_method="netlink"
889 for quagga_cv_rtread_method in /dev/ip /dev/null;
891 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
893 case $quagga_cv_rtread_method in
896 *-freebsd*) quagga_cv_rtread_method="sysctl";;
897 *) quagga_cv_rtread_method="getmsg";;
900 quagga_cv_rtread_method="sysctl";;
903 RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
904 AC_SUBST(RTREAD_METHOD)
906 dnl -----------------------------
907 dnl check interface lookup method
908 dnl -----------------------------
910 AC_MSG_CHECKING(interface looking up method)
911 if test "$netlink" = yes; then
912 AC_MSG_RESULT(netlink)
913 IF_METHOD=if_netlink.o
914 elif test "$opsys" = "sol2-6";then
915 AC_MSG_RESULT(Solaris GIF)
917 elif test "$opsys" = "sol8";then
918 AC_MSG_RESULT(Solaris GLIF)
919 IF_METHOD=if_ioctl_solaris.o
920 IOCTL_METHOD=ioctl_solaris.o
921 elif test "$opsys" = "openbsd";then
922 AC_MSG_RESULT(openbsd)
924 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
925 AC_MSG_RESULT(sysctl)
926 IF_METHOD=if_sysctl.o
927 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
933 AC_SUBST(IOCTL_METHOD)
935 dnl ---------------------------------------------------------------
936 dnl figure out how to specify an interface in multicast sockets API
937 dnl ---------------------------------------------------------------
938 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
940 AC_CHECK_HEADERS([linux/mroute.h], [], [],[
941 #include <sys/socket.h>
942 #include <netinet/in.h>
943 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
944 #include <linux/types.h>
947 m4_define([QUAGGA_INCLUDES],
949 [#if HAVE_LINUX_MROUTE_H
950 # include <linux/mroute.h>
954 AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
955 #include <sys/socket.h>
956 #include <sys/types.h>
957 #include <netinet/in.h>
958 #include <net/route.h>
961 m4_define([QUAGGA_INCLUDES],
963 [#if HAVE_NETINET_IP_MROUTE_H
964 # include <netinet/ip_mroute.h>
968 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
969 AC_TRY_COMPILE([#include <sys/param.h>],
970 [#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)
973 #error No support for BSD struct ip_mreq hack detected
974 #endif],[AC_MSG_RESULT(yes)
975 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
978 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
980 #include <sys/types.h>
981 #include <netinet/in.h>
982 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
983 ], [AC_MSG_RESULT(yes)
984 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
987 dnl ---------------------------------------------------------------
988 dnl figure out how to check link-state
989 dnl ---------------------------------------------------------------
990 AC_CHECK_HEADER( [net/if_media.h],
991 [m4_define([LINK_DETECT_INCLUDES],
993 [#include <net/if_media.h>
995 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
996 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
997 [], LINK_DETECT_INCLUDES)],
1001 dnl ---------------------------------------------------------------
1002 dnl Additional, newer way to check link-state using ifi_link_state.
1003 dnl Not available in all BSD's when ifmediareq available
1004 dnl ---------------------------------------------------------------
1005 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1006 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1007 [], QUAGGA_INCLUDES)
1009 dnl ------------------------
1010 dnl TCP_MD5SIG socket option
1011 dnl ------------------------
1013 AC_CHECK_HEADER([netinet/tcp.h],
1014 [m4_define([MD5_INCLUDES],
1016 [#include <netinet/tcp.h>
1018 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1021 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1022 AC_CHECK_HEADER([linux/tcp.h],
1023 [m4_define([MD5_INCLUDES],
1025 [#include <linux/tcp.h>
1027 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1030 dnl -----------------------------
1031 dnl check ipforward detect method
1032 dnl -----------------------------
1033 AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
1034 [if test x$cross_compiling = xyes; then
1035 if test x"$opsys" = x"gnu-linux"; then
1036 quagga_cv_ipforward_method=/proc/net/snmp
1038 quagga_cv_ipforward_method=/dev/ip
1041 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1043 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1046 case $quagga_cv_ipforward_method in
1047 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
1050 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1051 *) quagga_cv_ipforward_method="solaris";;
1053 *) quagga_cv_ipforward_method="sysctl";;
1055 IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
1058 dnl ----------------------------------------------------------------------------
1059 dnl figure out if domainname is available in the utsname struct (GNU extension).
1060 dnl ----------------------------------------------------------------------------
1061 AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1066 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1070 if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1071 AC_DEFINE(KAME,1,KAME IPv6)
1073 dnl ------------------------------------
1074 dnl Solaris 9, 10 and potentially higher
1075 dnl ------------------------------------
1076 elif test x"$opsys" = x"sol8"; then
1077 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1078 AC_MSG_RESULT(Solaris IPv6)
1082 elif test x"$opsys" = x"gnu-linux"; then
1083 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1084 dnl Linux has a compilation problem with mixing
1085 dnl netinet/in.h and linux/in6.h they are not
1086 dnl compatible. There has been discussion on
1087 dnl how to fix it but no real progress on implementation
1088 dnl when they fix it, remove this
1089 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
1090 AC_MSG_RESULT(Linux IPv6)
1092 AC_MSG_ERROR([Failed to detect IPv6 stack])
1095 dnl this is unconditial, for compatibility
1096 AC_DEFINE(HAVE_IPV6,1,IPv6)
1098 dnl ------------------
1099 dnl IPv6 header checks
1100 dnl ------------------
1101 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
1102 netinet6/in6_var.h netinet6/nd6.h], [], [],
1105 m4_define([QUAGGA_INCLUDES],dnl
1107 [#if HAVE_NETINET6_IN6_H
1108 #include <netinet6/in6.h>
1110 #if HAVE_NETINET_IN6_VAR_H
1111 #include <netinet/in6_var.h>
1113 #include <netinet/icmp6.h>
1114 #if HAVE_NETINET6_IN6_VAR_H
1115 # include <netinet6/in6_var.h>
1117 #if HAVE_NETINET6_ND6_H
1118 # include <netinet6/nd6.h>
1122 dnl disable doc check
1123 if test "${enable_doc}" = "no";then
1129 dnl --------------------
1130 dnl Daemon disable check
1131 dnl --------------------
1132 if test "${enable_zebra}" = "no";then
1137 AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
1139 if test "${enable_bgpd}" = "no";then
1144 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1146 if test "${enable_ripd}" = "no";then
1151 AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
1153 if test "${enable_ospfd}" = "no";then
1158 AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
1160 if test "${enable_ldpd}" = "no";then
1164 AC_DEFINE(HAVE_LDPD, 1, ldpd)
1166 AM_CONDITIONAL(LDPD, test "x$LDPD" = "xldpd")
1168 if test "${enable_watchquagga}" = "no";then
1171 WATCHQUAGGA="watchquagga"
1173 AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
1176 if test "${enable_ospfapi}" != "no";then
1177 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1179 if test "${enable_ospfclient}" != "no";then
1180 OSPFCLIENT="ospfclient"
1184 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1186 case "${enable_ripngd}" in
1188 * ) RIPNGD="ripngd";;
1190 AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
1192 case "${enable_ospf6d}" in
1194 * ) OSPF6D="ospf6d";;
1196 AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
1198 case "${enable_isisd}" in
1202 AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
1204 case "${enable_pimd}" in
1208 AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
1210 if test "${enable_bgp_announce}" = "no";then
1211 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1213 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1216 if test "${with_rfp_path}" = "yes" || test x"${with_rfp_path}" = x""; then
1217 with_rfp_path="bgpd/rfp-example"
1219 if test "${with_rfp_path}" != "no"; then
1220 VNC_RFP_PATH="${with_rfp_path}"
1221 AC_SUBST(VNC_RFP_PATH)
1224 if test "${enable_bgp_vnc}" != "no";then
1225 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
1226 RFPTEST="${with_rfp_path}/rfptest"
1227 LIBRFP="${with_rfp_path}/librfp"
1228 RFPINC="${with_rfp_path}/librfp"
1232 RFPINC="bgpd/rfp-example/librfp"
1235 AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
1248 AC_SUBST(WATCHQUAGGA)
1254 AC_SUBST(OSPFCLIENT)
1256 AC_CHECK_LIB(crypt, crypt)
1257 AC_CHECK_LIB(resolv, res_init)
1259 dnl ---------------------------
1260 dnl check system has PCRE regexp
1261 dnl ---------------------------
1262 if test "x$enable_pcreposix" = "xyes"; then
1263 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1264 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1266 AC_SUBST(HAVE_LIBPCREPOSIX)
1268 dnl ------------------
1269 dnl check Net-SNMP library
1270 dnl ------------------
1271 if test "${enable_snmp}" != ""; then
1272 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1273 if test x"$NETSNMP_CONFIG" = x"no"; then
1274 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1276 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1277 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1278 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1279 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1286 ])],[AC_MSG_RESULT(yes)],[
1288 AC_MSG_ERROR([--enable-snmp given but not usable])])
1289 AC_DEFINE(HAVE_SNMP,,SNMP)
1290 case "${enable_snmp}" in
1295 SNMP_METHOD="${enable_snmp}"
1298 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1301 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1302 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1303 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1306 dnl ---------------------------
1307 dnl sockaddr and netinet checks
1308 dnl ---------------------------
1311 struct vifctl, struct mfcctl, struct sioc_sg_req,
1312 vifi_t, struct sioc_vif_req, struct igmpmsg,
1313 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1314 struct nd_opt_adv_interval, struct rt_addrinfo,
1315 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1316 [], [], QUAGGA_INCLUDES)
1318 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1319 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1320 struct sockaddr_dl.sdl_len,
1321 struct if6_aliasreq.ifra_lifetime,
1322 struct nd_opt_adv_interval.nd_opt_ai_type],
1323 [], [], QUAGGA_INCLUDES)
1325 dnl ---------------------------
1326 dnl IRDP/pktinfo/icmphdr checks
1327 dnl ---------------------------
1328 AC_CHECK_TYPES([struct in_pktinfo],
1329 [AC_CHECK_TYPES([struct icmphdr],
1330 [if test "${enable_irdp}" != "no"; then
1331 AC_DEFINE(HAVE_IRDP,, IRDP)
1333 [if test "${enable_irdp}" = "yes"; then
1334 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1335 fi], [QUAGGA_INCLUDES])],
1336 [if test "${enable_irdp}" = "yes"; then
1337 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1338 fi], [QUAGGA_INCLUDES])
1340 dnl -----------------------
1341 dnl checking for IP_PKTINFO
1342 dnl -----------------------
1343 AC_MSG_CHECKING(for IP_PKTINFO)
1344 AC_TRY_COMPILE([#include <netdb.h>], [
1345 int opt = IP_PKTINFO;
1348 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1353 dnl ---------------------------
1354 dnl checking for IP_RECVDSTADDR
1355 dnl ---------------------------
1356 AC_MSG_CHECKING(for IP_RECVDSTADDR)
1357 AC_TRY_COMPILE([#include <netinet/in.h>], [
1358 int opt = IP_RECVDSTADDR;
1361 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1366 dnl ----------------------
1367 dnl checking for IP_RECVIF
1368 dnl ----------------------
1369 AC_MSG_CHECKING(for IP_RECVIF)
1370 AC_TRY_COMPILE([#include <netinet/in.h>], [
1371 int opt = IP_RECVIF;
1374 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1379 dnl ----------------------
1380 dnl checking for SO_BINDANY
1381 dnl ----------------------
1382 AC_MSG_CHECKING(for SO_BINDANY)
1383 AC_TRY_COMPILE([#include <sys/socket.h>], [
1384 int opt = SO_BINDANY;
1387 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1392 dnl ----------------------
1393 dnl checking for IP_FREEBIND
1394 dnl ----------------------
1395 AC_MSG_CHECKING(for IP_FREEBIND)
1396 AC_TRY_COMPILE([#include <netinet/in.h>], [
1397 int opt = IP_FREEBIND;
1400 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1405 dnl --------------------------------------
1406 dnl checking for clock_time monotonic struct and call
1407 dnl --------------------------------------
1408 AC_CHECK_DECL(CLOCK_MONOTONIC,
1409 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1410 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1411 ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
1413 dnl --------------------------------------
1414 dnl checking for flex and bison
1415 dnl --------------------------------------
1418 AC_MSG_CHECKING(version of flex)
1419 quagga_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
1420 quagga_ac_flex_version="${quagga_ac_flex_version##* }"
1421 AC_MSG_RESULT([$quagga_ac_flex_version])
1422 AX_COMPARE_VERSION([$quagga_ac_flex_version], [lt], [2.5.20], [
1423 LEX="$SHELL $missing_dir/missing flex"
1424 if test -f "${srcdir}/lib/command_lex.c" -a -f "${srcdir}/lib/command_lex.h"; then
1425 AC_MSG_WARN([using pregenerated flex output files])
1427 AC_MSG_ERROR([flex failure and pregenerated files not included (probably a git build)])
1429 AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
1430 AC_SUBST([LEXLIB], [''])
1434 dnl thanks GNU bison for this b*llshit...
1435 AC_MSG_CHECKING(version of bison)
1436 quagga_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
1437 quagga_ac_bison_version="${quagga_ac_bison_version##* }"
1438 quagga_ac_bison_missing="false"
1439 case "x${quagga_ac_bison_version}" in
1442 BISON_CLOSEBRACE='"'
1443 AC_MSG_RESULT([$quagga_ac_bison_version - 2.7 or older])
1446 AC_MSG_RESULT([$quagga_ac_bison_version])
1447 AC_MSG_WARN([installed bison is too old. Please install GNU bison 2.7.x or newer.])
1448 quagga_ac_bison_missing="true"
1451 AC_MSG_RESULT([none])
1452 AC_MSG_WARN([could not determine bison version. Please install GNU bison 2.7.x or newer.])
1453 quagga_ac_bison_missing="true"
1457 BISON_CLOSEBRACE='}'
1458 AC_MSG_RESULT([$quagga_ac_bison_version - 3.0 or newer])
1461 AC_SUBST(BISON_OPENBRACE)
1462 AC_SUBST(BISON_CLOSEBRACE)
1464 if $quagga_ac_bison_missing; then
1465 YACC="$SHELL $missing_dir/missing bison -y"
1466 if test -f "${srcdir}/lib/command_parse.c" -a -f "${srcdir}/lib/command_parse.h"; then
1467 AC_MSG_WARN([using pregenerated bison output files])
1469 AC_MSG_ERROR([bison failure and pregenerated files not included (probably a git build)])
1473 dnl -------------------
1474 dnl capabilities checks
1475 dnl -------------------
1476 if test "${enable_capabilities}" != "no"; then
1477 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1478 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1480 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1481 quagga_ac_keepcaps="yes"],
1484 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1485 AC_CHECK_HEADERS(sys/capability.h)
1487 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1488 AC_CHECK_LIB(cap, cap_init,
1489 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1491 quagga_ac_lcaps="yes"]
1494 AC_CHECK_HEADERS(priv.h,
1495 [AC_MSG_CHECKING(Solaris style privileges are available)
1496 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1498 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1499 quagga_ac_scaps="yes"],
1505 if test x"${quagga_ac_scaps}" = x"yes" \
1506 -o x"${quagga_ac_lcaps}" = x"yes"; then
1507 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1512 dnl ---------------------------
1513 dnl check for glibc 'backtrace'
1514 dnl ---------------------------
1515 if test x"${enable_backtrace}" != x"no" ; then
1517 AC_CHECK_HEADER([execinfo.h], [
1518 AC_SEARCH_LIBS([backtrace], [execinfo], [
1519 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1520 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1525 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1526 dnl user explicitly requested backtrace but we failed to find support
1527 AC_MSG_FAILURE([failed to find backtrace support])
1531 dnl -----------------------------------------
1532 dnl check for malloc mallinfo struct and call
1533 dnl this must try and link using LIBS, in
1534 dnl order to check no alternative allocator
1535 dnl has been specified, which might not provide
1536 dnl mallinfo, e.g. such as Umem on Solaris.
1537 dnl -----------------------------------------
1538 AC_CHECK_HEADER([malloc.h],
1539 [AC_MSG_CHECKING(whether mallinfo is available)
1540 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1541 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1543 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1546 ], [], QUAGGA_INCLUDES)
1551 CONFDATE=`date '+%Y%m%d'`
1557 if test x"$DEJAGNU" = x
1559 DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
1561 RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
1564 AC_SUBST(RUNTESTDEFAULTFLAGS)
1566 dnl ------------------------------
1567 dnl set paths for state directory
1568 dnl ------------------------------
1569 AC_MSG_CHECKING(directory to use for state file)
1570 if test "${prefix}" = "NONE"; then
1571 quagga_statedir_prefix="";
1573 quagga_statedir_prefix=${prefix}
1575 if test "${localstatedir}" = '${prefix}/var'; then
1576 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1577 ${quagga_statedir_prefix}/var/adm dnl
1578 ${quagga_statedir_prefix}/etc dnl
1584 test -d $QUAGGA_STATE_DIR && break
1586 quagga_statedir=$QUAGGA_STATE_DIR
1588 quagga_statedir=${localstatedir}
1590 if test $quagga_statedir = "/dev/null"; then
1591 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1593 AC_MSG_RESULT(${quagga_statedir})
1594 AC_SUBST(quagga_statedir)
1596 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1597 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1598 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1599 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1600 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1601 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1602 AC_DEFINE_UNQUOTED(PATH_LDPD_PID, "$quagga_statedir/ldpd.pid",ldpd PID)
1603 AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$quagga_statedir/ldpd.sock",ldpd control socket)
1604 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1605 AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$quagga_statedir/pimd.pid",pimd PID)
1606 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1607 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1608 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1609 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1610 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1611 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1612 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1613 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1614 AC_DEFINE_UNQUOTED(LDP_VTYSH_PATH, "$quagga_statedir/ldpd.vty",ldpd vty socket)
1615 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1616 AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$quagga_statedir/pimd.vty",pimd vty socket)
1617 AC_DEFINE_UNQUOTED(WATCHQUAGGA_VTYSH_PATH, "$quagga_statedir/watchquagga.vty",watchquagga vty socket)
1618 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1620 dnl autoconf does this, but it does it too late...
1621 test "x$prefix" = xNONE && prefix=$ac_default_prefix
1622 test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
1624 dnl get the full path, recursing through variables...
1625 vtysh_bin="$bindir/vtysh"
1626 for I in 1 2 3 4 5 6 7 8 9 10; do
1627 eval vtysh_bin="\"$vtysh_bin\""
1629 AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
1631 dnl -------------------------------
1632 dnl Quagga sources should always be
1633 dnl current wrt interfaces. Dont
1634 dnl allow deprecated interfaces to
1636 dnl -------------------------------
1637 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1639 dnl ---------------------------
1640 dnl Check htonl works correctly
1641 dnl ---------------------------
1642 AC_MSG_CHECKING(for working htonl)
1643 AC_CACHE_VAL(ac_cv_htonl_works,
1644 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1645 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1648 AC_MSG_RESULT($ac_cv_htonl_works)
1650 AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
1651 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1652 ospf6d/Makefile ldpd/Makefile isisd/Makefile vtysh/Makefile
1653 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
1655 tests/bgpd.tests/Makefile
1656 tests/libzebra.tests/Makefile
1665 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1666 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1668 if test "${enable_bgp_vnc}" != "no"; then
1669 if test "${with_rfp_path}" = "bgpd/rfp-example" ; then
1670 AC_CONFIG_FILES([bgpd/rfp-example/rfptest/Makefile bgpd/rfp-example/librfp/Makefile])
1672 AC_CONFIG_FILES([${with_rfp_path}/rfptest/Makefile ${with_rfp_path}/librfp/Makefile])
1676 AC_CONFIG_FILES([solaris/Makefile])
1678 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1680 ## Hack, but working solution to avoid rebuilding of quagga.info.
1681 ## It's already in CVS until texinfo 4.7 is more common.
1685 Quagga configuration
1686 --------------------
1687 quagga version : ${PACKAGE_VERSION}
1688 host operating system : ${host_os}
1689 source code location : ${srcdir}
1691 compiler flags : ${CFLAGS}
1693 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1694 state file directory : ${quagga_statedir}
1695 config file directory : `eval echo \`echo ${sysconfdir}\``
1696 example directory : `eval echo \`echo ${exampledir}\``
1697 user to run as : ${enable_user}
1698 group to run as : ${enable_group}
1699 group for vty sockets : ${enable_vty_group}
1700 config file mask : ${enable_configfile_mask}
1701 log file mask : ${enable_logfile_mask}
1702 zebra protobuf enabled : ${have_protobuf:-no}
1704 The above user and group must have read/write access to the state file
1705 directory and to the config files in the config file directory."