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.64 2004/09/13 11:27:57 paul Exp $
11 AC_INIT(Quagga, 0.96.5, [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 ;
57 dnl -----------------------------------------
58 dnl If CLFAGS doesn\'t exist set default value
59 dnl -----------------------------------------
60 dnl (Wall is gcc specific... have to make sure
61 dnl gcc is being used before setting it)
63 if test "x$cflags_specified" = "x" ; then
74 AC_CHECK_TOOL(RANLIB, ranlib, :)
86 dnl ----------------------
87 dnl Packages configuration
88 dnl ----------------------
90 [ --enable-vtysh include integrated vty shell for Quagga])
92 [ --disable-ipv6 turn off IPv6 related features and daemons])
94 [ --disable-zebra do not build zebra daemon])
96 [ --disable-bgpd do not build bgpd])
98 [ --disable-ripd do not build ripd])
100 [ --disable-ripngd do not build ripngd])
102 [ --disable-ospfd do not build ospfd])
103 AC_ARG_ENABLE(ospf6d,
104 [ --disable-ospf6d do not build ospf6d])
106 [ --disable-isisd do not build isisd])
107 AC_ARG_ENABLE(bgp-announce,
108 [ --disable-bgp-announce, turn off BGP route announcement])
109 AC_ARG_ENABLE(netlink,
110 [ --enable-netlink force to use Linux netlink interface])
111 AC_ARG_ENABLE(broken-aliases,
112 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
114 [ --enable-snmp enable SNMP support])
116 [ --with-libpam use libpam for PAM support in vtysh])
117 AC_ARG_ENABLE(tcp-zebra,
118 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
119 AC_ARG_ENABLE(opaque-lsa,
120 [ --enable-opaque-lsa enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
121 AC_ARG_ENABLE(ospfapi,
122 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database,
123 (this is the default if --enable-opaque-lsa is not set)])
124 AC_ARG_ENABLE(ospfclient,
125 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
126 (this is the default if --disable-ospfapi is set)])
127 AC_ARG_ENABLE(ospf-te,
128 [ --enable-ospf-te enable Traffic Engineering Extension to OSPF])
129 AC_ARG_ENABLE(multipath,
130 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
131 AC_ARG_ENABLE(quagga_user,
132 [ --enable-user=ARG user to run Quagga suite as (default quagga)])
133 AC_ARG_ENABLE(quagga_group,
134 [ --enable-group=ARG group to run Quagga suite as (default quagga)])
135 AC_ARG_ENABLE(vty_group,
136 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
137 AC_ARG_ENABLE(configfile_mask,
138 [ --enable-configfile-mask=ARG set mask for config files])
139 AC_ARG_ENABLE(logfile_mask,
140 [ --enable-logfile-mask=ARG set mask for log files])
143 [ --disable-rtadv disable IPV6 router advertisement feature])
145 [ --enable-irdp enable IRDP server support in zebra])
146 AC_ARG_ENABLE(capabilities,
147 [ --disable-capabilities disable using POSIX capabilities])
149 if test "${enable_broken_aliases}" = "yes"; then
150 if test "${enable_netlink}" = "yes"
152 echo "Sorry, you can't use netlink with broken aliases"
155 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
159 if test "${enable_tcp_zebra}" = "yes"; then
160 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
163 if test "${enable_opaque_lsa}" = "yes"; then
164 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
167 if test "${enable_ospf_te}" = "yes"; then
168 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
169 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
172 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
173 if test "${enable_rtadv}" != "no"; then
175 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
180 if test "${enable_irdp}" = "yes"; then
181 AC_DEFINE(HAVE_IRDP,, IRDP )
184 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
186 elif test "${enable_user}" = "no"; then
189 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
191 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
192 enable_group="quagga"
193 elif test "${enable_group}" = "no"; then
196 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
198 if test x"${enable_vty_group}" = x"yes" ; then
199 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
200 elif test x"${enable_vty_group}" != x""; then
201 if test x"${enable_vty_group}" != x"no"; then
202 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
206 enable_configfile_mask=${enable_configfile_mask:-0600}
207 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
209 enable_logfile_mask=${enable_logfile_mask:-0600}
210 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
216 case "${enable_multipath}" in
218 MULTIPATH_NUM="${enable_multipath}"
223 echo "Please specify digit to --enable-multipath ARG."
230 AC_SUBST(MULTIPATH_NUM)
232 dnl -------------------
233 dnl Check header files.
234 dnl -------------------
236 AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
237 sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
238 sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
241 AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
242 net/if_dl.h net/netopt.h inet/nd.h net/route.h \
243 net/if.h net/if_var.h netinet/in_var.h])
245 dnl V6 headers are checked below, after we check for v6
252 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
254 [*-sunos5.[6-8]*] | [*-solaris2.[6-8]*])
256 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.8)
257 AC_DEFINE(SUNOS_5, 1, SunOS 5)
258 AC_CHECK_LIB(xnet, main)
261 [*-sunos5.[8-9]] | [*-sunos5.1[0-9]] \
262 | [*-solaris2.[8-9]] | [*-solaris2.1[0-9]])
264 AC_DEFINE(SUNOS_59,,SunOS 5.9 up)
265 AC_DEFINE(SUNOS_5, 1, SunOS 5)
266 AC_CHECK_LIB(socket, main)
267 AC_CHECK_LIB(nsl, main)
270 *-sunos5* | *-solaris2*)
271 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
272 AC_CHECK_LIB(socket, main)
273 AC_CHECK_LIB(nsl, main)
278 AC_DEFINE(GNU_LINUX,,GNU Linux)
281 AC_CHECK_LIB(nsl, gethostbyname)
282 AC_CHECK_LIB(socket, socket)
285 AC_DEFINE(FREEBSD_32,,FreeBSD 3.2)
289 AC_DEFINE(OPEN_BSD,,OpenBSD)
293 OTHER_METHOD="mtu_kvm.o"
294 AC_CHECK_LIB(kvm, main)
298 AC_DEFINE(IRIX_65,,IRIX 6.5)
302 dnl ---------------------
303 dnl Integrated VTY option
304 dnl ---------------------
305 case "${enable_vtysh}" in
306 "yes") VTYSH="vtysh";
307 AC_DEFINE(VTYSH,,VTY shell)
308 AC_PATH_PROG(PERL, perl)
309 dnl Vtysh uses libreadline, which looks for termcap functions at
310 dnl configure time. We follow readline's search order.
311 dnl The required procedures are in libtermcap on NetBSD, in
312 dnl [TODO] on Linux, and in [TODO] on Solaris.
313 AC_CHECK_LIB(termcap, tputs, ,
314 AC_CHECK_LIB(tinfo, tputs, ,
315 AC_CHECK_LIB(curses, tputs, ,
316 AC_CHECK_LIB(ncurses, tputs))))
317 AC_CHECK_LIB(readline, main)
318 if test $ac_cv_lib_readline_main = no; then
319 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
321 AC_CHECK_HEADER(readline/history.h)
322 if test $ac_cv_header_readline_history_h = no;then
323 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
325 AC_CHECK_LIB(readline, rl_completion_matches)
326 if test $ac_cv_lib_readline_rl_completion_matches = no; then
327 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
337 if test "$with_libpam" = "yes"; then
338 AC_CHECK_HEADER(security/pam_misc.h)
339 if test "$ac_cv_header_security_pam_misc_h" = yes; then
340 AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
341 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
342 pam_conv_func="misc_conv"
344 AC_CHECK_HEADER(security/openpam.h)
345 if test "$ac_cv_header_security_openpam_h" = yes; then
346 AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
347 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
348 pam_conv_func="openpam_ttyconv"
350 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
351 AC_MSG_WARN([*** pam support will not be built ***])
356 if test "$with_libpam" = "yes"; then
357 dnl took this test from proftpd's configure.in and suited to our needs
358 dnl -------------------------------------------------------------------------
360 dnl This next check looks funky due to a linker problem with some versions
361 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
362 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
363 dnl with RedHat 6.2 and Debian 2.2 or better.
364 AC_CHECK_LIB(pam, pam_start,
365 [AC_CHECK_LIB(pam, $pam_conv_func,
366 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
368 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
369 LIBPAM="-lpam -lpam_misc"]
373 [AC_CHECK_LIB(pam, pam_end,
374 [AC_CHECK_LIB(pam, $pam_conv_func,
375 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
376 LIBPAM="-lpam -ldl"],
377 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
378 LIBPAM="-lpam -ldl -lpam_misc"]
380 ],AC_MSG_WARN([*** pam support will not be built ***]),
387 dnl -------------------------------
388 dnl Endian-ness check
389 dnl -------------------------------
392 dnl -------------------------------
393 dnl check the size in byte of the C
394 dnl -------------------------------
395 dnl AC_CHECK_SIZEOF(char)
396 dnl AC_CHECK_SIZEOF(int)
397 dnl AC_CHECK_SIZEOF(short)
398 dnl AC_CHECK_SIZEOF(long)
400 dnl ----------------------------
401 dnl check existance of functions
402 dnl ----------------------------
403 AC_CHECK_FUNCS(memset memcpy strerror inet_aton daemon snprintf vsnprintf \
404 strlcat strlcpy if_nametoindex if_indextoname getifaddrs \
406 AC_CHECK_FUNCS(setproctitle, ,
407 [AC_CHECK_LIB(util, setproctitle,
409 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
415 dnl ------------------------------------
416 dnl Determine routing get and set method
417 dnl ------------------------------------
418 AC_MSG_CHECKING(zebra between kernel interface method)
419 if test x"$opsys" = x"gnu-linux"; then
420 if test "${enable_netlink}" = "yes";then
421 AC_MSG_RESULT(netlink)
422 RT_METHOD=rt_netlink.o
423 AC_DEFINE(HAVE_NETLINK,,netlink)
425 elif test "${enable_netlink}" = "no"; then
430 AC_MSG_RESULT(netlink)
431 RT_METHOD=rt_netlink.o
432 AC_DEFINE(HAVE_NETLINK,,netlink)
435 elif test x"$opsys" = x"sol2-6";then
436 AC_MSG_RESULT(Route socket)
437 KERNEL_METHOD="kernel_socket.o"
438 RT_METHOD="rt_socket.o"
439 elif test x"$opsys" = x"sol9";then
440 AC_MSG_RESULT(Route socket)
441 KERNEL_METHOD="kernel_socket.o"
442 RT_METHOD="rt_socket.o"
443 elif test "$opsys" = "irix" ; then
444 AC_MSG_RESULT(Route socket)
445 KERNEL_METHOD="kernel_socket.o"
446 RT_METHOD="rt_socket.o"
448 AC_TRY_RUN([#include <errno.h>
449 #include <sys/types.h>
450 #include <sys/socket.h>
456 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
457 if (ac_sock < 0 && errno == EINVAL)
461 [KERNEL_METHOD=kernel_socket.o
462 RT_METHOD=rt_socket.o
463 AC_MSG_RESULT(socket)],
464 [RT_METHOD=rt_ioctl.o
465 AC_MSG_RESULT(ioctl)],
466 [KERNEL_METHOD=kernel_socket.o
467 RT_METHOD=rt_socket.o
468 AC_MSG_RESULT(socket)])
471 AC_SUBST(KERNEL_METHOD)
472 AC_SUBST(OTHER_METHOD)
474 dnl ------------------------------
475 dnl check kernel route read method
476 dnl ------------------------------
477 AC_CACHE_CHECK(route read method check, zebra_rtread,
478 [if test "$netlink" = yes; then
479 RTREAD_METHOD="rtread_netlink.o"
480 zebra_rtread="netlink"
482 for zebra_rtread in /proc/net/route /dev/ip /dev/null;
484 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
486 case $zebra_rtread in
487 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
488 zebra_rtread="proc";;
491 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
492 zebra_rtread="sysctl";;
493 *) RTREAD_METHOD="rtread_getmsg.o"
494 zebra_rtread="getmsg";;
496 *) RTREAD_METHOD="rtread_sysctl.o"
497 zebra_rtread="sysctl";;
500 AC_SUBST(RTREAD_METHOD)
502 dnl -----------------------------
503 dnl check interface lookup method
504 dnl -----------------------------
506 AC_MSG_CHECKING(interface looking up method)
507 if test "$netlink" = yes; then
508 AC_MSG_RESULT(netlink)
509 IF_METHOD=if_netlink.o
510 elif test "$opsys" = "sol2-6";then
511 AC_MSG_RESULT(Solaris GIF)
513 elif test "$opsys" = "sol9";then
514 AC_MSG_RESULT(Solaris GLIF)
515 IF_METHOD=if_ioctl_solaris.o
516 IOCTL_METHOD=ioctl_solaris.o
517 elif test "$opsys" = "irix" ; then
520 elif test "$opsys" = "openbsd";then
521 AC_MSG_RESULT(openbsd)
523 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
524 AC_MSG_RESULT(sysctl)
525 IF_METHOD=if_sysctl.o
526 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
532 AC_SUBST(IOCTL_METHOD)
534 dnl -----------------------
535 dnl check proc file system.
536 dnl -----------------------
537 if test -r /proc/net/dev; then
538 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
542 if test -r /proc/net/if_inet6; then
543 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
548 dnl -----------------------------
549 dnl check ipforward detect method
550 dnl -----------------------------
551 AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
552 [for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
554 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
556 case $zebra_ipforward_path in
557 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
558 zebra_ipforward_path="proc";;
561 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
562 zebra_ipforward_path="ews";;
563 *-freebsd*) IPFORWARD=ipforward_sysctl.o
564 zebra_ipforward_path="sysctl";;
565 *) IPFORWARD=ipforward_solaris.o
566 zebra_ipforward_path="solaris";;
568 *) IPFORWARD=ipforward_sysctl.o
569 zebra_ipforward_path="sysctl";;
573 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
578 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
579 if test "${enable_ipv6}" = "no"; then
580 AC_MSG_RESULT(disabled)
585 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
587 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
588 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
592 AC_MSG_RESULT(INRIA IPv6)
596 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
598 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
599 AC_DEFINE(KAME,1,KAME IPv6)
602 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
603 LIB_IPV6="-L/usr/local/v6/lib -linet6"
606 dnl -------------------------
608 dnl default host check
609 dnl It is not used by Kheops
610 dnl -------------------------
611 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
613 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
614 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
615 AC_DEFINE(KAME,1,KAME IPv6 stack)
618 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
619 LIB_IPV6="-L/usr/local/v6/lib -linet6"
621 AC_MSG_RESULT(MUSICA)
625 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
627 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
631 if test x"$opsys" = x"bsdi";then
632 AC_DEFINE(BSDI_NRL,,BSDI)
633 AC_MSG_RESULT(BSDI_NRL)
637 dnl ------------------------------------
638 dnl Solaris 9, 10 and potentially higher
639 dnl ------------------------------------
640 elif test x"$opsys" = x"sol9"; then
642 AC_DEFINE(HAVE_IPV6, 1, IPv6)
643 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
646 AC_MSG_RESULT(Solaris IPv6)
650 elif test "${enable_ipv6}" = "yes"; then
652 #include <linux/version.h>
653 /* 2.1.128 or later */
654 #if LINUX_VERSION_CODE >= 0x020180
658 zebra_cv_linux_ipv6=yes
659 AC_MSG_RESULT(Linux IPv6)])
661 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
664 zebra_cv_linux_ipv6=yes
665 AC_MSG_RESULT(Linux IPv6)
669 if test "$zebra_cv_linux_ipv6" = "yes";then
670 AC_MSG_CHECKING(for GNU libc >= 2.1)
671 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
673 #include <features.h>
674 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
678 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
684 if test "$glibc" != "yes"; then
685 INCLUDES="-I/usr/inet6/include"
686 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
687 LIB_IPV6="-L/usr/inet6/lib -linet6"
692 dnl -----------------------
693 dnl Set IPv6 related values
694 dnl -----------------------
695 LIBS="$LIB_IPV6 $LIBS"
698 if test x"$RIPNGD" = x""; then
699 AC_MSG_RESULT(IPv4 only)
703 dnl ------------------
704 dnl IPv6 header checks
705 dnl ------------------
706 if test "x${zebra_cv_ipv6}" = "xyes"; then
707 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
708 netinet6/in6_var.h netinet6/nd6.h])
711 dnl --------------------
712 dnl Daemon disable check
713 dnl --------------------
714 if test "${enable_zebra}" = "no";then
720 if test "${enable_bgpd}" = "no";then
726 if test "${enable_ripd}" = "no";then
732 if test "${enable_ospfd}" = "no";then
739 if test "${enable_opaque_lsa}" = "yes"; then
740 if test "${enable_ospfapi}" != "no";then
741 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
743 if test "${enable_ospfclient}" != "no";then
744 OSPFCLIENT="ospfclient"
750 case "${enable_ripngd}" in
751 "yes") RIPNGD="ripngd";;
756 case "${enable_ospf6d}" in
757 "yes") OSPF6D="ospf6d";;
762 case "${enable_isisd}" in
763 "yes") ISISD="isisd";;
768 if test "${enable_bgp_announce}" = "no";then
769 AC_DEFINE(DISABLE_BGP_ANNOUNCE,,Disable BGP installation to zebra)
784 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
785 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
786 AC_CHECK_LIB(crypt, crypt)
787 AC_CHECK_LIB(resolv, res_init)
788 AC_CHECK_LIB(m, main)
790 dnl ---------------------------------------------------
791 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
792 dnl ---------------------------------------------------
793 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
794 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
795 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
797 dnl ---------------------------
798 dnl check system has GNU regexp
799 dnl ---------------------------
800 dnl AC_MSG_CHECKING(whether system has GNU regex)
801 AC_CHECK_LIB(c, regexec,
802 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
804 [LIB_REGEX="regex.o"])
807 dnl ------------------
808 dnl check SNMP library
809 dnl ------------------
810 if test "${enable_snmp}" = "yes";then
811 dnl AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
812 if test "${HAVE_SNMP}" = ""; then
815 unset ac_cv_lib_snmp_asn_parse_int
816 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
817 if test "${NEED_CRYPTO}" = ""; then
818 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes ])
820 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes; NEED_CRYPTO=yes;LIBS="$LIBS -lcrypto" ],,"-lcrypto")
824 if test "${HAVE_SNMP}" = ""; then
827 unset ac_cv_lib_snmp_asn_parse_int
828 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes, )
829 if test "${HAVE_SNMP}" = ""; then
830 unset ac_cv_lib_snmp_asn_parse_int
831 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
832 if test "${NEED_CRYPTO}" = "yes"; then
833 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
839 if test "${HAVE_SNMP}" = ""; then
841 LIBS="-L/usr/local/lib"
842 unset ac_cv_lib_snmp_asn_parse_int
843 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
844 if test "${HAVE_SNMP}" = ""; then
845 unset ac_cv_lib_snmp_asn_parse_int
846 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
847 if test "${NEED_CRYPTO}" = "yes"; then
848 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
854 if test "${HAVE_SNMP}" = "yes"; then
855 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
857 test -f "${ac_snmp}" && break
861 /usr/include/net-snmp/*)
862 AC_DEFINE(HAVE_SNMP,,SNMP)
863 AC_DEFINE(HAVE_NETSNMP,,SNMP)
864 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
865 CFLAGS="${CFLAGS} -I/usr/include/net-snmp -I/usr/include/net-snmp/library"
866 if test "${HAVE_NETSNMP}" = "yes"; then
867 LIBS="${LIBS} -lnetsnmp"
869 LIBS="${LIBS} -lsnmp"
872 /usr/include/ucd-snmp/*)
873 AC_DEFINE(HAVE_SNMP,,SNMP)
874 CFLAGS="${CFLAGS} -I/usr/include/ucd-snmp"
875 LIBS="${LIBS} -lsnmp"
877 /usr/local/include/ucd-snmp/*)
878 AC_DEFINE(HAVE_SNMP,,SNMP)
879 CFLAGS="${CFLAGS} -I/usr/local/include/ucd-snmp"
880 LIBS="${LIBS} -L/usr/local/lib -lsnmp"
882 /usr/local/include/net-snmp/*)
883 AC_DEFINE(HAVE_SNMP,,SNMP)
884 AC_DEFINE(HAVE_NET_SNMP,,SNMP)
885 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
886 CFLAGS="${CFLAGS} -I/usr/local/include/net-snmp"
887 LIBS="${LIBS} -L/usr/local/lib -lnetsnmp"
890 if test "${NEED_CRYPTO}" = "yes"; then
891 LIBS="${LIBS} -lcrypto"
896 dnl ----------------------------
897 dnl check sa_len of sockaddr
898 dnl ----------------------------
899 AC_MSG_CHECKING(whether struct sockaddr has a sa_len field)
900 AC_TRY_COMPILE([#include <sys/types.h>
901 #include <sys/socket.h>
902 ],[static struct sockaddr ac_i;int ac_j = sizeof (ac_i.sa_len);],
904 AC_DEFINE(HAVE_SA_LEN,,sa_len)],
907 dnl ----------------------------
908 dnl check sin_len of sockaddr_in
909 dnl ----------------------------
910 AC_MSG_CHECKING(whether struct sockaddr_in has a sin_len field)
911 AC_TRY_COMPILE([#include <sys/types.h>
912 #include <netinet/in.h>
913 ],[static struct sockaddr_in ac_i;int ac_j = sizeof (ac_i.sin_len);],
915 AC_DEFINE(HAVE_SIN_LEN,,sin_len)],
918 dnl ----------------------------
919 dnl check sun_len of sockaddr_un
920 dnl ----------------------------
921 AC_MSG_CHECKING(whether struct sockaddr_un has a sun_len field)
922 AC_TRY_COMPILE([#include <sys/types.h>
924 ],[static struct sockaddr_un ac_i;int ac_j = sizeof (ac_i.sun_len);],
926 AC_DEFINE(HAVE_SUN_LEN,,sun_len)],
929 dnl -----------------------------------
930 dnl check sin6_scope_id of sockaddr_in6
931 dnl -----------------------------------
932 if test "$zebra_cv_ipv6" = yes; then
933 AC_MSG_CHECKING(whether struct sockaddr_in6 has a sin6_scope_id field)
934 AC_TRY_COMPILE([#include <sys/types.h>
935 #include <netinet/in.h>
936 ],[static struct sockaddr_in6 ac_i;int ac_j = sizeof (ac_i.sin6_scope_id);],
938 AC_DEFINE(HAVE_SIN6_SCOPE_ID,,scope id)],
942 dnl ----------------------------
943 dnl check socklen_t exist or not
944 dnl ----------------------------
945 AC_MSG_CHECKING(whther socklen_t is defined)
946 AC_TRY_COMPILE([#include <sys/types.h>
947 #include <sys/socket.h>
948 #include <netinet/in.h>
951 AC_DEFINE(HAVE_SOCKLEN_T,,socklen_t)],
954 dnl ------------------------
955 dnl check struct sockaddr_dl
956 dnl ------------------------
957 AC_MSG_CHECKING(whether struct sockaddr_dl exist)
958 AC_EGREP_HEADER(sockaddr_dl,
961 AC_DEFINE(HAVE_SOCKADDR_DL,,sockaddr_dl)],
964 dnl --------------------------
965 dnl check structure ifaliasreq
966 dnl --------------------------
967 AC_MSG_CHECKING(whether struct ifaliasreq exist)
968 AC_EGREP_HEADER(ifaliasreq,
971 AC_DEFINE(HAVE_IFALIASREQ,,ifaliasreq)],
974 dnl ----------------------------
975 dnl check structure in6_aliasreq
976 dnl ----------------------------
977 AC_MSG_CHECKING(whether struct in6_aliasreq exist)
978 AC_EGREP_HEADER(in6_aliasreq,
981 AC_DEFINE(HAVE_IN6_ALIASREQ,,in6_aliasreq)],
984 dnl -----------------------------------
985 dnl check ifra_lifetime of in6_aliasreq
986 dnl -----------------------------------
987 AC_MSG_CHECKING(whether in6_aliasreq.ifra_lifetime exist)
988 AC_TRY_COMPILE([#include <sys/types.h>
989 #include <netinet6/in6_var.h>
990 ],[static struct if6_aliasreq ac_i;int ac_j = sizeof (ac_i.ifra_lifetime);],
992 AC_DEFINE(HAVE_IFRA_LIFETIME,,Have in6_aliasreq.ifra_lifetime)],
995 dnl ---------------------------
996 dnl check structure rt_addrinfo
997 dnl ---------------------------
998 AC_MSG_CHECKING(whether struct rt_addrinfo exist)
999 AC_EGREP_HEADER(rt_addrinfo,
1002 AC_DEFINE(HAVE_RT_ADDRINFO,,rt_addrinfo)],
1005 dnl --------------------------
1006 dnl check structure in_pktinfo
1007 dnl --------------------------
1008 AC_MSG_CHECKING(whether struct in_pktinfo exist)
1009 AC_TRY_COMPILE([#include <netinet/in.h>
1010 ],[struct in_pktinfo ac_x;],
1012 AC_DEFINE(HAVE_INPKTINFO,,in_pktinfo)],
1015 dnl --------------------------------------
1016 dnl checking for getrusage struct and call
1017 dnl --------------------------------------
1018 AC_MSG_CHECKING(whether getrusage is available)
1019 AC_TRY_COMPILE([#include <sys/resource.h>
1020 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1022 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1025 dnl -------------------
1026 dnl capabilities checks
1027 dnl -------------------
1028 if test "${enable_capabilities}" != "no"; then
1029 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1030 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1032 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1033 quagga_ac_keepcaps="yes"],
1036 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1037 AC_CHECK_HEADERS(sys/capability.h)
1039 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1040 AC_CHECK_LIB(cap, cap_init,
1041 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1049 dnl ---------------------------
1050 dnl check for glibc 'backtrace'
1051 dnl ---------------------------
1052 if test "${glibc}" = "yes"; then
1053 AC_CHECK_HEADER(execinfo.h)
1055 if test x"${ac_cv_header_execinfo_h}" = x"yes"; then
1056 AC_CHECK_FUNC(backtrace,
1057 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)]
1064 CONFDATE=`date '+%Y%m%d'`
1067 dnl ------------------------------
1068 dnl set paths for state directory
1069 dnl ------------------------------
1070 if test "${prefix}" = "NONE"; then
1071 quagga_statedir_prefix="";
1073 quagga_statedir_prefix=${prefix}
1075 if test "${localstatedir}" = '${prefix}/var'; then
1076 AC_CACHE_CHECK(state directory,ac_statedir,
1077 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1078 ${quagga_statedir_prefix}/var/adm dnl
1079 ${quagga_statedir_prefix}/etc dnl
1085 test -d $QUAGGA_STATE_DIR && break
1087 quagga_statedir=$QUAGGA_STATE_DIR])
1089 quagga_statedir=${localstatedir}
1090 AC_MSG_CHECKING(directory to use for state file)
1091 AC_MSG_RESULT(${quagga_statedir})
1093 if test $quagga_statedir = "/dev/null"; then
1094 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1097 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1098 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1099 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1100 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1101 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1102 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1103 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1104 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1105 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1106 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1107 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1108 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1109 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1110 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1111 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1113 dnl ---------------------------
1114 dnl Check htonl works correctly
1115 dnl ---------------------------
1116 AC_MSG_CHECKING(for working htonl)
1117 AC_CACHE_VAL(ac_cv_htonl_works, [
1118 AC_TRY_LINK([#ifdef HAVE_SYS_TYPES_H
1119 #include <sys/types.h>
1124 #ifdef HAVE_NETINET_IN_H
1125 #include <netinet/in.h>
1128 ac_cv_htonl_works=yes,
1129 ac_cv_htonl_works=no)])
1130 AC_MSG_RESULT($ac_cv_htonl_works)
1132 AC_OUTPUT(Makefile lib/Makefile zebra/Makefile ripd/Makefile
1133 ripngd/Makefile bgpd/Makefile ospfd/Makefile
1134 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1139 redhat/Makefile redhat/quagga.spec
1142 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1143 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh
1145 [chmod +x vtysh/extract.pl])
1148 Quagga configuration
1149 --------------------
1150 quagga version : ${PACKAGE_VERSION}
1151 host operationg system : ${host_os}
1152 source code location : ${srcdir}
1154 compiler flags : ${CFLAGS}
1155 linker flags : ${LDFLAGS} ${LIBS}
1156 state file directory : ${quagga_statedir}
1157 config file directory : `eval echo \`echo ${sysconfdir}\``
1158 example directory : `eval echo \`echo ${exampledir}\``
1159 user to run as : ${enable_user}
1160 group to run as : ${enable_group}
1161 group for vty sockets : ${enable_vty_group}
1162 config file mask : ${enable_configfile_mask}
1163 log file mask : ${enable_logfile_mask}
1165 The above user and group must have read/write access to the state file
1166 directory and to the config files in the config file directory.