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