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