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, 0.99.23, [https://bugzilla.quagga.net])
11 AC_CONFIG_SRCDIR(lib/zebra.h)
12 AC_CONFIG_MACRO_DIR([m4])
14 dnl -----------------------------------
15 dnl Get hostname and other information.
16 dnl -----------------------------------
22 AC_CONFIG_HEADERS(config.h)
24 AC_PATH_PROG(PERL, perl)
25 AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
26 if test "x$GAWK" = "xnot-in-PATH" ; then
27 AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
28 BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
30 AC_ARG_VAR([GAWK],[GNU AWK])
32 dnl default is to match previous behavior
33 exampledir=${sysconfdir}
34 AC_ARG_ENABLE([exampledir],
35 AC_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 AC_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 LIBS="$LIBS -L/usr/include/json/ -ljson"
58 [ --with-cflags Set CFLAGS for use in compilation.])
59 if test "x$with_cflags" != "x" ; then
60 CFLAGS="$with_cflags" ; cflags_specified=yes ;
61 elif test -n "$CFLAGS" ; then
62 cflags_specified=yes ;
65 AC_ARG_ENABLE(tcmalloc,
66 [ --enable-tcmalloc Turn on tcmalloc],
67 [case "${enableval}" in
68 yes) tcmalloc_enabled=true
69 LIBS="$LIBS -ltcmalloc_minimal"
71 no) tcmalloc_enabled=false ;;
72 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
73 esac],[tcmalloc_enabled=false])
76 dnl --------------------
77 dnl Check CC and friends
78 dnl --------------------
85 dnl autoconf 2.59 appears not to support AC_PROG_SED
87 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
89 dnl pdflatex and latexmk are needed to build HACKING.pdf
90 AC_CHECK_PROG([PDFLATEX],[pdflatex],[pdflatex],[/bin/false])
91 AC_CHECK_PROG([LATEXMK],[latexmk],[latexmk],[/bin/false])
92 if test "x$PDFLATEX" = "x/bin/false" -o "x$LATEXMK" = "x/bin/false"; then
93 AC_MSG_WARN([Will not be able to make PDF versions of TeX documents])
97 AM_CONDITIONAL([HAVE_LATEX], [test "x$HAVE_LATEX" = "xtrue"])
99 dnl ------------------------------------------------------------------
100 dnl Intel compiler check. Although Intel tries really hard to make icc
101 dnl look like gcc, there are some differences. It's very verbose with
102 dnl -Wall and it doesn't support the individual -W options.
103 dnl ------------------------------------------------------------------
104 if test "x${GCC}" = "xyes" ; then
106 AC_MSG_CHECKING([whether we are using the Intel compiler])
107 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
108 [AC_MSG_RESULT([no])],
110 AC_MSG_RESULT([yes])]
113 AC_MSG_CHECKING([whether we are using SunPro compiler])
114 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
115 [AC_MSG_RESULT([no])],
117 AC_MSG_RESULT([yes])]
121 dnl ---------------------------------------------
122 dnl If CLFAGS doesn\'t exist set default value
123 dnl AC_PROG_CC will have set minimal default
124 dnl already, eg "-O2 -g" for gcc, "-g" for others
125 dnl (Wall is gcc specific... have to make sure
126 dnl gcc is being used before setting it)
128 dnl Intel icc 8.0 also sets __GNUC__,
129 dnl but doesn't support all these fancy -W options.
130 dnl Intel compiler warnings we ignore:
131 dnl 279: controlling expression is constant.
132 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
133 dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
135 dnl 981: operands are evaluated in unspecified order.
137 dnl Sun Studio 10 / SunPro 5.7 is also supported,
138 dnl so lets set some sane CFLAGS for it.
139 dnl ---------------------------------------------
141 AC_MSG_CHECKING([whether to set a default CFLAGS])
142 if test "x${cflags_specified}" = "x" ; then
145 CFLAGS="-Os -g -Wall"
146 AC_MSG_RESULT([Intel default])
149 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
150 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
151 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
152 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
153 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
154 # TODO: conditionally addd -Wpacked if handled
155 AC_MSG_RESULT([gcc default])
158 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
159 AC_MSG_RESULT([SunPro default])
162 AC_MSG_RESULT([unknown compiler])
166 AC_MSG_RESULT([CFLAGS supplied by user])
169 if test x"${enable_werror}" = x"yes" ; then
180 AC_CHECK_TOOL(AR, ar)
182 dnl ---------------------------
183 dnl We, perhaps unfortunately,
184 dnl depend on GNU Make specific
186 dnl Give the user a warning if
188 dnl ---------------------------
189 AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
190 [quagga_cv_gnu_make=no
191 if ${MAKE-make} --version 2>/dev/null | \
192 grep '^GNU Make ' >/dev/null ; then
193 quagga_cv_gnu_make=yes;
198 dnl -----------------
199 dnl System extensions
200 dnl -----------------
208 dnl ----------------------
209 dnl Packages configuration
210 dnl ----------------------
211 AC_ARG_WITH(pkg-extra-version,
212 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
213 [EXTRAVERSION=$withval],)
214 AC_ARG_WITH(pkg-git-version,
215 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
216 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
218 [ --enable-vtysh include integrated vty shell for Quagga])
220 [ --disable-ipv6 turn off IPv6 related features and daemons])
222 [ --disable-doc do not build docs])
224 [ --disable-zebra do not build zebra daemon])
226 [ --disable-bgpd do not build bgpd])
228 [ --disable-ripd do not build ripd])
229 AC_ARG_ENABLE(ripngd,
230 [ --disable-ripngd do not build ripngd])
232 [ --disable-ospfd do not build ospfd])
233 AC_ARG_ENABLE(ospf6d,
234 [ --disable-ospf6d do not build ospf6d])
235 AC_ARG_ENABLE(babeld,
236 [ --disable-babeld do not build babeld])
237 AC_ARG_ENABLE(watchquagga,
238 [ --disable-watchquagga do not build watchquagga])
240 [ --enable-isisd build isisd])
241 AC_ARG_ENABLE(solaris,
242 [ --enable-solaris build solaris])
243 AC_ARG_ENABLE(bgp-announce,
244 [ --disable-bgp-announce, turn off BGP route announcement])
245 AC_ARG_ENABLE(netlink,
246 [ --enable-netlink force to use Linux netlink interface])
247 AC_ARG_ENABLE(broken-aliases,
248 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
250 [ --enable-snmp=ARG enable SNMP support (smux or agentx)])
252 [ --with-libpam use libpam for PAM support in vtysh])
253 AC_ARG_ENABLE(tcp-zebra,
254 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
255 AC_ARG_ENABLE(opaque-lsa,
256 AC_HELP_STRING([--disable-opaque-lsa],[do not build OSPF Opaque-LSA with OSPFAPI support (RFC2370)]))
257 AC_ARG_ENABLE(ospfapi,
258 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database])
259 AC_ARG_ENABLE(ospfclient,
260 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
261 (this is the default if --disable-ospfapi is set)])
262 AC_ARG_ENABLE(ospf-te,
263 AC_HELP_STRING([--disable-ospf-te],[disable Traffic Engineering Extension to OSPF]))
264 AC_ARG_ENABLE(multipath,
265 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
267 AC_HELP_STRING([--enable-user=user], [user to run Quagga suite as (default quagga)]))
269 AC_HELP_STRING([--enable-group=group], [group to run Quagga suite as (default quagga)]))
270 AC_ARG_ENABLE(vty_group,
271 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
272 AC_ARG_ENABLE(configfile_mask,
273 [ --enable-configfile-mask=ARG set mask for config files])
274 AC_ARG_ENABLE(logfile_mask,
275 [ --enable-logfile-mask=ARG set mask for log files])
276 AC_ARG_ENABLE(shell_access
277 [ --enable-shell-access Allow users to access shell/telnet/ssh])
280 [ --disable-rtadv disable IPV6 router advertisement feature])
282 [ --enable-irdp enable IRDP server support in zebra])
283 AC_ARG_ENABLE(isis_topology,
284 [ --enable-isis-topology enable IS-IS topology generator])
285 AC_ARG_ENABLE(capabilities,
286 [ --disable-capabilities disable using POSIX capabilities])
287 AC_ARG_ENABLE(rusage,
288 [ --disable-rusage disable using getrusage])
289 AC_ARG_ENABLE(gcc_ultra_verbose,
290 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
291 AC_ARG_ENABLE(linux24_tcp_md5,
292 [ --enable-linux24-tcp-md5 enable support for old, Linux-2.4 RFC2385 patch])
293 AC_ARG_ENABLE(gcc-rdynamic,
294 [ --enable-gcc-rdynamic enable linking with -rdynamic for better backtraces (default if gcc)])
295 AC_ARG_ENABLE(backtrace,
296 [ --disable-backtrace, disable crash backtraces (default autodetect)])
297 AC_ARG_ENABLE(time-check,
298 [ --disable-time-check disable slow thread warning messages])
299 AC_ARG_ENABLE(pcreposix,
300 [ --enable-pcreposix enable using PCRE Posix libs for regex functions])
302 [ --enable-fpm enable Forwarding Plane Manager support])
303 AC_ARG_ENABLE(werror,
304 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
306 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
307 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
308 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
309 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
310 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
313 if test x"${enable_gcc_rdynamic}" != x"no" ; then
314 if test x"${enable_gcc_rdynamic}" = x"yes" -o x"$COMPILER" = x"GCC"; then
315 LDFLAGS="${LDFLAGS} -rdynamic"
319 if test x"${enable_time_check}" != x"no" ; then
320 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
321 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
323 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
327 if test "${enable_shell_access}" = "yes"; then
328 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
331 if test "${enable_fpm}" = "yes"; then
332 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
335 if test "${enable_broken_aliases}" = "yes"; then
336 if test "${enable_netlink}" = "yes"
338 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
340 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
344 if test "${enable_tcp_zebra}" = "yes"; then
345 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
348 if test "${enable_opaque_lsa}" != "no"; then
349 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
352 if test "${enable_ospf_te}" != "no"; then
353 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
354 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
357 if test "${enable_linux24_tcp_md5}" = "yes"; then
358 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
361 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
362 if test "${enable_rtadv}" != "no"; then
364 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
369 if test "${enable_irdp}" = "yes"; then
370 AC_DEFINE(HAVE_IRDP,, IRDP )
373 if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
374 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
375 ISIS_TOPOLOGY_INCLUDES="-I\$(srcdir)/topology"
376 ISIS_TOPOLOGY_DIR="topology"
377 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
380 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
381 AC_SUBST(ISIS_TOPOLOGY_DIR)
382 AC_SUBST(ISIS_TOPOLOGY_LIB)
384 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
386 elif test "${enable_user}" = "no"; then
390 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
391 enable_group="quagga"
392 elif test "${enable_group}" = "no"; then
396 if test x"${enable_vty_group}" = x"yes" ; then
397 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
398 elif test x"${enable_vty_group}" != x""; then
399 if test x"${enable_vty_group}" != x"no"; then
400 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
403 AC_SUBST([enable_user])
404 AC_SUBST([enable_group])
405 AC_SUBST([enable_vty_group])
406 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
407 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
409 enable_configfile_mask=${enable_configfile_mask:-0600}
410 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
412 enable_logfile_mask=${enable_logfile_mask:-0600}
413 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
417 case "${enable_multipath}" in
419 MULTIPATH_NUM="${enable_multipath}"
424 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
428 AC_SUBST(MULTIPATH_NUM)
430 dnl -----------------------------------
431 dnl Add extra version string to package
432 dnl name, string and version fields.
433 dnl -----------------------------------
434 if test "x${EXTRAVERSION}" != "x" ; then
435 VERSION="${VERSION}${EXTRAVERSION}"
436 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
437 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
440 if test "x$with_pkg_git_version" = "xyes"; then
441 if test -d "${srcdir}/.git"; then
442 AC_DEFINE(GIT_VERSION, [1], [include git version info])
443 else with_pkg_git_version="no"
444 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
447 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
449 dnl ------------------------------------
450 dnl Check C keywords and standard types
451 dnl ------------------------------------
466 dnl -------------------------
467 dnl Check other header files.
468 dnl -------------------------
469 AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
470 sys/types.h linux/version.h netdb.h asm/types.h \
471 sys/cdefs.h sys/param.h limits.h signal.h \
472 sys/socket.h netinet/in.h time.h sys/time.h])
474 dnl Utility macro to avoid retyping includes all the time
475 m4_define([QUAGGA_INCLUDES],
478 #define __EXTENSIONS__
490 # include <sys/types.h>
492 /* sys/conf.h depends on param.h on FBSD at least */
494 # include <sys/param.h>
496 /* Required for MAXSIG */
500 #if HAVE_SYS_SOCKET_H
501 # include <sys/socket.h>
504 # define __APPLE_USE_RFC_3542
506 #if HAVE_NETINET_IN_H
507 # include <netinet/in.h>
509 #ifdef TIME_WITH_SYS_TIME
510 # include <sys/time.h>
513 # ifdef HAVE_SYS_TIME_H
514 # include <sys/time.h>
518 #endif /* TIME_WITH_SYS_TIME */
521 dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
522 dnl round below execution begins, otherwise it doesn't properly detect
523 dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
524 dnl on FreeBSD (BZ#408).
526 AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
528 m4_define([QUAGGA_INCLUDES],
535 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
536 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
537 dnl an additional round for it.
539 AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
541 m4_define([QUAGGA_INCLUDES],
543 [#if HAVE_NET_IF_VAR_H
544 # include <net/if_var.h>
548 AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
549 net/if_dl.h net/netopt.h net/route.h \
550 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
551 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
552 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
553 [], [], QUAGGA_INCLUDES)
555 AC_CHECK_HEADERS([ucontext.h], [], [],
558 #endif /* __USE_GNU */
562 m4_define([QUAGGA_INCLUDES],
567 #if HAVE_NETINET_IN_SYSTM_H
568 # include <netinet/in_systm.h>
570 #if HAVE_NETINET_IN_VAR_H
571 # include <netinet/in_var.h>
574 # include <net/if_dl.h>
576 #if HAVE_NET_NETOPT_H
577 # include <net/netopt.h>
580 # include <net/route.h>
583 # include <inet/nd.h>
586 # include <arpa/inet.h>
588 /* Required for IDRP */
589 #if HAVE_NETINET_IP_ICMP_H
590 # include <netinet/ip_icmp.h>
594 dnl V6 headers are checked below, after we check for v6
596 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
598 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
600 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
601 AC_DEFINE(SUNOS_5, 1, SunOS 5)
602 AC_CHECK_LIB(xnet, main)
606 | [*-sunos5.1[0-9]] \
607 | [*-sunos5.1[0-9].[0-9]] \
608 | [*-solaris2.[8-9]] \
609 | [*-solaris2.1[0-9]] \
610 | [*-solaris2.1[0-9].[0-9]])
612 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
613 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
614 AC_CHECK_LIB(socket, main)
615 AC_CHECK_LIB(nsl, main)
616 AC_CHECK_LIB(umem, main)
617 AC_CHECK_FUNCS([printstack],
618 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
619 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
623 *-sunos5* | *-solaris2*)
624 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
625 AC_CHECK_LIB(socket, main)
626 AC_CHECK_LIB(nsl, main)
631 AC_DEFINE(GNU_LINUX,,GNU Linux)
634 AC_CHECK_LIB(nsl, gethostbyname)
635 AC_CHECK_LIB(socket, socket)
639 AC_DEFINE(OPEN_BSD,,OpenBSD)
643 OTHER_METHOD="mtu_kvm.o"
644 AC_CHECK_LIB(kvm, main)
648 AC_DEFINE(IRIX_65,,IRIX 6.5)
654 dnl ---------------------
655 dnl Integrated VTY option
656 dnl ---------------------
657 case "${enable_vtysh}" in
658 "yes") VTYSH="vtysh";
659 AC_DEFINE(VTYSH,,VTY shell)
660 dnl Vtysh uses libreadline, which looks for termcap functions at
661 dnl configure time. We follow readlines search order.
662 dnl The required procedures are in libtermcap on NetBSD, in
663 dnl [TODO] on Linux, and in [TODO] on Solaris.
664 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
665 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
666 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
667 [AC_CHECK_LIB(ncurses, tputs,
668 LIBREADLINE="$LIBREADLINE -lncurses")]
672 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
674 if test $ac_cv_lib_readline_main = no; then
675 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
677 AC_CHECK_HEADER(readline/history.h)
678 if test $ac_cv_header_readline_history_h = no;then
679 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
681 AC_CHECK_LIB(readline, rl_completion_matches,
682 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
683 if test $ac_cv_lib_readline_rl_completion_matches = no; then
684 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
690 AC_SUBST(LIBREADLINE)
691 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
696 dnl Quagga detects the PAM library it is built against by checking for a
697 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
698 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
699 dnl openpam.h doesn't do that, although depends on the header too. Hence a
700 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
703 if test "$with_libpam" = "yes"; then
704 AC_CHECK_HEADER([security/pam_misc.h],
705 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
706 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
707 pam_conv_func="misc_conv"
710 AC_CHECK_HEADER([security/openpam.h],
711 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
712 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
713 pam_conv_func="openpam_ttyconv"
715 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
716 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
717 AC_MSG_WARN([*** pam support will not be built ***])
722 if test "$with_libpam" = "yes"; then
723 dnl took this test from proftpds configure.in and suited to our needs
724 dnl -------------------------------------------------------------------------
726 dnl This next check looks funky due to a linker problem with some versions
727 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
728 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
729 dnl with RedHat 6.2 and Debian 2.2 or better.
730 AC_CHECK_LIB(pam, pam_start,
731 [AC_CHECK_LIB(pam, $pam_conv_func,
732 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
734 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
735 LIBPAM="-lpam -lpam_misc"]
739 [AC_CHECK_LIB(pam, pam_end,
740 [AC_CHECK_LIB(pam, $pam_conv_func,
741 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
742 LIBPAM="-lpam -ldl"],
743 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
744 LIBPAM="-lpam -ldl -lpam_misc"]
746 ],AC_MSG_WARN([*** pam support will not be built ***]),
753 dnl -------------------------------
754 dnl Endian-ness check
755 dnl -------------------------------
758 dnl -------------------------------
759 dnl check the size in byte of the C
760 dnl -------------------------------
761 dnl AC_CHECK_SIZEOF(char)
762 dnl AC_CHECK_SIZEOF(int)
763 dnl AC_CHECK_SIZEOF(short)
764 dnl AC_CHECK_SIZEOF(long)
766 dnl ----------------------------
767 dnl check existance of functions
768 dnl ----------------------------
776 AC_FUNC_SELECT_ARGTYPES
778 dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
779 dnl can lead to strange side effects. So we just check for strnlen
780 dnl directly, see below.
781 dnl AC_FUNC_STRNLENdnl
784 dnl -------------------------------
785 dnl bgpd needs pow() and hence libm
786 dnl -------------------------------
788 AC_CHECK_HEADER([math.h],
789 [AC_CHECK_LIB([m], [pow],
792 AC_DEFINE(HAVE_LIBM,, Have libm)
793 AC_CHECK_FUNCS(pow,[],[LIBM=""])
796 if test x"$LIBM" = x ; then
797 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
805 AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
806 inet_ntoa inet_aton strnlen \
807 memchr memmove memset select socket \
808 strcasecmp strchr strcspn strdup strerror \
809 strncasecmp strndup strrchr strspn strstr \
810 strtol strtoul strlcat strlcpy \
811 daemon snprintf vsnprintf \
812 if_nametoindex if_indextoname getifaddrs \
815 AC_CHECK_FUNCS(setproctitle, ,
816 [AC_CHECK_LIB(util, setproctitle,
818 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
824 dnl ------------------------------------
825 dnl Determine routing get and set method
826 dnl ------------------------------------
827 AC_MSG_CHECKING(zebra between kernel interface method)
828 if test x"$opsys" = x"gnu-linux"; then
829 if test "${enable_netlink}" = "yes";then
830 AC_MSG_RESULT(netlink)
831 RT_METHOD=rt_netlink.o
832 AC_DEFINE(HAVE_NETLINK,,netlink)
834 elif test "${enable_netlink}" = "no"; then
839 AC_MSG_RESULT(netlink)
840 RT_METHOD=rt_netlink.o
841 AC_DEFINE(HAVE_NETLINK,,netlink)
844 elif test x"$opsys" = x"sol2-6";then
845 AC_MSG_RESULT(Route socket)
846 KERNEL_METHOD="kernel_socket.o"
847 RT_METHOD="rt_socket.o"
848 elif test x"$opsys" = x"sol8";then
849 AC_MSG_RESULT(Route socket)
850 KERNEL_METHOD="kernel_socket.o"
851 RT_METHOD="rt_socket.o"
852 elif test "$opsys" = "irix" ; then
853 AC_MSG_RESULT(Route socket)
854 KERNEL_METHOD="kernel_socket.o"
855 RT_METHOD="rt_socket.o"
857 AC_TRY_RUN([#include <errno.h>
858 #include <sys/types.h>
859 #include <sys/socket.h>
865 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
866 if (ac_sock < 0 && errno == EINVAL)
870 [KERNEL_METHOD=kernel_socket.o
871 RT_METHOD=rt_socket.o
872 AC_MSG_RESULT(socket)],
873 [RT_METHOD=rt_ioctl.o
874 AC_MSG_RESULT(ioctl)],
875 [KERNEL_METHOD=kernel_socket.o
876 RT_METHOD=rt_socket.o
877 AC_MSG_RESULT(socket)])
880 AC_SUBST(KERNEL_METHOD)
881 AC_SUBST(OTHER_METHOD)
882 AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
884 dnl --------------------------
885 dnl Determine IS-IS I/O method
886 dnl --------------------------
887 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
888 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
889 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
890 AC_CHECK_HEADER(net/bpf.h)
891 AC_CHECK_HEADER(sys/dlpi.h)
892 AC_MSG_CHECKING(zebra IS-IS I/O method)
893 if test x"$opsys" = x"gnu-linux"; then
894 AC_MSG_RESULT(pfpacket)
895 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
896 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
898 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
900 if test $ac_cv_header_net_bpf_h = no; then
901 if test $ac_cv_header_sys_dlpi_h = no; then
903 AC_MSG_WARN([*** IS-IS support will not be built ***])
908 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
911 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
914 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
916 dnl ------------------------------------
917 dnl check for broken CMSG_FIRSTHDR macro
918 dnl ------------------------------------
919 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
920 AC_RUN_IFELSE([AC_LANG_SOURCE([[
923 #define __EXTENSIONS__
928 #ifdef HAVE_SYS_TYPES_H
929 #include <sys/types.h>
931 #ifdef HAVE_SYS_SOCKET_H
932 #include <sys/socket.h>
940 msg.msg_control = buf;
941 msg.msg_controllen = 0;
943 if (CMSG_FIRSTHDR(&msg) != NULL)
946 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
947 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
949 dnl ------------------------------
950 dnl check kernel route read method
951 dnl ------------------------------
952 AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
953 [if test "x$netlink" = xyes; then
954 quagga_cv_rtread_method="netlink"
956 for quagga_cv_rtread_method in /proc/net/route /dev/ip /dev/null;
958 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
960 case $quagga_cv_rtread_method in
961 "/proc/net/route") quagga_cv_rtread_method="proc";;
964 *-freebsd*) quagga_cv_rtread_method="sysctl";;
965 *) quagga_cv_rtread_method="getmsg";;
968 quagga_cv_rtread_method="sysctl";;
971 RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
972 AC_SUBST(RTREAD_METHOD)
974 dnl -----------------------------
975 dnl check interface lookup method
976 dnl -----------------------------
978 AC_MSG_CHECKING(interface looking up method)
979 if test "$netlink" = yes; then
980 AC_MSG_RESULT(netlink)
981 IF_METHOD=if_netlink.o
982 elif test "$opsys" = "sol2-6";then
983 AC_MSG_RESULT(Solaris GIF)
985 elif test "$opsys" = "sol8";then
986 AC_MSG_RESULT(Solaris GLIF)
987 IF_METHOD=if_ioctl_solaris.o
988 IOCTL_METHOD=ioctl_solaris.o
989 elif test "$opsys" = "irix" ; then
992 elif test "$opsys" = "openbsd";then
993 AC_MSG_RESULT(openbsd)
995 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
996 AC_MSG_RESULT(sysctl)
997 IF_METHOD=if_sysctl.o
998 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
1000 AC_MSG_RESULT(ioctl)
1001 IF_METHOD=if_ioctl.o
1004 AC_SUBST(IOCTL_METHOD)
1006 dnl ---------------------------------------------------------------
1007 dnl figure out how to specify an interface in multicast sockets API
1008 dnl ---------------------------------------------------------------
1009 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
1011 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
1012 AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
1013 #include <sys/param.h>
1014 #endif],[#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__)
1017 #error No support for BSD struct ip_mreq hack detected
1018 #endif],[AC_MSG_RESULT(yes)
1019 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1022 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1024 #include <sys/types.h>
1025 #include <netinet/in.h>
1026 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1027 ], [AC_MSG_RESULT(yes)
1028 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1031 dnl ---------------------------------------------------------------
1032 dnl figure out how to check link-state
1033 dnl ---------------------------------------------------------------
1034 AC_CHECK_HEADER([net/if.h],
1035 [AC_CHECK_HEADER( [net/if_media.h],
1036 [m4_define([LINK_DETECT_INCLUDES],
1038 [#include <net/if_media.h>
1040 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1041 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1042 [], LINK_DETECT_INCLUDES)],
1045 [], QUAGGA_INCLUDES )
1047 dnl ---------------------------------------------------------------
1048 dnl Additional, newer way to check link-state using ifi_link_state.
1049 dnl Not available in all BSD's when ifmediareq available
1050 dnl ---------------------------------------------------------------
1051 AC_CHECK_HEADER([net/if.h],
1052 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1053 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1054 [], QUAGGA_INCLUDES),
1057 dnl ------------------------
1058 dnl TCP_MD5SIG socket option
1059 dnl ------------------------
1061 AC_CHECK_HEADER([netinet/tcp.h],
1062 [m4_define([MD5_INCLUDES],
1064 [#include <netinet/tcp.h>
1066 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1069 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1070 AC_CHECK_HEADER([linux/tcp.h],
1071 [m4_define([MD5_INCLUDES],
1073 [#include <linux/tcp.h>
1075 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1078 dnl -----------------------
1079 dnl check proc file system.
1080 dnl -----------------------
1081 if test "$netlink" != yes; then
1082 if test -r /proc/net/dev; then
1083 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
1086 if test -r /proc/net/if_inet6; then
1087 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
1093 dnl -----------------------------
1094 dnl check ipforward detect method
1095 dnl -----------------------------
1096 AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
1097 [if test x$cross_compiling = xyes; then
1098 if test x"$opsys" = x"gnu-linux"; then
1099 quagga_cv_ipforward_method=/proc/net/snmp
1101 quagga_cv_ipforward_method=/dev/ip
1104 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1106 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1109 case $quagga_cv_ipforward_method in
1110 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
1113 *-nec-sysv4*) quagga_cv_ipforward_method="ews";;
1114 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1115 *) quagga_cv_ipforward_method="solaris";;
1117 *) quagga_cv_ipforward_method="sysctl";;
1119 IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
1122 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
1127 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1128 if test "${enable_ipv6}" = "no"; then
1129 AC_MSG_RESULT(disabled)
1134 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1136 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1137 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1141 AC_MSG_RESULT(INRIA IPv6)
1145 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1147 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1148 AC_DEFINE(KAME,1,KAME IPv6)
1151 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1152 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1155 dnl -------------------------
1157 dnl default host check
1158 dnl It is not used by Kheops
1159 dnl -------------------------
1160 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1162 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1163 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1164 AC_DEFINE(KAME,1,KAME IPv6 stack)
1167 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1168 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1170 AC_MSG_RESULT(MUSICA)
1174 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1176 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1177 AC_DEFINE(NRL,1,NRL)
1180 if test x"$opsys" = x"bsdi";then
1181 AC_DEFINE(BSDI_NRL,,BSDI)
1182 AC_MSG_RESULT(BSDI_NRL)
1186 dnl ------------------------------------
1187 dnl Solaris 9, 10 and potentially higher
1188 dnl ------------------------------------
1189 elif test x"$opsys" = x"sol8"; then
1191 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1192 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1195 AC_MSG_RESULT(Solaris IPv6)
1199 elif test "${enable_ipv6}" = "yes"; then
1201 #include <linux/version.h>
1202 /* 2.1.128 or later */
1203 #if LINUX_VERSION_CODE >= 0x020180
1207 zebra_cv_linux_ipv6=yes
1208 AC_MSG_RESULT(Linux IPv6)])
1210 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1213 zebra_cv_linux_ipv6=yes
1214 AC_MSG_RESULT(Linux IPv6)
1218 if test "$zebra_cv_linux_ipv6" = "yes";then
1219 AC_MSG_CHECKING(whether libc has IPv6 support)
1220 AC_TRY_LINK([#include <netinet/in.h>
1221 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1224 zebra_cv_linux_ipv6=yes],
1227 zebra_cv_linux_ipv6=no])
1230 if test "$zebra_cv_linux_ipv6" = "yes";then
1231 AC_MSG_CHECKING(for GNU libc >= 2.1)
1232 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1233 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1234 dnl Linux has a compilation problem with mixing
1235 dnl netinet/in.h and linux/in6.h they are not
1236 dnl compatible. There has been discussion on
1237 dnl how to fix it but no real progress on implementation
1238 dnl when they fix it, remove this
1239 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
1242 #include <features.h>
1243 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1247 AC_MSG_RESULT(yes)],
1252 if test "$glibc" != "yes"; then
1253 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1254 INCLUDES="-I/usr/inet6/include"
1255 LIB_IPV6="-L/usr/inet6/lib -linet6"
1260 dnl -----------------------
1261 dnl Set IPv6 related values
1262 dnl -----------------------
1263 LIBS="$LIB_IPV6 $LIBS"
1266 if test x"$RIPNGD" = x""; then
1267 AC_MSG_RESULT(IPv4 only)
1271 dnl ------------------
1272 dnl IPv6 header checks
1273 dnl ------------------
1274 if test "x${zebra_cv_ipv6}" = "xyes"; then
1275 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
1276 netinet6/in6_var.h netinet6/nd6.h], [], [],
1280 m4_define([QUAGGA_INCLUDES],dnl
1282 [#if HAVE_NETINET6_IN6_H
1283 #include <netinet6/in6.h>
1285 #if HAVE_NETINET_IN6_VAR_H
1286 #include <netinet/in6_var.h>
1288 #if HAVE_NETINET_ICMP6_H
1289 # include <netinet/icmp6.h>
1291 #if HAVE_NETINET6_IN6_VAR_H
1292 # include <netinet6/in6_var.h>
1294 #if HAVE_NETINET6_ND6_H
1295 # include <netinet6/nd6.h>
1299 dnl disable doc check
1300 if test "${enable_doc}" = "no";then
1306 dnl --------------------
1307 dnl Daemon disable check
1308 dnl --------------------
1309 if test "${enable_zebra}" = "no";then
1314 AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
1316 if test "${enable_bgpd}" = "no";then
1321 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1323 if test "${enable_ripd}" = "no";then
1328 AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
1330 if test "${enable_ospfd}" = "no";then
1335 AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
1337 if test "${enable_babeld}" = "no";then
1342 AM_CONDITIONAL(BABELD, test "x$BABELD" = "xbabeld")
1344 if test "${enable_watchquagga}" = "no";then
1347 WATCHQUAGGA="watchquagga"
1349 AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
1352 if test "${enable_opaque_lsa}" != "no"; then
1353 if test "${enable_ospfapi}" != "no";then
1354 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1356 if test "${enable_ospfclient}" != "no";then
1357 OSPFCLIENT="ospfclient"
1362 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1364 case "${enable_ripngd}" in
1365 "yes") RIPNGD="ripngd";;
1369 AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
1371 case "${enable_ospf6d}" in
1372 "yes") OSPF6D="ospf6d";;
1376 AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
1378 case "${enable_isisd}" in
1379 "yes") ISISD="isisd";;
1383 AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
1385 # XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1386 case "${enable_solaris}" in
1387 "yes") SOLARIS="solaris";;
1392 if test "${enable_bgp_announce}" = "no";then
1393 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1395 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1406 AC_SUBST(WATCHQUAGGA)
1412 AC_SUBST(OSPFCLIENT)
1414 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1415 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1416 AC_CHECK_LIB(crypt, crypt)
1417 AC_CHECK_LIB(resolv, res_init)
1419 dnl ---------------------------------------------------
1420 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1421 dnl ---------------------------------------------------
1422 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1423 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1424 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
1426 dnl ---------------------------
1427 dnl check system has PCRE regexp
1428 dnl ---------------------------
1429 if test "x$enable_pcreposix" = "xyes"; then
1430 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1431 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1434 if test "x$enable_pcreposix" != "xyes"; then
1435 dnl ---------------------------
1436 dnl check system has GNU regexp
1437 dnl ---------------------------
1438 AC_MSG_CHECKING(whether system has GNU regex)
1439 AC_CHECK_LIB(c, regexec,
1440 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1442 [LIB_REGEX="regex.o"])
1444 AC_SUBST(HAVE_LIBPCREPOSIX)
1447 dnl ------------------
1448 dnl check Net-SNMP library
1449 dnl ------------------
1450 if test "${enable_snmp}" != ""; then
1451 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1452 if test x"$NETSNMP_CONFIG" = x"no"; then
1453 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1455 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1456 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1457 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1458 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1465 ])],[AC_MSG_RESULT(yes)],[
1467 AC_MSG_ERROR([--enable-snmp given but not usable])])
1468 AC_DEFINE(HAVE_SNMP,,SNMP)
1469 case "${enable_snmp}" in
1474 SNMP_METHOD="${enable_snmp}"
1477 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1480 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1481 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1482 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1485 dnl ---------------------------
1486 dnl sockaddr and netinet checks
1487 dnl ---------------------------
1488 AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1489 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1491 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1492 struct nd_opt_adv_interval, struct rt_addrinfo,
1493 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1494 [], [], QUAGGA_INCLUDES)
1496 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1497 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1498 struct sockaddr_in6.sin6_scope_id,
1499 struct sockaddr_dl.sdl_len,
1500 struct if6_aliasreq.ifra_lifetime,
1501 struct nd_opt_adv_interval.nd_opt_ai_type],
1502 [], [], QUAGGA_INCLUDES)
1504 dnl ---------------------------
1505 dnl IRDP/pktinfo/icmphdr checks
1506 dnl ---------------------------
1507 AC_CHECK_TYPES([struct in_pktinfo],
1508 [AC_CHECK_TYPES([struct icmphdr],
1509 [if test "${enable_irdp}" != "no"; then
1510 AC_DEFINE(HAVE_IRDP,, IRDP)
1512 [if test "${enable_irdp}" = "yes"; then
1513 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1514 fi], [QUAGGA_INCLUDES])],
1515 [if test "${enable_irdp}" = "yes"; then
1516 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1517 fi], [QUAGGA_INCLUDES])
1519 dnl --------------------------------------
1520 dnl checking for getrusage struct and call
1521 dnl --------------------------------------
1522 if test "${enable_rusage}" != "no"; then
1523 AC_MSG_CHECKING(whether getrusage is available)
1524 AC_TRY_COMPILE([#include <sys/resource.h>],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1526 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1530 dnl --------------------------------------
1531 dnl checking for clock_time monotonic struct and call
1532 dnl --------------------------------------
1533 AC_CHECK_DECL(CLOCK_MONOTONIC,
1534 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1535 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1536 ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
1538 dnl -------------------
1539 dnl capabilities checks
1540 dnl -------------------
1541 if test "${enable_capabilities}" != "no"; then
1542 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1543 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1545 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1546 quagga_ac_keepcaps="yes"],
1549 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1550 AC_CHECK_HEADERS(sys/capability.h)
1552 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1553 AC_CHECK_LIB(cap, cap_init,
1554 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1556 quagga_ac_lcaps="yes"]
1559 AC_CHECK_HEADERS(priv.h,
1560 [AC_MSG_CHECKING(Solaris style privileges are available)
1561 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1563 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1564 quagga_ac_scaps="yes"],
1570 if test x"${quagga_ac_scaps}" = x"yes" \
1571 -o x"${quagga_ac_lcaps}" = x"yes"; then
1572 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1577 dnl ---------------------------------------------------------------------------
1578 dnl http://www.gnu.org/software/autoconf-archive/ax_sys_weak_alias.html
1579 dnl Check for and set one of the following = 1
1580 dnl HAVE_SYS_WEAK_ALIAS_ATTRIBUTE
1581 dnl HAVE_SYS_WEAK_ALIAS_PRAGMA
1582 dnl HAVE_SYS_WEAK_ALIAS_HPSECONDARY
1583 dnl HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE
1584 dnl If any scheme is found, set
1585 dnl HAVE_SYS_WEAK_ALIAS=1
1586 dnl The following variable is set to text value
1587 dnl WEAK_ALIAS = "attribute" || "pragma" || "hpsecondary" || "criduplicate" || "no"
1588 dnl If weak alias can cross object file boundaries
1589 dnl WEAK_ALIAS_CROSSFILE = "yes" || "no"
1590 dnl ---------------------------------------------------------------------------
1593 dnl ---------------------------
1594 dnl check for glibc 'backtrace'
1595 dnl ---------------------------
1596 if test x"${enable_backtrace}" != x"no" ; then
1598 AC_CHECK_HEADER([execinfo.h], [
1599 AC_SEARCH_LIBS([backtrace], [execinfo], [
1600 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1601 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1606 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1607 dnl user explicitly requested backtrace but we failed to find support
1608 AC_MSG_FAILURE([failed to find backtrace support])
1612 dnl -----------------------------------------
1613 dnl check for malloc mallinfo struct and call
1614 dnl this must try and link using LIBS, in
1615 dnl order to check no alternative allocator
1616 dnl has been specified, which might not provide
1617 dnl mallinfo, e.g. such as Umem on Solaris.
1618 dnl -----------------------------------------
1619 AC_CHECK_HEADER([malloc.h],
1620 [AC_MSG_CHECKING(whether mallinfo is available)
1621 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1622 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1624 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1627 ], [], QUAGGA_INCLUDES)
1632 CONFDATE=`date '+%Y%m%d'`
1635 dnl Conditionally enable PIE support for GNU toolchains.
1636 AC_ARG_ENABLE(pie, AS_HELP_STRING([--disable-pie], [Do not build tools as a Position Independent Executables]))
1637 if test "$enable_pie" != "no"; then
1638 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1640 save_LDFLAGS=$LDFLAGS
1641 CFLAGS="$CFLAGS -fPIE"
1642 LDFLAGS="$LDFLAGS -pie"
1643 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1644 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1647 LDFLAGS=$save_LDFLAGS
1649 if test "$ap_cv_cc_pie" = "yes"; then
1661 if test x"$DEJAGNU" = x
1663 DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
1665 RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
1668 AC_SUBST(RUNTESTDEFAULTFLAGS)
1670 dnl ------------------------------
1671 dnl set paths for state directory
1672 dnl ------------------------------
1673 AC_MSG_CHECKING(directory to use for state file)
1674 if test "${prefix}" = "NONE"; then
1675 quagga_statedir_prefix="";
1677 quagga_statedir_prefix=${prefix}
1679 if test "${localstatedir}" = '${prefix}/var'; then
1680 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1681 ${quagga_statedir_prefix}/var/adm dnl
1682 ${quagga_statedir_prefix}/etc dnl
1688 test -d $QUAGGA_STATE_DIR && break
1690 quagga_statedir=$QUAGGA_STATE_DIR
1692 quagga_statedir=${localstatedir}
1694 if test $quagga_statedir = "/dev/null"; then
1695 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1697 AC_MSG_RESULT(${quagga_statedir})
1698 AC_SUBST(quagga_statedir)
1700 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1701 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1702 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1703 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1704 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1705 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1706 AC_DEFINE_UNQUOTED(PATH_BABELD_PID, "$quagga_statedir/babeld.pid",babeld PID)
1707 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1708 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1709 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1710 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1711 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1712 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1713 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1714 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1715 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1716 AC_DEFINE_UNQUOTED(BABEL_VTYSH_PATH, "$quagga_statedir/babeld.vty",babeld vty socket)
1717 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1718 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1720 dnl -------------------------------
1721 dnl Quagga sources should always be
1722 dnl current wrt interfaces. Dont
1723 dnl allow deprecated interfaces to
1725 dnl -------------------------------
1726 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1728 dnl ---------------------------
1729 dnl Check htonl works correctly
1730 dnl ---------------------------
1731 AC_MSG_CHECKING(for working htonl)
1732 AC_CACHE_VAL(ac_cv_htonl_works,
1733 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1734 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1737 AC_MSG_RESULT($ac_cv_htonl_works)
1739 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1740 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1741 ospf6d/Makefile isisd/Makefile babeld/Makefile vtysh/Makefile
1742 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
1743 tests/bgpd.tests/Makefile
1744 tests/libzebra.tests/Makefile
1750 isisd/topology/Makefile
1751 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1752 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1753 AC_CONFIG_FILES([solaris/Makefile])
1755 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1756 ## Hack, but working solution to avoid rebuilding of quagga.info.
1757 ## It's already in CVS until texinfo 4.7 is more common.
1761 Quagga configuration
1762 --------------------
1763 quagga version : ${PACKAGE_VERSION}
1764 host operating system : ${host_os}
1765 source code location : ${srcdir}
1767 compiler flags : ${CFLAGS}
1769 includes : ${INCLUDES}
1770 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1771 state file directory : ${quagga_statedir}
1772 config file directory : `eval echo \`echo ${sysconfdir}\``
1773 example directory : `eval echo \`echo ${exampledir}\``
1774 user to run as : ${enable_user}
1775 group to run as : ${enable_group}
1776 group for vty sockets : ${enable_vty_group}
1777 config file mask : ${enable_configfile_mask}
1778 log file mask : ${enable_logfile_mask}
1780 The above user and group must have read/write access to the state file
1781 directory and to the config files in the config file directory."
1783 if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1784 Warning: The ${MAKE-make} programme detected, either in your path or
1785 via the MAKE variable, is not GNU Make. GNU make may be installed as
1786 gmake on some systems. and is required to complete a build of Quagga