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