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.78 2004/12/22 14:03:52 ajs Exp $
11 AC_INIT(Quagga, 0.97.3, [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])
111 AC_ARG_ENABLE(watchquagga,
112 [ --disable-watchquagga do not build watchquagga])
114 [ --enable-isisd build isisd])
115 AC_ARG_ENABLE(bgp-announce,
116 [ --disable-bgp-announce, turn off BGP route announcement])
117 AC_ARG_ENABLE(netlink,
118 [ --enable-netlink force to use Linux netlink interface])
119 AC_ARG_ENABLE(broken-aliases,
120 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
122 [ --enable-snmp enable SNMP support])
124 [ --with-libpam use libpam for PAM support in vtysh])
125 AC_ARG_ENABLE(tcp-zebra,
126 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
127 AC_ARG_ENABLE(opaque-lsa,
128 [ --enable-opaque-lsa enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
129 AC_ARG_ENABLE(ospfapi,
130 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database,
131 (this is the default if --enable-opaque-lsa is not set)])
132 AC_ARG_ENABLE(ospfclient,
133 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
134 (this is the default if --disable-ospfapi is set)])
135 AC_ARG_ENABLE(ospf-te,
136 [ --enable-ospf-te enable Traffic Engineering Extension to OSPF])
137 AC_ARG_ENABLE(multipath,
138 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
139 AC_ARG_ENABLE(quagga_user,
140 [ --enable-user=ARG user to run Quagga suite as (default quagga)])
141 AC_ARG_ENABLE(quagga_group,
142 [ --enable-group=ARG group to run Quagga suite as (default quagga)])
143 AC_ARG_ENABLE(vty_group,
144 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
145 AC_ARG_ENABLE(configfile_mask,
146 [ --enable-configfile-mask=ARG set mask for config files])
147 AC_ARG_ENABLE(logfile_mask,
148 [ --enable-logfile-mask=ARG set mask for log files])
151 [ --disable-rtadv disable IPV6 router advertisement feature])
153 [ --enable-irdp enable IRDP server support in zebra])
154 AC_ARG_ENABLE(capabilities,
155 [ --disable-capabilities disable using POSIX capabilities])
156 AC_ARG_ENABLE(gcc_ultra_verbose,
157 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
159 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
160 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
161 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
162 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
163 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
166 if test "${enable_broken_aliases}" = "yes"; then
167 if test "${enable_netlink}" = "yes"
169 echo "Sorry, you can't use netlink with broken aliases"
172 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
176 if test "${enable_tcp_zebra}" = "yes"; then
177 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
180 if test "${enable_opaque_lsa}" = "yes"; then
181 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
184 if test "${enable_ospf_te}" = "yes"; then
185 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
186 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
189 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
190 if test "${enable_rtadv}" != "no"; then
192 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
197 if test "${enable_irdp}" = "yes"; then
198 AC_DEFINE(HAVE_IRDP,, IRDP )
201 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
203 elif test "${enable_user}" = "no"; then
206 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
208 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
209 enable_group="quagga"
210 elif test "${enable_group}" = "no"; then
213 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
215 if test x"${enable_vty_group}" = x"yes" ; then
216 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
217 elif test x"${enable_vty_group}" != x""; then
218 if test x"${enable_vty_group}" != x"no"; then
219 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
223 enable_configfile_mask=${enable_configfile_mask:-0600}
224 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
226 enable_logfile_mask=${enable_logfile_mask:-0600}
227 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
233 case "${enable_multipath}" in
235 MULTIPATH_NUM="${enable_multipath}"
240 echo "Please specify digit to --enable-multipath ARG."
247 AC_SUBST(MULTIPATH_NUM)
249 dnl -------------------
250 dnl Check header files.
251 dnl -------------------
253 AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
254 sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
255 sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
258 AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
259 net/if_dl.h net/netopt.h inet/nd.h net/route.h \
260 net/if.h net/if_var.h netinet/in_var.h])
262 dnl V6 headers are checked below, after we check for v6
269 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
271 [*-sunos5.[6-8]*] | [*-solaris2.[6-8]*])
273 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.8)
274 AC_DEFINE(SUNOS_5, 1, SunOS 5)
275 AC_CHECK_LIB(xnet, main)
278 [*-sunos5.[8-9]] | [*-sunos5.1[0-9]] \
279 | [*-solaris2.[8-9]] | [*-solaris2.1[0-9]])
281 AC_DEFINE(SUNOS_59,,SunOS 5.9 up)
282 AC_DEFINE(SUNOS_5, 1, SunOS 5)
283 AC_CHECK_LIB(socket, main)
284 AC_CHECK_LIB(nsl, main)
287 *-sunos5* | *-solaris2*)
288 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
289 AC_CHECK_LIB(socket, main)
290 AC_CHECK_LIB(nsl, main)
295 AC_DEFINE(GNU_LINUX,,GNU Linux)
298 AC_CHECK_LIB(nsl, gethostbyname)
299 AC_CHECK_LIB(socket, socket)
302 AC_DEFINE(FREEBSD_32,,FreeBSD 3.2)
306 AC_DEFINE(OPEN_BSD,,OpenBSD)
310 OTHER_METHOD="mtu_kvm.o"
311 AC_CHECK_LIB(kvm, main)
315 AC_DEFINE(IRIX_65,,IRIX 6.5)
319 dnl ---------------------
320 dnl Integrated VTY option
321 dnl ---------------------
322 case "${enable_vtysh}" in
323 "yes") VTYSH="vtysh";
324 AC_DEFINE(VTYSH,,VTY shell)
325 AC_PATH_PROG(PERL, perl)
326 dnl Vtysh uses libreadline, which looks for termcap functions at
327 dnl configure time. We follow readline's search order.
328 dnl The required procedures are in libtermcap on NetBSD, in
329 dnl [TODO] on Linux, and in [TODO] on Solaris.
330 AC_CHECK_LIB(termcap, tputs, ,
331 AC_CHECK_LIB(tinfo, tputs, ,
332 AC_CHECK_LIB(curses, tputs, ,
333 AC_CHECK_LIB(ncurses, tputs))))
334 AC_CHECK_LIB(readline, main)
335 if test $ac_cv_lib_readline_main = no; then
336 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
338 AC_CHECK_HEADER(readline/history.h)
339 if test $ac_cv_header_readline_history_h = no;then
340 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
342 AC_CHECK_LIB(readline, rl_completion_matches)
343 if test $ac_cv_lib_readline_rl_completion_matches = no; then
344 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
354 if test "$with_libpam" = "yes"; then
355 AC_CHECK_HEADER(security/pam_misc.h)
356 if test "$ac_cv_header_security_pam_misc_h" = yes; then
357 AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
358 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
359 pam_conv_func="misc_conv"
361 AC_CHECK_HEADER(security/openpam.h)
362 if test "$ac_cv_header_security_openpam_h" = yes; then
363 AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
364 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
365 pam_conv_func="openpam_ttyconv"
367 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
368 AC_MSG_WARN([*** pam support will not be built ***])
373 if test "$with_libpam" = "yes"; then
374 dnl took this test from proftpd's configure.in and suited to our needs
375 dnl -------------------------------------------------------------------------
377 dnl This next check looks funky due to a linker problem with some versions
378 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
379 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
380 dnl with RedHat 6.2 and Debian 2.2 or better.
381 AC_CHECK_LIB(pam, pam_start,
382 [AC_CHECK_LIB(pam, $pam_conv_func,
383 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
385 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
386 LIBPAM="-lpam -lpam_misc"]
390 [AC_CHECK_LIB(pam, pam_end,
391 [AC_CHECK_LIB(pam, $pam_conv_func,
392 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
393 LIBPAM="-lpam -ldl"],
394 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
395 LIBPAM="-lpam -ldl -lpam_misc"]
397 ],AC_MSG_WARN([*** pam support will not be built ***]),
404 dnl -------------------------------
405 dnl Endian-ness check
406 dnl -------------------------------
409 dnl -------------------------------
410 dnl check the size in byte of the C
411 dnl -------------------------------
412 dnl AC_CHECK_SIZEOF(char)
413 dnl AC_CHECK_SIZEOF(int)
414 dnl AC_CHECK_SIZEOF(short)
415 dnl AC_CHECK_SIZEOF(long)
417 dnl ----------------------------
418 dnl check existance of functions
419 dnl ----------------------------
420 AC_CHECK_FUNCS(memset memcpy strerror inet_aton daemon snprintf vsnprintf \
421 strlcat strlcpy if_nametoindex if_indextoname getifaddrs \
423 AC_CHECK_FUNCS(setproctitle, ,
424 [AC_CHECK_LIB(util, setproctitle,
426 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
432 dnl ------------------------------------
433 dnl Determine routing get and set method
434 dnl ------------------------------------
435 AC_MSG_CHECKING(zebra between kernel interface method)
436 if test x"$opsys" = x"gnu-linux"; then
437 if test "${enable_netlink}" = "yes";then
438 AC_MSG_RESULT(netlink)
439 RT_METHOD=rt_netlink.o
440 AC_DEFINE(HAVE_NETLINK,,netlink)
442 elif test "${enable_netlink}" = "no"; then
447 AC_MSG_RESULT(netlink)
448 RT_METHOD=rt_netlink.o
449 AC_DEFINE(HAVE_NETLINK,,netlink)
452 elif test x"$opsys" = x"sol2-6";then
453 AC_MSG_RESULT(Route socket)
454 KERNEL_METHOD="kernel_socket.o"
455 RT_METHOD="rt_socket.o"
456 elif test x"$opsys" = x"sol9";then
457 AC_MSG_RESULT(Route socket)
458 KERNEL_METHOD="kernel_socket.o"
459 RT_METHOD="rt_socket.o"
460 elif test "$opsys" = "irix" ; then
461 AC_MSG_RESULT(Route socket)
462 KERNEL_METHOD="kernel_socket.o"
463 RT_METHOD="rt_socket.o"
465 AC_TRY_RUN([#include <errno.h>
466 #include <sys/types.h>
467 #include <sys/socket.h>
473 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
474 if (ac_sock < 0 && errno == EINVAL)
478 [KERNEL_METHOD=kernel_socket.o
479 RT_METHOD=rt_socket.o
480 AC_MSG_RESULT(socket)],
481 [RT_METHOD=rt_ioctl.o
482 AC_MSG_RESULT(ioctl)],
483 [KERNEL_METHOD=kernel_socket.o
484 RT_METHOD=rt_socket.o
485 AC_MSG_RESULT(socket)])
488 AC_SUBST(KERNEL_METHOD)
489 AC_SUBST(OTHER_METHOD)
491 dnl ------------------------------
492 dnl check kernel route read method
493 dnl ------------------------------
494 AC_CACHE_CHECK(route read method check, zebra_rtread,
495 [if test "$netlink" = yes; then
496 RTREAD_METHOD="rtread_netlink.o"
497 zebra_rtread="netlink"
499 for zebra_rtread in /proc/net/route /dev/ip /dev/null;
501 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
503 case $zebra_rtread in
504 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
505 zebra_rtread="proc";;
508 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
509 zebra_rtread="sysctl";;
510 *) RTREAD_METHOD="rtread_getmsg.o"
511 zebra_rtread="getmsg";;
513 *) RTREAD_METHOD="rtread_sysctl.o"
514 zebra_rtread="sysctl";;
517 AC_SUBST(RTREAD_METHOD)
519 dnl -----------------------------
520 dnl check interface lookup method
521 dnl -----------------------------
523 AC_MSG_CHECKING(interface looking up method)
524 if test "$netlink" = yes; then
525 AC_MSG_RESULT(netlink)
526 IF_METHOD=if_netlink.o
527 elif test "$opsys" = "sol2-6";then
528 AC_MSG_RESULT(Solaris GIF)
530 elif test "$opsys" = "sol9";then
531 AC_MSG_RESULT(Solaris GLIF)
532 IF_METHOD=if_ioctl_solaris.o
533 IOCTL_METHOD=ioctl_solaris.o
534 elif test "$opsys" = "irix" ; then
537 elif test "$opsys" = "openbsd";then
538 AC_MSG_RESULT(openbsd)
540 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
541 AC_MSG_RESULT(sysctl)
542 IF_METHOD=if_sysctl.o
543 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
549 AC_SUBST(IOCTL_METHOD)
551 dnl -----------------------
552 dnl check proc file system.
553 dnl -----------------------
554 if test -r /proc/net/dev; then
555 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
559 if test -r /proc/net/if_inet6; then
560 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
565 dnl -----------------------------
566 dnl check ipforward detect method
567 dnl -----------------------------
568 AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
569 [for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
571 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
573 case $zebra_ipforward_path in
574 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
575 zebra_ipforward_path="proc";;
578 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
579 zebra_ipforward_path="ews";;
580 *-freebsd*) IPFORWARD=ipforward_sysctl.o
581 zebra_ipforward_path="sysctl";;
582 *) IPFORWARD=ipforward_solaris.o
583 zebra_ipforward_path="solaris";;
585 *) IPFORWARD=ipforward_sysctl.o
586 zebra_ipforward_path="sysctl";;
590 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
595 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
596 if test "${enable_ipv6}" = "no"; then
597 AC_MSG_RESULT(disabled)
602 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
604 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
605 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
609 AC_MSG_RESULT(INRIA IPv6)
613 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
615 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
616 AC_DEFINE(KAME,1,KAME IPv6)
619 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
620 LIB_IPV6="-L/usr/local/v6/lib -linet6"
623 dnl -------------------------
625 dnl default host check
626 dnl It is not used by Kheops
627 dnl -------------------------
628 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
630 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
631 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
632 AC_DEFINE(KAME,1,KAME IPv6 stack)
635 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
636 LIB_IPV6="-L/usr/local/v6/lib -linet6"
638 AC_MSG_RESULT(MUSICA)
642 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
644 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
648 if test x"$opsys" = x"bsdi";then
649 AC_DEFINE(BSDI_NRL,,BSDI)
650 AC_MSG_RESULT(BSDI_NRL)
654 dnl ------------------------------------
655 dnl Solaris 9, 10 and potentially higher
656 dnl ------------------------------------
657 elif test x"$opsys" = x"sol9"; then
659 AC_DEFINE(HAVE_IPV6, 1, IPv6)
660 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
663 AC_MSG_RESULT(Solaris IPv6)
667 elif test "${enable_ipv6}" = "yes"; then
669 #include <linux/version.h>
670 /* 2.1.128 or later */
671 #if LINUX_VERSION_CODE >= 0x020180
675 zebra_cv_linux_ipv6=yes
676 AC_MSG_RESULT(Linux IPv6)])
678 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
681 zebra_cv_linux_ipv6=yes
682 AC_MSG_RESULT(Linux IPv6)
686 if test "$zebra_cv_linux_ipv6" = "yes";then
687 AC_MSG_CHECKING(for GNU libc >= 2.1)
688 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
690 #include <features.h>
691 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
695 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
701 if test "$glibc" != "yes"; then
702 INCLUDES="-I/usr/inet6/include"
703 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
704 LIB_IPV6="-L/usr/inet6/lib -linet6"
709 dnl -----------------------
710 dnl Set IPv6 related values
711 dnl -----------------------
712 LIBS="$LIB_IPV6 $LIBS"
715 if test x"$RIPNGD" = x""; then
716 AC_MSG_RESULT(IPv4 only)
720 dnl ------------------
721 dnl IPv6 header checks
722 dnl ------------------
723 if test "x${zebra_cv_ipv6}" = "xyes"; then
724 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
725 netinet6/in6_var.h netinet6/nd6.h])
728 dnl --------------------
729 dnl Daemon disable check
730 dnl --------------------
731 if test "${enable_zebra}" = "no";then
737 if test "${enable_bgpd}" = "no";then
743 if test "${enable_ripd}" = "no";then
749 if test "${enable_ospfd}" = "no";then
755 if test "${enable_watchquagga}" = "no";then
758 WATCHQUAGGA="watchquagga"
762 if test "${enable_opaque_lsa}" = "yes"; then
763 if test "${enable_ospfapi}" != "no";then
764 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
766 if test "${enable_ospfclient}" != "no";then
767 OSPFCLIENT="ospfclient"
773 case "${enable_ripngd}" in
774 "yes") RIPNGD="ripngd";;
779 case "${enable_ospf6d}" in
780 "yes") OSPF6D="ospf6d";;
785 case "${enable_isisd}" in
786 "yes") ISISD="isisd";;
791 if test "${enable_bgp_announce}" = "no";then
792 AC_DEFINE(DISABLE_BGP_ANNOUNCE,,Disable BGP installation to zebra)
801 AC_SUBST(WATCHQUAGGA)
808 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
809 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
810 AC_CHECK_LIB(crypt, crypt)
811 AC_CHECK_LIB(resolv, res_init)
812 AC_CHECK_LIB(m, main)
814 dnl ---------------------------------------------------
815 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
816 dnl ---------------------------------------------------
817 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
818 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
819 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
821 dnl ---------------------------
822 dnl check system has GNU regexp
823 dnl ---------------------------
824 dnl AC_MSG_CHECKING(whether system has GNU regex)
825 AC_CHECK_LIB(c, regexec,
826 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
828 [LIB_REGEX="regex.o"])
831 dnl ------------------
832 dnl check SNMP library
833 dnl ------------------
834 if test "${enable_snmp}" = "yes";then
835 dnl AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
836 if test "${HAVE_SNMP}" = ""; then
839 unset ac_cv_lib_snmp_asn_parse_int
840 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
841 if test "${NEED_CRYPTO}" = ""; then
842 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes ])
844 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes; NEED_CRYPTO=yes;LIBS="$LIBS -lcrypto" ],,"-lcrypto")
848 if test "${HAVE_SNMP}" = ""; then
851 unset ac_cv_lib_snmp_asn_parse_int
852 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes, )
853 if test "${HAVE_SNMP}" = ""; then
854 unset ac_cv_lib_snmp_asn_parse_int
855 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
856 if test "${NEED_CRYPTO}" = "yes"; then
857 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
863 if test "${HAVE_SNMP}" = ""; then
865 LIBS="-L/usr/local/lib"
866 unset ac_cv_lib_snmp_asn_parse_int
867 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
868 if test "${HAVE_SNMP}" = ""; then
869 unset ac_cv_lib_snmp_asn_parse_int
870 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
871 if test "${NEED_CRYPTO}" = "yes"; then
872 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
878 if test "${HAVE_SNMP}" = "yes"; then
879 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
881 test -f "${ac_snmp}" && break
885 /usr/include/net-snmp/*)
886 AC_DEFINE(HAVE_SNMP,,SNMP)
887 AC_DEFINE(HAVE_NETSNMP,,SNMP)
888 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
889 CFLAGS="${CFLAGS} -I/usr/include/net-snmp -I/usr/include/net-snmp/library"
890 if test "${HAVE_NETSNMP}" = "yes"; then
891 LIBS="${LIBS} -lnetsnmp"
893 LIBS="${LIBS} -lsnmp"
896 /usr/include/ucd-snmp/*)
897 AC_DEFINE(HAVE_SNMP,,SNMP)
898 CFLAGS="${CFLAGS} -I/usr/include/ucd-snmp"
899 LIBS="${LIBS} -lsnmp"
901 /usr/local/include/ucd-snmp/*)
902 AC_DEFINE(HAVE_SNMP,,SNMP)
903 CFLAGS="${CFLAGS} -I/usr/local/include/ucd-snmp"
904 LIBS="${LIBS} -L/usr/local/lib -lsnmp"
906 /usr/local/include/net-snmp/*)
907 AC_DEFINE(HAVE_SNMP,,SNMP)
908 AC_DEFINE(HAVE_NET_SNMP,,SNMP)
909 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
910 CFLAGS="${CFLAGS} -I/usr/local/include/net-snmp"
911 LIBS="${LIBS} -L/usr/local/lib -lnetsnmp"
914 if test "${NEED_CRYPTO}" = "yes"; then
915 LIBS="${LIBS} -lcrypto"
920 dnl ----------------------------
921 dnl check sa_len of sockaddr
922 dnl ----------------------------
923 AC_MSG_CHECKING(whether struct sockaddr has a sa_len field)
924 AC_TRY_COMPILE([#include <sys/types.h>
925 #include <sys/socket.h>
926 ],[static struct sockaddr ac_i;int ac_j = sizeof (ac_i.sa_len);],
928 AC_DEFINE(HAVE_SA_LEN,,sa_len)],
931 dnl ----------------------------
932 dnl check sin_len of sockaddr_in
933 dnl ----------------------------
934 AC_MSG_CHECKING(whether struct sockaddr_in has a sin_len field)
935 AC_TRY_COMPILE([#include <sys/types.h>
936 #include <netinet/in.h>
937 ],[static struct sockaddr_in ac_i;int ac_j = sizeof (ac_i.sin_len);],
939 AC_DEFINE(HAVE_SIN_LEN,,sin_len)],
942 dnl ----------------------------
943 dnl check sun_len of sockaddr_un
944 dnl ----------------------------
945 AC_MSG_CHECKING(whether struct sockaddr_un has a sun_len field)
946 AC_TRY_COMPILE([#include <sys/types.h>
948 ],[static struct sockaddr_un ac_i;int ac_j = sizeof (ac_i.sun_len);],
950 AC_DEFINE(HAVE_SUN_LEN,,sun_len)],
953 dnl -----------------------------------
954 dnl check sin6_scope_id of sockaddr_in6
955 dnl -----------------------------------
956 if test "$zebra_cv_ipv6" = yes; then
957 AC_MSG_CHECKING(whether struct sockaddr_in6 has a sin6_scope_id field)
958 AC_TRY_COMPILE([#include <sys/types.h>
959 #include <netinet/in.h>
960 ],[static struct sockaddr_in6 ac_i;int ac_j = sizeof (ac_i.sin6_scope_id);],
962 AC_DEFINE(HAVE_SIN6_SCOPE_ID,,scope id)],
966 dnl ----------------------------
967 dnl check socklen_t exist or not
968 dnl ----------------------------
969 AC_MSG_CHECKING(whther socklen_t is defined)
970 AC_TRY_COMPILE([#include <sys/types.h>
971 #include <sys/socket.h>
972 #include <netinet/in.h>
975 AC_DEFINE(HAVE_SOCKLEN_T,,socklen_t)],
978 dnl ------------------------
979 dnl check struct sockaddr_dl
980 dnl ------------------------
981 AC_MSG_CHECKING(whether struct sockaddr_dl exist)
982 AC_EGREP_HEADER(sockaddr_dl,
985 AC_DEFINE(HAVE_SOCKADDR_DL,,sockaddr_dl)],
988 dnl --------------------------
989 dnl check structure ifaliasreq
990 dnl --------------------------
991 AC_MSG_CHECKING(whether struct ifaliasreq exist)
992 AC_EGREP_HEADER(ifaliasreq,
995 AC_DEFINE(HAVE_IFALIASREQ,,ifaliasreq)],
998 dnl ----------------------------
999 dnl check structure in6_aliasreq
1000 dnl ----------------------------
1001 AC_MSG_CHECKING(whether struct in6_aliasreq exist)
1002 AC_EGREP_HEADER(in6_aliasreq,
1005 AC_DEFINE(HAVE_IN6_ALIASREQ,,in6_aliasreq)],
1008 dnl -----------------------------------
1009 dnl check ifra_lifetime of in6_aliasreq
1010 dnl -----------------------------------
1011 AC_MSG_CHECKING(whether in6_aliasreq.ifra_lifetime exist)
1012 AC_TRY_COMPILE([#include <sys/types.h>
1013 #include <netinet6/in6_var.h>
1014 ],[static struct if6_aliasreq ac_i;int ac_j = sizeof (ac_i.ifra_lifetime);],
1016 AC_DEFINE(HAVE_IFRA_LIFETIME,,Have in6_aliasreq.ifra_lifetime)],
1019 dnl ---------------------------
1020 dnl check structure rt_addrinfo
1021 dnl ---------------------------
1022 AC_MSG_CHECKING(whether struct rt_addrinfo exist)
1023 AC_EGREP_HEADER(rt_addrinfo,
1026 AC_DEFINE(HAVE_RT_ADDRINFO,,rt_addrinfo)],
1029 dnl --------------------------
1030 dnl check structure in_pktinfo
1031 dnl --------------------------
1032 AC_MSG_CHECKING(whether struct in_pktinfo exist)
1033 AC_TRY_COMPILE([#include <netinet/in.h>
1034 ],[struct in_pktinfo ac_x;],
1036 AC_DEFINE(HAVE_INPKTINFO,,in_pktinfo)],
1039 dnl --------------------------------------
1040 dnl checking for getrusage struct and call
1041 dnl --------------------------------------
1042 AC_MSG_CHECKING(whether getrusage is available)
1043 AC_TRY_COMPILE([#include <sys/resource.h>
1044 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1046 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1049 dnl -------------------
1050 dnl capabilities checks
1051 dnl -------------------
1052 if test "${enable_capabilities}" != "no"; then
1053 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1054 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1056 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1057 quagga_ac_keepcaps="yes"],
1060 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1061 AC_CHECK_HEADERS(sys/capability.h)
1063 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1064 AC_CHECK_LIB(cap, cap_init,
1065 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1073 dnl ---------------------------
1074 dnl check for glibc 'backtrace'
1075 dnl ---------------------------
1076 if test "${glibc}" = "yes"; then
1077 AC_CHECK_HEADER(execinfo.h)
1079 if test x"${ac_cv_header_execinfo_h}" = x"yes"; then
1080 AC_CHECK_FUNC(backtrace,
1081 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)]
1088 CONFDATE=`date '+%Y%m%d'`
1091 dnl ------------------------------
1092 dnl set paths for state directory
1093 dnl ------------------------------
1094 if test "${prefix}" = "NONE"; then
1095 quagga_statedir_prefix="";
1097 quagga_statedir_prefix=${prefix}
1099 if test "${localstatedir}" = '${prefix}/var'; then
1100 AC_CACHE_CHECK(state directory,ac_statedir,
1101 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1102 ${quagga_statedir_prefix}/var/adm dnl
1103 ${quagga_statedir_prefix}/etc dnl
1109 test -d $QUAGGA_STATE_DIR && break
1111 quagga_statedir=$QUAGGA_STATE_DIR])
1113 quagga_statedir=${localstatedir}
1114 AC_MSG_CHECKING(directory to use for state file)
1115 AC_MSG_RESULT(${quagga_statedir})
1117 if test $quagga_statedir = "/dev/null"; then
1118 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1121 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1122 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1123 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1124 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1125 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1126 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1127 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1128 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1129 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1130 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1131 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1132 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1133 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1134 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1135 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1136 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1138 dnl ---------------------------
1139 dnl Check htonl works correctly
1140 dnl ---------------------------
1141 AC_MSG_CHECKING(for working htonl)
1142 AC_CACHE_VAL(ac_cv_htonl_works, [
1143 AC_TRY_LINK([#ifdef HAVE_SYS_TYPES_H
1144 #include <sys/types.h>
1149 #ifdef HAVE_NETINET_IN_H
1150 #include <netinet/in.h>
1153 ac_cv_htonl_works=yes,
1154 ac_cv_htonl_works=no)])
1155 AC_MSG_RESULT($ac_cv_htonl_works)
1157 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1158 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1159 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1160 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
1165 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1166 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1167 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1168 ## Hack, but working solution to avoid rebuilding of quagga.info.
1169 ## It's already in CVS until texinfo 4.7 is more common.
1170 AC_CONFIG_COMMANDS([info-time],[touch doc/quagga.info])
1174 Quagga configuration
1175 --------------------
1176 quagga version : ${PACKAGE_VERSION}
1177 host operationg system : ${host_os}
1178 source code location : ${srcdir}
1180 compiler flags : ${CFLAGS}
1181 linker flags : ${LDFLAGS} ${LIBS}
1182 state file directory : ${quagga_statedir}
1183 config file directory : `eval echo \`echo ${sysconfdir}\``
1184 example directory : `eval echo \`echo ${exampledir}\``
1185 user to run as : ${enable_user}
1186 group to run as : ${enable_group}
1187 group for vty sockets : ${enable_vty_group}
1188 config file mask : ${enable_configfile_mask}
1189 log file mask : ${enable_logfile_mask}
1191 The above user and group must have read/write access to the state file
1192 directory and to the config files in the config file directory.