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