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_PATH_PROG(PERL, perl)
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 pdflatex and latexmk are needed to build HACKING.pdf
77 AC_CHECK_PROG([PDFLATEX],[pdflatex],[pdflatex],[/bin/false])
78 AC_CHECK_PROG([LATEXMK],[latexmk],[latexmk],[/bin/false])
79 if test "x$PDFLATEX" = "x/bin/false" -o "x$LATEXMK" = "x/bin/false"; then
80 AC_MSG_WARN([Will not be able to make PDF versions of TeX documents])
84 AM_CONDITIONAL([HAVE_LATEX], [test "x$HAVE_LATEX" = "xtrue"])
86 dnl ------------------------------------------------------------------
87 dnl Intel compiler check. Although Intel tries really hard to make icc
88 dnl look like gcc, there are some differences. It's very verbose with
89 dnl -Wall and it doesn't support the individual -W options.
90 dnl ------------------------------------------------------------------
91 if test "x${GCC}" = "xyes" ; then
93 AC_MSG_CHECKING([whether we are using the Intel compiler])
94 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
95 [AC_MSG_RESULT([no])],
100 AC_MSG_CHECKING([whether we are using SunPro compiler])
101 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
102 [AC_MSG_RESULT([no])],
104 AC_MSG_RESULT([yes])]
108 dnl ---------------------------------------------
109 dnl If CLFAGS doesn\'t exist set default value
110 dnl AC_PROG_CC will have set minimal default
111 dnl already, eg "-O2 -g" for gcc, "-g" for others
112 dnl (Wall is gcc specific... have to make sure
113 dnl gcc is being used before setting it)
115 dnl Intel icc 8.0 also sets __GNUC__,
116 dnl but doesn't support all these fancy -W options.
117 dnl Intel compiler warnings we ignore:
118 dnl 279: controlling expression is constant.
119 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
120 dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
122 dnl 981: operands are evaluated in unspecified order.
124 dnl Sun Studio 10 / SunPro 5.7 is also supported,
125 dnl so lets set some sane CFLAGS for it.
126 dnl ---------------------------------------------
128 AC_MSG_CHECKING([whether to set a default CFLAGS])
129 if test "x${cflags_specified}" = "x" ; then
132 CFLAGS="-Os -g -Wall"
133 AC_MSG_RESULT([Intel default])
136 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
137 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
138 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
139 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
140 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
141 # TODO: conditionally addd -Wpacked if handled
142 AC_MSG_RESULT([gcc default])
145 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
146 AC_MSG_RESULT([SunPro default])
149 AC_MSG_RESULT([unknown compiler])
153 AC_MSG_RESULT([CFLAGS supplied by user])
162 AC_CHECK_TOOL(AR, ar)
164 dnl ---------------------------
165 dnl We, perhaps unfortunately,
166 dnl depend on GNU Make specific
168 dnl Give the user a warning if
170 dnl ---------------------------
171 AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
172 [quagga_cv_gnu_make=no
173 if ${MAKE-make} --version 2>/dev/null | \
174 grep '^GNU Make ' >/dev/null ; then
175 quagga_cv_gnu_make=yes;
180 dnl -----------------
181 dnl System extensions
182 dnl -----------------
190 dnl ----------------------
191 dnl Packages configuration
192 dnl ----------------------
193 AC_ARG_WITH(pkg-extra-version,
194 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
195 [EXTRAVERSION=$withval],)
196 AC_ARG_WITH(pkg-git-version,
197 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
198 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
200 [ --enable-vtysh include integrated vty shell for Quagga])
202 [ --disable-ipv6 turn off IPv6 related features and daemons])
204 [ --disable-doc do not build docs])
206 [ --disable-tests do not build tests])
208 [ --disable-zebra do not build zebra daemon])
210 [ --disable-bgpd do not build bgpd])
212 [ --disable-ripd do not build ripd])
213 AC_ARG_ENABLE(ripngd,
214 [ --disable-ripngd do not build ripngd])
216 [ --disable-ospfd do not build ospfd])
217 AC_ARG_ENABLE(ospf6d,
218 [ --disable-ospf6d do not build ospf6d])
219 AC_ARG_ENABLE(babeld,
220 [ --disable-babeld do not build babeld])
221 AC_ARG_ENABLE(watchquagga,
222 [ --disable-watchquagga do not build watchquagga])
224 [ --enable-isisd build isisd])
225 AC_ARG_ENABLE(solaris,
226 [ --enable-solaris build solaris])
227 AC_ARG_ENABLE(bgp-announce,
228 [ --disable-bgp-announce, turn off BGP route announcement])
229 AC_ARG_ENABLE(netlink,
230 [ --enable-netlink force to use Linux netlink interface])
231 AC_ARG_ENABLE(broken-aliases,
232 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
234 [ --enable-snmp=ARG enable SNMP support (smux or agentx)])
236 [ --with-libpam use libpam for PAM support in vtysh])
237 AC_ARG_ENABLE(tcp-zebra,
238 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
239 AC_ARG_ENABLE(opaque-lsa,
240 AC_HELP_STRING([--disable-opaque-lsa],[do not build OSPF Opaque-LSA with OSPFAPI support (RFC2370)]))
241 AC_ARG_ENABLE(ospfapi,
242 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database])
243 AC_ARG_ENABLE(ospfclient,
244 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
245 (this is the default if --disable-ospfapi is set)])
246 AC_ARG_ENABLE(ospf-te,
247 AC_HELP_STRING([--disable-ospf-te],[disable Traffic Engineering Extension to OSPF]))
248 AC_ARG_ENABLE(multipath,
249 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
251 AC_HELP_STRING([--enable-user=user], [user to run Quagga suite as (default quagga)]))
253 AC_HELP_STRING([--enable-group=group], [group to run Quagga suite as (default quagga)]))
254 AC_ARG_ENABLE(vty_group,
255 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
256 AC_ARG_ENABLE(configfile_mask,
257 [ --enable-configfile-mask=ARG set mask for config files])
258 AC_ARG_ENABLE(logfile_mask,
259 [ --enable-logfile-mask=ARG set mask for log files])
262 [ --disable-rtadv disable IPV6 router advertisement feature])
264 [ --enable-irdp enable IRDP server support in zebra])
265 AC_ARG_ENABLE(isis_topology,
266 [ --enable-isis-topology enable IS-IS topology generator])
267 AC_ARG_ENABLE(capabilities,
268 [ --disable-capabilities disable using POSIX capabilities])
269 AC_ARG_ENABLE(gcc_ultra_verbose,
270 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
271 AC_ARG_ENABLE(linux24_tcp_md5,
272 [ --enable-linux24-tcp-md5 enable support for old, Linux-2.4 RFC2385 patch])
273 AC_ARG_ENABLE(gcc-rdynamic,
274 [ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
275 AC_ARG_ENABLE(time-check,
276 [ --disable-time-check disable slow thread warning messages])
277 AC_ARG_ENABLE(pcreposix,
278 [ --enable-pcreposix enable using PCRE Posix libs for regex functions])
280 [ --enable-fpm enable Forwarding Plane Manager support])
282 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
283 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
284 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
285 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
286 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
289 if test x"${enable_gcc_rdynamic}" = x"yes" ; then
290 LDFLAGS="${LDFLAGS} -rdynamic"
293 if test x"${enable_time_check}" != x"no" ; then
294 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
295 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
297 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
301 if test "${enable_fpm}" = "yes"; then
302 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
305 if test "${enable_broken_aliases}" = "yes"; then
306 if test "${enable_netlink}" = "yes"
308 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
310 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
314 if test "${enable_tcp_zebra}" = "yes"; then
315 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
318 if test "${enable_opaque_lsa}" != "no"; then
319 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
322 if test "${enable_ospf_te}" != "no"; then
323 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
324 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
327 if test "${enable_linux24_tcp_md5}" = "yes"; then
328 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
331 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
332 if test "${enable_rtadv}" != "no"; then
334 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
339 if test "${enable_irdp}" = "yes"; then
340 AC_DEFINE(HAVE_IRDP,, IRDP )
343 if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
344 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
345 ISIS_TOPOLOGY_INCLUDES="-I\$(srcdir)/topology"
346 ISIS_TOPOLOGY_DIR="topology"
347 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
350 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
351 AC_SUBST(ISIS_TOPOLOGY_DIR)
352 AC_SUBST(ISIS_TOPOLOGY_LIB)
354 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
356 elif test "${enable_user}" = "no"; then
360 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
361 enable_group="quagga"
362 elif test "${enable_group}" = "no"; then
366 if test x"${enable_vty_group}" = x"yes" ; then
367 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
368 elif test x"${enable_vty_group}" != x""; then
369 if test x"${enable_vty_group}" != x"no"; then
370 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
373 AC_SUBST([enable_user])
374 AC_SUBST([enable_group])
375 AC_SUBST([enable_vty_group])
376 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
377 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
379 enable_configfile_mask=${enable_configfile_mask:-0600}
380 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
382 enable_logfile_mask=${enable_logfile_mask:-0600}
383 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
387 case "${enable_multipath}" in
389 MULTIPATH_NUM="${enable_multipath}"
394 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
398 AC_SUBST(MULTIPATH_NUM)
400 dnl -----------------------------------
401 dnl Add extra version string to package
402 dnl name, string and version fields.
403 dnl -----------------------------------
404 if test "x${EXTRAVERSION}" != "x" ; then
405 VERSION="${VERSION}${EXTRAVERSION}"
406 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
407 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
410 if test "x$with_pkg_git_version" = "xyes"; then
411 if test -d "${srcdir}/.git"; then
412 AC_DEFINE(GIT_VERSION, [1], [include git version info])
413 else with_pkg_git_version="no"
414 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
417 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
419 dnl ------------------------------------
420 dnl Check C keywords and standard types
421 dnl ------------------------------------
436 dnl -------------------------
437 dnl Check other header files.
438 dnl -------------------------
439 AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
440 sys/types.h linux/version.h netdb.h asm/types.h \
441 sys/param.h limits.h signal.h \
442 sys/socket.h netinet/in.h time.h sys/time.h])
444 dnl Utility macro to avoid retyping includes all the time
445 m4_define([QUAGGA_INCLUDES],
448 #define __EXTENSIONS__
460 # include <sys/types.h>
462 /* sys/conf.h depends on param.h on FBSD at least */
464 # include <sys/param.h>
466 /* Required for MAXSIG */
470 #if HAVE_SYS_SOCKET_H
471 # include <sys/socket.h>
473 #if HAVE_NETINET_IN_H
474 # include <netinet/in.h>
476 #ifdef TIME_WITH_SYS_TIME
477 # include <sys/time.h>
480 # ifdef HAVE_SYS_TIME_H
481 # include <sys/time.h>
485 #endif /* TIME_WITH_SYS_TIME */
488 dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
489 dnl round below execution begins, otherwise it doesn't properly detect
490 dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
491 dnl on FreeBSD (BZ#408).
493 AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
495 m4_define([QUAGGA_INCLUDES],
502 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
503 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
504 dnl an additional round for it.
506 AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
508 m4_define([QUAGGA_INCLUDES],
510 [#if HAVE_NET_IF_VAR_H
511 # include <net/if_var.h>
515 AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
516 net/if_dl.h net/netopt.h net/route.h \
517 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
518 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
519 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
520 [], [], QUAGGA_INCLUDES)
522 AC_CHECK_HEADERS([ucontext.h], [], [],
525 #endif /* __USE_GNU */
529 m4_define([QUAGGA_INCLUDES],
534 #if HAVE_NETINET_IN_SYSTM_H
535 # include <netinet/in_systm.h>
537 #if HAVE_NETINET_IN_VAR_H
538 # include <netinet/in_var.h>
541 # include <net/if_dl.h>
543 #if HAVE_NET_NETOPT_H
544 # include <net/netopt.h>
547 # include <net/route.h>
550 # include <inet/nd.h>
553 # include <arpa/inet.h>
555 /* Required for IDRP */
556 #if HAVE_NETINET_IP_ICMP_H
557 # include <netinet/ip_icmp.h>
561 dnl V6 headers are checked below, after we check for v6
563 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
565 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
567 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
568 AC_DEFINE(SUNOS_5, 1, SunOS 5)
569 AC_CHECK_LIB(xnet, main)
573 | [*-sunos5.1[0-9]] \
574 | [*-sunos5.1[0-9].[0-9]] \
575 | [*-solaris2.[8-9]] \
576 | [*-solaris2.1[0-9]] \
577 | [*-solaris2.1[0-9].[0-9]])
579 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
580 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
581 AC_CHECK_LIB(socket, main)
582 AC_CHECK_LIB(nsl, main)
583 AC_CHECK_LIB(umem, main)
584 AC_CHECK_FUNCS([printstack],
585 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
586 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
590 *-sunos5* | *-solaris2*)
591 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
592 AC_CHECK_LIB(socket, main)
593 AC_CHECK_LIB(nsl, main)
598 AC_DEFINE(GNU_LINUX,,GNU Linux)
601 AC_CHECK_LIB(nsl, gethostbyname)
602 AC_CHECK_LIB(socket, socket)
606 AC_DEFINE(OPEN_BSD,,OpenBSD)
610 OTHER_METHOD="mtu_kvm.o"
611 AC_CHECK_LIB(kvm, main)
615 AC_DEFINE(IRIX_65,,IRIX 6.5)
621 dnl ---------------------
622 dnl Integrated VTY option
623 dnl ---------------------
624 case "${enable_vtysh}" in
625 "yes") VTYSH="vtysh";
626 AC_DEFINE(VTYSH,,VTY shell)
627 dnl Vtysh uses libreadline, which looks for termcap functions at
628 dnl configure time. We follow readlines search order.
629 dnl The required procedures are in libtermcap on NetBSD, in
630 dnl [TODO] on Linux, and in [TODO] on Solaris.
631 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
632 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
633 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
634 [AC_CHECK_LIB(ncurses, tputs,
635 LIBREADLINE="$LIBREADLINE -lncurses")]
639 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
641 if test $ac_cv_lib_readline_main = no; then
642 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
644 AC_CHECK_HEADER(readline/history.h)
645 if test $ac_cv_header_readline_history_h = no;then
646 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
648 AC_CHECK_LIB(readline, rl_completion_matches,
649 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
650 if test $ac_cv_lib_readline_rl_completion_matches = no; then
651 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
657 AC_SUBST(LIBREADLINE)
658 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
663 dnl Quagga detects the PAM library it is built against by checking for a
664 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
665 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
666 dnl openpam.h doesn't do that, although depends on the header too. Hence a
667 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
670 if test "$with_libpam" = "yes"; then
671 AC_CHECK_HEADER([security/pam_misc.h],
672 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
673 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
674 pam_conv_func="misc_conv"
677 AC_CHECK_HEADER([security/openpam.h],
678 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
679 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
680 pam_conv_func="openpam_ttyconv"
682 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
683 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
684 AC_MSG_WARN([*** pam support will not be built ***])
689 if test "$with_libpam" = "yes"; then
690 dnl took this test from proftpds configure.in and suited to our needs
691 dnl -------------------------------------------------------------------------
693 dnl This next check looks funky due to a linker problem with some versions
694 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
695 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
696 dnl with RedHat 6.2 and Debian 2.2 or better.
697 AC_CHECK_LIB(pam, pam_start,
698 [AC_CHECK_LIB(pam, $pam_conv_func,
699 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
701 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
702 LIBPAM="-lpam -lpam_misc"]
706 [AC_CHECK_LIB(pam, pam_end,
707 [AC_CHECK_LIB(pam, $pam_conv_func,
708 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
709 LIBPAM="-lpam -ldl"],
710 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
711 LIBPAM="-lpam -ldl -lpam_misc"]
713 ],AC_MSG_WARN([*** pam support will not be built ***]),
720 dnl -------------------------------
721 dnl Endian-ness check
722 dnl -------------------------------
725 dnl -------------------------------
726 dnl check the size in byte of the C
727 dnl -------------------------------
728 dnl AC_CHECK_SIZEOF(char)
729 dnl AC_CHECK_SIZEOF(int)
730 dnl AC_CHECK_SIZEOF(short)
731 dnl AC_CHECK_SIZEOF(long)
733 dnl ----------------------------
734 dnl check existance of functions
735 dnl ----------------------------
743 AC_FUNC_SELECT_ARGTYPES
745 dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
746 dnl can lead to strange side effects. So we just check for strnlen
747 dnl directly, see below.
748 dnl AC_FUNC_STRNLENdnl
751 dnl -------------------------------
752 dnl bgpd needs pow() and hence libm
753 dnl -------------------------------
755 AC_CHECK_HEADER([math.h],
756 [AC_CHECK_LIB([m], [pow],
759 AC_DEFINE(HAVE_LIBM,, Have libm)
760 AC_CHECK_FUNCS(pow,[],[LIBM=""])
763 if test x"$LIBM" = x ; then
764 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
772 AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
773 inet_ntoa inet_aton strnlen \
774 memchr memmove memset select socket \
775 strcasecmp strchr strcspn strdup strerror \
776 strncasecmp strndup strrchr strspn strstr \
777 strtol strtoul strlcat strlcpy \
778 daemon snprintf vsnprintf \
779 if_nametoindex if_indextoname getifaddrs \
782 AC_CHECK_FUNCS(setproctitle, ,
783 [AC_CHECK_LIB(util, setproctitle,
785 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
791 dnl ------------------------------------
792 dnl Determine routing get and set method
793 dnl ------------------------------------
794 AC_MSG_CHECKING(zebra between kernel interface method)
795 if test x"$opsys" = x"gnu-linux"; then
796 if test "${enable_netlink}" = "yes";then
797 AC_MSG_RESULT(netlink)
798 RT_METHOD=rt_netlink.o
799 AC_DEFINE(HAVE_NETLINK,,netlink)
801 elif test "${enable_netlink}" = "no"; then
806 AC_MSG_RESULT(netlink)
807 RT_METHOD=rt_netlink.o
808 AC_DEFINE(HAVE_NETLINK,,netlink)
811 elif test x"$opsys" = x"sol2-6";then
812 AC_MSG_RESULT(Route socket)
813 KERNEL_METHOD="kernel_socket.o"
814 RT_METHOD="rt_socket.o"
815 elif test x"$opsys" = x"sol8";then
816 AC_MSG_RESULT(Route socket)
817 KERNEL_METHOD="kernel_socket.o"
818 RT_METHOD="rt_socket.o"
819 elif test "$opsys" = "irix" ; then
820 AC_MSG_RESULT(Route socket)
821 KERNEL_METHOD="kernel_socket.o"
822 RT_METHOD="rt_socket.o"
824 AC_TRY_RUN([#include <errno.h>
825 #include <sys/types.h>
826 #include <sys/socket.h>
832 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
833 if (ac_sock < 0 && errno == EINVAL)
837 [KERNEL_METHOD=kernel_socket.o
838 RT_METHOD=rt_socket.o
839 AC_MSG_RESULT(socket)],
840 [RT_METHOD=rt_ioctl.o
841 AC_MSG_RESULT(ioctl)],
842 [KERNEL_METHOD=kernel_socket.o
843 RT_METHOD=rt_socket.o
844 AC_MSG_RESULT(socket)])
847 AC_SUBST(KERNEL_METHOD)
848 AC_SUBST(OTHER_METHOD)
849 AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
851 dnl --------------------------
852 dnl Determine IS-IS I/O method
853 dnl --------------------------
854 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
855 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
856 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
857 AC_CHECK_HEADER(net/bpf.h)
858 AC_CHECK_HEADER(sys/dlpi.h)
859 AC_MSG_CHECKING(zebra IS-IS I/O method)
860 if test x"$opsys" = x"gnu-linux"; then
861 AC_MSG_RESULT(pfpacket)
862 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
863 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
865 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
867 if test $ac_cv_header_net_bpf_h = no; then
868 if test $ac_cv_header_sys_dlpi_h = no; then
870 AC_MSG_WARN([*** IS-IS support will not be built ***])
875 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
878 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
881 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
883 dnl ------------------------------------
884 dnl check for broken CMSG_FIRSTHDR macro
885 dnl ------------------------------------
886 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
887 AC_RUN_IFELSE([AC_LANG_SOURCE([[
890 #define __EXTENSIONS__
895 #ifdef HAVE_SYS_TYPES_H
896 #include <sys/types.h>
898 #ifdef HAVE_SYS_SOCKET_H
899 #include <sys/socket.h>
907 msg.msg_control = buf;
908 msg.msg_controllen = 0;
910 if (CMSG_FIRSTHDR(&msg) != NULL)
913 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
914 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
916 dnl ------------------------------
917 dnl check kernel route read method
918 dnl ------------------------------
919 AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
920 [if test "x$netlink" = xyes; then
921 quagga_cv_rtread_method="netlink"
923 for quagga_cv_rtread_method in /proc/net/route /dev/ip /dev/null;
925 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
927 case $quagga_cv_rtread_method in
928 "/proc/net/route") quagga_cv_rtread_method="proc";;
931 *-freebsd*) quagga_cv_rtread_method="sysctl";;
932 *) quagga_cv_rtread_method="getmsg";;
935 quagga_cv_rtread_method="sysctl";;
938 RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
939 AC_SUBST(RTREAD_METHOD)
941 dnl -----------------------------
942 dnl check interface lookup method
943 dnl -----------------------------
945 AC_MSG_CHECKING(interface looking up method)
946 if test "$netlink" = yes; then
947 AC_MSG_RESULT(netlink)
948 IF_METHOD=if_netlink.o
949 elif test "$opsys" = "sol2-6";then
950 AC_MSG_RESULT(Solaris GIF)
952 elif test "$opsys" = "sol8";then
953 AC_MSG_RESULT(Solaris GLIF)
954 IF_METHOD=if_ioctl_solaris.o
955 IOCTL_METHOD=ioctl_solaris.o
956 elif test "$opsys" = "irix" ; then
959 elif test "$opsys" = "openbsd";then
960 AC_MSG_RESULT(openbsd)
962 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
963 AC_MSG_RESULT(sysctl)
964 IF_METHOD=if_sysctl.o
965 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
971 AC_SUBST(IOCTL_METHOD)
973 dnl ---------------------------------------------------------------
974 dnl figure out how to specify an interface in multicast sockets API
975 dnl ---------------------------------------------------------------
976 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
978 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
979 AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
980 #include <sys/param.h>
981 #endif],[#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000) || defined(__OpenBSD__)
984 #error No support for BSD struct ip_mreq hack detected
985 #endif],[AC_MSG_RESULT(yes)
986 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
989 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
991 #include <sys/types.h>
992 #include <netinet/in.h>
993 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
994 ], [AC_MSG_RESULT(yes)
995 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
998 dnl ---------------------------------------------------------------
999 dnl figure out how to check link-state
1000 dnl ---------------------------------------------------------------
1001 AC_CHECK_HEADER([net/if.h],
1002 [AC_CHECK_HEADER( [net/if_media.h],
1003 [m4_define([LINK_DETECT_INCLUDES],
1005 [#include <net/if_media.h>
1007 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1008 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1009 [], LINK_DETECT_INCLUDES)],
1012 [], QUAGGA_INCLUDES )
1014 dnl ---------------------------------------------------------------
1015 dnl Additional, newer way to check link-state using ifi_link_state.
1016 dnl Not available in all BSD's when ifmediareq available
1017 dnl ---------------------------------------------------------------
1018 AC_CHECK_HEADER([net/if.h],
1019 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1020 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1021 [], QUAGGA_INCLUDES),
1024 dnl ------------------------
1025 dnl TCP_MD5SIG socket option
1026 dnl ------------------------
1028 AC_CHECK_HEADER([netinet/tcp.h],
1029 [m4_define([MD5_INCLUDES],
1031 [#include <netinet/tcp.h>
1033 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1036 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1037 AC_CHECK_HEADER([linux/tcp.h],
1038 [m4_define([MD5_INCLUDES],
1040 [#include <linux/tcp.h>
1042 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1045 dnl -----------------------
1046 dnl check proc file system.
1047 dnl -----------------------
1048 if test "$netlink" != yes; then
1049 if test -r /proc/net/dev; then
1050 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
1053 if test -r /proc/net/if_inet6; then
1054 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
1060 dnl -----------------------------
1061 dnl check ipforward detect method
1062 dnl -----------------------------
1063 AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
1064 [if test x$cross_compiling = xyes; then
1065 if test x"$opsys" = x"gnu-linux"; then
1066 quagga_cv_ipforward_method=/proc/net/snmp
1068 quagga_cv_ipforward_method=/dev/ip
1071 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1073 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1076 case $quagga_cv_ipforward_method in
1077 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
1080 *-nec-sysv4*) quagga_cv_ipforward_method="ews";;
1081 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1082 *) quagga_cv_ipforward_method="solaris";;
1084 *) quagga_cv_ipforward_method="sysctl";;
1086 IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
1089 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
1094 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1095 if test "${enable_ipv6}" = "no"; then
1096 AC_MSG_RESULT(disabled)
1101 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1103 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1104 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1108 AC_MSG_RESULT(INRIA IPv6)
1112 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1114 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1115 AC_DEFINE(KAME,1,KAME IPv6)
1118 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1119 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1122 dnl -------------------------
1124 dnl default host check
1125 dnl It is not used by Kheops
1126 dnl -------------------------
1127 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1129 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1130 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1131 AC_DEFINE(KAME,1,KAME IPv6 stack)
1134 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1135 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1137 AC_MSG_RESULT(MUSICA)
1141 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1143 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1144 AC_DEFINE(NRL,1,NRL)
1147 if test x"$opsys" = x"bsdi";then
1148 AC_DEFINE(BSDI_NRL,,BSDI)
1149 AC_MSG_RESULT(BSDI_NRL)
1153 dnl ------------------------------------
1154 dnl Solaris 9, 10 and potentially higher
1155 dnl ------------------------------------
1156 elif test x"$opsys" = x"sol8"; then
1158 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1159 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1162 AC_MSG_RESULT(Solaris IPv6)
1166 elif test "${enable_ipv6}" = "yes"; then
1168 #include <linux/version.h>
1169 /* 2.1.128 or later */
1170 #if LINUX_VERSION_CODE >= 0x020180
1174 zebra_cv_linux_ipv6=yes
1175 AC_MSG_RESULT(Linux IPv6)])
1177 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1180 zebra_cv_linux_ipv6=yes
1181 AC_MSG_RESULT(Linux IPv6)
1185 if test "$zebra_cv_linux_ipv6" = "yes";then
1186 AC_MSG_CHECKING(whether libc has IPv6 support)
1187 AC_TRY_LINK([#include <netinet/in.h>
1188 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1191 zebra_cv_linux_ipv6=yes],
1194 zebra_cv_linux_ipv6=no])
1197 if test "$zebra_cv_linux_ipv6" = "yes";then
1198 AC_MSG_CHECKING(for GNU libc >= 2.1)
1199 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1201 #include <features.h>
1202 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1206 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1207 AC_MSG_RESULT(yes)],
1212 if test "$glibc" != "yes"; then
1213 INCLUDES="-I/usr/inet6/include"
1214 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1215 LIB_IPV6="-L/usr/inet6/lib -linet6"
1220 dnl -----------------------
1221 dnl Set IPv6 related values
1222 dnl -----------------------
1223 LIBS="$LIB_IPV6 $LIBS"
1226 if test x"$RIPNGD" = x""; then
1227 AC_MSG_RESULT(IPv4 only)
1231 dnl ------------------
1232 dnl IPv6 header checks
1233 dnl ------------------
1234 if test "x${zebra_cv_ipv6}" = "xyes"; then
1235 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
1236 netinet6/in6_var.h netinet6/nd6.h], [], [],
1240 m4_define([QUAGGA_INCLUDES],dnl
1242 [#if HAVE_NETINET6_IN6_H
1243 #include <netinet6/in6.h>
1245 #if HAVE_NETINET_IN6_VAR_H
1246 #include <netinet/in6_var.h>
1248 #if HAVE_NETINET_ICMP6_H
1249 # include <netinet/icmp6.h>
1251 #if HAVE_NETINET6_IN6_VAR_H
1252 # include <netinet6/in6_var.h>
1254 #if HAVE_NETINET6_ND6_H
1255 # include <netinet6/nd6.h>
1259 dnl disable doc check
1260 if test "${enable_doc}" = "no";then
1266 dnl can't use TESTS as name, that's special with automake
1267 if test "${enable_tests}" = "no";then
1273 dnl --------------------
1274 dnl Daemon disable check
1275 dnl --------------------
1276 if test "${enable_zebra}" = "no";then
1281 AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
1283 if test "${enable_bgpd}" = "no";then
1288 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1290 if test "${enable_ripd}" = "no";then
1295 AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
1297 if test "${enable_ospfd}" = "no";then
1302 AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
1304 if test "${enable_babeld}" = "no";then
1309 AM_CONDITIONAL(BABELD, test "x$BABELD" = "xbabeld")
1311 if test "${enable_watchquagga}" = "no";then
1314 WATCHQUAGGA="watchquagga"
1316 AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
1319 if test "${enable_opaque_lsa}" != "no"; then
1320 if test "${enable_ospfapi}" != "no";then
1321 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1323 if test "${enable_ospfclient}" != "no";then
1324 OSPFCLIENT="ospfclient"
1329 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1331 case "${enable_ripngd}" in
1332 "yes") RIPNGD="ripngd";;
1336 AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
1338 case "${enable_ospf6d}" in
1339 "yes") OSPF6D="ospf6d";;
1343 AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
1345 case "${enable_isisd}" in
1346 "yes") ISISD="isisd";;
1350 AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
1352 # XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1353 case "${enable_solaris}" in
1354 "yes") SOLARIS="solaris";;
1359 if test "${enable_bgp_announce}" = "no";then
1360 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1362 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1366 AC_SUBST(BUILD_TESTS)
1374 AC_SUBST(WATCHQUAGGA)
1380 AC_SUBST(OSPFCLIENT)
1382 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1383 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1384 AC_CHECK_LIB(crypt, crypt)
1385 AC_CHECK_LIB(resolv, res_init)
1387 dnl ---------------------------------------------------
1388 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1389 dnl ---------------------------------------------------
1390 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1391 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1392 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
1394 dnl ---------------------------
1395 dnl check system has PCRE regexp
1396 dnl ---------------------------
1397 if test "x$enable_pcreposix" = "xyes"; then
1398 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1399 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1402 if test "x$enable_pcreposix" != "xyes"; then
1403 dnl ---------------------------
1404 dnl check system has GNU regexp
1405 dnl ---------------------------
1406 AC_MSG_CHECKING(whether system has GNU regex)
1407 AC_CHECK_LIB(c, regexec,
1408 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1410 [LIB_REGEX="regex.o"])
1412 AC_SUBST(HAVE_LIBPCREPOSIX)
1415 dnl ------------------
1416 dnl check Net-SNMP library
1417 dnl ------------------
1418 if test "${enable_snmp}" != ""; then
1419 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1420 if test x"$NETSNMP_CONFIG" = x"no"; then
1421 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1423 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1424 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1425 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1426 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1433 ])],[AC_MSG_RESULT(yes)],[
1435 AC_MSG_ERROR([--enable-snmp given but not usable])])
1436 AC_DEFINE(HAVE_SNMP,,SNMP)
1437 case "${enable_snmp}" in
1442 SNMP_METHOD="${enable_snmp}"
1445 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1448 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1449 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1450 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1453 dnl ---------------------------
1454 dnl sockaddr and netinet checks
1455 dnl ---------------------------
1456 AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1457 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1459 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1460 struct nd_opt_adv_interval, struct rt_addrinfo,
1461 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1462 [], [], QUAGGA_INCLUDES)
1464 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1465 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1466 struct sockaddr_in6.sin6_scope_id,
1467 struct if6_aliasreq.ifra_lifetime,
1468 struct nd_opt_adv_interval.nd_opt_ai_type],
1469 [], [], QUAGGA_INCLUDES)
1471 dnl ---------------------------
1472 dnl IRDP/pktinfo/icmphdr checks
1473 dnl ---------------------------
1474 AC_CHECK_TYPES([struct in_pktinfo],
1475 [AC_CHECK_TYPES([struct icmphdr],
1476 [if test "${enable_irdp}" != "no"; then
1477 AC_DEFINE(HAVE_IRDP,, IRDP)
1479 [if test "${enable_irdp}" = "yes"; then
1480 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1481 fi], [QUAGGA_INCLUDES])],
1482 [if test "${enable_irdp}" = "yes"; then
1483 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1484 fi], [QUAGGA_INCLUDES])
1486 dnl --------------------------------------
1487 dnl checking for getrusage struct and call
1488 dnl --------------------------------------
1489 AC_MSG_CHECKING(whether getrusage is available)
1490 AC_TRY_COMPILE([#include <sys/resource.h>
1491 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1493 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1496 dnl --------------------------------------
1497 dnl checking for clock_time monotonic struct and call
1498 dnl --------------------------------------
1499 AC_CHECK_DECL(CLOCK_MONOTONIC,
1500 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1501 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1502 ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
1504 dnl -------------------
1505 dnl capabilities checks
1506 dnl -------------------
1507 if test "${enable_capabilities}" != "no"; then
1508 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1509 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1511 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1512 quagga_ac_keepcaps="yes"],
1515 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1516 AC_CHECK_HEADERS(sys/capability.h)
1518 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1519 AC_CHECK_LIB(cap, cap_init,
1520 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1522 quagga_ac_lcaps="yes"]
1525 AC_CHECK_HEADERS(priv.h,
1526 [AC_MSG_CHECKING(Solaris style privileges are available)
1527 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1529 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1530 quagga_ac_scaps="yes"],
1536 if test x"${quagga_ac_scaps}" = x"yes" \
1537 -o x"${quagga_ac_lcaps}" = x"yes"; then
1538 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1543 dnl ---------------------------
1544 dnl check for glibc 'backtrace'
1545 dnl ---------------------------
1546 AC_CHECK_HEADER([execinfo.h],
1547 [AC_CHECK_FUNC([backtrace],
1548 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1549 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1553 dnl -----------------------------------------
1554 dnl check for malloc mallinfo struct and call
1555 dnl this must try and link using LIBS, in
1556 dnl order to check no alternative allocator
1557 dnl has been specified, which might not provide
1558 dnl mallinfo, e.g. such as Umem on Solaris.
1559 dnl -----------------------------------------
1560 AC_CHECK_HEADER([malloc.h],
1561 [AC_MSG_CHECKING(whether mallinfo is available)
1562 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1563 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1565 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1568 ], [], QUAGGA_INCLUDES)
1573 CONFDATE=`date '+%Y%m%d'`
1576 dnl Conditionally enable PIE support for GNU toolchains.
1577 AC_ARG_ENABLE(pie, AS_HELP_STRING([--disable-pie], [Do not build tools as a Position Independent Executables]))
1578 if test "$enable_pie" != "no"; then
1579 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1581 save_LDFLAGS=$LDFLAGS
1582 CFLAGS="$CFLAGS -fPIE"
1583 LDFLAGS="$LDFLAGS -pie"
1584 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1585 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1588 LDFLAGS=$save_LDFLAGS
1590 if test "$ap_cv_cc_pie" = "yes"; then
1599 dnl ------------------------------
1600 dnl set paths for state directory
1601 dnl ------------------------------
1602 AC_MSG_CHECKING(directory to use for state file)
1603 if test "${prefix}" = "NONE"; then
1604 quagga_statedir_prefix="";
1606 quagga_statedir_prefix=${prefix}
1608 if test "${localstatedir}" = '${prefix}/var'; then
1609 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1610 ${quagga_statedir_prefix}/var/adm dnl
1611 ${quagga_statedir_prefix}/etc dnl
1617 test -d $QUAGGA_STATE_DIR && break
1619 quagga_statedir=$QUAGGA_STATE_DIR
1621 quagga_statedir=${localstatedir}
1623 if test $quagga_statedir = "/dev/null"; then
1624 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1626 AC_MSG_RESULT(${quagga_statedir})
1627 AC_SUBST(quagga_statedir)
1629 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1630 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1631 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1632 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1633 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1634 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1635 AC_DEFINE_UNQUOTED(PATH_BABELD_PID, "$quagga_statedir/babeld.pid",babeld PID)
1636 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1637 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1638 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1639 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1640 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1641 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1642 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1643 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1644 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1645 AC_DEFINE_UNQUOTED(BABEL_VTYSH_PATH, "$quagga_statedir/babeld.vty",babeld vty socket)
1646 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1647 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1649 dnl -------------------------------
1650 dnl Quagga sources should always be
1651 dnl current wrt interfaces. Dont
1652 dnl allow deprecated interfaces to
1654 dnl -------------------------------
1655 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1657 dnl ---------------------------
1658 dnl Check htonl works correctly
1659 dnl ---------------------------
1660 AC_MSG_CHECKING(for working htonl)
1661 AC_CACHE_VAL(ac_cv_htonl_works,
1662 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1663 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1666 AC_MSG_RESULT($ac_cv_htonl_works)
1668 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1669 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1670 ospf6d/Makefile isisd/Makefile babeld/Makefile vtysh/Makefile
1671 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
1677 isisd/topology/Makefile
1678 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1679 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1680 AC_CONFIG_FILES([solaris/Makefile])
1682 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1683 ## Hack, but working solution to avoid rebuilding of quagga.info.
1684 ## It's already in CVS until texinfo 4.7 is more common.
1688 Quagga configuration
1689 --------------------
1690 quagga version : ${PACKAGE_VERSION}
1691 host operating system : ${host_os}
1692 source code location : ${srcdir}
1694 compiler flags : ${CFLAGS}
1696 includes : ${INCLUDES}
1697 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1698 state file directory : ${quagga_statedir}
1699 config file directory : `eval echo \`echo ${sysconfdir}\``
1700 example directory : `eval echo \`echo ${exampledir}\``
1701 user to run as : ${enable_user}
1702 group to run as : ${enable_group}
1703 group for vty sockets : ${enable_vty_group}
1704 config file mask : ${enable_configfile_mask}
1705 log file mask : ${enable_logfile_mask}
1707 The above user and group must have read/write access to the state file
1708 directory and to the config files in the config file directory."
1710 if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1711 Warning: The ${MAKE-make} programme detected, either in your path or
1712 via the MAKE variable, is not GNU Make. GNU make may be installed as
1713 gmake on some systems. and is required to complete a build of Quagga