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