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.60 2004/08/26 12:21:28 hasso 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 -----------------------------------
26 dnl Get hostname and other information.
27 dnl -----------------------------------
34 [ --with-cflags Set CFLAGS for use in compilation.])
35 if test "x$with_cflags" != "x" ; then
36 CFLAGS="$with_cflags" ; cflags_specified=yes ;
37 elif test -n "$CFLAGS" ; then
38 cflags_specified=yes ;
46 dnl -----------------------------------------
47 dnl If CLFAGS doesn\'t exist set default value
48 dnl -----------------------------------------
49 dnl (Wall is gcc specific... have to make sure
50 dnl gcc is being used before setting it)
52 if test "x$cflags_specified" = "x" ; then
63 AC_CHECK_TOOL(RANLIB, ranlib, :)
75 dnl ----------------------
76 dnl Packages configuration
77 dnl ----------------------
79 [ --enable-vtysh include integrated vty shell for Quagga])
81 [ --disable-ipv6 turn off IPv6 related features and daemons])
83 [ --disable-zebra do not build zebra daemon])
85 [ --disable-bgpd do not build bgpd])
87 [ --disable-ripd do not build ripd])
89 [ --disable-ripngd do not build ripngd])
91 [ --disable-ospfd do not build ospfd])
93 [ --disable-ospf6d do not build ospf6d])
95 [ --disable-isisd do not build isisd])
96 AC_ARG_ENABLE(bgp-announce,
97 [ --disable-bgp-announce, turn off BGP route announcement])
98 AC_ARG_ENABLE(netlink,
99 [ --enable-netlink force to use Linux netlink interface])
100 AC_ARG_ENABLE(broken-aliases,
101 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
103 [ --enable-snmp enable SNMP support])
105 [ --with-libpam use libpam for PAM support in vtysh])
106 AC_ARG_ENABLE(tcp-zebra,
107 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
108 AC_ARG_ENABLE(opaque-lsa,
109 [ --enable-opaque-lsa enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
110 AC_ARG_ENABLE(ospfapi,
111 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database,
112 (this is the default if --enable-opaque-lsa is not set)])
113 AC_ARG_ENABLE(ospfclient,
114 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
115 (this is the default if --disable-ospfapi is set)])
116 AC_ARG_ENABLE(ospf-te,
117 [ --enable-ospf-te enable Traffic Engineering Extension to OSPF])
118 AC_ARG_ENABLE(multipath,
119 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
120 AC_ARG_ENABLE(quagga_user,
121 [ --enable-user=ARG user to run Quagga suite as (default quagga)])
122 AC_ARG_ENABLE(quagga_group,
123 [ --enable-group=ARG group to run Quagga suite as (default quagga)])
124 AC_ARG_ENABLE(vty_group,
125 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
126 AC_ARG_ENABLE(configfile_mask,
127 [ --enable-configfile-mask=ARG set mask for config files])
128 AC_ARG_ENABLE(logfile_mask,
129 [ --enable-logfile-mask=ARG set mask for log files])
132 [ --disable-rtadv disable IPV6 router advertisement feature])
134 [ --enable-irdp enable IRDP server support in zebra])
135 AC_ARG_ENABLE(capabilities,
136 [ --disable-capabilities disable using POSIX capabilities])
138 if test "${enable_broken_aliases}" = "yes"; then
139 if test "${enable_netlink}" = "yes"
141 echo "Sorry, you can't use netlink with broken aliases"
144 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
148 if test "${enable_tcp_zebra}" = "yes"; then
149 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
152 if test "${enable_opaque_lsa}" = "yes"; then
153 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
156 if test "${enable_ospf_te}" = "yes"; then
157 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
158 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
161 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
162 if test "${enable_rtadv}" != "no"; then
164 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
169 if test "${enable_irdp}" = "yes"; then
170 AC_DEFINE(HAVE_IRDP,, IRDP )
173 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
175 elif test "${enable_user}" = "no"; then
178 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
180 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
181 enable_group="quagga"
182 elif test "${enable_group}" = "no"; then
185 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
187 if test x"${enable_vty_group}" = x"yes" ; then
188 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
189 elif test x"${enable_vty_group}" != x""; then
190 if test x"${enable_vty_group}" != x"no"; then
191 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
195 enable_configfile_mask=${enable_configfile_mask:-0600}
196 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
198 enable_logfile_mask=${enable_logfile_mask:-0600}
199 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
205 case "${enable_multipath}" in
207 MULTIPATH_NUM="${enable_multipath}"
212 echo "Please specify digit to --enable-multipath ARG."
219 AC_SUBST(MULTIPATH_NUM)
221 dnl -------------------
222 dnl Check header files.
223 dnl -------------------
225 AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
226 sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
227 sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
230 AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
231 net/if_dl.h net/netopt.h inet/nd.h net/route.h \
232 net/if.h net/if_var.h netinet/in_var.h])
234 dnl V6 headers are checked below, after we check for v6
241 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
243 [*-sunos5.[6-8]*] | [*-solaris2.[6-8]*])
245 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.8)
246 AC_DEFINE(SUNOS_5, 1, SunOS 5)
247 AC_CHECK_LIB(xnet, main)
250 [*-sunos5.[8-9]] | [*-sunos5.1[0-9]] \
251 | [*-solaris2.[8-9]] | [*-solaris2.1[0-9]])
253 AC_DEFINE(SUNOS_59,,SunOS 5.9 up)
254 AC_DEFINE(SUNOS_5, 1, SunOS 5)
255 AC_CHECK_LIB(socket, main)
256 AC_CHECK_LIB(nsl, main)
259 *-sunos5* | *-solaris2*)
260 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
261 AC_CHECK_LIB(socket, main)
262 AC_CHECK_LIB(nsl, main)
267 AC_DEFINE(GNU_LINUX,,GNU Linux)
270 AC_CHECK_LIB(nsl, gethostbyname)
271 AC_CHECK_LIB(socket, socket)
274 AC_DEFINE(FREEBSD_32,,FreeBSD 3.2)
278 AC_DEFINE(OPEN_BSD,,OpenBSD)
282 OTHER_METHOD="mtu_kvm.o"
283 AC_CHECK_LIB(kvm, main)
287 AC_DEFINE(IRIX_65,,IRIX 6.5)
291 dnl ---------------------
292 dnl Integrated VTY option
293 dnl ---------------------
294 case "${enable_vtysh}" in
295 "yes") VTYSH="vtysh";
296 AC_DEFINE(VTYSH,,VTY shell)
297 AC_PATH_PROG(PERL, perl)
298 dnl Vtysh uses libreadline, which looks for termcap functions at
299 dnl configure time. We follow readline's search order.
300 dnl The required procedures are in libtermcap on NetBSD, in
301 dnl [TODO] on Linux, and in [TODO] on Solaris.
302 AC_CHECK_LIB(termcap, tputs, ,
303 AC_CHECK_LIB(tinfo, tputs, ,
304 AC_CHECK_LIB(curses, tputs, ,
305 AC_CHECK_LIB(ncurses, tputs))))
306 AC_CHECK_LIB(readline, main)
307 if test $ac_cv_lib_readline_main = no; then
308 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
310 AC_CHECK_HEADER(readline/history.h)
311 if test $ac_cv_header_readline_history_h = no;then
312 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
314 AC_CHECK_LIB(readline, rl_completion_matches)
315 if test $ac_cv_lib_readline_rl_completion_matches = no; then
316 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
326 if test "$with_libpam" = "yes"; then
327 AC_CHECK_HEADER(security/pam_misc.h)
328 if test "$ac_cv_header_security_pam_misc_h" = yes; then
329 AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
330 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
331 pam_conv_func="misc_conv"
333 AC_CHECK_HEADER(security/openpam.h)
334 if test "$ac_cv_header_security_openpam_h" = yes; then
335 AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
336 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
337 pam_conv_func="openpam_ttyconv"
339 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
340 AC_MSG_WARN([*** pam support will not be built ***])
345 if test "$with_libpam" = "yes"; then
346 dnl took this test from proftpd's configure.in and suited to our needs
347 dnl -------------------------------------------------------------------------
349 dnl This next check looks funky due to a linker problem with some versions
350 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
351 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
352 dnl with RedHat 6.2 and Debian 2.2 or better.
353 AC_CHECK_LIB(pam, pam_start,
354 [AC_CHECK_LIB(pam, $pam_conv_func,
355 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
357 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
358 LIBPAM="-lpam -lpam_misc"]
362 [AC_CHECK_LIB(pam, pam_end,
363 [AC_CHECK_LIB(pam, $pam_conv_func,
364 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
365 LIBPAM="-lpam -ldl"],
366 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
367 LIBPAM="-lpam -ldl -lpam_misc"]
369 ],AC_MSG_WARN([*** pam support will not be built ***]),
376 dnl -------------------------------
377 dnl Endian-ness check
378 dnl -------------------------------
381 dnl -------------------------------
382 dnl check the size in byte of the C
383 dnl -------------------------------
384 dnl AC_CHECK_SIZEOF(char)
385 dnl AC_CHECK_SIZEOF(int)
386 dnl AC_CHECK_SIZEOF(short)
387 dnl AC_CHECK_SIZEOF(long)
389 dnl ----------------------------
390 dnl check existance of functions
391 dnl ----------------------------
392 AC_CHECK_FUNCS(memset memcpy strerror inet_aton daemon snprintf vsnprintf \
393 strlcat strlcpy if_nametoindex if_indextoname getifaddrs \
395 AC_CHECK_FUNCS(setproctitle, ,
396 [AC_CHECK_LIB(util, setproctitle,
398 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
404 dnl ------------------------------------
405 dnl Determine routing get and set method
406 dnl ------------------------------------
407 AC_MSG_CHECKING(zebra between kernel interface method)
408 if test x"$opsys" = x"gnu-linux"; then
409 if test "${enable_netlink}" = "yes";then
410 AC_MSG_RESULT(netlink)
411 RT_METHOD=rt_netlink.o
412 AC_DEFINE(HAVE_NETLINK,,netlink)
414 elif test "${enable_netlink}" = "no"; then
419 AC_MSG_RESULT(netlink)
420 RT_METHOD=rt_netlink.o
421 AC_DEFINE(HAVE_NETLINK,,netlink)
424 elif test x"$opsys" = x"sol2-6";then
425 AC_MSG_RESULT(Route socket)
426 KERNEL_METHOD="kernel_socket.o"
427 RT_METHOD="rt_socket.o"
428 elif test x"$opsys" = x"sol9";then
429 AC_MSG_RESULT(Route socket)
430 KERNEL_METHOD="kernel_socket.o"
431 RT_METHOD="rt_socket.o"
432 elif test "$opsys" = "irix" ; then
433 AC_MSG_RESULT(Route socket)
434 KERNEL_METHOD="kernel_socket.o"
435 RT_METHOD="rt_socket.o"
437 AC_TRY_RUN([#include <errno.h>
438 #include <sys/types.h>
439 #include <sys/socket.h>
445 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
446 if (ac_sock < 0 && errno == EINVAL)
450 [KERNEL_METHOD=kernel_socket.o
451 RT_METHOD=rt_socket.o
452 AC_MSG_RESULT(socket)],
453 [RT_METHOD=rt_ioctl.o
454 AC_MSG_RESULT(ioctl)],
455 [KERNEL_METHOD=kernel_socket.o
456 RT_METHOD=rt_socket.o
457 AC_MSG_RESULT(socket)])
460 AC_SUBST(KERNEL_METHOD)
461 AC_SUBST(OTHER_METHOD)
463 dnl ------------------------------
464 dnl check kernel route read method
465 dnl ------------------------------
466 AC_CACHE_CHECK(route read method check, zebra_rtread,
467 [if test "$netlink" = yes; then
468 RTREAD_METHOD="rtread_netlink.o"
469 zebra_rtread="netlink"
471 for zebra_rtread in /proc/net/route /dev/ip /dev/null;
473 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
475 case $zebra_rtread in
476 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
477 zebra_rtread="proc";;
480 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
481 zebra_rtread="sysctl";;
482 *) RTREAD_METHOD="rtread_getmsg.o"
483 zebra_rtread="getmsg";;
485 *) RTREAD_METHOD="rtread_sysctl.o"
486 zebra_rtread="sysctl";;
489 AC_SUBST(RTREAD_METHOD)
491 dnl -----------------------------
492 dnl check interface lookup method
493 dnl -----------------------------
495 AC_MSG_CHECKING(interface looking up method)
496 if test "$netlink" = yes; then
497 AC_MSG_RESULT(netlink)
498 IF_METHOD=if_netlink.o
499 elif test "$opsys" = "sol2-6";then
500 AC_MSG_RESULT(Solaris GIF)
502 elif test "$opsys" = "sol9";then
503 AC_MSG_RESULT(Solaris GLIF)
504 IF_METHOD=if_ioctl_solaris.o
505 IOCTL_METHOD=ioctl_solaris.o
506 elif test "$opsys" = "irix" ; then
509 elif test "$opsys" = "openbsd";then
510 AC_MSG_RESULT(openbsd)
512 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
513 AC_MSG_RESULT(sysctl)
514 IF_METHOD=if_sysctl.o
515 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
521 AC_SUBST(IOCTL_METHOD)
523 dnl -----------------------
524 dnl check proc file system.
525 dnl -----------------------
526 if test -r /proc/net/dev; then
527 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
531 if test -r /proc/net/if_inet6; then
532 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
537 dnl -----------------------------
538 dnl check ipforward detect method
539 dnl -----------------------------
540 AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
541 [for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
543 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
545 case $zebra_ipforward_path in
546 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
547 zebra_ipforward_path="proc";;
550 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
551 zebra_ipforward_path="ews";;
552 *-freebsd*) IPFORWARD=ipforward_sysctl.o
553 zebra_ipforward_path="sysctl";;
554 *) IPFORWARD=ipforward_solaris.o
555 zebra_ipforward_path="solaris";;
557 *) IPFORWARD=ipforward_sysctl.o
558 zebra_ipforward_path="sysctl";;
562 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
567 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
568 if test "${enable_ipv6}" = "no"; then
569 AC_MSG_RESULT(disabled)
574 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
576 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
577 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
581 AC_MSG_RESULT(INRIA IPv6)
585 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
587 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
588 AC_DEFINE(KAME,1,KAME IPv6)
591 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
592 LIB_IPV6="-L/usr/local/v6/lib -linet6"
595 dnl -------------------------
597 dnl default host check
598 dnl It is not used by Kheops
599 dnl -------------------------
600 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
602 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
603 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
604 AC_DEFINE(KAME,1,KAME IPv6 stack)
607 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
608 LIB_IPV6="-L/usr/local/v6/lib -linet6"
610 AC_MSG_RESULT(MUSICA)
614 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
616 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
620 if test x"$opsys" = x"bsdi";then
621 AC_DEFINE(BSDI_NRL,,BSDI)
622 AC_MSG_RESULT(BSDI_NRL)
626 dnl ------------------------------------
627 dnl Solaris 9, 10 and potentially higher
628 dnl ------------------------------------
629 elif test x"$opsys" = x"sol9"; then
631 AC_DEFINE(HAVE_IPV6, 1, IPv6)
632 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
635 AC_MSG_RESULT(Solaris IPv6)
639 elif test "${enable_ipv6}" = "yes"; then
641 #include <linux/version.h>
642 /* 2.1.128 or later */
643 #if LINUX_VERSION_CODE >= 0x020180
647 zebra_cv_linux_ipv6=yes
648 AC_MSG_RESULT(Linux IPv6)])
650 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
653 zebra_cv_linux_ipv6=yes
654 AC_MSG_RESULT(Linux IPv6)
658 if test "$zebra_cv_linux_ipv6" = "yes";then
659 AC_MSG_CHECKING(for GNU libc >= 2.1)
660 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
662 #include <features.h>
663 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
667 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
673 if test "$glibc" != "yes"; then
674 INCLUDES="-I/usr/inet6/include"
675 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
676 LIB_IPV6="-L/usr/inet6/lib -linet6"
681 dnl -----------------------
682 dnl Set IPv6 related values
683 dnl -----------------------
684 LIBS="$LIB_IPV6 $LIBS"
687 if test x"$RIPNGD" = x""; then
688 AC_MSG_RESULT(IPv4 only)
692 dnl ------------------
693 dnl IPv6 header checks
694 dnl ------------------
695 if test "x${zebra_cv_ipv6}" = "xyes"; then
696 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
697 netinet6/in6_var.h netinet6/nd6.h])
700 dnl --------------------
701 dnl Daemon disable check
702 dnl --------------------
703 if test "${enable_zebra}" = "no";then
709 if test "${enable_bgpd}" = "no";then
715 if test "${enable_ripd}" = "no";then
721 if test "${enable_ospfd}" = "no";then
728 if test "${enable_opaque_lsa}" = "yes"; then
729 if test "${enable_ospfapi}" != "no";then
730 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
732 if test "${enable_ospfclient}" != "no";then
733 OSPFCLIENT="ospfclient"
739 case "${enable_ripngd}" in
740 "yes") RIPNGD="ripngd";;
745 case "${enable_ospf6d}" in
746 "yes") OSPF6D="ospf6d";;
751 case "${enable_isisd}" in
752 "yes") ISISD="isisd";;
757 if test "${enable_bgp_announce}" = "no";then
758 AC_DEFINE(DISABLE_BGP_ANNOUNCE,,Disable BGP installation to zebra)
773 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
774 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
775 AC_CHECK_LIB(crypt, crypt)
776 AC_CHECK_LIB(resolv, res_init)
777 AC_CHECK_LIB(m, main)
779 dnl ---------------------------------------------------
780 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
781 dnl ---------------------------------------------------
782 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
783 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
784 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
786 dnl ---------------------------
787 dnl check system has GNU regexp
788 dnl ---------------------------
789 dnl AC_MSG_CHECKING(whether system has GNU regex)
790 AC_CHECK_LIB(c, regexec,
791 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
793 [LIB_REGEX="regex.o"])
796 dnl ------------------
797 dnl check SNMP library
798 dnl ------------------
799 if test "${enable_snmp}" = "yes";then
800 dnl AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
801 if test "${HAVE_SNMP}" = ""; then
804 unset ac_cv_lib_snmp_asn_parse_int
805 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
806 if test "${NEED_CRYPTO}" = ""; then
807 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes ])
809 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes; NEED_CRYPTO=yes;LIBS="$LIBS -lcrypto" ],,"-lcrypto")
813 if test "${HAVE_SNMP}" = ""; then
816 unset ac_cv_lib_snmp_asn_parse_int
817 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes, )
818 if test "${HAVE_SNMP}" = ""; then
819 unset ac_cv_lib_snmp_asn_parse_int
820 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
821 if test "${NEED_CRYPTO}" = "yes"; then
822 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
828 if test "${HAVE_SNMP}" = ""; then
830 LIBS="-L/usr/local/lib"
831 unset ac_cv_lib_snmp_asn_parse_int
832 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
833 if test "${HAVE_SNMP}" = ""; then
834 unset ac_cv_lib_snmp_asn_parse_int
835 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
836 if test "${NEED_CRYPTO}" = "yes"; then
837 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
843 if test "${HAVE_SNMP}" = "yes"; then
844 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
846 test -f "${ac_snmp}" && break
850 /usr/include/net-snmp/*)
851 AC_DEFINE(HAVE_SNMP,,SNMP)
852 AC_DEFINE(HAVE_NETSNMP,,SNMP)
853 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
854 CFLAGS="${CFLAGS} -I/usr/include/net-snmp -I/usr/include/net-snmp/library"
855 if test "${HAVE_NETSNMP}" = "yes"; then
856 LIBS="${LIBS} -lnetsnmp"
858 LIBS="${LIBS} -lsnmp"
861 /usr/include/ucd-snmp/*)
862 AC_DEFINE(HAVE_SNMP,,SNMP)
863 CFLAGS="${CFLAGS} -I/usr/include/ucd-snmp"
864 LIBS="${LIBS} -lsnmp"
866 /usr/local/include/ucd-snmp/*)
867 AC_DEFINE(HAVE_SNMP,,SNMP)
868 CFLAGS="${CFLAGS} -I/usr/local/include/ucd-snmp"
869 LIBS="${LIBS} -L/usr/local/lib -lsnmp"
871 /usr/local/include/net-snmp/*)
872 AC_DEFINE(HAVE_SNMP,,SNMP)
873 AC_DEFINE(HAVE_NET_SNMP,,SNMP)
874 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
875 CFLAGS="${CFLAGS} -I/usr/local/include/net-snmp"
876 LIBS="${LIBS} -L/usr/local/lib -lnetsnmp"
879 if test "${NEED_CRYPTO}" = "yes"; then
880 LIBS="${LIBS} -lcrypto"
885 dnl ----------------------------
886 dnl check sa_len of sockaddr
887 dnl ----------------------------
888 AC_MSG_CHECKING(whether struct sockaddr has a sa_len field)
889 AC_TRY_COMPILE([#include <sys/types.h>
890 #include <sys/socket.h>
891 ],[static struct sockaddr ac_i;int ac_j = sizeof (ac_i.sa_len);],
893 AC_DEFINE(HAVE_SA_LEN,,sa_len)],
896 dnl ----------------------------
897 dnl check sin_len of sockaddr_in
898 dnl ----------------------------
899 AC_MSG_CHECKING(whether struct sockaddr_in has a sin_len field)
900 AC_TRY_COMPILE([#include <sys/types.h>
901 #include <netinet/in.h>
902 ],[static struct sockaddr_in ac_i;int ac_j = sizeof (ac_i.sin_len);],
904 AC_DEFINE(HAVE_SIN_LEN,,sin_len)],
907 dnl ----------------------------
908 dnl check sun_len of sockaddr_un
909 dnl ----------------------------
910 AC_MSG_CHECKING(whether struct sockaddr_un has a sun_len field)
911 AC_TRY_COMPILE([#include <sys/types.h>
913 ],[static struct sockaddr_un ac_i;int ac_j = sizeof (ac_i.sun_len);],
915 AC_DEFINE(HAVE_SUN_LEN,,sun_len)],
918 dnl -----------------------------------
919 dnl check sin6_scope_id of sockaddr_in6
920 dnl -----------------------------------
921 if test "$zebra_cv_ipv6" = yes; then
922 AC_MSG_CHECKING(whether struct sockaddr_in6 has a sin6_scope_id field)
923 AC_TRY_COMPILE([#include <sys/types.h>
924 #include <netinet/in.h>
925 ],[static struct sockaddr_in6 ac_i;int ac_j = sizeof (ac_i.sin6_scope_id);],
927 AC_DEFINE(HAVE_SIN6_SCOPE_ID,,scope id)],
931 dnl ----------------------------
932 dnl check socklen_t exist or not
933 dnl ----------------------------
934 AC_MSG_CHECKING(whther socklen_t is defined)
935 AC_TRY_COMPILE([#include <sys/types.h>
936 #include <sys/socket.h>
937 #include <netinet/in.h>
940 AC_DEFINE(HAVE_SOCKLEN_T,,socklen_t)],
943 dnl ------------------------
944 dnl check struct sockaddr_dl
945 dnl ------------------------
946 AC_MSG_CHECKING(whether struct sockaddr_dl exist)
947 AC_EGREP_HEADER(sockaddr_dl,
950 AC_DEFINE(HAVE_SOCKADDR_DL,,sockaddr_dl)],
953 dnl --------------------------
954 dnl check structure ifaliasreq
955 dnl --------------------------
956 AC_MSG_CHECKING(whether struct ifaliasreq exist)
957 AC_EGREP_HEADER(ifaliasreq,
960 AC_DEFINE(HAVE_IFALIASREQ,,ifaliasreq)],
963 dnl ----------------------------
964 dnl check structure in6_aliasreq
965 dnl ----------------------------
966 AC_MSG_CHECKING(whether struct in6_aliasreq exist)
967 AC_EGREP_HEADER(in6_aliasreq,
970 AC_DEFINE(HAVE_IN6_ALIASREQ,,in6_aliasreq)],
973 dnl -----------------------------------
974 dnl check ifra_lifetime of in6_aliasreq
975 dnl -----------------------------------
976 AC_MSG_CHECKING(whether in6_aliasreq.ifra_lifetime exist)
977 AC_TRY_COMPILE([#include <sys/types.h>
978 #include <netinet6/in6_var.h>
979 ],[static struct if6_aliasreq ac_i;int ac_j = sizeof (ac_i.ifra_lifetime);],
981 AC_DEFINE(HAVE_IFRA_LIFETIME,,Have in6_aliasreq.ifra_lifetime)],
984 dnl ---------------------------
985 dnl check structure rt_addrinfo
986 dnl ---------------------------
987 AC_MSG_CHECKING(whether struct rt_addrinfo exist)
988 AC_EGREP_HEADER(rt_addrinfo,
991 AC_DEFINE(HAVE_RT_ADDRINFO,,rt_addrinfo)],
994 dnl --------------------------
995 dnl check structure in_pktinfo
996 dnl --------------------------
997 AC_MSG_CHECKING(whether struct in_pktinfo exist)
998 AC_TRY_COMPILE([#include <netinet/in.h>
999 ],[struct in_pktinfo ac_x;],
1001 AC_DEFINE(HAVE_INPKTINFO,,in_pktinfo)],
1004 dnl --------------------------------------
1005 dnl checking for getrusage struct and call
1006 dnl --------------------------------------
1007 AC_MSG_CHECKING(whether getrusage is available)
1008 AC_TRY_COMPILE([#include <sys/resource.h>
1009 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1011 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1014 dnl -------------------
1015 dnl capabilities checks
1016 dnl -------------------
1017 if test "${enable_capabilities}" != "no"; then
1018 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1019 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1021 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1022 quagga_ac_keepcaps="yes"],
1025 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1026 AC_CHECK_HEADERS(sys/capability.h)
1028 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1029 AC_CHECK_LIB(cap, cap_init,
1030 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1038 dnl ---------------------------
1039 dnl check for glibc 'backtrace'
1040 dnl ---------------------------
1041 if test "${glibc}" = "yes"; then
1042 AC_CHECK_HEADER(execinfo.h)
1044 if test x"${ac_cv_header_execinfo_h}" = x"yes"; then
1045 AC_CHECK_FUNC(backtrace,
1046 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)]
1053 CONFDATE=`date '+%Y%m%d'`
1056 dnl ------------------------------
1057 dnl set paths for state directory
1058 dnl ------------------------------
1059 if test "${prefix}" = "NONE"; then
1060 quagga_statedir_prefix="";
1062 quagga_statedir_prefix=${prefix}
1064 if test "${localstatedir}" = '${prefix}/var'; then
1065 AC_CACHE_CHECK(state directory,ac_statedir,
1066 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1067 ${quagga_statedir_prefix}/var/adm dnl
1068 ${quagga_statedir_prefix}/etc dnl
1074 test -d $QUAGGA_STATE_DIR && break
1076 quagga_statedir=$QUAGGA_STATE_DIR])
1078 quagga_statedir=${localstatedir}
1079 AC_MSG_CHECKING(directory to use for state file)
1080 AC_MSG_RESULT(${quagga_statedir})
1082 if test $quagga_statedir = "/dev/null"; then
1083 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1086 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1087 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1088 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1089 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1090 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1091 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1092 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1093 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1094 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1095 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1096 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1097 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1098 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1099 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1100 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1102 dnl ---------------------------
1103 dnl Check htonl works correctly
1104 dnl ---------------------------
1105 AC_MSG_CHECKING(for working htonl)
1106 AC_CACHE_VAL(ac_cv_htonl_works, [
1107 AC_TRY_LINK([#ifdef HAVE_SYS_TYPES_H
1108 #include <sys/types.h>
1113 #ifdef HAVE_NETINET_IN_H
1114 #include <netinet/in.h>
1117 ac_cv_htonl_works=yes,
1118 ac_cv_htonl_works=no)])
1119 AC_MSG_RESULT($ac_cv_htonl_works)
1121 AC_OUTPUT(Makefile lib/Makefile zebra/Makefile ripd/Makefile
1122 ripngd/Makefile bgpd/Makefile ospfd/Makefile
1123 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1126 redhat/Makefile redhat/quagga.spec
1130 [chmod +x vtysh/extract.pl])
1133 Quagga configuration
1134 --------------------
1135 quagga version : ${PACKAGE_VERSION}
1136 host operationg system : ${host_os}
1137 source code location : ${srcdir}
1139 compiler flags : ${CFLAGS}
1140 linker flags : ${LDFLAGS} ${LIBS}
1141 state file directory : ${quagga_statedir}
1142 config file directory : `eval echo \`echo ${sysconfdir}\``
1143 example directory : `eval echo \`echo ${exampledir}\``
1144 user to run as : ${enable_user}
1145 group to run as : ${enable_group}
1146 group for vty sockets : ${enable_vty_group}
1147 config file mask : ${enable_configfile_mask}
1148 log file mask : ${enable_logfile_mask}
1150 The above user and group must have read/write access to the state file
1151 directory and to the config files in the config file directory.