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.21, [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 pdflatex and latexmk are needed to build HACKING.pdf
76 AC_CHECK_PROG([PDFLATEX],[pdflatex],[pdflatex],[/bin/false])
77 AC_CHECK_PROG([LATEXMK],[latexmk],[latexmk],[/bin/false])
78 if test "x$PDFLATEX" = "x/bin/false" -o "x$LATEXMK" = "x/bin/false"; then
79 AC_MSG_WARN([Will not be able to make PDF versions of TeX documents])
83 AM_CONDITIONAL([HAVE_LATEX], [test "x$HAVE_LATEX" = "xtrue"])
85 dnl ------------------------------------------------------------------
86 dnl Intel compiler check. Although Intel tries really hard to make icc
87 dnl look like gcc, there are some differences. It's very verbose with
88 dnl -Wall and it doesn't support the individual -W options.
89 dnl ------------------------------------------------------------------
90 if test "x${GCC}" = "xyes" ; then
92 AC_MSG_CHECKING([whether we are using the Intel compiler])
93 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
94 [AC_MSG_RESULT([no])],
99 AC_MSG_CHECKING([whether we are using SunPro compiler])
100 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
101 [AC_MSG_RESULT([no])],
103 AC_MSG_RESULT([yes])]
107 dnl ---------------------------------------------
108 dnl If CLFAGS doesn\'t exist set default value
109 dnl AC_PROG_CC will have set minimal default
110 dnl already, eg "-O2 -g" for gcc, "-g" for others
111 dnl (Wall is gcc specific... have to make sure
112 dnl gcc is being used before setting it)
114 dnl Intel icc 8.0 also sets __GNUC__,
115 dnl but doesn't support all these fancy -W options.
116 dnl Intel compiler warnings we ignore:
117 dnl 279: controlling expression is constant.
118 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
119 dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
121 dnl 981: operands are evaluated in unspecified order.
123 dnl Sun Studio 10 / SunPro 5.7 is also supported,
124 dnl so lets set some sane CFLAGS for it.
125 dnl ---------------------------------------------
127 AC_MSG_CHECKING([whether to set a default CFLAGS])
128 if test "x${cflags_specified}" = "x" ; then
131 CFLAGS="-Os -g -Wall -wd 279,869,981"
132 AC_MSG_RESULT([Intel default])
135 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
136 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
137 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
138 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
139 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
140 # TODO: conditionally addd -Wpacked if handled
141 AC_MSG_RESULT([gcc default])
144 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
145 AC_MSG_RESULT([SunPro default])
148 AC_MSG_RESULT([unknown compiler])
152 AC_MSG_RESULT([CFLAGS supplied by user])
161 AC_CHECK_TOOL(AR, ar)
163 dnl ---------------------------
164 dnl We, perhaps unfortunately,
165 dnl depend on GNU Make specific
167 dnl Give the user a warning if
169 dnl ---------------------------
170 AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
171 [quagga_cv_gnu_make=no
172 if ${MAKE-make} --version 2>/dev/null | \
173 grep '^GNU Make ' >/dev/null ; then
174 quagga_cv_gnu_make=yes;
179 dnl -----------------
180 dnl System extensions
181 dnl -----------------
189 dnl ----------------------
190 dnl Packages configuration
191 dnl ----------------------
192 AC_ARG_WITH(pkg-extra-version,
193 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
194 [EXTRAVERSION=$withval],)
196 [ --enable-vtysh include integrated vty shell for Quagga])
198 [ --disable-ipv6 turn off IPv6 related features and daemons])
200 [ --disable-doc do not build docs])
202 [ --disable-zebra do not build zebra daemon])
204 [ --disable-bgpd do not build bgpd])
206 [ --disable-ripd do not build ripd])
207 AC_ARG_ENABLE(ripngd,
208 [ --disable-ripngd do not build ripngd])
210 [ --disable-ospfd do not build ospfd])
211 AC_ARG_ENABLE(ospf6d,
212 [ --disable-ospf6d do not build ospf6d])
213 AC_ARG_ENABLE(babeld,
214 [ --disable-babeld do not build babeld])
215 AC_ARG_ENABLE(watchquagga,
216 [ --disable-watchquagga do not build watchquagga])
218 [ --enable-isisd build isisd])
219 AC_ARG_ENABLE(solaris,
220 [ --enable-solaris build solaris])
221 AC_ARG_ENABLE(bgp-announce,
222 [ --disable-bgp-announce, turn off BGP route announcement])
223 AC_ARG_ENABLE(netlink,
224 [ --enable-netlink force to use Linux netlink interface])
225 AC_ARG_ENABLE(broken-aliases,
226 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
228 [ --enable-snmp=ARG enable SNMP support (smux or agentx)])
230 [ --with-libpam use libpam for PAM support in vtysh])
231 AC_ARG_ENABLE(tcp-zebra,
232 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
233 AC_ARG_ENABLE(opaque-lsa,
234 AC_HELP_STRING([--disable-opaque-lsa],[do not build OSPF Opaque-LSA with OSPFAPI support (RFC2370)]))
235 AC_ARG_ENABLE(ospfapi,
236 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database])
237 AC_ARG_ENABLE(ospfclient,
238 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
239 (this is the default if --disable-ospfapi is set)])
240 AC_ARG_ENABLE(ospf-te,
241 AC_HELP_STRING([--disable-ospf-te],[disable Traffic Engineering Extension to OSPF]))
242 AC_ARG_ENABLE(multipath,
243 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
245 AC_HELP_STRING([--enable-user=user], [user to run Quagga suite as (default quagga)]))
247 AC_HELP_STRING([--enable-group=group], [group to run Quagga suite as (default quagga)]))
248 AC_ARG_ENABLE(vty_group,
249 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
250 AC_ARG_ENABLE(configfile_mask,
251 [ --enable-configfile-mask=ARG set mask for config files])
252 AC_ARG_ENABLE(logfile_mask,
253 [ --enable-logfile-mask=ARG set mask for log files])
256 [ --disable-rtadv disable IPV6 router advertisement feature])
258 [ --enable-irdp enable IRDP server support in zebra])
259 AC_ARG_ENABLE(isis_topology,
260 [ --enable-isis-topology enable IS-IS topology generator])
261 AC_ARG_ENABLE(capabilities,
262 [ --disable-capabilities disable using POSIX capabilities])
263 AC_ARG_ENABLE(gcc_ultra_verbose,
264 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
265 AC_ARG_ENABLE(linux24_tcp_md5,
266 [ --enable-linux24-tcp-md5 enable support for old, Linux-2.4 RFC2385 patch])
267 AC_ARG_ENABLE(gcc-rdynamic,
268 [ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
269 AC_ARG_ENABLE(time-check,
270 [ --disable-time-check disable slow thread warning messages])
271 AC_ARG_ENABLE(pcreposix,
272 [ --enable-pcreposix enable using PCRE Posix libs for regex functions])
274 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
275 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
276 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
277 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
278 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
281 if test x"${enable_gcc_rdynamic}" = x"yes" ; then
282 LDFLAGS="${LDFLAGS} -rdynamic"
285 if test x"${enable_time_check}" != x"no" ; then
286 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
287 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
289 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
293 if test "${enable_broken_aliases}" = "yes"; then
294 if test "${enable_netlink}" = "yes"
296 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
298 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
302 if test "${enable_tcp_zebra}" = "yes"; then
303 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
306 if test "${enable_opaque_lsa}" != "no"; then
307 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
310 if test "${enable_ospf_te}" != "no"; then
311 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
312 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
315 if test "${enable_linux24_tcp_md5}" = "yes"; then
316 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
319 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
320 if test "${enable_rtadv}" != "no"; then
322 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
327 if test "${enable_irdp}" = "yes"; then
328 AC_DEFINE(HAVE_IRDP,, IRDP )
331 if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
332 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
333 ISIS_TOPOLOGY_INCLUDES="-I./topology"
334 ISIS_TOPOLOGY_DIR="topology"
335 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
338 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
339 AC_SUBST(ISIS_TOPOLOGY_DIR)
340 AC_SUBST(ISIS_TOPOLOGY_LIB)
342 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
344 elif test "${enable_user}" = "no"; then
348 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
349 enable_group="quagga"
350 elif test "${enable_group}" = "no"; then
354 if test x"${enable_vty_group}" = x"yes" ; then
355 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
356 elif test x"${enable_vty_group}" != x""; then
357 if test x"${enable_vty_group}" != x"no"; then
358 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
361 AC_SUBST([enable_user])
362 AC_SUBST([enable_group])
363 AC_SUBST([enable_vty_group])
364 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
365 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
367 enable_configfile_mask=${enable_configfile_mask:-0600}
368 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
370 enable_logfile_mask=${enable_logfile_mask:-0600}
371 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
375 case "${enable_multipath}" in
377 MULTIPATH_NUM="${enable_multipath}"
382 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
386 AC_SUBST(MULTIPATH_NUM)
388 dnl -----------------------------------
389 dnl Add extra version string to package
390 dnl name, string and version fields.
391 dnl -----------------------------------
392 if test "x${EXTRAVERSION}" != "x" ; then
393 VERSION=${VERSION}${EXTRAVERSION}
394 PACKAGE_VERSION=${PACKAGE_VERSION}${EXTRAVERSION}
395 PACKAGE_STRING=${PACKAGE_STRING}${EXTRAVERSION}
398 dnl ------------------------------------
399 dnl Check C keywords and standard types
400 dnl ------------------------------------
415 dnl -------------------------
416 dnl Check other header files.
417 dnl -------------------------
418 AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
419 sys/types.h linux/version.h netdb.h asm/types.h \
420 sys/param.h limits.h signal.h \
421 sys/socket.h netinet/in.h time.h sys/time.h])
423 dnl Utility macro to avoid retyping includes all the time
424 m4_define([QUAGGA_INCLUDES],
427 #define __EXTENSIONS__
439 # include <sys/types.h>
441 /* sys/conf.h depends on param.h on FBSD at least */
443 # include <sys/param.h>
445 /* Required for MAXSIG */
449 #if HAVE_SYS_SOCKET_H
450 # include <sys/socket.h>
452 #if HAVE_NETINET_IN_H
453 # include <netinet/in.h>
455 #ifdef TIME_WITH_SYS_TIME
456 # include <sys/time.h>
459 # ifdef HAVE_SYS_TIME_H
460 # include <sys/time.h>
464 #endif /* TIME_WITH_SYS_TIME */
467 dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
468 dnl round below execution begins, otherwise it doesn't properly detect
469 dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
470 dnl on FreeBSD (BZ#408).
472 AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
474 m4_define([QUAGGA_INCLUDES],
481 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
482 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
483 dnl an additional round for it.
485 AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
487 m4_define([QUAGGA_INCLUDES],
489 [#if HAVE_NET_IF_VAR_H
490 # include <net/if_var.h>
494 AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
495 net/if_dl.h net/netopt.h net/route.h \
496 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
497 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
498 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
499 [], [], QUAGGA_INCLUDES)
501 AC_CHECK_HEADERS([ucontext.h], [], [],
504 #endif /* __USE_GNU */
508 m4_define([QUAGGA_INCLUDES],
513 #if HAVE_NETINET_IN_SYSTM_H
514 # include <netinet/in_systm.h>
516 #if HAVE_NETINET_IN_VAR_H
517 # include <netinet/in_var.h>
520 # include <net/if_dl.h>
522 #if HAVE_NET_NETOPT_H
523 # include <net/netopt.h>
526 # include <net/route.h>
529 # include <inet/nd.h>
532 # include <arpa/inet.h>
534 /* Required for IDRP */
535 #if HAVE_NETINET_IP_ICMP_H
536 # include <netinet/ip_icmp.h>
540 dnl V6 headers are checked below, after we check for v6
542 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
544 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
546 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
547 AC_DEFINE(SUNOS_5, 1, SunOS 5)
548 AC_CHECK_LIB(xnet, main)
552 | [*-sunos5.1[0-9]] \
553 | [*-sunos5.1[0-9].[0-9]] \
554 | [*-solaris2.[8-9]] \
555 | [*-solaris2.1[0-9]] \
556 | [*-solaris2.1[0-9].[0-9]])
558 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
559 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
560 AC_CHECK_LIB(socket, main)
561 AC_CHECK_LIB(nsl, main)
562 AC_CHECK_LIB(umem, main)
563 AC_CHECK_FUNCS([printstack],
564 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
565 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
569 *-sunos5* | *-solaris2*)
570 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
571 AC_CHECK_LIB(socket, main)
572 AC_CHECK_LIB(nsl, main)
577 AC_DEFINE(GNU_LINUX,,GNU Linux)
580 AC_CHECK_LIB(nsl, gethostbyname)
581 AC_CHECK_LIB(socket, socket)
585 AC_DEFINE(OPEN_BSD,,OpenBSD)
589 OTHER_METHOD="mtu_kvm.o"
590 AC_CHECK_LIB(kvm, main)
594 AC_DEFINE(IRIX_65,,IRIX 6.5)
600 dnl ---------------------
601 dnl Integrated VTY option
602 dnl ---------------------
603 case "${enable_vtysh}" in
604 "yes") VTYSH="vtysh";
605 AC_DEFINE(VTYSH,,VTY shell)
606 AC_PATH_PROG(PERL, perl)
607 dnl Vtysh uses libreadline, which looks for termcap functions at
608 dnl configure time. We follow readlines search order.
609 dnl The required procedures are in libtermcap on NetBSD, in
610 dnl [TODO] on Linux, and in [TODO] on Solaris.
611 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
612 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
613 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
614 [AC_CHECK_LIB(ncurses, tputs,
615 LIBREADLINE="$LIBREADLINE -lncurses")]
619 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
621 if test $ac_cv_lib_readline_main = no; then
622 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
624 AC_CHECK_HEADER(readline/history.h)
625 if test $ac_cv_header_readline_history_h = no;then
626 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
628 AC_CHECK_LIB(readline, rl_completion_matches,
629 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
630 if test $ac_cv_lib_readline_rl_completion_matches = no; then
631 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
637 AC_SUBST(LIBREADLINE)
638 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
643 dnl Quagga detects the PAM library it is built against by checking for a
644 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
645 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
646 dnl openpam.h doesn't do that, although depends on the header too. Hence a
647 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
650 if test "$with_libpam" = "yes"; then
651 AC_CHECK_HEADER([security/pam_misc.h],
652 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
653 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
654 pam_conv_func="misc_conv"
657 AC_CHECK_HEADER([security/openpam.h],
658 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
659 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
660 pam_conv_func="openpam_ttyconv"
662 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
663 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
664 AC_MSG_WARN([*** pam support will not be built ***])
669 if test "$with_libpam" = "yes"; then
670 dnl took this test from proftpds configure.in and suited to our needs
671 dnl -------------------------------------------------------------------------
673 dnl This next check looks funky due to a linker problem with some versions
674 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
675 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
676 dnl with RedHat 6.2 and Debian 2.2 or better.
677 AC_CHECK_LIB(pam, pam_start,
678 [AC_CHECK_LIB(pam, $pam_conv_func,
679 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
681 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
682 LIBPAM="-lpam -lpam_misc"]
686 [AC_CHECK_LIB(pam, pam_end,
687 [AC_CHECK_LIB(pam, $pam_conv_func,
688 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
689 LIBPAM="-lpam -ldl"],
690 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
691 LIBPAM="-lpam -ldl -lpam_misc"]
693 ],AC_MSG_WARN([*** pam support will not be built ***]),
700 dnl -------------------------------
701 dnl Endian-ness check
702 dnl -------------------------------
705 dnl -------------------------------
706 dnl check the size in byte of the C
707 dnl -------------------------------
708 dnl AC_CHECK_SIZEOF(char)
709 dnl AC_CHECK_SIZEOF(int)
710 dnl AC_CHECK_SIZEOF(short)
711 dnl AC_CHECK_SIZEOF(long)
713 dnl ----------------------------
714 dnl check existance of functions
715 dnl ----------------------------
723 AC_FUNC_SELECT_ARGTYPES
725 dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
726 dnl can lead to strange side effects. So we just check for strnlen
727 dnl directly, see below.
728 dnl AC_FUNC_STRNLENdnl
731 dnl -------------------------------
732 dnl bgpd needs pow() and hence libm
733 dnl -------------------------------
735 AC_CHECK_HEADER([math.h],
736 [AC_CHECK_LIB([m], [pow],
739 AC_DEFINE(HAVE_LIBM,, Have libm)
740 AC_CHECK_FUNCS(pow,[],[LIBM=""])
743 if test x"$LIBM" = x ; then
744 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
752 AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
753 inet_ntoa inet_aton strnlen \
754 memchr memmove memset select socket \
755 strcasecmp strchr strcspn strdup strerror \
756 strncasecmp strndup strrchr strspn strstr \
757 strtol strtoul strlcat strlcpy \
758 daemon snprintf vsnprintf \
759 if_nametoindex if_indextoname getifaddrs \
762 AC_CHECK_FUNCS(setproctitle, ,
763 [AC_CHECK_LIB(util, setproctitle,
765 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
771 dnl ------------------------------------
772 dnl Determine routing get and set method
773 dnl ------------------------------------
774 AC_MSG_CHECKING(zebra between kernel interface method)
775 if test x"$opsys" = x"gnu-linux"; then
776 if test "${enable_netlink}" = "yes";then
777 AC_MSG_RESULT(netlink)
778 RT_METHOD=rt_netlink.o
779 AC_DEFINE(HAVE_NETLINK,,netlink)
781 elif test "${enable_netlink}" = "no"; then
786 AC_MSG_RESULT(netlink)
787 RT_METHOD=rt_netlink.o
788 AC_DEFINE(HAVE_NETLINK,,netlink)
791 elif test x"$opsys" = x"sol2-6";then
792 AC_MSG_RESULT(Route socket)
793 KERNEL_METHOD="kernel_socket.o"
794 RT_METHOD="rt_socket.o"
795 elif test x"$opsys" = x"sol8";then
796 AC_MSG_RESULT(Route socket)
797 KERNEL_METHOD="kernel_socket.o"
798 RT_METHOD="rt_socket.o"
799 elif test "$opsys" = "irix" ; then
800 AC_MSG_RESULT(Route socket)
801 KERNEL_METHOD="kernel_socket.o"
802 RT_METHOD="rt_socket.o"
804 AC_TRY_RUN([#include <errno.h>
805 #include <sys/types.h>
806 #include <sys/socket.h>
812 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
813 if (ac_sock < 0 && errno == EINVAL)
817 [KERNEL_METHOD=kernel_socket.o
818 RT_METHOD=rt_socket.o
819 AC_MSG_RESULT(socket)],
820 [RT_METHOD=rt_ioctl.o
821 AC_MSG_RESULT(ioctl)],
822 [KERNEL_METHOD=kernel_socket.o
823 RT_METHOD=rt_socket.o
824 AC_MSG_RESULT(socket)])
827 AC_SUBST(KERNEL_METHOD)
828 AC_SUBST(OTHER_METHOD)
830 dnl --------------------------
831 dnl Determine IS-IS I/O method
832 dnl --------------------------
833 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
834 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
835 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
836 AC_CHECK_HEADER(net/bpf.h)
837 AC_CHECK_HEADER(sys/dlpi.h)
838 AC_MSG_CHECKING(zebra IS-IS I/O method)
839 if test x"$opsys" = x"gnu-linux"; then
840 AC_MSG_RESULT(pfpacket)
841 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
842 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
844 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
846 if test $ac_cv_header_net_bpf_h = no; then
847 if test $ac_cv_header_sys_dlpi_h = no; then
849 AC_MSG_WARN([*** IS-IS support will not be built ***])
854 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
857 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
860 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
862 dnl ------------------------------------
863 dnl check for broken CMSG_FIRSTHDR macro
864 dnl ------------------------------------
865 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
866 AC_RUN_IFELSE([AC_LANG_SOURCE([[
869 #define __EXTENSIONS__
874 #ifdef HAVE_SYS_TYPES_H
875 #include <sys/types.h>
877 #ifdef HAVE_SYS_SOCKET_H
878 #include <sys/socket.h>
886 msg.msg_control = buf;
887 msg.msg_controllen = 0;
889 if (CMSG_FIRSTHDR(&msg) != NULL)
892 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
893 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
895 dnl ------------------------------
896 dnl check kernel route read method
897 dnl ------------------------------
898 AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
899 [if test "x$netlink" = xyes; then
900 quagga_cv_rtread_method="netlink"
902 for quagga_cv_rtread_method in /proc/net/route /dev/ip /dev/null;
904 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
906 case $quagga_cv_rtread_method in
907 "/proc/net/route") quagga_cv_rtread_method="proc";;
910 *-freebsd*) quagga_cv_rtread_method="sysctl";;
911 *) quagga_cv_rtread_method="getmsg";;
914 quagga_cv_rtread_method="sysctl";;
917 RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
918 AC_SUBST(RTREAD_METHOD)
920 dnl -----------------------------
921 dnl check interface lookup method
922 dnl -----------------------------
924 AC_MSG_CHECKING(interface looking up method)
925 if test "$netlink" = yes; then
926 AC_MSG_RESULT(netlink)
927 IF_METHOD=if_netlink.o
928 elif test "$opsys" = "sol2-6";then
929 AC_MSG_RESULT(Solaris GIF)
931 elif test "$opsys" = "sol8";then
932 AC_MSG_RESULT(Solaris GLIF)
933 IF_METHOD=if_ioctl_solaris.o
934 IOCTL_METHOD=ioctl_solaris.o
935 elif test "$opsys" = "irix" ; then
938 elif test "$opsys" = "openbsd";then
939 AC_MSG_RESULT(openbsd)
941 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
942 AC_MSG_RESULT(sysctl)
943 IF_METHOD=if_sysctl.o
944 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
950 AC_SUBST(IOCTL_METHOD)
952 dnl ---------------------------------------------------------------
953 dnl figure out how to specify an interface in multicast sockets API
954 dnl ---------------------------------------------------------------
955 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
957 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
958 AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
959 #include <sys/param.h>
960 #endif],[#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000)
963 #error No support for BSD struct ip_mreq hack detected
964 #endif],[AC_MSG_RESULT(yes)
965 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
968 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
970 #include <sys/types.h>
971 #include <netinet/in.h>
972 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
973 ], [AC_MSG_RESULT(yes)
974 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
977 dnl ---------------------------------------------------------------
978 dnl figure out how to check link-state
979 dnl ---------------------------------------------------------------
980 AC_CHECK_HEADER([net/if.h],
981 [AC_CHECK_HEADER( [net/if_media.h],
982 [m4_define([LINK_DETECT_INCLUDES],
984 [#include <net/if_media.h>
986 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
987 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
988 [], LINK_DETECT_INCLUDES)],
991 [], QUAGGA_INCLUDES )
993 dnl ------------------------
994 dnl TCP_MD5SIG socket option
995 dnl ------------------------
997 AC_CHECK_HEADER([netinet/tcp.h],
998 [m4_define([MD5_INCLUDES],
1000 [#include <netinet/tcp.h>
1002 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1005 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1006 AC_CHECK_HEADER([linux/tcp.h],
1007 [m4_define([MD5_INCLUDES],
1009 [#include <linux/tcp.h>
1011 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1014 dnl -----------------------
1015 dnl check proc file system.
1016 dnl -----------------------
1017 if test "$netlink" != yes; then
1018 if test -r /proc/net/dev; then
1019 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
1022 if test -r /proc/net/if_inet6; then
1023 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
1029 dnl -----------------------------
1030 dnl check ipforward detect method
1031 dnl -----------------------------
1032 AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
1033 [if test x$cross_compiling = xyes; then
1034 if test x"$opsys" = x"gnu-linux"; then
1035 quagga_cv_ipforward_method=/proc/net/snmp
1037 quagga_cv_ipforward_method=/dev/ip
1040 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1042 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1045 case $quagga_cv_ipforward_method in
1046 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
1049 *-nec-sysv4*) quagga_cv_ipforward_method="ews";;
1050 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1051 *) quagga_cv_ipforward_method="solaris";;
1053 *) quagga_cv_ipforward_method="sysctl";;
1055 IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
1058 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
1063 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1064 if test "${enable_ipv6}" = "no"; then
1065 AC_MSG_RESULT(disabled)
1070 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1072 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1073 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1077 AC_MSG_RESULT(INRIA IPv6)
1081 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1083 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1084 AC_DEFINE(KAME,1,KAME IPv6)
1087 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1088 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1091 dnl -------------------------
1093 dnl default host check
1094 dnl It is not used by Kheops
1095 dnl -------------------------
1096 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1098 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1099 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1100 AC_DEFINE(KAME,1,KAME IPv6 stack)
1103 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1104 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1106 AC_MSG_RESULT(MUSICA)
1110 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1112 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1113 AC_DEFINE(NRL,1,NRL)
1116 if test x"$opsys" = x"bsdi";then
1117 AC_DEFINE(BSDI_NRL,,BSDI)
1118 AC_MSG_RESULT(BSDI_NRL)
1122 dnl ------------------------------------
1123 dnl Solaris 9, 10 and potentially higher
1124 dnl ------------------------------------
1125 elif test x"$opsys" = x"sol8"; then
1127 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1128 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1131 AC_MSG_RESULT(Solaris IPv6)
1135 elif test "${enable_ipv6}" = "yes"; then
1137 #include <linux/version.h>
1138 /* 2.1.128 or later */
1139 #if LINUX_VERSION_CODE >= 0x020180
1143 zebra_cv_linux_ipv6=yes
1144 AC_MSG_RESULT(Linux IPv6)])
1146 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1149 zebra_cv_linux_ipv6=yes
1150 AC_MSG_RESULT(Linux IPv6)
1154 if test "$zebra_cv_linux_ipv6" = "yes";then
1155 AC_MSG_CHECKING(whether libc has IPv6 support)
1156 AC_TRY_LINK([#include <netinet/in.h>
1157 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1160 zebra_cv_linux_ipv6=yes],
1163 zebra_cv_linux_ipv6=no])
1166 if test "$zebra_cv_linux_ipv6" = "yes";then
1167 AC_MSG_CHECKING(for GNU libc >= 2.1)
1168 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1170 #include <features.h>
1171 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1175 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1176 AC_MSG_RESULT(yes)],
1181 if test "$glibc" != "yes"; then
1182 INCLUDES="-I/usr/inet6/include"
1183 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1184 LIB_IPV6="-L/usr/inet6/lib -linet6"
1189 dnl -----------------------
1190 dnl Set IPv6 related values
1191 dnl -----------------------
1192 LIBS="$LIB_IPV6 $LIBS"
1195 if test x"$RIPNGD" = x""; then
1196 AC_MSG_RESULT(IPv4 only)
1200 dnl ------------------
1201 dnl IPv6 header checks
1202 dnl ------------------
1203 if test "x${zebra_cv_ipv6}" = "xyes"; then
1204 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
1205 netinet6/in6_var.h netinet6/nd6.h], [], [],
1209 m4_define([QUAGGA_INCLUDES],dnl
1211 [#if HAVE_NETINET6_IN6_H
1212 #include <netinet6/in6.h>
1214 #if HAVE_NETINET_IN6_VAR_H
1215 #include <netinet/in6_var.h>
1217 #if HAVE_NETINET_ICMP6_H
1218 # include <netinet/icmp6.h>
1220 #if HAVE_NETINET6_IN6_VAR_H
1221 # include <netinet6/in6_var.h>
1223 #if HAVE_NETINET6_ND6_H
1224 # include <netinet6/nd6.h>
1228 dnl disable doc check
1229 if test "${enable_doc}" = "no";then
1235 dnl --------------------
1236 dnl Daemon disable check
1237 dnl --------------------
1238 if test "${enable_zebra}" = "no";then
1243 AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
1245 if test "${enable_bgpd}" = "no";then
1250 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1252 if test "${enable_ripd}" = "no";then
1257 AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
1259 if test "${enable_ospfd}" = "no";then
1264 AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
1266 if test "${enable_babeld}" = "no";then
1271 AM_CONDITIONAL(BABELD, test "x$BABELD" = "xbabeld")
1273 if test "${enable_watchquagga}" = "no";then
1276 WATCHQUAGGA="watchquagga"
1278 AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
1281 if test "${enable_opaque_lsa}" != "no"; then
1282 if test "${enable_ospfapi}" != "no";then
1283 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1285 if test "${enable_ospfclient}" != "no";then
1286 OSPFCLIENT="ospfclient"
1291 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1293 case "${enable_ripngd}" in
1294 "yes") RIPNGD="ripngd";;
1298 AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
1300 case "${enable_ospf6d}" in
1301 "yes") OSPF6D="ospf6d";;
1305 AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
1307 case "${enable_isisd}" in
1308 "yes") ISISD="isisd";;
1312 AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
1314 # XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1315 case "${enable_solaris}" in
1316 "yes") SOLARIS="solaris";;
1321 if test "${enable_bgp_announce}" = "no";then
1322 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1324 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1335 AC_SUBST(WATCHQUAGGA)
1341 AC_SUBST(OSPFCLIENT)
1343 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1344 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1345 AC_CHECK_LIB(crypt, crypt)
1346 AC_CHECK_LIB(resolv, res_init)
1348 dnl ---------------------------------------------------
1349 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1350 dnl ---------------------------------------------------
1351 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1352 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1353 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
1355 dnl ---------------------------
1356 dnl check system has PCRE regexp
1357 dnl ---------------------------
1358 if test "x$enable_pcreposix" = "xyes"; then
1359 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1360 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1363 if test "x$enable_pcreposix" != "xyes"; then
1364 dnl ---------------------------
1365 dnl check system has GNU regexp
1366 dnl ---------------------------
1367 AC_MSG_CHECKING(whether system has GNU regex)
1368 AC_CHECK_LIB(c, regexec,
1369 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1371 [LIB_REGEX="regex.o"])
1373 AC_SUBST(HAVE_LIBPCREPOSIX)
1376 dnl ------------------
1377 dnl check Net-SNMP library
1378 dnl ------------------
1379 if test "${enable_snmp}" != ""; then
1380 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1381 if test x"$NETSNMP_CONFIG" = x"no"; then
1382 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1384 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1385 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1386 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1387 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1394 ])],[AC_MSG_RESULT(yes)],[
1396 AC_MSG_ERROR([--enable-snmp given but not usable])])
1397 AC_DEFINE(HAVE_SNMP,,SNMP)
1398 case "${enable_snmp}" in
1403 SNMP_METHOD="${enable_snmp}"
1406 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1409 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1410 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1411 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1414 dnl ---------------------------
1415 dnl sockaddr and netinet checks
1416 dnl ---------------------------
1417 AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1418 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1420 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1421 struct nd_opt_adv_interval, struct rt_addrinfo,
1422 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1423 [], [], QUAGGA_INCLUDES)
1425 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1426 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1427 struct sockaddr_in6.sin6_scope_id,
1428 struct if6_aliasreq.ifra_lifetime,
1429 struct nd_opt_adv_interval.nd_opt_ai_type],
1430 [], [], QUAGGA_INCLUDES)
1432 dnl ---------------------------
1433 dnl IRDP/pktinfo/icmphdr checks
1434 dnl ---------------------------
1435 AC_CHECK_TYPES([struct in_pktinfo],
1436 [AC_CHECK_TYPES([struct icmphdr],
1437 [if test "${enable_irdp}" != "no"; then
1438 AC_DEFINE(HAVE_IRDP,, IRDP)
1440 [if test "${enable_irdp}" = "yes"; then
1441 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1442 fi], [QUAGGA_INCLUDES])],
1443 [if test "${enable_irdp}" = "yes"; then
1444 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1445 fi], [QUAGGA_INCLUDES])
1447 dnl --------------------------------------
1448 dnl checking for getrusage struct and call
1449 dnl --------------------------------------
1450 AC_MSG_CHECKING(whether getrusage is available)
1451 AC_TRY_COMPILE([#include <sys/resource.h>
1452 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1454 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1457 dnl --------------------------------------
1458 dnl checking for clock_time monotonic struct and call
1459 dnl --------------------------------------
1460 AC_CHECK_DECL(CLOCK_MONOTONIC,
1461 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1462 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1463 ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
1465 dnl -------------------
1466 dnl capabilities checks
1467 dnl -------------------
1468 if test "${enable_capabilities}" != "no"; then
1469 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1470 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1472 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1473 quagga_ac_keepcaps="yes"],
1476 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1477 AC_CHECK_HEADERS(sys/capability.h)
1479 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1480 AC_CHECK_LIB(cap, cap_init,
1481 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1483 quagga_ac_lcaps="yes"]
1486 AC_CHECK_HEADERS(priv.h,
1487 [AC_MSG_CHECKING(Solaris style privileges are available)
1488 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1490 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1491 quagga_ac_scaps="yes"],
1497 if test x"${quagga_ac_scaps}" = x"yes" \
1498 -o x"${quagga_ac_lcaps}" = x"yes"; then
1499 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1504 dnl ---------------------------
1505 dnl check for glibc 'backtrace'
1506 dnl ---------------------------
1507 AC_CHECK_HEADER([execinfo.h],
1508 [AC_CHECK_FUNC([backtrace],
1509 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1510 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1514 dnl -----------------------------------------
1515 dnl check for malloc mallinfo struct and call
1516 dnl this must try and link using LIBS, in
1517 dnl order to check no alternative allocator
1518 dnl has been specified, which might not provide
1519 dnl mallinfo, e.g. such as Umem on Solaris.
1520 dnl -----------------------------------------
1521 AC_CHECK_HEADER([malloc.h],
1522 [AC_MSG_CHECKING(whether mallinfo is available)
1523 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1524 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1526 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1529 ], [], QUAGGA_INCLUDES)
1534 CONFDATE=`date '+%Y%m%d'`
1537 dnl Conditionally enable PIE support for GNU toolchains.
1538 AC_ARG_ENABLE(pie, AS_HELP_STRING([--disable-pie], [Do not build tools as a Position Independent Executables]))
1539 if test "$enable_pie" != "no"; then
1540 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1542 save_LDFLAGS=$LDFLAGS
1543 CFLAGS="$CFLAGS -fPIE"
1544 LDFLAGS="$LDFLAGS -pie"
1545 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1546 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1549 LDFLAGS=$save_LDFLAGS
1551 if test "$ap_cv_cc_pie" = "yes"; then
1560 dnl ------------------------------
1561 dnl set paths for state directory
1562 dnl ------------------------------
1563 AC_MSG_CHECKING(directory to use for state file)
1564 if test "${prefix}" = "NONE"; then
1565 quagga_statedir_prefix="";
1567 quagga_statedir_prefix=${prefix}
1569 if test "${localstatedir}" = '${prefix}/var'; then
1570 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1571 ${quagga_statedir_prefix}/var/adm dnl
1572 ${quagga_statedir_prefix}/etc dnl
1578 test -d $QUAGGA_STATE_DIR && break
1580 quagga_statedir=$QUAGGA_STATE_DIR
1582 quagga_statedir=${localstatedir}
1584 if test $quagga_statedir = "/dev/null"; then
1585 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1587 AC_MSG_RESULT(${quagga_statedir})
1588 AC_SUBST(quagga_statedir)
1590 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1591 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1592 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1593 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1594 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1595 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1596 AC_DEFINE_UNQUOTED(PATH_BABELD_PID, "$quagga_statedir/babeld.pid",babeld PID)
1597 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1598 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1599 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1600 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1601 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1602 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1603 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1604 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1605 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1606 AC_DEFINE_UNQUOTED(BABEL_VTYSH_PATH, "$quagga_statedir/babeld.vty",babeld vty socket)
1607 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1608 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1610 dnl -------------------------------
1611 dnl Quagga sources should always be
1612 dnl current wrt interfaces. Dont
1613 dnl allow deprecated interfaces to
1615 dnl -------------------------------
1616 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1618 dnl ---------------------------
1619 dnl Check htonl works correctly
1620 dnl ---------------------------
1621 AC_MSG_CHECKING(for working htonl)
1622 AC_CACHE_VAL(ac_cv_htonl_works,
1623 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1624 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1627 AC_MSG_RESULT($ac_cv_htonl_works)
1629 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1630 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1631 ospf6d/Makefile isisd/Makefile babeld/Makefile vtysh/Makefile
1632 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
1638 isisd/topology/Makefile
1639 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1640 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1641 AC_CONFIG_FILES([solaris/Makefile])
1643 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1644 ## Hack, but working solution to avoid rebuilding of quagga.info.
1645 ## It's already in CVS until texinfo 4.7 is more common.
1649 Quagga configuration
1650 --------------------
1651 quagga version : ${PACKAGE_VERSION}
1652 host operating system : ${host_os}
1653 source code location : ${srcdir}
1655 compiler flags : ${CFLAGS}
1657 includes : ${INCLUDES}
1658 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1659 state file directory : ${quagga_statedir}
1660 config file directory : `eval echo \`echo ${sysconfdir}\``
1661 example directory : `eval echo \`echo ${exampledir}\``
1662 user to run as : ${enable_user}
1663 group to run as : ${enable_group}
1664 group for vty sockets : ${enable_vty_group}
1665 config file mask : ${enable_configfile_mask}
1666 log file mask : ${enable_logfile_mask}
1668 The above user and group must have read/write access to the state file
1669 directory and to the config files in the config file directory."
1671 if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1672 Warning: The ${MAKE-make} programme detected, either in your path or
1673 via the MAKE variable, is not GNU Make. GNU make may be installed as
1674 gmake on some systems. and is required to complete a build of Quagga