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>
8 ## $Id: configure.ac,v 1.94 2005/03/28 15:29:07 hasso Exp $
11 AC_INIT(Quagga, 0.99.0, [http://bugzilla.quagga.net])
12 AC_CONFIG_SRCDIR(lib/zebra.h)
14 AM_CONFIG_HEADER(config.h)
16 dnl default is to match previous behavior
17 exampledir=${sysconfdir}
18 AC_ARG_ENABLE([exampledir],
19 AC_HELP_STRING([--enable-exampledir],
20 [specify alternate directory for examples]),
21 exampledir="$enableval",)
22 dnl XXX add --exampledir to autoconf standard directory list somehow
25 dnl default is to match previous behavior
28 AC_ARG_ENABLE([pkgsrcrcdir],
29 AC_HELP_STRING([--enable-pkgsrcrcdir],
30 [specify directory for rc.d scripts]),
31 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
32 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
36 dnl -----------------------------------
37 dnl Get hostname and other information.
38 dnl -----------------------------------
45 [ --with-cflags Set CFLAGS for use in compilation.])
46 if test "x$with_cflags" != "x" ; then
47 CFLAGS="$with_cflags" ; cflags_specified=yes ;
48 elif test -n "$CFLAGS" ; then
49 cflags_specified=yes ;
52 dnl --------------------
53 dnl Check CC and friends
54 dnl --------------------
59 dnl ------------------------------------------------------------------
60 dnl Intel compiler check. Although Intel tries really hard to make icc
61 dnl look like gcc, there are some differences. It's very verbose with
62 dnl -Wall and it doesn't support the individual -W options.
63 dnl ------------------------------------------------------------------
64 AC_MSG_CHECKING([whether we are using the Intel compiler])
65 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
72 dnl ---------------------------------------------
73 dnl If CLFAGS doesn\'t exist set default value
74 dnl AC_PROG_CC will have set minimal default
75 dnl already, eg "-O2 -g" for gcc, "-g" for others
76 dnl (Wall is gcc specific... have to make sure
77 dnl gcc is being used before setting it)
78 dnl Intel icc 8.0 also sets __GNUC__, but
79 dnl doesn't support all these fancy -W options.
80 dnl ---------------------------------------------
82 if test "x$cflags_specified" = "x" ; then
83 if test "x${GCC}" = "xyes" && test "x${ICC}" = "xno"; then
84 CFLAGS="-Os -g -Wall -Wsign-compare -Wpointer-arith"
85 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
87 # TODO: conditionally addd -Wpacked if handled
90 dnl ---------------------------------------------------------------------
91 dnl Intel compiler warnings we ignore:
92 dnl 279: controlling expression is constant.
93 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
94 dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
96 dnl 981: operands are evaluated in unspecified order.
97 dnl ---------------------------------------------------------------------
99 if test "$ICC" = "yes"; then
100 CFLAGS="-Os -g -Wall -wd 279,869,981"
108 AC_CHECK_TOOL(AR, ar)
109 AC_CHECK_TOOL(RANLIB, ranlib, :)
121 dnl ----------------------
122 dnl Packages configuration
123 dnl ----------------------
125 [ --enable-vtysh include integrated vty shell for Quagga])
127 [ --disable-ipv6 turn off IPv6 related features and daemons])
129 [ --disable-zebra do not build zebra daemon])
131 [ --disable-bgpd do not build bgpd])
133 [ --disable-ripd do not build ripd])
134 AC_ARG_ENABLE(ripngd,
135 [ --disable-ripngd do not build ripngd])
137 [ --disable-ospfd do not build ospfd])
138 AC_ARG_ENABLE(ospf6d,
139 [ --disable-ospf6d do not build ospf6d])
140 AC_ARG_ENABLE(watchquagga,
141 [ --disable-watchquagga do not build watchquagga])
143 [ --enable-isisd build isisd])
144 AC_ARG_ENABLE(bgp-announce,
145 [ --disable-bgp-announce, turn off BGP route announcement])
146 AC_ARG_ENABLE(netlink,
147 [ --enable-netlink force to use Linux netlink interface])
148 AC_ARG_ENABLE(broken-aliases,
149 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
151 [ --enable-snmp enable SNMP support])
153 [ --with-libpam use libpam for PAM support in vtysh])
154 AC_ARG_ENABLE(tcp-zebra,
155 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
156 AC_ARG_ENABLE(opaque-lsa,
157 [ --enable-opaque-lsa enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
158 AC_ARG_ENABLE(ospfapi,
159 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database,
160 (this is the default if --enable-opaque-lsa is not set)])
161 AC_ARG_ENABLE(ospfclient,
162 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
163 (this is the default if --disable-ospfapi is set)])
164 AC_ARG_ENABLE(ospf-te,
165 [ --enable-ospf-te enable Traffic Engineering Extension to OSPF])
166 AC_ARG_ENABLE(multipath,
167 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
168 AC_ARG_ENABLE(quagga_user,
169 [ --enable-user=ARG user to run Quagga suite as (default quagga)])
170 AC_ARG_ENABLE(quagga_group,
171 [ --enable-group=ARG group to run Quagga suite as (default quagga)])
172 AC_ARG_ENABLE(vty_group,
173 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
174 AC_ARG_ENABLE(configfile_mask,
175 [ --enable-configfile-mask=ARG set mask for config files])
176 AC_ARG_ENABLE(logfile_mask,
177 [ --enable-logfile-mask=ARG set mask for log files])
180 [ --disable-rtadv disable IPV6 router advertisement feature])
182 [ --enable-irdp enable IRDP server support in zebra])
183 AC_ARG_ENABLE(capabilities,
184 [ --disable-capabilities disable using POSIX capabilities])
185 AC_ARG_ENABLE(gcc_ultra_verbose,
186 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
187 AC_ARG_ENABLE(gcc-rdynamic,
188 [ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
190 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
191 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
192 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
193 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
194 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
197 if test x"${enable_gcc_rdynamic}" = x"yes" ; then
198 LDFLAGS="${LDFLAGS} -rdynamic"
201 if test "${enable_broken_aliases}" = "yes"; then
202 if test "${enable_netlink}" = "yes"
204 echo "Sorry, you can't use netlink with broken aliases"
207 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
211 if test "${enable_tcp_zebra}" = "yes"; then
212 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
215 if test "${enable_opaque_lsa}" = "yes"; then
216 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
219 if test "${enable_ospf_te}" = "yes"; then
220 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
221 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
224 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
225 if test "${enable_rtadv}" != "no"; then
227 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
232 if test "${enable_irdp}" = "yes"; then
233 AC_DEFINE(HAVE_IRDP,, IRDP )
236 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
238 elif test "${enable_user}" = "no"; then
241 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
243 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
244 enable_group="quagga"
245 elif test "${enable_group}" = "no"; then
248 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
250 if test x"${enable_vty_group}" = x"yes" ; then
251 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
252 elif test x"${enable_vty_group}" != x""; then
253 if test x"${enable_vty_group}" != x"no"; then
254 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
258 enable_configfile_mask=${enable_configfile_mask:-0600}
259 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
261 enable_logfile_mask=${enable_logfile_mask:-0600}
262 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
268 case "${enable_multipath}" in
270 MULTIPATH_NUM="${enable_multipath}"
275 echo "Please specify digit to --enable-multipath ARG."
282 AC_SUBST(MULTIPATH_NUM)
284 dnl -------------------
285 dnl Check header files.
286 dnl -------------------
288 AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
289 sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
290 sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
293 AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
294 net/if_dl.h net/netopt.h inet/nd.h net/route.h \
295 net/if.h net/if_var.h netinet/in_var.h])
297 dnl V6 headers are checked below, after we check for v6
304 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
306 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
308 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
309 AC_DEFINE(SUNOS_5, 1, SunOS 5)
310 AC_CHECK_LIB(xnet, main)
313 [*-sunos5.[8-9]] | [*-sunos5.1[0-9]] \
314 | [*-solaris2.[8-9]] | [*-solaris2.1[0-9]])
316 AC_DEFINE(SUNOS_59,,SunOS 5.8 up)
317 AC_DEFINE(SUNOS_5, 1, SunOS 5)
318 AC_CHECK_LIB(socket, main)
319 AC_CHECK_LIB(nsl, main)
322 *-sunos5* | *-solaris2*)
323 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
324 AC_CHECK_LIB(socket, main)
325 AC_CHECK_LIB(nsl, main)
330 AC_DEFINE(GNU_LINUX,,GNU Linux)
333 AC_CHECK_LIB(nsl, gethostbyname)
334 AC_CHECK_LIB(socket, socket)
337 AC_DEFINE(FREEBSD_32,,FreeBSD 3.2)
341 AC_DEFINE(OPEN_BSD,,OpenBSD)
345 OTHER_METHOD="mtu_kvm.o"
346 AC_CHECK_LIB(kvm, main)
350 AC_DEFINE(IRIX_65,,IRIX 6.5)
354 dnl ---------------------
355 dnl Integrated VTY option
356 dnl ---------------------
357 case "${enable_vtysh}" in
358 "yes") VTYSH="vtysh";
359 AC_DEFINE(VTYSH,,VTY shell)
360 AC_PATH_PROG(PERL, perl)
361 dnl Vtysh uses libreadline, which looks for termcap functions at
362 dnl configure time. We follow readline's search order.
363 dnl The required procedures are in libtermcap on NetBSD, in
364 dnl [TODO] on Linux, and in [TODO] on Solaris.
365 AC_CHECK_LIB(termcap, tputs, ,
366 AC_CHECK_LIB(tinfo, tputs, ,
367 AC_CHECK_LIB(curses, tputs, ,
368 AC_CHECK_LIB(ncurses, tputs))))
369 AC_CHECK_LIB(readline, main)
370 if test $ac_cv_lib_readline_main = no; then
371 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
373 AC_CHECK_HEADER(readline/history.h)
374 if test $ac_cv_header_readline_history_h = no;then
375 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
377 AC_CHECK_LIB(readline, rl_completion_matches)
378 if test $ac_cv_lib_readline_rl_completion_matches = no; then
379 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
389 if test "$with_libpam" = "yes"; then
390 AC_CHECK_HEADER(security/pam_misc.h)
391 if test "$ac_cv_header_security_pam_misc_h" = yes; then
392 AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
393 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
394 pam_conv_func="misc_conv"
396 AC_CHECK_HEADER(security/openpam.h)
397 if test "$ac_cv_header_security_openpam_h" = yes; then
398 AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
399 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
400 pam_conv_func="openpam_ttyconv"
402 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
403 AC_MSG_WARN([*** pam support will not be built ***])
408 if test "$with_libpam" = "yes"; then
409 dnl took this test from proftpd's configure.in and suited to our needs
410 dnl -------------------------------------------------------------------------
412 dnl This next check looks funky due to a linker problem with some versions
413 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
414 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
415 dnl with RedHat 6.2 and Debian 2.2 or better.
416 AC_CHECK_LIB(pam, pam_start,
417 [AC_CHECK_LIB(pam, $pam_conv_func,
418 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
420 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
421 LIBPAM="-lpam -lpam_misc"]
425 [AC_CHECK_LIB(pam, pam_end,
426 [AC_CHECK_LIB(pam, $pam_conv_func,
427 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
428 LIBPAM="-lpam -ldl"],
429 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
430 LIBPAM="-lpam -ldl -lpam_misc"]
432 ],AC_MSG_WARN([*** pam support will not be built ***]),
439 dnl -------------------------------
440 dnl Endian-ness check
441 dnl -------------------------------
444 dnl -------------------------------
445 dnl check the size in byte of the C
446 dnl -------------------------------
447 dnl AC_CHECK_SIZEOF(char)
448 dnl AC_CHECK_SIZEOF(int)
449 dnl AC_CHECK_SIZEOF(short)
450 dnl AC_CHECK_SIZEOF(long)
452 dnl ----------------------------
453 dnl check existance of functions
454 dnl ----------------------------
455 AC_CHECK_FUNCS(memset memcpy strerror inet_aton daemon snprintf vsnprintf \
456 strlcat strlcpy if_nametoindex if_indextoname getifaddrs \
458 AC_CHECK_FUNCS(setproctitle, ,
459 [AC_CHECK_LIB(util, setproctitle,
461 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
467 dnl ------------------------------------
468 dnl Determine routing get and set method
469 dnl ------------------------------------
470 AC_MSG_CHECKING(zebra between kernel interface method)
471 if test x"$opsys" = x"gnu-linux"; then
472 if test "${enable_netlink}" = "yes";then
473 AC_MSG_RESULT(netlink)
474 RT_METHOD=rt_netlink.o
475 AC_DEFINE(HAVE_NETLINK,,netlink)
477 elif test "${enable_netlink}" = "no"; then
482 AC_MSG_RESULT(netlink)
483 RT_METHOD=rt_netlink.o
484 AC_DEFINE(HAVE_NETLINK,,netlink)
487 elif test x"$opsys" = x"sol2-6";then
488 AC_MSG_RESULT(Route socket)
489 KERNEL_METHOD="kernel_socket.o"
490 RT_METHOD="rt_socket.o"
491 elif test x"$opsys" = x"sol8";then
492 AC_MSG_RESULT(Route socket)
493 KERNEL_METHOD="kernel_socket.o"
494 RT_METHOD="rt_socket.o"
495 elif test "$opsys" = "irix" ; then
496 AC_MSG_RESULT(Route socket)
497 KERNEL_METHOD="kernel_socket.o"
498 RT_METHOD="rt_socket.o"
500 AC_TRY_RUN([#include <errno.h>
501 #include <sys/types.h>
502 #include <sys/socket.h>
508 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
509 if (ac_sock < 0 && errno == EINVAL)
513 [KERNEL_METHOD=kernel_socket.o
514 RT_METHOD=rt_socket.o
515 AC_MSG_RESULT(socket)],
516 [RT_METHOD=rt_ioctl.o
517 AC_MSG_RESULT(ioctl)],
518 [KERNEL_METHOD=kernel_socket.o
519 RT_METHOD=rt_socket.o
520 AC_MSG_RESULT(socket)])
523 AC_SUBST(KERNEL_METHOD)
524 AC_SUBST(OTHER_METHOD)
526 dnl ------------------------------------
527 dnl check for broken CMSG_FIRSTHDR macro
528 dnl ------------------------------------
529 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
533 #define __EXTENSIONS__
536 #include <sys/types.h>
537 #include <sys/socket.h>
544 msg.msg_control = buf;
545 msg.msg_controllen = 0;
547 if (CMSG_FIRSTHDR(&msg) != NULL)
550 }],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
553 dnl ------------------------------
554 dnl check kernel route read method
555 dnl ------------------------------
556 AC_CACHE_CHECK(route read method check, zebra_rtread,
557 [if test "$netlink" = yes; then
558 RTREAD_METHOD="rtread_netlink.o"
559 zebra_rtread="netlink"
561 for zebra_rtread in /proc/net/route /dev/ip /dev/null;
563 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
565 case $zebra_rtread in
566 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
567 zebra_rtread="proc";;
570 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
571 zebra_rtread="sysctl";;
572 *) RTREAD_METHOD="rtread_getmsg.o"
573 zebra_rtread="getmsg";;
575 *) RTREAD_METHOD="rtread_sysctl.o"
576 zebra_rtread="sysctl";;
579 AC_SUBST(RTREAD_METHOD)
581 dnl -----------------------------
582 dnl check interface lookup method
583 dnl -----------------------------
585 AC_MSG_CHECKING(interface looking up method)
586 if test "$netlink" = yes; then
587 AC_MSG_RESULT(netlink)
588 IF_METHOD=if_netlink.o
589 elif test "$opsys" = "sol2-6";then
590 AC_MSG_RESULT(Solaris GIF)
592 elif test "$opsys" = "sol8";then
593 AC_MSG_RESULT(Solaris GLIF)
594 IF_METHOD=if_ioctl_solaris.o
595 IOCTL_METHOD=ioctl_solaris.o
596 elif test "$opsys" = "irix" ; then
599 elif test "$opsys" = "openbsd";then
600 AC_MSG_RESULT(openbsd)
602 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
603 AC_MSG_RESULT(sysctl)
604 IF_METHOD=if_sysctl.o
605 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
611 AC_SUBST(IOCTL_METHOD)
613 dnl -----------------------
614 dnl check proc file system.
615 dnl -----------------------
616 if test -r /proc/net/dev; then
617 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
621 if test -r /proc/net/if_inet6; then
622 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
627 dnl -----------------------------
628 dnl check ipforward detect method
629 dnl -----------------------------
630 AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
631 [for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
633 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
635 case $zebra_ipforward_path in
636 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
637 zebra_ipforward_path="proc";;
640 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
641 zebra_ipforward_path="ews";;
642 *-freebsd*) IPFORWARD=ipforward_sysctl.o
643 zebra_ipforward_path="sysctl";;
644 *) IPFORWARD=ipforward_solaris.o
645 zebra_ipforward_path="solaris";;
647 *) IPFORWARD=ipforward_sysctl.o
648 zebra_ipforward_path="sysctl";;
652 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
657 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
658 if test "${enable_ipv6}" = "no"; then
659 AC_MSG_RESULT(disabled)
664 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
666 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
667 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
671 AC_MSG_RESULT(INRIA IPv6)
675 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
677 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
678 AC_DEFINE(KAME,1,KAME IPv6)
681 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
682 LIB_IPV6="-L/usr/local/v6/lib -linet6"
685 dnl -------------------------
687 dnl default host check
688 dnl It is not used by Kheops
689 dnl -------------------------
690 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
692 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
693 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
694 AC_DEFINE(KAME,1,KAME IPv6 stack)
697 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
698 LIB_IPV6="-L/usr/local/v6/lib -linet6"
700 AC_MSG_RESULT(MUSICA)
704 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
706 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
710 if test x"$opsys" = x"bsdi";then
711 AC_DEFINE(BSDI_NRL,,BSDI)
712 AC_MSG_RESULT(BSDI_NRL)
716 dnl ------------------------------------
717 dnl Solaris 9, 10 and potentially higher
718 dnl ------------------------------------
719 elif test x"$opsys" = x"sol8"; then
721 AC_DEFINE(HAVE_IPV6, 1, IPv6)
722 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
725 AC_MSG_RESULT(Solaris IPv6)
729 elif test "${enable_ipv6}" = "yes"; then
731 #include <linux/version.h>
732 /* 2.1.128 or later */
733 #if LINUX_VERSION_CODE >= 0x020180
737 zebra_cv_linux_ipv6=yes
738 AC_MSG_RESULT(Linux IPv6)])
740 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
743 zebra_cv_linux_ipv6=yes
744 AC_MSG_RESULT(Linux IPv6)
748 if test "$zebra_cv_linux_ipv6" = "yes";then
749 AC_MSG_CHECKING(for GNU libc >= 2.1)
750 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
752 #include <features.h>
753 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
757 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
763 if test "$glibc" != "yes"; then
764 INCLUDES="-I/usr/inet6/include"
765 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
766 LIB_IPV6="-L/usr/inet6/lib -linet6"
771 dnl -----------------------
772 dnl Set IPv6 related values
773 dnl -----------------------
774 LIBS="$LIB_IPV6 $LIBS"
777 if test x"$RIPNGD" = x""; then
778 AC_MSG_RESULT(IPv4 only)
782 dnl ------------------
783 dnl IPv6 header checks
784 dnl ------------------
785 if test "x${zebra_cv_ipv6}" = "xyes"; then
786 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
787 netinet6/in6_var.h netinet6/nd6.h])
790 dnl --------------------
791 dnl Daemon disable check
792 dnl --------------------
793 if test "${enable_zebra}" = "no";then
799 if test "${enable_bgpd}" = "no";then
805 if test "${enable_ripd}" = "no";then
811 if test "${enable_ospfd}" = "no";then
817 if test "${enable_watchquagga}" = "no";then
820 WATCHQUAGGA="watchquagga"
824 if test "${enable_opaque_lsa}" = "yes"; then
825 if test "${enable_ospfapi}" != "no";then
826 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
828 if test "${enable_ospfclient}" != "no";then
829 OSPFCLIENT="ospfclient"
835 case "${enable_ripngd}" in
836 "yes") RIPNGD="ripngd";;
841 case "${enable_ospf6d}" in
842 "yes") OSPF6D="ospf6d";;
847 case "${enable_isisd}" in
848 "yes") ISISD="isisd";;
853 if test "${enable_bgp_announce}" = "no";then
854 AC_DEFINE(DISABLE_BGP_ANNOUNCE,,Disable BGP installation to zebra)
863 AC_SUBST(WATCHQUAGGA)
870 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
871 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
872 AC_CHECK_LIB(crypt, crypt)
873 AC_CHECK_LIB(resolv, res_init)
874 AC_CHECK_LIB(m, main)
876 dnl ---------------------------------------------------
877 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
878 dnl ---------------------------------------------------
879 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
880 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
881 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
883 dnl ---------------------------
884 dnl check system has GNU regexp
885 dnl ---------------------------
886 dnl AC_MSG_CHECKING(whether system has GNU regex)
887 AC_CHECK_LIB(c, regexec,
888 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
890 [LIB_REGEX="regex.o"])
893 dnl ------------------
894 dnl check SNMP library
895 dnl ------------------
896 if test "${enable_snmp}" = "yes";then
897 dnl AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
898 if test "${HAVE_SNMP}" = ""; then
901 unset ac_cv_lib_snmp_asn_parse_int
902 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
903 if test "${NEED_CRYPTO}" = ""; then
904 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes ])
906 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes; NEED_CRYPTO=yes;LIBS="$LIBS -lcrypto" ],,"-lcrypto")
910 if test "${HAVE_SNMP}" = ""; then
913 unset ac_cv_lib_snmp_asn_parse_int
914 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes, )
915 if test "${HAVE_SNMP}" = ""; then
916 unset ac_cv_lib_snmp_asn_parse_int
917 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
918 if test "${NEED_CRYPTO}" = "yes"; then
919 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
925 if test "${HAVE_SNMP}" = ""; then
927 LIBS="-L/usr/local/lib"
928 unset ac_cv_lib_snmp_asn_parse_int
929 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
930 if test "${HAVE_SNMP}" = ""; then
931 unset ac_cv_lib_snmp_asn_parse_int
932 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
933 if test "${NEED_CRYPTO}" = "yes"; then
934 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
940 if test "${HAVE_SNMP}" = "yes"; then
941 for ac_snmp in /usr/include/net-snmp/library/asn1.h /usr/include/ucd-snmp/asn1.h /usr/local/include/ucd-snmp/asn1.h /dev/null
943 test -f "${ac_snmp}" && break
947 /usr/include/net-snmp/*)
948 AC_DEFINE(HAVE_SNMP,,SNMP)
949 AC_DEFINE(HAVE_NETSNMP,,SNMP)
950 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
951 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/include/net-snmp -I/usr/include/net-snmp/library"
952 if test "${HAVE_NETSNMP}" = "yes"; then
953 LIBS="${LIBS} -lnetsnmp"
955 LIBS="${LIBS} -lsnmp"
958 /usr/include/ucd-snmp/*)
959 AC_DEFINE(HAVE_SNMP,,SNMP)
960 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/include/ucd-snmp"
961 LIBS="${LIBS} -lsnmp"
963 /usr/local/include/ucd-snmp/*)
964 AC_DEFINE(HAVE_SNMP,,SNMP)
965 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/local/include/ucd-snmp"
966 LIBS="${LIBS} -L/usr/local/lib -lsnmp"
968 /usr/local/include/net-snmp/*)
969 AC_DEFINE(HAVE_SNMP,,SNMP)
970 AC_DEFINE(HAVE_NET_SNMP,,SNMP)
971 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
972 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/local/include/net-snmp"
973 LIBS="${LIBS} -L/usr/local/lib -lnetsnmp"
976 if test "${NEED_CRYPTO}" = "yes"; then
977 LIBS="${LIBS} -lcrypto"
982 if test "${enable_snmp}" = "yes" -a "${HAVE_SNMP}" != "yes"; then
983 AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])
986 AC_SUBST(SNMP_INCLUDES)
988 dnl ----------------------------
989 dnl check sa_len of sockaddr
990 dnl ----------------------------
991 AC_MSG_CHECKING(whether struct sockaddr has a sa_len field)
992 AC_TRY_COMPILE([#include <sys/types.h>
993 #include <sys/socket.h>
994 ],[static struct sockaddr ac_i;int ac_j = sizeof (ac_i.sa_len);],
996 AC_DEFINE(HAVE_SA_LEN,,sa_len)],
999 dnl ----------------------------
1000 dnl check sin_len of sockaddr_in
1001 dnl ----------------------------
1002 AC_MSG_CHECKING(whether struct sockaddr_in has a sin_len field)
1003 AC_TRY_COMPILE([#include <sys/types.h>
1004 #include <netinet/in.h>
1005 ],[static struct sockaddr_in ac_i;int ac_j = sizeof (ac_i.sin_len);],
1007 AC_DEFINE(HAVE_SIN_LEN,,sin_len)],
1010 dnl ----------------------------
1011 dnl check sun_len of sockaddr_un
1012 dnl ----------------------------
1013 AC_MSG_CHECKING(whether struct sockaddr_un has a sun_len field)
1014 AC_TRY_COMPILE([#include <sys/types.h>
1016 ],[static struct sockaddr_un ac_i;int ac_j = sizeof (ac_i.sun_len);],
1018 AC_DEFINE(HAVE_SUN_LEN,,sun_len)],
1021 dnl -----------------------------------
1022 dnl check sin6_scope_id of sockaddr_in6
1023 dnl -----------------------------------
1024 if test "$zebra_cv_ipv6" = yes; then
1025 AC_MSG_CHECKING(whether struct sockaddr_in6 has a sin6_scope_id field)
1026 AC_TRY_COMPILE([#include <sys/types.h>
1027 #include <netinet/in.h>
1028 ],[static struct sockaddr_in6 ac_i;int ac_j = sizeof (ac_i.sin6_scope_id);],
1030 AC_DEFINE(HAVE_SIN6_SCOPE_ID,,scope id)],
1034 dnl ----------------------------
1035 dnl check socklen_t exist or not
1036 dnl ----------------------------
1037 AC_MSG_CHECKING(whther socklen_t is defined)
1038 AC_TRY_COMPILE([#include <sys/types.h>
1039 #include <sys/socket.h>
1040 #include <netinet/in.h>
1041 ],[socklen_t ac_x;],
1043 AC_DEFINE(HAVE_SOCKLEN_T,,socklen_t)],
1046 dnl ------------------------
1047 dnl check struct sockaddr_dl
1048 dnl ------------------------
1049 AC_MSG_CHECKING(whether struct sockaddr_dl exist)
1050 AC_EGREP_HEADER(sockaddr_dl,
1053 AC_DEFINE(HAVE_SOCKADDR_DL,,sockaddr_dl)],
1056 dnl --------------------------
1057 dnl check structure ifaliasreq
1058 dnl --------------------------
1059 AC_MSG_CHECKING(whether struct ifaliasreq exist)
1060 AC_EGREP_HEADER(ifaliasreq,
1063 AC_DEFINE(HAVE_IFALIASREQ,,ifaliasreq)],
1066 dnl ----------------------------
1067 dnl check structure in6_aliasreq
1068 dnl ----------------------------
1069 AC_MSG_CHECKING(whether struct in6_aliasreq exist)
1070 AC_EGREP_HEADER(in6_aliasreq,
1073 AC_DEFINE(HAVE_IN6_ALIASREQ,,in6_aliasreq)],
1076 dnl -----------------------------------
1077 dnl check ifra_lifetime of in6_aliasreq
1078 dnl -----------------------------------
1079 AC_MSG_CHECKING(whether in6_aliasreq.ifra_lifetime exist)
1080 AC_TRY_COMPILE([#include <sys/types.h>
1081 #include <netinet6/in6_var.h>
1082 ],[static struct if6_aliasreq ac_i;int ac_j = sizeof (ac_i.ifra_lifetime);],
1084 AC_DEFINE(HAVE_IFRA_LIFETIME,,Have in6_aliasreq.ifra_lifetime)],
1087 dnl ---------------------------
1088 dnl check structure rt_addrinfo
1089 dnl ---------------------------
1090 AC_MSG_CHECKING(whether struct rt_addrinfo exist)
1091 AC_EGREP_HEADER(rt_addrinfo,
1094 AC_DEFINE(HAVE_RT_ADDRINFO,,rt_addrinfo)],
1097 dnl --------------------------
1098 dnl check structure in_pktinfo
1099 dnl --------------------------
1100 AC_MSG_CHECKING(whether struct in_pktinfo exist)
1101 AC_TRY_COMPILE([#include <netinet/in.h>
1102 ],[struct in_pktinfo ac_x;],
1104 AC_DEFINE(HAVE_INPKTINFO,,in_pktinfo)],
1107 dnl ----------------------------------
1108 dnl check struct nd_opt_homeagent_info
1109 dnl ----------------------------------
1110 AC_MSG_CHECKING(whether struct nd_opt_homeagent_info exist)
1111 AC_EGREP_HEADER(nd_opt_homeagent_info,
1114 AC_DEFINE(HAVE_ND_OPT_HOMEAGENT_INFO,,nd_opt_homeagent_info)],
1117 dnl --------------------------------
1118 dnl check struct nd_opt_adv_interval
1119 dnl --------------------------------
1120 AC_MSG_CHECKING(whether struct nd_opt_adv_interval exist)
1121 AC_EGREP_HEADER(nd_opt_adv_interval,
1124 AC_DEFINE(HAVE_ND_OPT_ADV_INTERVAL,,nd_opt_adv_interval)],
1127 dnl ------------------------------------
1128 dnl check fields in nd_opt_adv_interval
1129 dnl ------------------------------------
1130 AC_MSG_CHECKING(whether nd_opt_ai_type field exist)
1131 AC_EGREP_HEADER(nd_opt_ai_type,
1134 AC_DEFINE(HAVE_ND_OPT_ADV_INTERVAL_AI_FIELDS,,nd_opt_ai_type)],
1137 dnl --------------------------------------
1138 dnl checking for getrusage struct and call
1139 dnl --------------------------------------
1140 AC_MSG_CHECKING(whether getrusage is available)
1141 AC_TRY_COMPILE([#include <sys/resource.h>
1142 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1144 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1147 dnl -------------------
1148 dnl capabilities checks
1149 dnl -------------------
1150 if test "${enable_capabilities}" != "no"; then
1151 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1152 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1154 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1155 quagga_ac_keepcaps="yes"],
1158 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1159 AC_CHECK_HEADERS(sys/capability.h)
1161 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1162 AC_CHECK_LIB(cap, cap_init,
1163 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1171 dnl -------------------
1172 dnl test for ucontext.h
1173 dnl -------------------
1174 AC_CHECK_HEADERS(ucontext.h)
1176 dnl ---------------------------
1177 dnl check for glibc 'backtrace'
1178 dnl ---------------------------
1179 if test "${glibc}" = "yes"; then
1180 AC_CHECK_HEADER(execinfo.h)
1182 if test x"${ac_cv_header_execinfo_h}" = x"yes"; then
1183 AC_CHECK_FUNC(backtrace,
1184 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)]
1191 CONFDATE=`date '+%Y%m%d'`
1194 dnl ------------------------------
1195 dnl set paths for state directory
1196 dnl ------------------------------
1197 if test "${prefix}" = "NONE"; then
1198 quagga_statedir_prefix="";
1200 quagga_statedir_prefix=${prefix}
1202 if test "${localstatedir}" = '${prefix}/var'; then
1203 AC_CACHE_CHECK(state directory,ac_statedir,
1204 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1205 ${quagga_statedir_prefix}/var/adm dnl
1206 ${quagga_statedir_prefix}/etc dnl
1212 test -d $QUAGGA_STATE_DIR && break
1214 quagga_statedir=$QUAGGA_STATE_DIR])
1216 quagga_statedir=${localstatedir}
1217 AC_MSG_CHECKING(directory to use for state file)
1218 AC_MSG_RESULT(${quagga_statedir})
1220 if test $quagga_statedir = "/dev/null"; then
1221 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1224 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1225 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1226 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1227 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1228 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1229 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1230 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1231 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1232 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1233 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1234 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1235 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1236 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1237 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1238 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1239 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1240 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1242 dnl ---------------------------
1243 dnl Check htonl works correctly
1244 dnl ---------------------------
1245 AC_MSG_CHECKING(for working htonl)
1246 AC_CACHE_VAL(ac_cv_htonl_works, [
1247 AC_TRY_LINK([#ifdef HAVE_SYS_TYPES_H
1248 #include <sys/types.h>
1253 #ifdef HAVE_NETINET_IN_H
1254 #include <netinet/in.h>
1257 ac_cv_htonl_works=yes,
1258 ac_cv_htonl_works=no)])
1259 AC_MSG_RESULT($ac_cv_htonl_works)
1261 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1262 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1263 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1264 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
1269 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1270 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1271 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1272 ## Hack, but working solution to avoid rebuilding of quagga.info.
1273 ## It's already in CVS until texinfo 4.7 is more common.
1274 AC_CONFIG_COMMANDS([info-time],[touch doc/quagga.info])
1278 Quagga configuration
1279 --------------------
1280 quagga version : ${PACKAGE_VERSION}
1281 host operationg system : ${host_os}
1282 source code location : ${srcdir}
1284 compiler flags : ${CFLAGS}
1285 includes : ${INCLUDES} ${SNMP_INCLUDES}
1286 linker flags : ${LDFLAGS} ${LIBS}
1287 state file directory : ${quagga_statedir}
1288 config file directory : `eval echo \`echo ${sysconfdir}\``
1289 example directory : `eval echo \`echo ${exampledir}\``
1290 user to run as : ${enable_user}
1291 group to run as : ${enable_group}
1292 group for vty sockets : ${enable_vty_group}
1293 config file mask : ${enable_configfile_mask}
1294 log file mask : ${enable_logfile_mask}
1296 The above user and group must have read/write access to the state file
1297 directory and to the config files in the config file directory.