]> git.proxmox.com Git - mirror_frr.git/blob - configure.ac
[link-detect] Improve BSD support.
[mirror_frr.git] / configure.ac
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)
10
11 AC_INIT(Quagga, 0.99.9, [http://bugzilla.quagga.net])
12 AC_CONFIG_SRCDIR(lib/zebra.h)
13
14 dnl -----------------------------------
15 dnl Get hostname and other information.
16 dnl -----------------------------------
17 AC_CANONICAL_BUILD()
18 AC_CANONICAL_HOST()
19 AC_CANONICAL_TARGET()
20
21 AM_INIT_AUTOMAKE(1.6)
22 AM_CONFIG_HEADER(config.h)
23
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])
28
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)
37
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)
48
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 ;
58 fi
59
60 dnl --------------------
61 dnl Check CC and friends
62 dnl --------------------
63 AC_PROG_CC
64 AC_PROG_CPP
65
66 AC_PROG_EGREP
67
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])
71
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 )
92 fi
93
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)
100 dnl
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.
109 dnl
110 dnl Sun Studio 10 / SunPro 5.7 is also supported,
111 dnl so lets set some sane CFLAGS for it.
112 dnl ---------------------------------------------
113
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])
140 fi
141
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)
149
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 ]
164 )
165
166 dnl -----------------
167 dnl System extensions
168 dnl -----------------
169 AC_AIX
170 AC_GNU_SOURCE
171
172 dnl -------
173 dnl libtool
174 dnl -------
175 AC_PROG_LIBTOOL
176
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])
236
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])
251
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"
257 fi
258
259 if test x"${enable_gcc_rdynamic}" = x"yes" ; then
260 LDFLAGS="${LDFLAGS} -rdynamic"
261 fi
262
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
269 fi
270
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
278 fi
279
280 if test "${enable_tcp_zebra}" = "yes"; then
281 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
282 fi
283
284 if test "${enable_opaque_lsa}" = "yes"; then
285 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
286 fi
287
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)
291 fi
292
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)
299 fi
300
301 if test "${enable_irdp}" = "yes"; then
302 AC_DEFINE(HAVE_IRDP,, IRDP )
303 fi
304
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"
310 fi
311
312 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
313 AC_SUBST(ISIS_TOPOLOGY_DIR)
314 AC_SUBST(ISIS_TOPOLOGY_LIB)
315
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"
320 fi
321
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"
326 fi
327
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
334 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)
340
341 enable_configfile_mask=${enable_configfile_mask:-0600}
342 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
343
344 enable_logfile_mask=${enable_logfile_mask:-0600}
345 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
346
347 MULTIPATH_NUM=1
348
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
359
360 AC_SUBST(MULTIPATH_NUM)
361
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
378
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])
386
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
420
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)
427
428 AC_CHECK_HEADERS([ucontext.h], [], [],
429 [#ifndef __USE_GNU
430 #define __USE_GNU
431 #endif /* __USE_GNU */
432 QUAGGA_INCLUDES
433 ])
434
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
472
473 dnl V6 headers are checked below, after we check for v6
474
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
530
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)
569
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
590 fi
591
592 if test "$with_libpam" = "yes"; then
593 dnl took this test from proftpds configure.in and suited to our needs
594 dnl -------------------------------------------------------------------------
595 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 ],
608
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 ]
619 )
620 fi
621 AC_SUBST(LIBPAM)
622
623 dnl -------------------------------
624 dnl Endian-ness check
625 dnl -------------------------------
626 AC_WORDS_BIGENDIAN
627
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)
635
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
655
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 ])
667 ])
668 if test x"$LIBM" = x ; then
669 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
670 fi
671 LIBS="$TMPLIBS"
672 AC_SUBST(LIBM)
673
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])
686
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 ]
694 )
695
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>
732
733 main ()
734 {
735 int ac_sock;
736
737 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
738 if (ac_sock < 0 && errno == EINVAL)
739 exit (1);
740 exit (0);
741 }],
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)])
750 fi
751 AC_SUBST(RT_METHOD)
752 AC_SUBST(KERNEL_METHOD)
753 AC_SUBST(OTHER_METHOD)
754
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
781 fi
782 AC_SUBST(ISIS_METHOD)
783
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
802
803 main()
804 {
805 struct msghdr msg;
806 char buf[4];
807
808 msg.msg_control = buf;
809 msg.msg_controllen = 0;
810
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)])
816
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;
826 do
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)
844
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
873 fi
874 AC_SUBST(IF_METHOD)
875 AC_SUBST(IOCTL_METHOD)
876
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)
881
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))
892
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 )
908
909 dnl -----------------------
910 dnl check proc file system.
911 dnl -----------------------
912 if test -r /proc/net/dev; then
913 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
914 IF_PROC=if_proc.o
915 fi
916
917 if test -r /proc/net/if_inet6; then
918 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
919 IF_PROC=if_proc.o
920 fi
921 AC_SUBST(IF_PROC)
922
923 dnl -----------------------------
924 dnl check ipforward detect method
925 dnl -----------------------------
926 AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
927 [for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
928 do
929 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
930 done
931 case $zebra_ipforward_path in
932 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
933 zebra_ipforward_path="proc";;
934 "/dev/ip")
935 case "$host" in
936 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
937 zebra_ipforward_path="ews";;
938 *-freebsd*) IPFORWARD=ipforward_sysctl.o
939 zebra_ipforward_path="sysctl";;
940 *) IPFORWARD=ipforward_solaris.o
941 zebra_ipforward_path="solaris";;
942 esac;;
943 *) IPFORWARD=ipforward_sysctl.o
944 zebra_ipforward_path="sysctl";;
945 esac])
946 AC_SUBST(IPFORWARD)
947
948 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
949
950 dnl ----------
951 dnl IPv6 check
952 dnl ----------
953 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
954 if test "${enable_ipv6}" = "no"; then
955 AC_MSG_RESULT(disabled)
956 else
957 dnl ----------
958 dnl INRIA IPv6
959 dnl ----------
960 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
961 zebra_cv_ipv6=yes
962 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
963 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
964 RIPNGD="ripngd"
965 OSPF6D="ospf6d"
966 LIB_IPV6=""
967 AC_MSG_RESULT(INRIA IPv6)
968 dnl ---------
969 dnl KAME IPv6
970 dnl ---------
971 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
972 zebra_cv_ipv6=yes
973 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
974 AC_DEFINE(KAME,1,KAME IPv6)
975 RIPNGD="ripngd"
976 OSPF6D="ospf6d"
977 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
978 LIB_IPV6="-L/usr/local/v6/lib -linet6"
979 fi
980 AC_MSG_RESULT(KAME)
981 dnl -------------------------
982 dnl MUSICA IPv6
983 dnl default host check
984 dnl It is not used by Kheops
985 dnl -------------------------
986 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
987 zebra_cv_ipv6=yes
988 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
989 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
990 AC_DEFINE(KAME,1,KAME IPv6 stack)
991 RIPNGD="ripngd"
992 OSPF6D="ospf6d"
993 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
994 LIB_IPV6="-L/usr/local/v6/lib -linet6"
995 fi
996 AC_MSG_RESULT(MUSICA)
997 dnl ---------
998 dnl NRL check
999 dnl ---------
1000 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1001 zebra_cv_ipv6=yes
1002 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1003 AC_DEFINE(NRL,1,NRL)
1004 RIPNGD="ripngd"
1005 OSPF6D="ospf6d"
1006 if test x"$opsys" = x"bsdi";then
1007 AC_DEFINE(BSDI_NRL,,BSDI)
1008 AC_MSG_RESULT(BSDI_NRL)
1009 else
1010 AC_MSG_RESULT(NRL)
1011 fi
1012 dnl ------------------------------------
1013 dnl Solaris 9, 10 and potentially higher
1014 dnl ------------------------------------
1015 elif test x"$opsys" = x"sol8"; then
1016 zebra_cv_ipv6=yes;
1017 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1018 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1019 RIPNGD="ripngd"
1020 OSPF6D="ospf6d"
1021 AC_MSG_RESULT(Solaris IPv6)
1022 dnl ----------
1023 dnl Linux IPv6
1024 dnl ----------
1025 elif test "${enable_ipv6}" = "yes"; then
1026 AC_EGREP_CPP(yes, [
1027 #include <linux/version.h>
1028 /* 2.1.128 or later */
1029 #if LINUX_VERSION_CODE >= 0x020180
1030 yes
1031 #endif],
1032 [zebra_cv_ipv6=yes
1033 zebra_cv_linux_ipv6=yes
1034 AC_MSG_RESULT(Linux IPv6)])
1035 else
1036 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1037 then
1038 zebra_cv_ipv6=yes
1039 zebra_cv_linux_ipv6=yes
1040 AC_MSG_RESULT(Linux IPv6)
1041 fi
1042 fi
1043
1044 if test "$zebra_cv_linux_ipv6" = "yes";then
1045 AC_MSG_CHECKING(whether libc has IPv6 support)
1046 AC_TRY_LINK([#include <netinet/in.h>
1047 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1048 [AC_MSG_RESULT(yes)
1049 zebra_cv_ipv6=yes
1050 zebra_cv_linux_ipv6=yes],
1051 [AC_MSG_RESULT(no)
1052 zebra_cv_ipv6=no
1053 zebra_cv_linux_ipv6=no])
1054 fi
1055
1056 if test "$zebra_cv_linux_ipv6" = "yes";then
1057 AC_MSG_CHECKING(for GNU libc >= 2.1)
1058 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1059 AC_EGREP_CPP(yes, [
1060 #include <features.h>
1061 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1062 yes
1063 #endif],
1064 [glibc=yes
1065 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1066 AC_MSG_RESULT(yes)],
1067 AC_MSG_RESULT(no)
1068 )
1069 RIPNGD="ripngd"
1070 OSPF6D="ospf6d"
1071 if test "$glibc" != "yes"; then
1072 INCLUDES="-I/usr/inet6/include"
1073 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1074 LIB_IPV6="-L/usr/inet6/lib -linet6"
1075 fi
1076 fi
1077 fi
1078
1079 dnl -----------------------
1080 dnl Set IPv6 related values
1081 dnl -----------------------
1082 LIBS="$LIB_IPV6 $LIBS"
1083 AC_SUBST(LIB_IPV6)
1084
1085 if test x"$RIPNGD" = x""; then
1086 AC_MSG_RESULT(IPv4 only)
1087 fi
1088 fi
1089
1090 dnl ------------------
1091 dnl IPv6 header checks
1092 dnl ------------------
1093 if test "x${zebra_cv_ipv6}" = "xyes"; then
1094 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
1095 netinet6/in6_var.h netinet6/nd6.h], [], [],
1096 QUAGGA_INCLUDES)
1097 fi
1098
1099 m4_define([QUAGGA_INCLUDES],dnl
1100 QUAGGA_INCLUDES
1101 [#if HAVE_NETINET6_IN6_H
1102 #include <netinet6/in6.h>
1103 #endif
1104 #if HAVE_NETINET_IN6_VAR_H
1105 #include <netinet/in6_var.h>
1106 #endif
1107 #if HAVE_NETINET_ICMP6_H
1108 # include <netinet/icmp6.h>
1109 #endif
1110 #if HAVE_NETINET6_IN6_VAR_H
1111 # include <netinet6/in6_var.h>
1112 #endif
1113 #if HAVE_NETINET6_ND6_H
1114 # include <netinet6/nd6.h>
1115 #endif
1116 ])dnl
1117
1118 dnl --------------------
1119 dnl Daemon disable check
1120 dnl --------------------
1121 if test "${enable_zebra}" = "no";then
1122 ZEBRA=""
1123 else
1124 ZEBRA="zebra"
1125 fi
1126
1127 if test "${enable_bgpd}" = "no";then
1128 BGPD=""
1129 else
1130 BGPD="bgpd"
1131 fi
1132
1133 if test "${enable_ripd}" = "no";then
1134 RIPD=""
1135 else
1136 RIPD="ripd"
1137 fi
1138
1139 if test "${enable_ospfd}" = "no";then
1140 OSPFD=""
1141 else
1142 OSPFD="ospfd"
1143 fi
1144
1145 if test "${enable_watchquagga}" = "no";then
1146 WATCHQUAGGA=""
1147 else
1148 WATCHQUAGGA="watchquagga"
1149 fi
1150
1151 OSPFCLIENT=""
1152 if test "${enable_opaque_lsa}" = "yes"; then
1153 if test "${enable_ospfapi}" != "no";then
1154 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1155
1156 if test "${enable_ospfclient}" != "no";then
1157 OSPFCLIENT="ospfclient"
1158 fi
1159 fi
1160
1161 fi
1162
1163 case "${enable_ripngd}" in
1164 "yes") RIPNGD="ripngd";;
1165 "no" ) RIPNGD="";;
1166 * ) ;;
1167 esac
1168
1169 case "${enable_ospf6d}" in
1170 "yes") OSPF6D="ospf6d";;
1171 "no" ) OSPF6D="";;
1172 * ) ;;
1173 esac
1174
1175 case "${enable_isisd}" in
1176 "yes") ISISD="isisd";;
1177 "no" ) ISISD="";;
1178 * ) ;;
1179 esac
1180
1181 # XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1182 case "${enable_solaris}" in
1183 "yes") SOLARIS="solaris";;
1184 "no" ) SOLARIS="";;
1185 * ) ;;
1186 esac
1187
1188 if test "${enable_bgp_announce}" = "no";then
1189 AC_DEFINE(DISABLE_BGP_ANNOUNCE,,Disable BGP installation to zebra)
1190 fi
1191
1192 AC_SUBST(ZEBRA)
1193 AC_SUBST(BGPD)
1194 AC_SUBST(RIPD)
1195 AC_SUBST(RIPNGD)
1196 AC_SUBST(OSPFD)
1197 AC_SUBST(OSPF6D)
1198 AC_SUBST(WATCHQUAGGA)
1199 AC_SUBST(ISISD)
1200 AC_SUBST(SOLARIS)
1201 AC_SUBST(VTYSH)
1202 AC_SUBST(INCLUDES)
1203 AC_SUBST(CURSES)
1204 AC_SUBST(OSPFCLIENT)
1205 AC_SUBST(OSPFAPI)
1206 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1207 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1208 AC_CHECK_LIB(crypt, crypt)
1209 AC_CHECK_LIB(resolv, res_init)
1210
1211 dnl ---------------------------------------------------
1212 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1213 dnl ---------------------------------------------------
1214 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1215 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1216 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
1217
1218 dnl ---------------------------
1219 dnl check system has GNU regexp
1220 dnl ---------------------------
1221 dnl AC_MSG_CHECKING(whether system has GNU regex)
1222 AC_CHECK_LIB(c, regexec,
1223 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1224 LIB_REGEX=""],
1225 [LIB_REGEX="regex.o"])
1226 AC_SUBST(LIB_REGEX)
1227
1228 dnl ------------------
1229 dnl check Net-SNMP library
1230 dnl ------------------
1231 if test "${enable_snmp}" = "yes"; then
1232 LIBS="${LIBS} -lcrypto"
1233 AC_CHECK_LIB(netsnmp, asn_parse_int,
1234 [AC_DEFINE(HAVE_NETSNMP,,Net SNMP)
1235 AC_DEFINE(HAVE_SNMP,,SNMP)
1236 LIBS="${LIBS} -lnetsnmp"],
1237 [AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])])
1238
1239 for ac_snmp in /usr/include \
1240 /usr/local/include \
1241 /dev/null; do
1242 test -f "${ac_snmp}/net-snmp/library/asn1.h" && break
1243 done
1244
1245 case ${ac_snmp} in
1246 /dev/null)
1247 AC_MSG_ERROR([--enable-snmp given, but can not find header])
1248 ;;
1249 *)
1250 SNMP_INCLUDES="-I${ac_snmp}/net-snmp"
1251 SNMP_INCLUDES="${SNMP_INCLUDES} -I${ac_snmp}/net-snmp/library"
1252 ;;
1253 esac
1254
1255 AC_SUBST(SNMP_INCLUDES)
1256 fi
1257
1258 dnl ---------------------------
1259 dnl sockaddr and netinet checks
1260 dnl ---------------------------
1261 AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1262 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1263 socklen_t,
1264 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1265 struct nd_opt_adv_interval, struct rt_addrinfo,
1266 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1267 [], [], QUAGGA_INCLUDES)
1268
1269 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1270 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1271 struct sockaddr_in6.sin6_scope_id,
1272 struct if6_aliasreq.ifra_lifetime,
1273 struct nd_opt_adv_interval.nd_opt_ai_type],
1274 [], [], QUAGGA_INCLUDES)
1275
1276 dnl ---------------------------
1277 dnl IRDP/pktinfo/icmphdr checks
1278 dnl ---------------------------
1279 AC_CHECK_TYPES([struct in_pktinfo],
1280 [AC_CHECK_TYPES([struct icmphdr],
1281 [if test "${enable_irdp}" != "no"; then
1282 AC_DEFINE(HAVE_IRDP,, IRDP)
1283 fi],
1284 [if test "${enable_irdp}" = "yes"; then
1285 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1286 fi], [QUAGGA_INCLUDES])],
1287 [if test "${enable_irdp}" = "yes"; then
1288 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1289 fi], [QUAGGA_INCLUDES])
1290
1291 dnl --------------------------------------
1292 dnl checking for getrusage struct and call
1293 dnl --------------------------------------
1294 AC_MSG_CHECKING(whether getrusage is available)
1295 AC_TRY_COMPILE([#include <sys/resource.h>
1296 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1297 [AC_MSG_RESULT(yes)
1298 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1299 AC_MSG_RESULT(no))
1300
1301 dnl -------------------
1302 dnl capabilities checks
1303 dnl -------------------
1304 if test "${enable_capabilities}" != "no"; then
1305 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1306 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1307 [AC_MSG_RESULT(yes)
1308 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1309 quagga_ac_keepcaps="yes"],
1310 AC_MSG_RESULT(no)
1311 )
1312 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1313 AC_CHECK_HEADERS(sys/capability.h)
1314 fi
1315 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1316 AC_CHECK_LIB(cap, cap_init,
1317 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1318 LIBCAP="-lcap"
1319 quagga_ac_lcaps="yes"]
1320 )
1321 else
1322 AC_CHECK_HEADERS(priv.h,
1323 [AC_MSG_CHECKING(Solaris style privileges are available)
1324 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1325 [AC_MSG_RESULT(yes)
1326 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1327 quagga_ac_scaps="yes"],
1328 AC_MSG_RESULT(no)
1329 )
1330 ]
1331 )
1332 fi
1333 if test x"${quagga_ac_scaps}" = x"yes" \
1334 -o x"${quagga_ac_lcaps}" = x"yes"; then
1335 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1336 fi
1337 fi
1338 AC_SUBST(LIBCAP)
1339
1340 dnl ---------------------------
1341 dnl check for glibc 'backtrace'
1342 dnl ---------------------------
1343 if test "${glibc}" = "yes"; then
1344 AC_CHECK_HEADER([execinfo.h],
1345 [AC_CHECK_FUNC([backtrace],
1346 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1347 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1348 ])
1349 ])
1350 fi
1351
1352 dnl -----------------------------------------
1353 dnl check for malloc mallinfo struct and call
1354 dnl this must try and link using LIBS, in
1355 dnl order to check no alternative allocator
1356 dnl has been specified, which might not provide
1357 dnl mallinfo, e.g. such as Umem on Solaris.
1358 dnl -----------------------------------------
1359 AC_CHECK_HEADER([malloc.h],
1360 [AC_MSG_CHECKING(whether mallinfo is available)
1361 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1362 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1363 [AC_MSG_RESULT(yes)
1364 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1365 AC_MSG_RESULT(no)
1366 )
1367 ], [], QUAGGA_INCLUDES)
1368
1369 dnl ----------
1370 dnl configure date
1371 dnl ----------
1372 CONFDATE=`date '+%Y%m%d'`
1373 AC_SUBST(CONFDATE)
1374
1375 dnl ------------------------------
1376 dnl set paths for state directory
1377 dnl ------------------------------
1378 if test "${prefix}" = "NONE"; then
1379 quagga_statedir_prefix="";
1380 else
1381 quagga_statedir_prefix=${prefix}
1382 fi
1383 if test "${localstatedir}" = '${prefix}/var'; then
1384 AC_CACHE_CHECK(state directory,ac_statedir,
1385 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1386 ${quagga_statedir_prefix}/var/adm dnl
1387 ${quagga_statedir_prefix}/etc dnl
1388 /var/run dnl
1389 /var/adm dnl
1390 /etc dnl
1391 /dev/null;
1392 do
1393 test -d $QUAGGA_STATE_DIR && break
1394 done
1395 quagga_statedir=$QUAGGA_STATE_DIR])
1396 else
1397 quagga_statedir=${localstatedir}
1398 AC_MSG_CHECKING(directory to use for state file)
1399 AC_MSG_RESULT(${quagga_statedir})
1400 AC_SUBST(quagga_statedir)
1401 fi
1402 if test $quagga_statedir = "/dev/null"; then
1403 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1404 fi
1405
1406 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1407 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1408 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1409 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1410 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1411 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1412 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1413 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1414 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1415 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1416 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1417 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1418 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1419 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1420 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1421 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1422 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1423
1424 dnl -------------------------------
1425 dnl Quagga sources should always be
1426 dnl current wrt interfaces. Dont
1427 dnl allow deprecated interfaces to
1428 dnl be exposed.
1429 dnl -------------------------------
1430 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1431
1432 dnl ---------------------------
1433 dnl Check htonl works correctly
1434 dnl ---------------------------
1435 AC_MSG_CHECKING(for working htonl)
1436 AC_CACHE_VAL(ac_cv_htonl_works,
1437 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1438 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1439 ]
1440 )
1441 AC_MSG_RESULT($ac_cv_htonl_works)
1442
1443 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1444 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1445 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1446 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
1447 pkgsrc/Makefile
1448 redhat/quagga.spec
1449 lib/version.h
1450 doc/defines.texi
1451 isisd/topology/Makefile
1452 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1453 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1454 AC_CONFIG_FILES([solaris/Makefile])
1455
1456 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1457 ## Hack, but working solution to avoid rebuilding of quagga.info.
1458 ## It's already in CVS until texinfo 4.7 is more common.
1459 AC_OUTPUT
1460
1461 echo "
1462 Quagga configuration
1463 --------------------
1464 quagga version : ${PACKAGE_VERSION}
1465 host operationg system : ${host_os}
1466 source code location : ${srcdir}
1467 compiler : ${CC}
1468 compiler flags : ${CFLAGS}
1469 make : ${MAKE-make}
1470 includes : ${INCLUDES} ${SNMP_INCLUDES}
1471 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1472 state file directory : ${quagga_statedir}
1473 config file directory : `eval echo \`echo ${sysconfdir}\``
1474 example directory : `eval echo \`echo ${exampledir}\``
1475 user to run as : ${enable_user}
1476 group to run as : ${enable_group}
1477 group for vty sockets : ${enable_vty_group}
1478 config file mask : ${enable_configfile_mask}
1479 log file mask : ${enable_logfile_mask}
1480
1481 The above user and group must have read/write access to the state file
1482 directory and to the config files in the config file directory."
1483
1484 if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1485 Warning: The ${MAKE-make} programme detected, either in your path or
1486 via the MAKE variable, is not GNU Make. GNU make may be installed as
1487 gmake on some systems. and is required to complete a build of Quagga
1488 " > /dev/stderr
1489 fi