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>
11 AC_INIT(Quagga, 0.99.19, [https://bugzilla.quagga.net])
12 AC_CONFIG_SRCDIR(lib/zebra.h)
13 AC_CONFIG_MACRO_DIR([m4])
15 dnl -----------------------------------
16 dnl Get hostname and other information.
17 dnl -----------------------------------
23 AM_CONFIG_HEADER(config.h)
25 AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
26 if test "x$GAWK" = "xnot-in-PATH" ; then
27 AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
28 BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
30 AC_ARG_VAR([GAWK],[GNU AWK])
32 dnl default is to match previous behavior
33 exampledir=${sysconfdir}
34 AC_ARG_ENABLE([exampledir],
35 AC_HELP_STRING([--enable-exampledir],
36 [specify alternate directory for examples]),
37 exampledir="$enableval",)
38 dnl XXX add --exampledir to autoconf standard directory list somehow
41 dnl default is to match previous behavior
44 AC_ARG_ENABLE([pkgsrcrcdir],
45 AC_HELP_STRING([--enable-pkgsrcrcdir],
46 [specify directory for rc.d scripts]),
47 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
48 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
56 [ --with-cflags Set CFLAGS for use in compilation.])
57 if test "x$with_cflags" != "x" ; then
58 CFLAGS="$with_cflags" ; cflags_specified=yes ;
59 elif test -n "$CFLAGS" ; then
60 cflags_specified=yes ;
63 dnl --------------------
64 dnl Check CC and friends
65 dnl --------------------
72 dnl autoconf 2.59 appears not to support AC_PROG_SED
74 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
76 dnl ------------------------------------------------------------------
77 dnl Intel compiler check. Although Intel tries really hard to make icc
78 dnl look like gcc, there are some differences. It's very verbose with
79 dnl -Wall and it doesn't support the individual -W options.
80 dnl ------------------------------------------------------------------
81 if test "x${GCC}" = "xyes" ; then
83 AC_MSG_CHECKING([whether we are using the Intel compiler])
84 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
85 [AC_MSG_RESULT([no])],
90 AC_MSG_CHECKING([whether we are using SunPro compiler])
91 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
92 [AC_MSG_RESULT([no])],
98 dnl ---------------------------------------------
99 dnl If CLFAGS doesn\'t exist set default value
100 dnl AC_PROG_CC will have set minimal default
101 dnl already, eg "-O2 -g" for gcc, "-g" for others
102 dnl (Wall is gcc specific... have to make sure
103 dnl gcc is being used before setting it)
105 dnl Intel icc 8.0 also sets __GNUC__,
106 dnl but doesn't support all these fancy -W options.
107 dnl Intel compiler warnings we ignore:
108 dnl 279: controlling expression is constant.
109 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
110 dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
112 dnl 981: operands are evaluated in unspecified order.
114 dnl Sun Studio 10 / SunPro 5.7 is also supported,
115 dnl so lets set some sane CFLAGS for it.
116 dnl ---------------------------------------------
118 AC_MSG_CHECKING([whether to set a default CFLAGS])
119 if test "x${cflags_specified}" = "x" ; then
122 CFLAGS="-Os -g -Wall -wd 279,869,981"
123 AC_MSG_RESULT([Intel default])
126 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
127 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
128 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
129 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
130 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
131 # TODO: conditionally addd -Wpacked if handled
132 AC_MSG_RESULT([gcc default])
135 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
136 AC_MSG_RESULT([SunPro default])
139 AC_MSG_RESULT([unknown compiler])
143 AC_MSG_RESULT([CFLAGS supplied by user])
152 AC_CHECK_TOOL(AR, ar)
154 dnl ---------------------------
155 dnl We, perhaps unfortunately,
156 dnl depend on GNU Make specific
158 dnl Give the user a warning if
160 dnl ---------------------------
161 AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
162 [quagga_cv_gnu_make=no
163 if ${MAKE-make} --version 2>/dev/null | \
164 grep '^GNU Make ' >/dev/null ; then
165 quagga_cv_gnu_make=yes;
170 dnl -----------------
171 dnl System extensions
172 dnl -----------------
180 dnl ----------------------
181 dnl Packages configuration
182 dnl ----------------------
184 [ --enable-vtysh include integrated vty shell for Quagga])
186 [ --disable-ipv6 turn off IPv6 related features and daemons])
188 [ --disable-doc do not build docs])
190 [ --disable-zebra do not build zebra daemon])
192 [ --disable-bgpd do not build bgpd])
194 [ --disable-ripd do not build ripd])
195 AC_ARG_ENABLE(ripngd,
196 [ --disable-ripngd do not build ripngd])
198 [ --disable-ospfd do not build ospfd])
199 AC_ARG_ENABLE(ospf6d,
200 [ --disable-ospf6d do not build ospf6d])
201 AC_ARG_ENABLE(watchquagga,
202 [ --disable-watchquagga do not build watchquagga])
204 [ --enable-isisd build isisd])
205 AC_ARG_ENABLE(solaris,
206 [ --enable-solaris build solaris])
207 AC_ARG_ENABLE(bgp-announce,
208 [ --disable-bgp-announce, turn off BGP route announcement])
209 AC_ARG_ENABLE(netlink,
210 [ --enable-netlink force to use Linux netlink interface])
211 AC_ARG_ENABLE(broken-aliases,
212 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
214 [ --without-crypto do not use libcrypto in SNMP])
216 [ --enable-snmp enable SNMP support])
218 [ --with-libpam use libpam for PAM support in vtysh])
219 AC_ARG_ENABLE(tcp-zebra,
220 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
221 AC_ARG_ENABLE(opaque-lsa,
222 AC_HELP_STRING([--disable-opaque-lsa],[do not build OSPF Opaque-LSA with OSPFAPI support (RFC2370)]))
223 AC_ARG_ENABLE(ospfapi,
224 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database])
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 AC_HELP_STRING([--disable-ospf-te],[disable 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}" != "no"; then
295 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
298 if test "${enable_ospf_te}" != "no"; 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 libutil.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 AC_CHECK_HEADERS([sys/un.h net/if.h netinet/in_systm.h netinet/in_var.h \
446 net/if_dl.h net/if_var.h net/netopt.h net/route.h \
447 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
448 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
449 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
450 [], [], QUAGGA_INCLUDES)
452 AC_CHECK_HEADERS([ucontext.h], [], [],
455 #endif /* __USE_GNU */
459 m4_define([QUAGGA_INCLUDES],
467 #if HAVE_NETINET_IN_SYSTM_H
468 # include <netinet/in_systm.h>
470 #if HAVE_NETINET_IN_VAR_H
471 # include <netinet/in_var.h>
474 # include <net/if_dl.h>
476 #if HAVE_NET_IF_VAR_H
477 # include <net/if_var.h>
479 #if HAVE_NET_NETOPT_H
480 # include <net/netopt.h>
483 # include <net/route.h>
486 # include <inet/nd.h>
489 # include <arpa/inet.h>
491 /* Required for IDRP */
492 #if HAVE_NETINET_IP_ICMP_H
493 # include <netinet/ip_icmp.h>
497 dnl V6 headers are checked below, after we check for v6
499 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
501 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
503 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
504 AC_DEFINE(SUNOS_5, 1, SunOS 5)
505 AC_CHECK_LIB(xnet, main)
509 | [*-sunos5.1[0-9]] \
510 | [*-sunos5.1[0-9].[0-9]] \
511 | [*-solaris2.[8-9]] \
512 | [*-solaris2.1[0-9]] \
513 | [*-solaris2.1[0-9].[0-9]])
515 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
516 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
517 AC_CHECK_LIB(socket, main)
518 AC_CHECK_LIB(nsl, main)
519 AC_CHECK_LIB(umem, main)
520 AC_CHECK_FUNCS([printstack],
521 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
522 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
526 *-sunos5* | *-solaris2*)
527 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
528 AC_CHECK_LIB(socket, main)
529 AC_CHECK_LIB(nsl, main)
534 AC_DEFINE(GNU_LINUX,,GNU Linux)
537 AC_CHECK_LIB(nsl, gethostbyname)
538 AC_CHECK_LIB(socket, socket)
542 AC_DEFINE(OPEN_BSD,,OpenBSD)
546 OTHER_METHOD="mtu_kvm.o"
547 AC_CHECK_LIB(kvm, main)
551 AC_DEFINE(IRIX_65,,IRIX 6.5)
557 dnl ---------------------
558 dnl Integrated VTY option
559 dnl ---------------------
560 case "${enable_vtysh}" in
561 "yes") VTYSH="vtysh";
562 AC_DEFINE(VTYSH,,VTY shell)
563 AC_PATH_PROG(PERL, perl)
564 dnl Vtysh uses libreadline, which looks for termcap functions at
565 dnl configure time. We follow readlines search order.
566 dnl The required procedures are in libtermcap on NetBSD, in
567 dnl [TODO] on Linux, and in [TODO] on Solaris.
568 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
569 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
570 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
571 [AC_CHECK_LIB(ncurses, tputs,
572 LIBREADLINE="$LIBREADLINE -lncurses")]
576 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
578 if test $ac_cv_lib_readline_main = no; then
579 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
581 AC_CHECK_HEADER(readline/history.h)
582 if test $ac_cv_header_readline_history_h = no;then
583 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
585 AC_CHECK_LIB(readline, rl_completion_matches,
586 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
587 if test $ac_cv_lib_readline_rl_completion_matches = no; then
588 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
594 AC_SUBST(LIBREADLINE)
599 if test "$with_libpam" = "yes"; then
600 AC_CHECK_HEADER([security/pam_misc.h],
601 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
602 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
603 pam_conv_func="misc_conv"
606 AC_CHECK_HEADER([security/openpam.h],
607 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
608 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
609 pam_conv_func="openpam_ttyconv"
612 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
613 AC_MSG_WARN([*** pam support will not be built ***])
618 if test "$with_libpam" = "yes"; then
619 dnl took this test from proftpds configure.in and suited to our needs
620 dnl -------------------------------------------------------------------------
622 dnl This next check looks funky due to a linker problem with some versions
623 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
624 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
625 dnl with RedHat 6.2 and Debian 2.2 or better.
626 AC_CHECK_LIB(pam, pam_start,
627 [AC_CHECK_LIB(pam, $pam_conv_func,
628 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
630 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
631 LIBPAM="-lpam -lpam_misc"]
635 [AC_CHECK_LIB(pam, pam_end,
636 [AC_CHECK_LIB(pam, $pam_conv_func,
637 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
638 LIBPAM="-lpam -ldl"],
639 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
640 LIBPAM="-lpam -ldl -lpam_misc"]
642 ],AC_MSG_WARN([*** pam support will not be built ***]),
649 dnl -------------------------------
650 dnl Endian-ness check
651 dnl -------------------------------
654 dnl -------------------------------
655 dnl check the size in byte of the C
656 dnl -------------------------------
657 dnl AC_CHECK_SIZEOF(char)
658 dnl AC_CHECK_SIZEOF(int)
659 dnl AC_CHECK_SIZEOF(short)
660 dnl AC_CHECK_SIZEOF(long)
662 dnl ----------------------------
663 dnl check existance of functions
664 dnl ----------------------------
674 AC_FUNC_SELECT_ARGTYPES
676 dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
677 dnl can lead to strange side effects. So we just check for strnlen
678 dnl directly, see below.
679 dnl AC_FUNC_STRNLENdnl
682 dnl -------------------------------
683 dnl bgpd needs pow() and hence libm
684 dnl -------------------------------
686 AC_CHECK_HEADER([math.h],
687 [AC_CHECK_LIB([m], [pow],
690 AC_DEFINE(HAVE_LIBM,, Have libm)
691 AC_CHECK_FUNCS(pow,[],[LIBM=""])
694 if test x"$LIBM" = x ; then
695 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
703 AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
704 inet_ntoa inet_aton strnlen \
705 memchr memmove memset select socket \
706 strcasecmp strchr strcspn strdup strerror \
707 strncasecmp strndup strrchr strspn strstr \
708 strtol strtoul strlcat strlcpy \
709 daemon snprintf vsnprintf \
710 if_nametoindex if_indextoname getifaddrs \
713 AC_CHECK_FUNCS(setproctitle, ,
714 [AC_CHECK_LIB(util, setproctitle,
716 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
722 dnl ------------------------------------
723 dnl Determine routing get and set method
724 dnl ------------------------------------
725 AC_MSG_CHECKING(zebra between kernel interface method)
726 if test x"$opsys" = x"gnu-linux"; then
727 if test "${enable_netlink}" = "yes";then
728 AC_MSG_RESULT(netlink)
729 RT_METHOD=rt_netlink.o
730 AC_DEFINE(HAVE_NETLINK,,netlink)
732 elif test "${enable_netlink}" = "no"; then
737 AC_MSG_RESULT(netlink)
738 RT_METHOD=rt_netlink.o
739 AC_DEFINE(HAVE_NETLINK,,netlink)
742 elif test x"$opsys" = x"sol2-6";then
743 AC_MSG_RESULT(Route socket)
744 KERNEL_METHOD="kernel_socket.o"
745 RT_METHOD="rt_socket.o"
746 elif test x"$opsys" = x"sol8";then
747 AC_MSG_RESULT(Route socket)
748 KERNEL_METHOD="kernel_socket.o"
749 RT_METHOD="rt_socket.o"
750 elif test "$opsys" = "irix" ; then
751 AC_MSG_RESULT(Route socket)
752 KERNEL_METHOD="kernel_socket.o"
753 RT_METHOD="rt_socket.o"
755 AC_TRY_RUN([#include <errno.h>
756 #include <sys/types.h>
757 #include <sys/socket.h>
763 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
764 if (ac_sock < 0 && errno == EINVAL)
768 [KERNEL_METHOD=kernel_socket.o
769 RT_METHOD=rt_socket.o
770 AC_MSG_RESULT(socket)],
771 [RT_METHOD=rt_ioctl.o
772 AC_MSG_RESULT(ioctl)],
773 [KERNEL_METHOD=kernel_socket.o
774 RT_METHOD=rt_socket.o
775 AC_MSG_RESULT(socket)])
778 AC_SUBST(KERNEL_METHOD)
779 AC_SUBST(OTHER_METHOD)
781 dnl --------------------------
782 dnl Determine IS-IS I/O method
783 dnl --------------------------
784 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
785 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
786 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
787 AC_CHECK_HEADER(net/bpf.h)
788 AC_CHECK_HEADER(sys/dlpi.h)
789 AC_MSG_CHECKING(zebra IS-IS I/O method)
790 if test x"$opsys" = x"gnu-linux"; then
791 AC_MSG_RESULT(pfpacket)
792 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
793 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
795 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
797 if test $ac_cv_header_net_bpf_h = no; then
798 if test $ac_cv_header_sys_dlpi_h = no; then
800 AC_MSG_WARN([*** IS-IS support will not be built ***])
805 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
808 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
811 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
813 dnl ------------------------------------
814 dnl check for broken CMSG_FIRSTHDR macro
815 dnl ------------------------------------
816 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
817 AC_RUN_IFELSE([AC_LANG_SOURCE([[
820 #define __EXTENSIONS__
825 #ifdef HAVE_SYS_TYPES_H
826 #include <sys/types.h>
828 #ifdef HAVE_SYS_SOCKET_H
829 #include <sys/socket.h>
837 msg.msg_control = buf;
838 msg.msg_controllen = 0;
840 if (CMSG_FIRSTHDR(&msg) != NULL)
843 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
844 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
846 dnl ------------------------------
847 dnl check kernel route read method
848 dnl ------------------------------
849 AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
850 [if test "x$netlink" = xyes; then
851 quagga_cv_rtread_method="netlink"
853 for quagga_cv_rtread_method in /proc/net/route /dev/ip /dev/null;
855 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
857 case $quagga_cv_rtread_method in
858 "/proc/net/route") quagga_cv_rtread_method="proc";;
861 *-freebsd*) quagga_cv_rtread_method="sysctl";;
862 *) quagga_cv_rtread_method="getmsg";;
865 quagga_cv_rtread_method="sysctl";;
868 RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
869 AC_SUBST(RTREAD_METHOD)
871 dnl -----------------------------
872 dnl check interface lookup method
873 dnl -----------------------------
875 AC_MSG_CHECKING(interface looking up method)
876 if test "$netlink" = yes; then
877 AC_MSG_RESULT(netlink)
878 IF_METHOD=if_netlink.o
879 elif test "$opsys" = "sol2-6";then
880 AC_MSG_RESULT(Solaris GIF)
882 elif test "$opsys" = "sol8";then
883 AC_MSG_RESULT(Solaris GLIF)
884 IF_METHOD=if_ioctl_solaris.o
885 IOCTL_METHOD=ioctl_solaris.o
886 elif test "$opsys" = "irix" ; then
889 elif test "$opsys" = "openbsd";then
890 AC_MSG_RESULT(openbsd)
892 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
893 AC_MSG_RESULT(sysctl)
894 IF_METHOD=if_sysctl.o
895 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
901 AC_SUBST(IOCTL_METHOD)
903 dnl ---------------------------------------------------------------
904 dnl figure out how to specify an interface in multicast sockets API
905 dnl ---------------------------------------------------------------
906 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
908 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
909 AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
910 #include <sys/param.h>
911 #endif],[#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000)
914 #error No support for BSD struct ip_mreq hack detected
915 #endif],[AC_MSG_RESULT(yes)
916 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
919 dnl ---------------------------------------------------------------
920 dnl figure out how to check link-state
921 dnl ---------------------------------------------------------------
922 AC_CHECK_HEADER([net/if.h],
923 [AC_CHECK_HEADER( [net/if_media.h],
924 [m4_define([LINK_DETECT_INCLUDES],
926 [#include <net/if_media.h>
928 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
929 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
930 [], LINK_DETECT_INCLUDES)],
933 [], QUAGGA_INCLUDES )
935 dnl ------------------------
936 dnl TCP_MD5SIG socket option
937 dnl ------------------------
939 AC_CHECK_HEADER([netinet/tcp.h],
940 [m4_define([MD5_INCLUDES],
942 [#include <netinet/tcp.h>
944 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
947 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
948 AC_CHECK_HEADER([linux/tcp.h],
949 [m4_define([MD5_INCLUDES],
951 [#include <linux/tcp.h>
953 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
956 dnl -----------------------
957 dnl check proc file system.
958 dnl -----------------------
959 if test "$netlink" != yes; then
960 if test -r /proc/net/dev; then
961 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
964 if test -r /proc/net/if_inet6; then
965 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
971 dnl -----------------------------
972 dnl check ipforward detect method
973 dnl -----------------------------
974 AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
975 [for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
977 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
979 case $quagga_cv_ipforward_method in
980 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
983 *-nec-sysv4*) quagga_cv_ipforward_method="ews";;
984 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
985 *) quagga_cv_ipforward_method="solaris";;
987 *) quagga_cv_ipforward_method="sysctl";;
989 IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
992 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
997 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
998 if test "${enable_ipv6}" = "no"; then
999 AC_MSG_RESULT(disabled)
1004 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1006 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1007 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1011 AC_MSG_RESULT(INRIA IPv6)
1015 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1017 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1018 AC_DEFINE(KAME,1,KAME IPv6)
1021 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1022 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1025 dnl -------------------------
1027 dnl default host check
1028 dnl It is not used by Kheops
1029 dnl -------------------------
1030 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1032 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1033 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1034 AC_DEFINE(KAME,1,KAME IPv6 stack)
1037 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1038 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1040 AC_MSG_RESULT(MUSICA)
1044 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1046 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1047 AC_DEFINE(NRL,1,NRL)
1050 if test x"$opsys" = x"bsdi";then
1051 AC_DEFINE(BSDI_NRL,,BSDI)
1052 AC_MSG_RESULT(BSDI_NRL)
1056 dnl ------------------------------------
1057 dnl Solaris 9, 10 and potentially higher
1058 dnl ------------------------------------
1059 elif test x"$opsys" = x"sol8"; then
1061 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1062 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1065 AC_MSG_RESULT(Solaris IPv6)
1069 elif test "${enable_ipv6}" = "yes"; then
1071 #include <linux/version.h>
1072 /* 2.1.128 or later */
1073 #if LINUX_VERSION_CODE >= 0x020180
1077 zebra_cv_linux_ipv6=yes
1078 AC_MSG_RESULT(Linux IPv6)])
1080 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1083 zebra_cv_linux_ipv6=yes
1084 AC_MSG_RESULT(Linux IPv6)
1088 if test "$zebra_cv_linux_ipv6" = "yes";then
1089 AC_MSG_CHECKING(whether libc has IPv6 support)
1090 AC_TRY_LINK([#include <netinet/in.h>
1091 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1094 zebra_cv_linux_ipv6=yes],
1097 zebra_cv_linux_ipv6=no])
1100 if test "$zebra_cv_linux_ipv6" = "yes";then
1101 AC_MSG_CHECKING(for GNU libc >= 2.1)
1102 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1104 #include <features.h>
1105 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1109 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1110 AC_MSG_RESULT(yes)],
1115 if test "$glibc" != "yes"; then
1116 INCLUDES="-I/usr/inet6/include"
1117 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1118 LIB_IPV6="-L/usr/inet6/lib -linet6"
1123 dnl -----------------------
1124 dnl Set IPv6 related values
1125 dnl -----------------------
1126 LIBS="$LIB_IPV6 $LIBS"
1129 if test x"$RIPNGD" = x""; then
1130 AC_MSG_RESULT(IPv4 only)
1134 dnl ------------------
1135 dnl IPv6 header checks
1136 dnl ------------------
1137 if test "x${zebra_cv_ipv6}" = "xyes"; then
1138 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
1139 netinet6/in6_var.h netinet6/nd6.h], [], [],
1143 m4_define([QUAGGA_INCLUDES],dnl
1145 [#if HAVE_NETINET6_IN6_H
1146 #include <netinet6/in6.h>
1148 #if HAVE_NETINET_IN6_VAR_H
1149 #include <netinet/in6_var.h>
1151 #if HAVE_NETINET_ICMP6_H
1152 # include <netinet/icmp6.h>
1154 #if HAVE_NETINET6_IN6_VAR_H
1155 # include <netinet6/in6_var.h>
1157 #if HAVE_NETINET6_ND6_H
1158 # include <netinet6/nd6.h>
1162 dnl disable doc check
1163 if test "${enable_doc}" = "no";then
1169 dnl --------------------
1170 dnl Daemon disable check
1171 dnl --------------------
1172 if test "${enable_zebra}" = "no";then
1178 if test "${enable_bgpd}" = "no";then
1184 if test "${enable_ripd}" = "no";then
1190 if test "${enable_ospfd}" = "no";then
1196 if test "${enable_watchquagga}" = "no";then
1199 WATCHQUAGGA="watchquagga"
1203 if test "${enable_opaque_lsa}" != "no"; then
1204 if test "${enable_ospfapi}" != "no";then
1205 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1207 if test "${enable_ospfclient}" != "no";then
1208 OSPFCLIENT="ospfclient"
1214 case "${enable_ripngd}" in
1215 "yes") RIPNGD="ripngd";;
1220 case "${enable_ospf6d}" in
1221 "yes") OSPF6D="ospf6d";;
1226 case "${enable_isisd}" in
1227 "yes") ISISD="isisd";;
1232 # XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1233 case "${enable_solaris}" in
1234 "yes") SOLARIS="solaris";;
1239 if test "${enable_bgp_announce}" = "no";then
1240 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1242 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1252 AC_SUBST(WATCHQUAGGA)
1258 AC_SUBST(OSPFCLIENT)
1260 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1261 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1262 AC_CHECK_LIB(crypt, crypt)
1263 AC_CHECK_LIB(resolv, res_init)
1265 dnl ---------------------------------------------------
1266 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1267 dnl ---------------------------------------------------
1268 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1269 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1270 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
1272 dnl ---------------------------
1273 dnl check system has PCRE regexp
1274 dnl ---------------------------
1275 if test "x$enable_pcreposix" = "xyes"; then
1276 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1277 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1280 if test "x$enable_pcreposix" != "xyes"; then
1281 dnl ---------------------------
1282 dnl check system has GNU regexp
1283 dnl ---------------------------
1284 AC_MSG_CHECKING(whether system has GNU regex)
1285 AC_CHECK_LIB(c, regexec,
1286 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1288 [LIB_REGEX="regex.o"])
1290 AC_SUBST(HAVE_LIBPCREPOSIX)
1293 dnl ------------------
1294 dnl check Net-SNMP library
1295 dnl ------------------
1296 if test "${enable_snmp}" = "yes"; then
1297 if test "$with_crypto" != "no"; then
1298 LIBS="${LIBS} -lcrypto";
1300 AC_CHECK_LIB(netsnmp, asn_parse_int,
1301 [AC_DEFINE(HAVE_NETSNMP,,Net SNMP)
1302 AC_DEFINE(HAVE_SNMP,,SNMP)
1303 LIBS="${LIBS} -lnetsnmp"],
1304 [AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])])
1306 AC_CHECK_HEADER([net-snmp/net-snmp-config.h],
1308 [AC_MSG_ERROR([--enable-snmp given, but cannot find net-snmp-config.h])],
1310 AC_SUBST(SNMP_INCLUDES)
1313 dnl ---------------------------
1314 dnl sockaddr and netinet checks
1315 dnl ---------------------------
1316 AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1317 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1319 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1320 struct nd_opt_adv_interval, struct rt_addrinfo,
1321 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1322 [], [], QUAGGA_INCLUDES)
1324 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1325 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1326 struct sockaddr_in6.sin6_scope_id,
1327 struct if6_aliasreq.ifra_lifetime,
1328 struct nd_opt_adv_interval.nd_opt_ai_type],
1329 [], [], QUAGGA_INCLUDES)
1331 dnl ---------------------------
1332 dnl IRDP/pktinfo/icmphdr checks
1333 dnl ---------------------------
1334 AC_CHECK_TYPES([struct in_pktinfo],
1335 [AC_CHECK_TYPES([struct icmphdr],
1336 [if test "${enable_irdp}" != "no"; then
1337 AC_DEFINE(HAVE_IRDP,, IRDP)
1339 [if test "${enable_irdp}" = "yes"; then
1340 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1341 fi], [QUAGGA_INCLUDES])],
1342 [if test "${enable_irdp}" = "yes"; then
1343 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1344 fi], [QUAGGA_INCLUDES])
1346 dnl --------------------------------------
1347 dnl checking for getrusage struct and call
1348 dnl --------------------------------------
1349 AC_MSG_CHECKING(whether getrusage is available)
1350 AC_TRY_COMPILE([#include <sys/resource.h>
1351 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1353 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1356 dnl --------------------------------------
1357 dnl checking for clock_time monotonic struct and call
1358 dnl --------------------------------------
1359 AC_CHECK_DECL(CLOCK_MONOTONIC,
1360 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1361 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1362 ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
1364 dnl -------------------
1365 dnl capabilities checks
1366 dnl -------------------
1367 if test "${enable_capabilities}" != "no"; then
1368 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1369 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1371 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1372 quagga_ac_keepcaps="yes"],
1375 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1376 AC_CHECK_HEADERS(sys/capability.h)
1378 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1379 AC_CHECK_LIB(cap, cap_init,
1380 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1382 quagga_ac_lcaps="yes"]
1385 AC_CHECK_HEADERS(priv.h,
1386 [AC_MSG_CHECKING(Solaris style privileges are available)
1387 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1389 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1390 quagga_ac_scaps="yes"],
1396 if test x"${quagga_ac_scaps}" = x"yes" \
1397 -o x"${quagga_ac_lcaps}" = x"yes"; then
1398 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1403 dnl ---------------------------
1404 dnl check for glibc 'backtrace'
1405 dnl ---------------------------
1406 if test "${glibc}" = "yes"; then
1407 AC_CHECK_HEADER([execinfo.h],
1408 [AC_CHECK_FUNC([backtrace],
1409 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1410 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1415 dnl -----------------------------------------
1416 dnl check for malloc mallinfo struct and call
1417 dnl this must try and link using LIBS, in
1418 dnl order to check no alternative allocator
1419 dnl has been specified, which might not provide
1420 dnl mallinfo, e.g. such as Umem on Solaris.
1421 dnl -----------------------------------------
1422 AC_CHECK_HEADER([malloc.h],
1423 [AC_MSG_CHECKING(whether mallinfo is available)
1424 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1425 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1427 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1430 ], [], QUAGGA_INCLUDES)
1435 CONFDATE=`date '+%Y%m%d'`
1438 dnl Conditionally enable PIE support for GNU toolchains.
1439 AC_ARG_ENABLE(pie, AS_HELP_STRING([--disable-pie], [Do not build tools as a Position Independent Executables]))
1440 if test "$enable_pie" != "no"; then
1441 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1443 save_LDFLAGS=$LDFLAGS
1444 CFLAGS="$CFLAGS -fPIE"
1445 LDFLAGS="$LDFLAGS -pie"
1446 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1447 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1450 LDFLAGS=$save_LDFLAGS
1452 if test "$ap_cv_cc_pie" = "yes"; then
1461 dnl ------------------------------
1462 dnl set paths for state directory
1463 dnl ------------------------------
1464 AC_MSG_CHECKING(directory to use for state file)
1465 if test "${prefix}" = "NONE"; then
1466 quagga_statedir_prefix="";
1468 quagga_statedir_prefix=${prefix}
1470 if test "${localstatedir}" = '${prefix}/var'; then
1471 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1472 ${quagga_statedir_prefix}/var/adm dnl
1473 ${quagga_statedir_prefix}/etc dnl
1479 test -d $QUAGGA_STATE_DIR && break
1481 quagga_statedir=$QUAGGA_STATE_DIR
1483 quagga_statedir=${localstatedir}
1485 if test $quagga_statedir = "/dev/null"; then
1486 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1488 AC_MSG_RESULT(${quagga_statedir})
1489 AC_SUBST(quagga_statedir)
1491 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1492 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1493 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1494 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1495 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1496 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1497 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1498 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1499 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1500 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1501 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1502 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1503 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1504 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1505 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1506 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1507 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1509 dnl -------------------------------
1510 dnl Quagga sources should always be
1511 dnl current wrt interfaces. Dont
1512 dnl allow deprecated interfaces to
1514 dnl -------------------------------
1515 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1517 dnl ---------------------------
1518 dnl Check htonl works correctly
1519 dnl ---------------------------
1520 AC_MSG_CHECKING(for working htonl)
1521 AC_CACHE_VAL(ac_cv_htonl_works,
1522 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1523 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1526 AC_MSG_RESULT($ac_cv_htonl_works)
1528 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1529 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1530 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1531 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
1536 isisd/topology/Makefile
1537 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1538 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1539 AC_CONFIG_FILES([solaris/Makefile])
1541 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1542 ## Hack, but working solution to avoid rebuilding of quagga.info.
1543 ## It's already in CVS until texinfo 4.7 is more common.
1547 Quagga configuration
1548 --------------------
1549 quagga version : ${PACKAGE_VERSION}
1550 host operating system : ${host_os}
1551 source code location : ${srcdir}
1553 compiler flags : ${CFLAGS}
1555 includes : ${INCLUDES} ${SNMP_INCLUDES}
1556 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1557 state file directory : ${quagga_statedir}
1558 config file directory : `eval echo \`echo ${sysconfdir}\``
1559 example directory : `eval echo \`echo ${exampledir}\``
1560 user to run as : ${enable_user}
1561 group to run as : ${enable_group}
1562 group for vty sockets : ${enable_vty_group}
1563 config file mask : ${enable_configfile_mask}
1564 log file mask : ${enable_logfile_mask}
1566 The above user and group must have read/write access to the state file
1567 directory and to the config files in the config file directory."
1569 if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1570 Warning: The ${MAKE-make} programme detected, either in your path or
1571 via the MAKE variable, is not GNU Make. GNU make may be installed as
1572 gmake on some systems. and is required to complete a build of Quagga