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.22, [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 AC_CONFIG_HEADERS(config.h)
24 AC_PATH_PROG(PERL, perl)
25 AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
26 if test "x$GAWK" = "xnot-in-PATH" ; then
27 AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
28 BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
30 AC_ARG_VAR([GAWK],[GNU AWK])
32 dnl default is to match previous behavior
33 exampledir=${sysconfdir}
34 AC_ARG_ENABLE([exampledir],
35 AC_HELP_STRING([--enable-exampledir],
36 [specify alternate directory for examples]),
37 exampledir="$enableval",)
38 dnl XXX add --exampledir to autoconf standard directory list somehow
41 dnl default is to match previous behavior
44 AC_ARG_ENABLE([pkgsrcrcdir],
45 AC_HELP_STRING([--enable-pkgsrcrcdir],
46 [specify directory for rc.d scripts]),
47 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
48 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
56 [ --with-cflags Set CFLAGS for use in compilation.])
57 if test "x$with_cflags" != "x" ; then
58 CFLAGS="$with_cflags" ; cflags_specified=yes ;
59 elif test -n "$CFLAGS" ; then
60 cflags_specified=yes ;
63 dnl --------------------
64 dnl Check CC and friends
65 dnl --------------------
72 dnl autoconf 2.59 appears not to support AC_PROG_SED
74 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
76 dnl pdflatex and latexmk are needed to build HACKING.pdf
77 AC_CHECK_PROG([PDFLATEX],[pdflatex],[pdflatex],[/bin/false])
78 AC_CHECK_PROG([LATEXMK],[latexmk],[latexmk],[/bin/false])
79 if test "x$PDFLATEX" = "x/bin/false" -o "x$LATEXMK" = "x/bin/false"; then
80 AC_MSG_WARN([Will not be able to make PDF versions of TeX documents])
84 AM_CONDITIONAL([HAVE_LATEX], [test "x$HAVE_LATEX" = "xtrue"])
86 dnl ------------------------------------------------------------------
87 dnl Intel compiler check. Although Intel tries really hard to make icc
88 dnl look like gcc, there are some differences. It's very verbose with
89 dnl -Wall and it doesn't support the individual -W options.
90 dnl ------------------------------------------------------------------
91 if test "x${GCC}" = "xyes" ; then
93 AC_MSG_CHECKING([whether we are using the Intel compiler])
94 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
95 [AC_MSG_RESULT([no])],
100 AC_MSG_CHECKING([whether we are using SunPro compiler])
101 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
102 [AC_MSG_RESULT([no])],
104 AC_MSG_RESULT([yes])]
108 dnl ---------------------------------------------
109 dnl If CLFAGS doesn\'t exist set default value
110 dnl AC_PROG_CC will have set minimal default
111 dnl already, eg "-O2 -g" for gcc, "-g" for others
112 dnl (Wall is gcc specific... have to make sure
113 dnl gcc is being used before setting it)
115 dnl Intel icc 8.0 also sets __GNUC__,
116 dnl but doesn't support all these fancy -W options.
117 dnl Intel compiler warnings we ignore:
118 dnl 279: controlling expression is constant.
119 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
120 dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
122 dnl 981: operands are evaluated in unspecified order.
124 dnl Sun Studio 10 / SunPro 5.7 is also supported,
125 dnl so lets set some sane CFLAGS for it.
126 dnl ---------------------------------------------
128 AC_MSG_CHECKING([whether to set a default CFLAGS])
129 if test "x${cflags_specified}" = "x" ; then
132 CFLAGS="-Os -g -Wall"
133 AC_MSG_RESULT([Intel default])
136 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
137 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
138 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
139 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
140 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
141 # TODO: conditionally addd -Wpacked if handled
142 AC_MSG_RESULT([gcc default])
145 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
146 AC_MSG_RESULT([SunPro default])
149 AC_MSG_RESULT([unknown compiler])
153 AC_MSG_RESULT([CFLAGS supplied by user])
162 AC_CHECK_TOOL(AR, ar)
164 dnl ---------------------------
165 dnl We, perhaps unfortunately,
166 dnl depend on GNU Make specific
168 dnl Give the user a warning if
170 dnl ---------------------------
171 AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
172 [quagga_cv_gnu_make=no
173 if ${MAKE-make} --version 2>/dev/null | \
174 grep '^GNU Make ' >/dev/null ; then
175 quagga_cv_gnu_make=yes;
180 dnl -----------------
181 dnl System extensions
182 dnl -----------------
190 dnl ----------------------
191 dnl Packages configuration
192 dnl ----------------------
193 AC_ARG_WITH(pkg-extra-version,
194 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
195 [EXTRAVERSION=$withval],)
196 AC_ARG_WITH(pkg-git-version,
197 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
198 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
200 [ --enable-vtysh include integrated vty shell for Quagga])
202 [ --disable-ipv6 turn off IPv6 related features and daemons])
204 [ --disable-doc do not build docs])
206 [ --disable-tests do not build tests])
208 [ --disable-zebra do not build zebra daemon])
210 [ --disable-bgpd do not build bgpd])
212 [ --disable-ripd do not build ripd])
213 AC_ARG_ENABLE(ripngd,
214 [ --disable-ripngd do not build ripngd])
216 [ --disable-ospfd do not build ospfd])
217 AC_ARG_ENABLE(ospf6d,
218 [ --disable-ospf6d do not build ospf6d])
219 AC_ARG_ENABLE(babeld,
220 [ --disable-babeld do not build babeld])
221 AC_ARG_ENABLE(watchquagga,
222 [ --disable-watchquagga do not build watchquagga])
224 [ --enable-isisd build isisd])
225 AC_ARG_ENABLE(solaris,
226 [ --enable-solaris build solaris])
227 AC_ARG_ENABLE(bgp-announce,
228 [ --disable-bgp-announce, turn off BGP route announcement])
229 AC_ARG_ENABLE(netlink,
230 [ --enable-netlink force to use Linux netlink interface])
231 AC_ARG_ENABLE(broken-aliases,
232 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
234 [ --enable-snmp=ARG enable SNMP support (smux or agentx)])
236 [ --with-libpam use libpam for PAM support in vtysh])
237 AC_ARG_ENABLE(tcp-zebra,
238 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
239 AC_ARG_ENABLE(opaque-lsa,
240 AC_HELP_STRING([--disable-opaque-lsa],[do not build OSPF Opaque-LSA with OSPFAPI support (RFC2370)]))
241 AC_ARG_ENABLE(ospfapi,
242 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database])
243 AC_ARG_ENABLE(ospfclient,
244 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
245 (this is the default if --disable-ospfapi is set)])
246 AC_ARG_ENABLE(ospf-te,
247 AC_HELP_STRING([--disable-ospf-te],[disable Traffic Engineering Extension to OSPF]))
248 AC_ARG_ENABLE(multipath,
249 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
251 AC_HELP_STRING([--enable-user=user], [user to run Quagga suite as (default quagga)]))
253 AC_HELP_STRING([--enable-group=group], [group to run Quagga suite as (default quagga)]))
254 AC_ARG_ENABLE(vty_group,
255 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
256 AC_ARG_ENABLE(configfile_mask,
257 [ --enable-configfile-mask=ARG set mask for config files])
258 AC_ARG_ENABLE(logfile_mask,
259 [ --enable-logfile-mask=ARG set mask for log files])
262 [ --disable-rtadv disable IPV6 router advertisement feature])
264 [ --enable-irdp enable IRDP server support in zebra])
265 AC_ARG_ENABLE(isis_topology,
266 [ --enable-isis-topology enable IS-IS topology generator])
267 AC_ARG_ENABLE(capabilities,
268 [ --disable-capabilities disable using POSIX capabilities])
269 AC_ARG_ENABLE(rusage,
270 [ --disable-rusage disable using getrusage])
271 AC_ARG_ENABLE(gcc_ultra_verbose,
272 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
273 AC_ARG_ENABLE(linux24_tcp_md5,
274 [ --enable-linux24-tcp-md5 enable support for old, Linux-2.4 RFC2385 patch])
275 AC_ARG_ENABLE(gcc-rdynamic,
276 [ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
277 AC_ARG_ENABLE(time-check,
278 [ --disable-time-check disable slow thread warning messages])
279 AC_ARG_ENABLE(pcreposix,
280 [ --enable-pcreposix enable using PCRE Posix libs for regex functions])
282 [ --enable-fpm enable Forwarding Plane Manager support])
284 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
285 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
286 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
287 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
288 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
291 if test x"${enable_gcc_rdynamic}" = x"yes" ; then
292 LDFLAGS="${LDFLAGS} -rdynamic"
295 if test x"${enable_time_check}" != x"no" ; then
296 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
297 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
299 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
303 if test "${enable_fpm}" = "yes"; then
304 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
307 if test "${enable_broken_aliases}" = "yes"; then
308 if test "${enable_netlink}" = "yes"
310 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
312 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
316 if test "${enable_tcp_zebra}" = "yes"; then
317 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
320 if test "${enable_opaque_lsa}" != "no"; then
321 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
324 if test "${enable_ospf_te}" != "no"; then
325 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
326 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
329 if test "${enable_linux24_tcp_md5}" = "yes"; then
330 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
333 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
334 if test "${enable_rtadv}" != "no"; then
336 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
341 if test "${enable_irdp}" = "yes"; then
342 AC_DEFINE(HAVE_IRDP,, IRDP )
345 if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
346 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
347 ISIS_TOPOLOGY_INCLUDES="-I\$(srcdir)/topology"
348 ISIS_TOPOLOGY_DIR="topology"
349 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
352 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
353 AC_SUBST(ISIS_TOPOLOGY_DIR)
354 AC_SUBST(ISIS_TOPOLOGY_LIB)
356 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
358 elif test "${enable_user}" = "no"; then
362 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
363 enable_group="quagga"
364 elif test "${enable_group}" = "no"; then
368 if test x"${enable_vty_group}" = x"yes" ; then
369 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
370 elif test x"${enable_vty_group}" != x""; then
371 if test x"${enable_vty_group}" != x"no"; then
372 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
375 AC_SUBST([enable_user])
376 AC_SUBST([enable_group])
377 AC_SUBST([enable_vty_group])
378 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
379 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
381 enable_configfile_mask=${enable_configfile_mask:-0600}
382 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
384 enable_logfile_mask=${enable_logfile_mask:-0600}
385 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
389 case "${enable_multipath}" in
391 MULTIPATH_NUM="${enable_multipath}"
396 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
400 AC_SUBST(MULTIPATH_NUM)
402 dnl -----------------------------------
403 dnl Add extra version string to package
404 dnl name, string and version fields.
405 dnl -----------------------------------
406 if test "x${EXTRAVERSION}" != "x" ; then
407 VERSION="${VERSION}${EXTRAVERSION}"
408 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
409 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
412 if test "x$with_pkg_git_version" = "xyes"; then
413 if test -d "${srcdir}/.git"; then
414 AC_DEFINE(GIT_VERSION, [1], [include git version info])
415 else with_pkg_git_version="no"
416 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
419 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
421 dnl ------------------------------------
422 dnl Check C keywords and standard types
423 dnl ------------------------------------
438 dnl -------------------------
439 dnl Check other header files.
440 dnl -------------------------
441 AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
442 sys/types.h linux/version.h netdb.h asm/types.h \
443 sys/param.h limits.h signal.h \
444 sys/socket.h netinet/in.h time.h sys/time.h])
446 dnl Utility macro to avoid retyping includes all the time
447 m4_define([QUAGGA_INCLUDES],
450 #define __EXTENSIONS__
462 # include <sys/types.h>
464 /* sys/conf.h depends on param.h on FBSD at least */
466 # include <sys/param.h>
468 /* Required for MAXSIG */
472 #if HAVE_SYS_SOCKET_H
473 # include <sys/socket.h>
476 # define __APPLE_USE_RFC_3542
478 #if HAVE_NETINET_IN_H
479 # include <netinet/in.h>
481 #ifdef TIME_WITH_SYS_TIME
482 # include <sys/time.h>
485 # ifdef HAVE_SYS_TIME_H
486 # include <sys/time.h>
490 #endif /* TIME_WITH_SYS_TIME */
493 dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
494 dnl round below execution begins, otherwise it doesn't properly detect
495 dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
496 dnl on FreeBSD (BZ#408).
498 AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
500 m4_define([QUAGGA_INCLUDES],
507 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
508 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
509 dnl an additional round for it.
511 AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
513 m4_define([QUAGGA_INCLUDES],
515 [#if HAVE_NET_IF_VAR_H
516 # include <net/if_var.h>
520 AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
521 net/if_dl.h net/netopt.h net/route.h \
522 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
523 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
524 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
525 [], [], QUAGGA_INCLUDES)
527 AC_CHECK_HEADERS([ucontext.h], [], [],
530 #endif /* __USE_GNU */
534 m4_define([QUAGGA_INCLUDES],
539 #if HAVE_NETINET_IN_SYSTM_H
540 # include <netinet/in_systm.h>
542 #if HAVE_NETINET_IN_VAR_H
543 # include <netinet/in_var.h>
546 # include <net/if_dl.h>
548 #if HAVE_NET_NETOPT_H
549 # include <net/netopt.h>
552 # include <net/route.h>
555 # include <inet/nd.h>
558 # include <arpa/inet.h>
560 /* Required for IDRP */
561 #if HAVE_NETINET_IP_ICMP_H
562 # include <netinet/ip_icmp.h>
566 dnl V6 headers are checked below, after we check for v6
568 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
570 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
572 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
573 AC_DEFINE(SUNOS_5, 1, SunOS 5)
574 AC_CHECK_LIB(xnet, main)
578 | [*-sunos5.1[0-9]] \
579 | [*-sunos5.1[0-9].[0-9]] \
580 | [*-solaris2.[8-9]] \
581 | [*-solaris2.1[0-9]] \
582 | [*-solaris2.1[0-9].[0-9]])
584 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
585 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
586 AC_CHECK_LIB(socket, main)
587 AC_CHECK_LIB(nsl, main)
588 AC_CHECK_LIB(umem, main)
589 AC_CHECK_FUNCS([printstack],
590 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
591 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
595 *-sunos5* | *-solaris2*)
596 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
597 AC_CHECK_LIB(socket, main)
598 AC_CHECK_LIB(nsl, main)
603 AC_DEFINE(GNU_LINUX,,GNU Linux)
606 AC_CHECK_LIB(nsl, gethostbyname)
607 AC_CHECK_LIB(socket, socket)
611 AC_DEFINE(OPEN_BSD,,OpenBSD)
615 OTHER_METHOD="mtu_kvm.o"
616 AC_CHECK_LIB(kvm, main)
620 AC_DEFINE(IRIX_65,,IRIX 6.5)
626 dnl ---------------------
627 dnl Integrated VTY option
628 dnl ---------------------
629 case "${enable_vtysh}" in
630 "yes") VTYSH="vtysh";
631 AC_DEFINE(VTYSH,,VTY shell)
632 dnl Vtysh uses libreadline, which looks for termcap functions at
633 dnl configure time. We follow readlines search order.
634 dnl The required procedures are in libtermcap on NetBSD, in
635 dnl [TODO] on Linux, and in [TODO] on Solaris.
636 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
637 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
638 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
639 [AC_CHECK_LIB(ncurses, tputs,
640 LIBREADLINE="$LIBREADLINE -lncurses")]
644 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
646 if test $ac_cv_lib_readline_main = no; then
647 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
649 AC_CHECK_HEADER(readline/history.h)
650 if test $ac_cv_header_readline_history_h = no;then
651 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
653 AC_CHECK_LIB(readline, rl_completion_matches,
654 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
655 if test $ac_cv_lib_readline_rl_completion_matches = no; then
656 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
662 AC_SUBST(LIBREADLINE)
663 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
668 dnl Quagga detects the PAM library it is built against by checking for a
669 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
670 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
671 dnl openpam.h doesn't do that, although depends on the header too. Hence a
672 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
675 if test "$with_libpam" = "yes"; then
676 AC_CHECK_HEADER([security/pam_misc.h],
677 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
678 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
679 pam_conv_func="misc_conv"
682 AC_CHECK_HEADER([security/openpam.h],
683 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
684 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
685 pam_conv_func="openpam_ttyconv"
687 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
688 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
689 AC_MSG_WARN([*** pam support will not be built ***])
694 if test "$with_libpam" = "yes"; then
695 dnl took this test from proftpds configure.in and suited to our needs
696 dnl -------------------------------------------------------------------------
698 dnl This next check looks funky due to a linker problem with some versions
699 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
700 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
701 dnl with RedHat 6.2 and Debian 2.2 or better.
702 AC_CHECK_LIB(pam, pam_start,
703 [AC_CHECK_LIB(pam, $pam_conv_func,
704 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
706 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
707 LIBPAM="-lpam -lpam_misc"]
711 [AC_CHECK_LIB(pam, pam_end,
712 [AC_CHECK_LIB(pam, $pam_conv_func,
713 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
714 LIBPAM="-lpam -ldl"],
715 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
716 LIBPAM="-lpam -ldl -lpam_misc"]
718 ],AC_MSG_WARN([*** pam support will not be built ***]),
725 dnl -------------------------------
726 dnl Endian-ness check
727 dnl -------------------------------
730 dnl -------------------------------
731 dnl check the size in byte of the C
732 dnl -------------------------------
733 dnl AC_CHECK_SIZEOF(char)
734 dnl AC_CHECK_SIZEOF(int)
735 dnl AC_CHECK_SIZEOF(short)
736 dnl AC_CHECK_SIZEOF(long)
738 dnl ----------------------------
739 dnl check existance of functions
740 dnl ----------------------------
748 AC_FUNC_SELECT_ARGTYPES
750 dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
751 dnl can lead to strange side effects. So we just check for strnlen
752 dnl directly, see below.
753 dnl AC_FUNC_STRNLENdnl
756 dnl -------------------------------
757 dnl bgpd needs pow() and hence libm
758 dnl -------------------------------
760 AC_CHECK_HEADER([math.h],
761 [AC_CHECK_LIB([m], [pow],
764 AC_DEFINE(HAVE_LIBM,, Have libm)
765 AC_CHECK_FUNCS(pow,[],[LIBM=""])
768 if test x"$LIBM" = x ; then
769 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
777 AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
778 inet_ntoa inet_aton strnlen \
779 memchr memmove memset select socket \
780 strcasecmp strchr strcspn strdup strerror \
781 strncasecmp strndup strrchr strspn strstr \
782 strtol strtoul strlcat strlcpy \
783 daemon snprintf vsnprintf \
784 if_nametoindex if_indextoname getifaddrs \
787 AC_CHECK_FUNCS(setproctitle, ,
788 [AC_CHECK_LIB(util, setproctitle,
790 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
796 dnl ------------------------------------
797 dnl Determine routing get and set method
798 dnl ------------------------------------
799 AC_MSG_CHECKING(zebra between kernel interface method)
800 if test x"$opsys" = x"gnu-linux"; then
801 if test "${enable_netlink}" = "yes";then
802 AC_MSG_RESULT(netlink)
803 RT_METHOD=rt_netlink.o
804 AC_DEFINE(HAVE_NETLINK,,netlink)
806 elif test "${enable_netlink}" = "no"; then
811 AC_MSG_RESULT(netlink)
812 RT_METHOD=rt_netlink.o
813 AC_DEFINE(HAVE_NETLINK,,netlink)
816 elif test x"$opsys" = x"sol2-6";then
817 AC_MSG_RESULT(Route socket)
818 KERNEL_METHOD="kernel_socket.o"
819 RT_METHOD="rt_socket.o"
820 elif test x"$opsys" = x"sol8";then
821 AC_MSG_RESULT(Route socket)
822 KERNEL_METHOD="kernel_socket.o"
823 RT_METHOD="rt_socket.o"
824 elif test "$opsys" = "irix" ; then
825 AC_MSG_RESULT(Route socket)
826 KERNEL_METHOD="kernel_socket.o"
827 RT_METHOD="rt_socket.o"
829 AC_TRY_RUN([#include <errno.h>
830 #include <sys/types.h>
831 #include <sys/socket.h>
837 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
838 if (ac_sock < 0 && errno == EINVAL)
842 [KERNEL_METHOD=kernel_socket.o
843 RT_METHOD=rt_socket.o
844 AC_MSG_RESULT(socket)],
845 [RT_METHOD=rt_ioctl.o
846 AC_MSG_RESULT(ioctl)],
847 [KERNEL_METHOD=kernel_socket.o
848 RT_METHOD=rt_socket.o
849 AC_MSG_RESULT(socket)])
852 AC_SUBST(KERNEL_METHOD)
853 AC_SUBST(OTHER_METHOD)
854 AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
856 dnl --------------------------
857 dnl Determine IS-IS I/O method
858 dnl --------------------------
859 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
860 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
861 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
862 AC_CHECK_HEADER(net/bpf.h)
863 AC_CHECK_HEADER(sys/dlpi.h)
864 AC_MSG_CHECKING(zebra IS-IS I/O method)
865 if test x"$opsys" = x"gnu-linux"; then
866 AC_MSG_RESULT(pfpacket)
867 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
868 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
870 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
872 if test $ac_cv_header_net_bpf_h = no; then
873 if test $ac_cv_header_sys_dlpi_h = no; then
875 AC_MSG_WARN([*** IS-IS support will not be built ***])
880 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
883 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
886 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
888 dnl ------------------------------------
889 dnl check for broken CMSG_FIRSTHDR macro
890 dnl ------------------------------------
891 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
892 AC_RUN_IFELSE([AC_LANG_SOURCE([[
895 #define __EXTENSIONS__
900 #ifdef HAVE_SYS_TYPES_H
901 #include <sys/types.h>
903 #ifdef HAVE_SYS_SOCKET_H
904 #include <sys/socket.h>
912 msg.msg_control = buf;
913 msg.msg_controllen = 0;
915 if (CMSG_FIRSTHDR(&msg) != NULL)
918 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
919 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
921 dnl ------------------------------
922 dnl check kernel route read method
923 dnl ------------------------------
924 AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
925 [if test "x$netlink" = xyes; then
926 quagga_cv_rtread_method="netlink"
928 for quagga_cv_rtread_method in /proc/net/route /dev/ip /dev/null;
930 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
932 case $quagga_cv_rtread_method in
933 "/proc/net/route") quagga_cv_rtread_method="proc";;
936 *-freebsd*) quagga_cv_rtread_method="sysctl";;
937 *) quagga_cv_rtread_method="getmsg";;
940 quagga_cv_rtread_method="sysctl";;
943 RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
944 AC_SUBST(RTREAD_METHOD)
946 dnl -----------------------------
947 dnl check interface lookup method
948 dnl -----------------------------
950 AC_MSG_CHECKING(interface looking up method)
951 if test "$netlink" = yes; then
952 AC_MSG_RESULT(netlink)
953 IF_METHOD=if_netlink.o
954 elif test "$opsys" = "sol2-6";then
955 AC_MSG_RESULT(Solaris GIF)
957 elif test "$opsys" = "sol8";then
958 AC_MSG_RESULT(Solaris GLIF)
959 IF_METHOD=if_ioctl_solaris.o
960 IOCTL_METHOD=ioctl_solaris.o
961 elif test "$opsys" = "irix" ; then
964 elif test "$opsys" = "openbsd";then
965 AC_MSG_RESULT(openbsd)
967 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
968 AC_MSG_RESULT(sysctl)
969 IF_METHOD=if_sysctl.o
970 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
976 AC_SUBST(IOCTL_METHOD)
978 dnl ---------------------------------------------------------------
979 dnl figure out how to specify an interface in multicast sockets API
980 dnl ---------------------------------------------------------------
981 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
983 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
984 AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
985 #include <sys/param.h>
986 #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__)
989 #error No support for BSD struct ip_mreq hack detected
990 #endif],[AC_MSG_RESULT(yes)
991 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
994 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
996 #include <sys/types.h>
997 #include <netinet/in.h>
998 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
999 ], [AC_MSG_RESULT(yes)
1000 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1003 dnl ---------------------------------------------------------------
1004 dnl figure out how to check link-state
1005 dnl ---------------------------------------------------------------
1006 AC_CHECK_HEADER([net/if.h],
1007 [AC_CHECK_HEADER( [net/if_media.h],
1008 [m4_define([LINK_DETECT_INCLUDES],
1010 [#include <net/if_media.h>
1012 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1013 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1014 [], LINK_DETECT_INCLUDES)],
1017 [], QUAGGA_INCLUDES )
1019 dnl ---------------------------------------------------------------
1020 dnl Additional, newer way to check link-state using ifi_link_state.
1021 dnl Not available in all BSD's when ifmediareq available
1022 dnl ---------------------------------------------------------------
1023 AC_CHECK_HEADER([net/if.h],
1024 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1025 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1026 [], QUAGGA_INCLUDES),
1029 dnl ------------------------
1030 dnl TCP_MD5SIG socket option
1031 dnl ------------------------
1033 AC_CHECK_HEADER([netinet/tcp.h],
1034 [m4_define([MD5_INCLUDES],
1036 [#include <netinet/tcp.h>
1038 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1041 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1042 AC_CHECK_HEADER([linux/tcp.h],
1043 [m4_define([MD5_INCLUDES],
1045 [#include <linux/tcp.h>
1047 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1050 dnl -----------------------
1051 dnl check proc file system.
1052 dnl -----------------------
1053 if test "$netlink" != yes; then
1054 if test -r /proc/net/dev; then
1055 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
1058 if test -r /proc/net/if_inet6; then
1059 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
1065 dnl -----------------------------
1066 dnl check ipforward detect method
1067 dnl -----------------------------
1068 AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
1069 [if test x$cross_compiling = xyes; then
1070 if test x"$opsys" = x"gnu-linux"; then
1071 quagga_cv_ipforward_method=/proc/net/snmp
1073 quagga_cv_ipforward_method=/dev/ip
1076 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1078 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1081 case $quagga_cv_ipforward_method in
1082 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
1085 *-nec-sysv4*) quagga_cv_ipforward_method="ews";;
1086 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1087 *) quagga_cv_ipforward_method="solaris";;
1089 *) quagga_cv_ipforward_method="sysctl";;
1091 IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
1094 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
1099 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1100 if test "${enable_ipv6}" = "no"; then
1101 AC_MSG_RESULT(disabled)
1106 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1108 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1109 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1113 AC_MSG_RESULT(INRIA IPv6)
1117 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1119 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1120 AC_DEFINE(KAME,1,KAME IPv6)
1123 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1124 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1127 dnl -------------------------
1129 dnl default host check
1130 dnl It is not used by Kheops
1131 dnl -------------------------
1132 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1134 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1135 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1136 AC_DEFINE(KAME,1,KAME IPv6 stack)
1139 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1140 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1142 AC_MSG_RESULT(MUSICA)
1146 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1148 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1149 AC_DEFINE(NRL,1,NRL)
1152 if test x"$opsys" = x"bsdi";then
1153 AC_DEFINE(BSDI_NRL,,BSDI)
1154 AC_MSG_RESULT(BSDI_NRL)
1158 dnl ------------------------------------
1159 dnl Solaris 9, 10 and potentially higher
1160 dnl ------------------------------------
1161 elif test x"$opsys" = x"sol8"; then
1163 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1164 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1167 AC_MSG_RESULT(Solaris IPv6)
1171 elif test "${enable_ipv6}" = "yes"; then
1173 #include <linux/version.h>
1174 /* 2.1.128 or later */
1175 #if LINUX_VERSION_CODE >= 0x020180
1179 zebra_cv_linux_ipv6=yes
1180 AC_MSG_RESULT(Linux IPv6)])
1182 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1185 zebra_cv_linux_ipv6=yes
1186 AC_MSG_RESULT(Linux IPv6)
1190 if test "$zebra_cv_linux_ipv6" = "yes";then
1191 AC_MSG_CHECKING(whether libc has IPv6 support)
1192 AC_TRY_LINK([#include <netinet/in.h>
1193 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1196 zebra_cv_linux_ipv6=yes],
1199 zebra_cv_linux_ipv6=no])
1202 if test "$zebra_cv_linux_ipv6" = "yes";then
1203 AC_MSG_CHECKING(for GNU libc >= 2.1)
1204 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1206 #include <features.h>
1207 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1211 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1212 AC_MSG_RESULT(yes)],
1217 if test "$glibc" != "yes"; then
1218 INCLUDES="-I/usr/inet6/include"
1219 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1220 LIB_IPV6="-L/usr/inet6/lib -linet6"
1225 dnl -----------------------
1226 dnl Set IPv6 related values
1227 dnl -----------------------
1228 LIBS="$LIB_IPV6 $LIBS"
1231 if test x"$RIPNGD" = x""; then
1232 AC_MSG_RESULT(IPv4 only)
1236 dnl ------------------
1237 dnl IPv6 header checks
1238 dnl ------------------
1239 if test "x${zebra_cv_ipv6}" = "xyes"; then
1240 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
1241 netinet6/in6_var.h netinet6/nd6.h], [], [],
1245 m4_define([QUAGGA_INCLUDES],dnl
1247 [#if HAVE_NETINET6_IN6_H
1248 #include <netinet6/in6.h>
1250 #if HAVE_NETINET_IN6_VAR_H
1251 #include <netinet/in6_var.h>
1253 #if HAVE_NETINET_ICMP6_H
1254 # include <netinet/icmp6.h>
1256 #if HAVE_NETINET6_IN6_VAR_H
1257 # include <netinet6/in6_var.h>
1259 #if HAVE_NETINET6_ND6_H
1260 # include <netinet6/nd6.h>
1264 dnl disable doc check
1265 if test "${enable_doc}" = "no";then
1271 dnl can't use TESTS as name, that's special with automake
1272 if test "${enable_tests}" = "no";then
1278 dnl --------------------
1279 dnl Daemon disable check
1280 dnl --------------------
1281 if test "${enable_zebra}" = "no";then
1286 AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
1288 if test "${enable_bgpd}" = "no";then
1293 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1295 if test "${enable_ripd}" = "no";then
1300 AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
1302 if test "${enable_ospfd}" = "no";then
1307 AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
1309 if test "${enable_babeld}" = "no";then
1314 AM_CONDITIONAL(BABELD, test "x$BABELD" = "xbabeld")
1316 if test "${enable_watchquagga}" = "no";then
1319 WATCHQUAGGA="watchquagga"
1321 AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
1324 if test "${enable_opaque_lsa}" != "no"; then
1325 if test "${enable_ospfapi}" != "no";then
1326 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1328 if test "${enable_ospfclient}" != "no";then
1329 OSPFCLIENT="ospfclient"
1334 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1336 case "${enable_ripngd}" in
1337 "yes") RIPNGD="ripngd";;
1341 AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
1343 case "${enable_ospf6d}" in
1344 "yes") OSPF6D="ospf6d";;
1348 AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
1350 case "${enable_isisd}" in
1351 "yes") ISISD="isisd";;
1355 AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
1357 # XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1358 case "${enable_solaris}" in
1359 "yes") SOLARIS="solaris";;
1364 if test "${enable_bgp_announce}" = "no";then
1365 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1367 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1371 AC_SUBST(BUILD_TESTS)
1379 AC_SUBST(WATCHQUAGGA)
1385 AC_SUBST(OSPFCLIENT)
1387 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1388 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1389 AC_CHECK_LIB(crypt, crypt)
1390 AC_CHECK_LIB(resolv, res_init)
1392 dnl ---------------------------------------------------
1393 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1394 dnl ---------------------------------------------------
1395 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1396 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1397 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
1399 dnl ---------------------------
1400 dnl check system has PCRE regexp
1401 dnl ---------------------------
1402 if test "x$enable_pcreposix" = "xyes"; then
1403 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1404 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1407 if test "x$enable_pcreposix" != "xyes"; then
1408 dnl ---------------------------
1409 dnl check system has GNU regexp
1410 dnl ---------------------------
1411 AC_MSG_CHECKING(whether system has GNU regex)
1412 AC_CHECK_LIB(c, regexec,
1413 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1415 [LIB_REGEX="regex.o"])
1417 AC_SUBST(HAVE_LIBPCREPOSIX)
1420 dnl ------------------
1421 dnl check Net-SNMP library
1422 dnl ------------------
1423 if test "${enable_snmp}" != ""; then
1424 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1425 if test x"$NETSNMP_CONFIG" = x"no"; then
1426 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1428 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1429 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1430 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1431 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1438 ])],[AC_MSG_RESULT(yes)],[
1440 AC_MSG_ERROR([--enable-snmp given but not usable])])
1441 AC_DEFINE(HAVE_SNMP,,SNMP)
1442 case "${enable_snmp}" in
1447 SNMP_METHOD="${enable_snmp}"
1450 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1453 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1454 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1455 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1458 dnl ---------------------------
1459 dnl sockaddr and netinet checks
1460 dnl ---------------------------
1461 AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1462 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1464 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1465 struct nd_opt_adv_interval, struct rt_addrinfo,
1466 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1467 [], [], QUAGGA_INCLUDES)
1469 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1470 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1471 struct sockaddr_in6.sin6_scope_id,
1472 struct sockaddr_dl.sdl_len,
1473 struct if6_aliasreq.ifra_lifetime,
1474 struct nd_opt_adv_interval.nd_opt_ai_type],
1475 [], [], QUAGGA_INCLUDES)
1477 dnl ---------------------------
1478 dnl IRDP/pktinfo/icmphdr checks
1479 dnl ---------------------------
1480 AC_CHECK_TYPES([struct in_pktinfo],
1481 [AC_CHECK_TYPES([struct icmphdr],
1482 [if test "${enable_irdp}" != "no"; then
1483 AC_DEFINE(HAVE_IRDP,, IRDP)
1485 [if test "${enable_irdp}" = "yes"; then
1486 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1487 fi], [QUAGGA_INCLUDES])],
1488 [if test "${enable_irdp}" = "yes"; then
1489 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1490 fi], [QUAGGA_INCLUDES])
1492 dnl --------------------------------------
1493 dnl checking for getrusage struct and call
1494 dnl --------------------------------------
1495 if test "${enable_rusage}" != "no"; then
1496 AC_MSG_CHECKING(whether getrusage is available)
1497 AC_TRY_COMPILE([#include <sys/resource.h>],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1499 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1503 dnl --------------------------------------
1504 dnl checking for clock_time monotonic struct and call
1505 dnl --------------------------------------
1506 AC_CHECK_DECL(CLOCK_MONOTONIC,
1507 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1508 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1509 ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
1511 dnl -------------------
1512 dnl capabilities checks
1513 dnl -------------------
1514 if test "${enable_capabilities}" != "no"; then
1515 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1516 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1518 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1519 quagga_ac_keepcaps="yes"],
1522 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1523 AC_CHECK_HEADERS(sys/capability.h)
1525 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1526 AC_CHECK_LIB(cap, cap_init,
1527 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1529 quagga_ac_lcaps="yes"]
1532 AC_CHECK_HEADERS(priv.h,
1533 [AC_MSG_CHECKING(Solaris style privileges are available)
1534 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1536 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1537 quagga_ac_scaps="yes"],
1543 if test x"${quagga_ac_scaps}" = x"yes" \
1544 -o x"${quagga_ac_lcaps}" = x"yes"; then
1545 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1550 dnl ---------------------------------------------------------------------------
1551 dnl http://www.gnu.org/software/autoconf-archive/ax_sys_weak_alias.html
1552 dnl Check for and set one of the following = 1
1553 dnl HAVE_SYS_WEAK_ALIAS_ATTRIBUTE
1554 dnl HAVE_SYS_WEAK_ALIAS_PRAGMA
1555 dnl HAVE_SYS_WEAK_ALIAS_HPSECONDARY
1556 dnl HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE
1557 dnl If any scheme is found, set
1558 dnl HAVE_SYS_WEAK_ALIAS=1
1559 dnl The following variable is set to text value
1560 dnl WEAK_ALIAS = "attribute" || "pragma" || "hpsecondary" || "criduplicate" || "no"
1561 dnl If weak alias can cross object file boundaries
1562 dnl WEAK_ALIAS_CROSSFILE = "yes" || "no"
1563 dnl ---------------------------------------------------------------------------
1566 dnl ---------------------------
1567 dnl check for glibc 'backtrace'
1568 dnl ---------------------------
1569 AC_CHECK_HEADER([execinfo.h],
1570 [AC_CHECK_FUNC([backtrace],
1571 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1572 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1576 dnl -----------------------------------------
1577 dnl check for malloc mallinfo struct and call
1578 dnl this must try and link using LIBS, in
1579 dnl order to check no alternative allocator
1580 dnl has been specified, which might not provide
1581 dnl mallinfo, e.g. such as Umem on Solaris.
1582 dnl -----------------------------------------
1583 AC_CHECK_HEADER([malloc.h],
1584 [AC_MSG_CHECKING(whether mallinfo is available)
1585 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1586 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1588 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1591 ], [], QUAGGA_INCLUDES)
1596 CONFDATE=`date '+%Y%m%d'`
1599 dnl Conditionally enable PIE support for GNU toolchains.
1600 AC_ARG_ENABLE(pie, AS_HELP_STRING([--disable-pie], [Do not build tools as a Position Independent Executables]))
1601 if test "$enable_pie" != "no"; then
1602 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1604 save_LDFLAGS=$LDFLAGS
1605 CFLAGS="$CFLAGS -fPIE"
1606 LDFLAGS="$LDFLAGS -pie"
1607 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1608 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1611 LDFLAGS=$save_LDFLAGS
1613 if test "$ap_cv_cc_pie" = "yes"; then
1625 if test x"$DEJAGNU" = x
1627 DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
1629 RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
1632 AC_SUBST(RUNTESTDEFAULTFLAGS)
1634 dnl ------------------------------
1635 dnl set paths for state directory
1636 dnl ------------------------------
1637 AC_MSG_CHECKING(directory to use for state file)
1638 if test "${prefix}" = "NONE"; then
1639 quagga_statedir_prefix="";
1641 quagga_statedir_prefix=${prefix}
1643 if test "${localstatedir}" = '${prefix}/var'; then
1644 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1645 ${quagga_statedir_prefix}/var/adm dnl
1646 ${quagga_statedir_prefix}/etc dnl
1652 test -d $QUAGGA_STATE_DIR && break
1654 quagga_statedir=$QUAGGA_STATE_DIR
1656 quagga_statedir=${localstatedir}
1658 if test $quagga_statedir = "/dev/null"; then
1659 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1661 AC_MSG_RESULT(${quagga_statedir})
1662 AC_SUBST(quagga_statedir)
1664 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1665 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1666 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1667 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1668 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1669 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1670 AC_DEFINE_UNQUOTED(PATH_BABELD_PID, "$quagga_statedir/babeld.pid",babeld PID)
1671 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1672 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1673 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1674 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1675 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1676 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1677 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1678 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1679 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1680 AC_DEFINE_UNQUOTED(BABEL_VTYSH_PATH, "$quagga_statedir/babeld.vty",babeld vty socket)
1681 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1682 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1684 dnl -------------------------------
1685 dnl Quagga sources should always be
1686 dnl current wrt interfaces. Dont
1687 dnl allow deprecated interfaces to
1689 dnl -------------------------------
1690 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1692 dnl ---------------------------
1693 dnl Check htonl works correctly
1694 dnl ---------------------------
1695 AC_MSG_CHECKING(for working htonl)
1696 AC_CACHE_VAL(ac_cv_htonl_works,
1697 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1698 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1701 AC_MSG_RESULT($ac_cv_htonl_works)
1703 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1704 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1705 ospf6d/Makefile isisd/Makefile babeld/Makefile vtysh/Makefile
1706 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
1712 isisd/topology/Makefile
1713 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1714 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1715 AC_CONFIG_FILES([solaris/Makefile])
1717 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1718 ## Hack, but working solution to avoid rebuilding of quagga.info.
1719 ## It's already in CVS until texinfo 4.7 is more common.
1723 Quagga configuration
1724 --------------------
1725 quagga version : ${PACKAGE_VERSION}
1726 host operating system : ${host_os}
1727 source code location : ${srcdir}
1729 compiler flags : ${CFLAGS}
1731 includes : ${INCLUDES}
1732 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1733 state file directory : ${quagga_statedir}
1734 config file directory : `eval echo \`echo ${sysconfdir}\``
1735 example directory : `eval echo \`echo ${exampledir}\``
1736 user to run as : ${enable_user}
1737 group to run as : ${enable_group}
1738 group for vty sockets : ${enable_vty_group}
1739 config file mask : ${enable_configfile_mask}
1740 log file mask : ${enable_logfile_mask}
1742 The above user and group must have read/write access to the state file
1743 directory and to the config files in the config file directory."
1745 if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1746 Warning: The ${MAKE-make} programme detected, either in your path or
1747 via the MAKE variable, is not GNU Make. GNU make may be installed as
1748 gmake on some systems. and is required to complete a build of Quagga