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