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.13, [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 AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
25 if test "x$GAWK" = "xnot-in-PATH" ; then
26 AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
27 BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
29 AC_ARG_VAR([GAWK],[GNU AWK])
33 dnl default is to match previous behavior
34 exampledir=${sysconfdir}
35 AC_ARG_ENABLE([exampledir],
36 AC_HELP_STRING([--enable-exampledir],
37 [specify alternate directory for examples]),
38 exampledir="$enableval",)
39 dnl XXX add --exampledir to autoconf standard directory list somehow
42 dnl default is to match previous behavior
45 AC_ARG_ENABLE([pkgsrcrcdir],
46 AC_HELP_STRING([--enable-pkgsrcrcdir],
47 [specify directory for rc.d scripts]),
48 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
49 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
57 [ --with-cflags Set CFLAGS for use in compilation.])
58 if test "x$with_cflags" != "x" ; then
59 CFLAGS="$with_cflags" ; cflags_specified=yes ;
60 elif test -n "$CFLAGS" ; then
61 cflags_specified=yes ;
64 dnl --------------------
65 dnl Check CC and friends
66 dnl --------------------
73 dnl autoconf 2.59 appears not to support AC_PROG_SED
75 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
77 dnl ------------------------------------------------------------------
78 dnl Intel compiler check. Although Intel tries really hard to make icc
79 dnl look like gcc, there are some differences. It's very verbose with
80 dnl -Wall and it doesn't support the individual -W options.
81 dnl ------------------------------------------------------------------
82 if test "x${GCC}" = "xyes" ; then
84 AC_MSG_CHECKING([whether we are using the Intel compiler])
85 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
86 [AC_MSG_RESULT([no])],
91 AC_MSG_CHECKING([whether we are using SunPro compiler])
92 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
93 [AC_MSG_RESULT([no])],
99 dnl ---------------------------------------------
100 dnl If CLFAGS doesn\'t exist set default value
101 dnl AC_PROG_CC will have set minimal default
102 dnl already, eg "-O2 -g" for gcc, "-g" for others
103 dnl (Wall is gcc specific... have to make sure
104 dnl gcc is being used before setting it)
106 dnl Intel icc 8.0 also sets __GNUC__,
107 dnl but doesn't support all these fancy -W options.
108 dnl Intel compiler warnings we ignore:
109 dnl 279: controlling expression is constant.
110 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
111 dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
113 dnl 981: operands are evaluated in unspecified order.
115 dnl Sun Studio 10 / SunPro 5.7 is also supported,
116 dnl so lets set some sane CFLAGS for it.
117 dnl ---------------------------------------------
119 AC_MSG_CHECKING([whether to set a default CFLAGS])
120 if test "x${cflags_specified}" = "x" ; then
123 CFLAGS="-Os -g -Wall -wd 279,869,981"
124 AC_MSG_RESULT([Intel default])
127 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
128 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
129 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
130 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
131 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
132 # TODO: conditionally addd -Wpacked if handled
133 AC_MSG_RESULT([gcc default])
136 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
137 AC_MSG_RESULT([SunPro default])
140 AC_MSG_RESULT([unknown compiler])
144 AC_MSG_RESULT([CFLAGS supplied by user])
153 AC_CHECK_TOOL(AR, ar)
155 dnl ---------------------------
156 dnl We, perhaps unfortunately,
157 dnl depend on GNU Make specific
159 dnl Give the user a warning if
161 dnl ---------------------------
162 AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
163 [quagga_cv_gnu_make=no
164 if ${MAKE-make} --version 2>/dev/null | \
165 grep '^GNU Make ' >/dev/null ; then
166 quagga_cv_gnu_make=yes;
171 dnl -----------------
172 dnl System extensions
173 dnl -----------------
181 dnl ----------------------
182 dnl Packages configuration
183 dnl ----------------------
185 [ --enable-vtysh include integrated vty shell for Quagga])
187 [ --disable-ipv6 turn off IPv6 related features and daemons])
189 [ --disable-doc do not build docs])
191 [ --disable-zebra do not build zebra daemon])
193 [ --disable-bgpd do not build bgpd])
195 [ --disable-ripd do not build ripd])
196 AC_ARG_ENABLE(ripngd,
197 [ --disable-ripngd do not build ripngd])
199 [ --disable-ospfd do not build ospfd])
200 AC_ARG_ENABLE(ospf6d,
201 [ --disable-ospf6d do not build ospf6d])
202 AC_ARG_ENABLE(watchquagga,
203 [ --disable-watchquagga do not build watchquagga])
205 [ --enable-isisd build isisd])
206 AC_ARG_ENABLE(solaris,
207 [ --enable-solaris build solaris])
208 AC_ARG_ENABLE(bgp-announce,
209 [ --disable-bgp-announce, turn off BGP route announcement])
210 AC_ARG_ENABLE(netlink,
211 [ --enable-netlink force to use Linux netlink interface])
212 AC_ARG_ENABLE(broken-aliases,
213 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
215 [ --without-crypto do not use libcrypto in SNMP])
217 [ --enable-snmp enable SNMP support])
219 [ --with-libpam use libpam for PAM support in vtysh])
220 AC_ARG_ENABLE(tcp-zebra,
221 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
222 AC_ARG_ENABLE(opaque-lsa,
223 [ --enable-opaque-lsa enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
224 AC_ARG_ENABLE(ospfapi,
225 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database,
226 (this is the default if --enable-opaque-lsa is not set)])
227 AC_ARG_ENABLE(ospfclient,
228 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
229 (this is the default if --disable-ospfapi is set)])
230 AC_ARG_ENABLE(ospf-te,
231 [ --enable-ospf-te enable Traffic Engineering Extension to OSPF])
232 AC_ARG_ENABLE(multipath,
233 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
235 AC_HELP_STRING([--enable-user=user], [user to run Quagga suite as (default quagga)]))
237 AC_HELP_STRING([--enable-group=group], [group to run Quagga suite as (default quagga)]))
238 AC_ARG_ENABLE(vty_group,
239 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
240 AC_ARG_ENABLE(configfile_mask,
241 [ --enable-configfile-mask=ARG set mask for config files])
242 AC_ARG_ENABLE(logfile_mask,
243 [ --enable-logfile-mask=ARG set mask for log files])
246 [ --disable-rtadv disable IPV6 router advertisement feature])
248 [ --enable-irdp enable IRDP server support in zebra])
249 AC_ARG_ENABLE(isis_topology,
250 [ --enable-isis-topology enable IS-IS topology generator])
251 AC_ARG_ENABLE(capabilities,
252 [ --disable-capabilities disable using POSIX capabilities])
253 AC_ARG_ENABLE(gcc_ultra_verbose,
254 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
255 AC_ARG_ENABLE(linux24_tcp_md5,
256 [ --enable-linux24-tcp-md5 enable support for old, Linux-2.4 RFC2385 patch])
257 AC_ARG_ENABLE(gcc-rdynamic,
258 [ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
259 AC_ARG_ENABLE(time-check,
260 [ --disable-time-check disable slow thread warning messages])
261 AC_ARG_ENABLE(pcreposix,
262 [ --enable-pcreposix enable using PCRE Posix libs for regex functions])
264 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
265 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
266 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
267 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
268 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
271 if test x"${enable_gcc_rdynamic}" = x"yes" ; then
272 LDFLAGS="${LDFLAGS} -rdynamic"
275 if test x"${enable_time_check}" != x"no" ; then
276 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
277 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
279 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
283 if test "${enable_broken_aliases}" = "yes"; then
284 if test "${enable_netlink}" = "yes"
286 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
288 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
292 if test "${enable_tcp_zebra}" = "yes"; then
293 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
296 if test "${enable_opaque_lsa}" = "yes"; then
297 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
300 if test "${enable_ospf_te}" = "yes"; then
301 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
302 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
305 if test "${enable_linux24_tcp_md5}" = "yes"; then
306 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
309 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
310 if test "${enable_rtadv}" != "no"; then
312 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
317 if test "${enable_irdp}" = "yes"; then
318 AC_DEFINE(HAVE_IRDP,, IRDP )
321 if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
322 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
323 ISIS_TOPOLOGY_INCLUDES="-I./topology"
324 ISIS_TOPOLOGY_DIR="topology"
325 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
328 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
329 AC_SUBST(ISIS_TOPOLOGY_DIR)
330 AC_SUBST(ISIS_TOPOLOGY_LIB)
332 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
334 elif test "${enable_user}" = "no"; then
338 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
339 enable_group="quagga"
340 elif test "${enable_group}" = "no"; then
344 if test x"${enable_vty_group}" = x"yes" ; then
345 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
346 elif test x"${enable_vty_group}" != x""; then
347 if test x"${enable_vty_group}" != x"no"; then
348 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
351 AC_SUBST([enable_user])
352 AC_SUBST([enable_group])
353 AC_SUBST([enable_vty_group])
354 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
355 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
357 enable_configfile_mask=${enable_configfile_mask:-0600}
358 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
360 enable_logfile_mask=${enable_logfile_mask:-0600}
361 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
365 case "${enable_multipath}" in
367 MULTIPATH_NUM="${enable_multipath}"
372 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
376 AC_SUBST(MULTIPATH_NUM)
378 dnl ------------------------------------
379 dnl Check C keywords and standard types
380 dnl ------------------------------------
395 dnl -------------------------
396 dnl Check other header files.
397 dnl -------------------------
398 AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
399 sys/types.h linux/version.h netdb.h asm/types.h \
400 sys/param.h limits.h signal.h libutil.h \
401 sys/socket.h netinet/in.h time.h sys/time.h])
403 dnl Utility macro to avoid retyping includes all the time
404 m4_define([QUAGGA_INCLUDES],
407 #define __EXTENSIONS__
419 # include <sys/types.h>
421 /* sys/conf.h depends on param.h on FBSD at least */
423 # include <sys/param.h>
425 /* Required for MAXSIG */
429 #if HAVE_SYS_SOCKET_H
430 # include <sys/socket.h>
432 #if HAVE_NETINET_IN_H
433 # include <netinet/in.h>
435 #ifdef TIME_WITH_SYS_TIME
436 # include <sys/time.h>
439 # ifdef HAVE_SYS_TIME_H
440 # include <sys/time.h>
444 #endif /* TIME_WITH_SYS_TIME */
447 AC_CHECK_HEADERS([sys/un.h net/if.h netinet/in_systm.h netinet/in_var.h \
448 net/if_dl.h net/if_var.h net/netopt.h net/route.h \
449 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
450 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
451 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
452 [], [], QUAGGA_INCLUDES)
454 AC_CHECK_HEADERS([ucontext.h], [], [],
457 #endif /* __USE_GNU */
461 m4_define([QUAGGA_INCLUDES],
469 #if HAVE_NETINET_IN_SYSTM_H
470 # include <netinet/in_systm.h>
472 #if HAVE_NETINET_IN_VAR_H
473 # include <netinet/in_var.h>
476 # include <net/if_dl.h>
478 #if HAVE_NET_IF_VAR_H
479 # include <net/if_var.h>
481 #if HAVE_NET_NETOPT_H
482 # include <net/netopt.h>
485 # include <net/route.h>
488 # include <inet/nd.h>
491 # include <arpa/inet.h>
493 /* Required for IDRP */
494 #if HAVE_NETINET_IP_ICMP_H
495 # include <netinet/ip_icmp.h>
499 dnl V6 headers are checked below, after we check for v6
501 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
503 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
505 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
506 AC_DEFINE(SUNOS_5, 1, SunOS 5)
507 AC_CHECK_LIB(xnet, main)
511 | [*-sunos5.1[0-9]] \
512 | [*-sunos5.1[0-9].[0-9]] \
513 | [*-solaris2.[8-9]] \
514 | [*-solaris2.1[0-9]] \
515 | [*-solaris2.1[0-9].[0-9]])
517 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
518 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
519 AC_CHECK_LIB(socket, main)
520 AC_CHECK_LIB(nsl, main)
521 AC_CHECK_LIB(umem, main)
522 AC_CHECK_FUNCS([printstack],
523 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
524 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
528 *-sunos5* | *-solaris2*)
529 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
530 AC_CHECK_LIB(socket, main)
531 AC_CHECK_LIB(nsl, main)
536 AC_DEFINE(GNU_LINUX,,GNU Linux)
539 AC_CHECK_LIB(nsl, gethostbyname)
540 AC_CHECK_LIB(socket, socket)
544 AC_DEFINE(OPEN_BSD,,OpenBSD)
548 OTHER_METHOD="mtu_kvm.o"
549 AC_CHECK_LIB(kvm, main)
553 AC_DEFINE(IRIX_65,,IRIX 6.5)
557 dnl ---------------------
558 dnl Integrated VTY option
559 dnl ---------------------
560 case "${enable_vtysh}" in
561 "yes") VTYSH="vtysh";
562 AC_DEFINE(VTYSH,,VTY shell)
563 AC_PATH_PROG(PERL, perl)
564 dnl Vtysh uses libreadline, which looks for termcap functions at
565 dnl configure time. We follow readlines search order.
566 dnl The required procedures are in libtermcap on NetBSD, in
567 dnl [TODO] on Linux, and in [TODO] on Solaris.
568 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
569 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
570 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
571 [AC_CHECK_LIB(ncurses, tputs,
572 LIBREADLINE="$LIBREADLINE -lncurses")]
576 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
578 if test $ac_cv_lib_readline_main = no; then
579 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
581 AC_CHECK_HEADER(readline/history.h)
582 if test $ac_cv_header_readline_history_h = no;then
583 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
585 AC_CHECK_LIB(readline, rl_completion_matches,
586 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
587 if test $ac_cv_lib_readline_rl_completion_matches = no; then
588 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
594 AC_SUBST(LIBREADLINE)
599 if test "$with_libpam" = "yes"; then
600 AC_CHECK_HEADER([security/pam_misc.h],
601 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
602 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
603 pam_conv_func="misc_conv"
606 AC_CHECK_HEADER([security/openpam.h],
607 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
608 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
609 pam_conv_func="openpam_ttyconv"
612 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
613 AC_MSG_WARN([*** pam support will not be built ***])
618 if test "$with_libpam" = "yes"; then
619 dnl took this test from proftpds configure.in and suited to our needs
620 dnl -------------------------------------------------------------------------
622 dnl This next check looks funky due to a linker problem with some versions
623 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
624 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
625 dnl with RedHat 6.2 and Debian 2.2 or better.
626 AC_CHECK_LIB(pam, pam_start,
627 [AC_CHECK_LIB(pam, $pam_conv_func,
628 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
630 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
631 LIBPAM="-lpam -lpam_misc"]
635 [AC_CHECK_LIB(pam, pam_end,
636 [AC_CHECK_LIB(pam, $pam_conv_func,
637 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
638 LIBPAM="-lpam -ldl"],
639 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
640 LIBPAM="-lpam -ldl -lpam_misc"]
642 ],AC_MSG_WARN([*** pam support will not be built ***]),
649 dnl -------------------------------
650 dnl Endian-ness check
651 dnl -------------------------------
654 dnl -------------------------------
655 dnl check the size in byte of the C
656 dnl -------------------------------
657 dnl AC_CHECK_SIZEOF(char)
658 dnl AC_CHECK_SIZEOF(int)
659 dnl AC_CHECK_SIZEOF(short)
660 dnl AC_CHECK_SIZEOF(long)
662 dnl ----------------------------
663 dnl check existance of functions
664 dnl ----------------------------
674 AC_FUNC_SELECT_ARGTYPES
676 dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
677 dnl can lead to strange side effects. So we just check for strnlen
678 dnl directly, see below.
679 dnl AC_FUNC_STRNLENdnl
682 dnl -------------------------------
683 dnl bgpd needs pow() and hence libm
684 dnl -------------------------------
686 AC_CHECK_HEADER([math.h],
687 [AC_CHECK_LIB([m], [pow],
690 AC_DEFINE(HAVE_LIBM,, Have libm)
691 AC_CHECK_FUNCS(pow,[],[LIBM=""])
694 if test x"$LIBM" = x ; then
695 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
703 AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
704 inet_ntoa inet_aton strnlen \
705 memchr memmove memset select socket \
706 strcasecmp strchr strcspn strdup strerror \
707 strncasecmp strndup strrchr strspn strstr \
708 strtol strtoul strlcat strlcpy \
709 daemon snprintf vsnprintf \
710 if_nametoindex if_indextoname getifaddrs \
713 AC_CHECK_FUNCS(setproctitle, ,
714 [AC_CHECK_LIB(util, setproctitle,
716 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
722 dnl ------------------------------------
723 dnl Determine routing get and set method
724 dnl ------------------------------------
725 AC_MSG_CHECKING(zebra between kernel interface method)
726 if test x"$opsys" = x"gnu-linux"; then
727 if test "${enable_netlink}" = "yes";then
728 AC_MSG_RESULT(netlink)
729 RT_METHOD=rt_netlink.o
730 AC_DEFINE(HAVE_NETLINK,,netlink)
732 elif test "${enable_netlink}" = "no"; then
737 AC_MSG_RESULT(netlink)
738 RT_METHOD=rt_netlink.o
739 AC_DEFINE(HAVE_NETLINK,,netlink)
742 elif test x"$opsys" = x"sol2-6";then
743 AC_MSG_RESULT(Route socket)
744 KERNEL_METHOD="kernel_socket.o"
745 RT_METHOD="rt_socket.o"
746 elif test x"$opsys" = x"sol8";then
747 AC_MSG_RESULT(Route socket)
748 KERNEL_METHOD="kernel_socket.o"
749 RT_METHOD="rt_socket.o"
750 elif test "$opsys" = "irix" ; then
751 AC_MSG_RESULT(Route socket)
752 KERNEL_METHOD="kernel_socket.o"
753 RT_METHOD="rt_socket.o"
755 AC_TRY_RUN([#include <errno.h>
756 #include <sys/types.h>
757 #include <sys/socket.h>
763 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
764 if (ac_sock < 0 && errno == EINVAL)
768 [KERNEL_METHOD=kernel_socket.o
769 RT_METHOD=rt_socket.o
770 AC_MSG_RESULT(socket)],
771 [RT_METHOD=rt_ioctl.o
772 AC_MSG_RESULT(ioctl)],
773 [KERNEL_METHOD=kernel_socket.o
774 RT_METHOD=rt_socket.o
775 AC_MSG_RESULT(socket)])
778 AC_SUBST(KERNEL_METHOD)
779 AC_SUBST(OTHER_METHOD)
781 dnl --------------------------
782 dnl Determine IS-IS I/O method
783 dnl --------------------------
784 AC_CHECK_HEADER(net/bpf.h)
785 AC_CHECK_HEADER(sys/dlpi.h)
786 AC_MSG_CHECKING(zebra IS-IS I/O method)
787 if test x"$opsys" = x"gnu-linux"; then
788 AC_MSG_RESULT(pfpacket)
789 ISIS_METHOD=isis_pfpacket.o
790 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
792 ISIS_METHOD="isis_dlpi.o"
794 if test $ac_cv_header_net_bpf_h = no; then
795 if test $ac_cv_header_sys_dlpi_h = no; then
797 AC_MSG_WARN([*** IS-IS support will not be built ***])
802 ISIS_METHOD="isis_dlpi.o"
805 ISIS_METHOD="isis_bpf.o"
808 AC_SUBST(ISIS_METHOD)
810 dnl ------------------------------------
811 dnl check for broken CMSG_FIRSTHDR macro
812 dnl ------------------------------------
813 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
814 AC_RUN_IFELSE([AC_LANG_SOURCE([[
817 #define __EXTENSIONS__
822 #ifdef HAVE_SYS_TYPES_H
823 #include <sys/types.h>
825 #ifdef HAVE_SYS_SOCKET_H
826 #include <sys/socket.h>
834 msg.msg_control = buf;
835 msg.msg_controllen = 0;
837 if (CMSG_FIRSTHDR(&msg) != NULL)
840 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
841 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
843 dnl ------------------------------
844 dnl check kernel route read method
845 dnl ------------------------------
846 AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
847 [if test "x$netlink" = xyes; then
848 quagga_cv_rtread_method="netlink"
850 for quagga_cv_rtread_method in /proc/net/route /dev/ip /dev/null;
852 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
854 case $quagga_cv_rtread_method in
855 "/proc/net/route") quagga_cv_rtread_method="proc";;
858 *-freebsd*) quagga_cv_rtread_method="sysctl";;
859 *) quagga_cv_rtread_method="getmsg";;
862 quagga_cv_rtread_method="sysctl";;
865 RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
866 AC_SUBST(RTREAD_METHOD)
868 dnl -----------------------------
869 dnl check interface lookup method
870 dnl -----------------------------
872 AC_MSG_CHECKING(interface looking up method)
873 if test "$netlink" = yes; then
874 AC_MSG_RESULT(netlink)
875 IF_METHOD=if_netlink.o
876 elif test "$opsys" = "sol2-6";then
877 AC_MSG_RESULT(Solaris GIF)
879 elif test "$opsys" = "sol8";then
880 AC_MSG_RESULT(Solaris GLIF)
881 IF_METHOD=if_ioctl_solaris.o
882 IOCTL_METHOD=ioctl_solaris.o
883 elif test "$opsys" = "irix" ; then
886 elif test "$opsys" = "openbsd";then
887 AC_MSG_RESULT(openbsd)
889 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
890 AC_MSG_RESULT(sysctl)
891 IF_METHOD=if_sysctl.o
892 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
898 AC_SUBST(IOCTL_METHOD)
900 dnl ---------------------------------------------------------------
901 dnl figure out how to specify an interface in multicast sockets API
902 dnl ---------------------------------------------------------------
903 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
905 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
906 AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
907 #include <sys/param.h>
908 #endif],[#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000)
911 #error No support for BSD struct ip_mreq hack detected
912 #endif],[AC_MSG_RESULT(yes)
913 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
916 dnl ---------------------------------------------------------------
917 dnl figure out how to check link-state
918 dnl ---------------------------------------------------------------
919 AC_CHECK_HEADER([net/if.h],
920 [AC_CHECK_HEADER( [net/if_media.h],
921 [m4_define([LINK_DETECT_INCLUDES],
923 [#include <net/if_media.h>
925 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
926 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
927 [], LINK_DETECT_INCLUDES)],
930 [], QUAGGA_INCLUDES )
932 dnl ------------------------
933 dnl TCP_MD5SIG socket option
934 dnl ------------------------
936 AC_CHECK_HEADER([netinet/tcp.h],
937 [m4_define([MD5_INCLUDES],
939 [#include <netinet/tcp.h>
941 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
944 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
945 AC_CHECK_HEADER([linux/tcp.h],
946 [m4_define([MD5_INCLUDES],
948 [#include <linux/tcp.h>
950 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
953 dnl -----------------------
954 dnl check proc file system.
955 dnl -----------------------
956 if test "$netlink" != yes; then
957 if test -r /proc/net/dev; then
958 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
961 if test -r /proc/net/if_inet6; then
962 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
968 dnl -----------------------------
969 dnl check ipforward detect method
970 dnl -----------------------------
971 AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
972 [for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
974 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
976 case $quagga_cv_ipforward_method in
977 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
980 *-nec-sysv4*) quagga_cv_ipforward_method="ews";;
981 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
982 *) quagga_cv_ipforward_method="solaris";;
984 *) quagga_cv_ipforward_method="sysctl";;
986 IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
989 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
994 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
995 if test "${enable_ipv6}" = "no"; then
996 AC_MSG_RESULT(disabled)
1001 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1003 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1004 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1008 AC_MSG_RESULT(INRIA IPv6)
1012 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1014 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1015 AC_DEFINE(KAME,1,KAME IPv6)
1018 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1019 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1022 dnl -------------------------
1024 dnl default host check
1025 dnl It is not used by Kheops
1026 dnl -------------------------
1027 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1029 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1030 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1031 AC_DEFINE(KAME,1,KAME IPv6 stack)
1034 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1035 LIB_IPV6="-L/usr/local/v6/lib -linet6"
1037 AC_MSG_RESULT(MUSICA)
1041 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1043 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1044 AC_DEFINE(NRL,1,NRL)
1047 if test x"$opsys" = x"bsdi";then
1048 AC_DEFINE(BSDI_NRL,,BSDI)
1049 AC_MSG_RESULT(BSDI_NRL)
1053 dnl ------------------------------------
1054 dnl Solaris 9, 10 and potentially higher
1055 dnl ------------------------------------
1056 elif test x"$opsys" = x"sol8"; then
1058 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1059 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1062 AC_MSG_RESULT(Solaris IPv6)
1066 elif test "${enable_ipv6}" = "yes"; then
1068 #include <linux/version.h>
1069 /* 2.1.128 or later */
1070 #if LINUX_VERSION_CODE >= 0x020180
1074 zebra_cv_linux_ipv6=yes
1075 AC_MSG_RESULT(Linux IPv6)])
1077 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1080 zebra_cv_linux_ipv6=yes
1081 AC_MSG_RESULT(Linux IPv6)
1085 if test "$zebra_cv_linux_ipv6" = "yes";then
1086 AC_MSG_CHECKING(whether libc has IPv6 support)
1087 AC_TRY_LINK([#include <netinet/in.h>
1088 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1091 zebra_cv_linux_ipv6=yes],
1094 zebra_cv_linux_ipv6=no])
1097 if test "$zebra_cv_linux_ipv6" = "yes";then
1098 AC_MSG_CHECKING(for GNU libc >= 2.1)
1099 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1101 #include <features.h>
1102 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1106 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1107 AC_MSG_RESULT(yes)],
1112 if test "$glibc" != "yes"; then
1113 INCLUDES="-I/usr/inet6/include"
1114 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1115 LIB_IPV6="-L/usr/inet6/lib -linet6"
1120 dnl -----------------------
1121 dnl Set IPv6 related values
1122 dnl -----------------------
1123 LIBS="$LIB_IPV6 $LIBS"
1126 if test x"$RIPNGD" = x""; then
1127 AC_MSG_RESULT(IPv4 only)
1131 dnl ------------------
1132 dnl IPv6 header checks
1133 dnl ------------------
1134 if test "x${zebra_cv_ipv6}" = "xyes"; then
1135 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
1136 netinet6/in6_var.h netinet6/nd6.h], [], [],
1140 m4_define([QUAGGA_INCLUDES],dnl
1142 [#if HAVE_NETINET6_IN6_H
1143 #include <netinet6/in6.h>
1145 #if HAVE_NETINET_IN6_VAR_H
1146 #include <netinet/in6_var.h>
1148 #if HAVE_NETINET_ICMP6_H
1149 # include <netinet/icmp6.h>
1151 #if HAVE_NETINET6_IN6_VAR_H
1152 # include <netinet6/in6_var.h>
1154 #if HAVE_NETINET6_ND6_H
1155 # include <netinet6/nd6.h>
1159 dnl disable doc check
1160 if test "${enable_doc}" = "no";then
1166 dnl --------------------
1167 dnl Daemon disable check
1168 dnl --------------------
1169 if test "${enable_zebra}" = "no";then
1175 if test "${enable_bgpd}" = "no";then
1181 if test "${enable_ripd}" = "no";then
1187 if test "${enable_ospfd}" = "no";then
1193 if test "${enable_watchquagga}" = "no";then
1196 WATCHQUAGGA="watchquagga"
1200 if test "${enable_opaque_lsa}" = "yes"; then
1201 if test "${enable_ospfapi}" != "no";then
1202 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1204 if test "${enable_ospfclient}" != "no";then
1205 OSPFCLIENT="ospfclient"
1211 case "${enable_ripngd}" in
1212 "yes") RIPNGD="ripngd";;
1217 case "${enable_ospf6d}" in
1218 "yes") OSPF6D="ospf6d";;
1223 case "${enable_isisd}" in
1224 "yes") ISISD="isisd";;
1229 # XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1230 case "${enable_solaris}" in
1231 "yes") SOLARIS="solaris";;
1236 if test "${enable_bgp_announce}" = "no";then
1237 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1239 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1249 AC_SUBST(WATCHQUAGGA)
1255 AC_SUBST(OSPFCLIENT)
1257 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1258 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1259 AC_CHECK_LIB(crypt, crypt)
1260 AC_CHECK_LIB(resolv, res_init)
1262 dnl ---------------------------------------------------
1263 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1264 dnl ---------------------------------------------------
1265 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1266 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1267 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
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 ***]) ])
1277 if test "x$enable_pcreposix" != "xyes"; then
1278 dnl ---------------------------
1279 dnl check system has GNU regexp
1280 dnl ---------------------------
1281 AC_MSG_CHECKING(whether system has GNU regex)
1282 AC_CHECK_LIB(c, regexec,
1283 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1285 [LIB_REGEX="regex.o"])
1287 AC_SUBST(HAVE_LIBPCREPOSIX)
1290 dnl ------------------
1291 dnl check Net-SNMP library
1292 dnl ------------------
1293 if test "${enable_snmp}" = "yes"; then
1294 if test "$with_crypto" != "no"; then
1295 LIBS="${LIBS} -lcrypto";
1297 AC_CHECK_LIB(netsnmp, asn_parse_int,
1298 [AC_DEFINE(HAVE_NETSNMP,,Net SNMP)
1299 AC_DEFINE(HAVE_SNMP,,SNMP)
1300 LIBS="${LIBS} -lnetsnmp"],
1301 [AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])])
1303 AC_CHECK_HEADER([net-snmp/net-snmp-config.h],
1305 [AC_MSG_ERROR([--enable-snmp given, but cannot find net-snmp-config.h])],
1307 AC_SUBST(SNMP_INCLUDES)
1310 dnl ---------------------------
1311 dnl sockaddr and netinet checks
1312 dnl ---------------------------
1313 AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1314 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1316 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1317 struct nd_opt_adv_interval, struct rt_addrinfo,
1318 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1319 [], [], QUAGGA_INCLUDES)
1321 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1322 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1323 struct sockaddr_in6.sin6_scope_id,
1324 struct if6_aliasreq.ifra_lifetime,
1325 struct nd_opt_adv_interval.nd_opt_ai_type],
1326 [], [], QUAGGA_INCLUDES)
1328 dnl ---------------------------
1329 dnl IRDP/pktinfo/icmphdr checks
1330 dnl ---------------------------
1331 AC_CHECK_TYPES([struct in_pktinfo],
1332 [AC_CHECK_TYPES([struct icmphdr],
1333 [if test "${enable_irdp}" != "no"; then
1334 AC_DEFINE(HAVE_IRDP,, IRDP)
1336 [if test "${enable_irdp}" = "yes"; then
1337 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1338 fi], [QUAGGA_INCLUDES])],
1339 [if test "${enable_irdp}" = "yes"; then
1340 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1341 fi], [QUAGGA_INCLUDES])
1343 dnl --------------------------------------
1344 dnl checking for getrusage struct and call
1345 dnl --------------------------------------
1346 AC_MSG_CHECKING(whether getrusage is available)
1347 AC_TRY_COMPILE([#include <sys/resource.h>
1348 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1350 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1353 dnl --------------------------------------
1354 dnl checking for clock_time monotonic struct and call
1355 dnl --------------------------------------
1356 AC_CHECK_DECL(CLOCK_MONOTONIC,
1357 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1358 AC_DEFINE(HAVE_MONOTONIC_CLOCK,, Have monotonic clock)
1359 ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
1361 dnl -------------------
1362 dnl capabilities checks
1363 dnl -------------------
1364 if test "${enable_capabilities}" != "no"; then
1365 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1366 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1368 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1369 quagga_ac_keepcaps="yes"],
1372 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1373 AC_CHECK_HEADERS(sys/capability.h)
1375 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1376 AC_CHECK_LIB(cap, cap_init,
1377 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1379 quagga_ac_lcaps="yes"]
1382 AC_CHECK_HEADERS(priv.h,
1383 [AC_MSG_CHECKING(Solaris style privileges are available)
1384 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1386 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1387 quagga_ac_scaps="yes"],
1393 if test x"${quagga_ac_scaps}" = x"yes" \
1394 -o x"${quagga_ac_lcaps}" = x"yes"; then
1395 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1400 dnl ---------------------------
1401 dnl check for glibc 'backtrace'
1402 dnl ---------------------------
1403 if test "${glibc}" = "yes"; then
1404 AC_CHECK_HEADER([execinfo.h],
1405 [AC_CHECK_FUNC([backtrace],
1406 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1407 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1412 dnl -----------------------------------------
1413 dnl check for malloc mallinfo struct and call
1414 dnl this must try and link using LIBS, in
1415 dnl order to check no alternative allocator
1416 dnl has been specified, which might not provide
1417 dnl mallinfo, e.g. such as Umem on Solaris.
1418 dnl -----------------------------------------
1419 AC_CHECK_HEADER([malloc.h],
1420 [AC_MSG_CHECKING(whether mallinfo is available)
1421 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1422 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1424 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1427 ], [], QUAGGA_INCLUDES)
1432 CONFDATE=`date '+%Y%m%d'`
1435 dnl Conditionally enable PIE support for GNU toolchains.
1436 AC_ARG_ENABLE(pie, AS_HELP_STRING([--disable-pie], [Do not build tools as a Position Independent Executables]))
1437 if test "$enable_pie" != "no"; then
1438 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1440 save_LDFLAGS=$LDFLAGS
1441 CFLAGS="$CFLAGS -fPIE"
1442 LDFLAGS="$LDFLAGS -pie"
1443 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1444 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1447 LDFLAGS=$save_LDFLAGS
1449 if test "$ap_cv_cc_pie" = "yes"; then
1458 dnl ------------------------------
1459 dnl set paths for state directory
1460 dnl ------------------------------
1461 AC_MSG_CHECKING(directory to use for state file)
1462 if test "${prefix}" = "NONE"; then
1463 quagga_statedir_prefix="";
1465 quagga_statedir_prefix=${prefix}
1467 if test "${localstatedir}" = '${prefix}/var'; then
1468 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1469 ${quagga_statedir_prefix}/var/adm dnl
1470 ${quagga_statedir_prefix}/etc dnl
1476 test -d $QUAGGA_STATE_DIR && break
1478 quagga_statedir=$QUAGGA_STATE_DIR
1480 quagga_statedir=${localstatedir}
1482 if test $quagga_statedir = "/dev/null"; then
1483 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1485 AC_MSG_RESULT(${quagga_statedir})
1486 AC_SUBST(quagga_statedir)
1488 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1489 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1490 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1491 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1492 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1493 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1494 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1495 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1496 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1497 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1498 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1499 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1500 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1501 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1502 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1503 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1504 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1506 dnl -------------------------------
1507 dnl Quagga sources should always be
1508 dnl current wrt interfaces. Dont
1509 dnl allow deprecated interfaces to
1511 dnl -------------------------------
1512 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1514 dnl ---------------------------
1515 dnl Check htonl works correctly
1516 dnl ---------------------------
1517 AC_MSG_CHECKING(for working htonl)
1518 AC_CACHE_VAL(ac_cv_htonl_works,
1519 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1520 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1523 AC_MSG_RESULT($ac_cv_htonl_works)
1525 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1526 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1527 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1528 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
1533 isisd/topology/Makefile
1534 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1535 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1536 AC_CONFIG_FILES([solaris/Makefile])
1538 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1539 ## Hack, but working solution to avoid rebuilding of quagga.info.
1540 ## It's already in CVS until texinfo 4.7 is more common.
1544 Quagga configuration
1545 --------------------
1546 quagga version : ${PACKAGE_VERSION}
1547 host operationg system : ${host_os}
1548 source code location : ${srcdir}
1550 compiler flags : ${CFLAGS}
1552 includes : ${INCLUDES} ${SNMP_INCLUDES}
1553 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1554 state file directory : ${quagga_statedir}
1555 config file directory : `eval echo \`echo ${sysconfdir}\``
1556 example directory : `eval echo \`echo ${exampledir}\``
1557 user to run as : ${enable_user}
1558 group to run as : ${enable_group}
1559 group for vty sockets : ${enable_vty_group}
1560 config file mask : ${enable_configfile_mask}
1561 log file mask : ${enable_logfile_mask}
1563 The above user and group must have read/write access to the state file
1564 directory and to the config files in the config file directory."
1566 if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1567 Warning: The ${MAKE-make} programme detected, either in your path or
1568 via the MAKE variable, is not GNU Make. GNU make may be installed as
1569 gmake on some systems. and is required to complete a build of Quagga