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.21, [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 AM_CONFIG_HEADER(config.h)
24 AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
25 if test "x$GAWK" = "xnot-in-PATH" ; then
26 AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
27 BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
29 AC_ARG_VAR([GAWK],[GNU AWK])
31 dnl default is to match previous behavior
32 exampledir=${sysconfdir}
33 AC_ARG_ENABLE([exampledir],
34 AC_HELP_STRING([--enable-exampledir],
35 [specify alternate directory for examples]),
36 exampledir="$enableval",)
37 dnl XXX add --exampledir to autoconf standard directory list somehow
40 dnl default is to match previous behavior
43 AC_ARG_ENABLE([pkgsrcrcdir],
44 AC_HELP_STRING([--enable-pkgsrcrcdir],
45 [specify directory for rc.d scripts]),
46 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
47 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
55 [ --with-cflags Set CFLAGS for use in compilation.])
56 if test "x$with_cflags" != "x" ; then
57 CFLAGS="$with_cflags" ; cflags_specified=yes ;
58 elif test -n "$CFLAGS" ; then
59 cflags_specified=yes ;
62 dnl --------------------
63 dnl Check CC and friends
64 dnl --------------------
71 dnl autoconf 2.59 appears not to support AC_PROG_SED
73 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
75 dnl pdflatex and latexmk are needed to build HACKING.pdf
76 AC_CHECK_PROG([PDFLATEX],[pdflatex],[pdflatex],[/bin/false])
77 AC_CHECK_PROG([LATEXMK],[latexmk],[latexmk],[/bin/false])
78 if test "x$PDFLATEX" = "x/bin/false" -o "x$LATEXMK" = "x/bin/false"; then
79 AC_MSG_WARN([Will not be able to make PDF versions of TeX documents])
83 AM_CONDITIONAL([HAVE_LATEX], [test "x$HAVE_LATEX" = "xtrue"])
85 dnl ------------------------------------------------------------------
86 dnl Intel compiler check. Although Intel tries really hard to make icc
87 dnl look like gcc, there are some differences. It's very verbose with
88 dnl -Wall and it doesn't support the individual -W options.
89 dnl ------------------------------------------------------------------
90 if test "x${GCC}" = "xyes" ; then
92 AC_MSG_CHECKING([whether we are using the Intel compiler])
93 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
94 [AC_MSG_RESULT([no])],
99 AC_MSG_CHECKING([whether we are using SunPro compiler])
100 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
101 [AC_MSG_RESULT([no])],
103 AC_MSG_RESULT([yes])]
107 dnl ---------------------------------------------
108 dnl If CLFAGS doesn\'t exist set default value
109 dnl AC_PROG_CC will have set minimal default
110 dnl already, eg "-O2 -g" for gcc, "-g" for others
111 dnl (Wall is gcc specific... have to make sure
112 dnl gcc is being used before setting it)
114 dnl Intel icc 8.0 also sets __GNUC__,
115 dnl but doesn't support all these fancy -W options.
116 dnl Intel compiler warnings we ignore:
117 dnl 279: controlling expression is constant.
118 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
119 dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
121 dnl 981: operands are evaluated in unspecified order.
123 dnl Sun Studio 10 / SunPro 5.7 is also supported,
124 dnl so lets set some sane CFLAGS for it.
125 dnl ---------------------------------------------
127 AC_MSG_CHECKING([whether to set a default CFLAGS])
128 if test "x${cflags_specified}" = "x" ; then
131 CFLAGS="-Os -g -Wall -wd 279,869,981"
132 AC_MSG_RESULT([Intel default])
135 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
136 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
137 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
138 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
139 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
140 # TODO: conditionally addd -Wpacked if handled
141 AC_MSG_RESULT([gcc default])
144 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
145 AC_MSG_RESULT([SunPro default])
148 AC_MSG_RESULT([unknown compiler])
152 AC_MSG_RESULT([CFLAGS supplied by user])
161 AC_CHECK_TOOL(AR, ar)
163 dnl ---------------------------
164 dnl We, perhaps unfortunately,
165 dnl depend on GNU Make specific
167 dnl Give the user a warning if
169 dnl ---------------------------
170 AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
171 [quagga_cv_gnu_make=no
172 if ${MAKE-make} --version 2>/dev/null | \
173 grep '^GNU Make ' >/dev/null ; then
174 quagga_cv_gnu_make=yes;
179 dnl -----------------
180 dnl System extensions
181 dnl -----------------
189 dnl ----------------------
190 dnl Packages configuration
191 dnl ----------------------
192 AC_ARG_WITH(pkg-extra-version,
193 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
194 [EXTRAVERSION=$withval],)
196 [ --enable-vtysh include integrated vty shell for Quagga])
198 [ --disable-ipv6 turn off IPv6 related features and daemons])
200 [ --disable-doc do not build docs])
202 [ --disable-tests do not build tests])
204 [ --disable-zebra do not build zebra daemon])
206 [ --disable-bgpd do not build bgpd])
208 [ --disable-ripd do not build ripd])
209 AC_ARG_ENABLE(ripngd,
210 [ --disable-ripngd do not build ripngd])
212 [ --disable-ospfd do not build ospfd])
213 AC_ARG_ENABLE(ospf6d,
214 [ --disable-ospf6d do not build ospf6d])
215 AC_ARG_ENABLE(babeld,
216 [ --disable-babeld do not build babeld])
217 AC_ARG_ENABLE(watchquagga,
218 [ --disable-watchquagga do not build watchquagga])
220 [ --enable-isisd build isisd])
221 AC_ARG_ENABLE(solaris,
222 [ --enable-solaris build solaris])
223 AC_ARG_ENABLE(bgp-announce,
224 [ --disable-bgp-announce, turn off BGP route announcement])
225 AC_ARG_ENABLE(netlink,
226 [ --enable-netlink force to use Linux netlink interface])
227 AC_ARG_ENABLE(broken-aliases,
228 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
230 [ --enable-snmp=ARG enable SNMP support (smux or agentx)])
232 [ --with-libpam use libpam for PAM support in vtysh])
233 AC_ARG_ENABLE(tcp-zebra,
234 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
235 AC_ARG_ENABLE(opaque-lsa,
236 AC_HELP_STRING([--disable-opaque-lsa],[do not build OSPF Opaque-LSA with OSPFAPI support (RFC2370)]))
237 AC_ARG_ENABLE(ospfapi,
238 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database])
239 AC_ARG_ENABLE(ospfclient,
240 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
241 (this is the default if --disable-ospfapi is set)])
242 AC_ARG_ENABLE(ospf-te,
243 AC_HELP_STRING([--disable-ospf-te],[disable Traffic Engineering Extension to OSPF]))
244 AC_ARG_ENABLE(multipath,
245 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
247 AC_HELP_STRING([--enable-user=user], [user to run Quagga suite as (default quagga)]))
249 AC_HELP_STRING([--enable-group=group], [group to run Quagga suite as (default quagga)]))
250 AC_ARG_ENABLE(vty_group,
251 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
252 AC_ARG_ENABLE(configfile_mask,
253 [ --enable-configfile-mask=ARG set mask for config files])
254 AC_ARG_ENABLE(logfile_mask,
255 [ --enable-logfile-mask=ARG set mask for log files])
258 [ --disable-rtadv disable IPV6 router advertisement feature])
260 [ --enable-irdp enable IRDP server support in zebra])
261 AC_ARG_ENABLE(isis_topology,
262 [ --enable-isis-topology enable IS-IS topology generator])
263 AC_ARG_ENABLE(capabilities,
264 [ --disable-capabilities disable using POSIX capabilities])
265 AC_ARG_ENABLE(gcc_ultra_verbose,
266 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
267 AC_ARG_ENABLE(linux24_tcp_md5,
268 [ --enable-linux24-tcp-md5 enable support for old, Linux-2.4 RFC2385 patch])
269 AC_ARG_ENABLE(gcc-rdynamic,
270 [ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
271 AC_ARG_ENABLE(time-check,
272 [ --disable-time-check disable slow thread warning messages])
273 AC_ARG_ENABLE(pcreposix,
274 [ --enable-pcreposix enable using PCRE Posix libs for regex functions])
276 [ --enable-fpm enable Forwarding Plane Manager support])
278 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
279 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
280 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
281 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
282 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
285 if test x"${enable_gcc_rdynamic}" = x"yes" ; then
286 LDFLAGS="${LDFLAGS} -rdynamic"
289 if test x"${enable_time_check}" != x"no" ; then
290 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
291 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
293 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
297 if test "${enable_fpm}" = "yes"; then
298 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
301 if test "${enable_broken_aliases}" = "yes"; then
302 if test "${enable_netlink}" = "yes"
304 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
306 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
310 if test "${enable_tcp_zebra}" = "yes"; then
311 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
314 if test "${enable_opaque_lsa}" != "no"; then
315 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
318 if test "${enable_ospf_te}" != "no"; then
319 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
320 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
323 if test "${enable_linux24_tcp_md5}" = "yes"; then
324 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
327 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
328 if test "${enable_rtadv}" != "no"; then
330 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
335 if test "${enable_irdp}" = "yes"; then
336 AC_DEFINE(HAVE_IRDP,, IRDP )
339 if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
340 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
341 ISIS_TOPOLOGY_INCLUDES="-I\$(srcdir)/topology"
342 ISIS_TOPOLOGY_DIR="topology"
343 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
346 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
347 AC_SUBST(ISIS_TOPOLOGY_DIR)
348 AC_SUBST(ISIS_TOPOLOGY_LIB)
350 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
352 elif test "${enable_user}" = "no"; then
356 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
357 enable_group="quagga"
358 elif test "${enable_group}" = "no"; then
362 if test x"${enable_vty_group}" = x"yes" ; then
363 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
364 elif test x"${enable_vty_group}" != x""; then
365 if test x"${enable_vty_group}" != x"no"; then
366 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
369 AC_SUBST([enable_user])
370 AC_SUBST([enable_group])
371 AC_SUBST([enable_vty_group])
372 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
373 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
375 enable_configfile_mask=${enable_configfile_mask:-0600}
376 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
378 enable_logfile_mask=${enable_logfile_mask:-0600}
379 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
383 case "${enable_multipath}" in
385 MULTIPATH_NUM="${enable_multipath}"
390 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
394 AC_SUBST(MULTIPATH_NUM)
396 dnl -----------------------------------
397 dnl Add extra version string to package
398 dnl name, string and version fields.
399 dnl -----------------------------------
400 if test "x${EXTRAVERSION}" != "x" ; then
401 VERSION=${VERSION}${EXTRAVERSION}
402 PACKAGE_VERSION=${PACKAGE_VERSION}${EXTRAVERSION}
403 PACKAGE_STRING=${PACKAGE_STRING}${EXTRAVERSION}
406 dnl ------------------------------------
407 dnl Check C keywords and standard types
408 dnl ------------------------------------
423 dnl -------------------------
424 dnl Check other header files.
425 dnl -------------------------
426 AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
427 sys/types.h linux/version.h netdb.h asm/types.h \
428 sys/param.h limits.h signal.h \
429 sys/socket.h netinet/in.h time.h sys/time.h])
431 dnl Utility macro to avoid retyping includes all the time
432 m4_define([QUAGGA_INCLUDES],
435 #define __EXTENSIONS__
447 # include <sys/types.h>
449 /* sys/conf.h depends on param.h on FBSD at least */
451 # include <sys/param.h>
453 /* Required for MAXSIG */
457 #if HAVE_SYS_SOCKET_H
458 # include <sys/socket.h>
460 #if HAVE_NETINET_IN_H
461 # include <netinet/in.h>
463 #ifdef TIME_WITH_SYS_TIME
464 # include <sys/time.h>
467 # ifdef HAVE_SYS_TIME_H
468 # include <sys/time.h>
472 #endif /* TIME_WITH_SYS_TIME */
475 dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
476 dnl round below execution begins, otherwise it doesn't properly detect
477 dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
478 dnl on FreeBSD (BZ#408).
480 AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
482 m4_define([QUAGGA_INCLUDES],
489 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
490 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
491 dnl an additional round for it.
493 AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
495 m4_define([QUAGGA_INCLUDES],
497 [#if HAVE_NET_IF_VAR_H
498 # include <net/if_var.h>
502 AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
503 net/if_dl.h net/netopt.h net/route.h \
504 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
505 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
506 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
507 [], [], QUAGGA_INCLUDES)
509 AC_CHECK_HEADERS([ucontext.h], [], [],
512 #endif /* __USE_GNU */
516 m4_define([QUAGGA_INCLUDES],
521 #if HAVE_NETINET_IN_SYSTM_H
522 # include <netinet/in_systm.h>
524 #if HAVE_NETINET_IN_VAR_H
525 # include <netinet/in_var.h>
528 # include <net/if_dl.h>
530 #if HAVE_NET_NETOPT_H
531 # include <net/netopt.h>
534 # include <net/route.h>
537 # include <inet/nd.h>
540 # include <arpa/inet.h>
542 /* Required for IDRP */
543 #if HAVE_NETINET_IP_ICMP_H
544 # include <netinet/ip_icmp.h>
548 dnl V6 headers are checked below, after we check for v6
550 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
552 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
554 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
555 AC_DEFINE(SUNOS_5, 1, SunOS 5)
556 AC_CHECK_LIB(xnet, main)
560 | [*-sunos5.1[0-9]] \
561 | [*-sunos5.1[0-9].[0-9]] \
562 | [*-solaris2.[8-9]] \
563 | [*-solaris2.1[0-9]] \
564 | [*-solaris2.1[0-9].[0-9]])
566 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
567 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
568 AC_CHECK_LIB(socket, main)
569 AC_CHECK_LIB(nsl, main)
570 AC_CHECK_LIB(umem, main)
571 AC_CHECK_FUNCS([printstack],
572 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
573 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
577 *-sunos5* | *-solaris2*)
578 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
579 AC_CHECK_LIB(socket, main)
580 AC_CHECK_LIB(nsl, main)
585 AC_DEFINE(GNU_LINUX,,GNU Linux)
588 AC_CHECK_LIB(nsl, gethostbyname)
589 AC_CHECK_LIB(socket, socket)
593 AC_DEFINE(OPEN_BSD,,OpenBSD)
597 OTHER_METHOD="mtu_kvm.o"
598 AC_CHECK_LIB(kvm, main)
602 AC_DEFINE(IRIX_65,,IRIX 6.5)
608 dnl ---------------------
609 dnl Integrated VTY option
610 dnl ---------------------
611 case "${enable_vtysh}" in
612 "yes") VTYSH="vtysh";
613 AC_DEFINE(VTYSH,,VTY shell)
614 AC_PATH_PROG(PERL, perl)
615 dnl Vtysh uses libreadline, which looks for termcap functions at
616 dnl configure time. We follow readlines search order.
617 dnl The required procedures are in libtermcap on NetBSD, in
618 dnl [TODO] on Linux, and in [TODO] on Solaris.
619 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
620 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
621 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
622 [AC_CHECK_LIB(ncurses, tputs,
623 LIBREADLINE="$LIBREADLINE -lncurses")]
627 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
629 if test $ac_cv_lib_readline_main = no; then
630 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
632 AC_CHECK_HEADER(readline/history.h)
633 if test $ac_cv_header_readline_history_h = no;then
634 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
636 AC_CHECK_LIB(readline, rl_completion_matches,
637 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
638 if test $ac_cv_lib_readline_rl_completion_matches = no; then
639 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
645 AC_SUBST(LIBREADLINE)
646 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
651 dnl Quagga detects the PAM library it is built against by checking for a
652 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
653 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
654 dnl openpam.h doesn't do that, although depends on the header too. Hence a
655 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
658 if test "$with_libpam" = "yes"; then
659 AC_CHECK_HEADER([security/pam_misc.h],
660 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
661 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
662 pam_conv_func="misc_conv"
665 AC_CHECK_HEADER([security/openpam.h],
666 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
667 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
668 pam_conv_func="openpam_ttyconv"
670 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
671 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
672 AC_MSG_WARN([*** pam support will not be built ***])
677 if test "$with_libpam" = "yes"; then
678 dnl took this test from proftpds configure.in and suited to our needs
679 dnl -------------------------------------------------------------------------
681 dnl This next check looks funky due to a linker problem with some versions
682 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
683 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
684 dnl with RedHat 6.2 and Debian 2.2 or better.
685 AC_CHECK_LIB(pam, pam_start,
686 [AC_CHECK_LIB(pam, $pam_conv_func,
687 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
689 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
690 LIBPAM="-lpam -lpam_misc"]
694 [AC_CHECK_LIB(pam, pam_end,
695 [AC_CHECK_LIB(pam, $pam_conv_func,
696 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
697 LIBPAM="-lpam -ldl"],
698 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
699 LIBPAM="-lpam -ldl -lpam_misc"]
701 ],AC_MSG_WARN([*** pam support will not be built ***]),
708 dnl -------------------------------
709 dnl Endian-ness check
710 dnl -------------------------------
713 dnl -------------------------------
714 dnl check the size in byte of the C
715 dnl -------------------------------
716 dnl AC_CHECK_SIZEOF(char)
717 dnl AC_CHECK_SIZEOF(int)
718 dnl AC_CHECK_SIZEOF(short)
719 dnl AC_CHECK_SIZEOF(long)
721 dnl ----------------------------
722 dnl check existance of functions
723 dnl ----------------------------
731 AC_FUNC_SELECT_ARGTYPES
733 dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
734 dnl can lead to strange side effects. So we just check for strnlen
735 dnl directly, see below.
736 dnl AC_FUNC_STRNLENdnl
739 dnl -------------------------------
740 dnl bgpd needs pow() and hence libm
741 dnl -------------------------------
743 AC_CHECK_HEADER([math.h],
744 [AC_CHECK_LIB([m], [pow],
747 AC_DEFINE(HAVE_LIBM,, Have libm)
748 AC_CHECK_FUNCS(pow,[],[LIBM=""])
751 if test x"$LIBM" = x ; then
752 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
760 AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
761 inet_ntoa inet_aton strnlen \
762 memchr memmove memset select socket \
763 strcasecmp strchr strcspn strdup strerror \
764 strncasecmp strndup strrchr strspn strstr \
765 strtol strtoul strlcat strlcpy \
766 daemon snprintf vsnprintf \
767 if_nametoindex if_indextoname getifaddrs \
770 AC_CHECK_FUNCS(setproctitle, ,
771 [AC_CHECK_LIB(util, setproctitle,
773 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
779 dnl ------------------------------------
780 dnl Determine routing get and set method
781 dnl ------------------------------------
782 AC_MSG_CHECKING(zebra between kernel interface method)
783 if test x"$opsys" = x"gnu-linux"; then
784 if test "${enable_netlink}" = "yes";then
785 AC_MSG_RESULT(netlink)
786 RT_METHOD=rt_netlink.o
787 AC_DEFINE(HAVE_NETLINK,,netlink)
789 elif test "${enable_netlink}" = "no"; then
794 AC_MSG_RESULT(netlink)
795 RT_METHOD=rt_netlink.o
796 AC_DEFINE(HAVE_NETLINK,,netlink)
799 elif test x"$opsys" = x"sol2-6";then
800 AC_MSG_RESULT(Route socket)
801 KERNEL_METHOD="kernel_socket.o"
802 RT_METHOD="rt_socket.o"
803 elif test x"$opsys" = x"sol8";then
804 AC_MSG_RESULT(Route socket)
805 KERNEL_METHOD="kernel_socket.o"
806 RT_METHOD="rt_socket.o"
807 elif test "$opsys" = "irix" ; then
808 AC_MSG_RESULT(Route socket)
809 KERNEL_METHOD="kernel_socket.o"
810 RT_METHOD="rt_socket.o"
812 AC_TRY_RUN([#include <errno.h>
813 #include <sys/types.h>
814 #include <sys/socket.h>
820 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
821 if (ac_sock < 0 && errno == EINVAL)
825 [KERNEL_METHOD=kernel_socket.o
826 RT_METHOD=rt_socket.o
827 AC_MSG_RESULT(socket)],
828 [RT_METHOD=rt_ioctl.o
829 AC_MSG_RESULT(ioctl)],
830 [KERNEL_METHOD=kernel_socket.o
831 RT_METHOD=rt_socket.o
832 AC_MSG_RESULT(socket)])
835 AC_SUBST(KERNEL_METHOD)
836 AC_SUBST(OTHER_METHOD)
837 AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
839 dnl --------------------------
840 dnl Determine IS-IS I/O method
841 dnl --------------------------
842 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
843 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
844 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
845 AC_CHECK_HEADER(net/bpf.h)
846 AC_CHECK_HEADER(sys/dlpi.h)
847 AC_MSG_CHECKING(zebra IS-IS I/O method)
848 if test x"$opsys" = x"gnu-linux"; then
849 AC_MSG_RESULT(pfpacket)
850 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
851 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
853 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
855 if test $ac_cv_header_net_bpf_h = no; then
856 if test $ac_cv_header_sys_dlpi_h = no; then
858 AC_MSG_WARN([*** IS-IS support will not be built ***])
863 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
866 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
869 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
871 dnl ------------------------------------
872 dnl check for broken CMSG_FIRSTHDR macro
873 dnl ------------------------------------
874 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
875 AC_RUN_IFELSE([AC_LANG_SOURCE([[
878 #define __EXTENSIONS__
883 #ifdef HAVE_SYS_TYPES_H
884 #include <sys/types.h>
886 #ifdef HAVE_SYS_SOCKET_H
887 #include <sys/socket.h>
895 msg.msg_control = buf;
896 msg.msg_controllen = 0;
898 if (CMSG_FIRSTHDR(&msg) != NULL)
901 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
902 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
904 dnl ------------------------------
905 dnl check kernel route read method
906 dnl ------------------------------
907 AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
908 [if test "x$netlink" = xyes; then
909 quagga_cv_rtread_method="netlink"
911 for quagga_cv_rtread_method in /proc/net/route /dev/ip /dev/null;
913 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
915 case $quagga_cv_rtread_method in
916 "/proc/net/route") quagga_cv_rtread_method="proc";;
919 *-freebsd*) quagga_cv_rtread_method="sysctl";;
920 *) quagga_cv_rtread_method="getmsg";;
923 quagga_cv_rtread_method="sysctl";;
926 RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
927 AC_SUBST(RTREAD_METHOD)
929 dnl -----------------------------
930 dnl check interface lookup method
931 dnl -----------------------------
933 AC_MSG_CHECKING(interface looking up method)
934 if test "$netlink" = yes; then
935 AC_MSG_RESULT(netlink)
936 IF_METHOD=if_netlink.o
937 elif test "$opsys" = "sol2-6";then
938 AC_MSG_RESULT(Solaris GIF)
940 elif test "$opsys" = "sol8";then
941 AC_MSG_RESULT(Solaris GLIF)
942 IF_METHOD=if_ioctl_solaris.o
943 IOCTL_METHOD=ioctl_solaris.o
944 elif test "$opsys" = "irix" ; then
947 elif test "$opsys" = "openbsd";then
948 AC_MSG_RESULT(openbsd)
950 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
951 AC_MSG_RESULT(sysctl)
952 IF_METHOD=if_sysctl.o
953 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
959 AC_SUBST(IOCTL_METHOD)
961 dnl ---------------------------------------------------------------
962 dnl figure out how to specify an interface in multicast sockets API
963 dnl ---------------------------------------------------------------
964 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
966 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
967 AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
968 #include <sys/param.h>
969 #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__)
972 #error No support for BSD struct ip_mreq hack detected
973 #endif],[AC_MSG_RESULT(yes)
974 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
977 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
979 #include <sys/types.h>
980 #include <netinet/in.h>
981 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
982 ], [AC_MSG_RESULT(yes)
983 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
986 dnl ---------------------------------------------------------------
987 dnl figure out how to check link-state
988 dnl ---------------------------------------------------------------
989 AC_CHECK_HEADER([net/if.h],
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)],
1000 [], QUAGGA_INCLUDES )
1002 dnl ---------------------------------------------------------------
1003 dnl Additional, newer way to check link-state using ifi_link_state.
1004 dnl Not available in all BSD's when ifmediareq available
1005 dnl ---------------------------------------------------------------
1006 AC_CHECK_HEADER([net/if.h],
1007 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1008 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1009 [], QUAGGA_INCLUDES),
1012 dnl ------------------------
1013 dnl TCP_MD5SIG socket option
1014 dnl ------------------------
1016 AC_CHECK_HEADER([netinet/tcp.h],
1017 [m4_define([MD5_INCLUDES],
1019 [#include <netinet/tcp.h>
1021 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1024 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1025 AC_CHECK_HEADER([linux/tcp.h],
1026 [m4_define([MD5_INCLUDES],
1028 [#include <linux/tcp.h>
1030 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1033 dnl -----------------------
1034 dnl check proc file system.
1035 dnl -----------------------
1036 if test "$netlink" != yes; then
1037 if test -r /proc/net/dev; then
1038 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
1041 if test -r /proc/net/if_inet6; then
1042 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
1048 dnl -----------------------------
1049 dnl check ipforward detect method
1050 dnl -----------------------------
1051 AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
1052 [if test x$cross_compiling = xyes; then
1053 if test x"$opsys" = x"gnu-linux"; then
1054 quagga_cv_ipforward_method=/proc/net/snmp
1056 quagga_cv_ipforward_method=/dev/ip
1059 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1061 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1064 case $quagga_cv_ipforward_method in
1065 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
1068 *-nec-sysv4*) quagga_cv_ipforward_method="ews";;
1069 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1070 *) quagga_cv_ipforward_method="solaris";;
1072 *) quagga_cv_ipforward_method="sysctl";;
1074 IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
1077 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
1082 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1083 if test "${enable_ipv6}" = "no"; then
1084 AC_MSG_RESULT(disabled)
1089 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1091 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1092 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1096 AC_MSG_RESULT(INRIA IPv6)
1100 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1102 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1103 AC_DEFINE(KAME,1,KAME IPv6)
1106 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1107 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1110 dnl -------------------------
1112 dnl default host check
1113 dnl It is not used by Kheops
1114 dnl -------------------------
1115 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1117 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1118 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1119 AC_DEFINE(KAME,1,KAME IPv6 stack)
1122 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1123 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1125 AC_MSG_RESULT(MUSICA)
1129 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1131 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1132 AC_DEFINE(NRL,1,NRL)
1135 if test x"$opsys" = x"bsdi";then
1136 AC_DEFINE(BSDI_NRL,,BSDI)
1137 AC_MSG_RESULT(BSDI_NRL)
1141 dnl ------------------------------------
1142 dnl Solaris 9, 10 and potentially higher
1143 dnl ------------------------------------
1144 elif test x"$opsys" = x"sol8"; then
1146 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1147 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1150 AC_MSG_RESULT(Solaris IPv6)
1154 elif test "${enable_ipv6}" = "yes"; then
1156 #include <linux/version.h>
1157 /* 2.1.128 or later */
1158 #if LINUX_VERSION_CODE >= 0x020180
1162 zebra_cv_linux_ipv6=yes
1163 AC_MSG_RESULT(Linux IPv6)])
1165 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1168 zebra_cv_linux_ipv6=yes
1169 AC_MSG_RESULT(Linux IPv6)
1173 if test "$zebra_cv_linux_ipv6" = "yes";then
1174 AC_MSG_CHECKING(whether libc has IPv6 support)
1175 AC_TRY_LINK([#include <netinet/in.h>
1176 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1179 zebra_cv_linux_ipv6=yes],
1182 zebra_cv_linux_ipv6=no])
1185 if test "$zebra_cv_linux_ipv6" = "yes";then
1186 AC_MSG_CHECKING(for GNU libc >= 2.1)
1187 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1189 #include <features.h>
1190 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1194 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1195 AC_MSG_RESULT(yes)],
1200 if test "$glibc" != "yes"; then
1201 INCLUDES="-I/usr/inet6/include"
1202 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1203 LIB_IPV6="-L/usr/inet6/lib -linet6"
1208 dnl -----------------------
1209 dnl Set IPv6 related values
1210 dnl -----------------------
1211 LIBS="$LIB_IPV6 $LIBS"
1214 if test x"$RIPNGD" = x""; then
1215 AC_MSG_RESULT(IPv4 only)
1219 dnl ------------------
1220 dnl IPv6 header checks
1221 dnl ------------------
1222 if test "x${zebra_cv_ipv6}" = "xyes"; then
1223 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
1224 netinet6/in6_var.h netinet6/nd6.h], [], [],
1228 m4_define([QUAGGA_INCLUDES],dnl
1230 [#if HAVE_NETINET6_IN6_H
1231 #include <netinet6/in6.h>
1233 #if HAVE_NETINET_IN6_VAR_H
1234 #include <netinet/in6_var.h>
1236 #if HAVE_NETINET_ICMP6_H
1237 # include <netinet/icmp6.h>
1239 #if HAVE_NETINET6_IN6_VAR_H
1240 # include <netinet6/in6_var.h>
1242 #if HAVE_NETINET6_ND6_H
1243 # include <netinet6/nd6.h>
1247 dnl disable doc check
1248 if test "${enable_doc}" = "no";then
1254 dnl can't use TESTS as name, that's special with automake
1255 if test "${enable_tests}" = "no";then
1261 dnl --------------------
1262 dnl Daemon disable check
1263 dnl --------------------
1264 if test "${enable_zebra}" = "no";then
1269 AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
1271 if test "${enable_bgpd}" = "no";then
1276 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1278 if test "${enable_ripd}" = "no";then
1283 AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
1285 if test "${enable_ospfd}" = "no";then
1290 AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
1292 if test "${enable_babeld}" = "no";then
1297 AM_CONDITIONAL(BABELD, test "x$BABELD" = "xbabeld")
1299 if test "${enable_watchquagga}" = "no";then
1302 WATCHQUAGGA="watchquagga"
1304 AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
1307 if test "${enable_opaque_lsa}" != "no"; then
1308 if test "${enable_ospfapi}" != "no";then
1309 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1311 if test "${enable_ospfclient}" != "no";then
1312 OSPFCLIENT="ospfclient"
1317 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1319 case "${enable_ripngd}" in
1320 "yes") RIPNGD="ripngd";;
1324 AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
1326 case "${enable_ospf6d}" in
1327 "yes") OSPF6D="ospf6d";;
1331 AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
1333 case "${enable_isisd}" in
1334 "yes") ISISD="isisd";;
1338 AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
1340 # XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1341 case "${enable_solaris}" in
1342 "yes") SOLARIS="solaris";;
1347 if test "${enable_bgp_announce}" = "no";then
1348 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1350 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1354 AC_SUBST(BUILD_TESTS)
1362 AC_SUBST(WATCHQUAGGA)
1368 AC_SUBST(OSPFCLIENT)
1370 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1371 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1372 AC_CHECK_LIB(crypt, crypt)
1373 AC_CHECK_LIB(resolv, res_init)
1375 dnl ---------------------------------------------------
1376 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1377 dnl ---------------------------------------------------
1378 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1379 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1380 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
1382 dnl ---------------------------
1383 dnl check system has PCRE regexp
1384 dnl ---------------------------
1385 if test "x$enable_pcreposix" = "xyes"; then
1386 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1387 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1390 if test "x$enable_pcreposix" != "xyes"; then
1391 dnl ---------------------------
1392 dnl check system has GNU regexp
1393 dnl ---------------------------
1394 AC_MSG_CHECKING(whether system has GNU regex)
1395 AC_CHECK_LIB(c, regexec,
1396 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1398 [LIB_REGEX="regex.o"])
1400 AC_SUBST(HAVE_LIBPCREPOSIX)
1403 dnl ------------------
1404 dnl check Net-SNMP library
1405 dnl ------------------
1406 if test "${enable_snmp}" != ""; then
1407 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1408 if test x"$NETSNMP_CONFIG" = x"no"; then
1409 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1411 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1412 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1413 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1414 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1421 ])],[AC_MSG_RESULT(yes)],[
1423 AC_MSG_ERROR([--enable-snmp given but not usable])])
1424 AC_DEFINE(HAVE_SNMP,,SNMP)
1425 case "${enable_snmp}" in
1430 SNMP_METHOD="${enable_snmp}"
1433 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1436 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1437 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1438 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1441 dnl ---------------------------
1442 dnl sockaddr and netinet checks
1443 dnl ---------------------------
1444 AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1445 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1447 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1448 struct nd_opt_adv_interval, struct rt_addrinfo,
1449 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1450 [], [], QUAGGA_INCLUDES)
1452 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1453 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1454 struct sockaddr_in6.sin6_scope_id,
1455 struct if6_aliasreq.ifra_lifetime,
1456 struct nd_opt_adv_interval.nd_opt_ai_type],
1457 [], [], QUAGGA_INCLUDES)
1459 dnl ---------------------------
1460 dnl IRDP/pktinfo/icmphdr checks
1461 dnl ---------------------------
1462 AC_CHECK_TYPES([struct in_pktinfo],
1463 [AC_CHECK_TYPES([struct icmphdr],
1464 [if test "${enable_irdp}" != "no"; then
1465 AC_DEFINE(HAVE_IRDP,, IRDP)
1467 [if test "${enable_irdp}" = "yes"; then
1468 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1469 fi], [QUAGGA_INCLUDES])],
1470 [if test "${enable_irdp}" = "yes"; then
1471 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1472 fi], [QUAGGA_INCLUDES])
1474 dnl --------------------------------------
1475 dnl checking for getrusage struct and call
1476 dnl --------------------------------------
1477 AC_MSG_CHECKING(whether getrusage is available)
1478 AC_TRY_COMPILE([#include <sys/resource.h>
1479 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1481 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1484 dnl --------------------------------------
1485 dnl checking for clock_time monotonic struct and call
1486 dnl --------------------------------------
1487 AC_CHECK_DECL(CLOCK_MONOTONIC,
1488 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1489 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1490 ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
1492 dnl -------------------
1493 dnl capabilities checks
1494 dnl -------------------
1495 if test "${enable_capabilities}" != "no"; then
1496 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1497 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1499 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1500 quagga_ac_keepcaps="yes"],
1503 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1504 AC_CHECK_HEADERS(sys/capability.h)
1506 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1507 AC_CHECK_LIB(cap, cap_init,
1508 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1510 quagga_ac_lcaps="yes"]
1513 AC_CHECK_HEADERS(priv.h,
1514 [AC_MSG_CHECKING(Solaris style privileges are available)
1515 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1517 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1518 quagga_ac_scaps="yes"],
1524 if test x"${quagga_ac_scaps}" = x"yes" \
1525 -o x"${quagga_ac_lcaps}" = x"yes"; then
1526 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1531 dnl ---------------------------
1532 dnl check for glibc 'backtrace'
1533 dnl ---------------------------
1534 AC_CHECK_HEADER([execinfo.h],
1535 [AC_CHECK_FUNC([backtrace],
1536 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1537 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1541 dnl -----------------------------------------
1542 dnl check for malloc mallinfo struct and call
1543 dnl this must try and link using LIBS, in
1544 dnl order to check no alternative allocator
1545 dnl has been specified, which might not provide
1546 dnl mallinfo, e.g. such as Umem on Solaris.
1547 dnl -----------------------------------------
1548 AC_CHECK_HEADER([malloc.h],
1549 [AC_MSG_CHECKING(whether mallinfo is available)
1550 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1551 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1553 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1556 ], [], QUAGGA_INCLUDES)
1561 CONFDATE=`date '+%Y%m%d'`
1564 dnl Conditionally enable PIE support for GNU toolchains.
1565 AC_ARG_ENABLE(pie, AS_HELP_STRING([--disable-pie], [Do not build tools as a Position Independent Executables]))
1566 if test "$enable_pie" != "no"; then
1567 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1569 save_LDFLAGS=$LDFLAGS
1570 CFLAGS="$CFLAGS -fPIE"
1571 LDFLAGS="$LDFLAGS -pie"
1572 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1573 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1576 LDFLAGS=$save_LDFLAGS
1578 if test "$ap_cv_cc_pie" = "yes"; then
1587 dnl ------------------------------
1588 dnl set paths for state directory
1589 dnl ------------------------------
1590 AC_MSG_CHECKING(directory to use for state file)
1591 if test "${prefix}" = "NONE"; then
1592 quagga_statedir_prefix="";
1594 quagga_statedir_prefix=${prefix}
1596 if test "${localstatedir}" = '${prefix}/var'; then
1597 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1598 ${quagga_statedir_prefix}/var/adm dnl
1599 ${quagga_statedir_prefix}/etc dnl
1605 test -d $QUAGGA_STATE_DIR && break
1607 quagga_statedir=$QUAGGA_STATE_DIR
1609 quagga_statedir=${localstatedir}
1611 if test $quagga_statedir = "/dev/null"; then
1612 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1614 AC_MSG_RESULT(${quagga_statedir})
1615 AC_SUBST(quagga_statedir)
1617 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1618 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1619 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1620 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1621 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1622 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1623 AC_DEFINE_UNQUOTED(PATH_BABELD_PID, "$quagga_statedir/babeld.pid",babeld PID)
1624 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1625 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1626 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1627 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1628 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1629 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1630 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1631 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1632 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1633 AC_DEFINE_UNQUOTED(BABEL_VTYSH_PATH, "$quagga_statedir/babeld.vty",babeld vty socket)
1634 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1635 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1637 dnl -------------------------------
1638 dnl Quagga sources should always be
1639 dnl current wrt interfaces. Dont
1640 dnl allow deprecated interfaces to
1642 dnl -------------------------------
1643 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1645 dnl ---------------------------
1646 dnl Check htonl works correctly
1647 dnl ---------------------------
1648 AC_MSG_CHECKING(for working htonl)
1649 AC_CACHE_VAL(ac_cv_htonl_works,
1650 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1651 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1654 AC_MSG_RESULT($ac_cv_htonl_works)
1656 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1657 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1658 ospf6d/Makefile isisd/Makefile babeld/Makefile vtysh/Makefile
1659 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
1665 isisd/topology/Makefile
1666 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1667 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1668 AC_CONFIG_FILES([solaris/Makefile])
1670 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1671 ## Hack, but working solution to avoid rebuilding of quagga.info.
1672 ## It's already in CVS until texinfo 4.7 is more common.
1676 Quagga configuration
1677 --------------------
1678 quagga version : ${PACKAGE_VERSION}
1679 host operating system : ${host_os}
1680 source code location : ${srcdir}
1682 compiler flags : ${CFLAGS}
1684 includes : ${INCLUDES}
1685 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1686 state file directory : ${quagga_statedir}
1687 config file directory : `eval echo \`echo ${sysconfdir}\``
1688 example directory : `eval echo \`echo ${exampledir}\``
1689 user to run as : ${enable_user}
1690 group to run as : ${enable_group}
1691 group for vty sockets : ${enable_vty_group}
1692 config file mask : ${enable_configfile_mask}
1693 log file mask : ${enable_logfile_mask}
1695 The above user and group must have read/write access to the state file
1696 directory and to the config files in the config file directory."
1698 if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1699 Warning: The ${MAKE-make} programme detected, either in your path or
1700 via the MAKE variable, is not GNU Make. GNU make may be installed as
1701 gmake on some systems. and is required to complete a build of Quagga