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