[bgpd] Fix triggerable crash when compiled with --disable-bgp-announce
[jleu-quagga.git] / configure.ac
blob746b5cea5ac399b956c3d0471f83795ca971ec77
1 ##
2 ## Configure template file for Quagga.
3 ## autoconf will generate configure script.
4 ##
5 ##  Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
6 ##  Portions Copyright (c) 2003 Paul Jakma <paul@dishone.st>
7 ##
8 ## $Id$
9 AC_PREREQ(2.53)
11 AC_INIT(Quagga, 0.99.10, [http://bugzilla.quagga.net])
12 AC_CONFIG_SRCDIR(lib/zebra.h)
14 dnl -----------------------------------
15 dnl Get hostname and other information.
16 dnl -----------------------------------
17 AC_CANONICAL_BUILD()
18 AC_CANONICAL_HOST()
19 AC_CANONICAL_TARGET()
21 AM_INIT_AUTOMAKE(1.6)
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
36 AC_SUBST(exampledir)
38 dnl default is to match previous behavior
39 pkgsrcrcdir=""
40 pkgsrcdir=""
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
46 AC_SUBST(pkgsrcdir)
47 AC_SUBST(pkgsrcrcdir)
49 dnl ------------
50 dnl Check CFLAGS
51 dnl ------------
52 AC_ARG_WITH(cflags,
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 --------------------
63 AC_PROG_CC
64 AC_PROG_CPP
66 AC_PROG_EGREP
68 dnl autoconf 2.59 appears not to support AC_PROG_SED
69 dnl AC_PROG_SED
70 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
72 dnl ------------------------------------------------------------------
73 dnl Intel compiler check. Although Intel tries really hard to make icc
74 dnl look like gcc, there are some differences. It's very verbose with
75 dnl -Wall and it doesn't support the individual -W options.
76 dnl ------------------------------------------------------------------
77 if test "x${GCC}" = "xyes" ; then
78   COMPILER="GCC"
79   AC_MSG_CHECKING([whether we are using the Intel compiler])
80   AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
81       [AC_MSG_RESULT([no])],
82       [COMPILER="ICC"
83        AC_MSG_RESULT([yes])]
84   )
85 else
86   AC_MSG_CHECKING([whether we are using SunPro compiler])
87   AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
88       [AC_MSG_RESULT([no])],
89       [COMPILER="SUNPRO"
90        AC_MSG_RESULT([yes])]
91   )
94 dnl ---------------------------------------------
95 dnl If CLFAGS doesn\'t exist set default value
96 dnl AC_PROG_CC will have set minimal default
97 dnl already, eg "-O2 -g" for gcc, "-g" for others
98 dnl (Wall is gcc specific... have to make sure
99 dnl  gcc is being used before setting it)
101 dnl Intel icc 8.0 also sets __GNUC__, 
102 dnl but doesn't support all these fancy -W options.
103 dnl Intel compiler warnings we ignore:
104 dnl 279: controlling expression is constant.
105 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
106 dnl      about "self", "vty", "argc" and "argv" never referenced in DEFUN
107 dnl      macro.
108 dnl 981: operands are evaluated in unspecified order.
110 dnl Sun Studio 10 / SunPro 5.7 is also supported,
111 dnl so lets set some sane CFLAGS for it.
112 dnl ---------------------------------------------
114 AC_MSG_CHECKING([whether to set a default CFLAGS])
115 if test "x${cflags_specified}" = "x" ; then
116   case ${COMPILER} in
117     "ICC")
118         CFLAGS="-Os -g -Wall -wd 279,869,981"
119         AC_MSG_RESULT([Intel default])
120         ;;
121     "GCC")
122         CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
123         CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
124         CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
125         CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
126         CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
127         # TODO: conditionally addd -Wpacked if handled
128         AC_MSG_RESULT([gcc default])
129         ;;
130     "SUNPRO")
131         CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
132         AC_MSG_RESULT([SunPro default])
133         ;;
134     *)
135         AC_MSG_RESULT([unknown compiler])
136         ;;
137   esac
138 else
139   AC_MSG_RESULT([CFLAGS supplied by user])
142 dnl --------------
143 dnl Check programs
144 dnl --------------
145 AC_PROG_INSTALL
146 AC_PROG_LN_S
147 AC_PROG_MAKE_SET
148 AC_CHECK_TOOL(AR, ar)
150 dnl ---------------------------
151 dnl We, perhaps unfortunately,
152 dnl depend on GNU Make specific
153 dnl constructs.
154 dnl Give the user a warning if
155 dnl not GNU Make.
156 dnl ---------------------------
157 AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
158         [quagga_cv_gnu_make=no
159          if ${MAKE-make} --version 2>/dev/null | \
160                 grep '^GNU Make ' >/dev/null ; then
161                 quagga_cv_gnu_make=yes;
162          fi
163         ]
166 dnl -----------------
167 dnl System extensions
168 dnl -----------------
169 AC_AIX
170 AC_GNU_SOURCE
172 dnl -------
173 dnl libtool
174 dnl -------
175 AC_PROG_LIBTOOL
177 dnl ----------------------
178 dnl Packages configuration
179 dnl ----------------------
180 AC_ARG_ENABLE(vtysh,
181 [  --enable-vtysh          include integrated vty shell for Quagga])
182 AC_ARG_ENABLE(ipv6,
183 [  --disable-ipv6          turn off IPv6 related features and daemons])
184 AC_ARG_ENABLE(zebra,
185 [  --disable-zebra         do not build zebra daemon])
186 AC_ARG_ENABLE(bgpd,
187 [  --disable-bgpd          do not build bgpd])
188 AC_ARG_ENABLE(ripd,
189 [  --disable-ripd          do not build ripd])
190 AC_ARG_ENABLE(ripngd,
191 [  --disable-ripngd        do not build ripngd])
192 AC_ARG_ENABLE(ospfd,
193 [  --disable-ospfd         do not build ospfd])
194 AC_ARG_ENABLE(ospf6d,
195 [  --disable-ospf6d        do not build ospf6d])
196 AC_ARG_ENABLE(watchquagga,
197 [  --disable-watchquagga   do not build watchquagga])
198 AC_ARG_ENABLE(isisd,
199 [  --enable-isisd          build isisd])
200 AC_ARG_ENABLE(solaris,
201 [  --enable-solaris          build solaris])
202 AC_ARG_ENABLE(bgp-announce,
203 [  --disable-bgp-announce, turn off BGP route announcement])
204 AC_ARG_ENABLE(netlink,
205 [  --enable-netlink        force to use Linux netlink interface])
206 AC_ARG_ENABLE(broken-aliases,
207 [  --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
208 AC_ARG_ENABLE(snmp,
209 [  --enable-snmp           enable SNMP support])
210 AC_ARG_WITH(libpam,
211 [  --with-libpam           use libpam for PAM support in vtysh])
212 AC_ARG_ENABLE(tcp-zebra,
213 [  --enable-tcp-zebra      enable TCP/IP socket connection between zebra and protocol daemon])
214 AC_ARG_ENABLE(opaque-lsa,
215 [  --enable-opaque-lsa     enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
216 AC_ARG_ENABLE(ospfapi,
217 [  --disable-ospfapi       do not build OSPFAPI to access the OSPF LSA Database, 
218                           (this is the default if --enable-opaque-lsa is not set)])
219 AC_ARG_ENABLE(ospfclient,
220 [  --disable-ospfclient    do not build OSPFAPI client for OSPFAPI, 
221                           (this is the default if --disable-ospfapi is set)])
222 AC_ARG_ENABLE(ospf-te,
223 [  --enable-ospf-te        enable Traffic Engineering Extension to OSPF])
224 AC_ARG_ENABLE(multipath,
225 [  --enable-multipath=ARG  enable multipath function, ARG must be digit])
226 AC_ARG_ENABLE(quagga_user,
227 [  --enable-user=ARG       user to run Quagga suite as (default quagga)])
228 AC_ARG_ENABLE(quagga_group,
229 [  --enable-group=ARG      group to run Quagga suite as (default quagga)])
230 AC_ARG_ENABLE(vty_group,
231 [  --enable-vty-group=ARG  set vty sockets to have specified group as owner])
232 AC_ARG_ENABLE(configfile_mask,
233 [  --enable-configfile-mask=ARG  set mask for config files])
234 AC_ARG_ENABLE(logfile_mask,
235 [  --enable-logfile-mask=ARG     set mask for log files])
237 AC_ARG_ENABLE(rtadv,
238 [  --disable-rtadv               disable IPV6 router advertisement feature])
239 AC_ARG_ENABLE(irdp,
240 [  --enable-irdp                 enable IRDP server support in zebra])
241 AC_ARG_ENABLE(isis_topology,
242 [  --enable-isis-topology        enable IS-IS topology generator])
243 AC_ARG_ENABLE(capabilities,
244 [  --disable-capabilities        disable using POSIX capabilities])
245 AC_ARG_ENABLE(gcc_ultra_verbose,
246 [  --enable-gcc-ultra-verbose    enable ultra verbose GCC warnings])
247 AC_ARG_ENABLE(gcc-rdynamic,
248 [  --enable-gcc-rdynamic   enable gcc linking with -rdynamic for better backtraces])
249 AC_ARG_ENABLE(time-check,
250 [  --disable-time-check          disable slow thread warning messages])
252 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
253   CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
254   CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
255   CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
256   CFLAGS="${CFLAGS} -Wpacked -Wpadded"
259 if test x"${enable_gcc_rdynamic}" = x"yes" ; then
260   LDFLAGS="${LDFLAGS} -rdynamic"
263 if test x"${enable_time_check}" != x"no" ; then
264   if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
265     AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
266   else
267     AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
268   fi
271 if test "${enable_broken_aliases}" = "yes"; then
272   if test "${enable_netlink}" = "yes"
273   then
274     AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
275   fi
276   AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
277   enable_netlink=no
280 if test "${enable_tcp_zebra}" = "yes"; then
281   AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
284 if test "${enable_opaque_lsa}" = "yes"; then
285   AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
288 if test "${enable_ospf_te}" = "yes"; then
289   AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
290   AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
293 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
294 if test "${enable_rtadv}" != "no"; then
295   AC_MSG_RESULT(yes)
296   AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
297 else
298   AC_MSG_RESULT(no)
301 if test "${enable_irdp}" = "yes"; then
302   AC_DEFINE(HAVE_IRDP,, IRDP )
305 if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
306   AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
307   ISIS_TOPOLOGY_INCLUDES="-I./topology"
308   ISIS_TOPOLOGY_DIR="topology"
309   ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
312 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
313 AC_SUBST(ISIS_TOPOLOGY_DIR)
314 AC_SUBST(ISIS_TOPOLOGY_LIB)
316 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
317   enable_user="quagga"
318 elif test "${enable_user}" = "no"; then
319   enable_user="root"
322 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
323   enable_group="quagga"
324 elif test "${enable_group}" = "no"; then
325   enable_group="root"
328 if test x"${enable_vty_group}" = x"yes" ; then
329   AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
330 elif test x"${enable_vty_group}" != x""; then
331   if test x"${enable_vty_group}" != x"no"; then
332     AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
333   fi
335 AC_SUBST([enable_user])
336 AC_SUBST([enable_group])
337 AC_SUBST([enable_vty_group])
338 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
339 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
341 enable_configfile_mask=${enable_configfile_mask:-0600}
342 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
344 enable_logfile_mask=${enable_logfile_mask:-0600}
345 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
347 MULTIPATH_NUM=1
349 case "${enable_multipath}" in
350   [[0-9]|[1-9][0-9]])
351     MULTIPATH_NUM="${enable_multipath}"
352     ;;
353   "")
354     ;;
355   *)           
356     AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
357     ;;
358 esac
360 AC_SUBST(MULTIPATH_NUM)
362 dnl ------------------------------------
363 dnl Check C keywords and standard  types
364 dnl ------------------------------------
365 AC_C_CONST
366 AC_C_INLINE
367 AC_C_RESTRICT
368 AC_C_VOLATILE
369 AC_HEADER_STDC
370 AC_HEADER_TIME
371 AC_HEADER_SYS_WAIT
372 dnl AC_TYPE_PID_T
373 AC_TYPE_UID_T
374 AC_TYPE_MODE_T
375 AC_TYPE_SIZE_T
376 AC_TYPE_SIGNAL
377 AC_STRUCT_TM
379 dnl -------------------------
380 dnl Check other header files.
381 dnl -------------------------
382 AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
383         sys/types.h linux/version.h netdb.h asm/types.h \
384         sys/param.h limits.h signal.h libutil.h \
385         sys/socket.h netinet/in.h])
387 dnl Utility macro to avoid retyping includes all the time
388 m4_define([QUAGGA_INCLUDES],
389 [#ifdef SUNOS_5
390 #define _XPG4_2
391 #define __EXTENSIONS__
392 #endif
393 #include <stdio.h>
394 #if STDC_HEADERS
395 # include <stdlib.h>
396 # include <stddef.h>
397 #else
398 # if HAVE_STDLIB_H
399 #  include <stdlib.h>
400 # endif
401 #endif
402 #if HAVE_SYS_TYPES_H
403 # include <sys/types.h>
404 #endif
405 /* sys/conf.h depends on param.h on FBSD at least */
406 #if HAVE_SYS_PARAM_H
407 # include <sys/param.h>
408 #endif
409 /* Required for MAXSIG */
410 #if HAVE_SIGNAL_H
411 # include <signal.h>
412 #endif
413 #if HAVE_SYS_SOCKET_H
414 # include <sys/socket.h>
415 #endif
416 #if HAVE_NETINET_IN_H
417 # include <netinet/in.h>
418 #endif
419 ])dnl
421 AC_CHECK_HEADERS([sys/un.h net/if.h netinet/in_systm.h netinet/in_var.h \
422         net/if_dl.h net/if_var.h net/netopt.h net/route.h \
423         inet/nd.h arpa/inet.h netinet/ip_icmp.h \
424         fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
425         sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
426         [], [], QUAGGA_INCLUDES)
428 AC_CHECK_HEADERS([ucontext.h], [], [],
429 [#ifndef __USE_GNU
430 #define __USE_GNU
431 #endif /* __USE_GNU */
432 QUAGGA_INCLUDES
435 m4_define([QUAGGA_INCLUDES],
436 QUAGGA_INCLUDES
437 [#if HAVE_NET_IF_H
438 # include <net/if.h>
439 #endif
440 #if HAVE_SYS_UN_H
441 # include <sys/un.h>
442 #endif
443 #if HAVE_NETINET_IN_SYSTM_H
444 # include <netinet/in_systm.h>
445 #endif
446 #if HAVE_NETINET_IN_VAR_H
447 # include <netinet/in_var.h>
448 #endif
449 #if HAVE_NET_IF_DL_H
450 # include <net/if_dl.h>
451 #endif
452 #if HAVE_NET_IF_VAR_H
453 # include <net/if_var.h>
454 #endif
455 #if HAVE_NET_NETOPT_H
456 # include <net/netopt.h>
457 #endif
458 #if HAVE_NET_ROUTE_H
459 # include <net/route.h>
460 #endif
461 #if HAVE_INET_ND_H
462 # include <inet/nd.h>
463 #endif
464 #if HAVE_ARPA_INET_H
465 # include <arpa/inet.h>
466 #endif
467 /* Required for IDRP */
468 #if HAVE_NETINET_IP_ICMP_H
469 # include <netinet/ip_icmp.h>
470 #endif
471 ])dnl
473 dnl V6 headers are checked below, after we check for v6
475 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
476 case "$host" in
477   [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
478       opsys=sol2-6
479       AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
480       AC_DEFINE(SUNOS_5, 1, SunOS 5)
481       AC_CHECK_LIB(xnet, main)
482       CURSES=-lcurses
483   ;;
484   [*-sunos5.[8-9]] \
485   | [*-sunos5.1[0-9]] \
486   | [*-sunos5.1[0-9].[0-9]] \
487   | [*-solaris2.[8-9]] \
488   | [*-solaris2.1[0-9]] \
489   | [*-solaris2.1[0-9].[0-9]])
490       opsys=sol8
491       AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
492       AC_DEFINE(SUNOS_5, 1, [SunOS 5])
493       AC_CHECK_LIB(socket, main)
494       AC_CHECK_LIB(nsl, main)
495       AC_CHECK_LIB(umem, main)
496       AC_CHECK_FUNCS([printstack],
497         [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
498          AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
499         ])
500       CURSES=-lcurses
501   ;;
502   *-sunos5* | *-solaris2*)
503       AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
504       AC_CHECK_LIB(socket, main)
505       AC_CHECK_LIB(nsl, main)
506       CURSES=-lcurses
507   ;;
508   *-linux*)
509       opsys=gnu-linux
510       AC_DEFINE(GNU_LINUX,,GNU Linux)
511   ;;
512   *-nec-sysv4*)
513       AC_CHECK_LIB(nsl, gethostbyname)
514       AC_CHECK_LIB(socket, socket)
515   ;;
516   *-openbsd*)
517       opsys=openbsd
518       AC_DEFINE(OPEN_BSD,,OpenBSD)
519   ;;
520   *-bsdi*)
521       opsys=bsdi
522       OTHER_METHOD="mtu_kvm.o"
523       AC_CHECK_LIB(kvm, main)
524   ;;
525   *-irix6.5)
526       opsys=irix
527       AC_DEFINE(IRIX_65,,IRIX 6.5)
528   ;;
529 esac
531 dnl ---------------------
532 dnl Integrated VTY option
533 dnl ---------------------
534 case "${enable_vtysh}" in
535   "yes") VTYSH="vtysh";
536          AC_DEFINE(VTYSH,,VTY shell)
537          AC_PATH_PROG(PERL, perl)
538 dnl      Vtysh uses libreadline, which looks for termcap functions at
539 dnl      configure time.  We follow readlines search order.
540 dnl      The required procedures are in libtermcap on NetBSD, in
541 dnl      [TODO] on Linux, and in [TODO] on Solaris.
542          AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
543            [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
544              [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
545                [AC_CHECK_LIB(ncurses, tputs, 
546                              LIBREADLINE="$LIBREADLINE -lncurses")]
547               )]
548             )]
549           )
550          AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
551                       "$LIBREADLINE")
552          if test $ac_cv_lib_readline_main = no; then
553            AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
554          fi
555          AC_CHECK_HEADER(readline/history.h)
556          if test $ac_cv_header_readline_history_h = no;then
557            AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
558          fi
559          AC_CHECK_LIB(readline, rl_completion_matches, 
560                       LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
561          if test $ac_cv_lib_readline_rl_completion_matches = no; then
562            AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
563          fi
564          ;;
565   "no" ) VTYSH="";;
566   *    ) ;;
567 esac
568 AC_SUBST(LIBREADLINE)
570 dnl ----------
571 dnl PAM module
572 dnl ----------
573 if test "$with_libpam" = "yes"; then
574   AC_CHECK_HEADER([security/pam_misc.h],
575     [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
576      AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
577      pam_conv_func="misc_conv"
578     ],
579     [], QUAGGA_INCLUDES)
580   AC_CHECK_HEADER([security/openpam.h],
581     [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
582      AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
583      pam_conv_func="openpam_ttyconv"
584     ],
585     [], QUAGGA_INCLUDES)
586   if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
587     AC_MSG_WARN([*** pam support will not be built ***])
588     with_libpam="no"
589   fi
592 if test "$with_libpam" = "yes"; then
593 dnl took this test from proftpds configure.in and suited to our needs
594 dnl -------------------------------------------------------------------------
596 dnl This next check looks funky due to a linker problem with some versions
597 dnl of the PAM library.  Prior to 0.72 release, the Linux PAM shared library
598 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
599 dnl with RedHat 6.2 and Debian 2.2 or better.
600 AC_CHECK_LIB(pam, pam_start,
601   [AC_CHECK_LIB(pam, $pam_conv_func,
602     [AC_DEFINE(USE_PAM,,Use PAM for authentication)
603      LIBPAM="-lpam"],
604     [AC_DEFINE(USE_PAM,,Use PAM for authentication)
605      LIBPAM="-lpam -lpam_misc"]
606     )
607   ],
609   [AC_CHECK_LIB(pam, pam_end,
610     [AC_CHECK_LIB(pam, $pam_conv_func,
611       [AC_DEFINE(USE_PAM,,Use PAM for authentication)
612        LIBPAM="-lpam -ldl"],
613       [AC_DEFINE(USE_PAM,,Use PAM for authentication)
614        LIBPAM="-lpam -ldl -lpam_misc"]
615      )
616   ],AC_MSG_WARN([*** pam support will not be built ***]),
617   [-ldl])
618   ]
621 AC_SUBST(LIBPAM)
623 dnl -------------------------------
624 dnl Endian-ness check
625 dnl -------------------------------
626 AC_WORDS_BIGENDIAN
628 dnl -------------------------------
629 dnl check the size in byte of the C
630 dnl -------------------------------
631 dnl AC_CHECK_SIZEOF(char)
632 dnl AC_CHECK_SIZEOF(int)
633 dnl AC_CHECK_SIZEOF(short)
634 dnl AC_CHECK_SIZEOF(long)
636 dnl ----------------------------
637 dnl check existance of functions
638 dnl ----------------------------
639 AC_FUNC_CHOWN
640 AC_FUNC_FNMATCH
641 AC_FUNC_FORK
642 AC_FUNC_MALLOC
643 AC_FUNC_MEMCMP
644 AC_FUNC_MKTIME
645 AC_FUNC_STRFTIME
646 AC_FUNC_REALLOC
647 AC_FUNC_STAT
648 AC_FUNC_SELECT_ARGTYPES
649 AC_FUNC_STRFTIME
650 dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
651 dnl can lead to strange side effects.  So we just check for strnlen
652 dnl directly, see below.
653 dnl AC_FUNC_STRNLENdnl
654 AC_FUNC_VPRINTF
656 dnl -------------------------------
657 dnl bgpd needs pow() and hence libm
658 dnl -------------------------------
659 TMPLIBS="$LIBS"
660 AC_CHECK_HEADER([math.h],
661   [AC_CHECK_LIB([m], [pow],
662     [LIBM="-lm"
663      LIBS="$LIBS $LIBM"
664      AC_DEFINE(HAVE_LIBM,, Have libm)
665      AC_CHECK_FUNCS(pow,[],[LIBM=""])
666     ])
668 if test x"$LIBM" = x ; then
669   AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
671 LIBS="$TMPLIBS"
672 AC_SUBST(LIBM)
674 dnl ---------------
675 dnl other functions
676 dnl ---------------
677 AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
678         inet_ntoa inet_aton strnlen \
679         memchr memmove memset select socket \
680         strcasecmp strchr strcspn strdup strerror \
681         strncasecmp strndup strrchr strspn strstr \
682         strtol strtoul strlcat strlcpy \
683         daemon snprintf vsnprintf \
684         if_nametoindex if_indextoname getifaddrs \
685         uname fcntl])
687 AC_CHECK_FUNCS(setproctitle, ,
688   [AC_CHECK_LIB(util, setproctitle, 
689      [LIBS="$LIBS -lutil"
690       AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
691      ]
692    )
693   ]
696 dnl ------------------------------------
697 dnl Determine routing get and set method
698 dnl ------------------------------------
699 AC_MSG_CHECKING(zebra between kernel interface method)
700 if test x"$opsys" = x"gnu-linux"; then
701   if test "${enable_netlink}" = "yes";then
702     AC_MSG_RESULT(netlink)
703     RT_METHOD=rt_netlink.o
704     AC_DEFINE(HAVE_NETLINK,,netlink)
705     netlink=yes
706   elif test "${enable_netlink}" = "no"; then
707     AC_MSG_RESULT(ioctl)
708     RT_METHOD=rt_ioctl.o
709     netlink=no
710   else
711     AC_MSG_RESULT(netlink)
712     RT_METHOD=rt_netlink.o
713     AC_DEFINE(HAVE_NETLINK,,netlink)
714     netlink=yes
715   fi
716 elif test x"$opsys" = x"sol2-6";then
717   AC_MSG_RESULT(Route socket)
718   KERNEL_METHOD="kernel_socket.o"
719   RT_METHOD="rt_socket.o"
720 elif test x"$opsys" = x"sol8";then
721   AC_MSG_RESULT(Route socket)
722   KERNEL_METHOD="kernel_socket.o"
723   RT_METHOD="rt_socket.o"
724 elif test "$opsys" = "irix" ; then
725   AC_MSG_RESULT(Route socket)
726   KERNEL_METHOD="kernel_socket.o"
727   RT_METHOD="rt_socket.o"
728 else
729   AC_TRY_RUN([#include <errno.h>
730 #include <sys/types.h>
731 #include <sys/socket.h>
733 main ()
735   int ac_sock;
737   ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
738   if (ac_sock < 0 && errno == EINVAL)
739     exit (1);
740   exit (0);
742   [KERNEL_METHOD=kernel_socket.o
743    RT_METHOD=rt_socket.o
744    AC_MSG_RESULT(socket)],
745   [RT_METHOD=rt_ioctl.o
746    AC_MSG_RESULT(ioctl)],
747   [KERNEL_METHOD=kernel_socket.o
748    RT_METHOD=rt_socket.o
749    AC_MSG_RESULT(socket)])
751 AC_SUBST(RT_METHOD)
752 AC_SUBST(KERNEL_METHOD)
753 AC_SUBST(OTHER_METHOD)
755 dnl --------------------------
756 dnl Determine IS-IS I/O method
757 dnl --------------------------
758 AC_CHECK_HEADER(net/bpf.h)
759 AC_CHECK_HEADER(sys/dlpi.h)
760 AC_MSG_CHECKING(zebra IS-IS I/O method)
761 if test x"$opsys" = x"gnu-linux"; then
762   AC_MSG_RESULT(pfpacket)
763   ISIS_METHOD=isis_pfpacket.o
764 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
765   AC_MSG_RESULT(DLPI)
766   ISIS_METHOD="isis_dlpi.o"
767 else
768   if test $ac_cv_header_net_bpf_h = no; then
769     if test $ac_cv_header_sys_dlpi_h = no; then
770       AC_MSG_RESULT(none)
771       AC_MSG_WARN([*** IS-IS support will not be built ***])
772       ISISD=""
773     else
774       AC_MSG_RESULT(DLPI)
775     fi
776     ISIS_METHOD="isis_dlpi.o"
777   else
778     AC_MSG_RESULT(BPF)
779     ISIS_METHOD="isis_bpf.o"
780   fi
782 AC_SUBST(ISIS_METHOD)
784 dnl ------------------------------------
785 dnl check for broken CMSG_FIRSTHDR macro
786 dnl ------------------------------------
787 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
788 AC_RUN_IFELSE([AC_LANG_SOURCE([[
789 #ifdef SUNOS_5
790 #define _XPG4_2
791 #define __EXTENSIONS__
792 #endif
793 #ifdef HAVE_STDLIB_H
794 # include <stdlib.h>
795 #endif
796 #ifdef HAVE_SYS_TYPES_H
797 #include <sys/types.h>
798 #endif
799 #ifdef HAVE_SYS_SOCKET_H
800 #include <sys/socket.h>
801 #endif
803 main()
805   struct msghdr msg;
806   char buf[4];
808   msg.msg_control = buf;
809   msg.msg_controllen = 0;
811   if (CMSG_FIRSTHDR(&msg) != NULL)
812     exit(0);
813   exit (1);
814 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
815 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
817 dnl ------------------------------
818 dnl check kernel route read method
819 dnl ------------------------------
820 AC_CACHE_CHECK(route read method check, zebra_rtread,
821 [if test "$netlink" = yes; then
822   RTREAD_METHOD="rtread_netlink.o"
823   zebra_rtread="netlink"
824 else
825 for zebra_rtread in /proc/net/route /dev/ip /dev/null;
827   test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
828 done
829 case $zebra_rtread in
830   "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
831                      zebra_rtread="proc";;
832   "/dev/ip")
833                      case "$host" in
834                        *-freebsd*)    RTREAD_METHOD=rtread_sysctl.o
835                                       zebra_rtread="sysctl";;
836                        *)             RTREAD_METHOD="rtread_getmsg.o"
837                                       zebra_rtread="getmsg";;
838                      esac;;
839   *)                 RTREAD_METHOD="rtread_sysctl.o"
840                      zebra_rtread="sysctl";;
841 esac
842 fi])
843 AC_SUBST(RTREAD_METHOD)
845 dnl -----------------------------
846 dnl check interface lookup method
847 dnl -----------------------------
848 IOCTL_METHOD=ioctl.o
849 AC_MSG_CHECKING(interface looking up method)
850 if test "$netlink" = yes; then
851   AC_MSG_RESULT(netlink)
852   IF_METHOD=if_netlink.o
853 elif test "$opsys" = "sol2-6";then
854   AC_MSG_RESULT(Solaris GIF)
855   IF_METHOD=if_ioctl.o
856 elif test "$opsys" = "sol8";then
857   AC_MSG_RESULT(Solaris GLIF)
858   IF_METHOD=if_ioctl_solaris.o
859   IOCTL_METHOD=ioctl_solaris.o
860 elif test "$opsys" = "irix" ; then
861   AC_MSG_RESULT(IRIX)
862   IF_METHOD=if_ioctl.o
863 elif test "$opsys" = "openbsd";then
864   AC_MSG_RESULT(openbsd)
865   IF_METHOD=if_ioctl.o
866 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
867   AC_MSG_RESULT(sysctl)
868     IF_METHOD=if_sysctl.o
869     AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
870 else
871     AC_MSG_RESULT(ioctl)
872     IF_METHOD=if_ioctl.o
874 AC_SUBST(IF_METHOD)
875 AC_SUBST(IOCTL_METHOD)
877 dnl ---------------------------------------------------------------
878 dnl figure out how to specify an interface in multicast sockets API
879 dnl ---------------------------------------------------------------
880 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
882 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
883 AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
884 #include <sys/param.h>
885 #endif],[#if (defined(__FreeBSD__) && (__FreeBSD_version >= 500022 || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000)
886   return (0);
887 #else
888   #error No support for BSD struct ip_mreq hack detected
889 #endif],[AC_MSG_RESULT(yes)
890 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
891 AC_MSG_RESULT(no))
893 dnl ---------------------------------------------------------------
894 dnl figure out how to check link-state
895 dnl ---------------------------------------------------------------
896 AC_CHECK_HEADER([net/if.h],
897   [AC_CHECK_HEADER( [net/if_media.h],
898     [m4_define([LINK_DETECT_INCLUDES],
899       QUAGGA_INCLUDES
900       [#include <net/if_media.h>
901     ])
902     AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
903       AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
904       [], LINK_DETECT_INCLUDES)], 
905     [],
906     QUAGGA_INCLUDES)], 
907   [], QUAGGA_INCLUDES )
909 dnl ------------------------
910 dnl TCP_MD5SIG socket option
911 dnl ------------------------
913 AC_CHECK_HEADER([netinet/tcp.h], 
914    [m4_define([MD5_INCLUDES],
915       QUAGGA_INCLUDES
916       [#include <netinet/tcp.h>
917     ])
918     AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
919    [],
920    QUAGGA_INCLUDES)
921 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
922   AC_CHECK_HEADER([linux/tcp.h],
923        [m4_define([MD5_INCLUDES],
924           QUAGGA_INCLUDES
925           [#include <linux/tcp.h>
926         ])
927        AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
930 dnl -----------------------
931 dnl check proc file system.
932 dnl -----------------------
933 if test -r /proc/net/dev; then
934   AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
935   IF_PROC=if_proc.o
938 if test -r /proc/net/if_inet6; then
939   AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
940   IF_PROC=if_proc.o
942 AC_SUBST(IF_PROC)
944 dnl -----------------------------
945 dnl check ipforward detect method
946 dnl -----------------------------
947 AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
948 [for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
950   test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
951 done
952 case $zebra_ipforward_path in
953   "/proc/net/snmp")  IPFORWARD=ipforward_proc.o
954                      zebra_ipforward_path="proc";;
955   "/dev/ip")         
956                      case "$host" in
957                        *-nec-sysv4*)  IPFORWARD=ipforward_ews.o
958                                       zebra_ipforward_path="ews";;
959                        *-freebsd*)    IPFORWARD=ipforward_sysctl.o
960                                       zebra_ipforward_path="sysctl";;
961                        *)             IPFORWARD=ipforward_solaris.o
962                                       zebra_ipforward_path="solaris";;
963                      esac;;
964   *)                 IPFORWARD=ipforward_sysctl.o
965                      zebra_ipforward_path="sysctl";;
966 esac])
967 AC_SUBST(IPFORWARD)
969 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
971 dnl ----------
972 dnl IPv6 check
973 dnl ----------
974 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
975 if test "${enable_ipv6}" = "no"; then
976   AC_MSG_RESULT(disabled)
977 else
978 dnl ----------
979 dnl INRIA IPv6
980 dnl ----------
981   if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
982     zebra_cv_ipv6=yes
983     AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
984     AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
985     RIPNGD="ripngd"
986     OSPF6D="ospf6d"
987     LIB_IPV6=""
988     AC_MSG_RESULT(INRIA IPv6)
989 dnl ---------
990 dnl KAME IPv6
991 dnl ---------
992   elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
993     zebra_cv_ipv6=yes
994     AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
995     AC_DEFINE(KAME,1,KAME IPv6)
996     RIPNGD="ripngd"
997     OSPF6D="ospf6d"
998     if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
999       LIB_IPV6="-L/usr/local/v6/lib -linet6"
1000     fi
1001     AC_MSG_RESULT(KAME)
1002 dnl -------------------------
1003 dnl MUSICA IPv6
1004 dnl  default host check
1005 dnl  It is not used by Kheops
1006 dnl -------------------------
1007   elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1008     zebra_cv_ipv6=yes
1009     AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1010     AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1011     AC_DEFINE(KAME,1,KAME IPv6 stack)
1012     RIPNGD="ripngd"
1013     OSPF6D="ospf6d"
1014     if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
1015       LIB_IPV6="-L/usr/local/v6/lib -linet6"
1016     fi
1017     AC_MSG_RESULT(MUSICA)
1018 dnl ---------
1019 dnl NRL check
1020 dnl ---------
1021   elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1022     zebra_cv_ipv6=yes
1023     AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1024     AC_DEFINE(NRL,1,NRL)
1025     RIPNGD="ripngd"
1026     OSPF6D="ospf6d"
1027     if test x"$opsys" = x"bsdi";then
1028       AC_DEFINE(BSDI_NRL,,BSDI)
1029       AC_MSG_RESULT(BSDI_NRL)
1030     else
1031       AC_MSG_RESULT(NRL)
1032     fi
1033 dnl ------------------------------------
1034 dnl Solaris 9, 10 and potentially higher
1035 dnl ------------------------------------
1036   elif test x"$opsys" = x"sol8"; then
1037     zebra_cv_ipv6=yes;
1038     AC_DEFINE(HAVE_IPV6, 1, IPv6)
1039     AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1040     RIPNGD="ripngd"
1041     OSPF6D="ospf6d"
1042     AC_MSG_RESULT(Solaris IPv6)
1043 dnl ----------
1044 dnl Linux IPv6
1045 dnl ----------
1046   elif test "${enable_ipv6}" = "yes"; then
1047     AC_EGREP_CPP(yes, [
1048       #include <linux/version.h>
1049       /* 2.1.128 or later */
1050       #if LINUX_VERSION_CODE >= 0x020180
1051       yes
1052       #endif],
1053       [zebra_cv_ipv6=yes
1054        zebra_cv_linux_ipv6=yes
1055        AC_MSG_RESULT(Linux IPv6)])
1056   else
1057     if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1058      then
1059       zebra_cv_ipv6=yes
1060       zebra_cv_linux_ipv6=yes
1061       AC_MSG_RESULT(Linux IPv6)
1062     fi
1063   fi
1065   if test "$zebra_cv_linux_ipv6" = "yes";then
1066     AC_MSG_CHECKING(whether libc has IPv6 support)
1067     AC_TRY_LINK([#include <netinet/in.h>
1068     ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1069     [AC_MSG_RESULT(yes)
1070       zebra_cv_ipv6=yes
1071       zebra_cv_linux_ipv6=yes],
1072     [AC_MSG_RESULT(no)
1073       zebra_cv_ipv6=no
1074       zebra_cv_linux_ipv6=no])
1075   fi
1077   if test "$zebra_cv_linux_ipv6" = "yes";then
1078     AC_MSG_CHECKING(for GNU libc >= 2.1)
1079     AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1080     AC_EGREP_CPP(yes, [
1081 #include <features.h>
1082 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1083   yes
1084 #endif], 
1085       [glibc=yes
1086        AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1087        AC_MSG_RESULT(yes)], 
1088       AC_MSG_RESULT(no)
1089     )
1090     RIPNGD="ripngd"
1091     OSPF6D="ospf6d"
1092     if test "$glibc" != "yes"; then
1093       INCLUDES="-I/usr/inet6/include"
1094       if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1095          LIB_IPV6="-L/usr/inet6/lib -linet6"
1096       fi
1097     fi
1098   fi
1100 dnl -----------------------
1101 dnl Set IPv6 related values
1102 dnl -----------------------
1103   LIBS="$LIB_IPV6 $LIBS"
1104   AC_SUBST(LIB_IPV6)
1106   if test x"$RIPNGD" = x""; then
1107     AC_MSG_RESULT(IPv4 only)
1108   fi
1111 dnl ------------------
1112 dnl IPv6 header checks
1113 dnl ------------------
1114 if test "x${zebra_cv_ipv6}" = "xyes"; then
1115 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
1116         netinet6/in6_var.h netinet6/nd6.h], [], [],
1117         QUAGGA_INCLUDES)
1120 m4_define([QUAGGA_INCLUDES],dnl
1121 QUAGGA_INCLUDES
1122 [#if HAVE_NETINET6_IN6_H
1123 #include <netinet6/in6.h>
1124 #endif
1125 #if HAVE_NETINET_IN6_VAR_H
1126 #include <netinet/in6_var.h>
1127 #endif
1128 #if HAVE_NETINET_ICMP6_H
1129 # include <netinet/icmp6.h>
1130 #endif
1131 #if HAVE_NETINET6_IN6_VAR_H
1132 # include <netinet6/in6_var.h>
1133 #endif
1134 #if HAVE_NETINET6_ND6_H
1135 # include <netinet6/nd6.h>
1136 #endif
1137 ])dnl
1139 dnl --------------------
1140 dnl Daemon disable check
1141 dnl --------------------
1142 if test "${enable_zebra}" = "no";then
1143   ZEBRA=""
1144 else
1145   ZEBRA="zebra"
1148 if test "${enable_bgpd}" = "no";then
1149   BGPD=""
1150 else
1151   BGPD="bgpd"
1154 if test "${enable_ripd}" = "no";then
1155   RIPD=""
1156 else
1157   RIPD="ripd"
1160 if test "${enable_ospfd}" = "no";then
1161   OSPFD=""
1162 else
1163   OSPFD="ospfd"
1166 if test "${enable_watchquagga}" = "no";then
1167   WATCHQUAGGA=""
1168 else
1169   WATCHQUAGGA="watchquagga"
1172 OSPFCLIENT=""
1173 if test "${enable_opaque_lsa}" = "yes"; then
1174   if test "${enable_ospfapi}" != "no";then
1175     AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1177     if test "${enable_ospfclient}" != "no";then
1178       OSPFCLIENT="ospfclient"
1179     fi
1180   fi
1184 case "${enable_ripngd}" in
1185   "yes") RIPNGD="ripngd";;
1186   "no" ) RIPNGD="";;
1187   *    ) ;;
1188 esac
1190 case "${enable_ospf6d}" in
1191   "yes") OSPF6D="ospf6d";;
1192   "no" ) OSPF6D="";;
1193   *    ) ;;
1194 esac
1196 case "${enable_isisd}" in
1197   "yes") ISISD="isisd";;
1198   "no" ) ISISD="";;
1199   *    ) ;;
1200 esac
1202 # XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1203 case "${enable_solaris}" in
1204   "yes") SOLARIS="solaris";;
1205   "no" ) SOLARIS="";;
1206   *    ) ;;
1207 esac
1209 if test "${enable_bgp_announce}" = "no";then
1210   AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1211 else
1212   AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1215 AC_SUBST(ZEBRA)
1216 AC_SUBST(BGPD)
1217 AC_SUBST(RIPD)
1218 AC_SUBST(RIPNGD)
1219 AC_SUBST(OSPFD)
1220 AC_SUBST(OSPF6D)
1221 AC_SUBST(WATCHQUAGGA)
1222 AC_SUBST(ISISD)
1223 AC_SUBST(SOLARIS)
1224 AC_SUBST(VTYSH)
1225 AC_SUBST(INCLUDES)
1226 AC_SUBST(CURSES)
1227 AC_SUBST(OSPFCLIENT)
1228 AC_SUBST(OSPFAPI)
1229 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1230 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1231 AC_CHECK_LIB(crypt, crypt)
1232 AC_CHECK_LIB(resolv, res_init)
1234 dnl ---------------------------------------------------
1235 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1236 dnl ---------------------------------------------------
1237 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1238 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1239 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
1241 dnl ---------------------------
1242 dnl check system has GNU regexp
1243 dnl ---------------------------
1244 dnl AC_MSG_CHECKING(whether system has GNU regex)
1245 AC_CHECK_LIB(c, regexec,
1246 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1247  LIB_REGEX=""],
1248 [LIB_REGEX="regex.o"])
1249 AC_SUBST(LIB_REGEX)
1251 dnl ------------------
1252 dnl check Net-SNMP library
1253 dnl ------------------
1254 if test "${enable_snmp}" = "yes"; then
1255     LIBS="${LIBS} -lcrypto"
1256     AC_CHECK_LIB(netsnmp, asn_parse_int,
1257         [AC_DEFINE(HAVE_NETSNMP,,Net SNMP) 
1258          AC_DEFINE(HAVE_SNMP,,SNMP)
1259          LIBS="${LIBS} -lnetsnmp"],
1260         [AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])])
1261     
1262     for ac_snmp in /usr/include \
1263                 /usr/local/include \
1264                 /dev/null; do
1265         test -f "${ac_snmp}/net-snmp/library/asn1.h" && break
1266     done
1267     
1268     case ${ac_snmp} in
1269         /dev/null)
1270                 AC_MSG_ERROR([--enable-snmp given, but can not find header])
1271                 ;;
1272         *)
1273                 SNMP_INCLUDES="-I${ac_snmp}/net-snmp"
1274                 SNMP_INCLUDES="${SNMP_INCLUDES} -I${ac_snmp}/net-snmp/library"
1275                 ;;
1276     esac
1277     
1278     AC_SUBST(SNMP_INCLUDES)
1281 dnl ---------------------------
1282 dnl sockaddr and netinet checks
1283 dnl ---------------------------
1284 AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1285         struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1286         socklen_t,
1287         struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1288         struct nd_opt_adv_interval, struct rt_addrinfo,
1289         struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1290         [], [], QUAGGA_INCLUDES)
1292 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1293         struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1294         struct sockaddr_in6.sin6_scope_id,
1295         struct if6_aliasreq.ifra_lifetime,
1296         struct nd_opt_adv_interval.nd_opt_ai_type],
1297         [], [], QUAGGA_INCLUDES)
1299 dnl ---------------------------
1300 dnl IRDP/pktinfo/icmphdr checks
1301 dnl ---------------------------
1302 AC_CHECK_TYPES([struct in_pktinfo], 
1303  [AC_CHECK_TYPES([struct icmphdr],
1304    [if test "${enable_irdp}" != "no"; then
1305       AC_DEFINE(HAVE_IRDP,, IRDP)
1306     fi],
1307    [if test "${enable_irdp}" = "yes"; then
1308       AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1309     fi], [QUAGGA_INCLUDES])],
1310  [if test "${enable_irdp}" = "yes"; then
1311     AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1312   fi], [QUAGGA_INCLUDES])
1314 dnl --------------------------------------
1315 dnl checking for getrusage struct and call
1316 dnl --------------------------------------
1317 AC_MSG_CHECKING(whether getrusage is available)
1318 AC_TRY_COMPILE([#include <sys/resource.h>
1319 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1320 [AC_MSG_RESULT(yes)
1321  AC_DEFINE(HAVE_RUSAGE,,rusage)],
1322  AC_MSG_RESULT(no))
1324 dnl -------------------
1325 dnl capabilities checks
1326 dnl -------------------
1327 if test "${enable_capabilities}" != "no"; then
1328   AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1329   AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1330     [AC_MSG_RESULT(yes)
1331      AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1332      quagga_ac_keepcaps="yes"],
1333      AC_MSG_RESULT(no)
1334   )
1335   if test x"${quagga_ac_keepcaps}" = x"yes"; then
1336     AC_CHECK_HEADERS(sys/capability.h)
1337   fi
1338   if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1339     AC_CHECK_LIB(cap, cap_init, 
1340       [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1341        LIBCAP="-lcap"
1342        quagga_ac_lcaps="yes"]
1343     )
1344   else
1345     AC_CHECK_HEADERS(priv.h,
1346      [AC_MSG_CHECKING(Solaris style privileges are available)
1347       AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1348           [AC_MSG_RESULT(yes)
1349            AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1350            quagga_ac_scaps="yes"],
1351            AC_MSG_RESULT(no)
1352       )
1353      ]
1354    )
1355   fi
1356   if test x"${quagga_ac_scaps}" = x"yes" \
1357        -o x"${quagga_ac_lcaps}" = x"yes"; then
1358     AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1359   fi
1361 AC_SUBST(LIBCAP)
1363 dnl ---------------------------
1364 dnl check for glibc 'backtrace'
1365 dnl --------------------------- 
1366 if test "${glibc}" = "yes"; then
1367    AC_CHECK_HEADER([execinfo.h],
1368     [AC_CHECK_FUNC([backtrace],
1369         [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1370          AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1371         ])
1372     ])
1375 dnl -----------------------------------------
1376 dnl check for malloc mallinfo struct and call
1377 dnl this must try and link using LIBS, in
1378 dnl order to check no alternative allocator
1379 dnl has been specified, which might not provide
1380 dnl mallinfo, e.g. such as Umem on Solaris.
1381 dnl -----------------------------------------
1382 AC_CHECK_HEADER([malloc.h],
1383  [AC_MSG_CHECKING(whether mallinfo is available)
1384   AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1385                         [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1386       [AC_MSG_RESULT(yes)
1387        AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1388        AC_MSG_RESULT(no)
1389   )
1390  ], [], QUAGGA_INCLUDES)
1392 dnl ----------
1393 dnl configure date
1394 dnl ----------
1395 CONFDATE=`date '+%Y%m%d'`
1396 AC_SUBST(CONFDATE)
1398 dnl ------------------------------
1399 dnl set paths for state directory
1400 dnl ------------------------------
1401 if test "${prefix}" = "NONE"; then
1402   quagga_statedir_prefix="";
1403 else
1404   quagga_statedir_prefix=${prefix}
1406 if test "${localstatedir}" = '${prefix}/var'; then
1407   AC_CACHE_CHECK(state directory,ac_statedir,
1408   [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1409                         ${quagga_statedir_prefix}/var/adm dnl
1410                         ${quagga_statedir_prefix}/etc dnl
1411                         /var/run        dnl
1412                         /var/adm        dnl
1413                         /etc            dnl
1414                         /dev/null;
1415   do
1416     test -d $QUAGGA_STATE_DIR && break
1417   done
1418   quagga_statedir=$QUAGGA_STATE_DIR])
1419 else
1420   quagga_statedir=${localstatedir}
1421   AC_MSG_CHECKING(directory to use for state file)
1422   AC_MSG_RESULT(${quagga_statedir})
1423   AC_SUBST(quagga_statedir)
1425 if test $quagga_statedir = "/dev/null"; then
1426     AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1429 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1430 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1431 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1432 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1433 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1434 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1435 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1436 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1437 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1438 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1439 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1440 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1441 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1442 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1443 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1444 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1445 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1447 dnl -------------------------------
1448 dnl Quagga sources should always be 
1449 dnl current wrt interfaces. Dont
1450 dnl allow deprecated interfaces to
1451 dnl be exposed.
1452 dnl -------------------------------
1453 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1455 dnl ---------------------------
1456 dnl Check htonl works correctly
1457 dnl ---------------------------
1458 AC_MSG_CHECKING(for working htonl)
1459 AC_CACHE_VAL(ac_cv_htonl_works,
1460  [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1461                 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1464 AC_MSG_RESULT($ac_cv_htonl_works)
1466 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile 
1467           ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1468           ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile 
1469           ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
1470           pkgsrc/Makefile
1471           redhat/quagga.spec 
1472           lib/version.h
1473           doc/defines.texi
1474           isisd/topology/Makefile
1475           pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1476           pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1477 AC_CONFIG_FILES([solaris/Makefile])
1479 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1480 ## Hack, but working solution to avoid rebuilding of quagga.info.
1481 ## It's already in CVS until texinfo 4.7 is more common.
1482 AC_OUTPUT
1484 echo "
1485 Quagga configuration
1486 --------------------
1487 quagga version          : ${PACKAGE_VERSION}
1488 host operationg system  : ${host_os}
1489 source code location    : ${srcdir}
1490 compiler                : ${CC}
1491 compiler flags          : ${CFLAGS}
1492 make                    : ${MAKE-make}
1493 includes                : ${INCLUDES} ${SNMP_INCLUDES}
1494 linker flags            : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1495 state file directory    : ${quagga_statedir}
1496 config file directory   : `eval echo \`echo ${sysconfdir}\``
1497 example directory       : `eval echo \`echo ${exampledir}\``
1498 user to run as          : ${enable_user}
1499 group to run as         : ${enable_group}
1500 group for vty sockets   : ${enable_vty_group}
1501 config file mask        : ${enable_configfile_mask}
1502 log file mask           : ${enable_logfile_mask}
1504 The above user and group must have read/write access to the state file
1505 directory and to the config files in the config file directory."
1507 if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1508 Warning: The ${MAKE-make} programme detected, either in your path or
1509 via the MAKE variable, is not GNU Make. GNU make may be installed as
1510 gmake on some systems. and is required to complete a build of Quagga
1511 " > /dev/stderr