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