]> git.proxmox.com Git - mirror_frr.git/blame - configure.ac
BGP: crash in update_subgroup_merge()
[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##
e8f2984c 8AC_PREREQ(2.53)
7ea487bc 9
a4b5665f 10AC_INIT(Quagga, 0.99.23, [https://bugzilla.quagga.net])
fa1253d0 11AC_CONFIG_SRCDIR(lib/zebra.h)
62c9f504 12AC_CONFIG_MACRO_DIR([m4])
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)
303bb005 22AC_CONFIG_HEADERS(config.h)
7ea487bc 23
0be793e6 24AC_PATH_PROG(PERL, perl)
7ec57366
JJ
25AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
26if test "x$GAWK" = "xnot-in-PATH" ; then
27 AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
28BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
29fi
03ecfb67 30AC_ARG_VAR([GAWK],[GNU AWK])
31
d6b72f7a 32dnl default is to match previous behavior
c4f0efe6 33exampledir=${sysconfdir}
d6b72f7a 34AC_ARG_ENABLE([exampledir],
35 AC_HELP_STRING([--enable-exampledir],
36 [specify alternate directory for examples]),
37 exampledir="$enableval",)
c4f0efe6 38dnl XXX add --exampledir to autoconf standard directory list somehow
d6b72f7a 39AC_SUBST(exampledir)
40
cbd04084 41dnl default is to match previous behavior
42pkgsrcrcdir=""
43pkgsrcdir=""
44AC_ARG_ENABLE([pkgsrcrcdir],
45 AC_HELP_STRING([--enable-pkgsrcrcdir],
46 [specify directory for rc.d scripts]),
47 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
48dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
49AC_SUBST(pkgsrcdir)
50AC_SUBST(pkgsrcrcdir)
51
b05a1c8b
DS
52LIBS="$LIBS -L/usr/include/json/ -ljson"
53
7ea487bc 54dnl ------------
55dnl Check CFLAGS
56dnl ------------
57AC_ARG_WITH(cflags,
58[ --with-cflags Set CFLAGS for use in compilation.])
59if test "x$with_cflags" != "x" ; then
60 CFLAGS="$with_cflags" ; cflags_specified=yes ;
61elif test -n "$CFLAGS" ; then
62 cflags_specified=yes ;
63fi
64
3f9c7369
DS
65AC_ARG_ENABLE(tcmalloc,
66[ --enable-tcmalloc Turn on tcmalloc],
67[case "${enableval}" in
68 yes) tcmalloc_enabled=true
69LIBS="$LIBS -ltcmalloc_minimal"
70 ;;
71 no) tcmalloc_enabled=false ;;
72 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
73esac],[tcmalloc_enabled=false])
74
75
1969e4b9 76dnl --------------------
77dnl Check CC and friends
78dnl --------------------
46bc0e43 79AC_LANG([C])
7ea487bc 80AC_PROG_CC
1969e4b9 81AC_PROG_CPP
46bc0e43 82AM_PROG_CC_C_O
1969e4b9 83AC_PROG_EGREP
553bdfe3
GT
84
85dnl autoconf 2.59 appears not to support AC_PROG_SED
86dnl AC_PROG_SED
87AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
1969e4b9 88
fa482834
PJ
89dnl pdflatex and latexmk are needed to build HACKING.pdf
90AC_CHECK_PROG([PDFLATEX],[pdflatex],[pdflatex],[/bin/false])
91AC_CHECK_PROG([LATEXMK],[latexmk],[latexmk],[/bin/false])
92if test "x$PDFLATEX" = "x/bin/false" -o "x$LATEXMK" = "x/bin/false"; then
93 AC_MSG_WARN([Will not be able to make PDF versions of TeX documents])
94else
95 HAVE_LATEX=true
96fi
97AM_CONDITIONAL([HAVE_LATEX], [test "x$HAVE_LATEX" = "xtrue"])
98
1969e4b9 99dnl ------------------------------------------------------------------
100dnl Intel compiler check. Although Intel tries really hard to make icc
101dnl look like gcc, there are some differences. It's very verbose with
102dnl -Wall and it doesn't support the individual -W options.
103dnl ------------------------------------------------------------------
6a4b8832 104if test "x${GCC}" = "xyes" ; then
105 COMPILER="GCC"
106 AC_MSG_CHECKING([whether we are using the Intel compiler])
107 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
108 [AC_MSG_RESULT([no])],
109 [COMPILER="ICC"
110 AC_MSG_RESULT([yes])]
111 )
112else
113 AC_MSG_CHECKING([whether we are using SunPro compiler])
114 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
115 [AC_MSG_RESULT([no])],
116 [COMPILER="SUNPRO"
117 AC_MSG_RESULT([yes])]
118 )
119fi
7ea487bc 120
a49c0ff6 121dnl ---------------------------------------------
7ea487bc 122dnl If CLFAGS doesn\'t exist set default value
a49c0ff6 123dnl AC_PROG_CC will have set minimal default
124dnl already, eg "-O2 -g" for gcc, "-g" for others
27eebb3e 125dnl (Wall is gcc specific... have to make sure
126dnl gcc is being used before setting it)
127dnl
6a4b8832 128dnl Intel icc 8.0 also sets __GNUC__,
129dnl but doesn't support all these fancy -W options.
1969e4b9 130dnl Intel compiler warnings we ignore:
131dnl 279: controlling expression is constant.
132dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
133dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
134dnl macro.
135dnl 981: operands are evaluated in unspecified order.
6a4b8832 136dnl
137dnl Sun Studio 10 / SunPro 5.7 is also supported,
138dnl so lets set some sane CFLAGS for it.
139dnl ---------------------------------------------
1969e4b9 140
6a4b8832 141AC_MSG_CHECKING([whether to set a default CFLAGS])
142if test "x${cflags_specified}" = "x" ; then
143 case ${COMPILER} in
144 "ICC")
fd76f41a 145 CFLAGS="-Os -g -Wall"
6a4b8832 146 AC_MSG_RESULT([Intel default])
147 ;;
148 "GCC")
5fa05099 149 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
6a4b8832 150 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
151 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
152 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
153 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
154 # TODO: conditionally addd -Wpacked if handled
155 AC_MSG_RESULT([gcc default])
156 ;;
157 "SUNPRO")
105b8239 158 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
6a4b8832 159 AC_MSG_RESULT([SunPro default])
160 ;;
161 *)
162 AC_MSG_RESULT([unknown compiler])
163 ;;
164 esac
165else
166 AC_MSG_RESULT([CFLAGS supplied by user])
1969e4b9 167fi
168
aa9584c1
DS
169if test x"${enable_werror}" = x"yes" ; then
170 WERROR="-Werror"
171fi
172AC_SUBST(WERROR)
173
7ea487bc 174dnl --------------
175dnl Check programs
176dnl --------------
7ea487bc 177AC_PROG_INSTALL
6f0e3f6e 178AC_PROG_LN_S
7ea487bc 179AC_PROG_MAKE_SET
180AC_CHECK_TOOL(AR, ar)
7ea487bc 181
105b8239
PJ
182dnl ---------------------------
183dnl We, perhaps unfortunately,
184dnl depend on GNU Make specific
185dnl constructs.
186dnl Give the user a warning if
187dnl not GNU Make.
188dnl ---------------------------
189AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
190 [quagga_cv_gnu_make=no
191 if ${MAKE-make} --version 2>/dev/null | \
192 grep '^GNU Make ' >/dev/null ; then
193 quagga_cv_gnu_make=yes;
194 fi
195 ]
196)
197
d46d2a24
PJ
198dnl -----------------
199dnl System extensions
200dnl -----------------
d46d2a24 201AC_GNU_SOURCE
7ea487bc 202
87efd646 203dnl -------
204dnl libtool
205dnl -------
0fc42949 206AC_PROG_LIBTOOL
87efd646 207
7ea487bc 208dnl ----------------------
209dnl Packages configuration
210dnl ----------------------
1080c13f
JN
211AC_ARG_WITH(pkg-extra-version,
212 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
213 [EXTRAVERSION=$withval],)
0be793e6
DL
214AC_ARG_WITH(pkg-git-version,
215 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
a16dcf7c 216 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
7ea487bc 217AC_ARG_ENABLE(vtysh,
fc9d0745 218[ --enable-vtysh include integrated vty shell for Quagga])
7ea487bc 219AC_ARG_ENABLE(ipv6,
220[ --disable-ipv6 turn off IPv6 related features and daemons])
cbcd9bfc
JT
221AC_ARG_ENABLE(doc,
222[ --disable-doc do not build docs])
7ea487bc 223AC_ARG_ENABLE(zebra,
224[ --disable-zebra do not build zebra daemon])
225AC_ARG_ENABLE(bgpd,
226[ --disable-bgpd do not build bgpd])
227AC_ARG_ENABLE(ripd,
228[ --disable-ripd do not build ripd])
229AC_ARG_ENABLE(ripngd,
230[ --disable-ripngd do not build ripngd])
231AC_ARG_ENABLE(ospfd,
232[ --disable-ospfd do not build ospfd])
7ea487bc 233AC_ARG_ENABLE(ospf6d,
234[ --disable-ospf6d do not build ospf6d])
5734509c
PJ
235AC_ARG_ENABLE(babeld,
236[ --disable-babeld do not build babeld])
d0199430 237AC_ARG_ENABLE(watchquagga,
238[ --disable-watchquagga do not build watchquagga])
9e867fe6 239AC_ARG_ENABLE(isisd,
ae399ab0 240[ --enable-isisd build isisd])
97cee877
GT
241AC_ARG_ENABLE(solaris,
242[ --enable-solaris build solaris])
7ea487bc 243AC_ARG_ENABLE(bgp-announce,
244[ --disable-bgp-announce, turn off BGP route announcement])
245AC_ARG_ENABLE(netlink,
246[ --enable-netlink force to use Linux netlink interface])
247AC_ARG_ENABLE(broken-aliases,
248[ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
249AC_ARG_ENABLE(snmp,
d6be5fb9 250[ --enable-snmp=ARG enable SNMP support (smux or agentx)])
7ea487bc 251AC_ARG_WITH(libpam,
252[ --with-libpam use libpam for PAM support in vtysh])
71c0fb50 253AC_ARG_ENABLE(tcp-zebra,
7ea487bc 254[ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
7ea487bc 255AC_ARG_ENABLE(opaque-lsa,
36de261b 256 AC_HELP_STRING([--disable-opaque-lsa],[do not build OSPF Opaque-LSA with OSPFAPI support (RFC2370)]))
1ef74ef7 257AC_ARG_ENABLE(ospfapi,
36de261b 258[ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database])
1ef74ef7 259AC_ARG_ENABLE(ospfclient,
260[ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
261 (this is the default if --disable-ospfapi is set)])
7ea487bc 262AC_ARG_ENABLE(ospf-te,
36de261b 263 AC_HELP_STRING([--disable-ospf-te],[disable Traffic Engineering Extension to OSPF]))
7ea487bc 264AC_ARG_ENABLE(multipath,
265[ --enable-multipath=ARG enable multipath function, ARG must be digit])
fe86b484
PKJ
266AC_ARG_ENABLE(user,
267 AC_HELP_STRING([--enable-user=user], [user to run Quagga suite as (default quagga)]))
268AC_ARG_ENABLE(group,
269 AC_HELP_STRING([--enable-group=group], [group to run Quagga suite as (default quagga)]))
edd7c245 270AC_ARG_ENABLE(vty_group,
6b6942f9 271[ --enable-vty-group=ARG set vty sockets to have specified group as owner])
aa593d5e 272AC_ARG_ENABLE(configfile_mask,
273[ --enable-configfile-mask=ARG set mask for config files])
274AC_ARG_ENABLE(logfile_mask,
275[ --enable-logfile-mask=ARG set mask for log files])
576b6b5d
DS
276AC_ARG_ENABLE(shell_access
277[ --enable-shell-access Allow users to access shell/telnet/ssh])
edd7c245 278
71c0fb50 279AC_ARG_ENABLE(rtadv,
6b6942f9 280[ --disable-rtadv disable IPV6 router advertisement feature])
ca776988 281AC_ARG_ENABLE(irdp,
6b6942f9 282[ --enable-irdp enable IRDP server support in zebra])
f695b01f 283AC_ARG_ENABLE(isis_topology,
284[ --enable-isis-topology enable IS-IS topology generator])
41d3fc96 285AC_ARG_ENABLE(capabilities,
286[ --disable-capabilities disable using POSIX capabilities])
47f6aef0
SH
287AC_ARG_ENABLE(rusage,
288[ --disable-rusage disable using getrusage])
6b6942f9 289AC_ARG_ENABLE(gcc_ultra_verbose,
290[ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
3453a712
PJ
291AC_ARG_ENABLE(linux24_tcp_md5,
292[ --enable-linux24-tcp-md5 enable support for old, Linux-2.4 RFC2385 patch])
3cade26f 293AC_ARG_ENABLE(gcc-rdynamic,
8c99b4c1
DL
294[ --enable-gcc-rdynamic enable linking with -rdynamic for better backtraces (default if gcc)])
295AC_ARG_ENABLE(backtrace,
296[ --disable-backtrace, disable crash backtraces (default autodetect)])
924b9229 297AC_ARG_ENABLE(time-check,
298[ --disable-time-check disable slow thread warning messages])
25f45887
JJ
299AC_ARG_ENABLE(pcreposix,
300[ --enable-pcreposix enable using PCRE Posix libs for regex functions])
5adc2528
AS
301AC_ARG_ENABLE(fpm,
302[ --enable-fpm enable Forwarding Plane Manager support])
aa9584c1
DS
303AC_ARG_ENABLE(werror,
304 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
6b6942f9 305
306if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
307 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
308 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
309 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
310 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
311fi
7ea487bc 312
8c99b4c1
DL
313if test x"${enable_gcc_rdynamic}" != x"no" ; then
314 if test x"${enable_gcc_rdynamic}" = x"yes" -o x"$COMPILER" = x"GCC"; then
315 LDFLAGS="${LDFLAGS} -rdynamic"
316 fi
3cade26f 317fi
318
924b9229 319if test x"${enable_time_check}" != x"no" ; then
320 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
321 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
322 else
323 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
324 fi
325fi
326
576b6b5d
DS
327if test "${enable_shell_access}" = "yes"; then
328 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
329fi
330
5adc2528
AS
331if test "${enable_fpm}" = "yes"; then
332 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
333fi
334
7ea487bc 335if test "${enable_broken_aliases}" = "yes"; then
336 if test "${enable_netlink}" = "yes"
337 then
6f0e3f6e 338 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
7ea487bc 339 fi
340 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
341 enable_netlink=no
342fi
343
344if test "${enable_tcp_zebra}" = "yes"; then
345 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
346fi
347
36de261b 348if test "${enable_opaque_lsa}" != "no"; then
7ea487bc 349 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
350fi
351
36de261b 352if test "${enable_ospf_te}" != "no"; then
7ea487bc 353 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
354 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
355fi
356
3453a712
PJ
357if test "${enable_linux24_tcp_md5}" = "yes"; then
358 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
359fi
360
d2a0ccc6 361AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
362if test "${enable_rtadv}" != "no"; then
71c0fb50 363 AC_MSG_RESULT(yes)
d2a0ccc6 364 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
2487bea1 365else
366 AC_MSG_RESULT(no)
71c0fb50 367fi
7ea487bc 368
ca776988 369if test "${enable_irdp}" = "yes"; then
370 AC_DEFINE(HAVE_IRDP,, IRDP )
371fi
372
f695b01f 373if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
374 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
ee1ac2d5 375 ISIS_TOPOLOGY_INCLUDES="-I\$(srcdir)/topology"
f695b01f 376 ISIS_TOPOLOGY_DIR="topology"
377 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
378fi
379
380AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
381AC_SUBST(ISIS_TOPOLOGY_DIR)
382AC_SUBST(ISIS_TOPOLOGY_LIB)
383
79cb2169 384if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
e8f2984c 385 enable_user="quagga"
edd7c245 386elif test "${enable_user}" = "no"; then
387 enable_user="root"
388fi
edd7c245 389
79cb2169 390if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
e8f2984c 391 enable_group="quagga"
edd7c245 392elif test "${enable_group}" = "no"; then
393 enable_group="root"
394fi
edd7c245 395
396if test x"${enable_vty_group}" = x"yes" ; then
8d4aee5d 397 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
79cb2169 398elif test x"${enable_vty_group}" != x""; then
8d4aee5d 399 if test x"${enable_vty_group}" != x"no"; then
edd7c245 400 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
401 fi
402fi
26275b05 403AC_SUBST([enable_user])
404AC_SUBST([enable_group])
405AC_SUBST([enable_vty_group])
406AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
407AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
edd7c245 408
aa593d5e 409enable_configfile_mask=${enable_configfile_mask:-0600}
410AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
411
412enable_logfile_mask=${enable_logfile_mask:-0600}
413AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
414
7ea487bc 415MULTIPATH_NUM=1
416
417case "${enable_multipath}" in
6f0e3f6e 418 [[0-9]|[1-9][0-9]])
7ea487bc 419 MULTIPATH_NUM="${enable_multipath}"
420 ;;
421 "")
422 ;;
423 *)
6f0e3f6e 424 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
7ea487bc 425 ;;
426esac
427
7ea487bc 428AC_SUBST(MULTIPATH_NUM)
429
1080c13f
JN
430dnl -----------------------------------
431dnl Add extra version string to package
432dnl name, string and version fields.
433dnl -----------------------------------
434if test "x${EXTRAVERSION}" != "x" ; then
0be793e6
DL
435 VERSION="${VERSION}${EXTRAVERSION}"
436 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
437 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
1080c13f
JN
438fi
439
a16dcf7c
DL
440if test "x$with_pkg_git_version" = "xyes"; then
441 if test -d "${srcdir}/.git"; then
442 AC_DEFINE(GIT_VERSION, [1], [include git version info])
443 else with_pkg_git_version="no"
444 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
445 fi
446fi
447AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
0be793e6 448
6f0e3f6e
PJ
449dnl ------------------------------------
450dnl Check C keywords and standard types
451dnl ------------------------------------
452AC_C_CONST
453AC_C_INLINE
454AC_C_RESTRICT
455AC_C_VOLATILE
dc7a2bf1 456AC_HEADER_STDC
6f0e3f6e
PJ
457AC_HEADER_TIME
458AC_HEADER_SYS_WAIT
459dnl AC_TYPE_PID_T
460AC_TYPE_UID_T
461AC_TYPE_MODE_T
462AC_TYPE_SIZE_T
463AC_TYPE_SIGNAL
464AC_STRUCT_TM
dc7a2bf1 465
6f0e3f6e
PJ
466dnl -------------------------
467dnl Check other header files.
468dnl -------------------------
469AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
470 sys/types.h linux/version.h netdb.h asm/types.h \
16ffb26f 471 sys/cdefs.h sys/param.h limits.h signal.h \
6511cab2 472 sys/socket.h netinet/in.h time.h sys/time.h])
6f0e3f6e
PJ
473
474dnl Utility macro to avoid retyping includes all the time
475m4_define([QUAGGA_INCLUDES],
476[#ifdef SUNOS_5
477#define _XPG4_2
478#define __EXTENSIONS__
479#endif
480#include <stdio.h>
481#if STDC_HEADERS
482# include <stdlib.h>
483# include <stddef.h>
484#else
485# if HAVE_STDLIB_H
486# include <stdlib.h>
487# endif
488#endif
489#if HAVE_SYS_TYPES_H
490# include <sys/types.h>
491#endif
492/* sys/conf.h depends on param.h on FBSD at least */
493#if HAVE_SYS_PARAM_H
494# include <sys/param.h>
495#endif
496/* Required for MAXSIG */
497#if HAVE_SIGNAL_H
498# include <signal.h>
499#endif
500#if HAVE_SYS_SOCKET_H
501# include <sys/socket.h>
502#endif
ea057677
HT
503#ifdef __APPLE__
504# define __APPLE_USE_RFC_3542
505#endif
6f0e3f6e
PJ
506#if HAVE_NETINET_IN_H
507# include <netinet/in.h>
508#endif
6511cab2
PJ
509#ifdef TIME_WITH_SYS_TIME
510# include <sys/time.h>
511# include <time.h>
512#else
513# ifdef HAVE_SYS_TIME_H
514# include <sys/time.h>
515# else
516# include <time.h>
517# endif
518#endif /* TIME_WITH_SYS_TIME */
6f0e3f6e
PJ
519])dnl
520
2b43bf23
DO
521dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
522dnl round below execution begins, otherwise it doesn't properly detect
523dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
524dnl on FreeBSD (BZ#408).
525
526AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
527
528m4_define([QUAGGA_INCLUDES],
529QUAGGA_INCLUDES
530[#if HAVE_NET_IF_H
531# include <net/if.h>
532#endif
533])dnl
534
535dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
536dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
537dnl an additional round for it.
538
539AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
540
541m4_define([QUAGGA_INCLUDES],
542QUAGGA_INCLUDES
543[#if HAVE_NET_IF_VAR_H
544# include <net/if_var.h>
545#endif
546])dnl
547
548AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
549 net/if_dl.h net/netopt.h net/route.h \
11770e10 550 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
6f0e3f6e
PJ
551 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
552 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
553 [], [], QUAGGA_INCLUDES)
554
555AC_CHECK_HEADERS([ucontext.h], [], [],
556[#ifndef __USE_GNU
557#define __USE_GNU
558#endif /* __USE_GNU */
559QUAGGA_INCLUDES
560])
561
562m4_define([QUAGGA_INCLUDES],
563QUAGGA_INCLUDES
2b43bf23 564[#if HAVE_SYS_UN_H
6f0e3f6e
PJ
565# include <sys/un.h>
566#endif
567#if HAVE_NETINET_IN_SYSTM_H
568# include <netinet/in_systm.h>
569#endif
570#if HAVE_NETINET_IN_VAR_H
571# include <netinet/in_var.h>
572#endif
573#if HAVE_NET_IF_DL_H
574# include <net/if_dl.h>
575#endif
6f0e3f6e
PJ
576#if HAVE_NET_NETOPT_H
577# include <net/netopt.h>
578#endif
579#if HAVE_NET_ROUTE_H
580# include <net/route.h>
581#endif
582#if HAVE_INET_ND_H
583# include <inet/nd.h>
584#endif
585#if HAVE_ARPA_INET_H
586# include <arpa/inet.h>
587#endif
11770e10
PJ
588/* Required for IDRP */
589#if HAVE_NETINET_IP_ICMP_H
590# include <netinet/ip_icmp.h>
591#endif
6f0e3f6e 592])dnl
dc7a2bf1 593
fa3232e1 594dnl V6 headers are checked below, after we check for v6
7ea487bc 595
7ea487bc 596dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
597case "$host" in
afd8a129 598 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
7ea487bc 599 opsys=sol2-6
afd8a129 600 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
19877dd2 601 AC_DEFINE(SUNOS_5, 1, SunOS 5)
7ea487bc 602 AC_CHECK_LIB(xnet, main)
603 CURSES=-lcurses
604 ;;
1b73de8b 605 [*-sunos5.[8-9]] \
606 | [*-sunos5.1[0-9]] \
607 | [*-sunos5.1[0-9].[0-9]] \
608 | [*-solaris2.[8-9]] \
609 | [*-solaris2.1[0-9]] \
610 | [*-solaris2.1[0-9].[0-9]])
afd8a129 611 opsys=sol8
fb66b29c
PJ
612 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
613 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
19877dd2 614 AC_CHECK_LIB(socket, main)
615 AC_CHECK_LIB(nsl, main)
1b73de8b 616 AC_CHECK_LIB(umem, main)
fb66b29c
PJ
617 AC_CHECK_FUNCS([printstack],
618 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
619 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
620 ])
19877dd2 621 CURSES=-lcurses
622 ;;
7ea487bc 623 *-sunos5* | *-solaris2*)
19877dd2 624 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
7ea487bc 625 AC_CHECK_LIB(socket, main)
626 AC_CHECK_LIB(nsl, main)
627 CURSES=-lcurses
628 ;;
c45eb839 629 *-linux*)
7ea487bc 630 opsys=gnu-linux
631 AC_DEFINE(GNU_LINUX,,GNU Linux)
632 ;;
633 *-nec-sysv4*)
634 AC_CHECK_LIB(nsl, gethostbyname)
635 AC_CHECK_LIB(socket, socket)
636 ;;
7ea487bc 637 *-openbsd*)
638 opsys=openbsd
639 AC_DEFINE(OPEN_BSD,,OpenBSD)
640 ;;
641 *-bsdi*)
642 opsys=bsdi
643 OTHER_METHOD="mtu_kvm.o"
644 AC_CHECK_LIB(kvm, main)
645 ;;
49e3b3c0 646 *-irix6.5)
dc7a2bf1 647 opsys=irix
648 AC_DEFINE(IRIX_65,,IRIX 6.5)
649 ;;
7ea487bc 650esac
651
62c9f504
PJ
652AC_SYS_LARGEFILE
653
7ea487bc 654dnl ---------------------
655dnl Integrated VTY option
656dnl ---------------------
657case "${enable_vtysh}" in
658 "yes") VTYSH="vtysh";
659 AC_DEFINE(VTYSH,,VTY shell)
fc9d0745 660dnl Vtysh uses libreadline, which looks for termcap functions at
6f0e3f6e 661dnl configure time. We follow readlines search order.
fc9d0745 662dnl The required procedures are in libtermcap on NetBSD, in
663dnl [TODO] on Linux, and in [TODO] on Solaris.
c0689394 664 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
a969459c 665 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
666 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
667 [AC_CHECK_LIB(ncurses, tputs,
668 LIBREADLINE="$LIBREADLINE -lncurses")]
669 )]
670 )]
671 )
672 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
673 "$LIBREADLINE")
7ea487bc 674 if test $ac_cv_lib_readline_main = no; then
fc9d0745 675 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
7ea487bc 676 fi
677 AC_CHECK_HEADER(readline/history.h)
678 if test $ac_cv_header_readline_history_h = no;then
679 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
680 fi
a969459c 681 AC_CHECK_LIB(readline, rl_completion_matches,
682 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
3d3de8c4 683 if test $ac_cv_lib_readline_rl_completion_matches = no; then
684 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
685 fi
686 ;;
7ea487bc 687 "no" ) VTYSH="";;
688 * ) ;;
689esac
c0689394 690AC_SUBST(LIBREADLINE)
f027d331 691AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
7ea487bc 692
693dnl ----------
694dnl PAM module
6159928d
DO
695dnl
696dnl Quagga detects the PAM library it is built against by checking for a
697dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
698dnl is known to #include pam_appl.h, the standard header of a PAM library, and
699dnl openpam.h doesn't do that, although depends on the header too. Hence a
700dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
701dnl of OpenPAM.
7ea487bc 702dnl ----------
24cd435b 703if test "$with_libpam" = "yes"; then
6f0e3f6e
PJ
704 AC_CHECK_HEADER([security/pam_misc.h],
705 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
706 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
707 pam_conv_func="misc_conv"
708 ],
709 [], QUAGGA_INCLUDES)
710 AC_CHECK_HEADER([security/openpam.h],
711 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
712 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
713 pam_conv_func="openpam_ttyconv"
714 ],
6159928d 715 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
24cd435b 716 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
717 AC_MSG_WARN([*** pam support will not be built ***])
718 with_libpam="no"
719 fi
720fi
721
7ea487bc 722if test "$with_libpam" = "yes"; then
6f0e3f6e 723dnl took this test from proftpds configure.in and suited to our needs
7ea487bc 724dnl -------------------------------------------------------------------------
725dnl
726dnl This next check looks funky due to a linker problem with some versions
727dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
728dnl omitted requiring libdl linking information. PAM-0.72 or better ships
729dnl with RedHat 6.2 and Debian 2.2 or better.
730AC_CHECK_LIB(pam, pam_start,
24cd435b 731 [AC_CHECK_LIB(pam, $pam_conv_func,
7ea487bc 732 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
733 LIBPAM="-lpam"],
734 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
735 LIBPAM="-lpam -lpam_misc"]
736 )
737 ],
738
739 [AC_CHECK_LIB(pam, pam_end,
24cd435b 740 [AC_CHECK_LIB(pam, $pam_conv_func,
a159ed93 741 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
7ea487bc 742 LIBPAM="-lpam -ldl"],
a159ed93 743 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
7ea487bc 744 LIBPAM="-lpam -ldl -lpam_misc"]
745 )
746 ],AC_MSG_WARN([*** pam support will not be built ***]),
747 [-ldl])
748 ]
749)
750fi
751AC_SUBST(LIBPAM)
752
753dnl -------------------------------
754dnl Endian-ness check
755dnl -------------------------------
756AC_WORDS_BIGENDIAN
757
758dnl -------------------------------
759dnl check the size in byte of the C
760dnl -------------------------------
761dnl AC_CHECK_SIZEOF(char)
762dnl AC_CHECK_SIZEOF(int)
763dnl AC_CHECK_SIZEOF(short)
764dnl AC_CHECK_SIZEOF(long)
765
766dnl ----------------------------
767dnl check existance of functions
768dnl ----------------------------
6f0e3f6e
PJ
769AC_FUNC_CHOWN
770AC_FUNC_FNMATCH
771AC_FUNC_FORK
6f0e3f6e
PJ
772AC_FUNC_MEMCMP
773AC_FUNC_MKTIME
774AC_FUNC_STRFTIME
6f0e3f6e
PJ
775AC_FUNC_STAT
776AC_FUNC_SELECT_ARGTYPES
777AC_FUNC_STRFTIME
d46d2a24
PJ
778dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
779dnl can lead to strange side effects. So we just check for strnlen
780dnl directly, see below.
2b5cb411 781dnl AC_FUNC_STRNLENdnl
6f0e3f6e
PJ
782AC_FUNC_VPRINTF
783
784dnl -------------------------------
785dnl bgpd needs pow() and hence libm
786dnl -------------------------------
787TMPLIBS="$LIBS"
788AC_CHECK_HEADER([math.h],
789 [AC_CHECK_LIB([m], [pow],
790 [LIBM="-lm"
791 LIBS="$LIBS $LIBM"
792 AC_DEFINE(HAVE_LIBM,, Have libm)
793 AC_CHECK_FUNCS(pow,[],[LIBM=""])
794 ])
795])
796if test x"$LIBM" = x ; then
797 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
798fi
799LIBS="$TMPLIBS"
800AC_SUBST(LIBM)
801
802dnl ---------------
803dnl other functions
804dnl ---------------
805AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
d46d2a24 806 inet_ntoa inet_aton strnlen \
6f0e3f6e
PJ
807 memchr memmove memset select socket \
808 strcasecmp strchr strcspn strdup strerror \
809 strncasecmp strndup strrchr strspn strstr \
810 strtol strtoul strlcat strlcpy \
811 daemon snprintf vsnprintf \
812 if_nametoindex if_indextoname getifaddrs \
813 uname fcntl])
814
a159ed93 815AC_CHECK_FUNCS(setproctitle, ,
816 [AC_CHECK_LIB(util, setproctitle,
817 [LIBS="$LIBS -lutil"
818 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
819 ]
820 )
821 ]
822)
7ea487bc 823
824dnl ------------------------------------
825dnl Determine routing get and set method
826dnl ------------------------------------
827AC_MSG_CHECKING(zebra between kernel interface method)
828if test x"$opsys" = x"gnu-linux"; then
829 if test "${enable_netlink}" = "yes";then
830 AC_MSG_RESULT(netlink)
831 RT_METHOD=rt_netlink.o
832 AC_DEFINE(HAVE_NETLINK,,netlink)
833 netlink=yes
834 elif test "${enable_netlink}" = "no"; then
835 AC_MSG_RESULT(ioctl)
836 RT_METHOD=rt_ioctl.o
837 netlink=no
838 else
839 AC_MSG_RESULT(netlink)
840 RT_METHOD=rt_netlink.o
841 AC_DEFINE(HAVE_NETLINK,,netlink)
842 netlink=yes
843 fi
19877dd2 844elif test x"$opsys" = x"sol2-6";then
845 AC_MSG_RESULT(Route socket)
846 KERNEL_METHOD="kernel_socket.o"
847 RT_METHOD="rt_socket.o"
afd8a129 848elif test x"$opsys" = x"sol8";then
19877dd2 849 AC_MSG_RESULT(Route socket)
850 KERNEL_METHOD="kernel_socket.o"
851 RT_METHOD="rt_socket.o"
852elif test "$opsys" = "irix" ; then
853 AC_MSG_RESULT(Route socket)
854 KERNEL_METHOD="kernel_socket.o"
855 RT_METHOD="rt_socket.o"
7ea487bc 856else
19877dd2 857 AC_TRY_RUN([#include <errno.h>
7ea487bc 858#include <sys/types.h>
859#include <sys/socket.h>
860
861main ()
862{
863 int ac_sock;
864
865 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
866 if (ac_sock < 0 && errno == EINVAL)
867 exit (1);
868 exit (0);
869}],
870 [KERNEL_METHOD=kernel_socket.o
871 RT_METHOD=rt_socket.o
872 AC_MSG_RESULT(socket)],
873 [RT_METHOD=rt_ioctl.o
874 AC_MSG_RESULT(ioctl)],
875 [KERNEL_METHOD=kernel_socket.o
876 RT_METHOD=rt_socket.o
877 AC_MSG_RESULT(socket)])
7ea487bc 878fi
879AC_SUBST(RT_METHOD)
880AC_SUBST(KERNEL_METHOD)
881AC_SUBST(OTHER_METHOD)
5adc2528 882AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
7ea487bc 883
238497fc
PJ
884dnl --------------------------
885dnl Determine IS-IS I/O method
886dnl --------------------------
745bf05f
DL
887AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
888AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
889AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
238497fc
PJ
890AC_CHECK_HEADER(net/bpf.h)
891AC_CHECK_HEADER(sys/dlpi.h)
892AC_MSG_CHECKING(zebra IS-IS I/O method)
893if test x"$opsys" = x"gnu-linux"; then
894 AC_MSG_RESULT(pfpacket)
745bf05f 895 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
238497fc
PJ
896elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
897 AC_MSG_RESULT(DLPI)
745bf05f 898 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
238497fc
PJ
899else
900 if test $ac_cv_header_net_bpf_h = no; then
901 if test $ac_cv_header_sys_dlpi_h = no; then
902 AC_MSG_RESULT(none)
903 AC_MSG_WARN([*** IS-IS support will not be built ***])
904 ISISD=""
905 else
906 AC_MSG_RESULT(DLPI)
907 fi
745bf05f 908 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
238497fc
PJ
909 else
910 AC_MSG_RESULT(BPF)
745bf05f 911 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
238497fc
PJ
912 fi
913fi
745bf05f 914AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
238497fc 915
b99760ab 916dnl ------------------------------------
917dnl check for broken CMSG_FIRSTHDR macro
918dnl ------------------------------------
6c20046f 919AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
5b087528 920AC_RUN_IFELSE([AC_LANG_SOURCE([[
b99760ab 921#ifdef SUNOS_5
922#define _XPG4_2
923#define __EXTENSIONS__
924#endif
6f0e3f6e
PJ
925#ifdef HAVE_STDLIB_H
926# include <stdlib.h>
927#endif
928#ifdef HAVE_SYS_TYPES_H
b99760ab 929#include <sys/types.h>
6f0e3f6e
PJ
930#endif
931#ifdef HAVE_SYS_SOCKET_H
b99760ab 932#include <sys/socket.h>
6f0e3f6e 933#endif
b99760ab 934
935main()
936{
937 struct msghdr msg;
938 char buf[4];
939
940 msg.msg_control = buf;
941 msg.msg_controllen = 0;
942
943 if (CMSG_FIRSTHDR(&msg) != NULL)
944 exit(0);
945 exit (1);
5b087528 946}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
d33e8d7b 947[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
b99760ab 948
7ea487bc 949dnl ------------------------------
950dnl check kernel route read method
951dnl ------------------------------
5589ffa7
JJ
952AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
953[if test "x$netlink" = xyes; then
954 quagga_cv_rtread_method="netlink"
7ea487bc 955else
5589ffa7 956for quagga_cv_rtread_method in /proc/net/route /dev/ip /dev/null;
7ea487bc 957do
5589ffa7 958 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
7ea487bc 959done
5589ffa7
JJ
960case $quagga_cv_rtread_method in
961 "/proc/net/route") quagga_cv_rtread_method="proc";;
9c30ab6b 962 "/dev/ip")
963 case "$host" in
5589ffa7
JJ
964 *-freebsd*) quagga_cv_rtread_method="sysctl";;
965 *) quagga_cv_rtread_method="getmsg";;
9c30ab6b 966 esac;;
5589ffa7
JJ
967 *)
968 quagga_cv_rtread_method="sysctl";;
7ea487bc 969esac
970fi])
5589ffa7 971RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
7ea487bc 972AC_SUBST(RTREAD_METHOD)
973
974dnl -----------------------------
975dnl check interface lookup method
976dnl -----------------------------
19877dd2 977IOCTL_METHOD=ioctl.o
7ea487bc 978AC_MSG_CHECKING(interface looking up method)
979if test "$netlink" = yes; then
980 AC_MSG_RESULT(netlink)
981 IF_METHOD=if_netlink.o
19877dd2 982elif test "$opsys" = "sol2-6";then
983 AC_MSG_RESULT(Solaris GIF)
984 IF_METHOD=if_ioctl.o
afd8a129 985elif test "$opsys" = "sol8";then
19877dd2 986 AC_MSG_RESULT(Solaris GLIF)
987 IF_METHOD=if_ioctl_solaris.o
988 IOCTL_METHOD=ioctl_solaris.o
989elif test "$opsys" = "irix" ; then
990 AC_MSG_RESULT(IRIX)
991 IF_METHOD=if_ioctl.o
992elif test "$opsys" = "openbsd";then
993 AC_MSG_RESULT(openbsd)
994 IF_METHOD=if_ioctl.o
995elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
996 AC_MSG_RESULT(sysctl)
7ea487bc 997 IF_METHOD=if_sysctl.o
998 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
19877dd2 999else
7ea487bc 1000 AC_MSG_RESULT(ioctl)
1001 IF_METHOD=if_ioctl.o
7ea487bc 1002fi
1003AC_SUBST(IF_METHOD)
19877dd2 1004AC_SUBST(IOCTL_METHOD)
7ea487bc 1005
42c98199 1006dnl ---------------------------------------------------------------
1007dnl figure out how to specify an interface in multicast sockets API
1008dnl ---------------------------------------------------------------
6f0e3f6e 1009AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
42c98199 1010
1011AC_MSG_CHECKING([for BSD struct ip_mreq hack])
1012AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
1013#include <sys/param.h>
675769b1 1014#endif],[#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000) || defined(__OpenBSD__) || defined(__APPLE__)
42c98199 1015 return (0);
1016#else
1017 #error No support for BSD struct ip_mreq hack detected
1018#endif],[AC_MSG_RESULT(yes)
1019AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1020AC_MSG_RESULT(no))
1021
10d04cdb
DT
1022AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1023AC_TRY_COMPILE([
1024#include <sys/types.h>
1025#include <netinet/in.h>
1026], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1027], [AC_MSG_RESULT(yes)
1028AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1029AC_MSG_RESULT(no))
1030
c543a173
AS
1031dnl ---------------------------------------------------------------
1032dnl figure out how to check link-state
1033dnl ---------------------------------------------------------------
6418bedf
AS
1034AC_CHECK_HEADER([net/if.h],
1035 [AC_CHECK_HEADER( [net/if_media.h],
1036 [m4_define([LINK_DETECT_INCLUDES],
1037 QUAGGA_INCLUDES
1038 [#include <net/if_media.h>
1039 ])
1040 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1041 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1042 [], LINK_DETECT_INCLUDES)],
1043 [],
1044 QUAGGA_INCLUDES)],
1045 [], QUAGGA_INCLUDES )
c543a173 1046
9234b382
DV
1047dnl ---------------------------------------------------------------
1048dnl Additional, newer way to check link-state using ifi_link_state.
1049dnl Not available in all BSD's when ifmediareq available
1050dnl ---------------------------------------------------------------
1051AC_CHECK_HEADER([net/if.h],
1052 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1053 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1054 [], QUAGGA_INCLUDES),
1055 ,)
1056
0df7c91f
PJ
1057dnl ------------------------
1058dnl TCP_MD5SIG socket option
1059dnl ------------------------
1060
1061AC_CHECK_HEADER([netinet/tcp.h],
1062 [m4_define([MD5_INCLUDES],
1063 QUAGGA_INCLUDES
1064 [#include <netinet/tcp.h>
1065 ])
1066 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1067 [],
1068 QUAGGA_INCLUDES)
1069if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1070 AC_CHECK_HEADER([linux/tcp.h],
1071 [m4_define([MD5_INCLUDES],
1072 QUAGGA_INCLUDES
1073 [#include <linux/tcp.h>
1074 ])
1075 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1076fi
1077
7ea487bc 1078dnl -----------------------
1079dnl check proc file system.
1080dnl -----------------------
cadfb2cd
SH
1081if test "$netlink" != yes; then
1082 if test -r /proc/net/dev; then
1083 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
1084 IF_PROC=if_proc.o
1085 fi
1086 if test -r /proc/net/if_inet6; then
1087 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
1088 IF_PROC=if_proc.o
1089 fi
7ea487bc 1090fi
1091AC_SUBST(IF_PROC)
1092
1093dnl -----------------------------
1094dnl check ipforward detect method
1095dnl -----------------------------
5589ffa7 1096AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
ca9f342c
DL
1097[if test x$cross_compiling = xyes; then
1098 if test x"$opsys" = x"gnu-linux"; then
1099 quagga_cv_ipforward_method=/proc/net/snmp
1100 else
1101 quagga_cv_ipforward_method=/dev/ip
1102 fi
1103else
1104 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1105 do
1106 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1107 done
1108fi
5589ffa7
JJ
1109case $quagga_cv_ipforward_method in
1110 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
7ea487bc 1111 "/dev/ip")
1112 case "$host" in
5589ffa7
JJ
1113 *-nec-sysv4*) quagga_cv_ipforward_method="ews";;
1114 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1115 *) quagga_cv_ipforward_method="solaris";;
7ea487bc 1116 esac;;
5589ffa7 1117 *) quagga_cv_ipforward_method="sysctl";;
7ea487bc 1118esac])
5589ffa7 1119IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
7ea487bc 1120AC_SUBST(IPFORWARD)
1121
1122AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
1123
1124dnl ----------
1125dnl IPv6 check
1126dnl ----------
1127AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1128if test "${enable_ipv6}" = "no"; then
1129 AC_MSG_RESULT(disabled)
1130else
1131dnl ----------
1132dnl INRIA IPv6
1133dnl ----------
a159ed93 1134 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1135 zebra_cv_ipv6=yes
1136 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1137 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1138 RIPNGD="ripngd"
1139 OSPF6D="ospf6d"
1140 LIB_IPV6=""
1141 AC_MSG_RESULT(INRIA IPv6)
7ea487bc 1142dnl ---------
1143dnl KAME IPv6
1144dnl ---------
a159ed93 1145 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1146 zebra_cv_ipv6=yes
1147 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1148 AC_DEFINE(KAME,1,KAME IPv6)
1149 RIPNGD="ripngd"
1150 OSPF6D="ospf6d"
1151 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
7ea487bc 1152 LIB_IPV6="-L/usr/local/v6/lib -linet6"
a159ed93 1153 fi
1154 AC_MSG_RESULT(KAME)
71c0fb50 1155dnl -------------------------
1156dnl MUSICA IPv6
1157dnl default host check
1158dnl It is not used by Kheops
1159dnl -------------------------
a159ed93 1160 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1161 zebra_cv_ipv6=yes
1162 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1163 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1164 AC_DEFINE(KAME,1,KAME IPv6 stack)
1165 RIPNGD="ripngd"
1166 OSPF6D="ospf6d"
1167 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
71c0fb50 1168 LIB_IPV6="-L/usr/local/v6/lib -linet6"
a159ed93 1169 fi
1170 AC_MSG_RESULT(MUSICA)
7ea487bc 1171dnl ---------
1172dnl NRL check
1173dnl ---------
a159ed93 1174 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1175 zebra_cv_ipv6=yes
1176 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1177 AC_DEFINE(NRL,1,NRL)
1178 RIPNGD="ripngd"
1179 OSPF6D="ospf6d"
1180 if test x"$opsys" = x"bsdi";then
7ea487bc 1181 AC_DEFINE(BSDI_NRL,,BSDI)
1182 AC_MSG_RESULT(BSDI_NRL)
a159ed93 1183 else
7ea487bc 1184 AC_MSG_RESULT(NRL)
a159ed93 1185 fi
19877dd2 1186dnl ------------------------------------
1187dnl Solaris 9, 10 and potentially higher
1188dnl ------------------------------------
afd8a129 1189 elif test x"$opsys" = x"sol8"; then
19877dd2 1190 zebra_cv_ipv6=yes;
1191 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1192 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1193 RIPNGD="ripngd"
1194 OSPF6D="ospf6d"
1195 AC_MSG_RESULT(Solaris IPv6)
7ea487bc 1196dnl ----------
1197dnl Linux IPv6
1198dnl ----------
a159ed93 1199 elif test "${enable_ipv6}" = "yes"; then
1200 AC_EGREP_CPP(yes, [
1201 #include <linux/version.h>
1202 /* 2.1.128 or later */
1203 #if LINUX_VERSION_CODE >= 0x020180
1204 yes
1205 #endif],
1206 [zebra_cv_ipv6=yes
1207 zebra_cv_linux_ipv6=yes
1208 AC_MSG_RESULT(Linux IPv6)])
1209 else
1210 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1211 then
7ea487bc 1212 zebra_cv_ipv6=yes
1213 zebra_cv_linux_ipv6=yes
1214 AC_MSG_RESULT(Linux IPv6)
a159ed93 1215 fi
1216 fi
7ea487bc 1217
850d39f3 1218 if test "$zebra_cv_linux_ipv6" = "yes";then
1219 AC_MSG_CHECKING(whether libc has IPv6 support)
1220 AC_TRY_LINK([#include <netinet/in.h>
1221 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1222 [AC_MSG_RESULT(yes)
1223 zebra_cv_ipv6=yes
1224 zebra_cv_linux_ipv6=yes],
1225 [AC_MSG_RESULT(no)
1226 zebra_cv_ipv6=no
1227 zebra_cv_linux_ipv6=no])
1228 fi
1229
a159ed93 1230 if test "$zebra_cv_linux_ipv6" = "yes";then
1231 AC_MSG_CHECKING(for GNU libc >= 2.1)
1232 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
3ef0b877 1233 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
d8dc5257
DS
1234 dnl Linux has a compilation problem with mixing
1235 dnl netinet/in.h and linux/in6.h they are not
1236 dnl compatible. There has been discussion on
1237 dnl how to fix it but no real progress on implementation
1238 dnl when they fix it, remove this
1239 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
3ef0b877 1240
a159ed93 1241 AC_EGREP_CPP(yes, [
7ea487bc 1242#include <features.h>
1243#if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1244 yes
a159ed93 1245#endif],
1246 [glibc=yes
a159ed93 1247 AC_MSG_RESULT(yes)],
1248 AC_MSG_RESULT(no)
1249 )
1250 RIPNGD="ripngd"
1251 OSPF6D="ospf6d"
1252 if test "$glibc" != "yes"; then
7ea487bc 1253 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
3ef0b877 1254 INCLUDES="-I/usr/inet6/include"
7ea487bc 1255 LIB_IPV6="-L/usr/inet6/lib -linet6"
1256 fi
a159ed93 1257 fi
1258 fi
7ea487bc 1259
1260dnl -----------------------
1261dnl Set IPv6 related values
1262dnl -----------------------
a159ed93 1263 LIBS="$LIB_IPV6 $LIBS"
1264 AC_SUBST(LIB_IPV6)
7ea487bc 1265
a159ed93 1266 if test x"$RIPNGD" = x""; then
1267 AC_MSG_RESULT(IPv4 only)
1268 fi
7ea487bc 1269fi
1270
fa3232e1 1271dnl ------------------
1272dnl IPv6 header checks
1273dnl ------------------
1274if test "x${zebra_cv_ipv6}" = "xyes"; then
1275AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
6f0e3f6e
PJ
1276 netinet6/in6_var.h netinet6/nd6.h], [], [],
1277 QUAGGA_INCLUDES)
fa3232e1 1278fi
1279
6f0e3f6e
PJ
1280m4_define([QUAGGA_INCLUDES],dnl
1281QUAGGA_INCLUDES
1282[#if HAVE_NETINET6_IN6_H
1283#include <netinet6/in6.h>
1284#endif
1285#if HAVE_NETINET_IN6_VAR_H
1286#include <netinet/in6_var.h>
1287#endif
1288#if HAVE_NETINET_ICMP6_H
1289# include <netinet/icmp6.h>
1290#endif
1291#if HAVE_NETINET6_IN6_VAR_H
1292# include <netinet6/in6_var.h>
1293#endif
1294#if HAVE_NETINET6_ND6_H
fbf24544 1295# include <netinet6/nd6.h>
6f0e3f6e
PJ
1296#endif
1297])dnl
1298
cbcd9bfc
JT
1299dnl disable doc check
1300if test "${enable_doc}" = "no";then
1301 DOC=""
1302else
1303 DOC="doc"
1304fi
1305
7ea487bc 1306dnl --------------------
1307dnl Daemon disable check
1308dnl --------------------
1309if test "${enable_zebra}" = "no";then
1310 ZEBRA=""
1311else
1312 ZEBRA="zebra"
1313fi
f027d331 1314AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
7ea487bc 1315
1316if test "${enable_bgpd}" = "no";then
1317 BGPD=""
1318else
1319 BGPD="bgpd"
1320fi
f027d331 1321AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
7ea487bc 1322
1323if test "${enable_ripd}" = "no";then
1324 RIPD=""
1325else
1326 RIPD="ripd"
1327fi
f027d331 1328AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
7ea487bc 1329
1330if test "${enable_ospfd}" = "no";then
1331 OSPFD=""
1332else
1333 OSPFD="ospfd"
1334fi
f027d331 1335AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
7ea487bc 1336
5734509c
PJ
1337if test "${enable_babeld}" = "no";then
1338 BABELD=""
1339else
1340 BABELD="babeld"
1341fi
f027d331 1342AM_CONDITIONAL(BABELD, test "x$BABELD" = "xbabeld")
5734509c 1343
d0199430 1344if test "${enable_watchquagga}" = "no";then
1345 WATCHQUAGGA=""
1346else
1347 WATCHQUAGGA="watchquagga"
1348fi
f027d331 1349AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
d0199430 1350
1ef74ef7 1351OSPFCLIENT=""
0d51c7ef 1352if test "${enable_opaque_lsa}" != "no"; then
1ef74ef7 1353 if test "${enable_ospfapi}" != "no";then
9a569848 1354 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1ef74ef7 1355
1356 if test "${enable_ospfclient}" != "no";then
1357 OSPFCLIENT="ospfclient"
1358 fi
1359 fi
1360
7ea487bc 1361fi
f027d331 1362AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
7ea487bc 1363
1364case "${enable_ripngd}" in
1365 "yes") RIPNGD="ripngd";;
1366 "no" ) RIPNGD="";;
1367 * ) ;;
1368esac
f027d331 1369AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
7ea487bc 1370
1371case "${enable_ospf6d}" in
1372 "yes") OSPF6D="ospf6d";;
1373 "no" ) OSPF6D="";;
1374 * ) ;;
1375esac
f027d331 1376AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
7ea487bc 1377
9e867fe6 1378case "${enable_isisd}" in
1379 "yes") ISISD="isisd";;
1380 "no" ) ISISD="";;
ae399ab0 1381 * ) ;;
9e867fe6 1382esac
f027d331 1383AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
9e867fe6 1384
97cee877
GT
1385# XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1386case "${enable_solaris}" in
1387 "yes") SOLARIS="solaris";;
1388 "no" ) SOLARIS="";;
1389 * ) ;;
1390esac
1391
7ea487bc 1392if test "${enable_bgp_announce}" = "no";then
750e8146
PJ
1393 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1394else
1395 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
7ea487bc 1396fi
1397
cbcd9bfc 1398AC_SUBST(DOC)
7ea487bc 1399AC_SUBST(ZEBRA)
1400AC_SUBST(BGPD)
1401AC_SUBST(RIPD)
1402AC_SUBST(RIPNGD)
1403AC_SUBST(OSPFD)
1404AC_SUBST(OSPF6D)
5734509c 1405AC_SUBST(BABELD)
d0199430 1406AC_SUBST(WATCHQUAGGA)
9e867fe6 1407AC_SUBST(ISISD)
97cee877 1408AC_SUBST(SOLARIS)
7ea487bc 1409AC_SUBST(VTYSH)
1410AC_SUBST(INCLUDES)
1411AC_SUBST(CURSES)
1412AC_SUBST(OSPFCLIENT)
1ef74ef7 1413AC_SUBST(OSPFAPI)
7ea487bc 1414AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1415AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1416AC_CHECK_LIB(crypt, crypt)
1417AC_CHECK_LIB(resolv, res_init)
7ea487bc 1418
1419dnl ---------------------------------------------------
1420dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1421dnl ---------------------------------------------------
a159ed93 1422AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1423AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1424AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
7ea487bc 1425
25f45887
JJ
1426dnl ---------------------------
1427dnl check system has PCRE regexp
1428dnl ---------------------------
1429if test "x$enable_pcreposix" = "xyes"; then
1430 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1431 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1432fi
1433
1434if test "x$enable_pcreposix" != "xyes"; then
7ea487bc 1435dnl ---------------------------
1436dnl check system has GNU regexp
1437dnl ---------------------------
25f45887 1438AC_MSG_CHECKING(whether system has GNU regex)
7ea487bc 1439AC_CHECK_LIB(c, regexec,
1440[AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1441 LIB_REGEX=""],
1442[LIB_REGEX="regex.o"])
25f45887
JJ
1443fi
1444AC_SUBST(HAVE_LIBPCREPOSIX)
7ea487bc 1445AC_SUBST(LIB_REGEX)
1446
1447dnl ------------------
b1fc9acb 1448dnl check Net-SNMP library
7ea487bc 1449dnl ------------------
d6be5fb9 1450if test "${enable_snmp}" != ""; then
08d7f653
VB
1451 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1452 if test x"$NETSNMP_CONFIG" = x"no"; then
1453 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1454 fi
1455 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1456 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1457 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1458 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1459int main(void);
1460],
1461[
1462{
1463 return 0;
1464}
1465])],[AC_MSG_RESULT(yes)],[
1466 AC_MSG_RESULT(no)
1467 AC_MSG_ERROR([--enable-snmp given but not usable])])
1468 AC_DEFINE(HAVE_SNMP,,SNMP)
d6be5fb9
VB
1469 case "${enable_snmp}" in
1470 yes)
1471 SNMP_METHOD=agentx
1472 ;;
1473 smux|agentx)
1474 SNMP_METHOD="${enable_snmp}"
1475 ;;
1476 *)
1477 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1478 ;;
1479 esac
1480 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1481 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1482 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
6cf9df08 1483fi
1484
7ea487bc 1485dnl ---------------------------
6f0e3f6e 1486dnl sockaddr and netinet checks
7ea487bc 1487dnl ---------------------------
6f0e3f6e
PJ
1488AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1489 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1490 socklen_t,
1491 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1492 struct nd_opt_adv_interval, struct rt_addrinfo,
11770e10 1493 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
6f0e3f6e
PJ
1494 [], [], QUAGGA_INCLUDES)
1495
1496AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1497 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1498 struct sockaddr_in6.sin6_scope_id,
ca3ccd87 1499 struct sockaddr_dl.sdl_len,
6f0e3f6e
PJ
1500 struct if6_aliasreq.ifra_lifetime,
1501 struct nd_opt_adv_interval.nd_opt_ai_type],
1502 [], [], QUAGGA_INCLUDES)
29c4c9bd 1503
6f0e3f6e 1504dnl ---------------------------
11770e10 1505dnl IRDP/pktinfo/icmphdr checks
6f0e3f6e
PJ
1506dnl ---------------------------
1507AC_CHECK_TYPES([struct in_pktinfo],
11770e10
PJ
1508 [AC_CHECK_TYPES([struct icmphdr],
1509 [if test "${enable_irdp}" != "no"; then
1510 AC_DEFINE(HAVE_IRDP,, IRDP)
1511 fi],
1512 [if test "${enable_irdp}" = "yes"; then
1513 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1514 fi], [QUAGGA_INCLUDES])],
6f0e3f6e
PJ
1515 [if test "${enable_irdp}" = "yes"; then
1516 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1517 fi], [QUAGGA_INCLUDES])
29c4c9bd 1518
7ea487bc 1519dnl --------------------------------------
1520dnl checking for getrusage struct and call
1521dnl --------------------------------------
47f6aef0
SH
1522if test "${enable_rusage}" != "no"; then
1523 AC_MSG_CHECKING(whether getrusage is available)
1524 AC_TRY_COMPILE([#include <sys/resource.h>],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1525 [AC_MSG_RESULT(yes)
1526 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1527 AC_MSG_RESULT(no))
1528fi
7ea487bc 1529
c4376c9d
SH
1530dnl --------------------------------------
1531dnl checking for clock_time monotonic struct and call
1532dnl --------------------------------------
6511cab2
PJ
1533AC_CHECK_DECL(CLOCK_MONOTONIC,
1534 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
9964fcfc 1535 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
6511cab2 1536], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
c4376c9d 1537
edd7c245 1538dnl -------------------
1539dnl capabilities checks
1540dnl -------------------
41d3fc96 1541if test "${enable_capabilities}" != "no"; then
1542 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1543 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1544 [AC_MSG_RESULT(yes)
1545 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1546 quagga_ac_keepcaps="yes"],
1547 AC_MSG_RESULT(no)
edd7c245 1548 )
41d3fc96 1549 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1550 AC_CHECK_HEADERS(sys/capability.h)
1551 fi
1552 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1553 AC_CHECK_LIB(cap, cap_init,
1554 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1555 LIBCAP="-lcap"
ceacedba 1556 quagga_ac_lcaps="yes"]
41d3fc96 1557 )
ceacedba 1558 else
1559 AC_CHECK_HEADERS(priv.h,
1560 [AC_MSG_CHECKING(Solaris style privileges are available)
1561 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1562 [AC_MSG_RESULT(yes)
1563 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1564 quagga_ac_scaps="yes"],
1565 AC_MSG_RESULT(no)
1566 )
1567 ]
1568 )
1569 fi
1570 if test x"${quagga_ac_scaps}" = x"yes" \
1571 -o x"${quagga_ac_lcaps}" = x"yes"; then
1572 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
41d3fc96 1573 fi
edd7c245 1574fi
1575AC_SUBST(LIBCAP)
1576
327c4cdf
DV
1577dnl ---------------------------------------------------------------------------
1578dnl http://www.gnu.org/software/autoconf-archive/ax_sys_weak_alias.html
1579dnl Check for and set one of the following = 1
1580dnl HAVE_SYS_WEAK_ALIAS_ATTRIBUTE
1581dnl HAVE_SYS_WEAK_ALIAS_PRAGMA
1582dnl HAVE_SYS_WEAK_ALIAS_HPSECONDARY
1583dnl HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE
1584dnl If any scheme is found, set
1585dnl HAVE_SYS_WEAK_ALIAS=1
1586dnl The following variable is set to text value
1587dnl WEAK_ALIAS = "attribute" || "pragma" || "hpsecondary" || "criduplicate" || "no"
1588dnl If weak alias can cross object file boundaries
1589dnl WEAK_ALIAS_CROSSFILE = "yes" || "no"
1590dnl ---------------------------------------------------------------------------
1591AX_SYS_WEAK_ALIAS
1592
fb2d1502 1593dnl ---------------------------
1594dnl check for glibc 'backtrace'
1595dnl ---------------------------
8c99b4c1
DL
1596if test x"${enable_backtrace}" != x"no" ; then
1597 backtrace_ok=no
1598 AC_CHECK_HEADER([execinfo.h], [
1599 AC_SEARCH_LIBS([backtrace], [execinfo], [
1600 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1601 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1602 backtrace_ok=yes
1603 ],, [-lm])
eda3529e 1604 ])
8c99b4c1
DL
1605
1606 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1607 dnl user explicitly requested backtrace but we failed to find support
1608 AC_MSG_FAILURE([failed to find backtrace support])
1609 fi
1610fi
fb2d1502 1611
41be32bf
PJ
1612dnl -----------------------------------------
1613dnl check for malloc mallinfo struct and call
1614dnl this must try and link using LIBS, in
1615dnl order to check no alternative allocator
1616dnl has been specified, which might not provide
1617dnl mallinfo, e.g. such as Umem on Solaris.
1618dnl -----------------------------------------
6f0e3f6e 1619AC_CHECK_HEADER([malloc.h],
41be32bf
PJ
1620 [AC_MSG_CHECKING(whether mallinfo is available)
1621 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1622 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1623 [AC_MSG_RESULT(yes)
1624 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1625 AC_MSG_RESULT(no)
1626 )
6f0e3f6e 1627 ], [], QUAGGA_INCLUDES)
41be32bf 1628
408ad943 1629dnl ----------
1630dnl configure date
1631dnl ----------
1632CONFDATE=`date '+%Y%m%d'`
1633AC_SUBST(CONFDATE)
1634
46bc0e43 1635dnl Conditionally enable PIE support for GNU toolchains.
46bc0e43 1636AC_ARG_ENABLE(pie, AS_HELP_STRING([--disable-pie], [Do not build tools as a Position Independent Executables]))
0e9de56d 1637if test "$enable_pie" != "no"; then
46bc0e43
PKJ
1638 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1639 save_CFLAGS=$CFLAGS
1640 save_LDFLAGS=$LDFLAGS
1641 CFLAGS="$CFLAGS -fPIE"
1642 LDFLAGS="$LDFLAGS -pie"
1643 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1644 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1645 )
1646 CFLAGS=$save_CFLAGS
1647 LDFLAGS=$save_LDFLAGS
1648 ])
1649 if test "$ap_cv_cc_pie" = "yes"; then
1650 PICFLAGS="-fPIE"
1651 PILDFLAGS="-pie"
1652 fi
1653fi
1654
1655AC_SUBST(PICFLAGS)
1656AC_SUBST(PILDFLAGS)
1657
f281ab97
DL
1658dnl -------
1659dnl DejaGNU
1660dnl -------
1661if test x"$DEJAGNU" = x
1662then
1663 DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
1664fi
1665RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
1666
1667AC_SUBST(DEJAGNU)
1668AC_SUBST(RUNTESTDEFAULTFLAGS)
1669
7ea487bc 1670dnl ------------------------------
a159ed93 1671dnl set paths for state directory
23bd12c3 1672dnl ------------------------------
e84999d9 1673AC_MSG_CHECKING(directory to use for state file)
23bd12c3 1674if test "${prefix}" = "NONE"; then
e8f2984c 1675 quagga_statedir_prefix="";
23bd12c3 1676else
e8f2984c 1677 quagga_statedir_prefix=${prefix}
23bd12c3 1678fi
1679if test "${localstatedir}" = '${prefix}/var'; then
e84999d9 1680 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
e8f2984c 1681 ${quagga_statedir_prefix}/var/adm dnl
1682 ${quagga_statedir_prefix}/etc dnl
a159ed93 1683 /var/run dnl
1684 /var/adm dnl
1685 /etc dnl
1686 /dev/null;
23bd12c3 1687 do
e8f2984c 1688 test -d $QUAGGA_STATE_DIR && break
23bd12c3 1689 done
e84999d9 1690 quagga_statedir=$QUAGGA_STATE_DIR
23bd12c3 1691else
e8f2984c 1692 quagga_statedir=${localstatedir}
a159ed93 1693fi
e8f2984c 1694if test $quagga_statedir = "/dev/null"; then
a159ed93 1695 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1696fi
e84999d9
JJ
1697AC_MSG_RESULT(${quagga_statedir})
1698AC_SUBST(quagga_statedir)
a159ed93 1699
e8f2984c 1700AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1701AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1702AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1703AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1704AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1705AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
5734509c 1706AC_DEFINE_UNQUOTED(PATH_BABELD_PID, "$quagga_statedir/babeld.pid",babeld PID)
9e867fe6 1707AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
d0199430 1708AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
e8f2984c 1709AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1710AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1711AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1712AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1713AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1714AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1715AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
5734509c 1716AC_DEFINE_UNQUOTED(BABEL_VTYSH_PATH, "$quagga_statedir/babeld.vty",babeld vty socket)
9e867fe6 1717AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
515210bd 1718AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
7ea487bc 1719
1eb8ef25 1720dnl -------------------------------
1721dnl Quagga sources should always be
1722dnl current wrt interfaces. Dont
1723dnl allow deprecated interfaces to
1724dnl be exposed.
1725dnl -------------------------------
1726AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1727
7ea487bc 1728dnl ---------------------------
1729dnl Check htonl works correctly
1730dnl ---------------------------
1731AC_MSG_CHECKING(for working htonl)
6f0e3f6e
PJ
1732AC_CACHE_VAL(ac_cv_htonl_works,
1733 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1734 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1735 ]
1736)
7ea487bc 1737AC_MSG_RESULT($ac_cv_htonl_works)
1738
14c17fd8 1739AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
d0199430 1740 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
5734509c 1741 ospf6d/Makefile isisd/Makefile babeld/Makefile vtysh/Makefile
f281ab97 1742 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
5bb7e4d1 1743 tests/bgpd.tests/Makefile
c69905b6 1744 tests/libzebra.tests/Makefile
f281ab97 1745 redhat/Makefile
69f1fc22 1746 pkgsrc/Makefile
670bbf19 1747 redhat/quagga.spec
b7a97f82 1748 lib/version.h
14c17fd8 1749 doc/defines.texi
f695b01f 1750 isisd/topology/Makefile
cbd04084 1751 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
f31293af 1752 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
26275b05 1753AC_CONFIG_FILES([solaris/Makefile])
1754
670bbf19 1755AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
48577196 1756## Hack, but working solution to avoid rebuilding of quagga.info.
1757## It's already in CVS until texinfo 4.7 is more common.
14c17fd8 1758AC_OUTPUT
7ea487bc 1759
1760echo "
c89f6494 1761Quagga configuration
1762--------------------
1763quagga version : ${PACKAGE_VERSION}
1080c13f 1764host operating system : ${host_os}
7ea487bc 1765source code location : ${srcdir}
1766compiler : ${CC}
1767compiler flags : ${CFLAGS}
6f0e3f6e 1768make : ${MAKE-make}
08d7f653 1769includes : ${INCLUDES}
6f0e3f6e 1770linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
e8f2984c 1771state file directory : ${quagga_statedir}
dc7a2bf1 1772config file directory : `eval echo \`echo ${sysconfdir}\``
d6b72f7a 1773example directory : `eval echo \`echo ${exampledir}\``
8d4aee5d 1774user to run as : ${enable_user}
1775group to run as : ${enable_group}
1776group for vty sockets : ${enable_vty_group}
aa593d5e 1777config file mask : ${enable_configfile_mask}
1778log file mask : ${enable_logfile_mask}
dc7a2bf1 1779
1780The above user and group must have read/write access to the state file
105b8239
PJ
1781directory and to the config files in the config file directory."
1782
1783if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1784Warning: The ${MAKE-make} programme detected, either in your path or
1785via the MAKE variable, is not GNU Make. GNU make may be installed as
1786gmake on some systems. and is required to complete a build of Quagga
1787" > /dev/stderr
1788fi