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.72 2004/10/22 23:53:19 paul Exp $
11 AC_INIT(Quagga, 0.97.2, [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])
154 AC_ARG_ENABLE(gcc_ultra_verbose,
155 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
157 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
158 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
159 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
160 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
161 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
164 if test "${enable_broken_aliases}" = "yes"; then
165 if test "${enable_netlink}" = "yes"
167 echo "Sorry, you can't use netlink with broken aliases"
170 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
174 if test "${enable_tcp_zebra}" = "yes"; then
175 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
178 if test "${enable_opaque_lsa}" = "yes"; then
179 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
182 if test "${enable_ospf_te}" = "yes"; then
183 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
184 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
187 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
188 if test "${enable_rtadv}" != "no"; then
190 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
195 if test "${enable_irdp}" = "yes"; then
196 AC_DEFINE(HAVE_IRDP,, IRDP )
199 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
201 elif test "${enable_user}" = "no"; then
204 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
206 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
207 enable_group="quagga"
208 elif test "${enable_group}" = "no"; then
211 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
213 if test x"${enable_vty_group}" = x"yes" ; then
214 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
215 elif test x"${enable_vty_group}" != x""; then
216 if test x"${enable_vty_group}" != x"no"; then
217 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
221 enable_configfile_mask=${enable_configfile_mask:-0600}
222 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
224 enable_logfile_mask=${enable_logfile_mask:-0600}
225 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
231 case "${enable_multipath}" in
233 MULTIPATH_NUM="${enable_multipath}"
238 echo "Please specify digit to --enable-multipath ARG."
245 AC_SUBST(MULTIPATH_NUM)
247 dnl -------------------
248 dnl Check header files.
249 dnl -------------------
251 AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
252 sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
253 sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
256 AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
257 net/if_dl.h net/netopt.h inet/nd.h net/route.h \
258 net/if.h net/if_var.h netinet/in_var.h])
260 dnl V6 headers are checked below, after we check for v6
267 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
269 [*-sunos5.[6-8]*] | [*-solaris2.[6-8]*])
271 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.8)
272 AC_DEFINE(SUNOS_5, 1, SunOS 5)
273 AC_CHECK_LIB(xnet, main)
276 [*-sunos5.[8-9]] | [*-sunos5.1[0-9]] \
277 | [*-solaris2.[8-9]] | [*-solaris2.1[0-9]])
279 AC_DEFINE(SUNOS_59,,SunOS 5.9 up)
280 AC_DEFINE(SUNOS_5, 1, SunOS 5)
281 AC_CHECK_LIB(socket, main)
282 AC_CHECK_LIB(nsl, main)
285 *-sunos5* | *-solaris2*)
286 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
287 AC_CHECK_LIB(socket, main)
288 AC_CHECK_LIB(nsl, main)
293 AC_DEFINE(GNU_LINUX,,GNU Linux)
296 AC_CHECK_LIB(nsl, gethostbyname)
297 AC_CHECK_LIB(socket, socket)
300 AC_DEFINE(FREEBSD_32,,FreeBSD 3.2)
304 AC_DEFINE(OPEN_BSD,,OpenBSD)
308 OTHER_METHOD="mtu_kvm.o"
309 AC_CHECK_LIB(kvm, main)
313 AC_DEFINE(IRIX_65,,IRIX 6.5)
317 dnl ---------------------
318 dnl Integrated VTY option
319 dnl ---------------------
320 case "${enable_vtysh}" in
321 "yes") VTYSH="vtysh";
322 AC_DEFINE(VTYSH,,VTY shell)
323 AC_PATH_PROG(PERL, perl)
324 dnl Vtysh uses libreadline, which looks for termcap functions at
325 dnl configure time. We follow readline's search order.
326 dnl The required procedures are in libtermcap on NetBSD, in
327 dnl [TODO] on Linux, and in [TODO] on Solaris.
328 AC_CHECK_LIB(termcap, tputs, ,
329 AC_CHECK_LIB(tinfo, tputs, ,
330 AC_CHECK_LIB(curses, tputs, ,
331 AC_CHECK_LIB(ncurses, tputs))))
332 AC_CHECK_LIB(readline, main)
333 if test $ac_cv_lib_readline_main = no; then
334 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
336 AC_CHECK_HEADER(readline/history.h)
337 if test $ac_cv_header_readline_history_h = no;then
338 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
340 AC_CHECK_LIB(readline, rl_completion_matches)
341 if test $ac_cv_lib_readline_rl_completion_matches = no; then
342 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
352 if test "$with_libpam" = "yes"; then
353 AC_CHECK_HEADER(security/pam_misc.h)
354 if test "$ac_cv_header_security_pam_misc_h" = yes; then
355 AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
356 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
357 pam_conv_func="misc_conv"
359 AC_CHECK_HEADER(security/openpam.h)
360 if test "$ac_cv_header_security_openpam_h" = yes; then
361 AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
362 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
363 pam_conv_func="openpam_ttyconv"
365 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
366 AC_MSG_WARN([*** pam support will not be built ***])
371 if test "$with_libpam" = "yes"; then
372 dnl took this test from proftpd's configure.in and suited to our needs
373 dnl -------------------------------------------------------------------------
375 dnl This next check looks funky due to a linker problem with some versions
376 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
377 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
378 dnl with RedHat 6.2 and Debian 2.2 or better.
379 AC_CHECK_LIB(pam, pam_start,
380 [AC_CHECK_LIB(pam, $pam_conv_func,
381 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
383 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
384 LIBPAM="-lpam -lpam_misc"]
388 [AC_CHECK_LIB(pam, pam_end,
389 [AC_CHECK_LIB(pam, $pam_conv_func,
390 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
391 LIBPAM="-lpam -ldl"],
392 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
393 LIBPAM="-lpam -ldl -lpam_misc"]
395 ],AC_MSG_WARN([*** pam support will not be built ***]),
402 dnl -------------------------------
403 dnl Endian-ness check
404 dnl -------------------------------
407 dnl -------------------------------
408 dnl check the size in byte of the C
409 dnl -------------------------------
410 dnl AC_CHECK_SIZEOF(char)
411 dnl AC_CHECK_SIZEOF(int)
412 dnl AC_CHECK_SIZEOF(short)
413 dnl AC_CHECK_SIZEOF(long)
415 dnl ----------------------------
416 dnl check existance of functions
417 dnl ----------------------------
418 AC_CHECK_FUNCS(memset memcpy strerror inet_aton daemon snprintf vsnprintf \
419 strlcat strlcpy if_nametoindex if_indextoname getifaddrs \
421 AC_CHECK_FUNCS(setproctitle, ,
422 [AC_CHECK_LIB(util, setproctitle,
424 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
430 dnl ------------------------------------
431 dnl Determine routing get and set method
432 dnl ------------------------------------
433 AC_MSG_CHECKING(zebra between kernel interface method)
434 if test x"$opsys" = x"gnu-linux"; then
435 if test "${enable_netlink}" = "yes";then
436 AC_MSG_RESULT(netlink)
437 RT_METHOD=rt_netlink.o
438 AC_DEFINE(HAVE_NETLINK,,netlink)
440 elif test "${enable_netlink}" = "no"; then
445 AC_MSG_RESULT(netlink)
446 RT_METHOD=rt_netlink.o
447 AC_DEFINE(HAVE_NETLINK,,netlink)
450 elif test x"$opsys" = x"sol2-6";then
451 AC_MSG_RESULT(Route socket)
452 KERNEL_METHOD="kernel_socket.o"
453 RT_METHOD="rt_socket.o"
454 elif test x"$opsys" = x"sol9";then
455 AC_MSG_RESULT(Route socket)
456 KERNEL_METHOD="kernel_socket.o"
457 RT_METHOD="rt_socket.o"
458 elif test "$opsys" = "irix" ; then
459 AC_MSG_RESULT(Route socket)
460 KERNEL_METHOD="kernel_socket.o"
461 RT_METHOD="rt_socket.o"
463 AC_TRY_RUN([#include <errno.h>
464 #include <sys/types.h>
465 #include <sys/socket.h>
471 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
472 if (ac_sock < 0 && errno == EINVAL)
476 [KERNEL_METHOD=kernel_socket.o
477 RT_METHOD=rt_socket.o
478 AC_MSG_RESULT(socket)],
479 [RT_METHOD=rt_ioctl.o
480 AC_MSG_RESULT(ioctl)],
481 [KERNEL_METHOD=kernel_socket.o
482 RT_METHOD=rt_socket.o
483 AC_MSG_RESULT(socket)])
486 AC_SUBST(KERNEL_METHOD)
487 AC_SUBST(OTHER_METHOD)
489 dnl ------------------------------
490 dnl check kernel route read method
491 dnl ------------------------------
492 AC_CACHE_CHECK(route read method check, zebra_rtread,
493 [if test "$netlink" = yes; then
494 RTREAD_METHOD="rtread_netlink.o"
495 zebra_rtread="netlink"
497 for zebra_rtread in /proc/net/route /dev/ip /dev/null;
499 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
501 case $zebra_rtread in
502 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
503 zebra_rtread="proc";;
506 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
507 zebra_rtread="sysctl";;
508 *) RTREAD_METHOD="rtread_getmsg.o"
509 zebra_rtread="getmsg";;
511 *) RTREAD_METHOD="rtread_sysctl.o"
512 zebra_rtread="sysctl";;
515 AC_SUBST(RTREAD_METHOD)
517 dnl -----------------------------
518 dnl check interface lookup method
519 dnl -----------------------------
521 AC_MSG_CHECKING(interface looking up method)
522 if test "$netlink" = yes; then
523 AC_MSG_RESULT(netlink)
524 IF_METHOD=if_netlink.o
525 elif test "$opsys" = "sol2-6";then
526 AC_MSG_RESULT(Solaris GIF)
528 elif test "$opsys" = "sol9";then
529 AC_MSG_RESULT(Solaris GLIF)
530 IF_METHOD=if_ioctl_solaris.o
531 IOCTL_METHOD=ioctl_solaris.o
532 elif test "$opsys" = "irix" ; then
535 elif test "$opsys" = "openbsd";then
536 AC_MSG_RESULT(openbsd)
538 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
539 AC_MSG_RESULT(sysctl)
540 IF_METHOD=if_sysctl.o
541 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
547 AC_SUBST(IOCTL_METHOD)
549 dnl -----------------------
550 dnl check proc file system.
551 dnl -----------------------
552 if test -r /proc/net/dev; then
553 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
557 if test -r /proc/net/if_inet6; then
558 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
563 dnl -----------------------------
564 dnl check ipforward detect method
565 dnl -----------------------------
566 AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
567 [for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
569 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
571 case $zebra_ipforward_path in
572 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
573 zebra_ipforward_path="proc";;
576 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
577 zebra_ipforward_path="ews";;
578 *-freebsd*) IPFORWARD=ipforward_sysctl.o
579 zebra_ipforward_path="sysctl";;
580 *) IPFORWARD=ipforward_solaris.o
581 zebra_ipforward_path="solaris";;
583 *) IPFORWARD=ipforward_sysctl.o
584 zebra_ipforward_path="sysctl";;
588 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
593 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
594 if test "${enable_ipv6}" = "no"; then
595 AC_MSG_RESULT(disabled)
600 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
602 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
603 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
607 AC_MSG_RESULT(INRIA IPv6)
611 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
613 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
614 AC_DEFINE(KAME,1,KAME IPv6)
617 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
618 LIB_IPV6="-L/usr/local/v6/lib -linet6"
621 dnl -------------------------
623 dnl default host check
624 dnl It is not used by Kheops
625 dnl -------------------------
626 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
628 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
629 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
630 AC_DEFINE(KAME,1,KAME IPv6 stack)
633 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
634 LIB_IPV6="-L/usr/local/v6/lib -linet6"
636 AC_MSG_RESULT(MUSICA)
640 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
642 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
646 if test x"$opsys" = x"bsdi";then
647 AC_DEFINE(BSDI_NRL,,BSDI)
648 AC_MSG_RESULT(BSDI_NRL)
652 dnl ------------------------------------
653 dnl Solaris 9, 10 and potentially higher
654 dnl ------------------------------------
655 elif test x"$opsys" = x"sol9"; then
657 AC_DEFINE(HAVE_IPV6, 1, IPv6)
658 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
661 AC_MSG_RESULT(Solaris IPv6)
665 elif test "${enable_ipv6}" = "yes"; then
667 #include <linux/version.h>
668 /* 2.1.128 or later */
669 #if LINUX_VERSION_CODE >= 0x020180
673 zebra_cv_linux_ipv6=yes
674 AC_MSG_RESULT(Linux IPv6)])
676 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
679 zebra_cv_linux_ipv6=yes
680 AC_MSG_RESULT(Linux IPv6)
684 if test "$zebra_cv_linux_ipv6" = "yes";then
685 AC_MSG_CHECKING(for GNU libc >= 2.1)
686 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
688 #include <features.h>
689 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
693 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
699 if test "$glibc" != "yes"; then
700 INCLUDES="-I/usr/inet6/include"
701 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
702 LIB_IPV6="-L/usr/inet6/lib -linet6"
707 dnl -----------------------
708 dnl Set IPv6 related values
709 dnl -----------------------
710 LIBS="$LIB_IPV6 $LIBS"
713 if test x"$RIPNGD" = x""; then
714 AC_MSG_RESULT(IPv4 only)
718 dnl ------------------
719 dnl IPv6 header checks
720 dnl ------------------
721 if test "x${zebra_cv_ipv6}" = "xyes"; then
722 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
723 netinet6/in6_var.h netinet6/nd6.h])
726 dnl --------------------
727 dnl Daemon disable check
728 dnl --------------------
729 if test "${enable_zebra}" = "no";then
735 if test "${enable_bgpd}" = "no";then
741 if test "${enable_ripd}" = "no";then
747 if test "${enable_ospfd}" = "no";then
754 if test "${enable_opaque_lsa}" = "yes"; then
755 if test "${enable_ospfapi}" != "no";then
756 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
758 if test "${enable_ospfclient}" != "no";then
759 OSPFCLIENT="ospfclient"
765 case "${enable_ripngd}" in
766 "yes") RIPNGD="ripngd";;
771 case "${enable_ospf6d}" in
772 "yes") OSPF6D="ospf6d";;
777 case "${enable_isisd}" in
778 "yes") ISISD="isisd";;
783 if test "${enable_bgp_announce}" = "no";then
784 AC_DEFINE(DISABLE_BGP_ANNOUNCE,,Disable BGP installation to zebra)
799 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
800 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
801 AC_CHECK_LIB(crypt, crypt)
802 AC_CHECK_LIB(resolv, res_init)
803 AC_CHECK_LIB(m, main)
805 dnl ---------------------------------------------------
806 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
807 dnl ---------------------------------------------------
808 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
809 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
810 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
812 dnl ---------------------------
813 dnl check system has GNU regexp
814 dnl ---------------------------
815 dnl AC_MSG_CHECKING(whether system has GNU regex)
816 AC_CHECK_LIB(c, regexec,
817 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
819 [LIB_REGEX="regex.o"])
822 dnl ------------------
823 dnl check SNMP library
824 dnl ------------------
825 if test "${enable_snmp}" = "yes";then
826 dnl AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
827 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}" = ""; then
833 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes ])
835 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes; NEED_CRYPTO=yes;LIBS="$LIBS -lcrypto" ],,"-lcrypto")
839 if test "${HAVE_SNMP}" = ""; then
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}" = ""; then
856 LIBS="-L/usr/local/lib"
857 unset ac_cv_lib_snmp_asn_parse_int
858 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
859 if test "${HAVE_SNMP}" = ""; then
860 unset ac_cv_lib_snmp_asn_parse_int
861 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
862 if test "${NEED_CRYPTO}" = "yes"; then
863 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
869 if test "${HAVE_SNMP}" = "yes"; then
870 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
872 test -f "${ac_snmp}" && break
876 /usr/include/net-snmp/*)
877 AC_DEFINE(HAVE_SNMP,,SNMP)
878 AC_DEFINE(HAVE_NETSNMP,,SNMP)
879 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
880 CFLAGS="${CFLAGS} -I/usr/include/net-snmp -I/usr/include/net-snmp/library"
881 if test "${HAVE_NETSNMP}" = "yes"; then
882 LIBS="${LIBS} -lnetsnmp"
884 LIBS="${LIBS} -lsnmp"
887 /usr/include/ucd-snmp/*)
888 AC_DEFINE(HAVE_SNMP,,SNMP)
889 CFLAGS="${CFLAGS} -I/usr/include/ucd-snmp"
890 LIBS="${LIBS} -lsnmp"
892 /usr/local/include/ucd-snmp/*)
893 AC_DEFINE(HAVE_SNMP,,SNMP)
894 CFLAGS="${CFLAGS} -I/usr/local/include/ucd-snmp"
895 LIBS="${LIBS} -L/usr/local/lib -lsnmp"
897 /usr/local/include/net-snmp/*)
898 AC_DEFINE(HAVE_SNMP,,SNMP)
899 AC_DEFINE(HAVE_NET_SNMP,,SNMP)
900 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
901 CFLAGS="${CFLAGS} -I/usr/local/include/net-snmp"
902 LIBS="${LIBS} -L/usr/local/lib -lnetsnmp"
905 if test "${NEED_CRYPTO}" = "yes"; then
906 LIBS="${LIBS} -lcrypto"
911 dnl ----------------------------
912 dnl check sa_len of sockaddr
913 dnl ----------------------------
914 AC_MSG_CHECKING(whether struct sockaddr has a sa_len field)
915 AC_TRY_COMPILE([#include <sys/types.h>
916 #include <sys/socket.h>
917 ],[static struct sockaddr ac_i;int ac_j = sizeof (ac_i.sa_len);],
919 AC_DEFINE(HAVE_SA_LEN,,sa_len)],
922 dnl ----------------------------
923 dnl check sin_len of sockaddr_in
924 dnl ----------------------------
925 AC_MSG_CHECKING(whether struct sockaddr_in has a sin_len field)
926 AC_TRY_COMPILE([#include <sys/types.h>
927 #include <netinet/in.h>
928 ],[static struct sockaddr_in ac_i;int ac_j = sizeof (ac_i.sin_len);],
930 AC_DEFINE(HAVE_SIN_LEN,,sin_len)],
933 dnl ----------------------------
934 dnl check sun_len of sockaddr_un
935 dnl ----------------------------
936 AC_MSG_CHECKING(whether struct sockaddr_un has a sun_len field)
937 AC_TRY_COMPILE([#include <sys/types.h>
939 ],[static struct sockaddr_un ac_i;int ac_j = sizeof (ac_i.sun_len);],
941 AC_DEFINE(HAVE_SUN_LEN,,sun_len)],
944 dnl -----------------------------------
945 dnl check sin6_scope_id of sockaddr_in6
946 dnl -----------------------------------
947 if test "$zebra_cv_ipv6" = yes; then
948 AC_MSG_CHECKING(whether struct sockaddr_in6 has a sin6_scope_id field)
949 AC_TRY_COMPILE([#include <sys/types.h>
950 #include <netinet/in.h>
951 ],[static struct sockaddr_in6 ac_i;int ac_j = sizeof (ac_i.sin6_scope_id);],
953 AC_DEFINE(HAVE_SIN6_SCOPE_ID,,scope id)],
957 dnl ----------------------------
958 dnl check socklen_t exist or not
959 dnl ----------------------------
960 AC_MSG_CHECKING(whther socklen_t is defined)
961 AC_TRY_COMPILE([#include <sys/types.h>
962 #include <sys/socket.h>
963 #include <netinet/in.h>
966 AC_DEFINE(HAVE_SOCKLEN_T,,socklen_t)],
969 dnl ------------------------
970 dnl check struct sockaddr_dl
971 dnl ------------------------
972 AC_MSG_CHECKING(whether struct sockaddr_dl exist)
973 AC_EGREP_HEADER(sockaddr_dl,
976 AC_DEFINE(HAVE_SOCKADDR_DL,,sockaddr_dl)],
979 dnl --------------------------
980 dnl check structure ifaliasreq
981 dnl --------------------------
982 AC_MSG_CHECKING(whether struct ifaliasreq exist)
983 AC_EGREP_HEADER(ifaliasreq,
986 AC_DEFINE(HAVE_IFALIASREQ,,ifaliasreq)],
989 dnl ----------------------------
990 dnl check structure in6_aliasreq
991 dnl ----------------------------
992 AC_MSG_CHECKING(whether struct in6_aliasreq exist)
993 AC_EGREP_HEADER(in6_aliasreq,
996 AC_DEFINE(HAVE_IN6_ALIASREQ,,in6_aliasreq)],
999 dnl -----------------------------------
1000 dnl check ifra_lifetime of in6_aliasreq
1001 dnl -----------------------------------
1002 AC_MSG_CHECKING(whether in6_aliasreq.ifra_lifetime exist)
1003 AC_TRY_COMPILE([#include <sys/types.h>
1004 #include <netinet6/in6_var.h>
1005 ],[static struct if6_aliasreq ac_i;int ac_j = sizeof (ac_i.ifra_lifetime);],
1007 AC_DEFINE(HAVE_IFRA_LIFETIME,,Have in6_aliasreq.ifra_lifetime)],
1010 dnl ---------------------------
1011 dnl check structure rt_addrinfo
1012 dnl ---------------------------
1013 AC_MSG_CHECKING(whether struct rt_addrinfo exist)
1014 AC_EGREP_HEADER(rt_addrinfo,
1017 AC_DEFINE(HAVE_RT_ADDRINFO,,rt_addrinfo)],
1020 dnl --------------------------
1021 dnl check structure in_pktinfo
1022 dnl --------------------------
1023 AC_MSG_CHECKING(whether struct in_pktinfo exist)
1024 AC_TRY_COMPILE([#include <netinet/in.h>
1025 ],[struct in_pktinfo ac_x;],
1027 AC_DEFINE(HAVE_INPKTINFO,,in_pktinfo)],
1030 dnl --------------------------------------
1031 dnl checking for getrusage struct and call
1032 dnl --------------------------------------
1033 AC_MSG_CHECKING(whether getrusage is available)
1034 AC_TRY_COMPILE([#include <sys/resource.h>
1035 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1037 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1040 dnl -------------------
1041 dnl capabilities checks
1042 dnl -------------------
1043 if test "${enable_capabilities}" != "no"; then
1044 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1045 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1047 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1048 quagga_ac_keepcaps="yes"],
1051 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1052 AC_CHECK_HEADERS(sys/capability.h)
1054 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1055 AC_CHECK_LIB(cap, cap_init,
1056 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1064 dnl ---------------------------
1065 dnl check for glibc 'backtrace'
1066 dnl ---------------------------
1067 if test "${glibc}" = "yes"; then
1068 AC_CHECK_HEADER(execinfo.h)
1070 if test x"${ac_cv_header_execinfo_h}" = x"yes"; then
1071 AC_CHECK_FUNC(backtrace,
1072 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)]
1079 CONFDATE=`date '+%Y%m%d'`
1082 dnl ------------------------------
1083 dnl set paths for state directory
1084 dnl ------------------------------
1085 if test "${prefix}" = "NONE"; then
1086 quagga_statedir_prefix="";
1088 quagga_statedir_prefix=${prefix}
1090 if test "${localstatedir}" = '${prefix}/var'; then
1091 AC_CACHE_CHECK(state directory,ac_statedir,
1092 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1093 ${quagga_statedir_prefix}/var/adm dnl
1094 ${quagga_statedir_prefix}/etc dnl
1100 test -d $QUAGGA_STATE_DIR && break
1102 quagga_statedir=$QUAGGA_STATE_DIR])
1104 quagga_statedir=${localstatedir}
1105 AC_MSG_CHECKING(directory to use for state file)
1106 AC_MSG_RESULT(${quagga_statedir})
1108 if test $quagga_statedir = "/dev/null"; then
1109 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1112 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1113 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1114 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1115 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1116 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1117 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1118 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1119 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1120 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1121 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1122 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1123 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1124 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1125 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1126 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1128 dnl ---------------------------
1129 dnl Check htonl works correctly
1130 dnl ---------------------------
1131 AC_MSG_CHECKING(for working htonl)
1132 AC_CACHE_VAL(ac_cv_htonl_works, [
1133 AC_TRY_LINK([#ifdef HAVE_SYS_TYPES_H
1134 #include <sys/types.h>
1139 #ifdef HAVE_NETINET_IN_H
1140 #include <netinet/in.h>
1143 ac_cv_htonl_works=yes,
1144 ac_cv_htonl_works=no)])
1145 AC_MSG_RESULT($ac_cv_htonl_works)
1147 AC_OUTPUT(Makefile lib/Makefile zebra/Makefile ripd/Makefile
1148 ripngd/Makefile bgpd/Makefile ospfd/Makefile
1149 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1154 redhat/Makefile redhat/quagga.spec
1157 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1158 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh
1160 [chmod +x vtysh/extract.pl])
1163 Quagga configuration
1164 --------------------
1165 quagga version : ${PACKAGE_VERSION}
1166 host operationg system : ${host_os}
1167 source code location : ${srcdir}
1169 compiler flags : ${CFLAGS}
1170 linker flags : ${LDFLAGS} ${LIBS}
1171 state file directory : ${quagga_statedir}
1172 config file directory : `eval echo \`echo ${sysconfdir}\``
1173 example directory : `eval echo \`echo ${exampledir}\``
1174 user to run as : ${enable_user}
1175 group to run as : ${enable_group}
1176 group for vty sockets : ${enable_vty_group}
1177 config file mask : ${enable_configfile_mask}
1178 log file mask : ${enable_logfile_mask}
1180 The above user and group must have read/write access to the state file
1181 directory and to the config files in the config file directory.