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