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