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.103 2005/04/16 15:38:23 paul Exp $
11 AC_INIT(Quagga, 0.99.0, [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])
199 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
200 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
201 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
202 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
203 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
206 if test x"${enable_gcc_rdynamic}" = x"yes" ; then
207 LDFLAGS="${LDFLAGS} -rdynamic"
210 if test "${enable_broken_aliases}" = "yes"; then
211 if test "${enable_netlink}" = "yes"
213 echo "Sorry, you can't use netlink with broken aliases"
216 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
220 if test "${enable_tcp_zebra}" = "yes"; then
221 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
224 if test "${enable_opaque_lsa}" = "yes"; then
225 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
228 if test "${enable_ospf_te}" = "yes"; then
229 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
230 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
233 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
234 if test "${enable_rtadv}" != "no"; then
236 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
241 if test "${enable_irdp}" = "yes"; then
242 AC_DEFINE(HAVE_IRDP,, IRDP )
245 if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
246 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
247 ISIS_TOPOLOGY_INCLUDES="-I./topology"
248 ISIS_TOPOLOGY_DIR="topology"
249 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
252 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
253 AC_SUBST(ISIS_TOPOLOGY_DIR)
254 AC_SUBST(ISIS_TOPOLOGY_LIB)
256 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
258 elif test "${enable_user}" = "no"; then
262 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
263 enable_group="quagga"
264 elif test "${enable_group}" = "no"; then
268 if test x"${enable_vty_group}" = x"yes" ; then
269 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
270 elif test x"${enable_vty_group}" != x""; then
271 if test x"${enable_vty_group}" != x"no"; then
272 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
275 AC_SUBST([enable_user])
276 AC_SUBST([enable_group])
277 AC_SUBST([enable_vty_group])
278 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
279 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
281 enable_configfile_mask=${enable_configfile_mask:-0600}
282 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
284 enable_logfile_mask=${enable_logfile_mask:-0600}
285 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
291 case "${enable_multipath}" in
293 MULTIPATH_NUM="${enable_multipath}"
298 echo "Please specify digit to --enable-multipath ARG."
305 AC_SUBST(MULTIPATH_NUM)
307 dnl -------------------
308 dnl Check header files.
309 dnl -------------------
311 AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
312 sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
313 sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
316 AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
317 net/if_dl.h net/netopt.h inet/nd.h net/route.h \
318 net/if.h net/if_var.h netinet/in_var.h])
320 dnl V6 headers are checked below, after we check for v6
327 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
329 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
331 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
332 AC_DEFINE(SUNOS_5, 1, SunOS 5)
333 AC_CHECK_LIB(xnet, main)
337 | [*-sunos5.1[0-9]] \
338 | [*-sunos5.1[0-9].[0-9]] \
339 | [*-solaris2.[8-9]] \
340 | [*-solaris2.1[0-9]] \
341 | [*-solaris2.1[0-9].[0-9]])
343 AC_DEFINE(SUNOS_59,,SunOS 5.8 up)
344 AC_DEFINE(SUNOS_5, 1, SunOS 5)
345 AC_CHECK_LIB(socket, main)
346 AC_CHECK_LIB(nsl, main)
347 AC_CHECK_LIB(umem, main)
350 *-sunos5* | *-solaris2*)
351 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
352 AC_CHECK_LIB(socket, main)
353 AC_CHECK_LIB(nsl, main)
358 AC_DEFINE(GNU_LINUX,,GNU Linux)
361 AC_CHECK_LIB(nsl, gethostbyname)
362 AC_CHECK_LIB(socket, socket)
365 AC_DEFINE(FREEBSD_32,,FreeBSD 3.2)
369 AC_DEFINE(OPEN_BSD,,OpenBSD)
373 OTHER_METHOD="mtu_kvm.o"
374 AC_CHECK_LIB(kvm, main)
378 AC_DEFINE(IRIX_65,,IRIX 6.5)
382 dnl ---------------------
383 dnl Integrated VTY option
384 dnl ---------------------
385 case "${enable_vtysh}" in
386 "yes") VTYSH="vtysh";
387 AC_DEFINE(VTYSH,,VTY shell)
388 AC_PATH_PROG(PERL, perl)
389 dnl Vtysh uses libreadline, which looks for termcap functions at
390 dnl configure time. We follow readline's search order.
391 dnl The required procedures are in libtermcap on NetBSD, in
392 dnl [TODO] on Linux, and in [TODO] on Solaris.
393 AC_CHECK_LIB(termcap, tputs, ,
394 AC_CHECK_LIB(tinfo, tputs, ,
395 AC_CHECK_LIB(curses, tputs, ,
396 AC_CHECK_LIB(ncurses, tputs))))
397 AC_CHECK_LIB(readline, main)
398 if test $ac_cv_lib_readline_main = no; then
399 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
401 AC_CHECK_HEADER(readline/history.h)
402 if test $ac_cv_header_readline_history_h = no;then
403 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
405 AC_CHECK_LIB(readline, rl_completion_matches)
406 if test $ac_cv_lib_readline_rl_completion_matches = no; then
407 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
417 if test "$with_libpam" = "yes"; then
418 AC_CHECK_HEADER(security/pam_misc.h)
419 if test "$ac_cv_header_security_pam_misc_h" = yes; then
420 AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
421 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
422 pam_conv_func="misc_conv"
424 AC_CHECK_HEADER(security/openpam.h)
425 if test "$ac_cv_header_security_openpam_h" = yes; then
426 AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
427 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
428 pam_conv_func="openpam_ttyconv"
430 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
431 AC_MSG_WARN([*** pam support will not be built ***])
436 if test "$with_libpam" = "yes"; then
437 dnl took this test from proftpd's configure.in and suited to our needs
438 dnl -------------------------------------------------------------------------
440 dnl This next check looks funky due to a linker problem with some versions
441 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
442 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
443 dnl with RedHat 6.2 and Debian 2.2 or better.
444 AC_CHECK_LIB(pam, pam_start,
445 [AC_CHECK_LIB(pam, $pam_conv_func,
446 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
448 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
449 LIBPAM="-lpam -lpam_misc"]
453 [AC_CHECK_LIB(pam, pam_end,
454 [AC_CHECK_LIB(pam, $pam_conv_func,
455 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
456 LIBPAM="-lpam -ldl"],
457 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
458 LIBPAM="-lpam -ldl -lpam_misc"]
460 ],AC_MSG_WARN([*** pam support will not be built ***]),
467 dnl -------------------------------
468 dnl Endian-ness check
469 dnl -------------------------------
472 dnl -------------------------------
473 dnl check the size in byte of the C
474 dnl -------------------------------
475 dnl AC_CHECK_SIZEOF(char)
476 dnl AC_CHECK_SIZEOF(int)
477 dnl AC_CHECK_SIZEOF(short)
478 dnl AC_CHECK_SIZEOF(long)
480 dnl ----------------------------
481 dnl check existance of functions
482 dnl ----------------------------
483 AC_CHECK_FUNCS(memset memcpy strerror inet_aton daemon snprintf vsnprintf \
484 strlcat strlcpy if_nametoindex if_indextoname getifaddrs \
486 AC_CHECK_FUNCS(setproctitle, ,
487 [AC_CHECK_LIB(util, setproctitle,
489 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
495 dnl ------------------------------------
496 dnl Determine routing get and set method
497 dnl ------------------------------------
498 AC_MSG_CHECKING(zebra between kernel interface method)
499 if test x"$opsys" = x"gnu-linux"; then
500 if test "${enable_netlink}" = "yes";then
501 AC_MSG_RESULT(netlink)
502 RT_METHOD=rt_netlink.o
503 AC_DEFINE(HAVE_NETLINK,,netlink)
505 elif test "${enable_netlink}" = "no"; then
510 AC_MSG_RESULT(netlink)
511 RT_METHOD=rt_netlink.o
512 AC_DEFINE(HAVE_NETLINK,,netlink)
515 elif test x"$opsys" = x"sol2-6";then
516 AC_MSG_RESULT(Route socket)
517 KERNEL_METHOD="kernel_socket.o"
518 RT_METHOD="rt_socket.o"
519 elif test x"$opsys" = x"sol8";then
520 AC_MSG_RESULT(Route socket)
521 KERNEL_METHOD="kernel_socket.o"
522 RT_METHOD="rt_socket.o"
523 elif test "$opsys" = "irix" ; then
524 AC_MSG_RESULT(Route socket)
525 KERNEL_METHOD="kernel_socket.o"
526 RT_METHOD="rt_socket.o"
528 AC_TRY_RUN([#include <errno.h>
529 #include <sys/types.h>
530 #include <sys/socket.h>
536 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
537 if (ac_sock < 0 && errno == EINVAL)
541 [KERNEL_METHOD=kernel_socket.o
542 RT_METHOD=rt_socket.o
543 AC_MSG_RESULT(socket)],
544 [RT_METHOD=rt_ioctl.o
545 AC_MSG_RESULT(ioctl)],
546 [KERNEL_METHOD=kernel_socket.o
547 RT_METHOD=rt_socket.o
548 AC_MSG_RESULT(socket)])
551 AC_SUBST(KERNEL_METHOD)
552 AC_SUBST(OTHER_METHOD)
554 dnl ------------------------------------
555 dnl check for broken CMSG_FIRSTHDR macro
556 dnl ------------------------------------
557 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
558 AC_RUN_IFELSE([AC_LANG_SOURCE([[
561 #define __EXTENSIONS__
564 #include <sys/types.h>
565 #include <sys/socket.h>
572 msg.msg_control = buf;
573 msg.msg_controllen = 0;
575 if (CMSG_FIRSTHDR(&msg) != NULL)
578 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
579 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
581 dnl ------------------------------
582 dnl check kernel route read method
583 dnl ------------------------------
584 AC_CACHE_CHECK(route read method check, zebra_rtread,
585 [if test "$netlink" = yes; then
586 RTREAD_METHOD="rtread_netlink.o"
587 zebra_rtread="netlink"
589 for zebra_rtread in /proc/net/route /dev/ip /dev/null;
591 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
593 case $zebra_rtread in
594 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
595 zebra_rtread="proc";;
598 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
599 zebra_rtread="sysctl";;
600 *) RTREAD_METHOD="rtread_getmsg.o"
601 zebra_rtread="getmsg";;
603 *) RTREAD_METHOD="rtread_sysctl.o"
604 zebra_rtread="sysctl";;
607 AC_SUBST(RTREAD_METHOD)
609 dnl -----------------------------
610 dnl check interface lookup method
611 dnl -----------------------------
613 AC_MSG_CHECKING(interface looking up method)
614 if test "$netlink" = yes; then
615 AC_MSG_RESULT(netlink)
616 IF_METHOD=if_netlink.o
617 elif test "$opsys" = "sol2-6";then
618 AC_MSG_RESULT(Solaris GIF)
620 elif test "$opsys" = "sol8";then
621 AC_MSG_RESULT(Solaris GLIF)
622 IF_METHOD=if_ioctl_solaris.o
623 IOCTL_METHOD=ioctl_solaris.o
624 elif test "$opsys" = "irix" ; then
627 elif test "$opsys" = "openbsd";then
628 AC_MSG_RESULT(openbsd)
630 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
631 AC_MSG_RESULT(sysctl)
632 IF_METHOD=if_sysctl.o
633 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
639 AC_SUBST(IOCTL_METHOD)
641 dnl -----------------------
642 dnl check proc file system.
643 dnl -----------------------
644 if test -r /proc/net/dev; then
645 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
649 if test -r /proc/net/if_inet6; then
650 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
655 dnl -----------------------------
656 dnl check ipforward detect method
657 dnl -----------------------------
658 AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
659 [for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
661 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
663 case $zebra_ipforward_path in
664 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
665 zebra_ipforward_path="proc";;
668 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
669 zebra_ipforward_path="ews";;
670 *-freebsd*) IPFORWARD=ipforward_sysctl.o
671 zebra_ipforward_path="sysctl";;
672 *) IPFORWARD=ipforward_solaris.o
673 zebra_ipforward_path="solaris";;
675 *) IPFORWARD=ipforward_sysctl.o
676 zebra_ipforward_path="sysctl";;
680 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
685 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
686 if test "${enable_ipv6}" = "no"; then
687 AC_MSG_RESULT(disabled)
692 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
694 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
695 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
699 AC_MSG_RESULT(INRIA IPv6)
703 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
705 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
706 AC_DEFINE(KAME,1,KAME IPv6)
709 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
710 LIB_IPV6="-L/usr/local/v6/lib -linet6"
713 dnl -------------------------
715 dnl default host check
716 dnl It is not used by Kheops
717 dnl -------------------------
718 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
720 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
721 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
722 AC_DEFINE(KAME,1,KAME IPv6 stack)
725 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
726 LIB_IPV6="-L/usr/local/v6/lib -linet6"
728 AC_MSG_RESULT(MUSICA)
732 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
734 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
738 if test x"$opsys" = x"bsdi";then
739 AC_DEFINE(BSDI_NRL,,BSDI)
740 AC_MSG_RESULT(BSDI_NRL)
744 dnl ------------------------------------
745 dnl Solaris 9, 10 and potentially higher
746 dnl ------------------------------------
747 elif test x"$opsys" = x"sol8"; then
749 AC_DEFINE(HAVE_IPV6, 1, IPv6)
750 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
753 AC_MSG_RESULT(Solaris IPv6)
757 elif test "${enable_ipv6}" = "yes"; then
759 #include <linux/version.h>
760 /* 2.1.128 or later */
761 #if LINUX_VERSION_CODE >= 0x020180
765 zebra_cv_linux_ipv6=yes
766 AC_MSG_RESULT(Linux IPv6)])
768 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
771 zebra_cv_linux_ipv6=yes
772 AC_MSG_RESULT(Linux IPv6)
776 if test "$zebra_cv_linux_ipv6" = "yes";then
777 AC_MSG_CHECKING(for GNU libc >= 2.1)
778 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
780 #include <features.h>
781 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
785 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
791 if test "$glibc" != "yes"; then
792 INCLUDES="-I/usr/inet6/include"
793 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
794 LIB_IPV6="-L/usr/inet6/lib -linet6"
799 dnl -----------------------
800 dnl Set IPv6 related values
801 dnl -----------------------
802 LIBS="$LIB_IPV6 $LIBS"
805 if test x"$RIPNGD" = x""; then
806 AC_MSG_RESULT(IPv4 only)
810 dnl ------------------
811 dnl IPv6 header checks
812 dnl ------------------
813 if test "x${zebra_cv_ipv6}" = "xyes"; then
814 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
815 netinet6/in6_var.h netinet6/nd6.h])
818 dnl --------------------
819 dnl Daemon disable check
820 dnl --------------------
821 if test "${enable_zebra}" = "no";then
827 if test "${enable_bgpd}" = "no";then
833 if test "${enable_ripd}" = "no";then
839 if test "${enable_ospfd}" = "no";then
845 if test "${enable_watchquagga}" = "no";then
848 WATCHQUAGGA="watchquagga"
852 if test "${enable_opaque_lsa}" = "yes"; then
853 if test "${enable_ospfapi}" != "no";then
854 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
856 if test "${enable_ospfclient}" != "no";then
857 OSPFCLIENT="ospfclient"
863 case "${enable_ripngd}" in
864 "yes") RIPNGD="ripngd";;
869 case "${enable_ospf6d}" in
870 "yes") OSPF6D="ospf6d";;
875 case "${enable_isisd}" in
876 "yes") ISISD="isisd";;
881 if test "${enable_bgp_announce}" = "no";then
882 AC_DEFINE(DISABLE_BGP_ANNOUNCE,,Disable BGP installation to zebra)
891 AC_SUBST(WATCHQUAGGA)
898 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
899 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
900 AC_CHECK_LIB(crypt, crypt)
901 AC_CHECK_LIB(resolv, res_init)
902 AC_CHECK_LIB(m, main)
904 dnl ---------------------------------------------------
905 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
906 dnl ---------------------------------------------------
907 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
908 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
909 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
911 dnl ---------------------------
912 dnl check system has GNU regexp
913 dnl ---------------------------
914 dnl AC_MSG_CHECKING(whether system has GNU regex)
915 AC_CHECK_LIB(c, regexec,
916 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
918 [LIB_REGEX="regex.o"])
921 dnl ------------------
922 dnl check SNMP library
923 dnl ------------------
924 if test "${enable_snmp}" = "yes";then
925 dnl AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
926 if test "${HAVE_SNMP}" = ""; then
929 unset ac_cv_lib_snmp_asn_parse_int
930 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
931 if test "${NEED_CRYPTO}" = ""; then
932 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes ])
934 AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes; NEED_CRYPTO=yes;LIBS="$LIBS -lcrypto" ],,"-lcrypto")
938 if test "${HAVE_SNMP}" = ""; then
941 unset ac_cv_lib_snmp_asn_parse_int
942 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes, )
943 if test "${HAVE_SNMP}" = ""; then
944 unset ac_cv_lib_snmp_asn_parse_int
945 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
946 if test "${NEED_CRYPTO}" = "yes"; then
947 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
953 if test "${HAVE_SNMP}" = ""; then
955 LIBS="-L/usr/local/lib"
956 unset ac_cv_lib_snmp_asn_parse_int
957 AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
958 if test "${HAVE_SNMP}" = ""; then
959 unset ac_cv_lib_snmp_asn_parse_int
960 AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
961 if test "${NEED_CRYPTO}" = "yes"; then
962 AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
968 if test "${HAVE_SNMP}" = "yes"; then
969 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
971 test -f "${ac_snmp}" && break
975 /usr/include/net-snmp/*)
976 AC_DEFINE(HAVE_SNMP,,SNMP)
977 AC_DEFINE(HAVE_NETSNMP,,SNMP)
978 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
979 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/include/net-snmp -I/usr/include/net-snmp/library"
980 if test "${HAVE_NETSNMP}" = "yes"; then
981 LIBS="${LIBS} -lnetsnmp"
983 LIBS="${LIBS} -lsnmp"
986 /usr/include/ucd-snmp/*)
987 AC_DEFINE(HAVE_SNMP,,SNMP)
988 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/include/ucd-snmp"
989 LIBS="${LIBS} -lsnmp"
991 /usr/local/include/ucd-snmp/*)
992 AC_DEFINE(HAVE_SNMP,,SNMP)
993 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/local/include/ucd-snmp"
994 LIBS="${LIBS} -L/usr/local/lib -lsnmp"
996 /usr/local/include/net-snmp/*)
997 AC_DEFINE(HAVE_SNMP,,SNMP)
998 AC_DEFINE(HAVE_NET_SNMP,,SNMP)
999 AC_DEFINE(UCD_COMPATIBLE,,SNMP)
1000 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/local/include/net-snmp"
1001 LIBS="${LIBS} -L/usr/local/lib -lnetsnmp"
1004 if test "${NEED_CRYPTO}" = "yes"; then
1005 LIBS="${LIBS} -lcrypto"
1010 if test "${enable_snmp}" = "yes" -a "${HAVE_SNMP}" != "yes"; then
1011 AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])
1014 AC_SUBST(SNMP_INCLUDES)
1016 dnl ----------------------------
1017 dnl check sa_len of sockaddr
1018 dnl ----------------------------
1019 AC_MSG_CHECKING(whether struct sockaddr has a sa_len field)
1020 AC_TRY_COMPILE([#include <sys/types.h>
1021 #include <sys/socket.h>
1022 ],[static struct sockaddr ac_i;int ac_j = sizeof (ac_i.sa_len);],
1024 AC_DEFINE(HAVE_SA_LEN,,sa_len)],
1027 dnl ----------------------------
1028 dnl check sin_len of sockaddr_in
1029 dnl ----------------------------
1030 AC_MSG_CHECKING(whether struct sockaddr_in has a sin_len field)
1031 AC_TRY_COMPILE([#include <sys/types.h>
1032 #include <netinet/in.h>
1033 ],[static struct sockaddr_in ac_i;int ac_j = sizeof (ac_i.sin_len);],
1035 AC_DEFINE(HAVE_SIN_LEN,,sin_len)],
1038 dnl ----------------------------
1039 dnl check sun_len of sockaddr_un
1040 dnl ----------------------------
1041 AC_MSG_CHECKING(whether struct sockaddr_un has a sun_len field)
1042 AC_TRY_COMPILE([#include <sys/types.h>
1044 ],[static struct sockaddr_un ac_i;int ac_j = sizeof (ac_i.sun_len);],
1046 AC_DEFINE(HAVE_SUN_LEN,,sun_len)],
1049 dnl -----------------------------------
1050 dnl check sin6_scope_id of sockaddr_in6
1051 dnl -----------------------------------
1052 if test "$zebra_cv_ipv6" = yes; then
1053 AC_MSG_CHECKING(whether struct sockaddr_in6 has a sin6_scope_id field)
1054 AC_TRY_COMPILE([#include <sys/types.h>
1055 #include <netinet/in.h>
1056 ],[static struct sockaddr_in6 ac_i;int ac_j = sizeof (ac_i.sin6_scope_id);],
1058 AC_DEFINE(HAVE_SIN6_SCOPE_ID,,scope id)],
1062 dnl ----------------------------
1063 dnl check socklen_t exist or not
1064 dnl ----------------------------
1065 AC_MSG_CHECKING(whther socklen_t is defined)
1066 AC_TRY_COMPILE([#include <sys/types.h>
1067 #include <sys/socket.h>
1068 #include <netinet/in.h>
1069 ],[socklen_t ac_x;],
1071 AC_DEFINE(HAVE_SOCKLEN_T,,socklen_t)],
1074 dnl ------------------------
1075 dnl check struct sockaddr_dl
1076 dnl ------------------------
1077 AC_MSG_CHECKING(whether struct sockaddr_dl exist)
1078 AC_EGREP_HEADER(sockaddr_dl,
1081 AC_DEFINE(HAVE_SOCKADDR_DL,,sockaddr_dl)],
1084 dnl --------------------------
1085 dnl check structure ifaliasreq
1086 dnl --------------------------
1087 AC_MSG_CHECKING(whether struct ifaliasreq exist)
1088 AC_EGREP_HEADER(ifaliasreq,
1091 AC_DEFINE(HAVE_IFALIASREQ,,ifaliasreq)],
1094 dnl ----------------------------
1095 dnl check structure in6_aliasreq
1096 dnl ----------------------------
1097 AC_MSG_CHECKING(whether struct in6_aliasreq exist)
1098 AC_EGREP_HEADER(in6_aliasreq,
1101 AC_DEFINE(HAVE_IN6_ALIASREQ,,in6_aliasreq)],
1104 dnl -----------------------------------
1105 dnl check ifra_lifetime of in6_aliasreq
1106 dnl -----------------------------------
1107 AC_MSG_CHECKING(whether in6_aliasreq.ifra_lifetime exist)
1108 AC_TRY_COMPILE([#include <sys/types.h>
1109 #include <netinet6/in6_var.h>
1110 ],[static struct if6_aliasreq ac_i;int ac_j = sizeof (ac_i.ifra_lifetime);],
1112 AC_DEFINE(HAVE_IFRA_LIFETIME,,Have in6_aliasreq.ifra_lifetime)],
1115 dnl ---------------------------
1116 dnl check structure rt_addrinfo
1117 dnl ---------------------------
1118 AC_MSG_CHECKING(whether struct rt_addrinfo exist)
1119 AC_EGREP_HEADER(rt_addrinfo,
1122 AC_DEFINE(HAVE_RT_ADDRINFO,,rt_addrinfo)],
1125 dnl --------------------------
1126 dnl check structure in_pktinfo
1127 dnl --------------------------
1128 AC_MSG_CHECKING(whether struct in_pktinfo exist)
1129 AC_TRY_COMPILE([#include <netinet/in.h>
1130 ],[struct in_pktinfo ac_x;],
1132 AC_DEFINE(HAVE_INPKTINFO,,in_pktinfo)],
1135 dnl ----------------------------------
1136 dnl check struct nd_opt_homeagent_info
1137 dnl ----------------------------------
1138 AC_MSG_CHECKING(whether struct nd_opt_homeagent_info exist)
1139 AC_EGREP_HEADER(nd_opt_homeagent_info,
1142 AC_DEFINE(HAVE_ND_OPT_HOMEAGENT_INFO,,nd_opt_homeagent_info)],
1145 dnl --------------------------------
1146 dnl check struct nd_opt_adv_interval
1147 dnl --------------------------------
1148 AC_MSG_CHECKING(whether struct nd_opt_adv_interval exist)
1149 AC_EGREP_HEADER(nd_opt_adv_interval,
1152 AC_DEFINE(HAVE_ND_OPT_ADV_INTERVAL,,nd_opt_adv_interval)],
1155 dnl ------------------------------------
1156 dnl check fields in nd_opt_adv_interval
1157 dnl ------------------------------------
1158 AC_MSG_CHECKING(whether nd_opt_ai_type field exist)
1159 AC_EGREP_HEADER(nd_opt_ai_type,
1162 AC_DEFINE(HAVE_ND_OPT_ADV_INTERVAL_AI_FIELDS,,nd_opt_ai_type)],
1165 dnl --------------------------------------
1166 dnl checking for getrusage struct and call
1167 dnl --------------------------------------
1168 AC_MSG_CHECKING(whether getrusage is available)
1169 AC_TRY_COMPILE([#include <sys/resource.h>
1170 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1172 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1175 dnl -------------------
1176 dnl capabilities checks
1177 dnl -------------------
1178 if test "${enable_capabilities}" != "no"; then
1179 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1180 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1182 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1183 quagga_ac_keepcaps="yes"],
1186 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1187 AC_CHECK_HEADERS(sys/capability.h)
1189 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1190 AC_CHECK_LIB(cap, cap_init,
1191 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1199 dnl -------------------
1200 dnl test for ucontext.h
1201 dnl -------------------
1202 AC_CHECK_HEADERS(ucontext.h)
1204 dnl ---------------------------
1205 dnl check for glibc 'backtrace'
1206 dnl ---------------------------
1207 if test "${glibc}" = "yes"; then
1208 AC_CHECK_HEADER(execinfo.h)
1210 if test x"${ac_cv_header_execinfo_h}" = x"yes"; then
1211 AC_CHECK_FUNC(backtrace,
1212 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)]
1219 CONFDATE=`date '+%Y%m%d'`
1222 dnl ------------------------------
1223 dnl set paths for state directory
1224 dnl ------------------------------
1225 if test "${prefix}" = "NONE"; then
1226 quagga_statedir_prefix="";
1228 quagga_statedir_prefix=${prefix}
1230 if test "${localstatedir}" = '${prefix}/var'; then
1231 AC_CACHE_CHECK(state directory,ac_statedir,
1232 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1233 ${quagga_statedir_prefix}/var/adm dnl
1234 ${quagga_statedir_prefix}/etc dnl
1240 test -d $QUAGGA_STATE_DIR && break
1242 quagga_statedir=$QUAGGA_STATE_DIR])
1244 quagga_statedir=${localstatedir}
1245 AC_MSG_CHECKING(directory to use for state file)
1246 AC_MSG_RESULT(${quagga_statedir})
1247 AC_SUBST(quagga_statedir)
1249 if test $quagga_statedir = "/dev/null"; then
1250 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1253 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1254 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1255 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1256 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1257 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1258 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1259 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1260 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1261 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1262 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1263 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1264 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1265 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1266 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1267 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1268 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1269 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1271 dnl -------------------------------
1272 dnl Quagga sources should always be
1273 dnl current wrt interfaces. Dont
1274 dnl allow deprecated interfaces to
1276 dnl -------------------------------
1277 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1279 dnl ---------------------------
1280 dnl Check htonl works correctly
1281 dnl ---------------------------
1282 AC_MSG_CHECKING(for working htonl)
1283 AC_CACHE_VAL(ac_cv_htonl_works, [
1284 AC_TRY_LINK([#ifdef HAVE_SYS_TYPES_H
1285 #include <sys/types.h>
1290 #ifdef HAVE_NETINET_IN_H
1291 #include <netinet/in.h>
1294 ac_cv_htonl_works=yes,
1295 ac_cv_htonl_works=no)])
1296 AC_MSG_RESULT($ac_cv_htonl_works)
1298 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1299 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1300 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1301 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
1306 isisd/topology/Makefile
1307 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1308 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1309 AC_CONFIG_FILES([solaris/Makefile])
1311 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1312 ## Hack, but working solution to avoid rebuilding of quagga.info.
1313 ## It's already in CVS until texinfo 4.7 is more common.
1314 AC_CONFIG_COMMANDS([info-time],[touch doc/quagga.info])
1318 Quagga configuration
1319 --------------------
1320 quagga version : ${PACKAGE_VERSION}
1321 host operationg system : ${host_os}
1322 source code location : ${srcdir}
1324 compiler flags : ${CFLAGS}
1325 includes : ${INCLUDES} ${SNMP_INCLUDES}
1326 linker flags : ${LDFLAGS} ${LIBS}
1327 state file directory : ${quagga_statedir}
1328 config file directory : `eval echo \`echo ${sysconfdir}\``
1329 example directory : `eval echo \`echo ${exampledir}\``
1330 user to run as : ${enable_user}
1331 group to run as : ${enable_group}
1332 group for vty sockets : ${enable_vty_group}
1333 config file mask : ${enable_configfile_mask}
1334 log file mask : ${enable_logfile_mask}
1336 The above user and group must have read/write access to the state file
1337 directory and to the config files in the config file directory.