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