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