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.105 2005/04/29 03:20:54 paul Exp $
11 AC_INIT(Quagga, 0.99.1, [http://bugzilla.quagga.net])
12 AC_CONFIG_SRCDIR(lib/zebra.h)
14 dnl -----------------------------------
15 dnl Get hostname and other information.
16 dnl -----------------------------------
22 AM_CONFIG_HEADER(config.h)
24 dnl we need gawk for memtypes.awk
25 AC_CHECK_PROG([GAWK],[gawk],[gawk],[/bin/false])
26 AC_ARG_VAR([GAWK],[GNU AWK])
28 dnl default is to match previous behavior
29 exampledir=${sysconfdir}
30 AC_ARG_ENABLE([exampledir],
31 AC_HELP_STRING([--enable-exampledir],
32 [specify alternate directory for examples]),
33 exampledir="$enableval",)
34 dnl XXX add --exampledir to autoconf standard directory list somehow
37 dnl default is to match previous behavior
40 AC_ARG_ENABLE([pkgsrcrcdir],
41 AC_HELP_STRING([--enable-pkgsrcrcdir],
42 [specify directory for rc.d scripts]),
43 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
44 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
52 [ --with-cflags Set CFLAGS for use in compilation.])
53 if test "x$with_cflags" != "x" ; then
54 CFLAGS="$with_cflags" ; cflags_specified=yes ;
55 elif test -n "$CFLAGS" ; then
56 cflags_specified=yes ;
59 dnl --------------------
60 dnl Check CC and friends
61 dnl --------------------
66 dnl ------------------------------------------------------------------
67 dnl Intel compiler check. Although Intel tries really hard to make icc
68 dnl look like gcc, there are some differences. It's very verbose with
69 dnl -Wall and it doesn't support the individual -W options.
70 dnl ------------------------------------------------------------------
71 AC_MSG_CHECKING([whether we are using the Intel compiler])
72 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
79 dnl ---------------------------------------------
80 dnl If CLFAGS doesn\'t exist set default value
81 dnl AC_PROG_CC will have set minimal default
82 dnl already, eg "-O2 -g" for gcc, "-g" for others
83 dnl (Wall is gcc specific... have to make sure
84 dnl gcc is being used before setting it)
85 dnl Intel icc 8.0 also sets __GNUC__, but
86 dnl doesn't support all these fancy -W options.
87 dnl ---------------------------------------------
89 if test "x$cflags_specified" = "x" ; then
90 if test "x${GCC}" = "xyes" && test "x${ICC}" = "xno"; then
91 CFLAGS="-Os -g -Wall -Wsign-compare -Wpointer-arith"
92 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
94 # TODO: conditionally addd -Wpacked if handled
97 dnl ---------------------------------------------------------------------
98 dnl Intel compiler warnings we ignore:
99 dnl 279: controlling expression is constant.
100 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
101 dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
103 dnl 981: operands are evaluated in unspecified order.
104 dnl ---------------------------------------------------------------------
106 if test "$ICC" = "yes"; then
107 CFLAGS="-Os -g -Wall -wd 279,869,981"
115 AC_CHECK_TOOL(AR, ar)
116 AC_CHECK_TOOL(RANLIB, ranlib, :)
128 dnl ----------------------
129 dnl Packages configuration
130 dnl ----------------------
132 [ --enable-vtysh include integrated vty shell for Quagga])
134 [ --disable-ipv6 turn off IPv6 related features and daemons])
136 [ --disable-zebra do not build zebra daemon])
138 [ --disable-bgpd do not build bgpd])
140 [ --disable-ripd do not build ripd])
141 AC_ARG_ENABLE(ripngd,
142 [ --disable-ripngd do not build ripngd])
144 [ --disable-ospfd do not build ospfd])
145 AC_ARG_ENABLE(ospf6d,
146 [ --disable-ospf6d do not build ospf6d])
147 AC_ARG_ENABLE(watchquagga,
148 [ --disable-watchquagga do not build watchquagga])
150 [ --enable-isisd build isisd])
151 AC_ARG_ENABLE(bgp-announce,
152 [ --disable-bgp-announce, turn off BGP route announcement])
153 AC_ARG_ENABLE(netlink,
154 [ --enable-netlink force to use Linux netlink interface])
155 AC_ARG_ENABLE(broken-aliases,
156 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
158 [ --enable-snmp enable SNMP support])
160 [ --with-libpam use libpam for PAM support in vtysh])
161 AC_ARG_ENABLE(tcp-zebra,
162 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
163 AC_ARG_ENABLE(opaque-lsa,
164 [ --enable-opaque-lsa enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
165 AC_ARG_ENABLE(ospfapi,
166 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database,
167 (this is the default if --enable-opaque-lsa is not set)])
168 AC_ARG_ENABLE(ospfclient,
169 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
170 (this is the default if --disable-ospfapi is set)])
171 AC_ARG_ENABLE(ospf-te,
172 [ --enable-ospf-te enable Traffic Engineering Extension to OSPF])
173 AC_ARG_ENABLE(multipath,
174 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
175 AC_ARG_ENABLE(quagga_user,
176 [ --enable-user=ARG user to run Quagga suite as (default quagga)])
177 AC_ARG_ENABLE(quagga_group,
178 [ --enable-group=ARG group to run Quagga suite as (default quagga)])
179 AC_ARG_ENABLE(vty_group,
180 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
181 AC_ARG_ENABLE(configfile_mask,
182 [ --enable-configfile-mask=ARG set mask for config files])
183 AC_ARG_ENABLE(logfile_mask,
184 [ --enable-logfile-mask=ARG set mask for log files])
187 [ --disable-rtadv disable IPV6 router advertisement feature])
189 [ --enable-irdp enable IRDP server support in zebra])
190 AC_ARG_ENABLE(isis_topology,
191 [ --enable-isis-topology enable IS-IS topology generator])
192 AC_ARG_ENABLE(capabilities,
193 [ --disable-capabilities disable using POSIX capabilities])
194 AC_ARG_ENABLE(gcc_ultra_verbose,
195 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
196 AC_ARG_ENABLE(gcc-rdynamic,
197 [ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
198 AC_ARG_ENABLE(time-check,
199 [ --disable-time-check disable slow thread warning messages])
201 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
202 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
203 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
204 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
205 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
208 if test x"${enable_gcc_rdynamic}" = x"yes" ; then
209 LDFLAGS="${LDFLAGS} -rdynamic"
212 if test x"${enable_time_check}" != x"no" ; then
213 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
214 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
216 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
220 if test "${enable_broken_aliases}" = "yes"; then
221 if test "${enable_netlink}" = "yes"
223 echo "Sorry, you can't use netlink with broken aliases"
226 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
230 if test "${enable_tcp_zebra}" = "yes"; then
231 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
234 if test "${enable_opaque_lsa}" = "yes"; then
235 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
238 if test "${enable_ospf_te}" = "yes"; then
239 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
240 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
243 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
244 if test "${enable_rtadv}" != "no"; then
246 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
251 if test "${enable_irdp}" = "yes"; then
252 AC_DEFINE(HAVE_IRDP,, IRDP )
255 if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
256 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
257 ISIS_TOPOLOGY_INCLUDES="-I./topology"
258 ISIS_TOPOLOGY_DIR="topology"
259 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
262 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
263 AC_SUBST(ISIS_TOPOLOGY_DIR)
264 AC_SUBST(ISIS_TOPOLOGY_LIB)
266 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
268 elif test "${enable_user}" = "no"; then
272 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
273 enable_group="quagga"
274 elif test "${enable_group}" = "no"; then
278 if test x"${enable_vty_group}" = x"yes" ; then
279 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
280 elif test x"${enable_vty_group}" != x""; then
281 if test x"${enable_vty_group}" != x"no"; then
282 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
285 AC_SUBST([enable_user])
286 AC_SUBST([enable_group])
287 AC_SUBST([enable_vty_group])
288 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
289 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
291 enable_configfile_mask=${enable_configfile_mask:-0600}
292 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
294 enable_logfile_mask=${enable_logfile_mask:-0600}
295 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
301 case "${enable_multipath}" in
303 MULTIPATH_NUM="${enable_multipath}"
308 echo "Please specify digit to --enable-multipath ARG."
315 AC_SUBST(MULTIPATH_NUM)
317 dnl -------------------
318 dnl Check header files.
319 dnl -------------------
321 AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
322 sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
323 sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
326 AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
327 net/if_dl.h net/netopt.h inet/nd.h net/route.h \
328 net/if.h net/if_var.h netinet/in_var.h])
330 dnl V6 headers are checked below, after we check for v6
337 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
339 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
341 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
342 AC_DEFINE(SUNOS_5, 1, SunOS 5)
343 AC_CHECK_LIB(xnet, main)
347 | [*-sunos5.1[0-9]] \
348 | [*-sunos5.1[0-9].[0-9]] \
349 | [*-solaris2.[8-9]] \
350 | [*-solaris2.1[0-9]] \
351 | [*-solaris2.1[0-9].[0-9]])
353 AC_DEFINE(SUNOS_59,,SunOS 5.8 up)
354 AC_DEFINE(SUNOS_5, 1, SunOS 5)
355 AC_CHECK_LIB(socket, main)
356 AC_CHECK_LIB(nsl, main)
357 AC_CHECK_LIB(umem, main)
360 *-sunos5* | *-solaris2*)
361 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
362 AC_CHECK_LIB(socket, main)
363 AC_CHECK_LIB(nsl, main)
368 AC_DEFINE(GNU_LINUX,,GNU Linux)
371 AC_CHECK_LIB(nsl, gethostbyname)
372 AC_CHECK_LIB(socket, socket)
375 AC_DEFINE(FREEBSD_32,,FreeBSD 3.2)
379 AC_DEFINE(OPEN_BSD,,OpenBSD)
383 OTHER_METHOD="mtu_kvm.o"
384 AC_CHECK_LIB(kvm, main)
388 AC_DEFINE(IRIX_65,,IRIX 6.5)
392 dnl ---------------------
393 dnl Integrated VTY option
394 dnl ---------------------
395 case "${enable_vtysh}" in
396 "yes") VTYSH="vtysh";
397 AC_DEFINE(VTYSH,,VTY shell)
398 AC_PATH_PROG(PERL, perl)
399 dnl Vtysh uses libreadline, which looks for termcap functions at
400 dnl configure time. We follow readline's search order.
401 dnl The required procedures are in libtermcap on NetBSD, in
402 dnl [TODO] on Linux, and in [TODO] on Solaris.
403 AC_CHECK_LIB(termcap, tputs, ,
404 AC_CHECK_LIB(tinfo, tputs, ,
405 AC_CHECK_LIB(curses, tputs, ,
406 AC_CHECK_LIB(ncurses, tputs))))
407 AC_CHECK_LIB(readline, main)
408 if test $ac_cv_lib_readline_main = no; then
409 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
411 AC_CHECK_HEADER(readline/history.h)
412 if test $ac_cv_header_readline_history_h = no;then
413 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
415 AC_CHECK_LIB(readline, rl_completion_matches)
416 if test $ac_cv_lib_readline_rl_completion_matches = no; then
417 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
427 if test "$with_libpam" = "yes"; then
428 AC_CHECK_HEADER(security/pam_misc.h)
429 if test "$ac_cv_header_security_pam_misc_h" = yes; then
430 AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
431 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
432 pam_conv_func="misc_conv"
434 AC_CHECK_HEADER(security/openpam.h)
435 if test "$ac_cv_header_security_openpam_h" = yes; then
436 AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
437 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
438 pam_conv_func="openpam_ttyconv"
440 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
441 AC_MSG_WARN([*** pam support will not be built ***])
446 if test "$with_libpam" = "yes"; then
447 dnl took this test from proftpd's configure.in and suited to our needs
448 dnl -------------------------------------------------------------------------
450 dnl This next check looks funky due to a linker problem with some versions
451 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
452 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
453 dnl with RedHat 6.2 and Debian 2.2 or better.
454 AC_CHECK_LIB(pam, pam_start,
455 [AC_CHECK_LIB(pam, $pam_conv_func,
456 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
458 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
459 LIBPAM="-lpam -lpam_misc"]
463 [AC_CHECK_LIB(pam, pam_end,
464 [AC_CHECK_LIB(pam, $pam_conv_func,
465 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
466 LIBPAM="-lpam -ldl"],
467 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
468 LIBPAM="-lpam -ldl -lpam_misc"]
470 ],AC_MSG_WARN([*** pam support will not be built ***]),
477 dnl -------------------------------
478 dnl Endian-ness check
479 dnl -------------------------------
482 dnl -------------------------------
483 dnl check the size in byte of the C
484 dnl -------------------------------
485 dnl AC_CHECK_SIZEOF(char)
486 dnl AC_CHECK_SIZEOF(int)
487 dnl AC_CHECK_SIZEOF(short)
488 dnl AC_CHECK_SIZEOF(long)
490 dnl ----------------------------
491 dnl check existance of functions
492 dnl ----------------------------
493 AC_CHECK_FUNCS(memset memcpy strerror inet_aton daemon snprintf vsnprintf \
494 strlcat strlcpy if_nametoindex if_indextoname getifaddrs \
496 AC_CHECK_FUNCS(setproctitle, ,
497 [AC_CHECK_LIB(util, setproctitle,
499 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
505 dnl ------------------------------------
506 dnl Determine routing get and set method
507 dnl ------------------------------------
508 AC_MSG_CHECKING(zebra between kernel interface method)
509 if test x"$opsys" = x"gnu-linux"; then
510 if test "${enable_netlink}" = "yes";then
511 AC_MSG_RESULT(netlink)
512 RT_METHOD=rt_netlink.o
513 AC_DEFINE(HAVE_NETLINK,,netlink)
515 elif test "${enable_netlink}" = "no"; then
520 AC_MSG_RESULT(netlink)
521 RT_METHOD=rt_netlink.o
522 AC_DEFINE(HAVE_NETLINK,,netlink)
525 elif test x"$opsys" = x"sol2-6";then
526 AC_MSG_RESULT(Route socket)
527 KERNEL_METHOD="kernel_socket.o"
528 RT_METHOD="rt_socket.o"
529 elif test x"$opsys" = x"sol8";then
530 AC_MSG_RESULT(Route socket)
531 KERNEL_METHOD="kernel_socket.o"
532 RT_METHOD="rt_socket.o"
533 elif test "$opsys" = "irix" ; then
534 AC_MSG_RESULT(Route socket)
535 KERNEL_METHOD="kernel_socket.o"
536 RT_METHOD="rt_socket.o"
538 AC_TRY_RUN([#include <errno.h>
539 #include <sys/types.h>
540 #include <sys/socket.h>
546 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
547 if (ac_sock < 0 && errno == EINVAL)
551 [KERNEL_METHOD=kernel_socket.o
552 RT_METHOD=rt_socket.o
553 AC_MSG_RESULT(socket)],
554 [RT_METHOD=rt_ioctl.o
555 AC_MSG_RESULT(ioctl)],
556 [KERNEL_METHOD=kernel_socket.o
557 RT_METHOD=rt_socket.o
558 AC_MSG_RESULT(socket)])
561 AC_SUBST(KERNEL_METHOD)
562 AC_SUBST(OTHER_METHOD)
564 dnl ------------------------------------
565 dnl check for broken CMSG_FIRSTHDR macro
566 dnl ------------------------------------
567 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
568 AC_RUN_IFELSE([AC_LANG_SOURCE([[
571 #define __EXTENSIONS__
574 #include <sys/types.h>
575 #include <sys/socket.h>
582 msg.msg_control = buf;
583 msg.msg_controllen = 0;
585 if (CMSG_FIRSTHDR(&msg) != NULL)
588 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
589 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
591 dnl ------------------------------
592 dnl check kernel route read method
593 dnl ------------------------------
594 AC_CACHE_CHECK(route read method check, zebra_rtread,
595 [if test "$netlink" = yes; then
596 RTREAD_METHOD="rtread_netlink.o"
597 zebra_rtread="netlink"
599 for zebra_rtread in /proc/net/route /dev/ip /dev/null;
601 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
603 case $zebra_rtread in
604 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
605 zebra_rtread="proc";;
608 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
609 zebra_rtread="sysctl";;
610 *) RTREAD_METHOD="rtread_getmsg.o"
611 zebra_rtread="getmsg";;
613 *) RTREAD_METHOD="rtread_sysctl.o"
614 zebra_rtread="sysctl";;
617 AC_SUBST(RTREAD_METHOD)
619 dnl -----------------------------
620 dnl check interface lookup method
621 dnl -----------------------------
623 AC_MSG_CHECKING(interface looking up method)
624 if test "$netlink" = yes; then
625 AC_MSG_RESULT(netlink)
626 IF_METHOD=if_netlink.o
627 elif test "$opsys" = "sol2-6";then
628 AC_MSG_RESULT(Solaris GIF)
630 elif test "$opsys" = "sol8";then
631 AC_MSG_RESULT(Solaris GLIF)
632 IF_METHOD=if_ioctl_solaris.o
633 IOCTL_METHOD=ioctl_solaris.o
634 elif test "$opsys" = "irix" ; then
637 elif test "$opsys" = "openbsd";then
638 AC_MSG_RESULT(openbsd)
640 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
641 AC_MSG_RESULT(sysctl)
642 IF_METHOD=if_sysctl.o
643 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
649 AC_SUBST(IOCTL_METHOD)
651 dnl -----------------------
652 dnl check proc file system.
653 dnl -----------------------
654 if test -r /proc/net/dev; then
655 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
659 if test -r /proc/net/if_inet6; then
660 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
665 dnl -----------------------------
666 dnl check ipforward detect method
667 dnl -----------------------------
668 AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
669 [for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
671 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
673 case $zebra_ipforward_path in
674 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
675 zebra_ipforward_path="proc";;
678 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
679 zebra_ipforward_path="ews";;
680 *-freebsd*) IPFORWARD=ipforward_sysctl.o
681 zebra_ipforward_path="sysctl";;
682 *) IPFORWARD=ipforward_solaris.o
683 zebra_ipforward_path="solaris";;
685 *) IPFORWARD=ipforward_sysctl.o
686 zebra_ipforward_path="sysctl";;
690 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
695 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
696 if test "${enable_ipv6}" = "no"; then
697 AC_MSG_RESULT(disabled)
702 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
704 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
705 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
709 AC_MSG_RESULT(INRIA IPv6)
713 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
715 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
716 AC_DEFINE(KAME,1,KAME IPv6)
719 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
720 LIB_IPV6="-L/usr/local/v6/lib -linet6"
723 dnl -------------------------
725 dnl default host check
726 dnl It is not used by Kheops
727 dnl -------------------------
728 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
730 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
731 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
732 AC_DEFINE(KAME,1,KAME IPv6 stack)
735 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
736 LIB_IPV6="-L/usr/local/v6/lib -linet6"
738 AC_MSG_RESULT(MUSICA)
742 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
744 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
748 if test x"$opsys" = x"bsdi";then
749 AC_DEFINE(BSDI_NRL,,BSDI)
750 AC_MSG_RESULT(BSDI_NRL)
754 dnl ------------------------------------
755 dnl Solaris 9, 10 and potentially higher
756 dnl ------------------------------------
757 elif test x"$opsys" = x"sol8"; then
759 AC_DEFINE(HAVE_IPV6, 1, IPv6)
760 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
763 AC_MSG_RESULT(Solaris IPv6)
767 elif test "${enable_ipv6}" = "yes"; then
769 #include <linux/version.h>
770 /* 2.1.128 or later */
771 #if LINUX_VERSION_CODE >= 0x020180
775 zebra_cv_linux_ipv6=yes
776 AC_MSG_RESULT(Linux IPv6)])
778 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
781 zebra_cv_linux_ipv6=yes
782 AC_MSG_RESULT(Linux IPv6)
786 if test "$zebra_cv_linux_ipv6" = "yes";then
787 AC_MSG_CHECKING(for GNU libc >= 2.1)
788 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
790 #include <features.h>
791 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
795 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
801 if test "$glibc" != "yes"; then
802 INCLUDES="-I/usr/inet6/include"
803 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
804 LIB_IPV6="-L/usr/inet6/lib -linet6"
809 dnl -----------------------
810 dnl Set IPv6 related values
811 dnl -----------------------
812 LIBS="$LIB_IPV6 $LIBS"
815 if test x"$RIPNGD" = x""; then
816 AC_MSG_RESULT(IPv4 only)
820 dnl ------------------
821 dnl IPv6 header checks
822 dnl ------------------
823 if test "x${zebra_cv_ipv6}" = "xyes"; then
824 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
825 netinet6/in6_var.h netinet6/nd6.h])
828 dnl --------------------
829 dnl Daemon disable check
830 dnl --------------------
831 if test "${enable_zebra}" = "no";then
837 if test "${enable_bgpd}" = "no";then
843 if test "${enable_ripd}" = "no";then
849 if test "${enable_ospfd}" = "no";then
855 if test "${enable_watchquagga}" = "no";then
858 WATCHQUAGGA="watchquagga"
862 if test "${enable_opaque_lsa}" = "yes"; then
863 if test "${enable_ospfapi}" != "no";then
864 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
866 if test "${enable_ospfclient}" != "no";then
867 OSPFCLIENT="ospfclient"
873 case "${enable_ripngd}" in
874 "yes") RIPNGD="ripngd";;
879 case "${enable_ospf6d}" in
880 "yes") OSPF6D="ospf6d";;
885 case "${enable_isisd}" in
886 "yes") ISISD="isisd";;
891 if test "${enable_bgp_announce}" = "no";then
892 AC_DEFINE(DISABLE_BGP_ANNOUNCE,,Disable BGP installation to zebra)
901 AC_SUBST(WATCHQUAGGA)
908 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
909 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
910 AC_CHECK_LIB(crypt, crypt)
911 AC_CHECK_LIB(resolv, res_init)
912 AC_CHECK_LIB(m, main)
914 dnl ---------------------------------------------------
915 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
916 dnl ---------------------------------------------------
917 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
918 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
919 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
921 dnl ---------------------------
922 dnl check system has GNU regexp
923 dnl ---------------------------
924 dnl AC_MSG_CHECKING(whether system has GNU regex)
925 AC_CHECK_LIB(c, regexec,
926 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
928 [LIB_REGEX="regex.o"])
931 dnl ------------------
932 dnl check SNMP library
933 dnl ------------------
934 if test "${enable_snmp}" = "yes";then
935 dnl AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
936 if test "${HAVE_SNMP}" = ""; then
939 unset ac_cv_lib_snmp_asn_parse_int
940 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
941 if test "${NEED_CRYPTO}" = ""; then
942 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes ])
944 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes; NEED_CRYPTO=yes;LIBS="$LIBS -lcrypto" ],,"-lcrypto")
948 if test "${HAVE_SNMP}" = ""; then
951 unset ac_cv_lib_snmp_asn_parse_int
952 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes, )
953 if test "${HAVE_SNMP}" = ""; then
954 unset ac_cv_lib_snmp_asn_parse_int
955 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
956 if test "${NEED_CRYPTO}" = "yes"; then
957 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
963 if test "${HAVE_SNMP}" = ""; then
965 LIBS="-L/usr/local/lib"
966 unset ac_cv_lib_snmp_asn_parse_int
967 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
968 if test "${HAVE_SNMP}" = ""; then
969 unset ac_cv_lib_snmp_asn_parse_int
970 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
971 if test "${NEED_CRYPTO}" = "yes"; then
972 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
978 if test "${HAVE_SNMP}" = "yes"; then
979 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
981 test -f "${ac_snmp}" && break
985 /usr/include/net-snmp/*)
986 AC_DEFINE(HAVE_SNMP,,SNMP)
987 AC_DEFINE(HAVE_NETSNMP,,SNMP)
988 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
989 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/include/net-snmp -I/usr/include/net-snmp/library"
990 if test "${HAVE_NETSNMP}" = "yes"; then
991 LIBS="${LIBS} -lnetsnmp"
993 LIBS="${LIBS} -lsnmp"
996 /usr/include/ucd-snmp/*)
997 AC_DEFINE(HAVE_SNMP,,SNMP)
998 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/include/ucd-snmp"
999 LIBS="${LIBS} -lsnmp"
1001 /usr/local/include/ucd-snmp/*)
1002 AC_DEFINE(HAVE_SNMP,,SNMP)
1003 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/local/include/ucd-snmp"
1004 LIBS="${LIBS} -L/usr/local/lib -lsnmp"
1006 /usr/local/include/net-snmp/*)
1007 AC_DEFINE(HAVE_SNMP,,SNMP)
1008 AC_DEFINE(HAVE_NET_SNMP,,SNMP)
1009 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
1010 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/local/include/net-snmp"
1011 LIBS="${LIBS} -L/usr/local/lib -lnetsnmp"
1014 if test "${NEED_CRYPTO}" = "yes"; then
1015 LIBS="${LIBS} -lcrypto"
1020 if test "${enable_snmp}" = "yes" -a "${HAVE_SNMP}" != "yes"; then
1021 AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])
1024 AC_SUBST(SNMP_INCLUDES)
1026 dnl ----------------------------
1027 dnl check sa_len of sockaddr
1028 dnl ----------------------------
1029 AC_MSG_CHECKING(whether struct sockaddr has a sa_len field)
1030 AC_TRY_COMPILE([#include <sys/types.h>
1031 #include <sys/socket.h>
1032 ],[static struct sockaddr ac_i;int ac_j = sizeof (ac_i.sa_len);],
1034 AC_DEFINE(HAVE_SA_LEN,,sa_len)],
1037 dnl ----------------------------
1038 dnl check sin_len of sockaddr_in
1039 dnl ----------------------------
1040 AC_MSG_CHECKING(whether struct sockaddr_in has a sin_len field)
1041 AC_TRY_COMPILE([#include <sys/types.h>
1042 #include <netinet/in.h>
1043 ],[static struct sockaddr_in ac_i;int ac_j = sizeof (ac_i.sin_len);],
1045 AC_DEFINE(HAVE_SIN_LEN,,sin_len)],
1048 dnl ----------------------------
1049 dnl check sun_len of sockaddr_un
1050 dnl ----------------------------
1051 AC_MSG_CHECKING(whether struct sockaddr_un has a sun_len field)
1052 AC_TRY_COMPILE([#include <sys/types.h>
1054 ],[static struct sockaddr_un ac_i;int ac_j = sizeof (ac_i.sun_len);],
1056 AC_DEFINE(HAVE_SUN_LEN,,sun_len)],
1059 dnl -----------------------------------
1060 dnl check sin6_scope_id of sockaddr_in6
1061 dnl -----------------------------------
1062 if test "$zebra_cv_ipv6" = yes; then
1063 AC_MSG_CHECKING(whether struct sockaddr_in6 has a sin6_scope_id field)
1064 AC_TRY_COMPILE([#include <sys/types.h>
1065 #include <netinet/in.h>
1066 ],[static struct sockaddr_in6 ac_i;int ac_j = sizeof (ac_i.sin6_scope_id);],
1068 AC_DEFINE(HAVE_SIN6_SCOPE_ID,,scope id)],
1072 dnl ----------------------------
1073 dnl check socklen_t exist or not
1074 dnl ----------------------------
1075 AC_MSG_CHECKING(whther socklen_t is defined)
1076 AC_TRY_COMPILE([#include <sys/types.h>
1077 #include <sys/socket.h>
1078 #include <netinet/in.h>
1079 ],[socklen_t ac_x;],
1081 AC_DEFINE(HAVE_SOCKLEN_T,,socklen_t)],
1084 dnl ------------------------
1085 dnl check struct sockaddr_dl
1086 dnl ------------------------
1087 AC_MSG_CHECKING(whether struct sockaddr_dl exist)
1088 AC_EGREP_HEADER(sockaddr_dl,
1091 AC_DEFINE(HAVE_SOCKADDR_DL,,sockaddr_dl)],
1094 dnl --------------------------
1095 dnl check structure ifaliasreq
1096 dnl --------------------------
1097 AC_MSG_CHECKING(whether struct ifaliasreq exist)
1098 AC_EGREP_HEADER(ifaliasreq,
1101 AC_DEFINE(HAVE_IFALIASREQ,,ifaliasreq)],
1104 dnl ----------------------------
1105 dnl check structure in6_aliasreq
1106 dnl ----------------------------
1107 AC_MSG_CHECKING(whether struct in6_aliasreq exist)
1108 AC_EGREP_HEADER(in6_aliasreq,
1111 AC_DEFINE(HAVE_IN6_ALIASREQ,,in6_aliasreq)],
1114 dnl -----------------------------------
1115 dnl check ifra_lifetime of in6_aliasreq
1116 dnl -----------------------------------
1117 AC_MSG_CHECKING(whether in6_aliasreq.ifra_lifetime exist)
1118 AC_TRY_COMPILE([#include <sys/types.h>
1119 #include <netinet6/in6_var.h>
1120 ],[static struct if6_aliasreq ac_i;int ac_j = sizeof (ac_i.ifra_lifetime);],
1122 AC_DEFINE(HAVE_IFRA_LIFETIME,,Have in6_aliasreq.ifra_lifetime)],
1125 dnl ---------------------------
1126 dnl check structure rt_addrinfo
1127 dnl ---------------------------
1128 AC_MSG_CHECKING(whether struct rt_addrinfo exist)
1129 AC_EGREP_HEADER(rt_addrinfo,
1132 AC_DEFINE(HAVE_RT_ADDRINFO,,rt_addrinfo)],
1135 dnl --------------------------
1136 dnl check structure in_pktinfo
1137 dnl --------------------------
1138 AC_MSG_CHECKING(whether struct in_pktinfo exist)
1139 AC_TRY_COMPILE([#include <netinet/in.h>
1140 ],[struct in_pktinfo ac_x;],
1142 AC_DEFINE(HAVE_INPKTINFO,,in_pktinfo)],
1145 dnl ----------------------------------
1146 dnl check struct nd_opt_homeagent_info
1147 dnl ----------------------------------
1148 AC_MSG_CHECKING(whether struct nd_opt_homeagent_info exist)
1149 AC_EGREP_HEADER(nd_opt_homeagent_info,
1152 AC_DEFINE(HAVE_ND_OPT_HOMEAGENT_INFO,,nd_opt_homeagent_info)],
1155 dnl --------------------------------
1156 dnl check struct nd_opt_adv_interval
1157 dnl --------------------------------
1158 AC_MSG_CHECKING(whether struct nd_opt_adv_interval exist)
1159 AC_EGREP_HEADER(nd_opt_adv_interval,
1162 AC_DEFINE(HAVE_ND_OPT_ADV_INTERVAL,,nd_opt_adv_interval)],
1165 dnl ------------------------------------
1166 dnl check fields in nd_opt_adv_interval
1167 dnl ------------------------------------
1168 AC_MSG_CHECKING(whether nd_opt_ai_type field exist)
1169 AC_EGREP_HEADER(nd_opt_ai_type,
1172 AC_DEFINE(HAVE_ND_OPT_ADV_INTERVAL_AI_FIELDS,,nd_opt_ai_type)],
1175 dnl --------------------------------------
1176 dnl checking for getrusage struct and call
1177 dnl --------------------------------------
1178 AC_MSG_CHECKING(whether getrusage is available)
1179 AC_TRY_COMPILE([#include <sys/resource.h>
1180 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1182 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1185 dnl -------------------
1186 dnl capabilities checks
1187 dnl -------------------
1188 if test "${enable_capabilities}" != "no"; then
1189 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1190 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1192 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1193 quagga_ac_keepcaps="yes"],
1196 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1197 AC_CHECK_HEADERS(sys/capability.h)
1199 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1200 AC_CHECK_LIB(cap, cap_init,
1201 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1209 dnl -------------------
1210 dnl test for ucontext.h
1211 dnl -------------------
1212 AC_CHECK_HEADERS(ucontext.h)
1214 dnl ---------------------------
1215 dnl check for glibc 'backtrace'
1216 dnl ---------------------------
1217 if test "${glibc}" = "yes"; then
1218 AC_CHECK_HEADER(execinfo.h)
1220 if test x"${ac_cv_header_execinfo_h}" = x"yes"; then
1221 AC_CHECK_FUNC(backtrace,
1222 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)]
1229 CONFDATE=`date '+%Y%m%d'`
1232 dnl ------------------------------
1233 dnl set paths for state directory
1234 dnl ------------------------------
1235 if test "${prefix}" = "NONE"; then
1236 quagga_statedir_prefix="";
1238 quagga_statedir_prefix=${prefix}
1240 if test "${localstatedir}" = '${prefix}/var'; then
1241 AC_CACHE_CHECK(state directory,ac_statedir,
1242 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1243 ${quagga_statedir_prefix}/var/adm dnl
1244 ${quagga_statedir_prefix}/etc dnl
1250 test -d $QUAGGA_STATE_DIR && break
1252 quagga_statedir=$QUAGGA_STATE_DIR])
1254 quagga_statedir=${localstatedir}
1255 AC_MSG_CHECKING(directory to use for state file)
1256 AC_MSG_RESULT(${quagga_statedir})
1257 AC_SUBST(quagga_statedir)
1259 if test $quagga_statedir = "/dev/null"; then
1260 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1263 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1264 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1265 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1266 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1267 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1268 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1269 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1270 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1271 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1272 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1273 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1274 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1275 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1276 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1277 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1278 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1279 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1281 dnl -------------------------------
1282 dnl Quagga sources should always be
1283 dnl current wrt interfaces. Dont
1284 dnl allow deprecated interfaces to
1286 dnl -------------------------------
1287 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1289 dnl ---------------------------
1290 dnl Check htonl works correctly
1291 dnl ---------------------------
1292 AC_MSG_CHECKING(for working htonl)
1293 AC_CACHE_VAL(ac_cv_htonl_works, [
1294 AC_TRY_LINK([#ifdef HAVE_SYS_TYPES_H
1295 #include <sys/types.h>
1300 #ifdef HAVE_NETINET_IN_H
1301 #include <netinet/in.h>
1304 ac_cv_htonl_works=yes,
1305 ac_cv_htonl_works=no)])
1306 AC_MSG_RESULT($ac_cv_htonl_works)
1308 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1309 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1310 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1311 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
1316 isisd/topology/Makefile
1317 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1318 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1319 AC_CONFIG_FILES([solaris/Makefile])
1321 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1322 ## Hack, but working solution to avoid rebuilding of quagga.info.
1323 ## It's already in CVS until texinfo 4.7 is more common.
1324 AC_CONFIG_COMMANDS([info-time],[touch doc/quagga.info])
1328 Quagga configuration
1329 --------------------
1330 quagga version : ${PACKAGE_VERSION}
1331 host operationg system : ${host_os}
1332 source code location : ${srcdir}
1334 compiler flags : ${CFLAGS}
1335 includes : ${INCLUDES} ${SNMP_INCLUDES}
1336 linker flags : ${LDFLAGS} ${LIBS}
1337 state file directory : ${quagga_statedir}
1338 config file directory : `eval echo \`echo ${sysconfdir}\``
1339 example directory : `eval echo \`echo ${exampledir}\``
1340 user to run as : ${enable_user}
1341 group to run as : ${enable_group}
1342 group for vty sockets : ${enable_vty_group}
1343 config file mask : ${enable_configfile_mask}
1344 log file mask : ${enable_logfile_mask}
1346 The above user and group must have read/write access to the state file
1347 directory and to the config files in the config file directory.