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