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