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, 1.2.2, [https://bugzilla.quagga.net])
13 AC_CONFIG_SRCDIR(lib/zebra.h)
14 AC_CONFIG_MACRO_DIR([m4])
16 dnl -----------------------------------
17 dnl Get hostname and other information.
18 dnl -----------------------------------
23 # Disable portability warnings -- our automake code (in particular
24 # common.am) uses some constructs specific to gmake.
25 AM_INIT_AUTOMAKE([1.6 -Wno-portability])
27 m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
28 AM_SILENT_RULES([yes])
29 AC_CONFIG_HEADERS(config.h)
31 AC_PATH_PROG(PERL, perl)
32 AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
33 if test "x$GAWK" = "xnot-in-PATH" ; then
34 AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
35 BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
37 AC_ARG_VAR([GAWK],[GNU AWK])
39 dnl default is to match previous behavior
40 exampledir=${sysconfdir}
41 AC_ARG_ENABLE([exampledir],
42 AS_HELP_STRING([--enable-exampledir],
43 [specify alternate directory for examples]),
44 exampledir="$enableval",)
45 dnl XXX add --exampledir to autoconf standard directory list somehow
48 dnl default is to match previous behavior
51 AC_ARG_ENABLE([pkgsrcrcdir],
52 AS_HELP_STRING([--enable-pkgsrcrcdir],
53 [specify directory for rc.d scripts]),
54 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
55 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
63 [ --with-cflags Set CFLAGS for use in compilation.])
64 if test "x$with_cflags" != "x" ; then
65 CFLAGS="$with_cflags" ; cflags_specified=yes ;
66 elif test -n "$CFLAGS" ; then
67 cflags_specified=yes ;
70 dnl --------------------
71 dnl Check CC and friends
72 dnl --------------------
83 AC_USE_SYSTEM_EXTENSIONS
90 dnl create libtool now, so we can test version below for
91 dnl fstack-protector-strong
94 dnl autoconf 2.59 appears not to support AC_PROG_SED
96 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
98 dnl Check for pdflatex and latexmk, in case someone wants to build
99 dnl PDFs from TeX (as used to be case for HACKING)
100 AC_CHECK_PROG([PDFLATEX],[pdflatex],[pdflatex],[/bin/false])
101 AC_CHECK_PROG([LATEXMK],[latexmk],[latexmk],[/bin/false])
102 if test "x$PDFLATEX" = "x/bin/false" -o "x$LATEXMK" = "x/bin/false"; then
103 AC_MSG_WARN([Will not be able to make PDF versions of TeX documents])
107 AM_CONDITIONAL([HAVE_LATEX], [test "x$HAVE_LATEX" = "xtrue"])
108 dnl for making HACKING.pdf from HACKING.md using pandoc
109 AC_CHECK_PROG([PANDOC],[pandoc],[pandoc],[/bin/false])
110 if test "x$PDFLATEX" = "x/bin/false" -o "x$PANDOC" = "x/bin/false"; then
111 AC_MSG_WARN([Will not be able to make PDF versions of MD documents])
115 AM_CONDITIONAL([HAVE_PANDOC], [test "x$HAVE_PANDOC" = "xtrue"])
117 if test "x${GCC}" != "xyes" ; then
118 AC_MSG_CHECKING([whether we are using SunPro compiler])
119 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
120 [AC_MSG_RESULT([no])],
122 AC_MSG_RESULT([yes])]
126 dnl ---------------------------------------------
127 dnl If CLFAGS doesn\'t exist set default value
128 dnl AC_PROG_CC will have set minimal default
129 dnl already, eg "-O2 -g" for gcc, "-g" for others
130 dnl (Wall is gcc specific... have to make sure
131 dnl gcc is being used before setting it)
133 dnl Sun Studio 10 / SunPro 5.7 is also supported,
134 dnl so lets set some sane CFLAGS for it.
135 dnl ---------------------------------------------
137 AC_DEFUN([AC_C_FLAG], [{
139 ac_c_flag_save="$CFLAGS"
141 AC_MSG_CHECKING([[whether $CC supports $1]])
143 [AC_LANG_PROGRAM([[]])],
146 m4_if([$3], [], [], [
147 CFLAGS="$ac_c_flag_save"
151 CFLAGS="$ac_c_flag_save"
158 AC_MSG_CHECKING([which default CFLAGS to set])
159 if test "x${cflags_specified}" = "x" ; then
162 AC_MSG_RESULT([Sun Studio])
166 AC_C_FLAG([-xstrconst])
170 dnl AC_C_FLAG([-xlinkopt=2]) SPARC only dnl
171 dnl AC_C_FLAG([-xcode=pic32])dnl
174 AC_MSG_RESULT([autodetecting])
176 AC_C_FLAG([-diag-error 10006])
181 dnl fstack-protector-strong gives __stack_chk_fail_local
182 dnl being an 'Undefined symbol' on OpenIndiana hipster, with gcc 6.
183 dnl gcc -shared is being used to do the link, however the error is
184 dnl from ld. Disable. An issue with libtool < 2.4.6 dropping the
185 dnl -fstack-protector-strong argument from the shared link.
186 AC_MSG_CHECKING([whether libtool can support fstack-protector])
187 if test x"$(./libtool --version \
188 | awk -F '[[ \t.]]' \
190 if ($(NF-2) <= 2 && $(NF-1) <= 4 && $NF < 6) \
195 AC_C_FLAG([-fstack-protector-strong])
196 AC_C_FLAG([--param=ssp-buffer-size=4])
199 AC_MSG_WARN([upgrade to libtool >= 2.4.6!])
201 AC_C_FLAG([-D_FORTIFY_SOURCE=2])
202 AC_C_FLAG([-Wformat])
203 AC_C_FLAG([-Wformat-security])
205 AC_C_FLAG([-fno-omit-frame-pointer])
208 AC_C_FLAG([-Wmissing-prototypes])
209 AC_C_FLAG([-Wmissing-declarations])
210 AC_C_FLAG([-Wpointer-arith])
211 AC_C_FLAG([-Wbad-function-cast])
212 AC_C_FLAG([-Wwrite-strings])
213 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
214 AC_C_FLAG([-Wcast-qual])
215 AC_C_FLAG([-Wstrict-prototypes])
216 AC_C_FLAG([-Wmissing-noreturn])
217 AC_C_FLAG([-Wmissing-format-attribute])
218 AC_C_FLAG([-Wunreachable-code])
219 AC_C_FLAG([-Wpacked])
220 AC_C_FLAG([-Wpadded])
222 AC_C_FLAG([-Wno-unused-result])
224 AC_C_FLAG([-Wno-unused-parameter])
225 AC_C_FLAG([-Wno-missing-field-initializers])
226 # ICC emits a broken warning for const char *x = a ? "b" : "c";
227 # for some reason the string consts get 'promoted' to char *,
228 # triggering a const to non-const conversion warning.
229 AC_C_FLAG([-diag-disable 3179])
233 AC_MSG_RESULT([CFLAGS supplied by user])
236 if test x"${enable_werror}" = x"yes" ; then
247 AC_CHECK_TOOL(AR, ar)
249 dnl ---------------------------
250 dnl We, perhaps unfortunately,
251 dnl depend on GNU Make specific
253 dnl Give the user a warning if
255 dnl ---------------------------
256 AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
257 [quagga_cv_gnu_make=no
258 if ${MAKE-make} --version 2>/dev/null | \
259 grep '^GNU Make ' >/dev/null ; then
260 quagga_cv_gnu_make=yes;
265 dnl -----------------
266 dnl System extensions
267 dnl -----------------
271 dnl ----------------------
272 dnl Packages configuration
273 dnl ----------------------
274 AC_ARG_WITH(pkg-extra-version,
275 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
276 [EXTRAVERSION=$withval],)
277 AC_ARG_WITH(pkg-git-version,
278 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
279 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
281 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for Quagga]))
283 AS_HELP_STRING([--disable-doc], [do not build docs]))
285 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
287 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
289 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
290 AC_ARG_ENABLE(ripngd,
291 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
293 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
294 AC_ARG_ENABLE(ospf6d,
295 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
297 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
298 AC_ARG_ENABLE(watchquagga,
299 AS_HELP_STRING([--disable-watchquagga], [do not build watchquagga]))
301 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
303 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
304 AC_ARG_ENABLE(bgp-announce,
305 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
307 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
309 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
310 AC_ARG_ENABLE(tcp-zebra,
311 AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
312 AC_ARG_ENABLE(ospfapi,
313 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
314 AC_ARG_ENABLE(ospfclient,
315 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
316 (this is the default if --disable-ospfapi is set)]))
317 AC_ARG_ENABLE(multipath,
318 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
320 AS_HELP_STRING([--enable-user=USER], [user to run Quagga suite as (default quagga)]))
322 AS_HELP_STRING([--enable-group=GROUP], [group to run Quagga suite as (default quagga)]))
323 AC_ARG_ENABLE(vty_group,
324 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
325 AC_ARG_ENABLE(configfile_mask,
326 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
327 AC_ARG_ENABLE(logfile_mask,
328 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
331 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
333 AS_HELP_STRING([--enable-irdp], [enable IRDP server support in zebra]))
334 AC_ARG_ENABLE(isis_topology,
335 AS_HELP_STRING([--enable-isis-topology], [enable IS-IS topology generator]))
336 AC_ARG_ENABLE(capabilities,
337 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
338 AC_ARG_ENABLE(rusage,
339 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
340 AC_ARG_ENABLE(gcc_ultra_verbose,
341 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
342 AC_ARG_ENABLE(linux24_tcp_md5,
343 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
344 AC_ARG_ENABLE(gcc-rdynamic,
345 AS_HELP_STRING([--enable-gcc-rdynamic], [enable linking with -rdynamic for better backtraces (default if gcc)]))
346 AC_ARG_ENABLE(backtrace,
347 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
348 AC_ARG_ENABLE(time-check,
349 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
350 AC_ARG_ENABLE(pcreposix,
351 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
353 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
354 AC_ARG_ENABLE(werror,
355 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
356 AC_ARG_ENABLE([protobuf],
357 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
359 AC_ARG_ENABLE([dev_build],
360 AS_HELP_STRING([--enable-dev-build], [build for development]))
362 if test x"${enable_gcc_rdynamic}" != x"no" ; then
363 if test x"${enable_gcc_rdynamic}" = x"yes" -o x"$COMPILER" = x"GCC"; then
364 LDFLAGS="${LDFLAGS} -rdynamic"
368 if test x"${enable_time_check}" != x"no" ; then
369 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
370 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
372 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
376 if test "${enable_fpm}" = "yes"; then
377 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
380 if test "x${enable_dev_build}" = "xyes"; then
381 AC_DEFINE(DEV_BUILD,,Build for development)
383 AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
386 # Logic for protobuf support.
388 if test "$enable_protobuf" = "yes"; then
392 AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
393 if test "x$PROTOC_C" = "x/bin/false"; then
397 PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
398 [found_protobuf_c=yes],
399 [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
401 if test "x$found_protobuf_c" = "xyes"; then
402 LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
403 CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
405 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
406 [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
411 # Fail if the user explicity enabled protobuf support and we couldn't
412 # find the compiler or libraries.
413 if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
414 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
417 if test "x$have_protobuf" = "xyes"; then
418 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
421 AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
424 # End of logic for protobuf support.
427 if test "${enable_tcp_zebra}" = "yes"; then
428 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
431 if test "${enable_linux24_tcp_md5}" = "yes"; then
432 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
435 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
436 if test "${enable_rtadv}" != "no"; then
438 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
443 if test "${enable_irdp}" = "yes"; then
444 AC_DEFINE(HAVE_IRDP,, IRDP )
447 if test "${enable_isisd}" != "no" && test "${enable_isis_topology}" = yes; then
448 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
449 ISIS_TOPOLOGY_INCLUDES="-I\$(srcdir)/topology"
450 ISIS_TOPOLOGY_DIR="topology"
451 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
454 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
455 AC_SUBST(ISIS_TOPOLOGY_DIR)
456 AC_SUBST(ISIS_TOPOLOGY_LIB)
458 if test x"${enable_user}" = x"no"; then
461 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
464 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
467 if test x"${enable_group}" = x"no"; then
470 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
471 enable_group="quagga"
473 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
476 if test x"${enable_vty_group}" = x"yes" ; then
477 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
478 elif test x"${enable_vty_group}" != x""; then
479 if test x"${enable_vty_group}" != x"no"; then
480 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
483 AC_SUBST([enable_user])
484 AC_SUBST([enable_group])
485 AC_SUBST([enable_vty_group])
487 enable_configfile_mask=${enable_configfile_mask:-0600}
488 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
490 enable_logfile_mask=${enable_logfile_mask:-0600}
491 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
495 case "${enable_multipath}" in
499 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
500 MPATH_NUM="${enable_multipath}"
505 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
509 AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
511 dnl -----------------------------------
512 dnl Add extra version string to package
513 dnl name, string and version fields.
514 dnl -----------------------------------
515 if test "x${EXTRAVERSION}" != "x" ; then
516 VERSION="${VERSION}${EXTRAVERSION}"
517 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
518 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
521 if test "x$with_pkg_git_version" = "xyes"; then
522 if test -d "${srcdir}/.git"; then
523 AC_DEFINE(GIT_VERSION, [1], [include git version info])
524 else with_pkg_git_version="no"
525 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
528 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
530 dnl ------------------------------------
531 dnl Check C keywords and standard types
532 dnl ------------------------------------
547 dnl -------------------------
548 dnl Check other header files.
549 dnl -------------------------
550 AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
551 sys/types.h linux/version.h netdb.h asm/types.h \
552 sys/cdefs.h sys/param.h limits.h signal.h \
553 sys/socket.h netinet/in.h time.h sys/time.h features.h])
555 dnl Utility macro to avoid retyping includes all the time
556 m4_define([QUAGGA_INCLUDES],
559 #define __EXTENSIONS__
571 # include <sys/types.h>
573 /* sys/conf.h depends on param.h on FBSD at least */
575 # include <sys/param.h>
577 /* Required for MAXSIG */
581 #if HAVE_SYS_SOCKET_H
582 # include <sys/socket.h>
585 # define __APPLE_USE_RFC_3542
587 #if HAVE_NETINET_IN_H
588 # include <netinet/in.h>
590 #ifdef TIME_WITH_SYS_TIME
591 # include <sys/time.h>
594 # ifdef HAVE_SYS_TIME_H
595 # include <sys/time.h>
599 #endif /* TIME_WITH_SYS_TIME */
602 dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
603 dnl round below execution begins, otherwise it doesn't properly detect
604 dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
605 dnl on FreeBSD (BZ#408).
607 AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
609 m4_define([QUAGGA_INCLUDES],
616 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
617 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
618 dnl an additional round for it.
620 AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
622 m4_define([QUAGGA_INCLUDES],
624 [#if HAVE_NET_IF_VAR_H
625 # include <net/if_var.h>
629 AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
630 net/if_dl.h net/netopt.h net/route.h \
631 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
632 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
633 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
634 [], [], QUAGGA_INCLUDES)
636 AC_CHECK_HEADERS([ucontext.h], [], [],
639 #endif /* __USE_GNU */
643 m4_define([UCONTEXT_INCLUDES],
644 [#include <ucontext.h>])dnl
646 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
647 [], [], [UCONTEXT_INCLUDES])
648 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
649 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
650 [], [], [UCONTEXT_INCLUDES])],
651 [], [UCONTEXT_INCLUDES])
652 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
653 [], [], [UCONTEXT_INCLUDES])
655 m4_define([QUAGGA_INCLUDES],
660 #if HAVE_NETINET_IN_SYSTM_H
661 # include <netinet/in_systm.h>
663 #if HAVE_NETINET_IN_VAR_H
664 # include <netinet/in_var.h>
667 # include <net/if_dl.h>
669 #if HAVE_NET_NETOPT_H
670 # include <net/netopt.h>
673 # include <net/route.h>
676 # include <inet/nd.h>
679 # include <arpa/inet.h>
681 /* Required for IDRP */
682 #if HAVE_NETINET_IP_ICMP_H
683 # include <netinet/ip_icmp.h>
687 dnl V6 headers are checked below, after we check for v6
689 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
691 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
693 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
694 AC_DEFINE(SUNOS_5, 1, SunOS 5)
695 AC_CHECK_LIB(xnet, main)
700 | [*-sunos5.1[0-9]] \
701 | [*-sunos5.1[0-9].[0-9]] \
702 | [*-solaris2.[8-9]] \
703 | [*-solaris2.1[0-9]] \
704 | [*-solaris2.1[0-9].[0-9]])
706 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
707 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
708 AC_CHECK_LIB(socket, main)
709 AC_CHECK_LIB(nsl, main)
710 AC_CHECK_LIB(umem, main)
711 AC_CHECK_FUNCS([printstack],
712 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
713 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
718 *-sunos5* | *-solaris2*)
719 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
720 AC_CHECK_LIB(socket, main)
721 AC_CHECK_LIB(nsl, main)
727 AC_DEFINE(GNU_LINUX,,GNU Linux)
731 AC_DEFINE(OPEN_BSD,,OpenBSD)
737 dnl ---------------------
738 dnl Integrated VTY option
739 dnl ---------------------
740 case "${enable_vtysh}" in
743 AC_DEFINE(VTYSH,,VTY shell)
744 dnl Vtysh uses libreadline, which looks for termcap functions at
745 dnl configure time. We follow readlines search order.
746 dnl The required procedures are in libtermcap on NetBSD, in
747 dnl [TODO] on Linux, and in [TODO] on Solaris.
748 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
749 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
750 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
751 [AC_CHECK_LIB(ncurses, tputs,
752 LIBREADLINE="$LIBREADLINE -lncurses")]
756 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
758 if test $ac_cv_lib_readline_main = no; then
759 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
761 AC_CHECK_HEADER(readline/history.h)
762 if test $ac_cv_header_readline_history_h = no;then
763 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
765 AC_CHECK_LIB(readline, rl_completion_matches,
766 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
767 if test $ac_cv_lib_readline_rl_completion_matches = no; then
768 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
773 AC_SUBST(LIBREADLINE)
774 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
779 dnl Quagga detects the PAM library it is built against by checking for a
780 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
781 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
782 dnl openpam.h doesn't do that, although depends on the header too. Hence a
783 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
786 if test "$with_libpam" = "yes"; then
787 AC_CHECK_HEADER([security/pam_misc.h],
788 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
789 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
790 pam_conv_func="misc_conv"
793 AC_CHECK_HEADER([security/openpam.h],
794 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
795 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
796 pam_conv_func="openpam_ttyconv"
798 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
799 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
800 AC_MSG_WARN([*** pam support will not be built ***])
805 if test "$with_libpam" = "yes"; then
806 dnl took this test from proftpds configure.in and suited to our needs
807 dnl -------------------------------------------------------------------------
809 dnl This next check looks funky due to a linker problem with some versions
810 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
811 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
812 dnl with RedHat 6.2 and Debian 2.2 or better.
813 AC_CHECK_LIB(pam, pam_start,
814 [AC_CHECK_LIB(pam, $pam_conv_func,
815 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
817 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
818 LIBPAM="-lpam -lpam_misc"]
822 [AC_CHECK_LIB(pam, pam_end,
823 [AC_CHECK_LIB(pam, $pam_conv_func,
824 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
825 LIBPAM="-lpam -ldl"],
826 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
827 LIBPAM="-lpam -ldl -lpam_misc"]
829 ],AC_MSG_WARN([*** pam support will not be built ***]),
836 dnl -------------------------------
837 dnl Endian-ness check
838 dnl -------------------------------
841 dnl -------------------------------
842 dnl check the size in byte of the C
843 dnl -------------------------------
844 dnl AC_CHECK_SIZEOF(char)
845 dnl AC_CHECK_SIZEOF(int)
846 dnl AC_CHECK_SIZEOF(short)
847 dnl AC_CHECK_SIZEOF(long)
849 dnl ----------------------------
850 dnl check existance of functions
851 dnl ----------------------------
859 AC_FUNC_SELECT_ARGTYPES
861 dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
862 dnl can lead to strange side effects. So we just check for strnlen
863 dnl directly, see below.
864 dnl AC_FUNC_STRNLENdnl
867 dnl -------------------------------
868 dnl bgpd needs pow() and hence libm
869 dnl -------------------------------
871 AC_CHECK_HEADER([math.h],
872 [AC_CHECK_LIB([m], [pow],
875 AC_DEFINE(HAVE_LIBM,, Have libm)
876 AC_CHECK_FUNCS(pow,[],[LIBM=""])
879 if test x"$LIBM" = x ; then
880 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
888 AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
889 inet_ntoa inet_aton strnlen \
890 memchr memmove memset select socket \
891 strcasecmp strchr strcspn strdup strerror \
892 strncasecmp strndup strrchr strspn strstr \
893 strtol strtoul strlcat strlcpy \
894 daemon snprintf vsnprintf \
895 if_nametoindex if_indextoname getifaddrs \
896 uname fcntl getgrouplist])
899 AC_CHECK_HEADER([asm-generic/unistd.h],
900 [AC_CHECK_DECL(__NR_setns,
901 AC_DEFINE(HAVE_NETNS,, Have netns),,
902 QUAGGA_INCLUDES [#include <asm-generic/unistd.h>
904 AC_CHECK_FUNCS(setns, AC_DEFINE(HAVE_SETNS,, Have setns))]
907 dnl ------------------------------------
908 dnl Determine routing get and set method
909 dnl ------------------------------------
910 AC_MSG_CHECKING(zebra between kernel interface method)
911 if test x"$opsys" = x"gnu-linux"; then
912 AC_MSG_RESULT(netlink)
913 RT_METHOD=rt_netlink.o
914 AC_DEFINE(HAVE_NETLINK,,netlink)
917 AC_MSG_RESULT(Route socket)
918 KERNEL_METHOD="kernel_socket.o"
919 RT_METHOD="rt_socket.o"
922 AC_SUBST(KERNEL_METHOD)
923 AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
925 dnl --------------------------
926 dnl Determine IS-IS I/O method
927 dnl --------------------------
928 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
929 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
930 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
931 AC_CHECK_HEADER(net/bpf.h)
932 AC_CHECK_HEADER(sys/dlpi.h)
933 AC_MSG_CHECKING(zebra IS-IS I/O method)
934 if test x"$opsys" = x"gnu-linux"; then
935 AC_MSG_RESULT(pfpacket)
936 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
937 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
939 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
941 if test $ac_cv_header_net_bpf_h = no; then
942 if test $ac_cv_header_sys_dlpi_h = no; then
944 AC_MSG_WARN([*** IS-IS support will not be built ***])
949 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
952 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
955 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
957 dnl ------------------------------------
958 dnl check for broken CMSG_FIRSTHDR macro
959 dnl ------------------------------------
960 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
961 AC_RUN_IFELSE([AC_LANG_SOURCE([[
964 #define __EXTENSIONS__
969 #ifdef HAVE_SYS_TYPES_H
970 #include <sys/types.h>
972 #ifdef HAVE_SYS_SOCKET_H
973 #include <sys/socket.h>
981 msg.msg_control = buf;
982 msg.msg_controllen = 0;
984 if (CMSG_FIRSTHDR(&msg) != NULL)
987 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
988 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
990 dnl ------------------------------
991 dnl check kernel route read method
992 dnl ------------------------------
993 AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
994 [if test "x$netlink" = xyes; then
995 quagga_cv_rtread_method="netlink"
997 for quagga_cv_rtread_method in /dev/ip /dev/null;
999 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
1001 case $quagga_cv_rtread_method in
1004 *-freebsd*) quagga_cv_rtread_method="sysctl";;
1005 *) quagga_cv_rtread_method="getmsg";;
1008 quagga_cv_rtread_method="sysctl";;
1011 RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
1012 AC_SUBST(RTREAD_METHOD)
1014 dnl -----------------------------
1015 dnl check interface lookup method
1016 dnl -----------------------------
1017 IOCTL_METHOD=ioctl.o
1018 AC_MSG_CHECKING(interface looking up method)
1019 if test "$netlink" = yes; then
1020 AC_MSG_RESULT(netlink)
1021 IF_METHOD=if_netlink.o
1022 elif test "$opsys" = "sol2-6";then
1023 AC_MSG_RESULT(Solaris GIF)
1024 IF_METHOD=if_ioctl.o
1025 elif test "$opsys" = "sol8";then
1026 AC_MSG_RESULT(Solaris GLIF)
1027 IF_METHOD=if_ioctl_solaris.o
1028 IOCTL_METHOD=ioctl_solaris.o
1029 elif test "$opsys" = "openbsd";then
1030 AC_MSG_RESULT(openbsd)
1031 IF_METHOD=if_ioctl.o
1032 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
1033 AC_MSG_RESULT(sysctl)
1034 IF_METHOD=if_sysctl.o
1035 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
1037 AC_MSG_RESULT(ioctl)
1038 IF_METHOD=if_ioctl.o
1041 AC_SUBST(IOCTL_METHOD)
1043 dnl ---------------------------------------------------------------
1044 dnl figure out how to specify an interface in multicast sockets API
1045 dnl ---------------------------------------------------------------
1046 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
1048 AC_CHECK_HEADERS([linux/mroute.h], [], [],
1050 #if HAVE_NETINET_IN_H
1051 #include<netinet/in.h>
1053 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
1054 AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
1055 #include <sys/param.h>
1056 #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)
1059 #error No support for BSD struct ip_mreq hack detected
1060 #endif],[AC_MSG_RESULT(yes)
1061 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1064 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1066 #include <sys/types.h>
1067 #include <netinet/in.h>
1068 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1069 ], [AC_MSG_RESULT(yes)
1070 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1073 dnl ---------------------------------------------------------------
1074 dnl figure out how to check link-state
1075 dnl ---------------------------------------------------------------
1076 AC_CHECK_HEADER([net/if.h],
1077 [AC_CHECK_HEADER( [net/if_media.h],
1078 [m4_define([LINK_DETECT_INCLUDES],
1080 [#include <net/if_media.h>
1082 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1083 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1084 [], LINK_DETECT_INCLUDES)],
1087 [], QUAGGA_INCLUDES )
1089 dnl ---------------------------------------------------------------
1090 dnl Additional, newer way to check link-state using ifi_link_state.
1091 dnl Not available in all BSD's when ifmediareq available
1092 dnl ---------------------------------------------------------------
1093 AC_CHECK_HEADER([net/if.h],
1094 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1095 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1096 [], QUAGGA_INCLUDES),
1099 dnl ------------------------
1100 dnl TCP_MD5SIG socket option
1101 dnl ------------------------
1103 AC_CHECK_HEADER([netinet/tcp.h],
1104 [m4_define([MD5_INCLUDES],
1106 [#include <netinet/tcp.h>
1108 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1111 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1112 AC_CHECK_HEADER([linux/tcp.h],
1113 [m4_define([MD5_INCLUDES],
1115 [#include <linux/tcp.h>
1117 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1120 dnl -----------------------------
1121 dnl check ipforward detect method
1122 dnl -----------------------------
1123 AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
1124 [if test x$cross_compiling = xyes; then
1125 if test x"$opsys" = x"gnu-linux"; then
1126 quagga_cv_ipforward_method=/proc/net/snmp
1128 quagga_cv_ipforward_method=/dev/ip
1131 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1133 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1136 case $quagga_cv_ipforward_method in
1137 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
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)
1157 if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1158 AC_DEFINE(KAME,1,KAME IPv6)
1160 dnl ------------------------------------
1161 dnl Solaris 9, 10 and potentially higher
1162 dnl ------------------------------------
1163 elif test x"$opsys" = x"sol8"; then
1164 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1165 AC_MSG_RESULT(Solaris IPv6)
1169 elif test x"$opsys" = x"gnu-linux"; then
1170 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1171 AC_MSG_RESULT(Linux IPv6)
1173 AC_MSG_ERROR([Failed to detect IPv6 stack])
1176 dnl this is unconditial, for compatibility
1177 AC_DEFINE(HAVE_IPV6,1,IPv6)
1179 dnl ------------------
1180 dnl IPv6 header checks
1181 dnl ------------------
1182 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
1183 netinet6/in6_var.h netinet6/nd6.h], [], [],
1186 m4_define([QUAGGA_INCLUDES],dnl
1188 [#if HAVE_NETINET6_IN6_H
1189 #include <netinet6/in6.h>
1191 #if HAVE_NETINET_IN6_VAR_H
1192 #include <netinet/in6_var.h>
1194 #if HAVE_NETINET_ICMP6_H
1195 # include <netinet/icmp6.h>
1197 #if HAVE_NETINET6_IN6_VAR_H
1198 # include <netinet6/in6_var.h>
1200 #if HAVE_NETINET6_ND6_H
1201 # include <netinet6/nd6.h>
1205 dnl disable doc check
1206 if test "${enable_doc}" = "no";then
1212 dnl --------------------
1213 dnl Daemon disable check
1214 dnl --------------------
1215 if test "${enable_zebra}" = "no";then
1220 AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
1222 if test "${enable_bgpd}" = "no";then
1227 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1229 if test "${enable_ripd}" = "no";then
1234 AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
1236 if test "${enable_ospfd}" = "no";then
1241 AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
1243 if test x"$opsys" != x"gnu-linux"; then
1244 dnl NHRPd works currently with Linux only.
1247 if test "${enable_nhrpd}" = "no";then
1252 AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1254 if test "${enable_watchquagga}" = "no";then
1257 WATCHQUAGGA="watchquagga"
1259 AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
1262 if test "${enable_ospfapi}" != "no";then
1263 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1265 if test "${enable_ospfclient}" != "no";then
1266 OSPFCLIENT="ospfclient"
1270 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1272 case "${enable_ripngd}" in
1274 * ) RIPNGD="ripngd";;
1276 AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
1278 case "${enable_ospf6d}" in
1280 * ) OSPF6D="ospf6d";;
1282 AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
1284 case "${enable_isisd}" in
1288 AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
1290 case "${enable_pimd}" in
1294 AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
1296 if test "${enable_bgp_announce}" = "no";then
1297 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1299 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1310 AC_SUBST(WATCHQUAGGA)
1316 AC_SUBST(OSPFCLIENT)
1318 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1319 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1320 AC_CHECK_LIB(crypt, crypt)
1321 AC_CHECK_LIB(resolv, res_init)
1323 dnl ---------------------------
1324 dnl check system has PCRE regexp
1325 dnl ---------------------------
1326 if test "x$enable_pcreposix" = "xyes"; then
1327 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1328 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1331 if test "x$enable_pcreposix" != "xyes"; then
1332 dnl ---------------------------
1333 dnl check system has GNU regexp
1334 dnl ---------------------------
1335 AC_MSG_CHECKING(whether system has GNU regex)
1336 AC_CHECK_LIB(c, regexec,
1337 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1339 [LIB_REGEX="regex.o"])
1341 AC_SUBST(HAVE_LIBPCREPOSIX)
1344 dnl ------------------
1345 dnl check C-Ares library
1346 dnl ------------------
1347 if test "${enable_nhrpd}" != "no";then
1348 PKG_CHECK_MODULES([CARES], [libcares])
1352 dnl ------------------
1353 dnl check Net-SNMP library
1354 dnl ------------------
1355 if test "${enable_snmp}" != ""; then
1356 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1357 if test x"$NETSNMP_CONFIG" = x"no"; then
1358 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1360 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1361 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1362 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1363 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1370 ])],[AC_MSG_RESULT(yes)],[
1372 AC_MSG_ERROR([--enable-snmp given but not usable])])
1373 AC_DEFINE(HAVE_SNMP,,SNMP)
1374 case "${enable_snmp}" in
1379 SNMP_METHOD="${enable_snmp}"
1382 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1385 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1386 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1387 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1390 dnl ---------------------------
1391 dnl sockaddr and netinet checks
1392 dnl ---------------------------
1393 AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1394 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1395 socklen_t, struct vifctl, struct mfcctl, struct sioc_sg_req,
1396 vifi_t, struct sioc_vif_req, struct igmpmsg,
1397 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1398 struct nd_opt_adv_interval, struct rt_addrinfo,
1399 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1400 [], [], QUAGGA_INCLUDES)
1402 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1403 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1404 struct sockaddr_in6.sin6_scope_id,
1405 struct sockaddr_dl.sdl_len,
1406 struct if6_aliasreq.ifra_lifetime,
1407 struct nd_opt_adv_interval.nd_opt_ai_type],
1408 [], [], QUAGGA_INCLUDES)
1410 dnl ---------------------------
1411 dnl IRDP/pktinfo/icmphdr checks
1412 dnl ---------------------------
1413 AC_CHECK_TYPES([struct in_pktinfo],
1414 [AC_CHECK_TYPES([struct icmphdr],
1415 [if test "${enable_irdp}" != "no"; then
1416 AC_DEFINE(HAVE_IRDP,, IRDP)
1418 [if test "${enable_irdp}" = "yes"; then
1419 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1420 fi], [QUAGGA_INCLUDES])],
1421 [if test "${enable_irdp}" = "yes"; then
1422 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1423 fi], [QUAGGA_INCLUDES])
1425 dnl -----------------------
1426 dnl checking for IP_PKTINFO
1427 dnl -----------------------
1428 AC_MSG_CHECKING(for IP_PKTINFO)
1429 AC_TRY_COMPILE([#include <netdb.h>], [
1430 int opt = IP_PKTINFO;
1433 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1438 dnl ---------------------------
1439 dnl checking for IP_RECVDSTADDR
1440 dnl ---------------------------
1441 AC_MSG_CHECKING(for IP_RECVDSTADDR)
1442 AC_TRY_COMPILE([#include <netinet/in.h>], [
1443 int opt = IP_RECVDSTADDR;
1446 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1451 dnl ----------------------
1452 dnl checking for IP_RECVIF
1453 dnl ----------------------
1454 AC_MSG_CHECKING(for IP_RECVIF)
1455 AC_TRY_COMPILE([#include <netinet/in.h>], [
1456 int opt = IP_RECVIF;
1459 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1464 dnl --------------------------------------
1465 dnl checking for getrusage struct and call
1466 dnl --------------------------------------
1467 if test "${enable_rusage}" != "no"; then
1468 AC_MSG_CHECKING(whether getrusage is available)
1469 AC_TRY_COMPILE([#include <sys/resource.h>],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1471 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1475 dnl --------------------------------------
1476 dnl checking for clock_time monotonic struct and call
1477 dnl --------------------------------------
1478 AC_CHECK_DECL(CLOCK_MONOTONIC,
1479 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1480 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1481 ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
1483 dnl -------------------
1484 dnl capabilities checks
1485 dnl -------------------
1486 if test "${enable_capabilities}" != "no"; then
1487 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1488 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1490 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1491 quagga_ac_keepcaps="yes"],
1494 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1495 AC_CHECK_HEADERS(sys/capability.h)
1497 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1498 AC_CHECK_LIB(cap, cap_init,
1499 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1501 quagga_ac_lcaps="yes"]
1504 AC_CHECK_HEADERS(priv.h,
1505 [AC_MSG_CHECKING(Solaris style privileges are available)
1506 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1508 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1509 quagga_ac_scaps="yes"],
1515 if test x"${quagga_ac_scaps}" = x"yes" \
1516 -o x"${quagga_ac_lcaps}" = x"yes"; then
1517 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1522 dnl ---------------------------------------------------------------------------
1523 dnl http://www.gnu.org/software/autoconf-archive/ax_sys_weak_alias.html
1524 dnl Check for and set one of the following = 1
1525 dnl HAVE_SYS_WEAK_ALIAS_ATTRIBUTE
1526 dnl HAVE_SYS_WEAK_ALIAS_PRAGMA
1527 dnl HAVE_SYS_WEAK_ALIAS_HPSECONDARY
1528 dnl HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE
1529 dnl If any scheme is found, set
1530 dnl HAVE_SYS_WEAK_ALIAS=1
1531 dnl The following variable is set to text value
1532 dnl WEAK_ALIAS = "attribute" || "pragma" || "hpsecondary" || "criduplicate" || "no"
1533 dnl If weak alias can cross object file boundaries
1534 dnl WEAK_ALIAS_CROSSFILE = "yes" || "no"
1535 dnl ---------------------------------------------------------------------------
1538 dnl ---------------------------
1539 dnl check for glibc 'backtrace'
1540 dnl ---------------------------
1541 if test x"${enable_backtrace}" != x"no" ; then
1543 AC_CHECK_HEADER([execinfo.h], [
1544 AC_SEARCH_LIBS([backtrace], [execinfo], [
1545 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1546 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1551 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1552 dnl user explicitly requested backtrace but we failed to find support
1553 AC_MSG_FAILURE([failed to find backtrace support])
1557 dnl -----------------------------------------
1558 dnl check for malloc mallinfo struct and call
1559 dnl this must try and link using LIBS, in
1560 dnl order to check no alternative allocator
1561 dnl has been specified, which might not provide
1562 dnl mallinfo, e.g. such as Umem on Solaris.
1563 dnl -----------------------------------------
1564 AC_CHECK_HEADER([malloc.h],
1565 [AC_MSG_CHECKING(whether mallinfo is available)
1566 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1567 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1569 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1572 ], [], QUAGGA_INCLUDES)
1577 CONFDATE=`date '+%Y%m%d'`
1583 if test x"$DEJAGNU" = x
1585 DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
1587 RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
1590 AC_SUBST(RUNTESTDEFAULTFLAGS)
1592 dnl ------------------------------
1593 dnl set paths for state directory
1594 dnl ------------------------------
1595 AC_MSG_CHECKING(directory to use for state file)
1596 if test "${prefix}" = "NONE"; then
1597 quagga_statedir_prefix="";
1599 quagga_statedir_prefix=${prefix}
1601 if test "${localstatedir}" = '${prefix}/var'; then
1602 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1603 ${quagga_statedir_prefix}/var/adm dnl
1604 ${quagga_statedir_prefix}/etc dnl
1610 test -d $QUAGGA_STATE_DIR && break
1612 quagga_statedir=$QUAGGA_STATE_DIR
1614 quagga_statedir=${localstatedir}
1616 if test $quagga_statedir = "/dev/null"; then
1617 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1619 AC_MSG_RESULT(${quagga_statedir})
1620 AC_SUBST(quagga_statedir)
1622 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1623 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1624 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1625 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1626 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1627 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1628 AC_DEFINE_UNQUOTED(PATH_NHRPD_PID, "$quagga_statedir/nhrpd.pid",nhrpd PID)
1629 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1630 AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$quagga_statedir/pimd.pid",pimd PID)
1631 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1632 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1633 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1634 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1635 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1636 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1637 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1638 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1639 AC_DEFINE_UNQUOTED(NHRP_VTYSH_PATH, "$quagga_statedir/nhrpd.vty",nhrpd vty socket)
1640 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1641 AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$quagga_statedir/pimd.vty",pimd vty socket)
1642 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1644 dnl -------------------------------
1645 dnl Quagga sources should always be
1646 dnl current wrt interfaces. Dont
1647 dnl allow deprecated interfaces to
1649 dnl -------------------------------
1650 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1652 dnl ---------------------------
1653 dnl Check htonl works correctly
1654 dnl ---------------------------
1655 AC_MSG_CHECKING(for working htonl)
1656 AC_CACHE_VAL(ac_cv_htonl_works,
1657 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1658 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1661 AC_MSG_RESULT($ac_cv_htonl_works)
1663 AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
1664 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1665 ospf6d/Makefile isisd/Makefile vtysh/Makefile
1666 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
1667 pimd/Makefile nhrpd/Makefile
1668 tests/bgpd.tests/Makefile
1669 tests/libzebra.tests/Makefile
1675 isisd/topology/Makefile
1676 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1677 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1678 AC_CONFIG_FILES([solaris/Makefile])
1680 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1681 ## Hack, but working solution to avoid rebuilding of quagga.info.
1682 ## It's already in CVS until texinfo 4.7 is more common.
1686 Quagga configuration
1687 --------------------
1688 quagga version : ${PACKAGE_VERSION}
1689 host operating system : ${host_os}
1690 source code location : ${srcdir}
1692 compiler flags : ${CFLAGS}
1694 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1695 state file directory : ${quagga_statedir}
1696 config file directory : `eval echo \`echo ${sysconfdir}\``
1697 example directory : `eval echo \`echo ${exampledir}\``
1698 user to run as : ${enable_user}
1699 group to run as : ${enable_group}
1700 group for vty sockets : ${enable_vty_group}
1701 config file mask : ${enable_configfile_mask}
1702 log file mask : ${enable_logfile_mask}
1703 zebra protobuf enabled : ${have_protobuf:-no}
1705 The above user and group must have read/write access to the state file
1706 directory and to the config files in the config file directory."
1708 if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1709 Warning: The ${MAKE-make} programme detected, either in your path or
1710 via the MAKE variable, is not GNU Make. GNU make may be installed as
1711 gmake on some systems. and is required to complete a build of Quagga