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.54 2004/06/30 14:25:12 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 -----------------------------------
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 if test "x$cflags_specified" = "x" ; then
50 CFLAGS="$CFLAGS -Wall"
60 AC_CHECK_TOOL(RANLIB, ranlib, :)
67 dnl ----------------------
68 dnl Packages configuration
69 dnl ----------------------
71 [ --enable-vtysh include integrated vty shell for Quagga])
73 [ --disable-ipv6 turn off IPv6 related features and daemons])
75 [ --disable-zebra do not build zebra daemon])
77 [ --disable-bgpd do not build bgpd])
79 [ --disable-ripd do not build ripd])
81 [ --disable-ripngd do not build ripngd])
83 [ --disable-ospfd do not build ospfd])
85 [ --disable-ospf6d do not build ospf6d])
87 [ --disable-isisd do not build isisd])
88 AC_ARG_ENABLE(bgp-announce,
89 [ --disable-bgp-announce, turn off BGP route announcement])
90 AC_ARG_ENABLE(netlink,
91 [ --enable-netlink force to use Linux netlink interface])
92 AC_ARG_ENABLE(broken-aliases,
93 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
95 [ --enable-snmp enable SNMP support])
97 [ --with-libpam use libpam for PAM support in vtysh])
98 AC_ARG_ENABLE(tcp-zebra,
99 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
100 AC_ARG_ENABLE(opaque-lsa,
101 [ --enable-opaque-lsa enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
102 AC_ARG_ENABLE(ospfapi,
103 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database,
104 (this is the default if --enable-opaque-lsa is not set)])
105 AC_ARG_ENABLE(ospfclient,
106 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
107 (this is the default if --disable-ospfapi is set)])
108 AC_ARG_ENABLE(ospf-te,
109 [ --enable-ospf-te enable Traffic Engineering Extension to OSPF])
110 AC_ARG_ENABLE(multipath,
111 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
112 AC_ARG_ENABLE(quagga_user,
113 [ --enable-user=ARG user to run Quagga suite as (default quagga)])
114 AC_ARG_ENABLE(quagga_group,
115 [ --enable-group=ARG group to run Quagga suite as (default quagga)])
116 AC_ARG_ENABLE(vty_group,
117 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
118 AC_ARG_ENABLE(configfile_mask,
119 [ --enable-configfile-mask=ARG set mask for config files])
120 AC_ARG_ENABLE(logfile_mask,
121 [ --enable-logfile-mask=ARG set mask for log files])
124 [ --disable-rtadv disable IPV6 router advertisement feature])
126 [ --enable-irdp enable IRDP server support in zebra])
127 AC_ARG_ENABLE(capabilities,
128 [ --disable-capabilities disable using POSIX capabilities])
130 if test "${enable_broken_aliases}" = "yes"; then
131 if test "${enable_netlink}" = "yes"
133 echo "Sorry, you can't use netlink with broken aliases"
136 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
140 if test "${enable_tcp_zebra}" = "yes"; then
141 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
144 if test "${enable_opaque_lsa}" = "yes"; then
145 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
148 if test "${enable_ospf_te}" = "yes"; then
149 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
150 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
153 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
154 if test "${enable_rtadv}" != "no"; then
156 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
161 if test "${enable_irdp}" = "yes"; then
162 AC_DEFINE(HAVE_IRDP,, IRDP )
165 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
167 elif test "${enable_user}" = "no"; then
170 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
172 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
173 enable_group="quagga"
174 elif test "${enable_group}" = "no"; then
177 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
179 if test x"${enable_vty_group}" = x"yes" ; then
180 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
181 elif test x"${enable_vty_group}" != x""; then
182 if test x"${enable_vty_group}" != x"no"; then
183 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
187 enable_configfile_mask=${enable_configfile_mask:-0600}
188 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
190 enable_logfile_mask=${enable_logfile_mask:-0600}
191 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
197 case "${enable_multipath}" in
199 MULTIPATH_NUM="${enable_multipath}"
204 echo "Please specify digit to --enable-multipath ARG."
211 AC_SUBST(MULTIPATH_NUM)
213 dnl -------------------
214 dnl Check header files.
215 dnl -------------------
217 AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
218 sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
219 sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
222 AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
223 net/if_dl.h net/netopt.h inet/nd.h net/route.h \
224 net/if.h net/if_var.h netinet/in_var.h])
226 dnl V6 headers are checked below, after we check for v6
233 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
235 [*-sunos5.[6-8]*] | [*-solaris2.[6-8]*])
237 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.8)
238 AC_DEFINE(SUNOS_5, 1, SunOS 5)
239 AC_CHECK_LIB(xnet, main)
242 [*-sunos5.[8-9]] | [*-sunos5.1[0-9]] \
243 | [*-solaris2.[8-9]] | [*-solaris2.1[0-9]])
245 AC_DEFINE(SUNOS_59,,SunOS 5.9 up)
246 AC_DEFINE(SUNOS_5, 1, SunOS 5)
247 AC_CHECK_LIB(socket, main)
248 AC_CHECK_LIB(nsl, main)
251 *-sunos5* | *-solaris2*)
252 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
253 AC_CHECK_LIB(socket, main)
254 AC_CHECK_LIB(nsl, main)
259 AC_DEFINE(GNU_LINUX,,GNU Linux)
262 AC_CHECK_LIB(nsl, gethostbyname)
263 AC_CHECK_LIB(socket, socket)
266 AC_DEFINE(FREEBSD_32,,FreeBSD 3.2)
270 AC_DEFINE(OPEN_BSD,,OpenBSD)
274 OTHER_METHOD="mtu_kvm.o"
275 AC_CHECK_LIB(kvm, main)
279 AC_DEFINE(IRIX_65,,IRIX 6.5)
283 dnl ---------------------
284 dnl Integrated VTY option
285 dnl ---------------------
286 case "${enable_vtysh}" in
287 "yes") VTYSH="vtysh";
288 AC_DEFINE(VTYSH,,VTY shell)
289 AC_PATH_PROG(PERL, perl)
290 dnl Vtysh uses libreadline, which looks for termcap functions at
291 dnl configure time. We follow readline's search order.
292 dnl The required procedures are in libtermcap on NetBSD, in
293 dnl [TODO] on Linux, and in [TODO] on Solaris.
294 AC_CHECK_LIB(termcap, tputs, ,
295 AC_CHECK_LIB(tinfo, tputs, ,
296 AC_CHECK_LIB(curses, tputs, ,
297 AC_CHECK_LIB(ncurses, tputs))))
298 AC_CHECK_LIB(readline, main)
299 if test $ac_cv_lib_readline_main = no; then
300 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
302 AC_CHECK_HEADER(readline/history.h)
303 if test $ac_cv_header_readline_history_h = no;then
304 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
306 AC_CHECK_LIB(readline, rl_completion_matches)
307 if test $ac_cv_lib_readline_rl_completion_matches = no; then
308 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
318 if test "$with_libpam" = "yes"; then
319 AC_CHECK_HEADER(security/pam_misc.h)
320 if test "$ac_cv_header_security_pam_misc_h" = yes; then
321 AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
322 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
323 pam_conv_func="misc_conv"
325 AC_CHECK_HEADER(security/openpam.h)
326 if test "$ac_cv_header_security_openpam_h" = yes; then
327 AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
328 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
329 pam_conv_func="openpam_ttyconv"
331 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
332 AC_MSG_WARN([*** pam support will not be built ***])
337 if test "$with_libpam" = "yes"; then
338 dnl took this test from proftpd's configure.in and suited to our needs
339 dnl -------------------------------------------------------------------------
341 dnl This next check looks funky due to a linker problem with some versions
342 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
343 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
344 dnl with RedHat 6.2 and Debian 2.2 or better.
345 AC_CHECK_LIB(pam, pam_start,
346 [AC_CHECK_LIB(pam, $pam_conv_func,
347 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
349 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
350 LIBPAM="-lpam -lpam_misc"]
354 [AC_CHECK_LIB(pam, pam_end,
355 [AC_CHECK_LIB(pam, $pam_conv_func,
356 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
357 LIBPAM="-lpam -ldl"],
358 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
359 LIBPAM="-lpam -ldl -lpam_misc"]
361 ],AC_MSG_WARN([*** pam support will not be built ***]),
368 dnl -------------------------------
369 dnl Endian-ness check
370 dnl -------------------------------
373 dnl -------------------------------
374 dnl check the size in byte of the C
375 dnl -------------------------------
376 dnl AC_CHECK_SIZEOF(char)
377 dnl AC_CHECK_SIZEOF(int)
378 dnl AC_CHECK_SIZEOF(short)
379 dnl AC_CHECK_SIZEOF(long)
381 dnl ----------------------------
382 dnl check existance of functions
383 dnl ----------------------------
384 AC_CHECK_FUNCS(memset memcpy strerror inet_aton daemon snprintf vsnprintf \
385 strlcat strlcpy if_nametoindex if_indextoname getifaddrs \
387 AC_CHECK_FUNCS(setproctitle, ,
388 [AC_CHECK_LIB(util, setproctitle,
390 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
396 dnl ------------------------------------
397 dnl Determine routing get and set method
398 dnl ------------------------------------
399 AC_MSG_CHECKING(zebra between kernel interface method)
400 if test x"$opsys" = x"gnu-linux"; then
401 if test "${enable_netlink}" = "yes";then
402 AC_MSG_RESULT(netlink)
403 RT_METHOD=rt_netlink.o
404 AC_DEFINE(HAVE_NETLINK,,netlink)
406 elif test "${enable_netlink}" = "no"; then
411 AC_MSG_RESULT(netlink)
412 RT_METHOD=rt_netlink.o
413 AC_DEFINE(HAVE_NETLINK,,netlink)
416 elif test x"$opsys" = x"sol2-6";then
417 AC_MSG_RESULT(Route socket)
418 KERNEL_METHOD="kernel_socket.o"
419 RT_METHOD="rt_socket.o"
420 elif test x"$opsys" = x"sol9";then
421 AC_MSG_RESULT(Route socket)
422 KERNEL_METHOD="kernel_socket.o"
423 RT_METHOD="rt_socket.o"
424 elif test "$opsys" = "irix" ; then
425 AC_MSG_RESULT(Route socket)
426 KERNEL_METHOD="kernel_socket.o"
427 RT_METHOD="rt_socket.o"
429 AC_TRY_RUN([#include <errno.h>
430 #include <sys/types.h>
431 #include <sys/socket.h>
437 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
438 if (ac_sock < 0 && errno == EINVAL)
442 [KERNEL_METHOD=kernel_socket.o
443 RT_METHOD=rt_socket.o
444 AC_MSG_RESULT(socket)],
445 [RT_METHOD=rt_ioctl.o
446 AC_MSG_RESULT(ioctl)],
447 [KERNEL_METHOD=kernel_socket.o
448 RT_METHOD=rt_socket.o
449 AC_MSG_RESULT(socket)])
452 AC_SUBST(KERNEL_METHOD)
453 AC_SUBST(OTHER_METHOD)
455 dnl ------------------------------
456 dnl check kernel route read method
457 dnl ------------------------------
458 AC_CACHE_CHECK(route read method check, zebra_rtread,
459 [if test "$netlink" = yes; then
460 RTREAD_METHOD="rtread_netlink.o"
461 zebra_rtread="netlink"
463 for zebra_rtread in /proc/net/route /dev/ip /dev/null;
465 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
467 case $zebra_rtread in
468 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
469 zebra_rtread="proc";;
472 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
473 zebra_rtread="sysctl";;
474 *) RTREAD_METHOD="rtread_getmsg.o"
475 zebra_rtread="getmsg";;
477 *) RTREAD_METHOD="rtread_sysctl.o"
478 zebra_rtread="sysctl";;
481 AC_SUBST(RTREAD_METHOD)
483 dnl -----------------------------
484 dnl check interface lookup method
485 dnl -----------------------------
487 AC_MSG_CHECKING(interface looking up method)
488 if test "$netlink" = yes; then
489 AC_MSG_RESULT(netlink)
490 IF_METHOD=if_netlink.o
491 elif test "$opsys" = "sol2-6";then
492 AC_MSG_RESULT(Solaris GIF)
494 elif test "$opsys" = "sol9";then
495 AC_MSG_RESULT(Solaris GLIF)
496 IF_METHOD=if_ioctl_solaris.o
497 IOCTL_METHOD=ioctl_solaris.o
498 elif test "$opsys" = "irix" ; then
501 elif test "$opsys" = "openbsd";then
502 AC_MSG_RESULT(openbsd)
504 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
505 AC_MSG_RESULT(sysctl)
506 IF_METHOD=if_sysctl.o
507 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
513 AC_SUBST(IOCTL_METHOD)
515 dnl -----------------------
516 dnl check proc file system.
517 dnl -----------------------
518 if test -r /proc/net/dev; then
519 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
523 if test -r /proc/net/if_inet6; then
524 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
529 dnl -----------------------------
530 dnl check ipforward detect method
531 dnl -----------------------------
532 AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
533 [for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
535 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
537 case $zebra_ipforward_path in
538 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
539 zebra_ipforward_path="proc";;
542 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
543 zebra_ipforward_path="ews";;
544 *-freebsd*) IPFORWARD=ipforward_sysctl.o
545 zebra_ipforward_path="sysctl";;
546 *) IPFORWARD=ipforward_solaris.o
547 zebra_ipforward_path="solaris";;
549 *) IPFORWARD=ipforward_sysctl.o
550 zebra_ipforward_path="sysctl";;
554 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
559 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
560 if test "${enable_ipv6}" = "no"; then
561 AC_MSG_RESULT(disabled)
566 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
568 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
569 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
573 AC_MSG_RESULT(INRIA IPv6)
577 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
579 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
580 AC_DEFINE(KAME,1,KAME IPv6)
583 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
584 LIB_IPV6="-L/usr/local/v6/lib -linet6"
587 dnl -------------------------
589 dnl default host check
590 dnl It is not used by Kheops
591 dnl -------------------------
592 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
594 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
595 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
596 AC_DEFINE(KAME,1,KAME IPv6 stack)
599 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
600 LIB_IPV6="-L/usr/local/v6/lib -linet6"
602 AC_MSG_RESULT(MUSICA)
606 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
608 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
612 if test x"$opsys" = x"bsdi";then
613 AC_DEFINE(BSDI_NRL,,BSDI)
614 AC_MSG_RESULT(BSDI_NRL)
618 dnl ------------------------------------
619 dnl Solaris 9, 10 and potentially higher
620 dnl ------------------------------------
621 elif test x"$opsys" = x"sol9"; then
623 AC_DEFINE(HAVE_IPV6, 1, IPv6)
624 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
627 AC_MSG_RESULT(Solaris IPv6)
631 elif test "${enable_ipv6}" = "yes"; then
633 #include <linux/version.h>
634 /* 2.1.128 or later */
635 #if LINUX_VERSION_CODE >= 0x020180
639 zebra_cv_linux_ipv6=yes
640 AC_MSG_RESULT(Linux IPv6)])
642 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
645 zebra_cv_linux_ipv6=yes
646 AC_MSG_RESULT(Linux IPv6)
650 if test "$zebra_cv_linux_ipv6" = "yes";then
651 AC_MSG_CHECKING(for GNU libc >= 2.1)
652 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
654 #include <features.h>
655 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
659 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
665 if test "$glibc" != "yes"; then
666 INCLUDES="-I/usr/inet6/include"
667 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
668 LIB_IPV6="-L/usr/inet6/lib -linet6"
673 dnl -----------------------
674 dnl Set IPv6 related values
675 dnl -----------------------
676 LIBS="$LIB_IPV6 $LIBS"
679 if test x"$RIPNGD" = x""; then
680 AC_MSG_RESULT(IPv4 only)
684 dnl ------------------
685 dnl IPv6 header checks
686 dnl ------------------
687 if test "x${zebra_cv_ipv6}" = "xyes"; then
688 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
689 netinet6/in6_var.h netinet6/nd6.h])
692 dnl --------------------
693 dnl Daemon disable check
694 dnl --------------------
695 if test "${enable_zebra}" = "no";then
701 if test "${enable_bgpd}" = "no";then
707 if test "${enable_ripd}" = "no";then
713 if test "${enable_ospfd}" = "no";then
720 if test "${enable_opaque_lsa}" = "yes"; then
721 if test "${enable_ospfapi}" != "no";then
722 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
724 if test "${enable_ospfclient}" != "no";then
725 OSPFCLIENT="ospfclient"
731 case "${enable_ripngd}" in
732 "yes") RIPNGD="ripngd";;
737 case "${enable_ospf6d}" in
738 "yes") OSPF6D="ospf6d";;
743 case "${enable_isisd}" in
744 "yes") ISISD="isisd";;
749 if test "${enable_bgp_announce}" = "no";then
750 AC_DEFINE(DISABLE_BGP_ANNOUNCE,,Disable BGP installation to zebra)
765 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
766 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
767 AC_CHECK_LIB(crypt, crypt)
768 AC_CHECK_LIB(resolv, res_init)
769 AC_CHECK_LIB(m, main)
771 dnl ---------------------------------------------------
772 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
773 dnl ---------------------------------------------------
774 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
775 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
776 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
778 dnl ---------------------------
779 dnl check system has GNU regexp
780 dnl ---------------------------
781 dnl AC_MSG_CHECKING(whether system has GNU regex)
782 AC_CHECK_LIB(c, regexec,
783 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
785 [LIB_REGEX="regex.o"])
788 dnl ------------------
789 dnl check SNMP library
790 dnl ------------------
791 if test "${enable_snmp}" = "yes";then
792 dnl AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
793 if test "${HAVE_SNMP}" = ""; then
796 unset ac_cv_lib_snmp_asn_parse_int
797 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
798 if test "${NEED_CRYPTO}" = ""; then
799 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes ])
801 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes; NEED_CRYPTO=yes;LIBS="$LIBS -lcrypto" ],,"-lcrypto")
805 if test "${HAVE_SNMP}" = ""; then
808 unset ac_cv_lib_snmp_asn_parse_int
809 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes, )
810 if test "${HAVE_SNMP}" = ""; then
811 unset ac_cv_lib_snmp_asn_parse_int
812 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
813 if test "${NEED_CRYPTO}" = "yes"; then
814 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
820 if test "${HAVE_SNMP}" = ""; then
822 LIBS="-L/usr/local/lib"
823 unset ac_cv_lib_snmp_asn_parse_int
824 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
825 if test "${HAVE_SNMP}" = ""; then
826 unset ac_cv_lib_snmp_asn_parse_int
827 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
828 if test "${NEED_CRYPTO}" = "yes"; then
829 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
835 if test "${HAVE_SNMP}" = "yes"; then
836 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
838 test -f "${ac_snmp}" && break
842 /usr/include/net-snmp/*)
843 AC_DEFINE(HAVE_SNMP,,SNMP)
844 AC_DEFINE(HAVE_NETSNMP,,SNMP)
845 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
846 CFLAGS="${CFLAGS} -I/usr/include/net-snmp -I/usr/include/net-snmp/library"
847 if test "${HAVE_NETSNMP}" = "yes"; then
848 LIBS="${LIBS} -lnetsnmp"
850 LIBS="${LIBS} -lsnmp"
853 /usr/include/ucd-snmp/*)
854 AC_DEFINE(HAVE_SNMP,,SNMP)
855 CFLAGS="${CFLAGS} -I/usr/include/ucd-snmp"
856 LIBS="${LIBS} -lsnmp"
858 /usr/local/include/ucd-snmp/*)
859 AC_DEFINE(HAVE_SNMP,,SNMP)
860 CFLAGS="${CFLAGS} -I/usr/local/include/ucd-snmp"
861 LIBS="${LIBS} -L/usr/local/lib -lsnmp"
863 /usr/local/include/net-snmp/*)
864 AC_DEFINE(HAVE_SNMP,,SNMP)
865 AC_DEFINE(HAVE_NET_SNMP,,SNMP)
866 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
867 CFLAGS="${CFLAGS} -I/usr/local/include/net-snmp"
868 LIBS="${LIBS} -L/usr/local/lib -lnetsnmp"
871 if test "${NEED_CRYPTO}" = "yes"; then
872 LIBS="${LIBS} -lcrypto"
877 dnl ----------------------------
878 dnl check sa_len of sockaddr
879 dnl ----------------------------
880 AC_MSG_CHECKING(whether struct sockaddr has a sa_len field)
881 AC_TRY_COMPILE([#include <sys/types.h>
882 #include <sys/socket.h>
883 ],[static struct sockaddr ac_i;int ac_j = sizeof (ac_i.sa_len);],
885 AC_DEFINE(HAVE_SA_LEN,,sa_len)],
888 dnl ----------------------------
889 dnl check sin_len of sockaddr_in
890 dnl ----------------------------
891 AC_MSG_CHECKING(whether struct sockaddr_in has a sin_len field)
892 AC_TRY_COMPILE([#include <sys/types.h>
893 #include <netinet/in.h>
894 ],[static struct sockaddr_in ac_i;int ac_j = sizeof (ac_i.sin_len);],
896 AC_DEFINE(HAVE_SIN_LEN,,sin_len)],
899 dnl ----------------------------
900 dnl check sun_len of sockaddr_un
901 dnl ----------------------------
902 AC_MSG_CHECKING(whether struct sockaddr_un has a sun_len field)
903 AC_TRY_COMPILE([#include <sys/types.h>
905 ],[static struct sockaddr_un ac_i;int ac_j = sizeof (ac_i.sun_len);],
907 AC_DEFINE(HAVE_SUN_LEN,,sun_len)],
910 dnl -----------------------------------
911 dnl check sin6_scope_id of sockaddr_in6
912 dnl -----------------------------------
913 if test "$zebra_cv_ipv6" = yes; then
914 AC_MSG_CHECKING(whether struct sockaddr_in6 has a sin6_scope_id field)
915 AC_TRY_COMPILE([#include <sys/types.h>
916 #include <netinet/in.h>
917 ],[static struct sockaddr_in6 ac_i;int ac_j = sizeof (ac_i.sin6_scope_id);],
919 AC_DEFINE(HAVE_SIN6_SCOPE_ID,,scope id)],
923 dnl ----------------------------
924 dnl check socklen_t exist or not
925 dnl ----------------------------
926 AC_MSG_CHECKING(whther socklen_t is defined)
927 AC_TRY_COMPILE([#include <sys/types.h>
928 #include <sys/socket.h>
929 #include <netinet/in.h>
932 AC_DEFINE(HAVE_SOCKLEN_T,,socklen_t)],
935 dnl ------------------------
936 dnl check struct sockaddr_dl
937 dnl ------------------------
938 AC_MSG_CHECKING(whether struct sockaddr_dl exist)
939 AC_EGREP_HEADER(sockaddr_dl,
942 AC_DEFINE(HAVE_SOCKADDR_DL,,sockaddr_dl)],
945 dnl --------------------------
946 dnl check structure ifaliasreq
947 dnl --------------------------
948 AC_MSG_CHECKING(whether struct ifaliasreq exist)
949 AC_EGREP_HEADER(ifaliasreq,
952 AC_DEFINE(HAVE_IFALIASREQ,,ifaliasreq)],
955 dnl ----------------------------
956 dnl check structure in6_aliasreq
957 dnl ----------------------------
958 AC_MSG_CHECKING(whether struct in6_aliasreq exist)
959 AC_EGREP_HEADER(in6_aliasreq,
962 AC_DEFINE(HAVE_IN6_ALIASREQ,,in6_aliasreq)],
965 dnl -----------------------------------
966 dnl check ifra_lifetime of in6_aliasreq
967 dnl -----------------------------------
968 AC_MSG_CHECKING(whether in6_aliasreq.ifra_lifetime exist)
969 AC_TRY_COMPILE([#include <sys/types.h>
970 #include <netinet6/in6_var.h>
971 ],[static struct if6_aliasreq ac_i;int ac_j = sizeof (ac_i.ifra_lifetime);],
973 AC_DEFINE(HAVE_IFRA_LIFETIME,,Have in6_aliasreq.ifra_lifetime)],
976 dnl ---------------------------
977 dnl check structure rt_addrinfo
978 dnl ---------------------------
979 AC_MSG_CHECKING(whether struct rt_addrinfo exist)
980 AC_EGREP_HEADER(rt_addrinfo,
983 AC_DEFINE(HAVE_RT_ADDRINFO,,rt_addrinfo)],
986 dnl --------------------------
987 dnl check structure in_pktinfo
988 dnl --------------------------
989 AC_MSG_CHECKING(whether struct in_pktinfo exist)
990 AC_TRY_COMPILE([#include <netinet/in.h>
991 ],[struct in_pktinfo ac_x;],
993 AC_DEFINE(HAVE_INPKTINFO,,in_pktinfo)],
996 dnl --------------------------------------
997 dnl checking for getrusage struct and call
998 dnl --------------------------------------
999 AC_MSG_CHECKING(whether getrusage is available)
1000 AC_TRY_COMPILE([#include <sys/resource.h>
1001 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1003 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1006 dnl -------------------
1007 dnl capabilities checks
1008 dnl -------------------
1009 if test "${enable_capabilities}" != "no"; then
1010 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1011 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1013 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1014 quagga_ac_keepcaps="yes"],
1017 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1018 AC_CHECK_HEADERS(sys/capability.h)
1020 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1021 AC_CHECK_LIB(cap, cap_init,
1022 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1030 dnl ---------------------------
1031 dnl check for glibc 'backtrace'
1032 dnl ---------------------------
1033 if test "${glibc}" = "yes"; then
1034 AC_CHECK_HEADER(execinfo.h)
1036 if test x"${ac_cv_header_execinfo_h}" = x"yes"; then
1037 AC_CHECK_FUNC(backtrace,
1038 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)]
1045 CONFDATE=`date '+%Y%m%d'`
1048 dnl ------------------------------
1049 dnl set paths for state directory
1050 dnl ------------------------------
1051 if test "${prefix}" = "NONE"; then
1052 quagga_statedir_prefix="";
1054 quagga_statedir_prefix=${prefix}
1056 if test "${localstatedir}" = '${prefix}/var'; then
1057 AC_CACHE_CHECK(state directory,ac_statedir,
1058 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1059 ${quagga_statedir_prefix}/var/adm dnl
1060 ${quagga_statedir_prefix}/etc dnl
1066 test -d $QUAGGA_STATE_DIR && break
1068 quagga_statedir=$QUAGGA_STATE_DIR])
1070 quagga_statedir=${localstatedir}
1071 AC_MSG_CHECKING(directory to use for state file)
1072 AC_MSG_RESULT(${quagga_statedir})
1074 if test $quagga_statedir = "/dev/null"; then
1075 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1078 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1079 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1080 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1081 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1082 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1083 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1084 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1085 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1086 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1087 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1088 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1089 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1090 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1091 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1092 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1094 dnl ---------------------------
1095 dnl Check htonl works correctly
1096 dnl ---------------------------
1097 AC_MSG_CHECKING(for working htonl)
1098 AC_CACHE_VAL(ac_cv_htonl_works, [
1099 AC_TRY_LINK([#ifdef HAVE_SYS_TYPES_H
1100 #include <sys/types.h>
1105 #ifdef HAVE_NETINET_IN_H
1106 #include <netinet/in.h>
1109 ac_cv_htonl_works=yes,
1110 ac_cv_htonl_works=no)])
1111 AC_MSG_RESULT($ac_cv_htonl_works)
1113 AC_OUTPUT(Makefile lib/Makefile zebra/Makefile ripd/Makefile
1114 ripngd/Makefile bgpd/Makefile ospfd/Makefile
1115 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1118 redhat/Makefile redhat/quagga.spec
1120 [chmod +x vtysh/extract.pl])
1125 quagga version : ${PACKAGE_VERSION}
1126 host operationg system : ${host_os}
1127 source code location : ${srcdir}
1129 compiler flags : ${CFLAGS}
1130 linker flags : ${LDFLAGS} ${LIBS}
1131 state file directory : ${quagga_statedir}
1132 config file directory : `eval echo \`echo ${sysconfdir}\``
1133 example directory : `eval echo \`echo ${exampledir}\``
1134 user to run as : ${enable_user}
1135 group to run as : ${enable_group}
1136 group for vty sockets : ${enable_vty_group}
1137 config file mask : ${enable_configfile_mask}
1138 log file mask : ${enable_logfile_mask}
1140 The above user and group must have read/write access to the state file
1141 directory and to the config files in the config file directory.