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