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