]> git.proxmox.com Git - mirror_frr.git/blob - configure.ac
[lib/memory] Add mallinfo support
[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 ## $Id: configure.ac,v 1.119 2006/03/30 13:53:59 paul Exp $
9 AC_PREREQ(2.53)
10
11 AC_INIT(Quagga, 0.99.3, [http://bugzilla.quagga.net])
12 AC_CONFIG_SRCDIR(lib/zebra.h)
13
14 dnl -----------------------------------
15 dnl Get hostname and other information.
16 dnl -----------------------------------
17 AC_CANONICAL_BUILD()
18 AC_CANONICAL_HOST()
19 AC_CANONICAL_TARGET()
20
21 AM_INIT_AUTOMAKE(1.6)
22 AM_CONFIG_HEADER(config.h)
23
24 dnl we need gawk for memtypes.awk
25 AC_CHECK_PROG([GAWK],[gawk],[gawk],[/bin/false])
26 AC_ARG_VAR([GAWK],[GNU AWK])
27
28 dnl default is to match previous behavior
29 exampledir=${sysconfdir}
30 AC_ARG_ENABLE([exampledir],
31 AC_HELP_STRING([--enable-exampledir],
32 [specify alternate directory for examples]),
33 exampledir="$enableval",)
34 dnl XXX add --exampledir to autoconf standard directory list somehow
35 AC_SUBST(exampledir)
36
37 dnl default is to match previous behavior
38 pkgsrcrcdir=""
39 pkgsrcdir=""
40 AC_ARG_ENABLE([pkgsrcrcdir],
41 AC_HELP_STRING([--enable-pkgsrcrcdir],
42 [specify directory for rc.d scripts]),
43 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
44 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
45 AC_SUBST(pkgsrcdir)
46 AC_SUBST(pkgsrcrcdir)
47
48 dnl ------------
49 dnl Check CFLAGS
50 dnl ------------
51 AC_ARG_WITH(cflags,
52 [ --with-cflags Set CFLAGS for use in compilation.])
53 if test "x$with_cflags" != "x" ; then
54 CFLAGS="$with_cflags" ; cflags_specified=yes ;
55 elif test -n "$CFLAGS" ; then
56 cflags_specified=yes ;
57 fi
58
59 dnl --------------------
60 dnl Check CC and friends
61 dnl --------------------
62 AC_PROG_CC
63 AC_PROG_CPP
64 AC_PROG_EGREP
65
66 dnl ------------------------------------------------------------------
67 dnl Intel compiler check. Although Intel tries really hard to make icc
68 dnl look like gcc, there are some differences. It's very verbose with
69 dnl -Wall and it doesn't support the individual -W options.
70 dnl ------------------------------------------------------------------
71 if test "x${GCC}" = "xyes" ; then
72 COMPILER="GCC"
73 AC_MSG_CHECKING([whether we are using the Intel compiler])
74 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
75 [AC_MSG_RESULT([no])],
76 [COMPILER="ICC"
77 AC_MSG_RESULT([yes])]
78 )
79 else
80 AC_MSG_CHECKING([whether we are using SunPro compiler])
81 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
82 [AC_MSG_RESULT([no])],
83 [COMPILER="SUNPRO"
84 AC_MSG_RESULT([yes])]
85 )
86 fi
87
88 dnl ---------------------------------------------
89 dnl If CLFAGS doesn\'t exist set default value
90 dnl AC_PROG_CC will have set minimal default
91 dnl already, eg "-O2 -g" for gcc, "-g" for others
92 dnl (Wall is gcc specific... have to make sure
93 dnl gcc is being used before setting it)
94 dnl
95 dnl Intel icc 8.0 also sets __GNUC__,
96 dnl but doesn't support all these fancy -W options.
97 dnl Intel compiler warnings we ignore:
98 dnl 279: controlling expression is constant.
99 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
100 dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
101 dnl macro.
102 dnl 981: operands are evaluated in unspecified order.
103 dnl
104 dnl Sun Studio 10 / SunPro 5.7 is also supported,
105 dnl so lets set some sane CFLAGS for it.
106 dnl ---------------------------------------------
107
108 AC_MSG_CHECKING([whether to set a default CFLAGS])
109 if test "x${cflags_specified}" = "x" ; then
110 case ${COMPILER} in
111 "ICC")
112 CFLAGS="-Os -g -Wall -wd 279,869,981"
113 AC_MSG_RESULT([Intel default])
114 ;;
115 "GCC")
116 CFLAGS="-Os -fno-omit-frame-pointer -g -std=c99 -Wall"
117 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
118 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
119 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
120 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
121 # TODO: conditionally addd -Wpacked if handled
122 AC_MSG_RESULT([gcc default])
123 ;;
124 "SUNPRO")
125 CFLAGS="-xO4 -xspace -xcode=pic32 -xstrconst -Xt -xc99"
126 AC_MSG_RESULT([SunPro default])
127 ;;
128 *)
129 AC_MSG_RESULT([unknown compiler])
130 ;;
131 esac
132 else
133 AC_MSG_RESULT([CFLAGS supplied by user])
134 fi
135
136 dnl --------------
137 dnl Check programs
138 dnl --------------
139 AC_PROG_INSTALL
140 AC_PROG_MAKE_SET
141 AC_CHECK_TOOL(AR, ar)
142 AC_CHECK_TOOL(RANLIB, ranlib, :)
143
144 dnl ---------
145 dnl AIX check
146 dnl ---------
147 AC_AIX
148
149 dnl -------
150 dnl libtool
151 dnl -------
152 AC_PROG_LIBTOOL
153
154 dnl ----------------------
155 dnl Packages configuration
156 dnl ----------------------
157 AC_ARG_ENABLE(vtysh,
158 [ --enable-vtysh include integrated vty shell for Quagga])
159 AC_ARG_ENABLE(ipv6,
160 [ --disable-ipv6 turn off IPv6 related features and daemons])
161 AC_ARG_ENABLE(zebra,
162 [ --disable-zebra do not build zebra daemon])
163 AC_ARG_ENABLE(bgpd,
164 [ --disable-bgpd do not build bgpd])
165 AC_ARG_ENABLE(ripd,
166 [ --disable-ripd do not build ripd])
167 AC_ARG_ENABLE(ripngd,
168 [ --disable-ripngd do not build ripngd])
169 AC_ARG_ENABLE(ospfd,
170 [ --disable-ospfd do not build ospfd])
171 AC_ARG_ENABLE(ospf6d,
172 [ --disable-ospf6d do not build ospf6d])
173 AC_ARG_ENABLE(watchquagga,
174 [ --disable-watchquagga do not build watchquagga])
175 AC_ARG_ENABLE(isisd,
176 [ --enable-isisd build isisd])
177 AC_ARG_ENABLE(bgp-announce,
178 [ --disable-bgp-announce, turn off BGP route announcement])
179 AC_ARG_ENABLE(netlink,
180 [ --enable-netlink force to use Linux netlink interface])
181 AC_ARG_ENABLE(broken-aliases,
182 [ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
183 AC_ARG_ENABLE(snmp,
184 [ --enable-snmp enable SNMP support])
185 AC_ARG_WITH(libpam,
186 [ --with-libpam use libpam for PAM support in vtysh])
187 AC_ARG_ENABLE(tcp-zebra,
188 [ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
189 AC_ARG_ENABLE(opaque-lsa,
190 [ --enable-opaque-lsa enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
191 AC_ARG_ENABLE(ospfapi,
192 [ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database,
193 (this is the default if --enable-opaque-lsa is not set)])
194 AC_ARG_ENABLE(ospfclient,
195 [ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
196 (this is the default if --disable-ospfapi is set)])
197 AC_ARG_ENABLE(ospf-te,
198 [ --enable-ospf-te enable Traffic Engineering Extension to OSPF])
199 AC_ARG_ENABLE(multipath,
200 [ --enable-multipath=ARG enable multipath function, ARG must be digit])
201 AC_ARG_ENABLE(quagga_user,
202 [ --enable-user=ARG user to run Quagga suite as (default quagga)])
203 AC_ARG_ENABLE(quagga_group,
204 [ --enable-group=ARG group to run Quagga suite as (default quagga)])
205 AC_ARG_ENABLE(vty_group,
206 [ --enable-vty-group=ARG set vty sockets to have specified group as owner])
207 AC_ARG_ENABLE(configfile_mask,
208 [ --enable-configfile-mask=ARG set mask for config files])
209 AC_ARG_ENABLE(logfile_mask,
210 [ --enable-logfile-mask=ARG set mask for log files])
211
212 AC_ARG_ENABLE(rtadv,
213 [ --disable-rtadv disable IPV6 router advertisement feature])
214 AC_ARG_ENABLE(irdp,
215 [ --enable-irdp enable IRDP server support in zebra])
216 AC_ARG_ENABLE(isis_topology,
217 [ --enable-isis-topology enable IS-IS topology generator])
218 AC_ARG_ENABLE(capabilities,
219 [ --disable-capabilities disable using POSIX capabilities])
220 AC_ARG_ENABLE(gcc_ultra_verbose,
221 [ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
222 AC_ARG_ENABLE(gcc-rdynamic,
223 [ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
224 AC_ARG_ENABLE(time-check,
225 [ --disable-time-check disable slow thread warning messages])
226
227 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
228 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
229 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
230 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
231 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
232 fi
233
234 if test x"${enable_gcc_rdynamic}" = x"yes" ; then
235 LDFLAGS="${LDFLAGS} -rdynamic"
236 fi
237
238 if test x"${enable_time_check}" != x"no" ; then
239 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
240 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
241 else
242 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
243 fi
244 fi
245
246 if test "${enable_broken_aliases}" = "yes"; then
247 if test "${enable_netlink}" = "yes"
248 then
249 echo "Sorry, you can't use netlink with broken aliases"
250 exit 1
251 fi
252 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
253 enable_netlink=no
254 fi
255
256 if test "${enable_tcp_zebra}" = "yes"; then
257 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
258 fi
259
260 if test "${enable_opaque_lsa}" = "yes"; then
261 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
262 fi
263
264 if test "${enable_ospf_te}" = "yes"; then
265 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
266 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
267 fi
268
269 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
270 if test "${enable_rtadv}" != "no"; then
271 AC_MSG_RESULT(yes)
272 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
273 else
274 AC_MSG_RESULT(no)
275 fi
276
277 if test "${enable_irdp}" = "yes"; then
278 AC_DEFINE(HAVE_IRDP,, IRDP )
279 fi
280
281 if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
282 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
283 ISIS_TOPOLOGY_INCLUDES="-I./topology"
284 ISIS_TOPOLOGY_DIR="topology"
285 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
286 fi
287
288 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
289 AC_SUBST(ISIS_TOPOLOGY_DIR)
290 AC_SUBST(ISIS_TOPOLOGY_LIB)
291
292 if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
293 enable_user="quagga"
294 elif test "${enable_user}" = "no"; then
295 enable_user="root"
296 fi
297
298 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
299 enable_group="quagga"
300 elif test "${enable_group}" = "no"; then
301 enable_group="root"
302 fi
303
304 if test x"${enable_vty_group}" = x"yes" ; then
305 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
306 elif test x"${enable_vty_group}" != x""; then
307 if test x"${enable_vty_group}" != x"no"; then
308 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
309 fi
310 fi
311 AC_SUBST([enable_user])
312 AC_SUBST([enable_group])
313 AC_SUBST([enable_vty_group])
314 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
315 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
316
317 enable_configfile_mask=${enable_configfile_mask:-0600}
318 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
319
320 enable_logfile_mask=${enable_logfile_mask:-0600}
321 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
322
323 changequote(, )dnl
324
325 MULTIPATH_NUM=1
326
327 case "${enable_multipath}" in
328 [0-9]|[1-9][0-9])
329 MULTIPATH_NUM="${enable_multipath}"
330 ;;
331 "")
332 ;;
333 *)
334 echo "Please specify digit to --enable-multipath ARG."
335 exit 1
336 ;;
337 esac
338
339 changequote([, ])dnl
340
341 AC_SUBST(MULTIPATH_NUM)
342
343 dnl -------------------
344 dnl Check header files.
345 dnl -------------------
346 AC_HEADER_STDC
347 AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
348 sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
349 sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
350 sys/param.h libutil.h limits.h stdint.h])
351
352 AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
353 net/if_dl.h net/netopt.h inet/nd.h net/route.h \
354 net/if.h net/if_var.h netinet/in_var.h])
355
356 dnl V6 headers are checked below, after we check for v6
357
358 dnl check some types
359 AC_C_CONST
360 dnl AC_TYPE_PID_T
361 AC_TYPE_SIGNAL
362
363 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
364 case "$host" in
365 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
366 opsys=sol2-6
367 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
368 AC_DEFINE(SUNOS_5, 1, SunOS 5)
369 AC_CHECK_LIB(xnet, main)
370 CURSES=-lcurses
371 ;;
372 [*-sunos5.[8-9]] \
373 | [*-sunos5.1[0-9]] \
374 | [*-sunos5.1[0-9].[0-9]] \
375 | [*-solaris2.[8-9]] \
376 | [*-solaris2.1[0-9]] \
377 | [*-solaris2.1[0-9].[0-9]])
378 opsys=sol8
379 AC_DEFINE(SUNOS_59,,SunOS 5.8 up)
380 AC_DEFINE(SUNOS_5, 1, SunOS 5)
381 AC_CHECK_LIB(socket, main)
382 AC_CHECK_LIB(nsl, main)
383 AC_CHECK_LIB(umem, main)
384 CURSES=-lcurses
385 ;;
386 *-sunos5* | *-solaris2*)
387 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
388 AC_CHECK_LIB(socket, main)
389 AC_CHECK_LIB(nsl, main)
390 CURSES=-lcurses
391 ;;
392 *-linux*)
393 opsys=gnu-linux
394 AC_DEFINE(GNU_LINUX,,GNU Linux)
395 ;;
396 *-nec-sysv4*)
397 AC_CHECK_LIB(nsl, gethostbyname)
398 AC_CHECK_LIB(socket, socket)
399 ;;
400 *-openbsd*)
401 opsys=openbsd
402 AC_DEFINE(OPEN_BSD,,OpenBSD)
403 ;;
404 *-bsdi*)
405 opsys=bsdi
406 OTHER_METHOD="mtu_kvm.o"
407 AC_CHECK_LIB(kvm, main)
408 ;;
409 *-irix6.5)
410 opsys=irix
411 AC_DEFINE(IRIX_65,,IRIX 6.5)
412 ;;
413 esac
414
415 dnl ---------------------
416 dnl Integrated VTY option
417 dnl ---------------------
418 case "${enable_vtysh}" in
419 "yes") VTYSH="vtysh";
420 AC_DEFINE(VTYSH,,VTY shell)
421 AC_PATH_PROG(PERL, perl)
422 dnl Vtysh uses libreadline, which looks for termcap functions at
423 dnl configure time. We follow readline's search order.
424 dnl The required procedures are in libtermcap on NetBSD, in
425 dnl [TODO] on Linux, and in [TODO] on Solaris.
426 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
427 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
428 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
429 [AC_CHECK_LIB(ncurses, tputs,
430 LIBREADLINE="$LIBREADLINE -lncurses")]
431 )]
432 )]
433 )
434 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
435 "$LIBREADLINE")
436 if test $ac_cv_lib_readline_main = no; then
437 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
438 fi
439 AC_CHECK_HEADER(readline/history.h)
440 if test $ac_cv_header_readline_history_h = no;then
441 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
442 fi
443 AC_CHECK_LIB(readline, rl_completion_matches,
444 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
445 if test $ac_cv_lib_readline_rl_completion_matches = no; then
446 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
447 fi
448 ;;
449 "no" ) VTYSH="";;
450 * ) ;;
451 esac
452 AC_SUBST(LIBREADLINE)
453
454 dnl ----------
455 dnl PAM module
456 dnl ----------
457 if test "$with_libpam" = "yes"; then
458 AC_CHECK_HEADER(security/pam_misc.h)
459 if test "$ac_cv_header_security_pam_misc_h" = yes; then
460 AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
461 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
462 pam_conv_func="misc_conv"
463 fi
464 AC_CHECK_HEADER(security/openpam.h)
465 if test "$ac_cv_header_security_openpam_h" = yes; then
466 AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
467 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
468 pam_conv_func="openpam_ttyconv"
469 fi
470 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
471 AC_MSG_WARN([*** pam support will not be built ***])
472 with_libpam="no"
473 fi
474 fi
475
476 if test "$with_libpam" = "yes"; then
477 dnl took this test from proftpd's configure.in and suited to our needs
478 dnl -------------------------------------------------------------------------
479 dnl
480 dnl This next check looks funky due to a linker problem with some versions
481 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
482 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
483 dnl with RedHat 6.2 and Debian 2.2 or better.
484 AC_CHECK_LIB(pam, pam_start,
485 [AC_CHECK_LIB(pam, $pam_conv_func,
486 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
487 LIBPAM="-lpam"],
488 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
489 LIBPAM="-lpam -lpam_misc"]
490 )
491 ],
492
493 [AC_CHECK_LIB(pam, pam_end,
494 [AC_CHECK_LIB(pam, $pam_conv_func,
495 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
496 LIBPAM="-lpam -ldl"],
497 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
498 LIBPAM="-lpam -ldl -lpam_misc"]
499 )
500 ],AC_MSG_WARN([*** pam support will not be built ***]),
501 [-ldl])
502 ]
503 )
504 fi
505 AC_SUBST(LIBPAM)
506
507 dnl -------------------------------
508 dnl Endian-ness check
509 dnl -------------------------------
510 AC_WORDS_BIGENDIAN
511
512 dnl -------------------------------
513 dnl check the size in byte of the C
514 dnl -------------------------------
515 dnl AC_CHECK_SIZEOF(char)
516 dnl AC_CHECK_SIZEOF(int)
517 dnl AC_CHECK_SIZEOF(short)
518 dnl AC_CHECK_SIZEOF(long)
519
520 dnl ----------------------------
521 dnl check existance of functions
522 dnl ----------------------------
523 AC_CHECK_FUNCS(memset memcpy strerror inet_aton daemon snprintf vsnprintf \
524 strlcat strlcpy if_nametoindex if_indextoname getifaddrs \
525 fcntl strnlen strndup)
526 AC_CHECK_FUNCS(setproctitle, ,
527 [AC_CHECK_LIB(util, setproctitle,
528 [LIBS="$LIBS -lutil"
529 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
530 ]
531 )
532 ]
533 )
534
535 dnl ------------------------------------
536 dnl Determine routing get and set method
537 dnl ------------------------------------
538 AC_MSG_CHECKING(zebra between kernel interface method)
539 if test x"$opsys" = x"gnu-linux"; then
540 if test "${enable_netlink}" = "yes";then
541 AC_MSG_RESULT(netlink)
542 RT_METHOD=rt_netlink.o
543 AC_DEFINE(HAVE_NETLINK,,netlink)
544 netlink=yes
545 elif test "${enable_netlink}" = "no"; then
546 AC_MSG_RESULT(ioctl)
547 RT_METHOD=rt_ioctl.o
548 netlink=no
549 else
550 AC_MSG_RESULT(netlink)
551 RT_METHOD=rt_netlink.o
552 AC_DEFINE(HAVE_NETLINK,,netlink)
553 netlink=yes
554 fi
555 elif test x"$opsys" = x"sol2-6";then
556 AC_MSG_RESULT(Route socket)
557 KERNEL_METHOD="kernel_socket.o"
558 RT_METHOD="rt_socket.o"
559 elif test x"$opsys" = x"sol8";then
560 AC_MSG_RESULT(Route socket)
561 KERNEL_METHOD="kernel_socket.o"
562 RT_METHOD="rt_socket.o"
563 elif test "$opsys" = "irix" ; then
564 AC_MSG_RESULT(Route socket)
565 KERNEL_METHOD="kernel_socket.o"
566 RT_METHOD="rt_socket.o"
567 else
568 AC_TRY_RUN([#include <errno.h>
569 #include <sys/types.h>
570 #include <sys/socket.h>
571
572 main ()
573 {
574 int ac_sock;
575
576 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
577 if (ac_sock < 0 && errno == EINVAL)
578 exit (1);
579 exit (0);
580 }],
581 [KERNEL_METHOD=kernel_socket.o
582 RT_METHOD=rt_socket.o
583 AC_MSG_RESULT(socket)],
584 [RT_METHOD=rt_ioctl.o
585 AC_MSG_RESULT(ioctl)],
586 [KERNEL_METHOD=kernel_socket.o
587 RT_METHOD=rt_socket.o
588 AC_MSG_RESULT(socket)])
589 fi
590 AC_SUBST(RT_METHOD)
591 AC_SUBST(KERNEL_METHOD)
592 AC_SUBST(OTHER_METHOD)
593
594 dnl ------------------------------------
595 dnl check for broken CMSG_FIRSTHDR macro
596 dnl ------------------------------------
597 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
598 AC_RUN_IFELSE([AC_LANG_SOURCE([[
599 #ifdef SUNOS_5
600 #define _XPG4_2
601 #define __EXTENSIONS__
602 #endif
603 #include <stdlib.h>
604 #include <sys/types.h>
605 #include <sys/socket.h>
606
607 main()
608 {
609 struct msghdr msg;
610 char buf[4];
611
612 msg.msg_control = buf;
613 msg.msg_controllen = 0;
614
615 if (CMSG_FIRSTHDR(&msg) != NULL)
616 exit(0);
617 exit (1);
618 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
619 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
620
621 dnl ------------------------------
622 dnl check kernel route read method
623 dnl ------------------------------
624 AC_CACHE_CHECK(route read method check, zebra_rtread,
625 [if test "$netlink" = yes; then
626 RTREAD_METHOD="rtread_netlink.o"
627 zebra_rtread="netlink"
628 else
629 for zebra_rtread in /proc/net/route /dev/ip /dev/null;
630 do
631 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
632 done
633 case $zebra_rtread in
634 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
635 zebra_rtread="proc";;
636 "/dev/ip")
637 case "$host" in
638 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
639 zebra_rtread="sysctl";;
640 *) RTREAD_METHOD="rtread_getmsg.o"
641 zebra_rtread="getmsg";;
642 esac;;
643 *) RTREAD_METHOD="rtread_sysctl.o"
644 zebra_rtread="sysctl";;
645 esac
646 fi])
647 AC_SUBST(RTREAD_METHOD)
648
649 dnl -----------------------------
650 dnl check interface lookup method
651 dnl -----------------------------
652 IOCTL_METHOD=ioctl.o
653 AC_MSG_CHECKING(interface looking up method)
654 if test "$netlink" = yes; then
655 AC_MSG_RESULT(netlink)
656 IF_METHOD=if_netlink.o
657 elif test "$opsys" = "sol2-6";then
658 AC_MSG_RESULT(Solaris GIF)
659 IF_METHOD=if_ioctl.o
660 elif test "$opsys" = "sol8";then
661 AC_MSG_RESULT(Solaris GLIF)
662 IF_METHOD=if_ioctl_solaris.o
663 IOCTL_METHOD=ioctl_solaris.o
664 elif test "$opsys" = "irix" ; then
665 AC_MSG_RESULT(IRIX)
666 IF_METHOD=if_ioctl.o
667 elif test "$opsys" = "openbsd";then
668 AC_MSG_RESULT(openbsd)
669 IF_METHOD=if_ioctl.o
670 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
671 AC_MSG_RESULT(sysctl)
672 IF_METHOD=if_sysctl.o
673 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
674 else
675 AC_MSG_RESULT(ioctl)
676 IF_METHOD=if_ioctl.o
677 fi
678 AC_SUBST(IF_METHOD)
679 AC_SUBST(IOCTL_METHOD)
680
681 dnl ---------------------------------------------------------------
682 dnl figure out how to specify an interface in multicast sockets API
683 dnl ---------------------------------------------------------------
684 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex],,,[#ifdef HAVE_SYS_TYPES_H
685 #include <sys/types.h>
686 #endif
687 #ifdef HAVE_NETINET_IN_H
688 #include <netinet/in.h>
689 #endif])
690
691 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
692 AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
693 #include <sys/param.h>
694 #endif],[#if (defined(__FreeBSD__) && (__FreeBSD_version >= 500022 || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000)
695 return (0);
696 #else
697 #error No support for BSD struct ip_mreq hack detected
698 #endif],[AC_MSG_RESULT(yes)
699 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
700 AC_MSG_RESULT(no))
701
702 dnl -----------------------
703 dnl check proc file system.
704 dnl -----------------------
705 if test -r /proc/net/dev; then
706 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
707 IF_PROC=if_proc.o
708 fi
709
710 if test -r /proc/net/if_inet6; then
711 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
712 IF_PROC=if_proc.o
713 fi
714 AC_SUBST(IF_PROC)
715
716 dnl -----------------------------
717 dnl check ipforward detect method
718 dnl -----------------------------
719 AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
720 [for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
721 do
722 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
723 done
724 case $zebra_ipforward_path in
725 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
726 zebra_ipforward_path="proc";;
727 "/dev/ip")
728 case "$host" in
729 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
730 zebra_ipforward_path="ews";;
731 *-freebsd*) IPFORWARD=ipforward_sysctl.o
732 zebra_ipforward_path="sysctl";;
733 *) IPFORWARD=ipforward_solaris.o
734 zebra_ipforward_path="solaris";;
735 esac;;
736 *) IPFORWARD=ipforward_sysctl.o
737 zebra_ipforward_path="sysctl";;
738 esac])
739 AC_SUBST(IPFORWARD)
740
741 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
742
743 dnl ----------
744 dnl IPv6 check
745 dnl ----------
746 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
747 if test "${enable_ipv6}" = "no"; then
748 AC_MSG_RESULT(disabled)
749 else
750 dnl ----------
751 dnl INRIA IPv6
752 dnl ----------
753 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
754 zebra_cv_ipv6=yes
755 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
756 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
757 RIPNGD="ripngd"
758 OSPF6D="ospf6d"
759 LIB_IPV6=""
760 AC_MSG_RESULT(INRIA IPv6)
761 dnl ---------
762 dnl KAME IPv6
763 dnl ---------
764 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
765 zebra_cv_ipv6=yes
766 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
767 AC_DEFINE(KAME,1,KAME IPv6)
768 RIPNGD="ripngd"
769 OSPF6D="ospf6d"
770 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
771 LIB_IPV6="-L/usr/local/v6/lib -linet6"
772 fi
773 AC_MSG_RESULT(KAME)
774 dnl -------------------------
775 dnl MUSICA IPv6
776 dnl default host check
777 dnl It is not used by Kheops
778 dnl -------------------------
779 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
780 zebra_cv_ipv6=yes
781 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
782 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
783 AC_DEFINE(KAME,1,KAME IPv6 stack)
784 RIPNGD="ripngd"
785 OSPF6D="ospf6d"
786 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
787 LIB_IPV6="-L/usr/local/v6/lib -linet6"
788 fi
789 AC_MSG_RESULT(MUSICA)
790 dnl ---------
791 dnl NRL check
792 dnl ---------
793 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
794 zebra_cv_ipv6=yes
795 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
796 AC_DEFINE(NRL,1,NRL)
797 RIPNGD="ripngd"
798 OSPF6D="ospf6d"
799 if test x"$opsys" = x"bsdi";then
800 AC_DEFINE(BSDI_NRL,,BSDI)
801 AC_MSG_RESULT(BSDI_NRL)
802 else
803 AC_MSG_RESULT(NRL)
804 fi
805 dnl ------------------------------------
806 dnl Solaris 9, 10 and potentially higher
807 dnl ------------------------------------
808 elif test x"$opsys" = x"sol8"; then
809 zebra_cv_ipv6=yes;
810 AC_DEFINE(HAVE_IPV6, 1, IPv6)
811 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
812 RIPNGD="ripngd"
813 OSPF6D="ospf6d"
814 AC_MSG_RESULT(Solaris IPv6)
815 dnl ----------
816 dnl Linux IPv6
817 dnl ----------
818 elif test "${enable_ipv6}" = "yes"; then
819 AC_EGREP_CPP(yes, [
820 #include <linux/version.h>
821 /* 2.1.128 or later */
822 #if LINUX_VERSION_CODE >= 0x020180
823 yes
824 #endif],
825 [zebra_cv_ipv6=yes
826 zebra_cv_linux_ipv6=yes
827 AC_MSG_RESULT(Linux IPv6)])
828 else
829 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
830 then
831 zebra_cv_ipv6=yes
832 zebra_cv_linux_ipv6=yes
833 AC_MSG_RESULT(Linux IPv6)
834 fi
835 fi
836
837 if test "$zebra_cv_linux_ipv6" = "yes";then
838 AC_MSG_CHECKING(whether libc has IPv6 support)
839 AC_TRY_LINK([#include <netinet/in.h>
840 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
841 [AC_MSG_RESULT(yes)
842 zebra_cv_ipv6=yes
843 zebra_cv_linux_ipv6=yes],
844 [AC_MSG_RESULT(no)
845 zebra_cv_ipv6=no
846 zebra_cv_linux_ipv6=no])
847 fi
848
849 if test "$zebra_cv_linux_ipv6" = "yes";then
850 AC_MSG_CHECKING(for GNU libc >= 2.1)
851 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
852 AC_EGREP_CPP(yes, [
853 #include <features.h>
854 #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
855 yes
856 #endif],
857 [glibc=yes
858 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
859 AC_MSG_RESULT(yes)],
860 AC_MSG_RESULT(no)
861 )
862 RIPNGD="ripngd"
863 OSPF6D="ospf6d"
864 if test "$glibc" != "yes"; then
865 INCLUDES="-I/usr/inet6/include"
866 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
867 LIB_IPV6="-L/usr/inet6/lib -linet6"
868 fi
869 fi
870 fi
871
872 dnl -----------------------
873 dnl Set IPv6 related values
874 dnl -----------------------
875 LIBS="$LIB_IPV6 $LIBS"
876 AC_SUBST(LIB_IPV6)
877
878 if test x"$RIPNGD" = x""; then
879 AC_MSG_RESULT(IPv4 only)
880 fi
881 fi
882
883 dnl ------------------
884 dnl IPv6 header checks
885 dnl ------------------
886 if test "x${zebra_cv_ipv6}" = "xyes"; then
887 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
888 netinet6/in6_var.h netinet6/nd6.h])
889 fi
890
891 dnl --------------------
892 dnl Daemon disable check
893 dnl --------------------
894 if test "${enable_zebra}" = "no";then
895 ZEBRA=""
896 else
897 ZEBRA="zebra"
898 fi
899
900 if test "${enable_bgpd}" = "no";then
901 BGPD=""
902 else
903 BGPD="bgpd"
904 fi
905
906 if test "${enable_ripd}" = "no";then
907 RIPD=""
908 else
909 RIPD="ripd"
910 fi
911
912 if test "${enable_ospfd}" = "no";then
913 OSPFD=""
914 else
915 OSPFD="ospfd"
916 fi
917
918 if test "${enable_watchquagga}" = "no";then
919 WATCHQUAGGA=""
920 else
921 WATCHQUAGGA="watchquagga"
922 fi
923
924 OSPFCLIENT=""
925 if test "${enable_opaque_lsa}" = "yes"; then
926 if test "${enable_ospfapi}" != "no";then
927 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
928
929 if test "${enable_ospfclient}" != "no";then
930 OSPFCLIENT="ospfclient"
931 fi
932 fi
933
934 fi
935
936 case "${enable_ripngd}" in
937 "yes") RIPNGD="ripngd";;
938 "no" ) RIPNGD="";;
939 * ) ;;
940 esac
941
942 case "${enable_ospf6d}" in
943 "yes") OSPF6D="ospf6d";;
944 "no" ) OSPF6D="";;
945 * ) ;;
946 esac
947
948 case "${enable_isisd}" in
949 "yes") ISISD="isisd";;
950 "no" ) ISISD="";;
951 * ) ;;
952 esac
953
954 if test "${enable_bgp_announce}" = "no";then
955 AC_DEFINE(DISABLE_BGP_ANNOUNCE,,Disable BGP installation to zebra)
956 fi
957
958 AC_SUBST(ZEBRA)
959 AC_SUBST(BGPD)
960 AC_SUBST(RIPD)
961 AC_SUBST(RIPNGD)
962 AC_SUBST(OSPFD)
963 AC_SUBST(OSPF6D)
964 AC_SUBST(WATCHQUAGGA)
965 AC_SUBST(ISISD)
966 AC_SUBST(VTYSH)
967 AC_SUBST(INCLUDES)
968 AC_SUBST(CURSES)
969 AC_SUBST(OSPFCLIENT)
970 AC_SUBST(OSPFAPI)
971 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
972 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
973 AC_CHECK_LIB(crypt, crypt)
974 AC_CHECK_LIB(resolv, res_init)
975 AC_CHECK_LIB(m, main)
976
977 dnl ---------------------------------------------------
978 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
979 dnl ---------------------------------------------------
980 AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
981 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
982 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
983
984 dnl ---------------------------
985 dnl check system has GNU regexp
986 dnl ---------------------------
987 dnl AC_MSG_CHECKING(whether system has GNU regex)
988 AC_CHECK_LIB(c, regexec,
989 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
990 LIB_REGEX=""],
991 [LIB_REGEX="regex.o"])
992 AC_SUBST(LIB_REGEX)
993
994 dnl ------------------
995 dnl check Net-SNMP library
996 dnl ------------------
997 if test "${enable_snmp}" = "yes"; then
998 LIBS="${LIBS} -lcrypto"
999 AC_CHECK_LIB(netsnmp, asn_parse_int,
1000 [AC_DEFINE(HAVE_NETSNMP,,Net SNMP)
1001 AC_DEFINE(HAVE_SNMP,,SNMP)
1002 LIBS="${LIBS} -lnetsnmp"],
1003 [AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])])
1004
1005 for ac_snmp in /usr/include \
1006 /usr/local/include \
1007 /dev/null; do
1008 test -f "${ac_snmp}/net-snmp/library/asn1.h" && break
1009 done
1010
1011 case ${ac_snmp} in
1012 /dev/null)
1013 AC_MSG_ERROR([--enable-snmp given, but can not find header])
1014 ;;
1015 *)
1016 SNMP_INCLUDES="-I${ac_snmp}/net-snmp"
1017 SNMP_INCLUDES="${SNMP_INCLUDES} -I${ac_snmp}/net-snmp/library"
1018 ;;
1019 esac
1020
1021 AC_SUBST(SNMP_INCLUDES)
1022 fi
1023
1024 dnl ----------------------------
1025 dnl check sa_len of sockaddr
1026 dnl ----------------------------
1027 AC_MSG_CHECKING(whether struct sockaddr has a sa_len field)
1028 AC_TRY_COMPILE([#include <sys/types.h>
1029 #include <sys/socket.h>
1030 ],[static struct sockaddr ac_i;int ac_j = sizeof (ac_i.sa_len);],
1031 [AC_MSG_RESULT(yes)
1032 AC_DEFINE(HAVE_SA_LEN,,sa_len)],
1033 AC_MSG_RESULT(no))
1034
1035 dnl ----------------------------
1036 dnl check sin_len of sockaddr_in
1037 dnl ----------------------------
1038 AC_MSG_CHECKING(whether struct sockaddr_in has a sin_len field)
1039 AC_TRY_COMPILE([#include <sys/types.h>
1040 #include <netinet/in.h>
1041 ],[static struct sockaddr_in ac_i;int ac_j = sizeof (ac_i.sin_len);],
1042 [AC_MSG_RESULT(yes)
1043 AC_DEFINE(HAVE_SIN_LEN,,sin_len)],
1044 AC_MSG_RESULT(no))
1045
1046 dnl ----------------------------
1047 dnl check sun_len of sockaddr_un
1048 dnl ----------------------------
1049 AC_MSG_CHECKING(whether struct sockaddr_un has a sun_len field)
1050 AC_TRY_COMPILE([#include <sys/types.h>
1051 #include <sys/un.h>
1052 ],[static struct sockaddr_un ac_i;int ac_j = sizeof (ac_i.sun_len);],
1053 [AC_MSG_RESULT(yes)
1054 AC_DEFINE(HAVE_SUN_LEN,,sun_len)],
1055 AC_MSG_RESULT(no))
1056
1057 dnl -----------------------------------
1058 dnl check sin6_scope_id of sockaddr_in6
1059 dnl -----------------------------------
1060 if test "$zebra_cv_ipv6" = yes; then
1061 AC_MSG_CHECKING(whether struct sockaddr_in6 has a sin6_scope_id field)
1062 AC_TRY_COMPILE([#include <sys/types.h>
1063 #include <netinet/in.h>
1064 ],[static struct sockaddr_in6 ac_i;int ac_j = sizeof (ac_i.sin6_scope_id);],
1065 [AC_MSG_RESULT(yes)
1066 AC_DEFINE(HAVE_SIN6_SCOPE_ID,,scope id)],
1067 AC_MSG_RESULT(no))
1068 fi
1069
1070 dnl ----------------------------
1071 dnl check socklen_t exist or not
1072 dnl ----------------------------
1073 AC_MSG_CHECKING(whther socklen_t is defined)
1074 AC_TRY_COMPILE([#include <sys/types.h>
1075 #include <sys/socket.h>
1076 #include <netinet/in.h>
1077 ],[socklen_t ac_x;],
1078 [AC_MSG_RESULT(yes)
1079 AC_DEFINE(HAVE_SOCKLEN_T,,socklen_t)],
1080 AC_MSG_RESULT(no))
1081
1082 dnl ------------------------
1083 dnl check struct sockaddr_dl
1084 dnl ------------------------
1085 AC_MSG_CHECKING(whether struct sockaddr_dl exist)
1086 AC_EGREP_HEADER(sockaddr_dl,
1087 net/if_dl.h,
1088 [AC_MSG_RESULT(yes)
1089 AC_DEFINE(HAVE_SOCKADDR_DL,,sockaddr_dl)],
1090 AC_MSG_RESULT(no))
1091
1092 dnl --------------------------
1093 dnl check structure ifaliasreq
1094 dnl --------------------------
1095 AC_MSG_CHECKING(whether struct ifaliasreq exist)
1096 AC_EGREP_HEADER(ifaliasreq,
1097 net/if.h,
1098 [AC_MSG_RESULT(yes)
1099 AC_DEFINE(HAVE_IFALIASREQ,,ifaliasreq)],
1100 AC_MSG_RESULT(no))
1101
1102 dnl ----------------------------
1103 dnl check structure in6_aliasreq
1104 dnl ----------------------------
1105 AC_MSG_CHECKING(whether struct in6_aliasreq exist)
1106 AC_EGREP_HEADER(in6_aliasreq,
1107 netinet6/in6_var.h,
1108 [AC_MSG_RESULT(yes)
1109 AC_DEFINE(HAVE_IN6_ALIASREQ,,in6_aliasreq)],
1110 AC_MSG_RESULT(no))
1111
1112 dnl -----------------------------------
1113 dnl check ifra_lifetime of in6_aliasreq
1114 dnl -----------------------------------
1115 AC_MSG_CHECKING(whether in6_aliasreq.ifra_lifetime exist)
1116 AC_TRY_COMPILE([#include <sys/types.h>
1117 #include <netinet6/in6_var.h>
1118 ],[static struct if6_aliasreq ac_i;int ac_j = sizeof (ac_i.ifra_lifetime);],
1119 [AC_MSG_RESULT(yes)
1120 AC_DEFINE(HAVE_IFRA_LIFETIME,,Have in6_aliasreq.ifra_lifetime)],
1121 AC_MSG_RESULT(no))
1122
1123 dnl ---------------------------
1124 dnl check structure rt_addrinfo
1125 dnl ---------------------------
1126 AC_MSG_CHECKING(whether struct rt_addrinfo exist)
1127 AC_EGREP_HEADER(rt_addrinfo,
1128 net/route.h,
1129 [AC_MSG_RESULT(yes)
1130 AC_DEFINE(HAVE_RT_ADDRINFO,,rt_addrinfo)],
1131 AC_MSG_RESULT(no))
1132
1133 dnl --------------------------
1134 dnl check structure in_pktinfo
1135 dnl --------------------------
1136 AC_MSG_CHECKING(whether struct in_pktinfo exist)
1137 AC_TRY_COMPILE([#include <netinet/in.h>
1138 ],[struct in_pktinfo ac_x;],
1139 [AC_MSG_RESULT(yes)
1140 AC_DEFINE(HAVE_INPKTINFO,,in_pktinfo)],
1141 AC_MSG_RESULT(no))
1142
1143 dnl ----------------------------------
1144 dnl check struct nd_opt_homeagent_info
1145 dnl ----------------------------------
1146 AC_MSG_CHECKING(whether struct nd_opt_homeagent_info exist)
1147 AC_EGREP_HEADER(nd_opt_homeagent_info,
1148 netinet/icmp6.h,
1149 [AC_MSG_RESULT(yes)
1150 AC_DEFINE(HAVE_ND_OPT_HOMEAGENT_INFO,,nd_opt_homeagent_info)],
1151 AC_MSG_RESULT(no))
1152
1153 dnl --------------------------------
1154 dnl check struct nd_opt_adv_interval
1155 dnl --------------------------------
1156 AC_MSG_CHECKING(whether struct nd_opt_adv_interval exist)
1157 AC_EGREP_HEADER(nd_opt_adv_interval,
1158 netinet/icmp6.h,
1159 [AC_MSG_RESULT(yes)
1160 AC_DEFINE(HAVE_ND_OPT_ADV_INTERVAL,,nd_opt_adv_interval)],
1161 AC_MSG_RESULT(no))
1162
1163 dnl ------------------------------------
1164 dnl check fields in nd_opt_adv_interval
1165 dnl ------------------------------------
1166 AC_MSG_CHECKING(whether nd_opt_ai_type field exist)
1167 AC_EGREP_HEADER(nd_opt_ai_type,
1168 netinet/icmp6.h,
1169 [AC_MSG_RESULT(yes)
1170 AC_DEFINE(HAVE_ND_OPT_ADV_INTERVAL_AI_FIELDS,,nd_opt_ai_type)],
1171 AC_MSG_RESULT(no))
1172
1173 dnl --------------------------------------
1174 dnl checking for getrusage struct and call
1175 dnl --------------------------------------
1176 AC_MSG_CHECKING(whether getrusage is available)
1177 AC_TRY_COMPILE([#include <sys/resource.h>
1178 ],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1179 [AC_MSG_RESULT(yes)
1180 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1181 AC_MSG_RESULT(no))
1182
1183 dnl -------------------
1184 dnl capabilities checks
1185 dnl -------------------
1186 if test "${enable_capabilities}" != "no"; then
1187 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1188 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1189 [AC_MSG_RESULT(yes)
1190 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1191 quagga_ac_keepcaps="yes"],
1192 AC_MSG_RESULT(no)
1193 )
1194 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1195 AC_CHECK_HEADERS(sys/capability.h)
1196 fi
1197 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1198 AC_CHECK_LIB(cap, cap_init,
1199 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1200 LIBCAP="-lcap"
1201 quagga_ac_lcaps="yes"]
1202 )
1203 else
1204 AC_CHECK_HEADERS(priv.h,
1205 [AC_MSG_CHECKING(Solaris style privileges are available)
1206 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1207 [AC_MSG_RESULT(yes)
1208 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1209 quagga_ac_scaps="yes"],
1210 AC_MSG_RESULT(no)
1211 )
1212 ]
1213 )
1214 fi
1215 if test x"${quagga_ac_scaps}" = x"yes" \
1216 -o x"${quagga_ac_lcaps}" = x"yes"; then
1217 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1218 fi
1219 fi
1220 AC_SUBST(LIBCAP)
1221
1222 dnl -------------------
1223 dnl test for ucontext.h
1224 dnl -------------------
1225 AC_CHECK_HEADERS(ucontext.h)
1226
1227 dnl ---------------------------
1228 dnl check for glibc 'backtrace'
1229 dnl ---------------------------
1230 if test "${glibc}" = "yes"; then
1231 AC_CHECK_HEADER(execinfo.h)
1232 fi
1233 if test x"${ac_cv_header_execinfo_h}" = x"yes"; then
1234 AC_CHECK_FUNC(backtrace,
1235 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)]
1236 )
1237 fi
1238
1239 dnl -----------------------------------------
1240 dnl check for malloc mallinfo struct and call
1241 dnl this must try and link using LIBS, in
1242 dnl order to check no alternative allocator
1243 dnl has been specified, which might not provide
1244 dnl mallinfo, e.g. such as Umem on Solaris.
1245 dnl -----------------------------------------
1246 AC_CHECK_HEADERS(malloc.h,
1247 [AC_MSG_CHECKING(whether mallinfo is available)
1248 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1249 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1250 [AC_MSG_RESULT(yes)
1251 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1252 AC_MSG_RESULT(no)
1253 )
1254 ]
1255 )
1256
1257 dnl ----------
1258 dnl configure date
1259 dnl ----------
1260 CONFDATE=`date '+%Y%m%d'`
1261 AC_SUBST(CONFDATE)
1262
1263 dnl ------------------------------
1264 dnl set paths for state directory
1265 dnl ------------------------------
1266 if test "${prefix}" = "NONE"; then
1267 quagga_statedir_prefix="";
1268 else
1269 quagga_statedir_prefix=${prefix}
1270 fi
1271 if test "${localstatedir}" = '${prefix}/var'; then
1272 AC_CACHE_CHECK(state directory,ac_statedir,
1273 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1274 ${quagga_statedir_prefix}/var/adm dnl
1275 ${quagga_statedir_prefix}/etc dnl
1276 /var/run dnl
1277 /var/adm dnl
1278 /etc dnl
1279 /dev/null;
1280 do
1281 test -d $QUAGGA_STATE_DIR && break
1282 done
1283 quagga_statedir=$QUAGGA_STATE_DIR])
1284 else
1285 quagga_statedir=${localstatedir}
1286 AC_MSG_CHECKING(directory to use for state file)
1287 AC_MSG_RESULT(${quagga_statedir})
1288 AC_SUBST(quagga_statedir)
1289 fi
1290 if test $quagga_statedir = "/dev/null"; then
1291 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1292 fi
1293
1294 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1295 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1296 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1297 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1298 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1299 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1300 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1301 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1302 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1303 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1304 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1305 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1306 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1307 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1308 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1309 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1310 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1311
1312 dnl -------------------------------
1313 dnl Quagga sources should always be
1314 dnl current wrt interfaces. Dont
1315 dnl allow deprecated interfaces to
1316 dnl be exposed.
1317 dnl -------------------------------
1318 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1319
1320 dnl ---------------------------
1321 dnl Check htonl works correctly
1322 dnl ---------------------------
1323 AC_MSG_CHECKING(for working htonl)
1324 AC_CACHE_VAL(ac_cv_htonl_works, [
1325 AC_TRY_LINK([#ifdef HAVE_SYS_TYPES_H
1326 #include <sys/types.h>
1327 #endif
1328 #ifdef HAVE_NETDB_H
1329 #include <netdb.h>
1330 #endif
1331 #ifdef HAVE_NETINET_IN_H
1332 #include <netinet/in.h>
1333 #endif],
1334 [htonl (0);],
1335 ac_cv_htonl_works=yes,
1336 ac_cv_htonl_works=no)])
1337 AC_MSG_RESULT($ac_cv_htonl_works)
1338
1339 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
1340 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1341 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
1342 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
1343 pkgsrc/Makefile
1344 redhat/quagga.spec
1345 lib/version.h
1346 doc/defines.texi
1347 isisd/topology/Makefile
1348 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1349 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1350 AC_CONFIG_FILES([solaris/Makefile])
1351
1352 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1353 ## Hack, but working solution to avoid rebuilding of quagga.info.
1354 ## It's already in CVS until texinfo 4.7 is more common.
1355 AC_CONFIG_COMMANDS([info-time],[touch doc/quagga.info])
1356 AC_OUTPUT
1357
1358 echo "
1359 Quagga configuration
1360 --------------------
1361 quagga version : ${PACKAGE_VERSION}
1362 host operationg system : ${host_os}
1363 source code location : ${srcdir}
1364 compiler : ${CC}
1365 compiler flags : ${CFLAGS}
1366 includes : ${INCLUDES} ${SNMP_INCLUDES}
1367 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE}
1368 state file directory : ${quagga_statedir}
1369 config file directory : `eval echo \`echo ${sysconfdir}\``
1370 example directory : `eval echo \`echo ${exampledir}\``
1371 user to run as : ${enable_user}
1372 group to run as : ${enable_group}
1373 group for vty sockets : ${enable_vty_group}
1374 config file mask : ${enable_configfile_mask}
1375 log file mask : ${enable_logfile_mask}
1376
1377 The above user and group must have read/write access to the state file
1378 directory and to the config files in the config file directory.
1379 "