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.97 2005/04/03 13:07:21 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(isis_topology,
184 [ --enable-isis-topology enable IS-IS topology generator])
185 AC_ARG_ENABLE(capabilities,
186 [ --disable-capabilities disable using POSIX capabilities])
187 AC_ARG_ENABLE(gcc_ultra_verbose,
188 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
189 AC_ARG_ENABLE(gcc-rdynamic,
190 [ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
192 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
193 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
194 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
195 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
196 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
199 if test x"${enable_gcc_rdynamic}" = x"yes" ; then
200 LDFLAGS="${LDFLAGS} -rdynamic"
203 if test "${enable_broken_aliases}" = "yes"; then
204 if test "${enable_netlink}" = "yes"
206 echo "Sorry, you can't use netlink with broken aliases"
209 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
213 if test "${enable_tcp_zebra}" = "yes"; then
214 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
217 if test "${enable_opaque_lsa}" = "yes"; then
218 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
221 if test "${enable_ospf_te}" = "yes"; then
222 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
223 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
226 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
227 if test "${enable_rtadv}" != "no"; then
229 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
234 if test "${enable_irdp}" = "yes"; then
235 AC_DEFINE(HAVE_IRDP,, IRDP )
238 if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
239 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
240 ISIS_TOPOLOGY_INCLUDES="-I./topology"
241 ISIS_TOPOLOGY_DIR="topology"
242 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
245 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
246 AC_SUBST(ISIS_TOPOLOGY_DIR)
247 AC_SUBST(ISIS_TOPOLOGY_LIB)
249 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
251 elif test "${enable_user}" = "no"; then
254 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
256 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
257 enable_group="quagga"
258 elif test "${enable_group}" = "no"; then
261 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
263 if test x"${enable_vty_group}" = x"yes" ; then
264 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
265 elif test x"${enable_vty_group}" != x""; then
266 if test x"${enable_vty_group}" != x"no"; then
267 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
271 enable_configfile_mask=${enable_configfile_mask:-0600}
272 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
274 enable_logfile_mask=${enable_logfile_mask:-0600}
275 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
281 case "${enable_multipath}" in
283 MULTIPATH_NUM="${enable_multipath}"
288 echo "Please specify digit to --enable-multipath ARG."
295 AC_SUBST(MULTIPATH_NUM)
297 dnl -------------------
298 dnl Check header files.
299 dnl -------------------
301 AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
302 sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
303 sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
306 AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
307 net/if_dl.h net/netopt.h inet/nd.h net/route.h \
308 net/if.h net/if_var.h netinet/in_var.h])
310 dnl V6 headers are checked below, after we check for v6
317 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
319 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
321 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
322 AC_DEFINE(SUNOS_5, 1, SunOS 5)
323 AC_CHECK_LIB(xnet, main)
326 [*-sunos5.[8-9]] | [*-sunos5.1[0-9]] \
327 | [*-solaris2.[8-9]] | [*-solaris2.1[0-9]])
329 AC_DEFINE(SUNOS_59,,SunOS 5.8 up)
330 AC_DEFINE(SUNOS_5, 1, SunOS 5)
331 AC_CHECK_LIB(socket, main)
332 AC_CHECK_LIB(nsl, main)
335 *-sunos5* | *-solaris2*)
336 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
337 AC_CHECK_LIB(socket, main)
338 AC_CHECK_LIB(nsl, main)
343 AC_DEFINE(GNU_LINUX,,GNU Linux)
346 AC_CHECK_LIB(nsl, gethostbyname)
347 AC_CHECK_LIB(socket, socket)
350 AC_DEFINE(FREEBSD_32,,FreeBSD 3.2)
354 AC_DEFINE(OPEN_BSD,,OpenBSD)
358 OTHER_METHOD="mtu_kvm.o"
359 AC_CHECK_LIB(kvm, main)
363 AC_DEFINE(IRIX_65,,IRIX 6.5)
367 dnl ---------------------
368 dnl Integrated VTY option
369 dnl ---------------------
370 case "${enable_vtysh}" in
371 "yes") VTYSH="vtysh";
372 AC_DEFINE(VTYSH,,VTY shell)
373 AC_PATH_PROG(PERL, perl)
374 dnl Vtysh uses libreadline, which looks for termcap functions at
375 dnl configure time. We follow readline's search order.
376 dnl The required procedures are in libtermcap on NetBSD, in
377 dnl [TODO] on Linux, and in [TODO] on Solaris.
378 AC_CHECK_LIB(termcap, tputs, ,
379 AC_CHECK_LIB(tinfo, tputs, ,
380 AC_CHECK_LIB(curses, tputs, ,
381 AC_CHECK_LIB(ncurses, tputs))))
382 AC_CHECK_LIB(readline, main)
383 if test $ac_cv_lib_readline_main = no; then
384 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
386 AC_CHECK_HEADER(readline/history.h)
387 if test $ac_cv_header_readline_history_h = no;then
388 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
390 AC_CHECK_LIB(readline, rl_completion_matches)
391 if test $ac_cv_lib_readline_rl_completion_matches = no; then
392 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
402 if test "$with_libpam" = "yes"; then
403 AC_CHECK_HEADER(security/pam_misc.h)
404 if test "$ac_cv_header_security_pam_misc_h" = yes; then
405 AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
406 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
407 pam_conv_func="misc_conv"
409 AC_CHECK_HEADER(security/openpam.h)
410 if test "$ac_cv_header_security_openpam_h" = yes; then
411 AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
412 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
413 pam_conv_func="openpam_ttyconv"
415 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
416 AC_MSG_WARN([*** pam support will not be built ***])
421 if test "$with_libpam" = "yes"; then
422 dnl took this test from proftpd's configure.in and suited to our needs
423 dnl -------------------------------------------------------------------------
425 dnl This next check looks funky due to a linker problem with some versions
426 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
427 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
428 dnl with RedHat 6.2 and Debian 2.2 or better.
429 AC_CHECK_LIB(pam, pam_start,
430 [AC_CHECK_LIB(pam, $pam_conv_func,
431 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
433 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
434 LIBPAM="-lpam -lpam_misc"]
438 [AC_CHECK_LIB(pam, pam_end,
439 [AC_CHECK_LIB(pam, $pam_conv_func,
440 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
441 LIBPAM="-lpam -ldl"],
442 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
443 LIBPAM="-lpam -ldl -lpam_misc"]
445 ],AC_MSG_WARN([*** pam support will not be built ***]),
452 dnl -------------------------------
453 dnl Endian-ness check
454 dnl -------------------------------
457 dnl -------------------------------
458 dnl check the size in byte of the C
459 dnl -------------------------------
460 dnl AC_CHECK_SIZEOF(char)
461 dnl AC_CHECK_SIZEOF(int)
462 dnl AC_CHECK_SIZEOF(short)
463 dnl AC_CHECK_SIZEOF(long)
465 dnl ----------------------------
466 dnl check existance of functions
467 dnl ----------------------------
468 AC_CHECK_FUNCS(memset memcpy strerror inet_aton daemon snprintf vsnprintf \
469 strlcat strlcpy if_nametoindex if_indextoname getifaddrs \
471 AC_CHECK_FUNCS(setproctitle, ,
472 [AC_CHECK_LIB(util, setproctitle,
474 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
480 dnl ------------------------------------
481 dnl Determine routing get and set method
482 dnl ------------------------------------
483 AC_MSG_CHECKING(zebra between kernel interface method)
484 if test x"$opsys" = x"gnu-linux"; then
485 if test "${enable_netlink}" = "yes";then
486 AC_MSG_RESULT(netlink)
487 RT_METHOD=rt_netlink.o
488 AC_DEFINE(HAVE_NETLINK,,netlink)
490 elif test "${enable_netlink}" = "no"; then
495 AC_MSG_RESULT(netlink)
496 RT_METHOD=rt_netlink.o
497 AC_DEFINE(HAVE_NETLINK,,netlink)
500 elif test x"$opsys" = x"sol2-6";then
501 AC_MSG_RESULT(Route socket)
502 KERNEL_METHOD="kernel_socket.o"
503 RT_METHOD="rt_socket.o"
504 elif test x"$opsys" = x"sol8";then
505 AC_MSG_RESULT(Route socket)
506 KERNEL_METHOD="kernel_socket.o"
507 RT_METHOD="rt_socket.o"
508 elif test "$opsys" = "irix" ; then
509 AC_MSG_RESULT(Route socket)
510 KERNEL_METHOD="kernel_socket.o"
511 RT_METHOD="rt_socket.o"
513 AC_TRY_RUN([#include <errno.h>
514 #include <sys/types.h>
515 #include <sys/socket.h>
521 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
522 if (ac_sock < 0 && errno == EINVAL)
526 [KERNEL_METHOD=kernel_socket.o
527 RT_METHOD=rt_socket.o
528 AC_MSG_RESULT(socket)],
529 [RT_METHOD=rt_ioctl.o
530 AC_MSG_RESULT(ioctl)],
531 [KERNEL_METHOD=kernel_socket.o
532 RT_METHOD=rt_socket.o
533 AC_MSG_RESULT(socket)])
536 AC_SUBST(KERNEL_METHOD)
537 AC_SUBST(OTHER_METHOD)
539 dnl ------------------------------------
540 dnl check for broken CMSG_FIRSTHDR macro
541 dnl ------------------------------------
542 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
546 #define __EXTENSIONS__
549 #include <sys/types.h>
550 #include <sys/socket.h>
557 msg.msg_control = buf;
558 msg.msg_controllen = 0;
560 if (CMSG_FIRSTHDR(&msg) != NULL)
563 }],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
564 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
566 dnl ------------------------------
567 dnl check kernel route read method
568 dnl ------------------------------
569 AC_CACHE_CHECK(route read method check, zebra_rtread,
570 [if test "$netlink" = yes; then
571 RTREAD_METHOD="rtread_netlink.o"
572 zebra_rtread="netlink"
574 for zebra_rtread in /proc/net/route /dev/ip /dev/null;
576 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
578 case $zebra_rtread in
579 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
580 zebra_rtread="proc";;
583 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
584 zebra_rtread="sysctl";;
585 *) RTREAD_METHOD="rtread_getmsg.o"
586 zebra_rtread="getmsg";;
588 *) RTREAD_METHOD="rtread_sysctl.o"
589 zebra_rtread="sysctl";;
592 AC_SUBST(RTREAD_METHOD)
594 dnl -----------------------------
595 dnl check interface lookup method
596 dnl -----------------------------
598 AC_MSG_CHECKING(interface looking up method)
599 if test "$netlink" = yes; then
600 AC_MSG_RESULT(netlink)
601 IF_METHOD=if_netlink.o
602 elif test "$opsys" = "sol2-6";then
603 AC_MSG_RESULT(Solaris GIF)
605 elif test "$opsys" = "sol8";then
606 AC_MSG_RESULT(Solaris GLIF)
607 IF_METHOD=if_ioctl_solaris.o
608 IOCTL_METHOD=ioctl_solaris.o
609 elif test "$opsys" = "irix" ; then
612 elif test "$opsys" = "openbsd";then
613 AC_MSG_RESULT(openbsd)
615 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
616 AC_MSG_RESULT(sysctl)
617 IF_METHOD=if_sysctl.o
618 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
624 AC_SUBST(IOCTL_METHOD)
626 dnl -----------------------
627 dnl check proc file system.
628 dnl -----------------------
629 if test -r /proc/net/dev; then
630 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
634 if test -r /proc/net/if_inet6; then
635 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
640 dnl -----------------------------
641 dnl check ipforward detect method
642 dnl -----------------------------
643 AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
644 [for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
646 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
648 case $zebra_ipforward_path in
649 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
650 zebra_ipforward_path="proc";;
653 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
654 zebra_ipforward_path="ews";;
655 *-freebsd*) IPFORWARD=ipforward_sysctl.o
656 zebra_ipforward_path="sysctl";;
657 *) IPFORWARD=ipforward_solaris.o
658 zebra_ipforward_path="solaris";;
660 *) IPFORWARD=ipforward_sysctl.o
661 zebra_ipforward_path="sysctl";;
665 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
670 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
671 if test "${enable_ipv6}" = "no"; then
672 AC_MSG_RESULT(disabled)
677 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
679 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
680 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
684 AC_MSG_RESULT(INRIA IPv6)
688 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
690 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
691 AC_DEFINE(KAME,1,KAME IPv6)
694 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
695 LIB_IPV6="-L/usr/local/v6/lib -linet6"
698 dnl -------------------------
700 dnl default host check
701 dnl It is not used by Kheops
702 dnl -------------------------
703 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
705 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
706 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
707 AC_DEFINE(KAME,1,KAME IPv6 stack)
710 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
711 LIB_IPV6="-L/usr/local/v6/lib -linet6"
713 AC_MSG_RESULT(MUSICA)
717 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
719 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
723 if test x"$opsys" = x"bsdi";then
724 AC_DEFINE(BSDI_NRL,,BSDI)
725 AC_MSG_RESULT(BSDI_NRL)
729 dnl ------------------------------------
730 dnl Solaris 9, 10 and potentially higher
731 dnl ------------------------------------
732 elif test x"$opsys" = x"sol8"; then
734 AC_DEFINE(HAVE_IPV6, 1, IPv6)
735 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
738 AC_MSG_RESULT(Solaris IPv6)
742 elif test "${enable_ipv6}" = "yes"; then
744 #include <linux/version.h>
745 /* 2.1.128 or later */
746 #if LINUX_VERSION_CODE >= 0x020180
750 zebra_cv_linux_ipv6=yes
751 AC_MSG_RESULT(Linux IPv6)])
753 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
756 zebra_cv_linux_ipv6=yes
757 AC_MSG_RESULT(Linux IPv6)
761 if test "$zebra_cv_linux_ipv6" = "yes";then
762 AC_MSG_CHECKING(for GNU libc >= 2.1)
763 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
765 #include <features.h>
766 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
770 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
776 if test "$glibc" != "yes"; then
777 INCLUDES="-I/usr/inet6/include"
778 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
779 LIB_IPV6="-L/usr/inet6/lib -linet6"
784 dnl -----------------------
785 dnl Set IPv6 related values
786 dnl -----------------------
787 LIBS="$LIB_IPV6 $LIBS"
790 if test x"$RIPNGD" = x""; then
791 AC_MSG_RESULT(IPv4 only)
795 dnl ------------------
796 dnl IPv6 header checks
797 dnl ------------------
798 if test "x${zebra_cv_ipv6}" = "xyes"; then
799 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
800 netinet6/in6_var.h netinet6/nd6.h])
803 dnl --------------------
804 dnl Daemon disable check
805 dnl --------------------
806 if test "${enable_zebra}" = "no";then
812 if test "${enable_bgpd}" = "no";then
818 if test "${enable_ripd}" = "no";then
824 if test "${enable_ospfd}" = "no";then
830 if test "${enable_watchquagga}" = "no";then
833 WATCHQUAGGA="watchquagga"
837 if test "${enable_opaque_lsa}" = "yes"; then
838 if test "${enable_ospfapi}" != "no";then
839 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
841 if test "${enable_ospfclient}" != "no";then
842 OSPFCLIENT="ospfclient"
848 case "${enable_ripngd}" in
849 "yes") RIPNGD="ripngd";;
854 case "${enable_ospf6d}" in
855 "yes") OSPF6D="ospf6d";;
860 case "${enable_isisd}" in
861 "yes") ISISD="isisd";;
866 if test "${enable_bgp_announce}" = "no";then
867 AC_DEFINE(DISABLE_BGP_ANNOUNCE,,Disable BGP installation to zebra)
876 AC_SUBST(WATCHQUAGGA)
883 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
884 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
885 AC_CHECK_LIB(crypt, crypt)
886 AC_CHECK_LIB(resolv, res_init)
887 AC_CHECK_LIB(m, main)
889 dnl ---------------------------------------------------
890 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
891 dnl ---------------------------------------------------
892 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
893 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
894 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
896 dnl ---------------------------
897 dnl check system has GNU regexp
898 dnl ---------------------------
899 dnl AC_MSG_CHECKING(whether system has GNU regex)
900 AC_CHECK_LIB(c, regexec,
901 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
903 [LIB_REGEX="regex.o"])
906 dnl ------------------
907 dnl check SNMP library
908 dnl ------------------
909 if test "${enable_snmp}" = "yes";then
910 dnl AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
911 if test "${HAVE_SNMP}" = ""; then
914 unset ac_cv_lib_snmp_asn_parse_int
915 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
916 if test "${NEED_CRYPTO}" = ""; then
917 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes ])
919 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes; NEED_CRYPTO=yes;LIBS="$LIBS -lcrypto" ],,"-lcrypto")
923 if test "${HAVE_SNMP}" = ""; then
926 unset ac_cv_lib_snmp_asn_parse_int
927 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes, )
928 if test "${HAVE_SNMP}" = ""; then
929 unset ac_cv_lib_snmp_asn_parse_int
930 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
931 if test "${NEED_CRYPTO}" = "yes"; then
932 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
938 if test "${HAVE_SNMP}" = ""; then
940 LIBS="-L/usr/local/lib"
941 unset ac_cv_lib_snmp_asn_parse_int
942 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
943 if test "${HAVE_SNMP}" = ""; then
944 unset ac_cv_lib_snmp_asn_parse_int
945 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
946 if test "${NEED_CRYPTO}" = "yes"; then
947 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
953 if test "${HAVE_SNMP}" = "yes"; then
954 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
956 test -f "${ac_snmp}" && break
960 /usr/include/net-snmp/*)
961 AC_DEFINE(HAVE_SNMP,,SNMP)
962 AC_DEFINE(HAVE_NETSNMP,,SNMP)
963 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
964 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/include/net-snmp -I/usr/include/net-snmp/library"
965 if test "${HAVE_NETSNMP}" = "yes"; then
966 LIBS="${LIBS} -lnetsnmp"
968 LIBS="${LIBS} -lsnmp"
971 /usr/include/ucd-snmp/*)
972 AC_DEFINE(HAVE_SNMP,,SNMP)
973 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/include/ucd-snmp"
974 LIBS="${LIBS} -lsnmp"
976 /usr/local/include/ucd-snmp/*)
977 AC_DEFINE(HAVE_SNMP,,SNMP)
978 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/local/include/ucd-snmp"
979 LIBS="${LIBS} -L/usr/local/lib -lsnmp"
981 /usr/local/include/net-snmp/*)
982 AC_DEFINE(HAVE_SNMP,,SNMP)
983 AC_DEFINE(HAVE_NET_SNMP,,SNMP)
984 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
985 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/local/include/net-snmp"
986 LIBS="${LIBS} -L/usr/local/lib -lnetsnmp"
989 if test "${NEED_CRYPTO}" = "yes"; then
990 LIBS="${LIBS} -lcrypto"
995 if test "${enable_snmp}" = "yes" -a "${HAVE_SNMP}" != "yes"; then
996 AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])
999 AC_SUBST(SNMP_INCLUDES)
1001 dnl ----------------------------
1002 dnl check sa_len of sockaddr
1003 dnl ----------------------------
1004 AC_MSG_CHECKING(whether struct sockaddr has a sa_len field)
1005 AC_TRY_COMPILE([#include <sys/types.h>
1006 #include <sys/socket.h>
1007 ],[static struct sockaddr ac_i;int ac_j = sizeof (ac_i.sa_len);],
1009 AC_DEFINE(HAVE_SA_LEN,,sa_len)],
1012 dnl ----------------------------
1013 dnl check sin_len of sockaddr_in
1014 dnl ----------------------------
1015 AC_MSG_CHECKING(whether struct sockaddr_in has a sin_len field)
1016 AC_TRY_COMPILE([#include <sys/types.h>
1017 #include <netinet/in.h>
1018 ],[static struct sockaddr_in ac_i;int ac_j = sizeof (ac_i.sin_len);],
1020 AC_DEFINE(HAVE_SIN_LEN,,sin_len)],
1023 dnl ----------------------------
1024 dnl check sun_len of sockaddr_un
1025 dnl ----------------------------
1026 AC_MSG_CHECKING(whether struct sockaddr_un has a sun_len field)
1027 AC_TRY_COMPILE([#include <sys/types.h>
1029 ],[static struct sockaddr_un ac_i;int ac_j = sizeof (ac_i.sun_len);],
1031 AC_DEFINE(HAVE_SUN_LEN,,sun_len)],
1034 dnl -----------------------------------
1035 dnl check sin6_scope_id of sockaddr_in6
1036 dnl -----------------------------------
1037 if test "$zebra_cv_ipv6" = yes; then
1038 AC_MSG_CHECKING(whether struct sockaddr_in6 has a sin6_scope_id field)
1039 AC_TRY_COMPILE([#include <sys/types.h>
1040 #include <netinet/in.h>
1041 ],[static struct sockaddr_in6 ac_i;int ac_j = sizeof (ac_i.sin6_scope_id);],
1043 AC_DEFINE(HAVE_SIN6_SCOPE_ID,,scope id)],
1047 dnl ----------------------------
1048 dnl check socklen_t exist or not
1049 dnl ----------------------------
1050 AC_MSG_CHECKING(whther socklen_t is defined)
1051 AC_TRY_COMPILE([#include <sys/types.h>
1052 #include <sys/socket.h>
1053 #include <netinet/in.h>
1054 ],[socklen_t ac_x;],
1056 AC_DEFINE(HAVE_SOCKLEN_T,,socklen_t)],
1059 dnl ------------------------
1060 dnl check struct sockaddr_dl
1061 dnl ------------------------
1062 AC_MSG_CHECKING(whether struct sockaddr_dl exist)
1063 AC_EGREP_HEADER(sockaddr_dl,
1066 AC_DEFINE(HAVE_SOCKADDR_DL,,sockaddr_dl)],
1069 dnl --------------------------
1070 dnl check structure ifaliasreq
1071 dnl --------------------------
1072 AC_MSG_CHECKING(whether struct ifaliasreq exist)
1073 AC_EGREP_HEADER(ifaliasreq,
1076 AC_DEFINE(HAVE_IFALIASREQ,,ifaliasreq)],
1079 dnl ----------------------------
1080 dnl check structure in6_aliasreq
1081 dnl ----------------------------
1082 AC_MSG_CHECKING(whether struct in6_aliasreq exist)
1083 AC_EGREP_HEADER(in6_aliasreq,
1086 AC_DEFINE(HAVE_IN6_ALIASREQ,,in6_aliasreq)],
1089 dnl -----------------------------------
1090 dnl check ifra_lifetime of in6_aliasreq
1091 dnl -----------------------------------
1092 AC_MSG_CHECKING(whether in6_aliasreq.ifra_lifetime exist)
1093 AC_TRY_COMPILE([#include <sys/types.h>
1094 #include <netinet6/in6_var.h>
1095 ],[static struct if6_aliasreq ac_i;int ac_j = sizeof (ac_i.ifra_lifetime);],
1097 AC_DEFINE(HAVE_IFRA_LIFETIME,,Have in6_aliasreq.ifra_lifetime)],
1100 dnl ---------------------------
1101 dnl check structure rt_addrinfo
1102 dnl ---------------------------
1103 AC_MSG_CHECKING(whether struct rt_addrinfo exist)
1104 AC_EGREP_HEADER(rt_addrinfo,
1107 AC_DEFINE(HAVE_RT_ADDRINFO,,rt_addrinfo)],
1110 dnl --------------------------
1111 dnl check structure in_pktinfo
1112 dnl --------------------------
1113 AC_MSG_CHECKING(whether struct in_pktinfo exist)
1114 AC_TRY_COMPILE([#include <netinet/in.h>
1115 ],[struct in_pktinfo ac_x;],
1117 AC_DEFINE(HAVE_INPKTINFO,,in_pktinfo)],
1120 dnl ----------------------------------
1121 dnl check struct nd_opt_homeagent_info
1122 dnl ----------------------------------
1123 AC_MSG_CHECKING(whether struct nd_opt_homeagent_info exist)
1124 AC_EGREP_HEADER(nd_opt_homeagent_info,
1127 AC_DEFINE(HAVE_ND_OPT_HOMEAGENT_INFO,,nd_opt_homeagent_info)],
1130 dnl --------------------------------
1131 dnl check struct nd_opt_adv_interval
1132 dnl --------------------------------
1133 AC_MSG_CHECKING(whether struct nd_opt_adv_interval exist)
1134 AC_EGREP_HEADER(nd_opt_adv_interval,
1137 AC_DEFINE(HAVE_ND_OPT_ADV_INTERVAL,,nd_opt_adv_interval)],
1140 dnl ------------------------------------
1141 dnl check fields in nd_opt_adv_interval
1142 dnl ------------------------------------
1143 AC_MSG_CHECKING(whether nd_opt_ai_type field exist)
1144 AC_EGREP_HEADER(nd_opt_ai_type,
1147 AC_DEFINE(HAVE_ND_OPT_ADV_INTERVAL_AI_FIELDS,,nd_opt_ai_type)],
1150 dnl --------------------------------------
1151 dnl checking for getrusage struct and call
1152 dnl --------------------------------------
1153 AC_MSG_CHECKING(whether getrusage is available)
1154 AC_TRY_COMPILE([#include <sys/resource.h>
1155 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1157 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1160 dnl -------------------
1161 dnl capabilities checks
1162 dnl -------------------
1163 if test "${enable_capabilities}" != "no"; then
1164 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1165 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1167 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1168 quagga_ac_keepcaps="yes"],
1171 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1172 AC_CHECK_HEADERS(sys/capability.h)
1174 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1175 AC_CHECK_LIB(cap, cap_init,
1176 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1184 dnl -------------------
1185 dnl test for ucontext.h
1186 dnl -------------------
1187 AC_CHECK_HEADERS(ucontext.h)
1189 dnl ---------------------------
1190 dnl check for glibc 'backtrace'
1191 dnl ---------------------------
1192 if test "${glibc}" = "yes"; then
1193 AC_CHECK_HEADER(execinfo.h)
1195 if test x"${ac_cv_header_execinfo_h}" = x"yes"; then
1196 AC_CHECK_FUNC(backtrace,
1197 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)]
1204 CONFDATE=`date '+%Y%m%d'`
1207 dnl ------------------------------
1208 dnl set paths for state directory
1209 dnl ------------------------------
1210 if test "${prefix}" = "NONE"; then
1211 quagga_statedir_prefix="";
1213 quagga_statedir_prefix=${prefix}
1215 if test "${localstatedir}" = '${prefix}/var'; then
1216 AC_CACHE_CHECK(state directory,ac_statedir,
1217 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1218 ${quagga_statedir_prefix}/var/adm dnl
1219 ${quagga_statedir_prefix}/etc dnl
1225 test -d $QUAGGA_STATE_DIR && break
1227 quagga_statedir=$QUAGGA_STATE_DIR])
1229 quagga_statedir=${localstatedir}
1230 AC_MSG_CHECKING(directory to use for state file)
1231 AC_MSG_RESULT(${quagga_statedir})
1233 if test $quagga_statedir = "/dev/null"; then
1234 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1237 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1238 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1239 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1240 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1241 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1242 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1243 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1244 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1245 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1246 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1247 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1248 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1249 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1250 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1251 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1252 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1253 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1255 dnl ---------------------------
1256 dnl Check htonl works correctly
1257 dnl ---------------------------
1258 AC_MSG_CHECKING(for working htonl)
1259 AC_CACHE_VAL(ac_cv_htonl_works, [
1260 AC_TRY_LINK([#ifdef HAVE_SYS_TYPES_H
1261 #include <sys/types.h>
1266 #ifdef HAVE_NETINET_IN_H
1267 #include <netinet/in.h>
1270 ac_cv_htonl_works=yes,
1271 ac_cv_htonl_works=no)])
1272 AC_MSG_RESULT($ac_cv_htonl_works)
1274 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1275 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1276 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1277 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
1282 isisd/topology/Makefile
1283 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1284 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1285 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1286 ## Hack, but working solution to avoid rebuilding of quagga.info.
1287 ## It's already in CVS until texinfo 4.7 is more common.
1288 AC_CONFIG_COMMANDS([info-time],[touch doc/quagga.info])
1292 Quagga configuration
1293 --------------------
1294 quagga version : ${PACKAGE_VERSION}
1295 host operationg system : ${host_os}
1296 source code location : ${srcdir}
1298 compiler flags : ${CFLAGS}
1299 includes : ${INCLUDES} ${SNMP_INCLUDES}
1300 linker flags : ${LDFLAGS} ${LIBS}
1301 state file directory : ${quagga_statedir}
1302 config file directory : `eval echo \`echo ${sysconfdir}\``
1303 example directory : `eval echo \`echo ${exampledir}\``
1304 user to run as : ${enable_user}
1305 group to run as : ${enable_group}
1306 group for vty sockets : ${enable_vty_group}
1307 config file mask : ${enable_configfile_mask}
1308 log file mask : ${enable_logfile_mask}
1310 The above user and group must have read/write access to the state file
1311 directory and to the config files in the config file directory.