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