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.24+cl3u5, [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])
26 m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
27 AM_SILENT_RULES([yes])
28 AC_CONFIG_HEADERS(config.h)
30 AC_PATH_PROG(PERL, perl)
32 dnl default is to match previous behavior
33 exampledir=${sysconfdir}
34 AC_ARG_ENABLE([exampledir],
35 AS_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 AS_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
52 AC_ARG_ENABLE(tcmalloc,
53 AS_HELP_STRING([--enable-tcmalloc], [Turn on tcmalloc]),
54 [case "${enableval}" in
55 yes) tcmalloc_enabled=true
56 LIBS="$LIBS -ltcmalloc_minimal"
58 no) tcmalloc_enabled=false ;;
59 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
60 esac],[tcmalloc_enabled=false])
63 dnl --------------------
64 dnl Check CC and friends
65 dnl --------------------
66 dnl note orig_cflags is also used further down
72 dnl remove autoconf default "-g -O2"
78 dnl autoconf 2.59 appears not to support AC_PROG_SED
80 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
82 dnl pdflatex and latexmk are needed to build HACKING.pdf
83 AC_CHECK_PROG([PDFLATEX],[pdflatex],[pdflatex],[/bin/false])
84 AC_CHECK_PROG([LATEXMK],[latexmk],[latexmk],[/bin/false])
85 if test "x$PDFLATEX" = "x/bin/false" -o "x$LATEXMK" = "x/bin/false"; then
86 AC_MSG_WARN([Will not be able to make PDF versions of TeX documents])
90 AM_CONDITIONAL([HAVE_LATEX], [test "x$HAVE_LATEX" = "xtrue"])
92 dnl try and enable CFLAGS that are useful for Quagga
93 dnl - specifically, options to control warnings
95 AC_USE_SYSTEM_EXTENSIONS()
96 AC_DEFUN([AC_C_FLAG], [{
98 ac_c_flag_save="$CFLAGS"
100 AC_MSG_CHECKING([[whether $CC supports $1]])
102 [AC_LANG_PROGRAM([[]])],
105 m4_if([$3], [], [], [
106 CFLAGS="$ac_c_flag_save"
110 CFLAGS="$ac_c_flag_save"
117 dnl ICC won't bail on unknown options without -diag-error 10006
118 dnl need to do this first so we get useful results for the other options
119 AC_C_FLAG([-diag-error 10006])
121 dnl if the user specified any CFLAGS, we don't add "-g -Os/-O2" here
122 if test "z$orig_cflags" = "z"; then
129 dnl always want these CFLAGS
130 AC_C_FLAG([-fno-omit-frame-pointer])
133 AC_C_FLAG([-Wmissing-prototypes])
134 AC_C_FLAG([-Wmissing-declarations])
135 AC_C_FLAG([-Wpointer-arith])
136 AC_C_FLAG([-Wbad-function-cast])
137 AC_C_FLAG([-Wwrite-strings])
138 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
139 AC_C_FLAG([-Wcast-qual])
140 AC_C_FLAG([-Wstrict-prototypes])
141 AC_C_FLAG([-Wmissing-noreturn])
142 AC_C_FLAG([-Wmissing-format-attribute])
143 AC_C_FLAG([-Wunreachable-code])
144 AC_C_FLAG([-Wpacked])
145 AC_C_FLAG([-Wpadded])
147 AC_C_FLAG([-Wno-unused-result])
149 AC_C_FLAG([-Wno-unused-parameter])
150 AC_C_FLAG([-Wno-missing-field-initializers])
152 dnl ICC emits a broken warning for const char *x = a ? "b" : "c";
153 dnl for some reason the string consts get 'promoted' to char *,
154 dnl triggering a const to non-const conversion warning.
155 AC_C_FLAG([-diag-disable 3179])
157 if test x"${enable_werror}" = x"yes" ; then
162 dnl need link on this one, not compile
164 ac_ld_flag_save="$LDFLAGS"
165 LDFLAGS="$LDFLAGS -rdynamic"
166 AC_MSG_CHECKING([[whether linker supports -rdynamic]])
168 [AC_LANG_PROGRAM([[]])],
169 [AC_MSG_RESULT([yes])],
171 LDFLAGS="$ac_ld_flag_save"
182 AC_CHECK_TOOL(AR, ar)
184 dnl -----------------
185 dnl System extensions
186 dnl -----------------
194 dnl ----------------------
195 dnl Packages configuration
196 dnl ----------------------
197 AC_ARG_WITH(pkg-extra-version,
198 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
199 [EXTRAVERSION=$withval],)
200 AC_ARG_WITH(pkg-git-version,
201 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
202 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
204 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for Quagga]))
206 AS_HELP_STRING([--disable-doc], [do not build docs]))
208 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
210 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
212 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
213 AC_ARG_ENABLE(ripngd,
214 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
216 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
217 AC_ARG_ENABLE(ospf6d,
218 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
220 AS_HELP_STRING([--enable-ldpd], [build ldpd]))
221 AC_ARG_ENABLE(watchquagga,
222 AS_HELP_STRING([--disable-watchquagga], [do not build watchquagga]))
224 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
226 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
227 AC_ARG_ENABLE(bgp-announce,
228 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
229 AC_ARG_ENABLE(bgp-vnc,
230 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
231 AC_ARG_WITH(rfp-path,
232 AS_HELP_STRING([--with-rfp-path[=DIR]],[path to replaced stub RFP used with BGP VNC]))
234 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
236 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
237 AC_ARG_ENABLE(tcp-zebra,
238 AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
239 AC_ARG_ENABLE(ospfapi,
240 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
241 AC_ARG_ENABLE(ospfclient,
242 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
243 (this is the default if --disable-ospfapi is set)]))
244 AC_ARG_ENABLE(multipath,
245 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
247 AS_HELP_STRING([--enable-user=USER], [user to run Quagga suite as (default quagga)]))
249 AS_HELP_STRING([--enable-group=GROUP], [group to run Quagga suite as (default quagga)]))
250 AC_ARG_ENABLE(vty_group,
251 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
252 AC_ARG_ENABLE(configfile_mask,
253 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
254 AC_ARG_ENABLE(logfile_mask,
255 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
256 AC_ARG_ENABLE(shell_access,
257 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
259 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
261 AS_HELP_STRING([--enable-irdp], [enable IRDP server support in zebra]))
262 AC_ARG_ENABLE(capabilities,
263 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
264 AC_ARG_ENABLE(rusage,
265 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
266 AC_ARG_ENABLE(gcc_ultra_verbose,
267 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
268 AC_ARG_ENABLE(linux24_tcp_md5,
269 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
270 AC_ARG_ENABLE(backtrace,
271 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
272 AC_ARG_ENABLE(time-check,
273 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
274 AC_ARG_ENABLE(pcreposix,
275 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
277 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
278 AC_ARG_ENABLE(systemd,
279 AS_HELP_STRING([--enable-systemd], [enable Systemd support]))
281 AS_HELP_STRING([--enable-poll], [enable usage of Poll instead of select]))
282 AC_ARG_ENABLE(werror,
283 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
284 AC_ARG_ENABLE(cumulus,
285 AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions]))
286 AC_ARG_ENABLE(rr-semantics,
287 AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics]))
288 AC_ARG_ENABLE([protobuf],
289 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
291 AC_CHECK_HEADERS(json-c/json.h)
292 AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c")
293 if test $ac_cv_lib_json_c_json_object_get = no; then
294 AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
295 if test $ac_cv_lib_json_json_object_get = no; then
296 AC_MSG_ERROR([lib json is needed to compile])
300 AC_ARG_ENABLE([dev_build],
301 AS_HELP_STRING([--enable-dev-build], [build for development]))
303 if test x"${enable_time_check}" != x"no" ; then
304 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
305 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
307 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
311 case "${enable_systemd}" in
314 AC_CHECK_LIB(systemd, sd_notify, LIBS="$LIBS -lsystemd")
315 if test $ac_cv_lib_systemd_sd_notify = no; then
316 AC_MSG_ERROR([enable systemd has been specified but systemd development env not found on your system])
318 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
324 if test "${enable_rr_semantics}" != "no" ; then
325 AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics)
328 if test "${enable_poll}" = "yes" ; then
329 AC_DEFINE(HAVE_POLL,,Compile systemd support in)
335 AC_MSG_CHECKING(whether this OS has MPLS stack)
338 MPLS_METHOD="zebra_mpls_netlink.o"
339 AC_MSG_RESULT(Linux MPLS)
342 MPLS_METHOD="zebra_mpls_openbsd.o"
343 AC_MSG_RESULT(OpenBSD MPLS)
346 MPLS_METHOD="zebra_mpls_null.o"
347 AC_MSG_RESULT(Unsupported kernel)
350 AC_SUBST(MPLS_METHOD)
352 if test "${enable_cumulus}" = "yes" ; then
353 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
356 if test "${enable_shell_access}" = "yes"; then
357 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
360 if test "${enable_fpm}" = "yes"; then
361 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
364 if test "x${enable_dev_build}" = "xyes"; then
365 AC_DEFINE(DEV_BUILD,,Build for development)
367 AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
370 # Logic for protobuf support.
372 if test "$enable_protobuf" = "yes"; then
376 AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
377 if test "x$PROTOC_C" = "x/bin/false"; then
381 PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
382 [found_protobuf_c=yes],
383 [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
385 if test "x$found_protobuf_c" = "xyes"; then
386 LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
387 CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
389 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
390 [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
395 # Fail if the user explicity enabled protobuf support and we couldn't
396 # find the compiler or libraries.
397 if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
398 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
401 if test "x$have_protobuf" = "xyes"; then
402 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
405 AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
408 # End of logic for protobuf support.
411 if test "${enable_tcp_zebra}" = "yes"; then
412 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
415 if test "${enable_linux24_tcp_md5}" = "yes"; then
416 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
419 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
420 if test "${enable_rtadv}" != "no"; then
422 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
427 if test "${enable_irdp}" = "yes"; then
428 AC_DEFINE(HAVE_IRDP,, IRDP )
431 if test x"${enable_user}" = x"no"; then
434 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
437 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
440 if test x"${enable_group}" = x"no"; then
443 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
444 enable_group="quagga"
446 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
449 if test x"${enable_vty_group}" = x"yes" ; then
450 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
451 elif test x"${enable_vty_group}" != x""; then
452 if test x"${enable_vty_group}" != x"no"; then
453 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
456 AC_SUBST([enable_user])
457 AC_SUBST([enable_group])
458 AC_SUBST([enable_vty_group])
460 enable_configfile_mask=${enable_configfile_mask:-0600}
461 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
463 enable_logfile_mask=${enable_logfile_mask:-0600}
464 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
468 case "${enable_multipath}" in
472 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
473 MPATH_NUM="${enable_multipath}"
478 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
482 AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
484 dnl -----------------------------------
485 dnl Add extra version string to package
486 dnl name, string and version fields.
487 dnl -----------------------------------
488 if test "x${EXTRAVERSION}" != "x" ; then
489 VERSION="${VERSION}${EXTRAVERSION}"
490 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
491 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
494 if test "x$with_pkg_git_version" = "xyes"; then
495 if test -d "${srcdir}/.git"; then
496 AC_DEFINE(GIT_VERSION, [1], [include git version info])
497 else with_pkg_git_version="no"
498 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
501 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
503 dnl ------------------------------------
504 dnl Check C keywords and standard types
505 dnl ------------------------------------
516 dnl -------------------------
517 dnl Check other header files.
518 dnl -------------------------
519 AC_CHECK_HEADERS([stropts.h sys/ksym.h \
520 linux/version.h asm/types.h \
523 dnl Utility macro to avoid retyping includes all the time
524 m4_define([QUAGGA_INCLUDES],
527 #define __EXTENSIONS__
532 #include <sys/types.h>
533 /* sys/conf.h depends on param.h on FBSD at least */
534 #include <sys/param.h>
535 /* Required for MAXSIG */
537 #include <sys/socket.h>
539 # define __APPLE_USE_RFC_3542
541 #include <netinet/in.h>
542 #include <sys/time.h>
547 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
548 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
549 dnl an additional round for it.
551 AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
553 m4_define([QUAGGA_INCLUDES],
555 [#if HAVE_NET_IF_VAR_H
556 # include <net/if_var.h>
560 AC_CHECK_HEADERS([netinet/in_var.h \
561 net/if_dl.h net/netopt.h \
562 inet/nd.h netinet/ip_icmp.h \
563 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
564 [], [], QUAGGA_INCLUDES)
566 AC_CHECK_HEADERS([ucontext.h], [], [],
569 #endif /* __USE_GNU */
573 m4_define([UCONTEXT_INCLUDES],
574 [#include <ucontext.h>])dnl
576 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
577 [], [], [UCONTEXT_INCLUDES])
578 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
579 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
580 [], [], [UCONTEXT_INCLUDES])],
581 [], [UCONTEXT_INCLUDES])
582 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
583 [], [], [UCONTEXT_INCLUDES])
585 m4_define([QUAGGA_INCLUDES],
589 #include <netinet/in_systm.h>
590 #if HAVE_NETINET_IN_VAR_H
591 # include <netinet/in_var.h>
594 # include <net/if_dl.h>
596 #if HAVE_NET_NETOPT_H
597 # include <net/netopt.h>
599 #include <net/route.h>
601 # include <inet/nd.h>
603 #include <arpa/inet.h>
604 /* Required for IDRP */
605 #if HAVE_NETINET_IP_ICMP_H
606 # include <netinet/ip_icmp.h>
610 dnl V6 headers are checked below, after we check for v6
612 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
614 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
616 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
617 AC_DEFINE(SUNOS_5, 1, SunOS 5)
618 AC_CHECK_LIB(xnet, main)
623 | [*-sunos5.1[0-9]] \
624 | [*-sunos5.1[0-9].[0-9]] \
625 | [*-solaris2.[8-9]] \
626 | [*-solaris2.1[0-9]] \
627 | [*-solaris2.1[0-9].[0-9]])
629 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
630 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
631 AC_CHECK_LIB(socket, main)
632 AC_CHECK_LIB(nsl, main)
633 AC_CHECK_LIB(umem, main)
634 AC_CHECK_FUNCS([printstack],
635 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
636 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
641 *-sunos5* | *-solaris2*)
642 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
643 AC_CHECK_LIB(socket, main)
644 AC_CHECK_LIB(nsl, main)
650 AC_DEFINE(GNU_LINUX,,GNU Linux)
654 AC_DEFINE(OPEN_BSD,,OpenBSD)
660 dnl ---------------------
661 dnl Integrated VTY option
662 dnl ---------------------
663 case "${enable_vtysh}" in
666 AC_DEFINE(VTYSH,,VTY shell)
667 dnl Vtysh uses libreadline, which looks for termcap functions at
668 dnl configure time. We follow readlines search order.
669 dnl The required procedures are in libtermcap on NetBSD, in
670 dnl [TODO] on Linux, and in [TODO] on Solaris.
671 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
672 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
673 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
674 [AC_CHECK_LIB(ncurses, tputs,
675 LIBREADLINE="$LIBREADLINE -lncurses")]
679 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
681 if test $ac_cv_lib_readline_main = no; then
682 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
684 AC_CHECK_HEADER(readline/history.h)
685 if test $ac_cv_header_readline_history_h = no;then
686 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
688 AC_CHECK_LIB(readline, rl_completion_matches,
689 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
690 if test $ac_cv_lib_readline_rl_completion_matches = no; then
691 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
695 AC_SUBST(LIBREADLINE)
696 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
701 dnl Quagga detects the PAM library it is built against by checking for a
702 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
703 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
704 dnl openpam.h doesn't do that, although depends on the header too. Hence a
705 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
708 if test "$with_libpam" = "yes"; then
709 AC_CHECK_HEADER([security/pam_misc.h],
710 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
711 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
712 pam_conv_func="misc_conv"
715 AC_CHECK_HEADER([security/openpam.h],
716 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
717 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
718 pam_conv_func="openpam_ttyconv"
720 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
721 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
722 AC_MSG_WARN([*** pam support will not be built ***])
727 if test "$with_libpam" = "yes"; then
728 dnl took this test from proftpds configure.in and suited to our needs
729 dnl -------------------------------------------------------------------------
731 dnl This next check looks funky due to a linker problem with some versions
732 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
733 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
734 dnl with RedHat 6.2 and Debian 2.2 or better.
735 AC_CHECK_LIB(pam, pam_start,
736 [AC_CHECK_LIB(pam, $pam_conv_func,
737 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
739 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
740 LIBPAM="-lpam -lpam_misc"]
744 [AC_CHECK_LIB(pam, pam_end,
745 [AC_CHECK_LIB(pam, $pam_conv_func,
746 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
747 LIBPAM="-lpam -ldl"],
748 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
749 LIBPAM="-lpam -ldl -lpam_misc"]
751 ],AC_MSG_WARN([*** pam support will not be built ***]),
758 dnl -------------------------------
759 dnl Endian-ness check
760 dnl -------------------------------
763 dnl -------------------------------
764 dnl check the size in byte of the C
765 dnl -------------------------------
766 dnl AC_CHECK_SIZEOF(char)
767 dnl AC_CHECK_SIZEOF(int)
768 dnl AC_CHECK_SIZEOF(short)
769 dnl AC_CHECK_SIZEOF(long)
771 dnl ----------------------------
772 dnl check existance of functions
773 dnl ----------------------------
779 dnl -------------------------------
780 dnl bgpd needs pow() and hence libm
781 dnl -------------------------------
783 AC_CHECK_HEADER([math.h],
784 [AC_CHECK_LIB([m], [pow],
787 AC_DEFINE(HAVE_LIBM,, Have libm)
788 AC_CHECK_FUNCS(pow,[],[LIBM=""])
791 if test x"$LIBM" = x ; then
792 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
805 AC_CHECK_HEADER([asm-generic/unistd.h],
806 [AC_CHECK_DECL(__NR_setns,
807 AC_DEFINE(HAVE_NETNS,, Have netns),,
808 QUAGGA_INCLUDES [#include <asm-generic/unistd.h>
810 AC_CHECK_FUNCS(setns)]
813 dnl ------------------------------------
814 dnl Determine routing get and set method
815 dnl ------------------------------------
816 AC_MSG_CHECKING(zebra between kernel interface method)
817 if test x"$opsys" = x"gnu-linux"; then
818 AC_MSG_RESULT(netlink)
819 RT_METHOD=rt_netlink.o
820 KERNEL_METHOD=kernel_netlink.o
821 AC_DEFINE(HAVE_NETLINK,,netlink)
823 AC_CHECK_DECLS([IFLA_INFO_SLAVE_KIND], [], [], [#include <linux/if_link.h>])
825 AC_MSG_RESULT(Route socket)
826 KERNEL_METHOD="kernel_socket.o"
827 RT_METHOD="rt_socket.o"
830 AC_SUBST(KERNEL_METHOD)
831 AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
833 dnl --------------------------
834 dnl Determine IS-IS I/O method
835 dnl --------------------------
836 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
837 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
838 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
839 AC_CHECK_HEADER(net/bpf.h)
840 AC_CHECK_HEADER(sys/dlpi.h)
841 AC_MSG_CHECKING(zebra IS-IS I/O method)
842 if test x"$opsys" = x"gnu-linux"; then
843 AC_MSG_RESULT(pfpacket)
844 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
845 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
847 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
849 if test $ac_cv_header_net_bpf_h = no; then
850 if test $ac_cv_header_sys_dlpi_h = no; then
852 AC_MSG_WARN([*** IS-IS support will not be built ***])
857 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
860 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
863 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
865 dnl ------------------------------------
866 dnl check for broken CMSG_FIRSTHDR macro
867 dnl ------------------------------------
868 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
869 AC_RUN_IFELSE([AC_LANG_SOURCE([[
872 #define __EXTENSIONS__
875 #include <sys/types.h>
876 #include <sys/socket.h>
883 msg.msg_control = buf;
884 msg.msg_controllen = 0;
886 if (CMSG_FIRSTHDR(&msg) != NULL)
889 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
890 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
892 dnl ------------------------------
893 dnl check kernel route read method
894 dnl ------------------------------
895 AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
896 [if test "x$netlink" = xyes; then
897 quagga_cv_rtread_method="netlink"
899 for quagga_cv_rtread_method in /dev/ip /dev/null;
901 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
903 case $quagga_cv_rtread_method in
906 *-freebsd*) quagga_cv_rtread_method="sysctl";;
907 *) quagga_cv_rtread_method="getmsg";;
910 quagga_cv_rtread_method="sysctl";;
913 RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
914 AC_SUBST(RTREAD_METHOD)
916 dnl -----------------------------
917 dnl check interface lookup method
918 dnl -----------------------------
920 AC_MSG_CHECKING(interface looking up method)
921 if test "$netlink" = yes; then
922 AC_MSG_RESULT(netlink)
923 IF_METHOD=if_netlink.o
924 elif test "$opsys" = "sol2-6";then
925 AC_MSG_RESULT(Solaris GIF)
927 elif test "$opsys" = "sol8";then
928 AC_MSG_RESULT(Solaris GLIF)
929 IF_METHOD=if_ioctl_solaris.o
930 IOCTL_METHOD=ioctl_solaris.o
931 elif test "$opsys" = "openbsd";then
932 AC_MSG_RESULT(openbsd)
934 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
935 AC_MSG_RESULT(sysctl)
936 IF_METHOD=if_sysctl.o
937 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
943 AC_SUBST(IOCTL_METHOD)
945 dnl ---------------------------------------------------------------
946 dnl figure out how to specify an interface in multicast sockets API
947 dnl ---------------------------------------------------------------
948 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
950 AC_CHECK_HEADERS([linux/mroute.h], [], [],[
951 #include <sys/socket.h>
952 #include <netinet/in.h>
953 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
954 #include <linux/types.h>
957 m4_define([QUAGGA_INCLUDES],
959 [#if HAVE_LINUX_MROUTE_H
960 # include <linux/mroute.h>
964 AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
965 #include <sys/socket.h>
966 #include <sys/types.h>
967 #include <netinet/in.h>
968 #include <net/route.h>
971 m4_define([QUAGGA_INCLUDES],
973 [#if HAVE_NETINET_IP_MROUTE_H
974 # include <netinet/ip_mroute.h>
978 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
979 AC_TRY_COMPILE([#include <sys/param.h>],
980 [#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)
983 #error No support for BSD struct ip_mreq hack detected
984 #endif],[AC_MSG_RESULT(yes)
985 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
988 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
990 #include <sys/types.h>
991 #include <netinet/in.h>
992 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
993 ], [AC_MSG_RESULT(yes)
994 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
997 dnl ---------------------------------------------------------------
998 dnl figure out how to check link-state
999 dnl ---------------------------------------------------------------
1000 AC_CHECK_HEADER( [net/if_media.h],
1001 [m4_define([LINK_DETECT_INCLUDES],
1003 [#include <net/if_media.h>
1005 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1006 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1007 [], LINK_DETECT_INCLUDES)],
1011 dnl ---------------------------------------------------------------
1012 dnl Additional, newer way to check link-state using ifi_link_state.
1013 dnl Not available in all BSD's when ifmediareq available
1014 dnl ---------------------------------------------------------------
1015 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1016 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1017 [], QUAGGA_INCLUDES)
1019 dnl ------------------------
1020 dnl TCP_MD5SIG socket option
1021 dnl ------------------------
1023 AC_CHECK_HEADER([netinet/tcp.h],
1024 [m4_define([MD5_INCLUDES],
1026 [#include <netinet/tcp.h>
1028 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1031 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1032 AC_CHECK_HEADER([linux/tcp.h],
1033 [m4_define([MD5_INCLUDES],
1035 [#include <linux/tcp.h>
1037 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1040 dnl -----------------------------
1041 dnl check ipforward detect method
1042 dnl -----------------------------
1043 AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
1044 [if test x$cross_compiling = xyes; then
1045 if test x"$opsys" = x"gnu-linux"; then
1046 quagga_cv_ipforward_method=/proc/net/snmp
1048 quagga_cv_ipforward_method=/dev/ip
1051 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1053 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1056 case $quagga_cv_ipforward_method in
1057 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
1060 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1061 *) quagga_cv_ipforward_method="solaris";;
1063 *) quagga_cv_ipforward_method="sysctl";;
1065 IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
1068 dnl ----------------------------------------------------------------------------
1069 dnl figure out if domainname is available in the utsname struct (GNU extension).
1070 dnl ----------------------------------------------------------------------------
1071 AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1076 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1080 if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1081 AC_DEFINE(KAME,1,KAME IPv6)
1083 dnl ------------------------------------
1084 dnl Solaris 9, 10 and potentially higher
1085 dnl ------------------------------------
1086 elif test x"$opsys" = x"sol8"; then
1087 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1088 AC_MSG_RESULT(Solaris IPv6)
1092 elif test x"$opsys" = x"gnu-linux"; then
1093 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1094 dnl Linux has a compilation problem with mixing
1095 dnl netinet/in.h and linux/in6.h they are not
1096 dnl compatible. There has been discussion on
1097 dnl how to fix it but no real progress on implementation
1098 dnl when they fix it, remove this
1099 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
1100 AC_MSG_RESULT(Linux IPv6)
1102 AC_MSG_ERROR([Failed to detect IPv6 stack])
1105 dnl this is unconditial, for compatibility
1106 AC_DEFINE(HAVE_IPV6,1,IPv6)
1108 dnl ------------------
1109 dnl IPv6 header checks
1110 dnl ------------------
1111 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
1112 netinet6/in6_var.h netinet6/nd6.h], [], [],
1115 m4_define([QUAGGA_INCLUDES],dnl
1117 [#if HAVE_NETINET6_IN6_H
1118 #include <netinet6/in6.h>
1120 #if HAVE_NETINET_IN6_VAR_H
1121 #include <netinet/in6_var.h>
1123 #include <netinet/icmp6.h>
1124 #if HAVE_NETINET6_IN6_VAR_H
1125 # include <netinet6/in6_var.h>
1127 #if HAVE_NETINET6_ND6_H
1128 # include <netinet6/nd6.h>
1132 dnl disable doc check
1133 if test "${enable_doc}" = "no";then
1139 dnl --------------------
1140 dnl Daemon disable check
1141 dnl --------------------
1142 if test "${enable_zebra}" = "no";then
1147 AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
1149 if test "${enable_bgpd}" = "no";then
1154 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1156 if test "${enable_ripd}" = "no";then
1161 AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
1163 if test "${enable_ospfd}" = "no";then
1168 AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
1170 if test "${enable_ldpd}" = "yes";then
1172 AC_DEFINE(HAVE_LDPD, 1, ldpd)
1176 AM_CONDITIONAL(LDPD, test "x$LDPD" = "xldpd")
1178 if test "${enable_watchquagga}" = "no";then
1181 WATCHQUAGGA="watchquagga"
1183 AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
1186 if test "${enable_ospfapi}" != "no";then
1187 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1189 if test "${enable_ospfclient}" != "no";then
1190 OSPFCLIENT="ospfclient"
1194 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1196 case "${enable_ripngd}" in
1198 * ) RIPNGD="ripngd";;
1200 AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
1202 case "${enable_ospf6d}" in
1204 * ) OSPF6D="ospf6d";;
1206 AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
1208 case "${enable_isisd}" in
1212 AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
1214 case "${enable_pimd}" in
1218 AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
1220 if test "${enable_bgp_announce}" = "no";then
1221 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1223 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1226 if test "${with_rfp_path}" = "yes" || test x"${with_rfp_path}" = x""; then
1227 with_rfp_path="bgpd/rfp-example"
1229 if test "${with_rfp_path}" != "no"; then
1230 VNC_RFP_PATH="${with_rfp_path}"
1231 AC_SUBST(VNC_RFP_PATH)
1234 if test "${enable_bgp_vnc}" != "no";then
1235 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
1236 RFPTEST="${with_rfp_path}/rfptest"
1237 LIBRFP="${with_rfp_path}/librfp"
1238 RFPINC="${with_rfp_path}/librfp"
1242 RFPINC="bgpd/rfp-example/librfp"
1245 AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
1258 AC_SUBST(WATCHQUAGGA)
1264 AC_SUBST(OSPFCLIENT)
1266 AC_CHECK_LIB(crypt, crypt)
1267 AC_CHECK_LIB(resolv, res_init)
1269 dnl ---------------------------
1270 dnl check system has PCRE regexp
1271 dnl ---------------------------
1272 if test "x$enable_pcreposix" = "xyes"; then
1273 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1274 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1276 AC_SUBST(HAVE_LIBPCREPOSIX)
1278 dnl ------------------
1279 dnl check Net-SNMP library
1280 dnl ------------------
1281 if test "${enable_snmp}" != ""; then
1282 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1283 if test x"$NETSNMP_CONFIG" = x"no"; then
1284 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1286 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1287 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1288 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1289 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1296 ])],[AC_MSG_RESULT(yes)],[
1298 AC_MSG_ERROR([--enable-snmp given but not usable])])
1299 AC_DEFINE(HAVE_SNMP,,SNMP)
1300 case "${enable_snmp}" in
1305 SNMP_METHOD="${enable_snmp}"
1308 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1311 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1312 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1313 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1316 dnl ---------------------------
1317 dnl sockaddr and netinet checks
1318 dnl ---------------------------
1321 struct vifctl, struct mfcctl, struct sioc_sg_req,
1322 vifi_t, struct sioc_vif_req, struct igmpmsg,
1323 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1324 struct nd_opt_adv_interval, struct rt_addrinfo,
1325 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1326 [], [], QUAGGA_INCLUDES)
1328 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1329 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1330 struct sockaddr_dl.sdl_len,
1331 struct if6_aliasreq.ifra_lifetime,
1332 struct nd_opt_adv_interval.nd_opt_ai_type],
1333 [], [], QUAGGA_INCLUDES)
1335 dnl ---------------------------
1336 dnl IRDP/pktinfo/icmphdr checks
1337 dnl ---------------------------
1338 AC_CHECK_TYPES([struct in_pktinfo],
1339 [AC_CHECK_TYPES([struct icmphdr],
1340 [if test "${enable_irdp}" != "no"; then
1341 AC_DEFINE(HAVE_IRDP,, IRDP)
1343 [if test "${enable_irdp}" = "yes"; then
1344 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1345 fi], [QUAGGA_INCLUDES])],
1346 [if test "${enable_irdp}" = "yes"; then
1347 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1348 fi], [QUAGGA_INCLUDES])
1350 dnl -----------------------
1351 dnl checking for IP_PKTINFO
1352 dnl -----------------------
1353 AC_MSG_CHECKING(for IP_PKTINFO)
1354 AC_TRY_COMPILE([#include <netdb.h>], [
1355 int opt = IP_PKTINFO;
1358 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1363 dnl ---------------------------
1364 dnl checking for IP_RECVDSTADDR
1365 dnl ---------------------------
1366 AC_MSG_CHECKING(for IP_RECVDSTADDR)
1367 AC_TRY_COMPILE([#include <netinet/in.h>], [
1368 int opt = IP_RECVDSTADDR;
1371 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1376 dnl ----------------------
1377 dnl checking for IP_RECVIF
1378 dnl ----------------------
1379 AC_MSG_CHECKING(for IP_RECVIF)
1380 AC_TRY_COMPILE([#include <netinet/in.h>], [
1381 int opt = IP_RECVIF;
1384 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1389 dnl ----------------------
1390 dnl checking for SO_BINDANY
1391 dnl ----------------------
1392 AC_MSG_CHECKING(for SO_BINDANY)
1393 AC_TRY_COMPILE([#include <sys/socket.h>], [
1394 int opt = SO_BINDANY;
1397 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1402 dnl ----------------------
1403 dnl checking for IP_FREEBIND
1404 dnl ----------------------
1405 AC_MSG_CHECKING(for IP_FREEBIND)
1406 AC_TRY_COMPILE([#include <netinet/in.h>], [
1407 int opt = IP_FREEBIND;
1410 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1415 dnl --------------------------------------
1416 dnl checking for clock_time monotonic struct and call
1417 dnl --------------------------------------
1418 AC_CHECK_DECL(CLOCK_MONOTONIC,
1419 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1420 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1421 ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
1423 dnl -------------------
1424 dnl capabilities checks
1425 dnl -------------------
1426 if test "${enable_capabilities}" != "no"; then
1427 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1428 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1430 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1431 quagga_ac_keepcaps="yes"],
1434 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1435 AC_CHECK_HEADERS(sys/capability.h)
1437 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1438 AC_CHECK_LIB(cap, cap_init,
1439 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1441 quagga_ac_lcaps="yes"]
1444 AC_CHECK_HEADERS(priv.h,
1445 [AC_MSG_CHECKING(Solaris style privileges are available)
1446 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1448 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1449 quagga_ac_scaps="yes"],
1455 if test x"${quagga_ac_scaps}" = x"yes" \
1456 -o x"${quagga_ac_lcaps}" = x"yes"; then
1457 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1462 dnl ---------------------------
1463 dnl check for glibc 'backtrace'
1464 dnl ---------------------------
1465 if test x"${enable_backtrace}" != x"no" ; then
1467 AC_CHECK_HEADER([execinfo.h], [
1468 AC_SEARCH_LIBS([backtrace], [execinfo], [
1469 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1470 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1475 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1476 dnl user explicitly requested backtrace but we failed to find support
1477 AC_MSG_FAILURE([failed to find backtrace support])
1481 dnl -----------------------------------------
1482 dnl check for malloc mallinfo struct and call
1483 dnl this must try and link using LIBS, in
1484 dnl order to check no alternative allocator
1485 dnl has been specified, which might not provide
1486 dnl mallinfo, e.g. such as Umem on Solaris.
1487 dnl -----------------------------------------
1488 AC_CHECK_HEADER([malloc.h],
1489 [AC_MSG_CHECKING(whether mallinfo is available)
1490 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1491 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1493 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1496 ], [], QUAGGA_INCLUDES)
1501 CONFDATE=`date '+%Y%m%d'`
1507 if test x"$DEJAGNU" = x
1509 DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
1511 RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
1514 AC_SUBST(RUNTESTDEFAULTFLAGS)
1516 dnl ------------------------------
1517 dnl set paths for state directory
1518 dnl ------------------------------
1519 AC_MSG_CHECKING(directory to use for state file)
1520 if test "${prefix}" = "NONE"; then
1521 quagga_statedir_prefix="";
1523 quagga_statedir_prefix=${prefix}
1525 if test "${localstatedir}" = '${prefix}/var'; then
1526 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1527 ${quagga_statedir_prefix}/var/adm dnl
1528 ${quagga_statedir_prefix}/etc dnl
1534 test -d $QUAGGA_STATE_DIR && break
1536 quagga_statedir=$QUAGGA_STATE_DIR
1538 quagga_statedir=${localstatedir}
1540 if test $quagga_statedir = "/dev/null"; then
1541 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1543 AC_MSG_RESULT(${quagga_statedir})
1544 AC_SUBST(quagga_statedir)
1546 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1547 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1548 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1549 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1550 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1551 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1552 AC_DEFINE_UNQUOTED(PATH_LDPD_PID, "$quagga_statedir/ldpd.pid",ldpd PID)
1553 AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$quagga_statedir/ldpd.sock",ldpd control socket)
1554 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1555 AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$quagga_statedir/pimd.pid",pimd PID)
1556 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1557 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1558 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1559 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1560 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1561 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1562 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1563 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1564 AC_DEFINE_UNQUOTED(LDP_VTYSH_PATH, "$quagga_statedir/ldpd.vty",ldpd vty socket)
1565 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1566 AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$quagga_statedir/pimd.vty",pimd vty socket)
1567 AC_DEFINE_UNQUOTED(WATCHQUAGGA_VTYSH_PATH, "$quagga_statedir/watchquagga.vty",watchquagga vty socket)
1568 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1570 dnl autoconf does this, but it does it too late...
1571 test "x$prefix" = xNONE && prefix=$ac_default_prefix
1572 test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
1574 dnl get the full path, recursing through variables...
1575 vtysh_bin="$bindir/vtysh"
1576 for I in 1 2 3 4 5 6 7 8 9 10; do
1577 eval vtysh_bin="\"$vtysh_bin\""
1579 AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
1581 dnl -------------------------------
1582 dnl Quagga sources should always be
1583 dnl current wrt interfaces. Dont
1584 dnl allow deprecated interfaces to
1586 dnl -------------------------------
1587 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1589 dnl ---------------------------
1590 dnl Check htonl works correctly
1591 dnl ---------------------------
1592 AC_MSG_CHECKING(for working htonl)
1593 AC_CACHE_VAL(ac_cv_htonl_works,
1594 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1595 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1598 AC_MSG_RESULT($ac_cv_htonl_works)
1600 AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
1601 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1602 ospf6d/Makefile ldpd/Makefile isisd/Makefile vtysh/Makefile
1603 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
1605 tests/bgpd.tests/Makefile
1606 tests/libzebra.tests/Makefile
1615 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1616 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1618 if test "${enable_bgp_vnc}" != "no"; then
1619 if test "${with_rfp_path}" = "bgpd/rfp-example" ; then
1620 AC_CONFIG_FILES([bgpd/rfp-example/rfptest/Makefile bgpd/rfp-example/librfp/Makefile])
1622 AC_CONFIG_FILES([${with_rfp_path}/rfptest/Makefile ${with_rfp_path}/librfp/Makefile])
1626 AC_CONFIG_FILES([solaris/Makefile])
1628 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1630 ## Hack, but working solution to avoid rebuilding of quagga.info.
1631 ## It's already in CVS until texinfo 4.7 is more common.
1635 Quagga configuration
1636 --------------------
1637 quagga version : ${PACKAGE_VERSION}
1638 host operating system : ${host_os}
1639 source code location : ${srcdir}
1641 compiler flags : ${CFLAGS}
1643 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1644 state file directory : ${quagga_statedir}
1645 config file directory : `eval echo \`echo ${sysconfdir}\``
1646 example directory : `eval echo \`echo ${exampledir}\``
1647 user to run as : ${enable_user}
1648 group to run as : ${enable_group}
1649 group for vty sockets : ${enable_vty_group}
1650 config file mask : ${enable_configfile_mask}
1651 log file mask : ${enable_logfile_mask}
1652 zebra protobuf enabled : ${have_protobuf:-no}
1654 The above user and group must have read/write access to the state file
1655 directory and to the config files in the config file directory."