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