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