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.23.1+cl3u2, [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_SILENT_RULES([yes])
23 AC_CONFIG_HEADERS(config.h)
25 AC_PATH_PROG(PERL, perl)
26 AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
27 if test "x$GAWK" = "xnot-in-PATH" ; then
28 AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
29 BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
31 AC_ARG_VAR([GAWK],[GNU AWK])
33 dnl default is to match previous behavior
34 exampledir=${sysconfdir}
35 AC_ARG_ENABLE([exampledir],
36 AC_HELP_STRING([--enable-exampledir],
37 [specify alternate directory for examples]),
38 exampledir="$enableval",)
39 dnl XXX add --exampledir to autoconf standard directory list somehow
42 dnl default is to match previous behavior
45 AC_ARG_ENABLE([pkgsrcrcdir],
46 AC_HELP_STRING([--enable-pkgsrcrcdir],
47 [specify directory for rc.d scripts]),
48 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
49 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
53 LIBS="$LIBS -L/usr/include/json/ -ljson-c"
59 [ --with-cflags Set CFLAGS for use in compilation.])
60 if test "x$with_cflags" != "x" ; then
61 CFLAGS="$with_cflags" ; cflags_specified=yes ;
62 elif test -n "$CFLAGS" ; then
63 cflags_specified=yes ;
66 AC_ARG_ENABLE(tcmalloc,
67 [ --enable-tcmalloc Turn on tcmalloc],
68 [case "${enableval}" in
69 yes) tcmalloc_enabled=true
70 LIBS="$LIBS -ltcmalloc_minimal"
72 no) tcmalloc_enabled=false ;;
73 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
74 esac],[tcmalloc_enabled=false])
77 dnl --------------------
78 dnl Check CC and friends
79 dnl --------------------
86 dnl autoconf 2.59 appears not to support AC_PROG_SED
88 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
90 dnl pdflatex and latexmk are needed to build HACKING.pdf
91 AC_CHECK_PROG([PDFLATEX],[pdflatex],[pdflatex],[/bin/false])
92 AC_CHECK_PROG([LATEXMK],[latexmk],[latexmk],[/bin/false])
93 if test "x$PDFLATEX" = "x/bin/false" -o "x$LATEXMK" = "x/bin/false"; then
94 AC_MSG_WARN([Will not be able to make PDF versions of TeX documents])
98 AM_CONDITIONAL([HAVE_LATEX], [test "x$HAVE_LATEX" = "xtrue"])
100 dnl ------------------------------------------------------------------
101 dnl Intel compiler check. Although Intel tries really hard to make icc
102 dnl look like gcc, there are some differences. It's very verbose with
103 dnl -Wall and it doesn't support the individual -W options.
104 dnl ------------------------------------------------------------------
105 if test "x${GCC}" = "xyes" ; then
107 AC_MSG_CHECKING([whether we are using the Intel compiler])
108 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
109 [AC_MSG_RESULT([no])],
111 AC_MSG_RESULT([yes])]
114 AC_MSG_CHECKING([whether we are using SunPro compiler])
115 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
116 [AC_MSG_RESULT([no])],
118 AC_MSG_RESULT([yes])]
122 dnl ---------------------------------------------
123 dnl If CLFAGS doesn\'t exist set default value
124 dnl AC_PROG_CC will have set minimal default
125 dnl already, eg "-O2 -g" for gcc, "-g" for others
126 dnl (Wall is gcc specific... have to make sure
127 dnl gcc is being used before setting it)
129 dnl Intel icc 8.0 also sets __GNUC__,
130 dnl but doesn't support all these fancy -W options.
131 dnl Intel compiler warnings we ignore:
132 dnl 279: controlling expression is constant.
133 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
134 dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
136 dnl 981: operands are evaluated in unspecified order.
138 dnl Sun Studio 10 / SunPro 5.7 is also supported,
139 dnl so lets set some sane CFLAGS for it.
140 dnl ---------------------------------------------
142 AC_MSG_CHECKING([whether to set a default CFLAGS])
143 if test "x${cflags_specified}" = "x" ; then
146 CFLAGS="-Os -g -Wall"
147 AC_MSG_RESULT([Intel default])
150 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
151 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
152 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
153 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
154 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
155 # TODO: conditionally addd -Wpacked if handled
156 AC_MSG_RESULT([gcc default])
159 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
160 AC_MSG_RESULT([SunPro default])
163 AC_MSG_RESULT([unknown compiler])
167 AC_MSG_RESULT([CFLAGS supplied by user])
170 if test x"${enable_werror}" = x"yes" ; then
181 AC_CHECK_TOOL(AR, ar)
183 dnl ---------------------------
184 dnl We, perhaps unfortunately,
185 dnl depend on GNU Make specific
187 dnl Give the user a warning if
189 dnl ---------------------------
190 AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
191 [quagga_cv_gnu_make=no
192 if ${MAKE-make} --version 2>/dev/null | \
193 grep '^GNU Make ' >/dev/null ; then
194 quagga_cv_gnu_make=yes;
199 dnl -----------------
200 dnl System extensions
201 dnl -----------------
209 dnl ----------------------
210 dnl Packages configuration
211 dnl ----------------------
212 AC_ARG_WITH(pkg-extra-version,
213 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
214 [EXTRAVERSION=$withval],)
215 AC_ARG_WITH(pkg-git-version,
216 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
217 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
219 [ --disable-vtysh do not build integrated vty shell for Quagga])
221 [ --disable-ipv6 turn off IPv6 related features and daemons])
223 [ --disable-doc do not build docs])
225 [ --disable-zebra do not build zebra daemon])
227 [ --disable-bgpd do not build bgpd])
229 [ --disable-ripd do not build ripd])
230 AC_ARG_ENABLE(ripngd,
231 [ --disable-ripngd do not build ripngd])
233 [ --disable-ospfd do not build ospfd])
234 AC_ARG_ENABLE(ospf6d,
235 [ --disable-ospf6d do not build ospf6d])
236 AC_ARG_ENABLE(watchquagga,
237 [ --disable-watchquagga do not build watchquagga])
239 [ --enable-isisd build isisd])
241 [ --disable-pimd do not build pimd])
242 AC_ARG_ENABLE(solaris,
243 [ --enable-solaris build solaris])
244 AC_ARG_ENABLE(bgp-announce,
245 [ --disable-bgp-announce, turn off BGP route announcement])
246 AC_ARG_ENABLE(netlink,
247 [ --enable-netlink force to use Linux netlink interface])
248 AC_ARG_ENABLE(broken-aliases,
249 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
251 [ --enable-snmp=ARG enable SNMP support (smux or agentx)])
253 [ --with-libpam use libpam for PAM support in vtysh])
254 AC_ARG_ENABLE(tcp-zebra,
255 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
256 AC_ARG_ENABLE(opaque-lsa,
257 AC_HELP_STRING([--disable-opaque-lsa],[do not build OSPF Opaque-LSA with OSPFAPI support (RFC2370)]))
258 AC_ARG_ENABLE(ospfapi,
259 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database])
260 AC_ARG_ENABLE(ospfclient,
261 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
262 (this is the default if --disable-ospfapi is set)])
263 AC_ARG_ENABLE(ospf-te,
264 AC_HELP_STRING([--disable-ospf-te],[disable Traffic Engineering Extension to OSPF]))
265 AC_ARG_ENABLE(multipath,
266 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
268 AC_HELP_STRING([--enable-user=user], [user to run Quagga suite as (default quagga)]))
270 AC_HELP_STRING([--enable-group=group], [group to run Quagga suite as (default quagga)]))
271 AC_ARG_ENABLE(vty_group,
272 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
273 AC_ARG_ENABLE(configfile_mask,
274 [ --enable-configfile-mask=ARG set mask for config files])
275 AC_ARG_ENABLE(logfile_mask,
276 [ --enable-logfile-mask=ARG set mask for log files])
277 AC_ARG_ENABLE(shell_access,
278 [ --enable-shell-access Allow users to access shell/telnet/ssh])
280 [ --disable-rtadv disable IPV6 router advertisement feature])
282 [ --enable-irdp enable IRDP server support in zebra])
283 AC_ARG_ENABLE(isis_topology,
284 [ --enable-isis-topology enable IS-IS topology generator])
285 AC_ARG_ENABLE(capabilities,
286 [ --disable-capabilities disable using POSIX capabilities])
287 AC_ARG_ENABLE(rusage,
288 [ --disable-rusage disable using getrusage])
289 AC_ARG_ENABLE(gcc_ultra_verbose,
290 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
291 AC_ARG_ENABLE(linux24_tcp_md5,
292 [ --enable-linux24-tcp-md5 enable support for old, Linux-2.4 RFC2385 patch])
293 AC_ARG_ENABLE(gcc-rdynamic,
294 [ --enable-gcc-rdynamic enable linking with -rdynamic for better backtraces (default if gcc)])
295 AC_ARG_ENABLE(backtrace,
296 [ --disable-backtrace, disable crash backtraces (default autodetect)])
297 AC_ARG_ENABLE(time-check,
298 [ --disable-time-check disable slow thread warning messages])
299 AC_ARG_ENABLE(pcreposix,
300 [ --enable-pcreposix enable using PCRE Posix libs for regex functions])
302 [ --enable-fpm enable Forwarding Plane Manager support])
303 AC_ARG_ENABLE(systemd,
304 [ --enable-systemd enable Systemd support])
306 [ --enable-poll enable usage of Poll instead of select])
307 AC_ARG_ENABLE(werror,
308 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
309 AC_ARG_ENABLE(cumulus,
310 [ --enable-cumulus enable Cumulus Switch Special Extensions])
312 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
313 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
314 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
315 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
316 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
319 if test x"${enable_gcc_rdynamic}" != x"no" ; then
320 if test x"${enable_gcc_rdynamic}" = x"yes" -o x"$COMPILER" = x"GCC"; then
321 LDFLAGS="${LDFLAGS} -rdynamic"
325 if test x"${enable_time_check}" != x"no" ; then
326 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
327 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
329 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
333 if test "${enable_systemd}" = "yes" ; then
334 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
335 LIBS="$LIBS -lsystemd "
338 if test "${enable_poll}" = "yes" ; then
339 AC_DEFINE(HAVE_POLL,,Compile systemd support in)
342 if test "${enable_cumulus}" = "yes" ; then
343 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
346 if test "${enable_shell_access}" = "yes"; then
347 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
350 if test "${enable_fpm}" = "yes"; then
351 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
354 if test "${enable_broken_aliases}" = "yes"; then
355 if test "${enable_netlink}" = "yes"
357 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
359 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
363 if test "${enable_tcp_zebra}" = "yes"; then
364 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
367 if test "${enable_opaque_lsa}" != "no"; then
368 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
371 if test "${enable_ospf_te}" != "no"; then
372 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
373 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
376 if test "${enable_linux24_tcp_md5}" = "yes"; then
377 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
380 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
381 if test "${enable_rtadv}" != "no"; then
383 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
388 if test "${enable_irdp}" = "yes"; then
389 AC_DEFINE(HAVE_IRDP,, IRDP )
392 if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
393 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
394 ISIS_TOPOLOGY_INCLUDES="-I\$(srcdir)/topology"
395 ISIS_TOPOLOGY_DIR="topology"
396 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
399 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
400 AC_SUBST(ISIS_TOPOLOGY_DIR)
401 AC_SUBST(ISIS_TOPOLOGY_LIB)
403 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
405 elif test "${enable_user}" = "no"; then
409 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
410 enable_group="quagga"
411 elif test "${enable_group}" = "no"; then
415 if test x"${enable_vty_group}" = x"yes" ; then
416 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
417 elif test x"${enable_vty_group}" != x""; then
418 if test x"${enable_vty_group}" != x"no"; then
419 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
422 AC_SUBST([enable_user])
423 AC_SUBST([enable_group])
424 AC_SUBST([enable_vty_group])
425 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
426 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
428 enable_configfile_mask=${enable_configfile_mask:-0600}
429 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
431 enable_logfile_mask=${enable_logfile_mask:-0600}
432 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
436 case "${enable_multipath}" in
440 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
441 MPATH_NUM="${enable_multipath}"
446 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
450 AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
452 dnl -----------------------------------
453 dnl Add extra version string to package
454 dnl name, string and version fields.
455 dnl -----------------------------------
456 if test "x${EXTRAVERSION}" != "x" ; then
457 VERSION="${VERSION}${EXTRAVERSION}"
458 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
459 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
462 if test "x$with_pkg_git_version" = "xyes"; then
463 if test -d "${srcdir}/.git"; then
464 AC_DEFINE(GIT_VERSION, [1], [include git version info])
465 else with_pkg_git_version="no"
466 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
469 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
471 dnl ------------------------------------
472 dnl Check C keywords and standard types
473 dnl ------------------------------------
488 dnl -------------------------
489 dnl Check other header files.
490 dnl -------------------------
491 AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
492 sys/types.h linux/version.h netdb.h asm/types.h \
493 sys/cdefs.h sys/param.h limits.h signal.h \
494 sys/socket.h netinet/in.h time.h sys/time.h])
496 dnl Utility macro to avoid retyping includes all the time
497 m4_define([QUAGGA_INCLUDES],
500 #define __EXTENSIONS__
512 # include <sys/types.h>
514 /* sys/conf.h depends on param.h on FBSD at least */
516 # include <sys/param.h>
518 /* Required for MAXSIG */
522 #if HAVE_SYS_SOCKET_H
523 # include <sys/socket.h>
526 # define __APPLE_USE_RFC_3542
528 #if HAVE_NETINET_IN_H
529 # include <netinet/in.h>
531 #ifdef TIME_WITH_SYS_TIME
532 # include <sys/time.h>
535 # ifdef HAVE_SYS_TIME_H
536 # include <sys/time.h>
540 #endif /* TIME_WITH_SYS_TIME */
543 dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
544 dnl round below execution begins, otherwise it doesn't properly detect
545 dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
546 dnl on FreeBSD (BZ#408).
548 AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
550 m4_define([QUAGGA_INCLUDES],
557 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
558 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
559 dnl an additional round for it.
561 AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
563 m4_define([QUAGGA_INCLUDES],
565 [#if HAVE_NET_IF_VAR_H
566 # include <net/if_var.h>
570 AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
571 net/if_dl.h net/netopt.h net/route.h \
572 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
573 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
574 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
575 [], [], QUAGGA_INCLUDES)
577 AC_CHECK_HEADERS([ucontext.h], [], [],
580 #endif /* __USE_GNU */
584 m4_define([UCONTEXT_INCLUDES],
585 [#include <ucontext.h>])dnl
587 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
588 [], [], [UCONTEXT_INCLUDES])
589 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
590 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
591 [], [], [UCONTEXT_INCLUDES])],
592 [], [UCONTEXT_INCLUDES])
593 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
594 [], [], [UCONTEXT_INCLUDES])
596 m4_define([QUAGGA_INCLUDES],
601 #if HAVE_NETINET_IN_SYSTM_H
602 # include <netinet/in_systm.h>
604 #if HAVE_NETINET_IN_VAR_H
605 # include <netinet/in_var.h>
608 # include <net/if_dl.h>
610 #if HAVE_NET_NETOPT_H
611 # include <net/netopt.h>
614 # include <net/route.h>
617 # include <inet/nd.h>
620 # include <arpa/inet.h>
622 /* Required for IDRP */
623 #if HAVE_NETINET_IP_ICMP_H
624 # include <netinet/ip_icmp.h>
628 dnl V6 headers are checked below, after we check for v6
630 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
632 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
634 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
635 AC_DEFINE(SUNOS_5, 1, SunOS 5)
636 AC_CHECK_LIB(xnet, main)
640 | [*-sunos5.1[0-9]] \
641 | [*-sunos5.1[0-9].[0-9]] \
642 | [*-solaris2.[8-9]] \
643 | [*-solaris2.1[0-9]] \
644 | [*-solaris2.1[0-9].[0-9]])
646 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
647 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
648 AC_CHECK_LIB(socket, main)
649 AC_CHECK_LIB(nsl, main)
650 AC_CHECK_LIB(umem, main)
651 AC_CHECK_FUNCS([printstack],
652 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
653 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
657 *-sunos5* | *-solaris2*)
658 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
659 AC_CHECK_LIB(socket, main)
660 AC_CHECK_LIB(nsl, main)
665 AC_DEFINE(GNU_LINUX,,GNU Linux)
668 AC_CHECK_LIB(nsl, gethostbyname)
669 AC_CHECK_LIB(socket, socket)
673 AC_DEFINE(OPEN_BSD,,OpenBSD)
677 OTHER_METHOD="mtu_kvm.o"
678 AC_CHECK_LIB(kvm, main)
682 AC_DEFINE(IRIX_65,,IRIX 6.5)
688 dnl ---------------------
689 dnl Integrated VTY option
690 dnl ---------------------
691 case "${enable_vtysh}" in
694 AC_DEFINE(VTYSH,,VTY shell)
695 dnl Vtysh uses libreadline, which looks for termcap functions at
696 dnl configure time. We follow readlines search order.
697 dnl The required procedures are in libtermcap on NetBSD, in
698 dnl [TODO] on Linux, and in [TODO] on Solaris.
699 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
700 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
701 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
702 [AC_CHECK_LIB(ncurses, tputs,
703 LIBREADLINE="$LIBREADLINE -lncurses")]
707 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
709 if test $ac_cv_lib_readline_main = no; then
710 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
712 AC_CHECK_HEADER(readline/history.h)
713 if test $ac_cv_header_readline_history_h = no;then
714 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
716 AC_CHECK_LIB(readline, rl_completion_matches,
717 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
718 if test $ac_cv_lib_readline_rl_completion_matches = no; then
719 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
724 AC_SUBST(LIBREADLINE)
725 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
730 dnl Quagga detects the PAM library it is built against by checking for a
731 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
732 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
733 dnl openpam.h doesn't do that, although depends on the header too. Hence a
734 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
737 if test "$with_libpam" = "yes"; then
738 AC_CHECK_HEADER([security/pam_misc.h],
739 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
740 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
741 pam_conv_func="misc_conv"
744 AC_CHECK_HEADER([security/openpam.h],
745 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
746 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
747 pam_conv_func="openpam_ttyconv"
749 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
750 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
751 AC_MSG_WARN([*** pam support will not be built ***])
756 if test "$with_libpam" = "yes"; then
757 dnl took this test from proftpds configure.in and suited to our needs
758 dnl -------------------------------------------------------------------------
760 dnl This next check looks funky due to a linker problem with some versions
761 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
762 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
763 dnl with RedHat 6.2 and Debian 2.2 or better.
764 AC_CHECK_LIB(pam, pam_start,
765 [AC_CHECK_LIB(pam, $pam_conv_func,
766 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
768 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
769 LIBPAM="-lpam -lpam_misc"]
773 [AC_CHECK_LIB(pam, pam_end,
774 [AC_CHECK_LIB(pam, $pam_conv_func,
775 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
776 LIBPAM="-lpam -ldl"],
777 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
778 LIBPAM="-lpam -ldl -lpam_misc"]
780 ],AC_MSG_WARN([*** pam support will not be built ***]),
787 dnl -------------------------------
788 dnl Endian-ness check
789 dnl -------------------------------
792 dnl -------------------------------
793 dnl check the size in byte of the C
794 dnl -------------------------------
795 dnl AC_CHECK_SIZEOF(char)
796 dnl AC_CHECK_SIZEOF(int)
797 dnl AC_CHECK_SIZEOF(short)
798 dnl AC_CHECK_SIZEOF(long)
800 dnl ----------------------------
801 dnl check existance of functions
802 dnl ----------------------------
810 AC_FUNC_SELECT_ARGTYPES
812 dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
813 dnl can lead to strange side effects. So we just check for strnlen
814 dnl directly, see below.
815 dnl AC_FUNC_STRNLENdnl
818 dnl -------------------------------
819 dnl bgpd needs pow() and hence libm
820 dnl -------------------------------
822 AC_CHECK_HEADER([math.h],
823 [AC_CHECK_LIB([m], [pow],
826 AC_DEFINE(HAVE_LIBM,, Have libm)
827 AC_CHECK_FUNCS(pow,[],[LIBM=""])
830 if test x"$LIBM" = x ; then
831 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
839 AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
840 inet_ntoa inet_aton strnlen \
841 memchr memmove memset select socket \
842 strcasecmp strchr strcspn strdup strerror \
843 strncasecmp strndup strrchr strspn strstr \
844 strtol strtoul strlcat strlcpy \
845 daemon snprintf vsnprintf \
846 if_nametoindex if_indextoname getifaddrs \
847 uname fcntl getgrouplist])
849 dnl ------------------------------------
850 dnl Determine routing get and set method
851 dnl ------------------------------------
852 AC_MSG_CHECKING(zebra between kernel interface method)
853 if test x"$opsys" = x"gnu-linux"; then
854 if test "${enable_netlink}" = "no"; then
859 AC_MSG_RESULT(netlink)
860 RT_METHOD=rt_netlink.o
861 AC_DEFINE(HAVE_NETLINK,,netlink)
863 AC_CHECK_DECLS([IFLA_INFO_SLAVE_KIND], [], [], [#include <linux/if_link.h>])
865 elif test x"$opsys" = x"sol2-6";then
866 AC_MSG_RESULT(Route socket)
867 KERNEL_METHOD="kernel_socket.o"
868 RT_METHOD="rt_socket.o"
869 elif test x"$opsys" = x"sol8";then
870 AC_MSG_RESULT(Route socket)
871 KERNEL_METHOD="kernel_socket.o"
872 RT_METHOD="rt_socket.o"
873 elif test "$opsys" = "irix" ; then
874 AC_MSG_RESULT(Route socket)
875 KERNEL_METHOD="kernel_socket.o"
876 RT_METHOD="rt_socket.o"
878 AC_TRY_RUN([#include <errno.h>
879 #include <sys/types.h>
880 #include <sys/socket.h>
886 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
887 if (ac_sock < 0 && errno == EINVAL)
891 [KERNEL_METHOD=kernel_socket.o
892 RT_METHOD=rt_socket.o
893 AC_MSG_RESULT(socket)],
894 [RT_METHOD=rt_ioctl.o
895 AC_MSG_RESULT(ioctl)],
896 [KERNEL_METHOD=kernel_socket.o
897 RT_METHOD=rt_socket.o
898 AC_MSG_RESULT(socket)])
901 AC_SUBST(KERNEL_METHOD)
902 AC_SUBST(OTHER_METHOD)
903 AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
905 dnl --------------------------
906 dnl Determine IS-IS I/O method
907 dnl --------------------------
908 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
909 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
910 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
911 AC_CHECK_HEADER(net/bpf.h)
912 AC_CHECK_HEADER(sys/dlpi.h)
913 AC_MSG_CHECKING(zebra IS-IS I/O method)
914 if test x"$opsys" = x"gnu-linux"; then
915 AC_MSG_RESULT(pfpacket)
916 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
917 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
919 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
921 if test $ac_cv_header_net_bpf_h = no; then
922 if test $ac_cv_header_sys_dlpi_h = no; then
924 AC_MSG_WARN([*** IS-IS support will not be built ***])
929 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
932 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
935 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
937 dnl ------------------------------------
938 dnl check for broken CMSG_FIRSTHDR macro
939 dnl ------------------------------------
940 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
941 AC_RUN_IFELSE([AC_LANG_SOURCE([[
944 #define __EXTENSIONS__
949 #ifdef HAVE_SYS_TYPES_H
950 #include <sys/types.h>
952 #ifdef HAVE_SYS_SOCKET_H
953 #include <sys/socket.h>
961 msg.msg_control = buf;
962 msg.msg_controllen = 0;
964 if (CMSG_FIRSTHDR(&msg) != NULL)
967 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
968 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
970 dnl ------------------------------
971 dnl check kernel route read method
972 dnl ------------------------------
973 AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
974 [if test "x$netlink" = xyes; then
975 quagga_cv_rtread_method="netlink"
977 for quagga_cv_rtread_method in /proc/net/route /dev/ip /dev/null;
979 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
981 case $quagga_cv_rtread_method in
982 "/proc/net/route") quagga_cv_rtread_method="proc";;
985 *-freebsd*) quagga_cv_rtread_method="sysctl";;
986 *) quagga_cv_rtread_method="getmsg";;
989 quagga_cv_rtread_method="sysctl";;
992 RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
993 AC_SUBST(RTREAD_METHOD)
995 dnl -----------------------------
996 dnl check interface lookup method
997 dnl -----------------------------
999 AC_MSG_CHECKING(interface looking up method)
1000 if test "$netlink" = yes; then
1001 AC_MSG_RESULT(netlink)
1002 IF_METHOD=if_netlink.o
1003 elif test "$opsys" = "sol2-6";then
1004 AC_MSG_RESULT(Solaris GIF)
1005 IF_METHOD=if_ioctl.o
1006 elif test "$opsys" = "sol8";then
1007 AC_MSG_RESULT(Solaris GLIF)
1008 IF_METHOD=if_ioctl_solaris.o
1009 IOCTL_METHOD=ioctl_solaris.o
1010 elif test "$opsys" = "irix" ; then
1012 IF_METHOD=if_ioctl.o
1013 elif test "$opsys" = "openbsd";then
1014 AC_MSG_RESULT(openbsd)
1015 IF_METHOD=if_ioctl.o
1016 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
1017 AC_MSG_RESULT(sysctl)
1018 IF_METHOD=if_sysctl.o
1019 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
1021 AC_MSG_RESULT(ioctl)
1022 IF_METHOD=if_ioctl.o
1025 AC_SUBST(IOCTL_METHOD)
1027 dnl ---------------------------------------------------------------
1028 dnl figure out how to specify an interface in multicast sockets API
1029 dnl ---------------------------------------------------------------
1030 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
1032 AC_CHECK_HEADERS([linux/mroute.h], [], [],
1034 #if HAVE_NETINET_IN_H
1035 #include<netinet/in.h>
1037 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
1038 AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
1039 #include <sys/param.h>
1040 #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__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__sun)
1043 #error No support for BSD struct ip_mreq hack detected
1044 #endif],[AC_MSG_RESULT(yes)
1045 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1048 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1050 #include <sys/types.h>
1051 #include <netinet/in.h>
1052 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1053 ], [AC_MSG_RESULT(yes)
1054 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1057 dnl ---------------------------------------------------------------
1058 dnl figure out how to check link-state
1059 dnl ---------------------------------------------------------------
1060 AC_CHECK_HEADER([net/if.h],
1061 [AC_CHECK_HEADER( [net/if_media.h],
1062 [m4_define([LINK_DETECT_INCLUDES],
1064 [#include <net/if_media.h>
1066 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1067 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1068 [], LINK_DETECT_INCLUDES)],
1071 [], QUAGGA_INCLUDES )
1073 dnl ---------------------------------------------------------------
1074 dnl Additional, newer way to check link-state using ifi_link_state.
1075 dnl Not available in all BSD's when ifmediareq available
1076 dnl ---------------------------------------------------------------
1077 AC_CHECK_HEADER([net/if.h],
1078 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1079 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1080 [], QUAGGA_INCLUDES),
1083 dnl ------------------------
1084 dnl TCP_MD5SIG socket option
1085 dnl ------------------------
1087 AC_CHECK_HEADER([netinet/tcp.h],
1088 [m4_define([MD5_INCLUDES],
1090 [#include <netinet/tcp.h>
1092 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1095 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1096 AC_CHECK_HEADER([linux/tcp.h],
1097 [m4_define([MD5_INCLUDES],
1099 [#include <linux/tcp.h>
1101 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1104 dnl -----------------------
1105 dnl check proc file system.
1106 dnl -----------------------
1107 if test "$netlink" != yes; then
1108 if test -r /proc/net/dev; then
1109 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
1112 if test -r /proc/net/if_inet6; then
1113 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
1119 dnl -----------------------------
1120 dnl check ipforward detect method
1121 dnl -----------------------------
1122 AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
1123 [if test x$cross_compiling = xyes; then
1124 if test x"$opsys" = x"gnu-linux"; then
1125 quagga_cv_ipforward_method=/proc/net/snmp
1127 quagga_cv_ipforward_method=/dev/ip
1130 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1132 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1135 case $quagga_cv_ipforward_method in
1136 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
1139 *-nec-sysv4*) quagga_cv_ipforward_method="ews";;
1140 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1141 *) quagga_cv_ipforward_method="solaris";;
1143 *) quagga_cv_ipforward_method="sysctl";;
1145 IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
1148 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
1153 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1154 if test "${enable_ipv6}" = "no"; then
1155 AC_MSG_RESULT(disabled)
1160 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1162 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1163 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1167 AC_MSG_RESULT(INRIA IPv6)
1171 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1173 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1174 AC_DEFINE(KAME,1,KAME IPv6)
1177 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1178 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1181 dnl -------------------------
1183 dnl default host check
1184 dnl It is not used by Kheops
1185 dnl -------------------------
1186 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1188 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1189 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1190 AC_DEFINE(KAME,1,KAME IPv6 stack)
1193 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1194 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1196 AC_MSG_RESULT(MUSICA)
1200 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1202 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1203 AC_DEFINE(NRL,1,NRL)
1206 if test x"$opsys" = x"bsdi";then
1207 AC_DEFINE(BSDI_NRL,,BSDI)
1208 AC_MSG_RESULT(BSDI_NRL)
1212 dnl ------------------------------------
1213 dnl Solaris 9, 10 and potentially higher
1214 dnl ------------------------------------
1215 elif test x"$opsys" = x"sol8"; then
1217 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1218 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1221 AC_MSG_RESULT(Solaris IPv6)
1225 elif test "${enable_ipv6}" = "yes"; then
1227 #include <linux/version.h>
1228 /* 2.1.128 or later */
1229 #if LINUX_VERSION_CODE >= 0x020180
1233 zebra_cv_linux_ipv6=yes
1234 AC_MSG_RESULT(Linux IPv6)])
1236 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1239 zebra_cv_linux_ipv6=yes
1240 AC_MSG_RESULT(Linux IPv6)
1244 if test "$zebra_cv_linux_ipv6" = "yes";then
1245 AC_MSG_CHECKING(whether libc has IPv6 support)
1246 AC_TRY_LINK([#include <netinet/in.h>
1247 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1250 zebra_cv_linux_ipv6=yes],
1253 zebra_cv_linux_ipv6=no])
1256 if test "$zebra_cv_linux_ipv6" = "yes";then
1257 AC_MSG_CHECKING(for GNU libc >= 2.1)
1258 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1259 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1260 dnl Linux has a compilation problem with mixing
1261 dnl netinet/in.h and linux/in6.h they are not
1262 dnl compatible. There has been discussion on
1263 dnl how to fix it but no real progress on implementation
1264 dnl when they fix it, remove this
1265 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
1268 #include <features.h>
1269 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1273 AC_MSG_RESULT(yes)],
1278 if test "$glibc" != "yes"; then
1279 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1280 INCLUDES="-I/usr/inet6/include"
1281 LIB_IPV6="-L/usr/inet6/lib -linet6"
1286 dnl -----------------------
1287 dnl Set IPv6 related values
1288 dnl -----------------------
1289 LIBS="$LIB_IPV6 $LIBS"
1292 if test x"$RIPNGD" = x""; then
1293 AC_MSG_RESULT(IPv4 only)
1297 dnl ------------------
1298 dnl IPv6 header checks
1299 dnl ------------------
1300 if test "x${zebra_cv_ipv6}" = "xyes"; then
1301 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
1302 netinet6/in6_var.h netinet6/nd6.h], [], [],
1306 m4_define([QUAGGA_INCLUDES],dnl
1308 [#if HAVE_NETINET6_IN6_H
1309 #include <netinet6/in6.h>
1311 #if HAVE_NETINET_IN6_VAR_H
1312 #include <netinet/in6_var.h>
1314 #if HAVE_NETINET_ICMP6_H
1315 # include <netinet/icmp6.h>
1317 #if HAVE_NETINET6_IN6_VAR_H
1318 # include <netinet6/in6_var.h>
1320 #if HAVE_NETINET6_ND6_H
1321 # include <netinet6/nd6.h>
1325 dnl disable doc check
1326 if test "${enable_doc}" = "no";then
1332 dnl --------------------
1333 dnl Daemon disable check
1334 dnl --------------------
1335 if test "${enable_zebra}" = "no";then
1340 AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
1342 if test "${enable_bgpd}" = "no";then
1347 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1349 if test "${enable_ripd}" = "no";then
1354 AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
1356 if test "${enable_ospfd}" = "no";then
1361 AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
1363 if test "${enable_watchquagga}" = "no";then
1366 WATCHQUAGGA="watchquagga"
1368 AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
1371 if test "${enable_opaque_lsa}" != "no"; then
1372 if test "${enable_ospfapi}" != "no";then
1373 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1375 if test "${enable_ospfclient}" != "no";then
1376 OSPFCLIENT="ospfclient"
1381 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1383 case "${enable_ripngd}" in
1384 "yes") RIPNGD="ripngd";;
1388 AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
1390 case "${enable_ospf6d}" in
1391 "yes") OSPF6D="ospf6d";;
1395 AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
1397 case "${enable_isisd}" in
1398 "yes") ISISD="isisd";;
1402 AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
1404 case "${enable_pimd}" in
1408 AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
1410 # XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1411 case "${enable_solaris}" in
1412 "yes") SOLARIS="solaris";;
1417 if test "${enable_bgp_announce}" = "no";then
1418 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1420 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1430 AC_SUBST(WATCHQUAGGA)
1437 AC_SUBST(OSPFCLIENT)
1439 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1440 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1441 AC_CHECK_LIB(crypt, crypt)
1442 AC_CHECK_LIB(resolv, res_init)
1444 dnl ---------------------------
1445 dnl check system has PCRE regexp
1446 dnl ---------------------------
1447 if test "x$enable_pcreposix" = "xyes"; then
1448 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1449 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1452 if test "x$enable_pcreposix" != "xyes"; then
1453 dnl ---------------------------
1454 dnl check system has GNU regexp
1455 dnl ---------------------------
1456 AC_MSG_CHECKING(whether system has GNU regex)
1457 AC_CHECK_LIB(c, regexec,
1458 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1460 [LIB_REGEX="regex.o"])
1462 AC_SUBST(HAVE_LIBPCREPOSIX)
1465 dnl ------------------
1466 dnl check Net-SNMP library
1467 dnl ------------------
1468 if test "${enable_snmp}" != ""; then
1469 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1470 if test x"$NETSNMP_CONFIG" = x"no"; then
1471 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1473 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1474 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1475 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1476 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1483 ])],[AC_MSG_RESULT(yes)],[
1485 AC_MSG_ERROR([--enable-snmp given but not usable])])
1486 AC_DEFINE(HAVE_SNMP,,SNMP)
1487 case "${enable_snmp}" in
1492 SNMP_METHOD="${enable_snmp}"
1495 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1498 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1499 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1500 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1503 dnl ---------------------------
1504 dnl sockaddr and netinet checks
1505 dnl ---------------------------
1506 AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1507 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1508 socklen_t, struct vifctl, struct mfcctl, struct sioc_sg_req,
1509 vifi_t, struct sioc_vif_req, struct igmpmsg,
1510 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1511 struct nd_opt_adv_interval, struct rt_addrinfo,
1512 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1513 [], [], QUAGGA_INCLUDES)
1515 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1516 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1517 struct sockaddr_in6.sin6_scope_id,
1518 struct sockaddr_dl.sdl_len,
1519 struct if6_aliasreq.ifra_lifetime,
1520 struct nd_opt_adv_interval.nd_opt_ai_type],
1521 [], [], QUAGGA_INCLUDES)
1523 dnl ---------------------------
1524 dnl IRDP/pktinfo/icmphdr checks
1525 dnl ---------------------------
1526 AC_CHECK_TYPES([struct in_pktinfo],
1527 [AC_CHECK_TYPES([struct icmphdr],
1528 [if test "${enable_irdp}" != "no"; then
1529 AC_DEFINE(HAVE_IRDP,, IRDP)
1531 [if test "${enable_irdp}" = "yes"; then
1532 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1533 fi], [QUAGGA_INCLUDES])],
1534 [if test "${enable_irdp}" = "yes"; then
1535 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1536 fi], [QUAGGA_INCLUDES])
1538 dnl -----------------------
1539 dnl checking for IP_PKTINFO
1540 dnl -----------------------
1541 AC_MSG_CHECKING(for IP_PKTINFO)
1542 AC_TRY_COMPILE([#include <netdb.h>], [
1543 int opt = IP_PKTINFO;
1546 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1551 dnl ---------------------------
1552 dnl checking for IP_RECVDSTADDR
1553 dnl ---------------------------
1554 AC_MSG_CHECKING(for IP_RECVDSTADDR)
1555 AC_TRY_COMPILE([#include <netinet/in.h>], [
1556 int opt = IP_RECVDSTADDR;
1559 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1564 dnl ----------------------
1565 dnl checking for IP_RECVIF
1566 dnl ----------------------
1567 AC_MSG_CHECKING(for IP_RECVIF)
1568 AC_TRY_COMPILE([#include <netinet/in.h>], [
1569 int opt = IP_RECVIF;
1572 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1577 dnl --------------------------------------
1578 dnl checking for getrusage struct and call
1579 dnl --------------------------------------
1580 if test "${enable_rusage}" != "no"; then
1581 AC_MSG_CHECKING(whether getrusage is available)
1582 AC_TRY_COMPILE([#include <sys/resource.h>],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1584 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1588 dnl --------------------------------------
1589 dnl checking for clock_time monotonic struct and call
1590 dnl --------------------------------------
1591 AC_CHECK_DECL(CLOCK_MONOTONIC,
1592 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1593 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1594 ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
1596 dnl -------------------
1597 dnl capabilities checks
1598 dnl -------------------
1599 if test "${enable_capabilities}" != "no"; then
1600 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1601 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1603 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1604 quagga_ac_keepcaps="yes"],
1607 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1608 AC_CHECK_HEADERS(sys/capability.h)
1610 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1611 AC_CHECK_LIB(cap, cap_init,
1612 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1614 quagga_ac_lcaps="yes"]
1617 AC_CHECK_HEADERS(priv.h,
1618 [AC_MSG_CHECKING(Solaris style privileges are available)
1619 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1621 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1622 quagga_ac_scaps="yes"],
1628 if test x"${quagga_ac_scaps}" = x"yes" \
1629 -o x"${quagga_ac_lcaps}" = x"yes"; then
1630 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1635 dnl ---------------------------
1636 dnl check for glibc 'backtrace'
1637 dnl ---------------------------
1638 if test x"${enable_backtrace}" != x"no" ; then
1640 AC_CHECK_HEADER([execinfo.h], [
1641 AC_SEARCH_LIBS([backtrace], [execinfo], [
1642 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1643 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1648 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1649 dnl user explicitly requested backtrace but we failed to find support
1650 AC_MSG_FAILURE([failed to find backtrace support])
1654 dnl -----------------------------------------
1655 dnl check for malloc mallinfo struct and call
1656 dnl this must try and link using LIBS, in
1657 dnl order to check no alternative allocator
1658 dnl has been specified, which might not provide
1659 dnl mallinfo, e.g. such as Umem on Solaris.
1660 dnl -----------------------------------------
1661 AC_CHECK_HEADER([malloc.h],
1662 [AC_MSG_CHECKING(whether mallinfo is available)
1663 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1664 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1666 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1669 ], [], QUAGGA_INCLUDES)
1674 CONFDATE=`date '+%Y%m%d'`
1680 if test x"$DEJAGNU" = x
1682 DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
1684 RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
1687 AC_SUBST(RUNTESTDEFAULTFLAGS)
1689 dnl ------------------------------
1690 dnl set paths for state directory
1691 dnl ------------------------------
1692 AC_MSG_CHECKING(directory to use for state file)
1693 if test "${prefix}" = "NONE"; then
1694 quagga_statedir_prefix="";
1696 quagga_statedir_prefix=${prefix}
1698 if test "${localstatedir}" = '${prefix}/var'; then
1699 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1700 ${quagga_statedir_prefix}/var/adm dnl
1701 ${quagga_statedir_prefix}/etc dnl
1707 test -d $QUAGGA_STATE_DIR && break
1709 quagga_statedir=$QUAGGA_STATE_DIR
1711 quagga_statedir=${localstatedir}
1713 if test $quagga_statedir = "/dev/null"; then
1714 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1716 AC_MSG_RESULT(${quagga_statedir})
1717 AC_SUBST(quagga_statedir)
1719 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1720 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1721 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1722 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1723 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1724 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1725 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1726 AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$quagga_statedir/pimd.pid",pimd PID)
1727 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1728 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1729 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1730 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1731 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1732 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1733 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1734 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1735 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1736 AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$quagga_statedir/pimd.vty",pimd vty socket)
1737 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1739 dnl -------------------------------
1740 dnl Quagga sources should always be
1741 dnl current wrt interfaces. Dont
1742 dnl allow deprecated interfaces to
1744 dnl -------------------------------
1745 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1747 dnl ---------------------------
1748 dnl Check htonl works correctly
1749 dnl ---------------------------
1750 AC_MSG_CHECKING(for working htonl)
1751 AC_CACHE_VAL(ac_cv_htonl_works,
1752 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1753 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1756 AC_MSG_RESULT($ac_cv_htonl_works)
1758 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1759 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1760 ospf6d/Makefile isisd/Makefile vtysh/Makefile
1761 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
1763 tests/bgpd.tests/Makefile
1764 tests/libzebra.tests/Makefile
1770 isisd/topology/Makefile
1771 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1772 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1773 AC_CONFIG_FILES([solaris/Makefile])
1775 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1776 ## Hack, but working solution to avoid rebuilding of quagga.info.
1777 ## It's already in CVS until texinfo 4.7 is more common.
1781 Quagga configuration
1782 --------------------
1783 quagga version : ${PACKAGE_VERSION}
1784 host operating system : ${host_os}
1785 source code location : ${srcdir}
1787 compiler flags : ${CFLAGS}
1789 includes : ${INCLUDES}
1790 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1791 state file directory : ${quagga_statedir}
1792 config file directory : `eval echo \`echo ${sysconfdir}\``
1793 example directory : `eval echo \`echo ${exampledir}\``
1794 user to run as : ${enable_user}
1795 group to run as : ${enable_group}
1796 group for vty sockets : ${enable_vty_group}
1797 config file mask : ${enable_configfile_mask}
1798 log file mask : ${enable_logfile_mask}
1800 The above user and group must have read/write access to the state file
1801 directory and to the config files in the config file directory."
1803 if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1804 Warning: The ${MAKE-make} programme detected, either in your path or
1805 via the MAKE variable, is not GNU Make. GNU make may be installed as
1806 gmake on some systems. and is required to complete a build of Quagga