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>
11 AC_INIT(Quagga, 0.99.12, [http://bugzilla.quagga.net])
12 AC_CONFIG_SRCDIR(lib/zebra.h)
14 dnl -----------------------------------
15 dnl Get hostname and other information.
16 dnl -----------------------------------
22 AM_CONFIG_HEADER(config.h)
24 dnl GNU awk is required for lib/memtype.h made by memtypes.awk.
25 dnl BSD awk complains: awk: gensub doesn't support backreferences (subst "\1")
26 AC_CHECK_PROG([GAWK],[gawk],[gawk],[/bin/false])
27 AC_ARG_VAR([GAWK],[GNU AWK])
29 dnl default is to match previous behavior
30 exampledir=${sysconfdir}
31 AC_ARG_ENABLE([exampledir],
32 AC_HELP_STRING([--enable-exampledir],
33 [specify alternate directory for examples]),
34 exampledir="$enableval",)
35 dnl XXX add --exampledir to autoconf standard directory list somehow
38 dnl default is to match previous behavior
41 AC_ARG_ENABLE([pkgsrcrcdir],
42 AC_HELP_STRING([--enable-pkgsrcrcdir],
43 [specify directory for rc.d scripts]),
44 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
45 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
53 [ --with-cflags Set CFLAGS for use in compilation.])
54 if test "x$with_cflags" != "x" ; then
55 CFLAGS="$with_cflags" ; cflags_specified=yes ;
56 elif test -n "$CFLAGS" ; then
57 cflags_specified=yes ;
60 dnl --------------------
61 dnl Check CC and friends
62 dnl --------------------
69 dnl autoconf 2.59 appears not to support AC_PROG_SED
71 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
73 dnl ------------------------------------------------------------------
74 dnl Intel compiler check. Although Intel tries really hard to make icc
75 dnl look like gcc, there are some differences. It's very verbose with
76 dnl -Wall and it doesn't support the individual -W options.
77 dnl ------------------------------------------------------------------
78 if test "x${GCC}" = "xyes" ; then
80 AC_MSG_CHECKING([whether we are using the Intel compiler])
81 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
82 [AC_MSG_RESULT([no])],
87 AC_MSG_CHECKING([whether we are using SunPro compiler])
88 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
89 [AC_MSG_RESULT([no])],
95 dnl ---------------------------------------------
96 dnl If CLFAGS doesn\'t exist set default value
97 dnl AC_PROG_CC will have set minimal default
98 dnl already, eg "-O2 -g" for gcc, "-g" for others
99 dnl (Wall is gcc specific... have to make sure
100 dnl gcc is being used before setting it)
102 dnl Intel icc 8.0 also sets __GNUC__,
103 dnl but doesn't support all these fancy -W options.
104 dnl Intel compiler warnings we ignore:
105 dnl 279: controlling expression is constant.
106 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
107 dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
109 dnl 981: operands are evaluated in unspecified order.
111 dnl Sun Studio 10 / SunPro 5.7 is also supported,
112 dnl so lets set some sane CFLAGS for it.
113 dnl ---------------------------------------------
115 AC_MSG_CHECKING([whether to set a default CFLAGS])
116 if test "x${cflags_specified}" = "x" ; then
119 CFLAGS="-Os -g -Wall -wd 279,869,981"
120 AC_MSG_RESULT([Intel default])
123 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
124 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
125 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
126 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
127 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
128 # TODO: conditionally addd -Wpacked if handled
129 AC_MSG_RESULT([gcc default])
132 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
133 AC_MSG_RESULT([SunPro default])
136 AC_MSG_RESULT([unknown compiler])
140 AC_MSG_RESULT([CFLAGS supplied by user])
149 AC_CHECK_TOOL(AR, ar)
151 dnl ---------------------------
152 dnl We, perhaps unfortunately,
153 dnl depend on GNU Make specific
155 dnl Give the user a warning if
157 dnl ---------------------------
158 AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
159 [quagga_cv_gnu_make=no
160 if ${MAKE-make} --version 2>/dev/null | \
161 grep '^GNU Make ' >/dev/null ; then
162 quagga_cv_gnu_make=yes;
167 dnl -----------------
168 dnl System extensions
169 dnl -----------------
178 dnl ----------------------
179 dnl Packages configuration
180 dnl ----------------------
182 [ --enable-vtysh include integrated vty shell for Quagga])
184 [ --disable-ipv6 turn off IPv6 related features and daemons])
186 [ --disable-zebra do not build zebra daemon])
188 [ --disable-bgpd do not build bgpd])
190 [ --disable-ripd do not build ripd])
191 AC_ARG_ENABLE(ripngd,
192 [ --disable-ripngd do not build ripngd])
194 [ --disable-ospfd do not build ospfd])
195 AC_ARG_ENABLE(ospf6d,
196 [ --disable-ospf6d do not build ospf6d])
197 AC_ARG_ENABLE(watchquagga,
198 [ --disable-watchquagga do not build watchquagga])
200 [ --enable-isisd build isisd])
201 AC_ARG_ENABLE(solaris,
202 [ --enable-solaris build solaris])
203 AC_ARG_ENABLE(bgp-announce,
204 [ --disable-bgp-announce, turn off BGP route announcement])
205 AC_ARG_ENABLE(netlink,
206 [ --enable-netlink force to use Linux netlink interface])
207 AC_ARG_ENABLE(broken-aliases,
208 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
210 [ --without-crypto do not use libcrypto in SNMP])
212 [ --enable-snmp enable SNMP support])
214 [ --with-libpam use libpam for PAM support in vtysh])
215 AC_ARG_ENABLE(tcp-zebra,
216 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
217 AC_ARG_ENABLE(opaque-lsa,
218 [ --enable-opaque-lsa enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
219 AC_ARG_ENABLE(ospfapi,
220 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database,
221 (this is the default if --enable-opaque-lsa is not set)])
222 AC_ARG_ENABLE(ospfclient,
223 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
224 (this is the default if --disable-ospfapi is set)])
225 AC_ARG_ENABLE(ospf-te,
226 [ --enable-ospf-te enable Traffic Engineering Extension to OSPF])
227 AC_ARG_ENABLE(multipath,
228 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
230 AC_HELP_STRING([--enable-user=user], [user to run Quagga suite as (default quagga)]))
232 AC_HELP_STRING([--enable-group=group], [group to run Quagga suite as (default quagga)]))
233 AC_ARG_ENABLE(vty_group,
234 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
235 AC_ARG_ENABLE(configfile_mask,
236 [ --enable-configfile-mask=ARG set mask for config files])
237 AC_ARG_ENABLE(logfile_mask,
238 [ --enable-logfile-mask=ARG set mask for log files])
241 [ --disable-rtadv disable IPV6 router advertisement feature])
243 [ --enable-irdp enable IRDP server support in zebra])
244 AC_ARG_ENABLE(isis_topology,
245 [ --enable-isis-topology enable IS-IS topology generator])
246 AC_ARG_ENABLE(capabilities,
247 [ --disable-capabilities disable using POSIX capabilities])
248 AC_ARG_ENABLE(gcc_ultra_verbose,
249 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
250 AC_ARG_ENABLE(linux24_tcp_md5,
251 [ --enable-linux24-tcp-md5 enable support for old, Linux-2.4 RFC2385 patch])
252 AC_ARG_ENABLE(gcc-rdynamic,
253 [ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
254 AC_ARG_ENABLE(time-check,
255 [ --disable-time-check disable slow thread warning messages])
256 AC_ARG_ENABLE(pcreposix,
257 [ --enable-pcreposix enable using PCRE Posix libs for regex functions])
259 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
260 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
261 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
262 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
263 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
266 if test x"${enable_gcc_rdynamic}" = x"yes" ; then
267 LDFLAGS="${LDFLAGS} -rdynamic"
270 if test x"${enable_time_check}" != x"no" ; then
271 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
272 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
274 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
278 if test "${enable_broken_aliases}" = "yes"; then
279 if test "${enable_netlink}" = "yes"
281 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
283 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
287 if test "${enable_tcp_zebra}" = "yes"; then
288 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
291 if test "${enable_opaque_lsa}" = "yes"; then
292 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
295 if test "${enable_ospf_te}" = "yes"; then
296 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
297 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
300 if test "${enable_linux24_tcp_md5}" = "yes"; then
301 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
304 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
305 if test "${enable_rtadv}" != "no"; then
307 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
312 if test "${enable_irdp}" = "yes"; then
313 AC_DEFINE(HAVE_IRDP,, IRDP )
316 if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
317 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
318 ISIS_TOPOLOGY_INCLUDES="-I./topology"
319 ISIS_TOPOLOGY_DIR="topology"
320 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
323 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
324 AC_SUBST(ISIS_TOPOLOGY_DIR)
325 AC_SUBST(ISIS_TOPOLOGY_LIB)
327 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
329 elif test "${enable_user}" = "no"; then
333 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
334 enable_group="quagga"
335 elif test "${enable_group}" = "no"; then
339 if test x"${enable_vty_group}" = x"yes" ; then
340 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
341 elif test x"${enable_vty_group}" != x""; then
342 if test x"${enable_vty_group}" != x"no"; then
343 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
346 AC_SUBST([enable_user])
347 AC_SUBST([enable_group])
348 AC_SUBST([enable_vty_group])
349 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
350 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
352 enable_configfile_mask=${enable_configfile_mask:-0600}
353 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
355 enable_logfile_mask=${enable_logfile_mask:-0600}
356 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
360 case "${enable_multipath}" in
362 MULTIPATH_NUM="${enable_multipath}"
367 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
371 AC_SUBST(MULTIPATH_NUM)
373 dnl ------------------------------------
374 dnl Check C keywords and standard types
375 dnl ------------------------------------
390 dnl -------------------------
391 dnl Check other header files.
392 dnl -------------------------
393 AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
394 sys/types.h linux/version.h netdb.h asm/types.h \
395 sys/param.h limits.h signal.h libutil.h \
396 sys/socket.h netinet/in.h time.h sys/time.h])
398 dnl Utility macro to avoid retyping includes all the time
399 m4_define([QUAGGA_INCLUDES],
402 #define __EXTENSIONS__
414 # include <sys/types.h>
416 /* sys/conf.h depends on param.h on FBSD at least */
418 # include <sys/param.h>
420 /* Required for MAXSIG */
424 #if HAVE_SYS_SOCKET_H
425 # include <sys/socket.h>
427 #if HAVE_NETINET_IN_H
428 # include <netinet/in.h>
430 #ifdef TIME_WITH_SYS_TIME
431 # include <sys/time.h>
434 # ifdef HAVE_SYS_TIME_H
435 # include <sys/time.h>
439 #endif /* TIME_WITH_SYS_TIME */
442 AC_CHECK_HEADERS([sys/un.h net/if.h netinet/in_systm.h netinet/in_var.h \
443 net/if_dl.h net/if_var.h net/netopt.h net/route.h \
444 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
445 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
446 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
447 [], [], QUAGGA_INCLUDES)
449 AC_CHECK_HEADERS([ucontext.h], [], [],
452 #endif /* __USE_GNU */
456 m4_define([QUAGGA_INCLUDES],
464 #if HAVE_NETINET_IN_SYSTM_H
465 # include <netinet/in_systm.h>
467 #if HAVE_NETINET_IN_VAR_H
468 # include <netinet/in_var.h>
471 # include <net/if_dl.h>
473 #if HAVE_NET_IF_VAR_H
474 # include <net/if_var.h>
476 #if HAVE_NET_NETOPT_H
477 # include <net/netopt.h>
480 # include <net/route.h>
483 # include <inet/nd.h>
486 # include <arpa/inet.h>
488 /* Required for IDRP */
489 #if HAVE_NETINET_IP_ICMP_H
490 # include <netinet/ip_icmp.h>
494 dnl V6 headers are checked below, after we check for v6
496 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
498 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
500 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
501 AC_DEFINE(SUNOS_5, 1, SunOS 5)
502 AC_CHECK_LIB(xnet, main)
506 | [*-sunos5.1[0-9]] \
507 | [*-sunos5.1[0-9].[0-9]] \
508 | [*-solaris2.[8-9]] \
509 | [*-solaris2.1[0-9]] \
510 | [*-solaris2.1[0-9].[0-9]])
512 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
513 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
514 AC_CHECK_LIB(socket, main)
515 AC_CHECK_LIB(nsl, main)
516 AC_CHECK_LIB(umem, main)
517 AC_CHECK_FUNCS([printstack],
518 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
519 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
523 *-sunos5* | *-solaris2*)
524 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
525 AC_CHECK_LIB(socket, main)
526 AC_CHECK_LIB(nsl, main)
531 AC_DEFINE(GNU_LINUX,,GNU Linux)
534 AC_CHECK_LIB(nsl, gethostbyname)
535 AC_CHECK_LIB(socket, socket)
539 AC_DEFINE(OPEN_BSD,,OpenBSD)
543 OTHER_METHOD="mtu_kvm.o"
544 AC_CHECK_LIB(kvm, main)
548 AC_DEFINE(IRIX_65,,IRIX 6.5)
552 dnl ---------------------
553 dnl Integrated VTY option
554 dnl ---------------------
555 case "${enable_vtysh}" in
556 "yes") VTYSH="vtysh";
557 AC_DEFINE(VTYSH,,VTY shell)
558 AC_PATH_PROG(PERL, perl)
559 dnl Vtysh uses libreadline, which looks for termcap functions at
560 dnl configure time. We follow readlines search order.
561 dnl The required procedures are in libtermcap on NetBSD, in
562 dnl [TODO] on Linux, and in [TODO] on Solaris.
563 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
564 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
565 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
566 [AC_CHECK_LIB(ncurses, tputs,
567 LIBREADLINE="$LIBREADLINE -lncurses")]
571 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
573 if test $ac_cv_lib_readline_main = no; then
574 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
576 AC_CHECK_HEADER(readline/history.h)
577 if test $ac_cv_header_readline_history_h = no;then
578 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
580 AC_CHECK_LIB(readline, rl_completion_matches,
581 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
582 if test $ac_cv_lib_readline_rl_completion_matches = no; then
583 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
589 AC_SUBST(LIBREADLINE)
594 if test "$with_libpam" = "yes"; then
595 AC_CHECK_HEADER([security/pam_misc.h],
596 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
597 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
598 pam_conv_func="misc_conv"
601 AC_CHECK_HEADER([security/openpam.h],
602 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
603 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
604 pam_conv_func="openpam_ttyconv"
607 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
608 AC_MSG_WARN([*** pam support will not be built ***])
613 if test "$with_libpam" = "yes"; then
614 dnl took this test from proftpds configure.in and suited to our needs
615 dnl -------------------------------------------------------------------------
617 dnl This next check looks funky due to a linker problem with some versions
618 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
619 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
620 dnl with RedHat 6.2 and Debian 2.2 or better.
621 AC_CHECK_LIB(pam, pam_start,
622 [AC_CHECK_LIB(pam, $pam_conv_func,
623 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
625 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
626 LIBPAM="-lpam -lpam_misc"]
630 [AC_CHECK_LIB(pam, pam_end,
631 [AC_CHECK_LIB(pam, $pam_conv_func,
632 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
633 LIBPAM="-lpam -ldl"],
634 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
635 LIBPAM="-lpam -ldl -lpam_misc"]
637 ],AC_MSG_WARN([*** pam support will not be built ***]),
644 dnl -------------------------------
645 dnl Endian-ness check
646 dnl -------------------------------
649 dnl -------------------------------
650 dnl check the size in byte of the C
651 dnl -------------------------------
652 dnl AC_CHECK_SIZEOF(char)
653 dnl AC_CHECK_SIZEOF(int)
654 dnl AC_CHECK_SIZEOF(short)
655 dnl AC_CHECK_SIZEOF(long)
657 dnl ----------------------------
658 dnl check existance of functions
659 dnl ----------------------------
669 AC_FUNC_SELECT_ARGTYPES
671 dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
672 dnl can lead to strange side effects. So we just check for strnlen
673 dnl directly, see below.
674 dnl AC_FUNC_STRNLENdnl
677 dnl -------------------------------
678 dnl bgpd needs pow() and hence libm
679 dnl -------------------------------
681 AC_CHECK_HEADER([math.h],
682 [AC_CHECK_LIB([m], [pow],
685 AC_DEFINE(HAVE_LIBM,, Have libm)
686 AC_CHECK_FUNCS(pow,[],[LIBM=""])
689 if test x"$LIBM" = x ; then
690 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
698 AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
699 inet_ntoa inet_aton strnlen \
700 memchr memmove memset select socket \
701 strcasecmp strchr strcspn strdup strerror \
702 strncasecmp strndup strrchr strspn strstr \
703 strtol strtoul strlcat strlcpy \
704 daemon snprintf vsnprintf \
705 if_nametoindex if_indextoname getifaddrs \
708 AC_CHECK_FUNCS(setproctitle, ,
709 [AC_CHECK_LIB(util, setproctitle,
711 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
717 dnl ------------------------------------
718 dnl Determine routing get and set method
719 dnl ------------------------------------
720 AC_MSG_CHECKING(zebra between kernel interface method)
721 if test x"$opsys" = x"gnu-linux"; then
722 if test "${enable_netlink}" = "yes";then
723 AC_MSG_RESULT(netlink)
724 RT_METHOD=rt_netlink.o
725 AC_DEFINE(HAVE_NETLINK,,netlink)
727 elif test "${enable_netlink}" = "no"; then
732 AC_MSG_RESULT(netlink)
733 RT_METHOD=rt_netlink.o
734 AC_DEFINE(HAVE_NETLINK,,netlink)
737 elif test x"$opsys" = x"sol2-6";then
738 AC_MSG_RESULT(Route socket)
739 KERNEL_METHOD="kernel_socket.o"
740 RT_METHOD="rt_socket.o"
741 elif test x"$opsys" = x"sol8";then
742 AC_MSG_RESULT(Route socket)
743 KERNEL_METHOD="kernel_socket.o"
744 RT_METHOD="rt_socket.o"
745 elif test "$opsys" = "irix" ; then
746 AC_MSG_RESULT(Route socket)
747 KERNEL_METHOD="kernel_socket.o"
748 RT_METHOD="rt_socket.o"
750 AC_TRY_RUN([#include <errno.h>
751 #include <sys/types.h>
752 #include <sys/socket.h>
758 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
759 if (ac_sock < 0 && errno == EINVAL)
763 [KERNEL_METHOD=kernel_socket.o
764 RT_METHOD=rt_socket.o
765 AC_MSG_RESULT(socket)],
766 [RT_METHOD=rt_ioctl.o
767 AC_MSG_RESULT(ioctl)],
768 [KERNEL_METHOD=kernel_socket.o
769 RT_METHOD=rt_socket.o
770 AC_MSG_RESULT(socket)])
773 AC_SUBST(KERNEL_METHOD)
774 AC_SUBST(OTHER_METHOD)
776 dnl --------------------------
777 dnl Determine IS-IS I/O method
778 dnl --------------------------
779 AC_CHECK_HEADER(net/bpf.h)
780 AC_CHECK_HEADER(sys/dlpi.h)
781 AC_MSG_CHECKING(zebra IS-IS I/O method)
782 if test x"$opsys" = x"gnu-linux"; then
783 AC_MSG_RESULT(pfpacket)
784 ISIS_METHOD=isis_pfpacket.o
785 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
787 ISIS_METHOD="isis_dlpi.o"
789 if test $ac_cv_header_net_bpf_h = no; then
790 if test $ac_cv_header_sys_dlpi_h = no; then
792 AC_MSG_WARN([*** IS-IS support will not be built ***])
797 ISIS_METHOD="isis_dlpi.o"
800 ISIS_METHOD="isis_bpf.o"
803 AC_SUBST(ISIS_METHOD)
805 dnl ------------------------------------
806 dnl check for broken CMSG_FIRSTHDR macro
807 dnl ------------------------------------
808 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
809 AC_RUN_IFELSE([AC_LANG_SOURCE([[
812 #define __EXTENSIONS__
817 #ifdef HAVE_SYS_TYPES_H
818 #include <sys/types.h>
820 #ifdef HAVE_SYS_SOCKET_H
821 #include <sys/socket.h>
829 msg.msg_control = buf;
830 msg.msg_controllen = 0;
832 if (CMSG_FIRSTHDR(&msg) != NULL)
835 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
836 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
838 dnl ------------------------------
839 dnl check kernel route read method
840 dnl ------------------------------
841 AC_CACHE_CHECK(route read method check, zebra_rtread,
842 [if test "$netlink" = yes; then
843 RTREAD_METHOD="rtread_netlink.o"
844 zebra_rtread="netlink"
846 for zebra_rtread in /proc/net/route /dev/ip /dev/null;
848 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
850 case $zebra_rtread in
851 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
852 zebra_rtread="proc";;
855 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
856 zebra_rtread="sysctl";;
857 *) RTREAD_METHOD="rtread_getmsg.o"
858 zebra_rtread="getmsg";;
860 *) RTREAD_METHOD="rtread_sysctl.o"
861 zebra_rtread="sysctl";;
864 AC_SUBST(RTREAD_METHOD)
866 dnl -----------------------------
867 dnl check interface lookup method
868 dnl -----------------------------
870 AC_MSG_CHECKING(interface looking up method)
871 if test "$netlink" = yes; then
872 AC_MSG_RESULT(netlink)
873 IF_METHOD=if_netlink.o
874 elif test "$opsys" = "sol2-6";then
875 AC_MSG_RESULT(Solaris GIF)
877 elif test "$opsys" = "sol8";then
878 AC_MSG_RESULT(Solaris GLIF)
879 IF_METHOD=if_ioctl_solaris.o
880 IOCTL_METHOD=ioctl_solaris.o
881 elif test "$opsys" = "irix" ; then
884 elif test "$opsys" = "openbsd";then
885 AC_MSG_RESULT(openbsd)
887 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
888 AC_MSG_RESULT(sysctl)
889 IF_METHOD=if_sysctl.o
890 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
896 AC_SUBST(IOCTL_METHOD)
898 dnl ---------------------------------------------------------------
899 dnl figure out how to specify an interface in multicast sockets API
900 dnl ---------------------------------------------------------------
901 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
903 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
904 AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
905 #include <sys/param.h>
906 #endif],[#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000)
909 #error No support for BSD struct ip_mreq hack detected
910 #endif],[AC_MSG_RESULT(yes)
911 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
914 dnl ---------------------------------------------------------------
915 dnl figure out how to check link-state
916 dnl ---------------------------------------------------------------
917 AC_CHECK_HEADER([net/if.h],
918 [AC_CHECK_HEADER( [net/if_media.h],
919 [m4_define([LINK_DETECT_INCLUDES],
921 [#include <net/if_media.h>
923 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
924 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
925 [], LINK_DETECT_INCLUDES)],
928 [], QUAGGA_INCLUDES )
930 dnl ------------------------
931 dnl TCP_MD5SIG socket option
932 dnl ------------------------
934 AC_CHECK_HEADER([netinet/tcp.h],
935 [m4_define([MD5_INCLUDES],
937 [#include <netinet/tcp.h>
939 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
942 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
943 AC_CHECK_HEADER([linux/tcp.h],
944 [m4_define([MD5_INCLUDES],
946 [#include <linux/tcp.h>
948 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
951 dnl -----------------------
952 dnl check proc file system.
953 dnl -----------------------
954 if test "$netlink" != yes; then
955 if test -r /proc/net/dev; then
956 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
959 if test -r /proc/net/if_inet6; then
960 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
966 dnl -----------------------------
967 dnl check ipforward detect method
968 dnl -----------------------------
969 AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
970 [for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
972 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
974 case $zebra_ipforward_path in
975 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
976 zebra_ipforward_path="proc";;
979 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
980 zebra_ipforward_path="ews";;
981 *-freebsd*) IPFORWARD=ipforward_sysctl.o
982 zebra_ipforward_path="sysctl";;
983 *) IPFORWARD=ipforward_solaris.o
984 zebra_ipforward_path="solaris";;
986 *) IPFORWARD=ipforward_sysctl.o
987 zebra_ipforward_path="sysctl";;
991 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
996 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
997 if test "${enable_ipv6}" = "no"; then
998 AC_MSG_RESULT(disabled)
1003 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1005 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1006 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1010 AC_MSG_RESULT(INRIA IPv6)
1014 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1016 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1017 AC_DEFINE(KAME,1,KAME IPv6)
1020 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1021 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1024 dnl -------------------------
1026 dnl default host check
1027 dnl It is not used by Kheops
1028 dnl -------------------------
1029 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1031 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1032 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1033 AC_DEFINE(KAME,1,KAME IPv6 stack)
1036 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1037 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1039 AC_MSG_RESULT(MUSICA)
1043 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1045 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1046 AC_DEFINE(NRL,1,NRL)
1049 if test x"$opsys" = x"bsdi";then
1050 AC_DEFINE(BSDI_NRL,,BSDI)
1051 AC_MSG_RESULT(BSDI_NRL)
1055 dnl ------------------------------------
1056 dnl Solaris 9, 10 and potentially higher
1057 dnl ------------------------------------
1058 elif test x"$opsys" = x"sol8"; then
1060 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1061 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1064 AC_MSG_RESULT(Solaris IPv6)
1068 elif test "${enable_ipv6}" = "yes"; then
1070 #include <linux/version.h>
1071 /* 2.1.128 or later */
1072 #if LINUX_VERSION_CODE >= 0x020180
1076 zebra_cv_linux_ipv6=yes
1077 AC_MSG_RESULT(Linux IPv6)])
1079 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1082 zebra_cv_linux_ipv6=yes
1083 AC_MSG_RESULT(Linux IPv6)
1087 if test "$zebra_cv_linux_ipv6" = "yes";then
1088 AC_MSG_CHECKING(whether libc has IPv6 support)
1089 AC_TRY_LINK([#include <netinet/in.h>
1090 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1093 zebra_cv_linux_ipv6=yes],
1096 zebra_cv_linux_ipv6=no])
1099 if test "$zebra_cv_linux_ipv6" = "yes";then
1100 AC_MSG_CHECKING(for GNU libc >= 2.1)
1101 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1103 #include <features.h>
1104 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1108 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1109 AC_MSG_RESULT(yes)],
1114 if test "$glibc" != "yes"; then
1115 INCLUDES="-I/usr/inet6/include"
1116 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1117 LIB_IPV6="-L/usr/inet6/lib -linet6"
1122 dnl -----------------------
1123 dnl Set IPv6 related values
1124 dnl -----------------------
1125 LIBS="$LIB_IPV6 $LIBS"
1128 if test x"$RIPNGD" = x""; then
1129 AC_MSG_RESULT(IPv4 only)
1133 dnl ------------------
1134 dnl IPv6 header checks
1135 dnl ------------------
1136 if test "x${zebra_cv_ipv6}" = "xyes"; then
1137 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
1138 netinet6/in6_var.h netinet6/nd6.h], [], [],
1142 m4_define([QUAGGA_INCLUDES],dnl
1144 [#if HAVE_NETINET6_IN6_H
1145 #include <netinet6/in6.h>
1147 #if HAVE_NETINET_IN6_VAR_H
1148 #include <netinet/in6_var.h>
1150 #if HAVE_NETINET_ICMP6_H
1151 # include <netinet/icmp6.h>
1153 #if HAVE_NETINET6_IN6_VAR_H
1154 # include <netinet6/in6_var.h>
1156 #if HAVE_NETINET6_ND6_H
1157 # include <netinet6/nd6.h>
1161 dnl --------------------
1162 dnl Daemon disable check
1163 dnl --------------------
1164 if test "${enable_zebra}" = "no";then
1170 if test "${enable_bgpd}" = "no";then
1176 if test "${enable_ripd}" = "no";then
1182 if test "${enable_ospfd}" = "no";then
1188 if test "${enable_watchquagga}" = "no";then
1191 WATCHQUAGGA="watchquagga"
1195 if test "${enable_opaque_lsa}" = "yes"; then
1196 if test "${enable_ospfapi}" != "no";then
1197 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1199 if test "${enable_ospfclient}" != "no";then
1200 OSPFCLIENT="ospfclient"
1206 case "${enable_ripngd}" in
1207 "yes") RIPNGD="ripngd";;
1212 case "${enable_ospf6d}" in
1213 "yes") OSPF6D="ospf6d";;
1218 case "${enable_isisd}" in
1219 "yes") ISISD="isisd";;
1224 # XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1225 case "${enable_solaris}" in
1226 "yes") SOLARIS="solaris";;
1231 if test "${enable_bgp_announce}" = "no";then
1232 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1234 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1243 AC_SUBST(WATCHQUAGGA)
1249 AC_SUBST(OSPFCLIENT)
1251 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1252 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1253 AC_CHECK_LIB(crypt, crypt)
1254 AC_CHECK_LIB(resolv, res_init)
1256 dnl ---------------------------------------------------
1257 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1258 dnl ---------------------------------------------------
1259 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1260 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1261 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
1263 dnl ---------------------------
1264 dnl check system has PCRE regexp
1265 dnl ---------------------------
1266 if test "x$enable_pcreposix" = "xyes"; then
1267 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1268 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1271 if test "x$enable_pcreposix" != "xyes"; then
1272 dnl ---------------------------
1273 dnl check system has GNU regexp
1274 dnl ---------------------------
1275 AC_MSG_CHECKING(whether system has GNU regex)
1276 AC_CHECK_LIB(c, regexec,
1277 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1279 [LIB_REGEX="regex.o"])
1281 AC_SUBST(HAVE_LIBPCREPOSIX)
1284 dnl ------------------
1285 dnl check Net-SNMP library
1286 dnl ------------------
1287 if test "${enable_snmp}" = "yes"; then
1288 if test "$with_crypto" != "no"; then
1289 LIBS="${LIBS} -lcrypto";
1291 AC_CHECK_LIB(netsnmp, asn_parse_int,
1292 [AC_DEFINE(HAVE_NETSNMP,,Net SNMP)
1293 AC_DEFINE(HAVE_SNMP,,SNMP)
1294 LIBS="${LIBS} -lnetsnmp"],
1295 [AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])])
1297 AC_CHECK_HEADER([net-snmp/net-snmp-config.h],
1299 [AC_MSG_ERROR([--enable-snmp given, but cannot find net-snmp-config.h])],
1301 AC_SUBST(SNMP_INCLUDES)
1304 dnl ---------------------------
1305 dnl sockaddr and netinet checks
1306 dnl ---------------------------
1307 AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1308 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1310 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1311 struct nd_opt_adv_interval, struct rt_addrinfo,
1312 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1313 [], [], QUAGGA_INCLUDES)
1315 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1316 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1317 struct sockaddr_in6.sin6_scope_id,
1318 struct if6_aliasreq.ifra_lifetime,
1319 struct nd_opt_adv_interval.nd_opt_ai_type],
1320 [], [], QUAGGA_INCLUDES)
1322 dnl ---------------------------
1323 dnl IRDP/pktinfo/icmphdr checks
1324 dnl ---------------------------
1325 AC_CHECK_TYPES([struct in_pktinfo],
1326 [AC_CHECK_TYPES([struct icmphdr],
1327 [if test "${enable_irdp}" != "no"; then
1328 AC_DEFINE(HAVE_IRDP,, IRDP)
1330 [if test "${enable_irdp}" = "yes"; then
1331 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1332 fi], [QUAGGA_INCLUDES])],
1333 [if test "${enable_irdp}" = "yes"; then
1334 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1335 fi], [QUAGGA_INCLUDES])
1337 dnl --------------------------------------
1338 dnl checking for getrusage struct and call
1339 dnl --------------------------------------
1340 AC_MSG_CHECKING(whether getrusage is available)
1341 AC_TRY_COMPILE([#include <sys/resource.h>
1342 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1344 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1347 dnl --------------------------------------
1348 dnl checking for clock_time monotonic struct and call
1349 dnl --------------------------------------
1350 AC_CHECK_DECL(CLOCK_MONOTONIC,
1351 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1352 AC_DEFINE(HAVE_MONOTONIC_CLOCK,, Have monotonic clock)
1353 ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
1355 dnl -------------------
1356 dnl capabilities checks
1357 dnl -------------------
1358 if test "${enable_capabilities}" != "no"; then
1359 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1360 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1362 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1363 quagga_ac_keepcaps="yes"],
1366 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1367 AC_CHECK_HEADERS(sys/capability.h)
1369 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1370 AC_CHECK_LIB(cap, cap_init,
1371 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1373 quagga_ac_lcaps="yes"]
1376 AC_CHECK_HEADERS(priv.h,
1377 [AC_MSG_CHECKING(Solaris style privileges are available)
1378 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1380 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1381 quagga_ac_scaps="yes"],
1387 if test x"${quagga_ac_scaps}" = x"yes" \
1388 -o x"${quagga_ac_lcaps}" = x"yes"; then
1389 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1394 dnl ---------------------------
1395 dnl check for glibc 'backtrace'
1396 dnl ---------------------------
1397 if test "${glibc}" = "yes"; then
1398 AC_CHECK_HEADER([execinfo.h],
1399 [AC_CHECK_FUNC([backtrace],
1400 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1401 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1406 dnl -----------------------------------------
1407 dnl check for malloc mallinfo struct and call
1408 dnl this must try and link using LIBS, in
1409 dnl order to check no alternative allocator
1410 dnl has been specified, which might not provide
1411 dnl mallinfo, e.g. such as Umem on Solaris.
1412 dnl -----------------------------------------
1413 AC_CHECK_HEADER([malloc.h],
1414 [AC_MSG_CHECKING(whether mallinfo is available)
1415 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1416 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1418 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1421 ], [], QUAGGA_INCLUDES)
1426 CONFDATE=`date '+%Y%m%d'`
1429 dnl Conditionally enable PIE support for GNU toolchains.
1430 AC_ARG_ENABLE(pie, AS_HELP_STRING([--disable-pie], [Do not build tools as a Position Independent Executables]))
1431 if test "$enable_pie" != "no"; then
1432 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1434 save_LDFLAGS=$LDFLAGS
1435 CFLAGS="$CFLAGS -fPIE"
1436 LDFLAGS="$LDFLAGS -pie"
1437 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1438 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1441 LDFLAGS=$save_LDFLAGS
1443 if test "$ap_cv_cc_pie" = "yes"; then
1452 dnl ------------------------------
1453 dnl set paths for state directory
1454 dnl ------------------------------
1455 if test "${prefix}" = "NONE"; then
1456 quagga_statedir_prefix="";
1458 quagga_statedir_prefix=${prefix}
1460 if test "${localstatedir}" = '${prefix}/var'; then
1461 AC_CACHE_CHECK(state directory,ac_statedir,
1462 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1463 ${quagga_statedir_prefix}/var/adm dnl
1464 ${quagga_statedir_prefix}/etc dnl
1470 test -d $QUAGGA_STATE_DIR && break
1472 quagga_statedir=$QUAGGA_STATE_DIR])
1474 quagga_statedir=${localstatedir}
1475 AC_MSG_CHECKING(directory to use for state file)
1476 AC_MSG_RESULT(${quagga_statedir})
1477 AC_SUBST(quagga_statedir)
1479 if test $quagga_statedir = "/dev/null"; then
1480 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1483 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1484 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1485 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1486 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1487 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1488 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1489 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1490 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1491 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1492 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1493 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1494 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1495 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1496 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1497 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1498 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1499 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1501 dnl -------------------------------
1502 dnl Quagga sources should always be
1503 dnl current wrt interfaces. Dont
1504 dnl allow deprecated interfaces to
1506 dnl -------------------------------
1507 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1509 dnl ---------------------------
1510 dnl Check htonl works correctly
1511 dnl ---------------------------
1512 AC_MSG_CHECKING(for working htonl)
1513 AC_CACHE_VAL(ac_cv_htonl_works,
1514 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1515 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1518 AC_MSG_RESULT($ac_cv_htonl_works)
1520 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1521 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1522 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1523 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
1528 isisd/topology/Makefile
1529 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1530 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1531 AC_CONFIG_FILES([solaris/Makefile])
1533 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1534 ## Hack, but working solution to avoid rebuilding of quagga.info.
1535 ## It's already in CVS until texinfo 4.7 is more common.
1539 Quagga configuration
1540 --------------------
1541 quagga version : ${PACKAGE_VERSION}
1542 host operationg system : ${host_os}
1543 source code location : ${srcdir}
1545 compiler flags : ${CFLAGS}
1547 includes : ${INCLUDES} ${SNMP_INCLUDES}
1548 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1549 state file directory : ${quagga_statedir}
1550 config file directory : `eval echo \`echo ${sysconfdir}\``
1551 example directory : `eval echo \`echo ${exampledir}\``
1552 user to run as : ${enable_user}
1553 group to run as : ${enable_group}
1554 group for vty sockets : ${enable_vty_group}
1555 config file mask : ${enable_configfile_mask}
1556 log file mask : ${enable_logfile_mask}
1558 The above user and group must have read/write access to the state file
1559 directory and to the config files in the config file directory."
1561 if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1562 Warning: The ${MAKE-make} programme detected, either in your path or
1563 via the MAKE variable, is not GNU Make. GNU make may be installed as
1564 gmake on some systems. and is required to complete a build of Quagga