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>
10 AC_INIT(Quagga, 0.99.17.6, [https://bugzilla.quagga.net])
11 AC_CONFIG_SRCDIR(lib/zebra.h)
12 AC_CONFIG_MACRO_DIR([m4])
14 dnl -----------------------------------
15 dnl Get hostname and other information.
16 dnl -----------------------------------
22 AM_CONFIG_HEADER(config.h)
24 AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
25 if test "x$GAWK" = "xnot-in-PATH" ; then
26 AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
27 BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
29 AC_ARG_VAR([GAWK],[GNU AWK])
31 dnl default is to match previous behavior
32 exampledir=${sysconfdir}
33 AC_ARG_ENABLE([exampledir],
34 AC_HELP_STRING([--enable-exampledir],
35 [specify alternate directory for examples]),
36 exampledir="$enableval",)
37 dnl XXX add --exampledir to autoconf standard directory list somehow
40 dnl default is to match previous behavior
43 AC_ARG_ENABLE([pkgsrcrcdir],
44 AC_HELP_STRING([--enable-pkgsrcrcdir],
45 [specify directory for rc.d scripts]),
46 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
47 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
55 [ --with-cflags Set CFLAGS for use in compilation.])
56 if test "x$with_cflags" != "x" ; then
57 CFLAGS="$with_cflags" ; cflags_specified=yes ;
58 elif test -n "$CFLAGS" ; then
59 cflags_specified=yes ;
62 dnl --------------------
63 dnl Check CC and friends
64 dnl --------------------
71 dnl autoconf 2.59 appears not to support AC_PROG_SED
73 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
75 dnl ------------------------------------------------------------------
76 dnl Intel compiler check. Although Intel tries really hard to make icc
77 dnl look like gcc, there are some differences. It's very verbose with
78 dnl -Wall and it doesn't support the individual -W options.
79 dnl ------------------------------------------------------------------
80 if test "x${GCC}" = "xyes" ; then
82 AC_MSG_CHECKING([whether we are using the Intel compiler])
83 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
84 [AC_MSG_RESULT([no])],
89 AC_MSG_CHECKING([whether we are using SunPro compiler])
90 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
91 [AC_MSG_RESULT([no])],
97 dnl ---------------------------------------------
98 dnl If CLFAGS doesn\'t exist set default value
99 dnl AC_PROG_CC will have set minimal default
100 dnl already, eg "-O2 -g" for gcc, "-g" for others
101 dnl (Wall is gcc specific... have to make sure
102 dnl gcc is being used before setting it)
104 dnl Intel icc 8.0 also sets __GNUC__,
105 dnl but doesn't support all these fancy -W options.
106 dnl Intel compiler warnings we ignore:
107 dnl 279: controlling expression is constant.
108 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
109 dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
111 dnl 981: operands are evaluated in unspecified order.
113 dnl Sun Studio 10 / SunPro 5.7 is also supported,
114 dnl so lets set some sane CFLAGS for it.
115 dnl ---------------------------------------------
117 AC_MSG_CHECKING([whether to set a default CFLAGS])
118 if test "x${cflags_specified}" = "x" ; then
121 CFLAGS="-Os -g -Wall -wd 279,869,981"
122 AC_MSG_RESULT([Intel default])
125 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
126 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
127 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
128 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
129 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
130 # TODO: conditionally addd -Wpacked if handled
131 AC_MSG_RESULT([gcc default])
134 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
135 AC_MSG_RESULT([SunPro default])
138 AC_MSG_RESULT([unknown compiler])
142 AC_MSG_RESULT([CFLAGS supplied by user])
151 AC_CHECK_TOOL(AR, ar)
153 dnl ---------------------------
154 dnl We, perhaps unfortunately,
155 dnl depend on GNU Make specific
157 dnl Give the user a warning if
159 dnl ---------------------------
160 AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
161 [quagga_cv_gnu_make=no
162 if ${MAKE-make} --version 2>/dev/null | \
163 grep '^GNU Make ' >/dev/null ; then
164 quagga_cv_gnu_make=yes;
169 dnl -----------------
170 dnl System extensions
171 dnl -----------------
179 dnl ----------------------
180 dnl Packages configuration
181 dnl ----------------------
183 [ --enable-vtysh include integrated vty shell for Quagga])
185 [ --disable-ipv6 turn off IPv6 related features and daemons])
187 [ --disable-doc do not build docs])
189 [ --disable-zebra do not build zebra daemon])
191 [ --disable-bgpd do not build bgpd])
193 [ --disable-ripd do not build ripd])
194 AC_ARG_ENABLE(ripngd,
195 [ --disable-ripngd do not build ripngd])
197 [ --disable-ospfd do not build ospfd])
198 AC_ARG_ENABLE(ospf6d,
199 [ --disable-ospf6d do not build ospf6d])
200 AC_ARG_ENABLE(watchquagga,
201 [ --disable-watchquagga do not build watchquagga])
203 [ --enable-isisd build isisd])
204 AC_ARG_ENABLE(solaris,
205 [ --enable-solaris build solaris])
206 AC_ARG_ENABLE(bgp-announce,
207 [ --disable-bgp-announce, turn off BGP route announcement])
208 AC_ARG_ENABLE(netlink,
209 [ --enable-netlink force to use Linux netlink interface])
210 AC_ARG_ENABLE(broken-aliases,
211 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
213 [ --without-crypto do not use libcrypto in SNMP])
215 [ --enable-snmp enable SNMP support])
217 [ --with-libpam use libpam for PAM support in vtysh])
218 AC_ARG_ENABLE(tcp-zebra,
219 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
220 AC_ARG_ENABLE(opaque-lsa,
221 [ --enable-opaque-lsa enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
222 AC_ARG_ENABLE(ospfapi,
223 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database,
224 (this is the default if --enable-opaque-lsa is not set)])
225 AC_ARG_ENABLE(ospfclient,
226 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
227 (this is the default if --disable-ospfapi is set)])
228 AC_ARG_ENABLE(ospf-te,
229 [ --enable-ospf-te enable Traffic Engineering Extension to OSPF])
230 AC_ARG_ENABLE(multipath,
231 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
233 AC_HELP_STRING([--enable-user=user], [user to run Quagga suite as (default quagga)]))
235 AC_HELP_STRING([--enable-group=group], [group to run Quagga suite as (default quagga)]))
236 AC_ARG_ENABLE(vty_group,
237 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
238 AC_ARG_ENABLE(configfile_mask,
239 [ --enable-configfile-mask=ARG set mask for config files])
240 AC_ARG_ENABLE(logfile_mask,
241 [ --enable-logfile-mask=ARG set mask for log files])
244 [ --disable-rtadv disable IPV6 router advertisement feature])
246 [ --enable-irdp enable IRDP server support in zebra])
247 AC_ARG_ENABLE(isis_topology,
248 [ --enable-isis-topology enable IS-IS topology generator])
249 AC_ARG_ENABLE(capabilities,
250 [ --disable-capabilities disable using POSIX capabilities])
251 AC_ARG_ENABLE(gcc_ultra_verbose,
252 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
253 AC_ARG_ENABLE(linux24_tcp_md5,
254 [ --enable-linux24-tcp-md5 enable support for old, Linux-2.4 RFC2385 patch])
255 AC_ARG_ENABLE(gcc-rdynamic,
256 [ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
257 AC_ARG_ENABLE(time-check,
258 [ --disable-time-check disable slow thread warning messages])
259 AC_ARG_ENABLE(pcreposix,
260 [ --enable-pcreposix enable using PCRE Posix libs for regex functions])
262 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
263 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
264 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
265 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
266 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
269 if test x"${enable_gcc_rdynamic}" = x"yes" ; then
270 LDFLAGS="${LDFLAGS} -rdynamic"
273 if test x"${enable_time_check}" != x"no" ; then
274 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
275 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
277 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
281 if test "${enable_broken_aliases}" = "yes"; then
282 if test "${enable_netlink}" = "yes"
284 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
286 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
290 if test "${enable_tcp_zebra}" = "yes"; then
291 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
294 if test "${enable_opaque_lsa}" = "yes"; then
295 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
298 if test "${enable_ospf_te}" = "yes"; then
299 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
300 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
303 if test "${enable_linux24_tcp_md5}" = "yes"; then
304 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
307 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
308 if test "${enable_rtadv}" != "no"; then
310 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
315 if test "${enable_irdp}" = "yes"; then
316 AC_DEFINE(HAVE_IRDP,, IRDP )
319 if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
320 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
321 ISIS_TOPOLOGY_INCLUDES="-I./topology"
322 ISIS_TOPOLOGY_DIR="topology"
323 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
326 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
327 AC_SUBST(ISIS_TOPOLOGY_DIR)
328 AC_SUBST(ISIS_TOPOLOGY_LIB)
330 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
332 elif test "${enable_user}" = "no"; then
336 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
337 enable_group="quagga"
338 elif test "${enable_group}" = "no"; then
342 if test x"${enable_vty_group}" = x"yes" ; then
343 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
344 elif test x"${enable_vty_group}" != x""; then
345 if test x"${enable_vty_group}" != x"no"; then
346 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
349 AC_SUBST([enable_user])
350 AC_SUBST([enable_group])
351 AC_SUBST([enable_vty_group])
352 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
353 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
355 enable_configfile_mask=${enable_configfile_mask:-0600}
356 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
358 enable_logfile_mask=${enable_logfile_mask:-0600}
359 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
363 case "${enable_multipath}" in
365 MULTIPATH_NUM="${enable_multipath}"
370 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
374 AC_SUBST(MULTIPATH_NUM)
376 dnl ------------------------------------
377 dnl Check C keywords and standard types
378 dnl ------------------------------------
393 dnl -------------------------
394 dnl Check other header files.
395 dnl -------------------------
396 AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
397 sys/types.h linux/version.h netdb.h asm/types.h \
398 sys/param.h limits.h signal.h \
399 sys/socket.h netinet/in.h time.h sys/time.h])
401 dnl Utility macro to avoid retyping includes all the time
402 m4_define([QUAGGA_INCLUDES],
405 #define __EXTENSIONS__
417 # include <sys/types.h>
419 /* sys/conf.h depends on param.h on FBSD at least */
421 # include <sys/param.h>
423 /* Required for MAXSIG */
427 #if HAVE_SYS_SOCKET_H
428 # include <sys/socket.h>
430 #if HAVE_NETINET_IN_H
431 # include <netinet/in.h>
433 #ifdef TIME_WITH_SYS_TIME
434 # include <sys/time.h>
437 # ifdef HAVE_SYS_TIME_H
438 # include <sys/time.h>
442 #endif /* TIME_WITH_SYS_TIME */
445 dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
446 dnl round below execution begins, otherwise it doesn't properly detect
447 dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
448 dnl on FreeBSD (BZ#408).
450 AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
452 m4_define([QUAGGA_INCLUDES],
459 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
460 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
461 dnl an additional round for it.
463 AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
465 m4_define([QUAGGA_INCLUDES],
467 [#if HAVE_NET_IF_VAR_H
468 # include <net/if_var.h>
472 AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
473 net/if_dl.h net/netopt.h net/route.h \
474 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
475 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
476 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
477 [], [], QUAGGA_INCLUDES)
479 AC_CHECK_HEADERS([ucontext.h], [], [],
482 #endif /* __USE_GNU */
486 m4_define([QUAGGA_INCLUDES],
491 #if HAVE_NETINET_IN_SYSTM_H
492 # include <netinet/in_systm.h>
494 #if HAVE_NETINET_IN_VAR_H
495 # include <netinet/in_var.h>
498 # include <net/if_dl.h>
500 #if HAVE_NET_NETOPT_H
501 # include <net/netopt.h>
504 # include <net/route.h>
507 # include <inet/nd.h>
510 # include <arpa/inet.h>
512 /* Required for IDRP */
513 #if HAVE_NETINET_IP_ICMP_H
514 # include <netinet/ip_icmp.h>
518 dnl V6 headers are checked below, after we check for v6
520 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
522 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
524 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
525 AC_DEFINE(SUNOS_5, 1, SunOS 5)
526 AC_CHECK_LIB(xnet, main)
530 | [*-sunos5.1[0-9]] \
531 | [*-sunos5.1[0-9].[0-9]] \
532 | [*-solaris2.[8-9]] \
533 | [*-solaris2.1[0-9]] \
534 | [*-solaris2.1[0-9].[0-9]])
536 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
537 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
538 AC_CHECK_LIB(socket, main)
539 AC_CHECK_LIB(nsl, main)
540 AC_CHECK_LIB(umem, main)
541 AC_CHECK_FUNCS([printstack],
542 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
543 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
547 *-sunos5* | *-solaris2*)
548 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
549 AC_CHECK_LIB(socket, main)
550 AC_CHECK_LIB(nsl, main)
555 AC_DEFINE(GNU_LINUX,,GNU Linux)
558 AC_CHECK_LIB(nsl, gethostbyname)
559 AC_CHECK_LIB(socket, socket)
563 AC_DEFINE(OPEN_BSD,,OpenBSD)
567 OTHER_METHOD="mtu_kvm.o"
568 AC_CHECK_LIB(kvm, main)
572 AC_DEFINE(IRIX_65,,IRIX 6.5)
578 dnl ---------------------
579 dnl Integrated VTY option
580 dnl ---------------------
581 case "${enable_vtysh}" in
582 "yes") VTYSH="vtysh";
583 AC_DEFINE(VTYSH,,VTY shell)
584 AC_PATH_PROG(PERL, perl)
585 dnl Vtysh uses libreadline, which looks for termcap functions at
586 dnl configure time. We follow readlines search order.
587 dnl The required procedures are in libtermcap on NetBSD, in
588 dnl [TODO] on Linux, and in [TODO] on Solaris.
589 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
590 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
591 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
592 [AC_CHECK_LIB(ncurses, tputs,
593 LIBREADLINE="$LIBREADLINE -lncurses")]
597 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
599 if test $ac_cv_lib_readline_main = no; then
600 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
602 AC_CHECK_HEADER(readline/history.h)
603 if test $ac_cv_header_readline_history_h = no;then
604 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
606 AC_CHECK_LIB(readline, rl_completion_matches,
607 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
608 if test $ac_cv_lib_readline_rl_completion_matches = no; then
609 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
615 AC_SUBST(LIBREADLINE)
620 dnl Quagga detects the PAM library it is built against by checking for a
621 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
622 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
623 dnl openpam.h doesn't do that, although depends on the header too. Hence a
624 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
627 if test "$with_libpam" = "yes"; then
628 AC_CHECK_HEADER([security/pam_misc.h],
629 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
630 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
631 pam_conv_func="misc_conv"
634 AC_CHECK_HEADER([security/openpam.h],
635 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
636 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
637 pam_conv_func="openpam_ttyconv"
639 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
640 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
641 AC_MSG_WARN([*** pam support will not be built ***])
646 if test "$with_libpam" = "yes"; then
647 dnl took this test from proftpds configure.in and suited to our needs
648 dnl -------------------------------------------------------------------------
650 dnl This next check looks funky due to a linker problem with some versions
651 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
652 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
653 dnl with RedHat 6.2 and Debian 2.2 or better.
654 AC_CHECK_LIB(pam, pam_start,
655 [AC_CHECK_LIB(pam, $pam_conv_func,
656 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
658 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
659 LIBPAM="-lpam -lpam_misc"]
663 [AC_CHECK_LIB(pam, pam_end,
664 [AC_CHECK_LIB(pam, $pam_conv_func,
665 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
666 LIBPAM="-lpam -ldl"],
667 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
668 LIBPAM="-lpam -ldl -lpam_misc"]
670 ],AC_MSG_WARN([*** pam support will not be built ***]),
677 dnl -------------------------------
678 dnl Endian-ness check
679 dnl -------------------------------
682 dnl -------------------------------
683 dnl check the size in byte of the C
684 dnl -------------------------------
685 dnl AC_CHECK_SIZEOF(char)
686 dnl AC_CHECK_SIZEOF(int)
687 dnl AC_CHECK_SIZEOF(short)
688 dnl AC_CHECK_SIZEOF(long)
690 dnl ----------------------------
691 dnl check existance of functions
692 dnl ----------------------------
700 AC_FUNC_SELECT_ARGTYPES
702 dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
703 dnl can lead to strange side effects. So we just check for strnlen
704 dnl directly, see below.
705 dnl AC_FUNC_STRNLENdnl
708 dnl -------------------------------
709 dnl bgpd needs pow() and hence libm
710 dnl -------------------------------
712 AC_CHECK_HEADER([math.h],
713 [AC_CHECK_LIB([m], [pow],
716 AC_DEFINE(HAVE_LIBM,, Have libm)
717 AC_CHECK_FUNCS(pow,[],[LIBM=""])
720 if test x"$LIBM" = x ; then
721 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
729 AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
730 inet_ntoa inet_aton strnlen \
731 memchr memmove memset select socket \
732 strcasecmp strchr strcspn strdup strerror \
733 strncasecmp strndup strrchr strspn strstr \
734 strtol strtoul strlcat strlcpy \
735 daemon snprintf vsnprintf \
736 if_nametoindex if_indextoname getifaddrs \
739 AC_CHECK_FUNCS(setproctitle, ,
740 [AC_CHECK_LIB(util, setproctitle,
742 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
748 dnl ------------------------------------
749 dnl Determine routing get and set method
750 dnl ------------------------------------
751 AC_MSG_CHECKING(zebra between kernel interface method)
752 if test x"$opsys" = x"gnu-linux"; then
753 if test "${enable_netlink}" = "yes";then
754 AC_MSG_RESULT(netlink)
755 RT_METHOD=rt_netlink.o
756 AC_DEFINE(HAVE_NETLINK,,netlink)
758 elif test "${enable_netlink}" = "no"; then
763 AC_MSG_RESULT(netlink)
764 RT_METHOD=rt_netlink.o
765 AC_DEFINE(HAVE_NETLINK,,netlink)
768 elif test x"$opsys" = x"sol2-6";then
769 AC_MSG_RESULT(Route socket)
770 KERNEL_METHOD="kernel_socket.o"
771 RT_METHOD="rt_socket.o"
772 elif test x"$opsys" = x"sol8";then
773 AC_MSG_RESULT(Route socket)
774 KERNEL_METHOD="kernel_socket.o"
775 RT_METHOD="rt_socket.o"
776 elif test "$opsys" = "irix" ; then
777 AC_MSG_RESULT(Route socket)
778 KERNEL_METHOD="kernel_socket.o"
779 RT_METHOD="rt_socket.o"
781 AC_TRY_RUN([#include <errno.h>
782 #include <sys/types.h>
783 #include <sys/socket.h>
789 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
790 if (ac_sock < 0 && errno == EINVAL)
794 [KERNEL_METHOD=kernel_socket.o
795 RT_METHOD=rt_socket.o
796 AC_MSG_RESULT(socket)],
797 [RT_METHOD=rt_ioctl.o
798 AC_MSG_RESULT(ioctl)],
799 [KERNEL_METHOD=kernel_socket.o
800 RT_METHOD=rt_socket.o
801 AC_MSG_RESULT(socket)])
804 AC_SUBST(KERNEL_METHOD)
805 AC_SUBST(OTHER_METHOD)
807 dnl --------------------------
808 dnl Determine IS-IS I/O method
809 dnl --------------------------
810 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
811 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
812 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
813 AC_CHECK_HEADER(net/bpf.h)
814 AC_CHECK_HEADER(sys/dlpi.h)
815 AC_MSG_CHECKING(zebra IS-IS I/O method)
816 if test x"$opsys" = x"gnu-linux"; then
817 AC_MSG_RESULT(pfpacket)
818 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
819 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
821 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
823 if test $ac_cv_header_net_bpf_h = no; then
824 if test $ac_cv_header_sys_dlpi_h = no; then
826 AC_MSG_WARN([*** IS-IS support will not be built ***])
831 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
834 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
837 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
839 dnl ------------------------------------
840 dnl check for broken CMSG_FIRSTHDR macro
841 dnl ------------------------------------
842 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
843 AC_RUN_IFELSE([AC_LANG_SOURCE([[
846 #define __EXTENSIONS__
851 #ifdef HAVE_SYS_TYPES_H
852 #include <sys/types.h>
854 #ifdef HAVE_SYS_SOCKET_H
855 #include <sys/socket.h>
863 msg.msg_control = buf;
864 msg.msg_controllen = 0;
866 if (CMSG_FIRSTHDR(&msg) != NULL)
869 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
870 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
872 dnl ------------------------------
873 dnl check kernel route read method
874 dnl ------------------------------
875 AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
876 [if test "x$netlink" = xyes; then
877 quagga_cv_rtread_method="netlink"
879 for quagga_cv_rtread_method in /proc/net/route /dev/ip /dev/null;
881 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
883 case $quagga_cv_rtread_method in
884 "/proc/net/route") quagga_cv_rtread_method="proc";;
887 *-freebsd*) quagga_cv_rtread_method="sysctl";;
888 *) quagga_cv_rtread_method="getmsg";;
891 quagga_cv_rtread_method="sysctl";;
894 RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
895 AC_SUBST(RTREAD_METHOD)
897 dnl -----------------------------
898 dnl check interface lookup method
899 dnl -----------------------------
901 AC_MSG_CHECKING(interface looking up method)
902 if test "$netlink" = yes; then
903 AC_MSG_RESULT(netlink)
904 IF_METHOD=if_netlink.o
905 elif test "$opsys" = "sol2-6";then
906 AC_MSG_RESULT(Solaris GIF)
908 elif test "$opsys" = "sol8";then
909 AC_MSG_RESULT(Solaris GLIF)
910 IF_METHOD=if_ioctl_solaris.o
911 IOCTL_METHOD=ioctl_solaris.o
912 elif test "$opsys" = "irix" ; then
915 elif test "$opsys" = "openbsd";then
916 AC_MSG_RESULT(openbsd)
918 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
919 AC_MSG_RESULT(sysctl)
920 IF_METHOD=if_sysctl.o
921 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
927 AC_SUBST(IOCTL_METHOD)
929 dnl ---------------------------------------------------------------
930 dnl figure out how to specify an interface in multicast sockets API
931 dnl ---------------------------------------------------------------
932 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
934 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
935 AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
936 #include <sys/param.h>
937 #endif],[#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000)
940 #error No support for BSD struct ip_mreq hack detected
941 #endif],[AC_MSG_RESULT(yes)
942 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
945 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
947 #include <sys/types.h>
948 #include <netinet/in.h>
949 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
950 ], [AC_MSG_RESULT(yes)
951 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
954 dnl ---------------------------------------------------------------
955 dnl figure out how to check link-state
956 dnl ---------------------------------------------------------------
957 AC_CHECK_HEADER([net/if.h],
958 [AC_CHECK_HEADER( [net/if_media.h],
959 [m4_define([LINK_DETECT_INCLUDES],
961 [#include <net/if_media.h>
963 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
964 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
965 [], LINK_DETECT_INCLUDES)],
968 [], QUAGGA_INCLUDES )
970 dnl ------------------------
971 dnl TCP_MD5SIG socket option
972 dnl ------------------------
974 AC_CHECK_HEADER([netinet/tcp.h],
975 [m4_define([MD5_INCLUDES],
977 [#include <netinet/tcp.h>
979 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
982 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
983 AC_CHECK_HEADER([linux/tcp.h],
984 [m4_define([MD5_INCLUDES],
986 [#include <linux/tcp.h>
988 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
991 dnl -----------------------
992 dnl check proc file system.
993 dnl -----------------------
994 if test "$netlink" != yes; then
995 if test -r /proc/net/dev; then
996 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
999 if test -r /proc/net/if_inet6; then
1000 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
1006 dnl -----------------------------
1007 dnl check ipforward detect method
1008 dnl -----------------------------
1009 AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
1010 [if test x$cross_compiling = xyes; then
1011 if test x"$opsys" = x"gnu-linux"; then
1012 quagga_cv_ipforward_method=/proc/net/snmp
1014 quagga_cv_ipforward_method=/dev/ip
1017 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1019 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1022 case $quagga_cv_ipforward_method in
1023 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
1026 *-nec-sysv4*) quagga_cv_ipforward_method="ews";;
1027 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1028 *) quagga_cv_ipforward_method="solaris";;
1030 *) quagga_cv_ipforward_method="sysctl";;
1032 IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
1035 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
1040 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1041 if test "${enable_ipv6}" = "no"; then
1042 AC_MSG_RESULT(disabled)
1047 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1049 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1050 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1054 AC_MSG_RESULT(INRIA IPv6)
1058 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1060 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1061 AC_DEFINE(KAME,1,KAME IPv6)
1064 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1065 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1068 dnl -------------------------
1070 dnl default host check
1071 dnl It is not used by Kheops
1072 dnl -------------------------
1073 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1075 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1076 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1077 AC_DEFINE(KAME,1,KAME IPv6 stack)
1080 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1081 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1083 AC_MSG_RESULT(MUSICA)
1087 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1089 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1090 AC_DEFINE(NRL,1,NRL)
1093 if test x"$opsys" = x"bsdi";then
1094 AC_DEFINE(BSDI_NRL,,BSDI)
1095 AC_MSG_RESULT(BSDI_NRL)
1099 dnl ------------------------------------
1100 dnl Solaris 9, 10 and potentially higher
1101 dnl ------------------------------------
1102 elif test x"$opsys" = x"sol8"; then
1104 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1105 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1108 AC_MSG_RESULT(Solaris IPv6)
1112 elif test "${enable_ipv6}" = "yes"; then
1114 #include <linux/version.h>
1115 /* 2.1.128 or later */
1116 #if LINUX_VERSION_CODE >= 0x020180
1120 zebra_cv_linux_ipv6=yes
1121 AC_MSG_RESULT(Linux IPv6)])
1123 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1126 zebra_cv_linux_ipv6=yes
1127 AC_MSG_RESULT(Linux IPv6)
1131 if test "$zebra_cv_linux_ipv6" = "yes";then
1132 AC_MSG_CHECKING(whether libc has IPv6 support)
1133 AC_TRY_LINK([#include <netinet/in.h>
1134 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1137 zebra_cv_linux_ipv6=yes],
1140 zebra_cv_linux_ipv6=no])
1143 if test "$zebra_cv_linux_ipv6" = "yes";then
1144 AC_MSG_CHECKING(for GNU libc >= 2.1)
1145 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1147 #include <features.h>
1148 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1152 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1153 AC_MSG_RESULT(yes)],
1158 if test "$glibc" != "yes"; then
1159 INCLUDES="-I/usr/inet6/include"
1160 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1161 LIB_IPV6="-L/usr/inet6/lib -linet6"
1166 dnl -----------------------
1167 dnl Set IPv6 related values
1168 dnl -----------------------
1169 LIBS="$LIB_IPV6 $LIBS"
1172 if test x"$RIPNGD" = x""; then
1173 AC_MSG_RESULT(IPv4 only)
1177 dnl ------------------
1178 dnl IPv6 header checks
1179 dnl ------------------
1180 if test "x${zebra_cv_ipv6}" = "xyes"; then
1181 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
1182 netinet6/in6_var.h netinet6/nd6.h], [], [],
1186 m4_define([QUAGGA_INCLUDES],dnl
1188 [#if HAVE_NETINET6_IN6_H
1189 #include <netinet6/in6.h>
1191 #if HAVE_NETINET_IN6_VAR_H
1192 #include <netinet/in6_var.h>
1194 #if HAVE_NETINET_ICMP6_H
1195 # include <netinet/icmp6.h>
1197 #if HAVE_NETINET6_IN6_VAR_H
1198 # include <netinet6/in6_var.h>
1200 #if HAVE_NETINET6_ND6_H
1201 # include <netinet6/nd6.h>
1205 dnl disable doc check
1206 if test "${enable_doc}" = "no";then
1212 dnl --------------------
1213 dnl Daemon disable check
1214 dnl --------------------
1215 if test "${enable_zebra}" = "no";then
1221 if test "${enable_bgpd}" = "no";then
1227 if test "${enable_ripd}" = "no";then
1233 if test "${enable_ospfd}" = "no";then
1239 if test "${enable_watchquagga}" = "no";then
1242 WATCHQUAGGA="watchquagga"
1246 if test "${enable_opaque_lsa}" = "yes"; then
1247 if test "${enable_ospfapi}" != "no";then
1248 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1250 if test "${enable_ospfclient}" != "no";then
1251 OSPFCLIENT="ospfclient"
1257 case "${enable_ripngd}" in
1258 "yes") RIPNGD="ripngd";;
1263 case "${enable_ospf6d}" in
1264 "yes") OSPF6D="ospf6d";;
1269 case "${enable_isisd}" in
1270 "yes") ISISD="isisd";;
1275 # XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1276 case "${enable_solaris}" in
1277 "yes") SOLARIS="solaris";;
1282 if test "${enable_bgp_announce}" = "no";then
1283 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1285 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1295 AC_SUBST(WATCHQUAGGA)
1301 AC_SUBST(OSPFCLIENT)
1303 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1304 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1305 AC_CHECK_LIB(crypt, crypt)
1306 AC_CHECK_LIB(resolv, res_init)
1308 dnl ---------------------------------------------------
1309 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1310 dnl ---------------------------------------------------
1311 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1312 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1313 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
1315 dnl ---------------------------
1316 dnl check system has PCRE regexp
1317 dnl ---------------------------
1318 if test "x$enable_pcreposix" = "xyes"; then
1319 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1320 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1323 if test "x$enable_pcreposix" != "xyes"; then
1324 dnl ---------------------------
1325 dnl check system has GNU regexp
1326 dnl ---------------------------
1327 AC_MSG_CHECKING(whether system has GNU regex)
1328 AC_CHECK_LIB(c, regexec,
1329 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1331 [LIB_REGEX="regex.o"])
1333 AC_SUBST(HAVE_LIBPCREPOSIX)
1336 dnl ------------------
1337 dnl check Net-SNMP library
1338 dnl ------------------
1339 if test "${enable_snmp}" = "yes"; then
1340 if test "$with_crypto" != "no"; then
1341 LIBS="${LIBS} -lcrypto";
1343 AC_CHECK_LIB(netsnmp, asn_parse_int,
1344 [AC_DEFINE(HAVE_NETSNMP,,Net SNMP)
1345 AC_DEFINE(HAVE_SNMP,,SNMP)
1346 LIBS="${LIBS} -lnetsnmp"],
1347 [AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])])
1349 AC_CHECK_HEADER([net-snmp/net-snmp-config.h],
1351 [AC_MSG_ERROR([--enable-snmp given, but cannot find net-snmp-config.h])],
1353 AC_SUBST(SNMP_INCLUDES)
1356 dnl ---------------------------
1357 dnl sockaddr and netinet checks
1358 dnl ---------------------------
1359 AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1360 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1362 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1363 struct nd_opt_adv_interval, struct rt_addrinfo,
1364 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1365 [], [], QUAGGA_INCLUDES)
1367 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1368 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1369 struct sockaddr_in6.sin6_scope_id,
1370 struct if6_aliasreq.ifra_lifetime,
1371 struct nd_opt_adv_interval.nd_opt_ai_type],
1372 [], [], QUAGGA_INCLUDES)
1374 dnl ---------------------------
1375 dnl IRDP/pktinfo/icmphdr checks
1376 dnl ---------------------------
1377 AC_CHECK_TYPES([struct in_pktinfo],
1378 [AC_CHECK_TYPES([struct icmphdr],
1379 [if test "${enable_irdp}" != "no"; then
1380 AC_DEFINE(HAVE_IRDP,, IRDP)
1382 [if test "${enable_irdp}" = "yes"; then
1383 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1384 fi], [QUAGGA_INCLUDES])],
1385 [if test "${enable_irdp}" = "yes"; then
1386 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1387 fi], [QUAGGA_INCLUDES])
1389 dnl --------------------------------------
1390 dnl checking for getrusage struct and call
1391 dnl --------------------------------------
1392 AC_MSG_CHECKING(whether getrusage is available)
1393 AC_TRY_COMPILE([#include <sys/resource.h>
1394 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1396 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1399 dnl --------------------------------------
1400 dnl checking for clock_time monotonic struct and call
1401 dnl --------------------------------------
1402 AC_CHECK_DECL(CLOCK_MONOTONIC,
1403 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1404 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1405 ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
1407 dnl -------------------
1408 dnl capabilities checks
1409 dnl -------------------
1410 if test "${enable_capabilities}" != "no"; then
1411 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1412 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1414 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1415 quagga_ac_keepcaps="yes"],
1418 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1419 AC_CHECK_HEADERS(sys/capability.h)
1421 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1422 AC_CHECK_LIB(cap, cap_init,
1423 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1425 quagga_ac_lcaps="yes"]
1428 AC_CHECK_HEADERS(priv.h,
1429 [AC_MSG_CHECKING(Solaris style privileges are available)
1430 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1432 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1433 quagga_ac_scaps="yes"],
1439 if test x"${quagga_ac_scaps}" = x"yes" \
1440 -o x"${quagga_ac_lcaps}" = x"yes"; then
1441 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1446 dnl ---------------------------
1447 dnl check for glibc 'backtrace'
1448 dnl ---------------------------
1449 AC_CHECK_HEADER([execinfo.h],
1450 [AC_CHECK_FUNC([backtrace],
1451 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1452 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1456 dnl -----------------------------------------
1457 dnl check for malloc mallinfo struct and call
1458 dnl this must try and link using LIBS, in
1459 dnl order to check no alternative allocator
1460 dnl has been specified, which might not provide
1461 dnl mallinfo, e.g. such as Umem on Solaris.
1462 dnl -----------------------------------------
1463 AC_CHECK_HEADER([malloc.h],
1464 [AC_MSG_CHECKING(whether mallinfo is available)
1465 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1466 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1468 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1471 ], [], QUAGGA_INCLUDES)
1476 CONFDATE=`date '+%Y%m%d'`
1479 dnl Conditionally enable PIE support for GNU toolchains.
1480 AC_ARG_ENABLE(pie, AS_HELP_STRING([--disable-pie], [Do not build tools as a Position Independent Executables]))
1481 if test "$enable_pie" != "no"; then
1482 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1484 save_LDFLAGS=$LDFLAGS
1485 CFLAGS="$CFLAGS -fPIE"
1486 LDFLAGS="$LDFLAGS -pie"
1487 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1488 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1491 LDFLAGS=$save_LDFLAGS
1493 if test "$ap_cv_cc_pie" = "yes"; then
1502 dnl ------------------------------
1503 dnl set paths for state directory
1504 dnl ------------------------------
1505 AC_MSG_CHECKING(directory to use for state file)
1506 if test "${prefix}" = "NONE"; then
1507 quagga_statedir_prefix="";
1509 quagga_statedir_prefix=${prefix}
1511 if test "${localstatedir}" = '${prefix}/var'; then
1512 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1513 ${quagga_statedir_prefix}/var/adm dnl
1514 ${quagga_statedir_prefix}/etc dnl
1520 test -d $QUAGGA_STATE_DIR && break
1522 quagga_statedir=$QUAGGA_STATE_DIR
1524 quagga_statedir=${localstatedir}
1526 if test $quagga_statedir = "/dev/null"; then
1527 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1529 AC_MSG_RESULT(${quagga_statedir})
1530 AC_SUBST(quagga_statedir)
1532 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1533 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1534 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1535 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1536 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1537 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1538 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1539 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1540 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1541 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1542 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1543 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1544 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1545 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1546 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1547 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1548 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1550 dnl -------------------------------
1551 dnl Quagga sources should always be
1552 dnl current wrt interfaces. Dont
1553 dnl allow deprecated interfaces to
1555 dnl -------------------------------
1556 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1558 dnl ---------------------------
1559 dnl Check htonl works correctly
1560 dnl ---------------------------
1561 AC_MSG_CHECKING(for working htonl)
1562 AC_CACHE_VAL(ac_cv_htonl_works,
1563 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1564 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1567 AC_MSG_RESULT($ac_cv_htonl_works)
1569 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1570 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1571 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1572 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
1577 isisd/topology/Makefile
1578 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1579 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1580 AC_CONFIG_FILES([solaris/Makefile])
1582 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1583 ## Hack, but working solution to avoid rebuilding of quagga.info.
1584 ## It's already in CVS until texinfo 4.7 is more common.
1588 Quagga configuration
1589 --------------------
1590 quagga version : ${PACKAGE_VERSION}
1591 host operating system : ${host_os}
1592 source code location : ${srcdir}
1594 compiler flags : ${CFLAGS}
1596 includes : ${INCLUDES} ${SNMP_INCLUDES}
1597 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1598 state file directory : ${quagga_statedir}
1599 config file directory : `eval echo \`echo ${sysconfdir}\``
1600 example directory : `eval echo \`echo ${exampledir}\``
1601 user to run as : ${enable_user}
1602 group to run as : ${enable_group}
1603 group for vty sockets : ${enable_vty_group}
1604 config file mask : ${enable_configfile_mask}
1605 log file mask : ${enable_logfile_mask}
1607 The above user and group must have read/write access to the state file
1608 directory and to the config files in the config file directory."
1610 if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1611 Warning: The ${MAKE-make} programme detected, either in your path or
1612 via the MAKE variable, is not GNU Make. GNU make may be installed as
1613 gmake on some systems. and is required to complete a build of Quagga