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.68 2004/10/07 13:53:29 gdt 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 AC_PROG_CC will have set minimal default
60 dnl already, eg "-O2 -g" for gcc, "-g" for others
61 dnl (Wall is gcc specific... have to make sure
62 dnl gcc is being used before setting it)
63 dnl ---------------------------------------------
65 if test "x$cflags_specified" = "x" ; then
66 if test "x${GCC}" = "xyes"; then
67 CFLAGS="-Os -g -Wall -Wsign-compare -Wpointer-arith"
68 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
70 # TODO: conditionally addd -Wpacked if handled
80 AC_CHECK_TOOL(RANLIB, ranlib, :)
92 dnl ----------------------
93 dnl Packages configuration
94 dnl ----------------------
96 [ --enable-vtysh include integrated vty shell for Quagga])
98 [ --disable-ipv6 turn off IPv6 related features and daemons])
100 [ --disable-zebra do not build zebra daemon])
102 [ --disable-bgpd do not build bgpd])
104 [ --disable-ripd do not build ripd])
105 AC_ARG_ENABLE(ripngd,
106 [ --disable-ripngd do not build ripngd])
108 [ --disable-ospfd do not build ospfd])
109 AC_ARG_ENABLE(ospf6d,
110 [ --disable-ospf6d do not build ospf6d])
112 [ --enable-isisd build isisd])
113 AC_ARG_ENABLE(bgp-announce,
114 [ --disable-bgp-announce, turn off BGP route announcement])
115 AC_ARG_ENABLE(netlink,
116 [ --enable-netlink force to use Linux netlink interface])
117 AC_ARG_ENABLE(broken-aliases,
118 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
120 [ --enable-snmp enable SNMP support])
122 [ --with-libpam use libpam for PAM support in vtysh])
123 AC_ARG_ENABLE(tcp-zebra,
124 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
125 AC_ARG_ENABLE(opaque-lsa,
126 [ --enable-opaque-lsa enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
127 AC_ARG_ENABLE(ospfapi,
128 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database,
129 (this is the default if --enable-opaque-lsa is not set)])
130 AC_ARG_ENABLE(ospfclient,
131 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
132 (this is the default if --disable-ospfapi is set)])
133 AC_ARG_ENABLE(ospf-te,
134 [ --enable-ospf-te enable Traffic Engineering Extension to OSPF])
135 AC_ARG_ENABLE(multipath,
136 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
137 AC_ARG_ENABLE(quagga_user,
138 [ --enable-user=ARG user to run Quagga suite as (default quagga)])
139 AC_ARG_ENABLE(quagga_group,
140 [ --enable-group=ARG group to run Quagga suite as (default quagga)])
141 AC_ARG_ENABLE(vty_group,
142 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
143 AC_ARG_ENABLE(configfile_mask,
144 [ --enable-configfile-mask=ARG set mask for config files])
145 AC_ARG_ENABLE(logfile_mask,
146 [ --enable-logfile-mask=ARG set mask for log files])
149 [ --disable-rtadv disable IPV6 router advertisement feature])
151 [ --enable-irdp enable IRDP server support in zebra])
152 AC_ARG_ENABLE(capabilities,
153 [ --disable-capabilities disable using POSIX capabilities])
155 if test "${enable_broken_aliases}" = "yes"; then
156 if test "${enable_netlink}" = "yes"
158 echo "Sorry, you can't use netlink with broken aliases"
161 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
165 if test "${enable_tcp_zebra}" = "yes"; then
166 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
169 if test "${enable_opaque_lsa}" = "yes"; then
170 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
173 if test "${enable_ospf_te}" = "yes"; then
174 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
175 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
178 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
179 if test "${enable_rtadv}" != "no"; then
181 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
186 if test "${enable_irdp}" = "yes"; then
187 AC_DEFINE(HAVE_IRDP,, IRDP )
190 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
192 elif test "${enable_user}" = "no"; then
195 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
197 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
198 enable_group="quagga"
199 elif test "${enable_group}" = "no"; then
202 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
204 if test x"${enable_vty_group}" = x"yes" ; then
205 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
206 elif test x"${enable_vty_group}" != x""; then
207 if test x"${enable_vty_group}" != x"no"; then
208 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
212 enable_configfile_mask=${enable_configfile_mask:-0600}
213 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
215 enable_logfile_mask=${enable_logfile_mask:-0600}
216 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
222 case "${enable_multipath}" in
224 MULTIPATH_NUM="${enable_multipath}"
229 echo "Please specify digit to --enable-multipath ARG."
236 AC_SUBST(MULTIPATH_NUM)
238 dnl -------------------
239 dnl Check header files.
240 dnl -------------------
242 AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
243 sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
244 sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
247 AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
248 net/if_dl.h net/netopt.h inet/nd.h net/route.h \
249 net/if.h net/if_var.h netinet/in_var.h])
251 dnl V6 headers are checked below, after we check for v6
258 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
260 [*-sunos5.[6-8]*] | [*-solaris2.[6-8]*])
262 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.8)
263 AC_DEFINE(SUNOS_5, 1, SunOS 5)
264 AC_CHECK_LIB(xnet, main)
267 [*-sunos5.[8-9]] | [*-sunos5.1[0-9]] \
268 | [*-solaris2.[8-9]] | [*-solaris2.1[0-9]])
270 AC_DEFINE(SUNOS_59,,SunOS 5.9 up)
271 AC_DEFINE(SUNOS_5, 1, SunOS 5)
272 AC_CHECK_LIB(socket, main)
273 AC_CHECK_LIB(nsl, main)
276 *-sunos5* | *-solaris2*)
277 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
278 AC_CHECK_LIB(socket, main)
279 AC_CHECK_LIB(nsl, main)
284 AC_DEFINE(GNU_LINUX,,GNU Linux)
287 AC_CHECK_LIB(nsl, gethostbyname)
288 AC_CHECK_LIB(socket, socket)
291 AC_DEFINE(FREEBSD_32,,FreeBSD 3.2)
295 AC_DEFINE(OPEN_BSD,,OpenBSD)
299 OTHER_METHOD="mtu_kvm.o"
300 AC_CHECK_LIB(kvm, main)
304 AC_DEFINE(IRIX_65,,IRIX 6.5)
308 dnl ---------------------
309 dnl Integrated VTY option
310 dnl ---------------------
311 case "${enable_vtysh}" in
312 "yes") VTYSH="vtysh";
313 AC_DEFINE(VTYSH,,VTY shell)
314 AC_PATH_PROG(PERL, perl)
315 dnl Vtysh uses libreadline, which looks for termcap functions at
316 dnl configure time. We follow readline's search order.
317 dnl The required procedures are in libtermcap on NetBSD, in
318 dnl [TODO] on Linux, and in [TODO] on Solaris.
319 AC_CHECK_LIB(termcap, tputs, ,
320 AC_CHECK_LIB(tinfo, tputs, ,
321 AC_CHECK_LIB(curses, tputs, ,
322 AC_CHECK_LIB(ncurses, tputs))))
323 AC_CHECK_LIB(readline, main)
324 if test $ac_cv_lib_readline_main = no; then
325 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
327 AC_CHECK_HEADER(readline/history.h)
328 if test $ac_cv_header_readline_history_h = no;then
329 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
331 AC_CHECK_LIB(readline, rl_completion_matches)
332 if test $ac_cv_lib_readline_rl_completion_matches = no; then
333 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
343 if test "$with_libpam" = "yes"; then
344 AC_CHECK_HEADER(security/pam_misc.h)
345 if test "$ac_cv_header_security_pam_misc_h" = yes; then
346 AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
347 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
348 pam_conv_func="misc_conv"
350 AC_CHECK_HEADER(security/openpam.h)
351 if test "$ac_cv_header_security_openpam_h" = yes; then
352 AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
353 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
354 pam_conv_func="openpam_ttyconv"
356 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
357 AC_MSG_WARN([*** pam support will not be built ***])
362 if test "$with_libpam" = "yes"; then
363 dnl took this test from proftpd's configure.in and suited to our needs
364 dnl -------------------------------------------------------------------------
366 dnl This next check looks funky due to a linker problem with some versions
367 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
368 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
369 dnl with RedHat 6.2 and Debian 2.2 or better.
370 AC_CHECK_LIB(pam, pam_start,
371 [AC_CHECK_LIB(pam, $pam_conv_func,
372 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
374 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
375 LIBPAM="-lpam -lpam_misc"]
379 [AC_CHECK_LIB(pam, pam_end,
380 [AC_CHECK_LIB(pam, $pam_conv_func,
381 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
382 LIBPAM="-lpam -ldl"],
383 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
384 LIBPAM="-lpam -ldl -lpam_misc"]
386 ],AC_MSG_WARN([*** pam support will not be built ***]),
393 dnl -------------------------------
394 dnl Endian-ness check
395 dnl -------------------------------
398 dnl -------------------------------
399 dnl check the size in byte of the C
400 dnl -------------------------------
401 dnl AC_CHECK_SIZEOF(char)
402 dnl AC_CHECK_SIZEOF(int)
403 dnl AC_CHECK_SIZEOF(short)
404 dnl AC_CHECK_SIZEOF(long)
406 dnl ----------------------------
407 dnl check existance of functions
408 dnl ----------------------------
409 AC_CHECK_FUNCS(memset memcpy strerror inet_aton daemon snprintf vsnprintf \
410 strlcat strlcpy if_nametoindex if_indextoname getifaddrs \
412 AC_CHECK_FUNCS(setproctitle, ,
413 [AC_CHECK_LIB(util, setproctitle,
415 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
421 dnl ------------------------------------
422 dnl Determine routing get and set method
423 dnl ------------------------------------
424 AC_MSG_CHECKING(zebra between kernel interface method)
425 if test x"$opsys" = x"gnu-linux"; then
426 if test "${enable_netlink}" = "yes";then
427 AC_MSG_RESULT(netlink)
428 RT_METHOD=rt_netlink.o
429 AC_DEFINE(HAVE_NETLINK,,netlink)
431 elif test "${enable_netlink}" = "no"; then
436 AC_MSG_RESULT(netlink)
437 RT_METHOD=rt_netlink.o
438 AC_DEFINE(HAVE_NETLINK,,netlink)
441 elif test x"$opsys" = x"sol2-6";then
442 AC_MSG_RESULT(Route socket)
443 KERNEL_METHOD="kernel_socket.o"
444 RT_METHOD="rt_socket.o"
445 elif test x"$opsys" = x"sol9";then
446 AC_MSG_RESULT(Route socket)
447 KERNEL_METHOD="kernel_socket.o"
448 RT_METHOD="rt_socket.o"
449 elif test "$opsys" = "irix" ; then
450 AC_MSG_RESULT(Route socket)
451 KERNEL_METHOD="kernel_socket.o"
452 RT_METHOD="rt_socket.o"
454 AC_TRY_RUN([#include <errno.h>
455 #include <sys/types.h>
456 #include <sys/socket.h>
462 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
463 if (ac_sock < 0 && errno == EINVAL)
467 [KERNEL_METHOD=kernel_socket.o
468 RT_METHOD=rt_socket.o
469 AC_MSG_RESULT(socket)],
470 [RT_METHOD=rt_ioctl.o
471 AC_MSG_RESULT(ioctl)],
472 [KERNEL_METHOD=kernel_socket.o
473 RT_METHOD=rt_socket.o
474 AC_MSG_RESULT(socket)])
477 AC_SUBST(KERNEL_METHOD)
478 AC_SUBST(OTHER_METHOD)
480 dnl ------------------------------
481 dnl check kernel route read method
482 dnl ------------------------------
483 AC_CACHE_CHECK(route read method check, zebra_rtread,
484 [if test "$netlink" = yes; then
485 RTREAD_METHOD="rtread_netlink.o"
486 zebra_rtread="netlink"
488 for zebra_rtread in /proc/net/route /dev/ip /dev/null;
490 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
492 case $zebra_rtread in
493 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
494 zebra_rtread="proc";;
497 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
498 zebra_rtread="sysctl";;
499 *) RTREAD_METHOD="rtread_getmsg.o"
500 zebra_rtread="getmsg";;
502 *) RTREAD_METHOD="rtread_sysctl.o"
503 zebra_rtread="sysctl";;
506 AC_SUBST(RTREAD_METHOD)
508 dnl -----------------------------
509 dnl check interface lookup method
510 dnl -----------------------------
512 AC_MSG_CHECKING(interface looking up method)
513 if test "$netlink" = yes; then
514 AC_MSG_RESULT(netlink)
515 IF_METHOD=if_netlink.o
516 elif test "$opsys" = "sol2-6";then
517 AC_MSG_RESULT(Solaris GIF)
519 elif test "$opsys" = "sol9";then
520 AC_MSG_RESULT(Solaris GLIF)
521 IF_METHOD=if_ioctl_solaris.o
522 IOCTL_METHOD=ioctl_solaris.o
523 elif test "$opsys" = "irix" ; then
526 elif test "$opsys" = "openbsd";then
527 AC_MSG_RESULT(openbsd)
529 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
530 AC_MSG_RESULT(sysctl)
531 IF_METHOD=if_sysctl.o
532 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
538 AC_SUBST(IOCTL_METHOD)
540 dnl -----------------------
541 dnl check proc file system.
542 dnl -----------------------
543 if test -r /proc/net/dev; then
544 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
548 if test -r /proc/net/if_inet6; then
549 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
554 dnl -----------------------------
555 dnl check ipforward detect method
556 dnl -----------------------------
557 AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
558 [for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
560 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
562 case $zebra_ipforward_path in
563 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
564 zebra_ipforward_path="proc";;
567 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
568 zebra_ipforward_path="ews";;
569 *-freebsd*) IPFORWARD=ipforward_sysctl.o
570 zebra_ipforward_path="sysctl";;
571 *) IPFORWARD=ipforward_solaris.o
572 zebra_ipforward_path="solaris";;
574 *) IPFORWARD=ipforward_sysctl.o
575 zebra_ipforward_path="sysctl";;
579 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
584 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
585 if test "${enable_ipv6}" = "no"; then
586 AC_MSG_RESULT(disabled)
591 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
593 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
594 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
598 AC_MSG_RESULT(INRIA IPv6)
602 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
604 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
605 AC_DEFINE(KAME,1,KAME IPv6)
608 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
609 LIB_IPV6="-L/usr/local/v6/lib -linet6"
612 dnl -------------------------
614 dnl default host check
615 dnl It is not used by Kheops
616 dnl -------------------------
617 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
619 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
620 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
621 AC_DEFINE(KAME,1,KAME IPv6 stack)
624 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
625 LIB_IPV6="-L/usr/local/v6/lib -linet6"
627 AC_MSG_RESULT(MUSICA)
631 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
633 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
637 if test x"$opsys" = x"bsdi";then
638 AC_DEFINE(BSDI_NRL,,BSDI)
639 AC_MSG_RESULT(BSDI_NRL)
643 dnl ------------------------------------
644 dnl Solaris 9, 10 and potentially higher
645 dnl ------------------------------------
646 elif test x"$opsys" = x"sol9"; then
648 AC_DEFINE(HAVE_IPV6, 1, IPv6)
649 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
652 AC_MSG_RESULT(Solaris IPv6)
656 elif test "${enable_ipv6}" = "yes"; then
658 #include <linux/version.h>
659 /* 2.1.128 or later */
660 #if LINUX_VERSION_CODE >= 0x020180
664 zebra_cv_linux_ipv6=yes
665 AC_MSG_RESULT(Linux IPv6)])
667 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
670 zebra_cv_linux_ipv6=yes
671 AC_MSG_RESULT(Linux IPv6)
675 if test "$zebra_cv_linux_ipv6" = "yes";then
676 AC_MSG_CHECKING(for GNU libc >= 2.1)
677 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
679 #include <features.h>
680 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
684 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
690 if test "$glibc" != "yes"; then
691 INCLUDES="-I/usr/inet6/include"
692 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
693 LIB_IPV6="-L/usr/inet6/lib -linet6"
698 dnl -----------------------
699 dnl Set IPv6 related values
700 dnl -----------------------
701 LIBS="$LIB_IPV6 $LIBS"
704 if test x"$RIPNGD" = x""; then
705 AC_MSG_RESULT(IPv4 only)
709 dnl ------------------
710 dnl IPv6 header checks
711 dnl ------------------
712 if test "x${zebra_cv_ipv6}" = "xyes"; then
713 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
714 netinet6/in6_var.h netinet6/nd6.h])
717 dnl --------------------
718 dnl Daemon disable check
719 dnl --------------------
720 if test "${enable_zebra}" = "no";then
726 if test "${enable_bgpd}" = "no";then
732 if test "${enable_ripd}" = "no";then
738 if test "${enable_ospfd}" = "no";then
745 if test "${enable_opaque_lsa}" = "yes"; then
746 if test "${enable_ospfapi}" != "no";then
747 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
749 if test "${enable_ospfclient}" != "no";then
750 OSPFCLIENT="ospfclient"
756 case "${enable_ripngd}" in
757 "yes") RIPNGD="ripngd";;
762 case "${enable_ospf6d}" in
763 "yes") OSPF6D="ospf6d";;
768 case "${enable_isisd}" in
769 "yes") ISISD="isisd";;
774 if test "${enable_bgp_announce}" = "no";then
775 AC_DEFINE(DISABLE_BGP_ANNOUNCE,,Disable BGP installation to zebra)
790 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
791 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
792 AC_CHECK_LIB(crypt, crypt)
793 AC_CHECK_LIB(resolv, res_init)
794 AC_CHECK_LIB(m, main)
796 dnl ---------------------------------------------------
797 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
798 dnl ---------------------------------------------------
799 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
800 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
801 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
803 dnl ---------------------------
804 dnl check system has GNU regexp
805 dnl ---------------------------
806 dnl AC_MSG_CHECKING(whether system has GNU regex)
807 AC_CHECK_LIB(c, regexec,
808 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
810 [LIB_REGEX="regex.o"])
813 dnl ------------------
814 dnl check SNMP library
815 dnl ------------------
816 if test "${enable_snmp}" = "yes";then
817 dnl AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
818 if test "${HAVE_SNMP}" = ""; then
821 unset ac_cv_lib_snmp_asn_parse_int
822 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
823 if test "${NEED_CRYPTO}" = ""; then
824 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes ])
826 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes; NEED_CRYPTO=yes;LIBS="$LIBS -lcrypto" ],,"-lcrypto")
830 if test "${HAVE_SNMP}" = ""; then
833 unset ac_cv_lib_snmp_asn_parse_int
834 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes, )
835 if test "${HAVE_SNMP}" = ""; then
836 unset ac_cv_lib_snmp_asn_parse_int
837 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
838 if test "${NEED_CRYPTO}" = "yes"; then
839 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
845 if test "${HAVE_SNMP}" = ""; then
847 LIBS="-L/usr/local/lib"
848 unset ac_cv_lib_snmp_asn_parse_int
849 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
850 if test "${HAVE_SNMP}" = ""; then
851 unset ac_cv_lib_snmp_asn_parse_int
852 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
853 if test "${NEED_CRYPTO}" = "yes"; then
854 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
860 if test "${HAVE_SNMP}" = "yes"; then
861 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
863 test -f "${ac_snmp}" && break
867 /usr/include/net-snmp/*)
868 AC_DEFINE(HAVE_SNMP,,SNMP)
869 AC_DEFINE(HAVE_NETSNMP,,SNMP)
870 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
871 CFLAGS="${CFLAGS} -I/usr/include/net-snmp -I/usr/include/net-snmp/library"
872 if test "${HAVE_NETSNMP}" = "yes"; then
873 LIBS="${LIBS} -lnetsnmp"
875 LIBS="${LIBS} -lsnmp"
878 /usr/include/ucd-snmp/*)
879 AC_DEFINE(HAVE_SNMP,,SNMP)
880 CFLAGS="${CFLAGS} -I/usr/include/ucd-snmp"
881 LIBS="${LIBS} -lsnmp"
883 /usr/local/include/ucd-snmp/*)
884 AC_DEFINE(HAVE_SNMP,,SNMP)
885 CFLAGS="${CFLAGS} -I/usr/local/include/ucd-snmp"
886 LIBS="${LIBS} -L/usr/local/lib -lsnmp"
888 /usr/local/include/net-snmp/*)
889 AC_DEFINE(HAVE_SNMP,,SNMP)
890 AC_DEFINE(HAVE_NET_SNMP,,SNMP)
891 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
892 CFLAGS="${CFLAGS} -I/usr/local/include/net-snmp"
893 LIBS="${LIBS} -L/usr/local/lib -lnetsnmp"
896 if test "${NEED_CRYPTO}" = "yes"; then
897 LIBS="${LIBS} -lcrypto"
902 dnl ----------------------------
903 dnl check sa_len of sockaddr
904 dnl ----------------------------
905 AC_MSG_CHECKING(whether struct sockaddr has a sa_len field)
906 AC_TRY_COMPILE([#include <sys/types.h>
907 #include <sys/socket.h>
908 ],[static struct sockaddr ac_i;int ac_j = sizeof (ac_i.sa_len);],
910 AC_DEFINE(HAVE_SA_LEN,,sa_len)],
913 dnl ----------------------------
914 dnl check sin_len of sockaddr_in
915 dnl ----------------------------
916 AC_MSG_CHECKING(whether struct sockaddr_in has a sin_len field)
917 AC_TRY_COMPILE([#include <sys/types.h>
918 #include <netinet/in.h>
919 ],[static struct sockaddr_in ac_i;int ac_j = sizeof (ac_i.sin_len);],
921 AC_DEFINE(HAVE_SIN_LEN,,sin_len)],
924 dnl ----------------------------
925 dnl check sun_len of sockaddr_un
926 dnl ----------------------------
927 AC_MSG_CHECKING(whether struct sockaddr_un has a sun_len field)
928 AC_TRY_COMPILE([#include <sys/types.h>
930 ],[static struct sockaddr_un ac_i;int ac_j = sizeof (ac_i.sun_len);],
932 AC_DEFINE(HAVE_SUN_LEN,,sun_len)],
935 dnl -----------------------------------
936 dnl check sin6_scope_id of sockaddr_in6
937 dnl -----------------------------------
938 if test "$zebra_cv_ipv6" = yes; then
939 AC_MSG_CHECKING(whether struct sockaddr_in6 has a sin6_scope_id field)
940 AC_TRY_COMPILE([#include <sys/types.h>
941 #include <netinet/in.h>
942 ],[static struct sockaddr_in6 ac_i;int ac_j = sizeof (ac_i.sin6_scope_id);],
944 AC_DEFINE(HAVE_SIN6_SCOPE_ID,,scope id)],
948 dnl ----------------------------
949 dnl check socklen_t exist or not
950 dnl ----------------------------
951 AC_MSG_CHECKING(whther socklen_t is defined)
952 AC_TRY_COMPILE([#include <sys/types.h>
953 #include <sys/socket.h>
954 #include <netinet/in.h>
957 AC_DEFINE(HAVE_SOCKLEN_T,,socklen_t)],
960 dnl ------------------------
961 dnl check struct sockaddr_dl
962 dnl ------------------------
963 AC_MSG_CHECKING(whether struct sockaddr_dl exist)
964 AC_EGREP_HEADER(sockaddr_dl,
967 AC_DEFINE(HAVE_SOCKADDR_DL,,sockaddr_dl)],
970 dnl --------------------------
971 dnl check structure ifaliasreq
972 dnl --------------------------
973 AC_MSG_CHECKING(whether struct ifaliasreq exist)
974 AC_EGREP_HEADER(ifaliasreq,
977 AC_DEFINE(HAVE_IFALIASREQ,,ifaliasreq)],
980 dnl ----------------------------
981 dnl check structure in6_aliasreq
982 dnl ----------------------------
983 AC_MSG_CHECKING(whether struct in6_aliasreq exist)
984 AC_EGREP_HEADER(in6_aliasreq,
987 AC_DEFINE(HAVE_IN6_ALIASREQ,,in6_aliasreq)],
990 dnl -----------------------------------
991 dnl check ifra_lifetime of in6_aliasreq
992 dnl -----------------------------------
993 AC_MSG_CHECKING(whether in6_aliasreq.ifra_lifetime exist)
994 AC_TRY_COMPILE([#include <sys/types.h>
995 #include <netinet6/in6_var.h>
996 ],[static struct if6_aliasreq ac_i;int ac_j = sizeof (ac_i.ifra_lifetime);],
998 AC_DEFINE(HAVE_IFRA_LIFETIME,,Have in6_aliasreq.ifra_lifetime)],
1001 dnl ---------------------------
1002 dnl check structure rt_addrinfo
1003 dnl ---------------------------
1004 AC_MSG_CHECKING(whether struct rt_addrinfo exist)
1005 AC_EGREP_HEADER(rt_addrinfo,
1008 AC_DEFINE(HAVE_RT_ADDRINFO,,rt_addrinfo)],
1011 dnl --------------------------
1012 dnl check structure in_pktinfo
1013 dnl --------------------------
1014 AC_MSG_CHECKING(whether struct in_pktinfo exist)
1015 AC_TRY_COMPILE([#include <netinet/in.h>
1016 ],[struct in_pktinfo ac_x;],
1018 AC_DEFINE(HAVE_INPKTINFO,,in_pktinfo)],
1021 dnl --------------------------------------
1022 dnl checking for getrusage struct and call
1023 dnl --------------------------------------
1024 AC_MSG_CHECKING(whether getrusage is available)
1025 AC_TRY_COMPILE([#include <sys/resource.h>
1026 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1028 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1031 dnl -------------------
1032 dnl capabilities checks
1033 dnl -------------------
1034 if test "${enable_capabilities}" != "no"; then
1035 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1036 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1038 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1039 quagga_ac_keepcaps="yes"],
1042 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1043 AC_CHECK_HEADERS(sys/capability.h)
1045 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1046 AC_CHECK_LIB(cap, cap_init,
1047 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1055 dnl ---------------------------
1056 dnl check for glibc 'backtrace'
1057 dnl ---------------------------
1058 if test "${glibc}" = "yes"; then
1059 AC_CHECK_HEADER(execinfo.h)
1061 if test x"${ac_cv_header_execinfo_h}" = x"yes"; then
1062 AC_CHECK_FUNC(backtrace,
1063 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)]
1070 CONFDATE=`date '+%Y%m%d'`
1073 dnl ------------------------------
1074 dnl set paths for state directory
1075 dnl ------------------------------
1076 if test "${prefix}" = "NONE"; then
1077 quagga_statedir_prefix="";
1079 quagga_statedir_prefix=${prefix}
1081 if test "${localstatedir}" = '${prefix}/var'; then
1082 AC_CACHE_CHECK(state directory,ac_statedir,
1083 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1084 ${quagga_statedir_prefix}/var/adm dnl
1085 ${quagga_statedir_prefix}/etc dnl
1091 test -d $QUAGGA_STATE_DIR && break
1093 quagga_statedir=$QUAGGA_STATE_DIR])
1095 quagga_statedir=${localstatedir}
1096 AC_MSG_CHECKING(directory to use for state file)
1097 AC_MSG_RESULT(${quagga_statedir})
1099 if test $quagga_statedir = "/dev/null"; then
1100 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1103 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1104 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1105 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1106 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1107 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1108 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1109 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1110 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1111 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1112 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1113 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1114 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1115 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1116 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1117 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1119 dnl ---------------------------
1120 dnl Check htonl works correctly
1121 dnl ---------------------------
1122 AC_MSG_CHECKING(for working htonl)
1123 AC_CACHE_VAL(ac_cv_htonl_works, [
1124 AC_TRY_LINK([#ifdef HAVE_SYS_TYPES_H
1125 #include <sys/types.h>
1130 #ifdef HAVE_NETINET_IN_H
1131 #include <netinet/in.h>
1134 ac_cv_htonl_works=yes,
1135 ac_cv_htonl_works=no)])
1136 AC_MSG_RESULT($ac_cv_htonl_works)
1138 AC_OUTPUT(Makefile lib/Makefile zebra/Makefile ripd/Makefile
1139 ripngd/Makefile bgpd/Makefile ospfd/Makefile
1140 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1145 redhat/Makefile redhat/quagga.spec
1148 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1149 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh
1151 [chmod +x vtysh/extract.pl])
1154 Quagga configuration
1155 --------------------
1156 quagga version : ${PACKAGE_VERSION}
1157 host operationg system : ${host_os}
1158 source code location : ${srcdir}
1160 compiler flags : ${CFLAGS}
1161 linker flags : ${LDFLAGS} ${LIBS}
1162 state file directory : ${quagga_statedir}
1163 config file directory : `eval echo \`echo ${sysconfdir}\``
1164 example directory : `eval echo \`echo ${exampledir}\``
1165 user to run as : ${enable_user}
1166 group to run as : ${enable_group}
1167 group for vty sockets : ${enable_vty_group}
1168 config file mask : ${enable_configfile_mask}
1169 log file mask : ${enable_logfile_mask}
1171 The above user and group must have read/write access to the state file
1172 directory and to the config files in the config file directory.