blob: 27d26ef9c15da8272d23f724e9fcad58511f7ee2 [file] [log] [blame]
paul7ea487b2003-03-17 02:05:07 +00001##
paule8f29842003-08-12 13:08:31 +00002## Configure template file for Quagga.
paul7ea487b2003-03-17 02:05:07 +00003## autoconf will generate configure script.
4##
5## Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
paule8f29842003-08-12 13:08:31 +00006## Portions Copyright (c) 2003 Paul Jakma <paul@dishone.st>
paul7ea487b2003-03-17 02:05:07 +00007##
Paul Jakma105b8232006-05-28 08:02:41 +00008## $Id$
paule8f29842003-08-12 13:08:31 +00009AC_PREREQ(2.53)
paul7ea487b2003-03-17 02:05:07 +000010
Paul Jakmad8509632011-03-21 14:56:00 +000011AC_INIT(Quagga, 0.99.18, [https://bugzilla.quagga.net])
paulfa1253d2003-09-24 05:09:26 +000012AC_CONFIG_SRCDIR(lib/zebra.h)
Paul Jakma62c9f502009-07-19 17:33:21 +010013AC_CONFIG_MACRO_DIR([m4])
ajsdfb9a542005-04-11 14:55:55 +000014
15dnl -----------------------------------
16dnl Get hostname and other information.
17dnl -----------------------------------
18AC_CANONICAL_BUILD()
19AC_CANONICAL_HOST()
20AC_CANONICAL_TARGET()
21
gdt81b81822004-04-07 22:48:47 +000022AM_INIT_AUTOMAKE(1.6)
paul7ea487b2003-03-17 02:05:07 +000023AM_CONFIG_HEADER(config.h)
24
Jeremy Jackson7ec57362009-01-21 22:10:40 -050025AC_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
paul03ecfb62005-04-16 15:38:23 +000030AC_ARG_VAR([GAWK],[GNU AWK])
31
gdtd6b72f72003-12-03 17:24:27 +000032dnl default is to match previous behavior
gdtc4f0efe2003-12-04 15:39:25 +000033exampledir=${sysconfdir}
gdtd6b72f72003-12-03 17:24:27 +000034AC_ARG_ENABLE([exampledir],
35 AC_HELP_STRING([--enable-exampledir],
36 [specify alternate directory for examples]),
37 exampledir="$enableval",)
gdtc4f0efe2003-12-04 15:39:25 +000038dnl XXX add --exampledir to autoconf standard directory list somehow
gdtd6b72f72003-12-03 17:24:27 +000039AC_SUBST(exampledir)
40
gdtcbd04082004-08-31 18:16:36 +000041dnl 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
paul7ea487b2003-03-17 02:05:07 +000052dnl ------------
53dnl Check CFLAGS
54dnl ------------
55AC_ARG_WITH(cflags,
56[ --with-cflags Set CFLAGS for use in compilation.])
57if test "x$with_cflags" != "x" ; then
58 CFLAGS="$with_cflags" ; cflags_specified=yes ;
59elif test -n "$CFLAGS" ; then
60 cflags_specified=yes ;
61fi
62
hasso1969e4b2005-03-27 13:07:23 +000063dnl --------------------
64dnl Check CC and friends
65dnl --------------------
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +010066AC_LANG([C])
paul7ea487b2003-03-17 02:05:07 +000067AC_PROG_CC
hasso1969e4b2005-03-27 13:07:23 +000068AC_PROG_CPP
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +010069AM_PROG_CC_C_O
hasso1969e4b2005-03-27 13:07:23 +000070AC_PROG_EGREP
Greg Troxel553bdfe2007-02-06 20:10:35 +000071
72dnl autoconf 2.59 appears not to support AC_PROG_SED
73dnl AC_PROG_SED
74AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
hasso1969e4b2005-03-27 13:07:23 +000075
76dnl ------------------------------------------------------------------
77dnl Intel compiler check. Although Intel tries really hard to make icc
78dnl look like gcc, there are some differences. It's very verbose with
79dnl -Wall and it doesn't support the individual -W options.
80dnl ------------------------------------------------------------------
paul6a4b8832005-11-26 08:28:00 +000081if test "x${GCC}" = "xyes" ; then
82 COMPILER="GCC"
83 AC_MSG_CHECKING([whether we are using the Intel compiler])
84 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
85 [AC_MSG_RESULT([no])],
86 [COMPILER="ICC"
87 AC_MSG_RESULT([yes])]
88 )
89else
90 AC_MSG_CHECKING([whether we are using SunPro compiler])
91 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
92 [AC_MSG_RESULT([no])],
93 [COMPILER="SUNPRO"
94 AC_MSG_RESULT([yes])]
95 )
96fi
paul7ea487b2003-03-17 02:05:07 +000097
paula49c0ff2004-09-30 06:08:58 +000098dnl ---------------------------------------------
paul7ea487b2003-03-17 02:05:07 +000099dnl If CLFAGS doesn\'t exist set default value
paula49c0ff2004-09-30 06:08:58 +0000100dnl AC_PROG_CC will have set minimal default
101dnl already, eg "-O2 -g" for gcc, "-g" for others
paul27eebb32004-07-22 18:16:59 +0000102dnl (Wall is gcc specific... have to make sure
103dnl gcc is being used before setting it)
104dnl
paul6a4b8832005-11-26 08:28:00 +0000105dnl Intel icc 8.0 also sets __GNUC__,
106dnl but doesn't support all these fancy -W options.
hasso1969e4b2005-03-27 13:07:23 +0000107dnl Intel compiler warnings we ignore:
108dnl 279: controlling expression is constant.
109dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
110dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
111dnl macro.
112dnl 981: operands are evaluated in unspecified order.
paul6a4b8832005-11-26 08:28:00 +0000113dnl
114dnl Sun Studio 10 / SunPro 5.7 is also supported,
115dnl so lets set some sane CFLAGS for it.
116dnl ---------------------------------------------
hasso1969e4b2005-03-27 13:07:23 +0000117
paul6a4b8832005-11-26 08:28:00 +0000118AC_MSG_CHECKING([whether to set a default CFLAGS])
119if test "x${cflags_specified}" = "x" ; then
120 case ${COMPILER} in
121 "ICC")
122 CFLAGS="-Os -g -Wall -wd 279,869,981"
123 AC_MSG_RESULT([Intel default])
124 ;;
125 "GCC")
Andrew J. Schorr5fa05092007-04-30 19:14:08 +0000126 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
paul6a4b8832005-11-26 08:28:00 +0000127 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
128 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
129 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
130 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
131 # TODO: conditionally addd -Wpacked if handled
132 AC_MSG_RESULT([gcc default])
133 ;;
134 "SUNPRO")
Paul Jakma105b8232006-05-28 08:02:41 +0000135 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
paul6a4b8832005-11-26 08:28:00 +0000136 AC_MSG_RESULT([SunPro default])
137 ;;
138 *)
139 AC_MSG_RESULT([unknown compiler])
140 ;;
141 esac
142else
143 AC_MSG_RESULT([CFLAGS supplied by user])
hasso1969e4b2005-03-27 13:07:23 +0000144fi
145
paul7ea487b2003-03-17 02:05:07 +0000146dnl --------------
147dnl Check programs
148dnl --------------
paul7ea487b2003-03-17 02:05:07 +0000149AC_PROG_INSTALL
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000150AC_PROG_LN_S
paul7ea487b2003-03-17 02:05:07 +0000151AC_PROG_MAKE_SET
152AC_CHECK_TOOL(AR, ar)
paul7ea487b2003-03-17 02:05:07 +0000153
Paul Jakma105b8232006-05-28 08:02:41 +0000154dnl ---------------------------
155dnl We, perhaps unfortunately,
156dnl depend on GNU Make specific
157dnl constructs.
158dnl Give the user a warning if
159dnl not GNU Make.
160dnl ---------------------------
161AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
162 [quagga_cv_gnu_make=no
163 if ${MAKE-make} --version 2>/dev/null | \
164 grep '^GNU Make ' >/dev/null ; then
165 quagga_cv_gnu_make=yes;
166 fi
167 ]
168)
169
Paul Jakmad46d2a22007-05-10 16:53:04 +0000170dnl -----------------
171dnl System extensions
172dnl -----------------
Paul Jakmad46d2a22007-05-10 16:53:04 +0000173AC_GNU_SOURCE
paul7ea487b2003-03-17 02:05:07 +0000174
gdt87efd642004-06-30 17:36:11 +0000175dnl -------
176dnl libtool
177dnl -------
paul0fc42942004-08-19 04:41:21 +0000178AC_PROG_LIBTOOL
gdt87efd642004-06-30 17:36:11 +0000179
paul7ea487b2003-03-17 02:05:07 +0000180dnl ----------------------
181dnl Packages configuration
182dnl ----------------------
183AC_ARG_ENABLE(vtysh,
gdtfc9d0742004-06-30 14:25:12 +0000184[ --enable-vtysh include integrated vty shell for Quagga])
paul7ea487b2003-03-17 02:05:07 +0000185AC_ARG_ENABLE(ipv6,
186[ --disable-ipv6 turn off IPv6 related features and daemons])
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +0100187AC_ARG_ENABLE(doc,
188[ --disable-doc do not build docs])
paul7ea487b2003-03-17 02:05:07 +0000189AC_ARG_ENABLE(zebra,
190[ --disable-zebra do not build zebra daemon])
191AC_ARG_ENABLE(bgpd,
192[ --disable-bgpd do not build bgpd])
193AC_ARG_ENABLE(ripd,
194[ --disable-ripd do not build ripd])
195AC_ARG_ENABLE(ripngd,
196[ --disable-ripngd do not build ripngd])
197AC_ARG_ENABLE(ospfd,
198[ --disable-ospfd do not build ospfd])
paul7ea487b2003-03-17 02:05:07 +0000199AC_ARG_ENABLE(ospf6d,
200[ --disable-ospf6d do not build ospf6d])
ajsd0199432004-12-22 14:03:52 +0000201AC_ARG_ENABLE(watchquagga,
202[ --disable-watchquagga do not build watchquagga])
jardin9e867fe2003-12-23 08:56:18 +0000203AC_ARG_ENABLE(isisd,
hassoae399ab2004-09-13 20:22:18 +0000204[ --enable-isisd build isisd])
Greg Troxel97cee872007-08-02 13:36:56 +0000205AC_ARG_ENABLE(solaris,
206[ --enable-solaris build solaris])
paul7ea487b2003-03-17 02:05:07 +0000207AC_ARG_ENABLE(bgp-announce,
208[ --disable-bgp-announce, turn off BGP route announcement])
209AC_ARG_ENABLE(netlink,
210[ --enable-netlink force to use Linux netlink interface])
211AC_ARG_ENABLE(broken-aliases,
212[ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +0200213AC_ARG_WITH(crypto,
214[ --without-crypto do not use libcrypto in SNMP])
paul7ea487b2003-03-17 02:05:07 +0000215AC_ARG_ENABLE(snmp,
216[ --enable-snmp enable SNMP support])
217AC_ARG_WITH(libpam,
218[ --with-libpam use libpam for PAM support in vtysh])
hasso71c0fb52003-05-25 20:18:13 +0000219AC_ARG_ENABLE(tcp-zebra,
paul7ea487b2003-03-17 02:05:07 +0000220[ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
paul7ea487b2003-03-17 02:05:07 +0000221AC_ARG_ENABLE(opaque-lsa,
Paul Jakma36de2612011-03-22 10:18:05 +0000222 AC_HELP_STRING([--disable-opaque-lsa],[do not build OSPF Opaque-LSA with OSPFAPI support (RFC2370)]))
paul1ef74ef2003-03-21 15:16:05 +0000223AC_ARG_ENABLE(ospfapi,
Paul Jakma36de2612011-03-22 10:18:05 +0000224[ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database])
paul1ef74ef2003-03-21 15:16:05 +0000225AC_ARG_ENABLE(ospfclient,
226[ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
227 (this is the default if --disable-ospfapi is set)])
paul7ea487b2003-03-17 02:05:07 +0000228AC_ARG_ENABLE(ospf-te,
Paul Jakma36de2612011-03-22 10:18:05 +0000229 AC_HELP_STRING([--disable-ospf-te],[disable Traffic Engineering Extension to OSPF]))
paul7ea487b2003-03-17 02:05:07 +0000230AC_ARG_ENABLE(multipath,
231[ --enable-multipath=ARG enable multipath function, ARG must be digit])
Paul P Komkoff Jrfe86b482008-08-13 16:56:05 +0100232AC_ARG_ENABLE(user,
233 AC_HELP_STRING([--enable-user=user], [user to run Quagga suite as (default quagga)]))
234AC_ARG_ENABLE(group,
235 AC_HELP_STRING([--enable-group=group], [group to run Quagga suite as (default quagga)]))
pauledd7c242003-06-04 13:59:38 +0000236AC_ARG_ENABLE(vty_group,
paul6b6942f2004-10-22 04:55:05 +0000237[ --enable-vty-group=ARG set vty sockets to have specified group as owner])
gdtaa593d52003-12-22 20:15:53 +0000238AC_ARG_ENABLE(configfile_mask,
239[ --enable-configfile-mask=ARG set mask for config files])
240AC_ARG_ENABLE(logfile_mask,
241[ --enable-logfile-mask=ARG set mask for log files])
pauledd7c242003-06-04 13:59:38 +0000242
hasso71c0fb52003-05-25 20:18:13 +0000243AC_ARG_ENABLE(rtadv,
paul6b6942f2004-10-22 04:55:05 +0000244[ --disable-rtadv disable IPV6 router advertisement feature])
hassoca776982004-06-12 14:33:05 +0000245AC_ARG_ENABLE(irdp,
paul6b6942f2004-10-22 04:55:05 +0000246[ --enable-irdp enable IRDP server support in zebra])
hassof695b012005-04-02 19:03:39 +0000247AC_ARG_ENABLE(isis_topology,
248[ --enable-isis-topology enable IS-IS topology generator])
hasso41d3fc92004-04-06 11:59:00 +0000249AC_ARG_ENABLE(capabilities,
250[ --disable-capabilities disable using POSIX capabilities])
paul6b6942f2004-10-22 04:55:05 +0000251AC_ARG_ENABLE(gcc_ultra_verbose,
252[ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
Paul Jakma3453a712009-06-12 14:21:02 +0100253AC_ARG_ENABLE(linux24_tcp_md5,
254[ --enable-linux24-tcp-md5 enable support for old, Linux-2.4 RFC2385 patch])
ajs3cade262004-12-29 17:50:22 +0000255AC_ARG_ENABLE(gcc-rdynamic,
256[ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
ajs924b9222005-04-16 17:11:24 +0000257AC_ARG_ENABLE(time-check,
258[ --disable-time-check disable slow thread warning messages])
Jeremy Jackson25f45882009-01-12 16:06:12 -0500259AC_ARG_ENABLE(pcreposix,
260[ --enable-pcreposix enable using PCRE Posix libs for regex functions])
paul6b6942f2004-10-22 04:55:05 +0000261
262if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
263 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
264 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
265 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
266 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
267fi
paul7ea487b2003-03-17 02:05:07 +0000268
ajs3cade262004-12-29 17:50:22 +0000269if test x"${enable_gcc_rdynamic}" = x"yes" ; then
270 LDFLAGS="${LDFLAGS} -rdynamic"
271fi
272
ajs924b9222005-04-16 17:11:24 +0000273if test x"${enable_time_check}" != x"no" ; then
274 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
275 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
276 else
277 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
278 fi
279fi
280
paul7ea487b2003-03-17 02:05:07 +0000281if test "${enable_broken_aliases}" = "yes"; then
282 if test "${enable_netlink}" = "yes"
283 then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000284 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
paul7ea487b2003-03-17 02:05:07 +0000285 fi
286 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
287 enable_netlink=no
288fi
289
290if test "${enable_tcp_zebra}" = "yes"; then
291 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
292fi
293
Paul Jakma36de2612011-03-22 10:18:05 +0000294if test "${enable_opaque_lsa}" != "no"; then
paul7ea487b2003-03-17 02:05:07 +0000295 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
296fi
297
Paul Jakma36de2612011-03-22 10:18:05 +0000298if test "${enable_ospf_te}" != "no"; then
paul7ea487b2003-03-17 02:05:07 +0000299 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
300 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
301fi
302
Paul Jakma3453a712009-06-12 14:21:02 +0100303if test "${enable_linux24_tcp_md5}" = "yes"; then
304 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
305fi
306
gdtd2a0ccc2003-12-03 18:13:48 +0000307AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
308if test "${enable_rtadv}" != "no"; then
hasso71c0fb52003-05-25 20:18:13 +0000309 AC_MSG_RESULT(yes)
gdtd2a0ccc2003-12-03 18:13:48 +0000310 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
paul2487bea2003-05-25 23:51:31 +0000311else
312 AC_MSG_RESULT(no)
hasso71c0fb52003-05-25 20:18:13 +0000313fi
paul7ea487b2003-03-17 02:05:07 +0000314
hassoca776982004-06-12 14:33:05 +0000315if test "${enable_irdp}" = "yes"; then
316 AC_DEFINE(HAVE_IRDP,, IRDP )
317fi
318
hassof695b012005-04-02 19:03:39 +0000319if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
320 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
321 ISIS_TOPOLOGY_INCLUDES="-I./topology"
322 ISIS_TOPOLOGY_DIR="topology"
323 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
324fi
325
326AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
327AC_SUBST(ISIS_TOPOLOGY_DIR)
328AC_SUBST(ISIS_TOPOLOGY_LIB)
329
paul79cb2162003-06-06 12:19:53 +0000330if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
paule8f29842003-08-12 13:08:31 +0000331 enable_user="quagga"
pauledd7c242003-06-04 13:59:38 +0000332elif test "${enable_user}" = "no"; then
333 enable_user="root"
334fi
pauledd7c242003-06-04 13:59:38 +0000335
paul79cb2162003-06-06 12:19:53 +0000336if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
paule8f29842003-08-12 13:08:31 +0000337 enable_group="quagga"
pauledd7c242003-06-04 13:59:38 +0000338elif test "${enable_group}" = "no"; then
339 enable_group="root"
340fi
pauledd7c242003-06-04 13:59:38 +0000341
342if test x"${enable_vty_group}" = x"yes" ; then
paul8d4aee52003-06-06 00:30:35 +0000343 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
paul79cb2162003-06-06 12:19:53 +0000344elif test x"${enable_vty_group}" != x""; then
paul8d4aee52003-06-06 00:30:35 +0000345 if test x"${enable_vty_group}" != x"no"; then
pauledd7c242003-06-04 13:59:38 +0000346 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
347 fi
348fi
paul26275b02005-04-11 07:10:47 +0000349AC_SUBST([enable_user])
350AC_SUBST([enable_group])
351AC_SUBST([enable_vty_group])
352AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
353AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
pauledd7c242003-06-04 13:59:38 +0000354
gdtaa593d52003-12-22 20:15:53 +0000355enable_configfile_mask=${enable_configfile_mask:-0600}
356AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
357
358enable_logfile_mask=${enable_logfile_mask:-0600}
359AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
360
paul7ea487b2003-03-17 02:05:07 +0000361MULTIPATH_NUM=1
362
363case "${enable_multipath}" in
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000364 [[0-9]|[1-9][0-9]])
paul7ea487b2003-03-17 02:05:07 +0000365 MULTIPATH_NUM="${enable_multipath}"
366 ;;
367 "")
368 ;;
369 *)
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000370 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
paul7ea487b2003-03-17 02:05:07 +0000371 ;;
372esac
373
paul7ea487b2003-03-17 02:05:07 +0000374AC_SUBST(MULTIPATH_NUM)
375
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000376dnl ------------------------------------
377dnl Check C keywords and standard types
378dnl ------------------------------------
379AC_C_CONST
380AC_C_INLINE
381AC_C_RESTRICT
382AC_C_VOLATILE
pauldc7a2bf2003-10-22 00:07:44 +0000383AC_HEADER_STDC
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000384AC_HEADER_TIME
385AC_HEADER_SYS_WAIT
386dnl AC_TYPE_PID_T
387AC_TYPE_UID_T
388AC_TYPE_MODE_T
389AC_TYPE_SIZE_T
390AC_TYPE_SIGNAL
391AC_STRUCT_TM
pauldc7a2bf2003-10-22 00:07:44 +0000392
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000393dnl -------------------------
394dnl Check other header files.
395dnl -------------------------
396AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
397 sys/types.h linux/version.h netdb.h asm/types.h \
398 sys/param.h limits.h signal.h libutil.h \
Paul Jakma6511cab2009-06-18 17:38:01 +0100399 sys/socket.h netinet/in.h time.h sys/time.h])
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000400
401dnl Utility macro to avoid retyping includes all the time
402m4_define([QUAGGA_INCLUDES],
403[#ifdef SUNOS_5
404#define _XPG4_2
405#define __EXTENSIONS__
406#endif
407#include <stdio.h>
408#if STDC_HEADERS
409# include <stdlib.h>
410# include <stddef.h>
411#else
412# if HAVE_STDLIB_H
413# include <stdlib.h>
414# endif
415#endif
416#if HAVE_SYS_TYPES_H
417# include <sys/types.h>
418#endif
419/* sys/conf.h depends on param.h on FBSD at least */
420#if HAVE_SYS_PARAM_H
421# include <sys/param.h>
422#endif
423/* Required for MAXSIG */
424#if HAVE_SIGNAL_H
425# include <signal.h>
426#endif
427#if HAVE_SYS_SOCKET_H
428# include <sys/socket.h>
429#endif
430#if HAVE_NETINET_IN_H
431# include <netinet/in.h>
432#endif
Paul Jakma6511cab2009-06-18 17:38:01 +0100433#ifdef TIME_WITH_SYS_TIME
434# include <sys/time.h>
435# include <time.h>
436#else
437# ifdef HAVE_SYS_TIME_H
438# include <sys/time.h>
439# else
440# include <time.h>
441# endif
442#endif /* TIME_WITH_SYS_TIME */
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000443])dnl
444
445AC_CHECK_HEADERS([sys/un.h net/if.h netinet/in_systm.h netinet/in_var.h \
446 net/if_dl.h net/if_var.h net/netopt.h net/route.h \
Paul Jakma11770e12007-06-22 16:14:42 +0000447 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000448 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
449 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
450 [], [], QUAGGA_INCLUDES)
451
452AC_CHECK_HEADERS([ucontext.h], [], [],
453[#ifndef __USE_GNU
454#define __USE_GNU
455#endif /* __USE_GNU */
456QUAGGA_INCLUDES
457])
458
459m4_define([QUAGGA_INCLUDES],
460QUAGGA_INCLUDES
461[#if HAVE_NET_IF_H
462# include <net/if.h>
463#endif
464#if HAVE_SYS_UN_H
465# include <sys/un.h>
466#endif
467#if HAVE_NETINET_IN_SYSTM_H
468# include <netinet/in_systm.h>
469#endif
470#if HAVE_NETINET_IN_VAR_H
471# include <netinet/in_var.h>
472#endif
473#if HAVE_NET_IF_DL_H
474# include <net/if_dl.h>
475#endif
476#if HAVE_NET_IF_VAR_H
477# include <net/if_var.h>
478#endif
479#if HAVE_NET_NETOPT_H
480# include <net/netopt.h>
481#endif
482#if HAVE_NET_ROUTE_H
483# include <net/route.h>
484#endif
485#if HAVE_INET_ND_H
486# include <inet/nd.h>
487#endif
488#if HAVE_ARPA_INET_H
489# include <arpa/inet.h>
490#endif
Paul Jakma11770e12007-06-22 16:14:42 +0000491/* Required for IDRP */
492#if HAVE_NETINET_IP_ICMP_H
493# include <netinet/ip_icmp.h>
494#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000495])dnl
pauldc7a2bf2003-10-22 00:07:44 +0000496
gdtfa3232e2003-12-03 17:52:30 +0000497dnl V6 headers are checked below, after we check for v6
paul7ea487b2003-03-17 02:05:07 +0000498
paul7ea487b2003-03-17 02:05:07 +0000499dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
500case "$host" in
paulafd8a122005-03-12 06:36:10 +0000501 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
paul7ea487b2003-03-17 02:05:07 +0000502 opsys=sol2-6
paulafd8a122005-03-12 06:36:10 +0000503 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
paul19877dd2004-05-11 10:49:35 +0000504 AC_DEFINE(SUNOS_5, 1, SunOS 5)
paul7ea487b2003-03-17 02:05:07 +0000505 AC_CHECK_LIB(xnet, main)
506 CURSES=-lcurses
507 ;;
paul1b73de82005-04-10 16:31:51 +0000508 [*-sunos5.[8-9]] \
509 | [*-sunos5.1[0-9]] \
510 | [*-sunos5.1[0-9].[0-9]] \
511 | [*-solaris2.[8-9]] \
512 | [*-solaris2.1[0-9]] \
513 | [*-solaris2.1[0-9].[0-9]])
paulafd8a122005-03-12 06:36:10 +0000514 opsys=sol8
Paul Jakmafb66b292006-05-28 08:26:15 +0000515 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
516 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
paul19877dd2004-05-11 10:49:35 +0000517 AC_CHECK_LIB(socket, main)
518 AC_CHECK_LIB(nsl, main)
paul1b73de82005-04-10 16:31:51 +0000519 AC_CHECK_LIB(umem, main)
Paul Jakmafb66b292006-05-28 08:26:15 +0000520 AC_CHECK_FUNCS([printstack],
521 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
522 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
523 ])
paul19877dd2004-05-11 10:49:35 +0000524 CURSES=-lcurses
525 ;;
paul7ea487b2003-03-17 02:05:07 +0000526 *-sunos5* | *-solaris2*)
paul19877dd2004-05-11 10:49:35 +0000527 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
paul7ea487b2003-03-17 02:05:07 +0000528 AC_CHECK_LIB(socket, main)
529 AC_CHECK_LIB(nsl, main)
530 CURSES=-lcurses
531 ;;
hassoc45eb832005-02-19 13:58:06 +0000532 *-linux*)
paul7ea487b2003-03-17 02:05:07 +0000533 opsys=gnu-linux
534 AC_DEFINE(GNU_LINUX,,GNU Linux)
535 ;;
536 *-nec-sysv4*)
537 AC_CHECK_LIB(nsl, gethostbyname)
538 AC_CHECK_LIB(socket, socket)
539 ;;
paul7ea487b2003-03-17 02:05:07 +0000540 *-openbsd*)
541 opsys=openbsd
542 AC_DEFINE(OPEN_BSD,,OpenBSD)
543 ;;
544 *-bsdi*)
545 opsys=bsdi
546 OTHER_METHOD="mtu_kvm.o"
547 AC_CHECK_LIB(kvm, main)
548 ;;
paul49e3b3c2003-10-23 20:39:50 +0000549 *-irix6.5)
pauldc7a2bf2003-10-22 00:07:44 +0000550 opsys=irix
551 AC_DEFINE(IRIX_65,,IRIX 6.5)
552 ;;
paul7ea487b2003-03-17 02:05:07 +0000553esac
554
Paul Jakma62c9f502009-07-19 17:33:21 +0100555AC_SYS_LARGEFILE
556
paul7ea487b2003-03-17 02:05:07 +0000557dnl ---------------------
558dnl Integrated VTY option
559dnl ---------------------
560case "${enable_vtysh}" in
561 "yes") VTYSH="vtysh";
562 AC_DEFINE(VTYSH,,VTY shell)
gdtfc9d0742004-06-30 14:25:12 +0000563 AC_PATH_PROG(PERL, perl)
564dnl Vtysh uses libreadline, which looks for termcap functions at
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000565dnl configure time. We follow readlines search order.
gdtfc9d0742004-06-30 14:25:12 +0000566dnl The required procedures are in libtermcap on NetBSD, in
567dnl [TODO] on Linux, and in [TODO] on Solaris.
hassoc0689392005-08-25 12:00:58 +0000568 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
paula9694592005-08-25 14:50:05 +0000569 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
570 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
571 [AC_CHECK_LIB(ncurses, tputs,
572 LIBREADLINE="$LIBREADLINE -lncurses")]
573 )]
574 )]
575 )
576 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
577 "$LIBREADLINE")
paul7ea487b2003-03-17 02:05:07 +0000578 if test $ac_cv_lib_readline_main = no; then
gdtfc9d0742004-06-30 14:25:12 +0000579 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
paul7ea487b2003-03-17 02:05:07 +0000580 fi
581 AC_CHECK_HEADER(readline/history.h)
582 if test $ac_cv_header_readline_history_h = no;then
583 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
584 fi
paula9694592005-08-25 14:50:05 +0000585 AC_CHECK_LIB(readline, rl_completion_matches,
586 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
paul3d3de8c2003-05-23 10:33:49 +0000587 if test $ac_cv_lib_readline_rl_completion_matches = no; then
588 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
589 fi
590 ;;
paul7ea487b2003-03-17 02:05:07 +0000591 "no" ) VTYSH="";;
592 * ) ;;
593esac
hassoc0689392005-08-25 12:00:58 +0000594AC_SUBST(LIBREADLINE)
paul7ea487b2003-03-17 02:05:07 +0000595
596dnl ----------
597dnl PAM module
598dnl ----------
599if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000600 AC_CHECK_HEADER([security/pam_misc.h],
601 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
602 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
603 pam_conv_func="misc_conv"
604 ],
605 [], QUAGGA_INCLUDES)
606 AC_CHECK_HEADER([security/openpam.h],
607 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
608 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
609 pam_conv_func="openpam_ttyconv"
610 ],
611 [], QUAGGA_INCLUDES)
paul24cd4352003-05-06 12:16:27 +0000612 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
613 AC_MSG_WARN([*** pam support will not be built ***])
614 with_libpam="no"
615 fi
616fi
617
618if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000619dnl took this test from proftpds configure.in and suited to our needs
paul7ea487b2003-03-17 02:05:07 +0000620dnl -------------------------------------------------------------------------
621dnl
622dnl This next check looks funky due to a linker problem with some versions
623dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
624dnl omitted requiring libdl linking information. PAM-0.72 or better ships
625dnl with RedHat 6.2 and Debian 2.2 or better.
626AC_CHECK_LIB(pam, pam_start,
paul24cd4352003-05-06 12:16:27 +0000627 [AC_CHECK_LIB(pam, $pam_conv_func,
paul7ea487b2003-03-17 02:05:07 +0000628 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
629 LIBPAM="-lpam"],
630 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
631 LIBPAM="-lpam -lpam_misc"]
632 )
633 ],
634
635 [AC_CHECK_LIB(pam, pam_end,
paul24cd4352003-05-06 12:16:27 +0000636 [AC_CHECK_LIB(pam, $pam_conv_func,
paula159ed92003-06-04 11:01:45 +0000637 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000638 LIBPAM="-lpam -ldl"],
paula159ed92003-06-04 11:01:45 +0000639 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000640 LIBPAM="-lpam -ldl -lpam_misc"]
641 )
642 ],AC_MSG_WARN([*** pam support will not be built ***]),
643 [-ldl])
644 ]
645)
646fi
647AC_SUBST(LIBPAM)
648
649dnl -------------------------------
650dnl Endian-ness check
651dnl -------------------------------
652AC_WORDS_BIGENDIAN
653
654dnl -------------------------------
655dnl check the size in byte of the C
656dnl -------------------------------
657dnl AC_CHECK_SIZEOF(char)
658dnl AC_CHECK_SIZEOF(int)
659dnl AC_CHECK_SIZEOF(short)
660dnl AC_CHECK_SIZEOF(long)
661
662dnl ----------------------------
663dnl check existance of functions
664dnl ----------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000665AC_FUNC_CHOWN
666AC_FUNC_FNMATCH
667AC_FUNC_FORK
668AC_FUNC_MALLOC
669AC_FUNC_MEMCMP
670AC_FUNC_MKTIME
671AC_FUNC_STRFTIME
672AC_FUNC_REALLOC
673AC_FUNC_STAT
674AC_FUNC_SELECT_ARGTYPES
675AC_FUNC_STRFTIME
Paul Jakmad46d2a22007-05-10 16:53:04 +0000676dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
677dnl can lead to strange side effects. So we just check for strnlen
678dnl directly, see below.
Paul Jakma2b5cb412007-05-10 17:05:16 +0000679dnl AC_FUNC_STRNLENdnl
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000680AC_FUNC_VPRINTF
681
682dnl -------------------------------
683dnl bgpd needs pow() and hence libm
684dnl -------------------------------
685TMPLIBS="$LIBS"
686AC_CHECK_HEADER([math.h],
687 [AC_CHECK_LIB([m], [pow],
688 [LIBM="-lm"
689 LIBS="$LIBS $LIBM"
690 AC_DEFINE(HAVE_LIBM,, Have libm)
691 AC_CHECK_FUNCS(pow,[],[LIBM=""])
692 ])
693])
694if test x"$LIBM" = x ; then
695 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
696fi
697LIBS="$TMPLIBS"
698AC_SUBST(LIBM)
699
700dnl ---------------
701dnl other functions
702dnl ---------------
703AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
Paul Jakmad46d2a22007-05-10 16:53:04 +0000704 inet_ntoa inet_aton strnlen \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000705 memchr memmove memset select socket \
706 strcasecmp strchr strcspn strdup strerror \
707 strncasecmp strndup strrchr strspn strstr \
708 strtol strtoul strlcat strlcpy \
709 daemon snprintf vsnprintf \
710 if_nametoindex if_indextoname getifaddrs \
711 uname fcntl])
712
paula159ed92003-06-04 11:01:45 +0000713AC_CHECK_FUNCS(setproctitle, ,
714 [AC_CHECK_LIB(util, setproctitle,
715 [LIBS="$LIBS -lutil"
716 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
717 ]
718 )
719 ]
720)
paul7ea487b2003-03-17 02:05:07 +0000721
722dnl ------------------------------------
723dnl Determine routing get and set method
724dnl ------------------------------------
725AC_MSG_CHECKING(zebra between kernel interface method)
726if test x"$opsys" = x"gnu-linux"; then
727 if test "${enable_netlink}" = "yes";then
728 AC_MSG_RESULT(netlink)
729 RT_METHOD=rt_netlink.o
730 AC_DEFINE(HAVE_NETLINK,,netlink)
731 netlink=yes
732 elif test "${enable_netlink}" = "no"; then
733 AC_MSG_RESULT(ioctl)
734 RT_METHOD=rt_ioctl.o
735 netlink=no
736 else
737 AC_MSG_RESULT(netlink)
738 RT_METHOD=rt_netlink.o
739 AC_DEFINE(HAVE_NETLINK,,netlink)
740 netlink=yes
741 fi
paul19877dd2004-05-11 10:49:35 +0000742elif test x"$opsys" = x"sol2-6";then
743 AC_MSG_RESULT(Route socket)
744 KERNEL_METHOD="kernel_socket.o"
745 RT_METHOD="rt_socket.o"
paulafd8a122005-03-12 06:36:10 +0000746elif test x"$opsys" = x"sol8";then
paul19877dd2004-05-11 10:49:35 +0000747 AC_MSG_RESULT(Route socket)
748 KERNEL_METHOD="kernel_socket.o"
749 RT_METHOD="rt_socket.o"
750elif test "$opsys" = "irix" ; then
751 AC_MSG_RESULT(Route socket)
752 KERNEL_METHOD="kernel_socket.o"
753 RT_METHOD="rt_socket.o"
paul7ea487b2003-03-17 02:05:07 +0000754else
paul19877dd2004-05-11 10:49:35 +0000755 AC_TRY_RUN([#include <errno.h>
paul7ea487b2003-03-17 02:05:07 +0000756#include <sys/types.h>
757#include <sys/socket.h>
758
759main ()
760{
761 int ac_sock;
762
763 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
764 if (ac_sock < 0 && errno == EINVAL)
765 exit (1);
766 exit (0);
767}],
768 [KERNEL_METHOD=kernel_socket.o
769 RT_METHOD=rt_socket.o
770 AC_MSG_RESULT(socket)],
771 [RT_METHOD=rt_ioctl.o
772 AC_MSG_RESULT(ioctl)],
773 [KERNEL_METHOD=kernel_socket.o
774 RT_METHOD=rt_socket.o
775 AC_MSG_RESULT(socket)])
paul7ea487b2003-03-17 02:05:07 +0000776fi
777AC_SUBST(RT_METHOD)
778AC_SUBST(KERNEL_METHOD)
779AC_SUBST(OTHER_METHOD)
780
Paul Jakma238497f2007-08-07 18:49:18 +0000781dnl --------------------------
782dnl Determine IS-IS I/O method
783dnl --------------------------
David Lamparter745bf052010-02-02 21:49:35 +0100784AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
785AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
786AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
Paul Jakma238497f2007-08-07 18:49:18 +0000787AC_CHECK_HEADER(net/bpf.h)
788AC_CHECK_HEADER(sys/dlpi.h)
789AC_MSG_CHECKING(zebra IS-IS I/O method)
790if test x"$opsys" = x"gnu-linux"; then
791 AC_MSG_RESULT(pfpacket)
David Lamparter745bf052010-02-02 21:49:35 +0100792 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
Paul Jakma238497f2007-08-07 18:49:18 +0000793elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
794 AC_MSG_RESULT(DLPI)
David Lamparter745bf052010-02-02 21:49:35 +0100795 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
Paul Jakma238497f2007-08-07 18:49:18 +0000796else
797 if test $ac_cv_header_net_bpf_h = no; then
798 if test $ac_cv_header_sys_dlpi_h = no; then
799 AC_MSG_RESULT(none)
800 AC_MSG_WARN([*** IS-IS support will not be built ***])
801 ISISD=""
802 else
803 AC_MSG_RESULT(DLPI)
804 fi
David Lamparter745bf052010-02-02 21:49:35 +0100805 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
Paul Jakma238497f2007-08-07 18:49:18 +0000806 else
807 AC_MSG_RESULT(BPF)
David Lamparter745bf052010-02-02 21:49:35 +0100808 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
Paul Jakma238497f2007-08-07 18:49:18 +0000809 fi
810fi
David Lamparter745bf052010-02-02 21:49:35 +0100811AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
Paul Jakma238497f2007-08-07 18:49:18 +0000812
ajsb99760a2005-01-04 16:24:43 +0000813dnl ------------------------------------
814dnl check for broken CMSG_FIRSTHDR macro
815dnl ------------------------------------
gdt6c200462005-01-04 17:02:48 +0000816AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
hasso5b087522005-04-03 23:46:37 +0000817AC_RUN_IFELSE([AC_LANG_SOURCE([[
ajsb99760a2005-01-04 16:24:43 +0000818#ifdef SUNOS_5
819#define _XPG4_2
820#define __EXTENSIONS__
821#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000822#ifdef HAVE_STDLIB_H
823# include <stdlib.h>
824#endif
825#ifdef HAVE_SYS_TYPES_H
ajsb99760a2005-01-04 16:24:43 +0000826#include <sys/types.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000827#endif
828#ifdef HAVE_SYS_SOCKET_H
ajsb99760a2005-01-04 16:24:43 +0000829#include <sys/socket.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000830#endif
ajsb99760a2005-01-04 16:24:43 +0000831
832main()
833{
834 struct msghdr msg;
835 char buf[4];
836
837 msg.msg_control = buf;
838 msg.msg_controllen = 0;
839
840 if (CMSG_FIRSTHDR(&msg) != NULL)
841 exit(0);
842 exit (1);
hasso5b087522005-04-03 23:46:37 +0000843}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
hassod33e8d72005-04-03 13:07:21 +0000844[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
ajsb99760a2005-01-04 16:24:43 +0000845
paul7ea487b2003-03-17 02:05:07 +0000846dnl ------------------------------
847dnl check kernel route read method
848dnl ------------------------------
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500849AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
850[if test "x$netlink" = xyes; then
851 quagga_cv_rtread_method="netlink"
paul7ea487b2003-03-17 02:05:07 +0000852else
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500853for quagga_cv_rtread_method in /proc/net/route /dev/ip /dev/null;
paul7ea487b2003-03-17 02:05:07 +0000854do
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500855 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
paul7ea487b2003-03-17 02:05:07 +0000856done
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500857case $quagga_cv_rtread_method in
858 "/proc/net/route") quagga_cv_rtread_method="proc";;
paul9c30ab62003-07-08 08:36:17 +0000859 "/dev/ip")
860 case "$host" in
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500861 *-freebsd*) quagga_cv_rtread_method="sysctl";;
862 *) quagga_cv_rtread_method="getmsg";;
paul9c30ab62003-07-08 08:36:17 +0000863 esac;;
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500864 *)
865 quagga_cv_rtread_method="sysctl";;
paul7ea487b2003-03-17 02:05:07 +0000866esac
867fi])
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500868RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
paul7ea487b2003-03-17 02:05:07 +0000869AC_SUBST(RTREAD_METHOD)
870
871dnl -----------------------------
872dnl check interface lookup method
873dnl -----------------------------
paul19877dd2004-05-11 10:49:35 +0000874IOCTL_METHOD=ioctl.o
paul7ea487b2003-03-17 02:05:07 +0000875AC_MSG_CHECKING(interface looking up method)
876if test "$netlink" = yes; then
877 AC_MSG_RESULT(netlink)
878 IF_METHOD=if_netlink.o
paul19877dd2004-05-11 10:49:35 +0000879elif test "$opsys" = "sol2-6";then
880 AC_MSG_RESULT(Solaris GIF)
881 IF_METHOD=if_ioctl.o
paulafd8a122005-03-12 06:36:10 +0000882elif test "$opsys" = "sol8";then
paul19877dd2004-05-11 10:49:35 +0000883 AC_MSG_RESULT(Solaris GLIF)
884 IF_METHOD=if_ioctl_solaris.o
885 IOCTL_METHOD=ioctl_solaris.o
886elif test "$opsys" = "irix" ; then
887 AC_MSG_RESULT(IRIX)
888 IF_METHOD=if_ioctl.o
889elif test "$opsys" = "openbsd";then
890 AC_MSG_RESULT(openbsd)
891 IF_METHOD=if_ioctl.o
892elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
893 AC_MSG_RESULT(sysctl)
paul7ea487b2003-03-17 02:05:07 +0000894 IF_METHOD=if_sysctl.o
895 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
paul19877dd2004-05-11 10:49:35 +0000896else
paul7ea487b2003-03-17 02:05:07 +0000897 AC_MSG_RESULT(ioctl)
898 IF_METHOD=if_ioctl.o
paul7ea487b2003-03-17 02:05:07 +0000899fi
900AC_SUBST(IF_METHOD)
paul19877dd2004-05-11 10:49:35 +0000901AC_SUBST(IOCTL_METHOD)
paul7ea487b2003-03-17 02:05:07 +0000902
paul42c98192005-05-07 02:22:51 +0000903dnl ---------------------------------------------------------------
904dnl figure out how to specify an interface in multicast sockets API
905dnl ---------------------------------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000906AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
paul42c98192005-05-07 02:22:51 +0000907
908AC_MSG_CHECKING([for BSD struct ip_mreq hack])
909AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
910#include <sys/param.h>
Denis Ovsienkoc5408352009-04-13 20:11:44 +0400911#endif],[#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000)
paul42c98192005-05-07 02:22:51 +0000912 return (0);
913#else
914 #error No support for BSD struct ip_mreq hack detected
915#endif],[AC_MSG_RESULT(yes)
916AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
917AC_MSG_RESULT(no))
918
Andrew J. Schorrc543a172008-01-10 15:24:32 +0000919dnl ---------------------------------------------------------------
920dnl figure out how to check link-state
921dnl ---------------------------------------------------------------
Andrew J. Schorr6418bed2008-01-11 16:33:59 +0000922AC_CHECK_HEADER([net/if.h],
923 [AC_CHECK_HEADER( [net/if_media.h],
924 [m4_define([LINK_DETECT_INCLUDES],
925 QUAGGA_INCLUDES
926 [#include <net/if_media.h>
927 ])
928 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
929 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
930 [], LINK_DETECT_INCLUDES)],
931 [],
932 QUAGGA_INCLUDES)],
933 [], QUAGGA_INCLUDES )
Andrew J. Schorrc543a172008-01-10 15:24:32 +0000934
Paul Jakma0df7c912008-07-21 21:02:49 +0000935dnl ------------------------
936dnl TCP_MD5SIG socket option
937dnl ------------------------
938
939AC_CHECK_HEADER([netinet/tcp.h],
940 [m4_define([MD5_INCLUDES],
941 QUAGGA_INCLUDES
942 [#include <netinet/tcp.h>
943 ])
944 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
945 [],
946 QUAGGA_INCLUDES)
947if test $ac_cv_have_decl_TCP_MD5SIG = no; then
948 AC_CHECK_HEADER([linux/tcp.h],
949 [m4_define([MD5_INCLUDES],
950 QUAGGA_INCLUDES
951 [#include <linux/tcp.h>
952 ])
953 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
954fi
955
paul7ea487b2003-03-17 02:05:07 +0000956dnl -----------------------
957dnl check proc file system.
958dnl -----------------------
Stephen Hemmingercadfb2c2008-08-16 18:03:44 +0100959if test "$netlink" != yes; then
960 if test -r /proc/net/dev; then
961 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
962 IF_PROC=if_proc.o
963 fi
964 if test -r /proc/net/if_inet6; then
965 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
966 IF_PROC=if_proc.o
967 fi
paul7ea487b2003-03-17 02:05:07 +0000968fi
969AC_SUBST(IF_PROC)
970
971dnl -----------------------------
972dnl check ipforward detect method
973dnl -----------------------------
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500974AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
975[for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
paul7ea487b2003-03-17 02:05:07 +0000976do
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500977 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
paul7ea487b2003-03-17 02:05:07 +0000978done
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500979case $quagga_cv_ipforward_method in
980 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
paul7ea487b2003-03-17 02:05:07 +0000981 "/dev/ip")
982 case "$host" in
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500983 *-nec-sysv4*) quagga_cv_ipforward_method="ews";;
984 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
985 *) quagga_cv_ipforward_method="solaris";;
paul7ea487b2003-03-17 02:05:07 +0000986 esac;;
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500987 *) quagga_cv_ipforward_method="sysctl";;
paul7ea487b2003-03-17 02:05:07 +0000988esac])
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500989IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
paul7ea487b2003-03-17 02:05:07 +0000990AC_SUBST(IPFORWARD)
991
992AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
993
994dnl ----------
995dnl IPv6 check
996dnl ----------
997AC_MSG_CHECKING(whether does this OS have IPv6 stack)
998if test "${enable_ipv6}" = "no"; then
999 AC_MSG_RESULT(disabled)
1000else
1001dnl ----------
1002dnl INRIA IPv6
1003dnl ----------
paula159ed92003-06-04 11:01:45 +00001004 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1005 zebra_cv_ipv6=yes
1006 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1007 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1008 RIPNGD="ripngd"
1009 OSPF6D="ospf6d"
1010 LIB_IPV6=""
1011 AC_MSG_RESULT(INRIA IPv6)
paul7ea487b2003-03-17 02:05:07 +00001012dnl ---------
1013dnl KAME IPv6
1014dnl ---------
paula159ed92003-06-04 11:01:45 +00001015 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1016 zebra_cv_ipv6=yes
1017 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1018 AC_DEFINE(KAME,1,KAME IPv6)
1019 RIPNGD="ripngd"
1020 OSPF6D="ospf6d"
1021 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
paul7ea487b2003-03-17 02:05:07 +00001022 LIB_IPV6="-L/usr/local/v6/lib -linet6"
paula159ed92003-06-04 11:01:45 +00001023 fi
1024 AC_MSG_RESULT(KAME)
hasso71c0fb52003-05-25 20:18:13 +00001025dnl -------------------------
1026dnl MUSICA IPv6
1027dnl default host check
1028dnl It is not used by Kheops
1029dnl -------------------------
paula159ed92003-06-04 11:01:45 +00001030 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1031 zebra_cv_ipv6=yes
1032 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1033 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1034 AC_DEFINE(KAME,1,KAME IPv6 stack)
1035 RIPNGD="ripngd"
1036 OSPF6D="ospf6d"
1037 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
hasso71c0fb52003-05-25 20:18:13 +00001038 LIB_IPV6="-L/usr/local/v6/lib -linet6"
paula159ed92003-06-04 11:01:45 +00001039 fi
1040 AC_MSG_RESULT(MUSICA)
paul7ea487b2003-03-17 02:05:07 +00001041dnl ---------
1042dnl NRL check
1043dnl ---------
paula159ed92003-06-04 11:01:45 +00001044 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1045 zebra_cv_ipv6=yes
1046 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1047 AC_DEFINE(NRL,1,NRL)
1048 RIPNGD="ripngd"
1049 OSPF6D="ospf6d"
1050 if test x"$opsys" = x"bsdi";then
paul7ea487b2003-03-17 02:05:07 +00001051 AC_DEFINE(BSDI_NRL,,BSDI)
1052 AC_MSG_RESULT(BSDI_NRL)
paula159ed92003-06-04 11:01:45 +00001053 else
paul7ea487b2003-03-17 02:05:07 +00001054 AC_MSG_RESULT(NRL)
paula159ed92003-06-04 11:01:45 +00001055 fi
paul19877dd2004-05-11 10:49:35 +00001056dnl ------------------------------------
1057dnl Solaris 9, 10 and potentially higher
1058dnl ------------------------------------
paulafd8a122005-03-12 06:36:10 +00001059 elif test x"$opsys" = x"sol8"; then
paul19877dd2004-05-11 10:49:35 +00001060 zebra_cv_ipv6=yes;
1061 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1062 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1063 RIPNGD="ripngd"
1064 OSPF6D="ospf6d"
1065 AC_MSG_RESULT(Solaris IPv6)
paul7ea487b2003-03-17 02:05:07 +00001066dnl ----------
1067dnl Linux IPv6
1068dnl ----------
paula159ed92003-06-04 11:01:45 +00001069 elif test "${enable_ipv6}" = "yes"; then
1070 AC_EGREP_CPP(yes, [
1071 #include <linux/version.h>
1072 /* 2.1.128 or later */
1073 #if LINUX_VERSION_CODE >= 0x020180
1074 yes
1075 #endif],
1076 [zebra_cv_ipv6=yes
1077 zebra_cv_linux_ipv6=yes
1078 AC_MSG_RESULT(Linux IPv6)])
1079 else
1080 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1081 then
paul7ea487b2003-03-17 02:05:07 +00001082 zebra_cv_ipv6=yes
1083 zebra_cv_linux_ipv6=yes
1084 AC_MSG_RESULT(Linux IPv6)
paula159ed92003-06-04 11:01:45 +00001085 fi
1086 fi
paul7ea487b2003-03-17 02:05:07 +00001087
paula159ed92003-06-04 11:01:45 +00001088 if test "$zebra_cv_linux_ipv6" = "yes";then
hasso850d39f2005-06-30 13:52:20 +00001089 AC_MSG_CHECKING(whether libc has IPv6 support)
1090 AC_TRY_LINK([#include <netinet/in.h>
1091 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1092 [AC_MSG_RESULT(yes)
1093 zebra_cv_ipv6=yes
1094 zebra_cv_linux_ipv6=yes],
1095 [AC_MSG_RESULT(no)
1096 zebra_cv_ipv6=no
1097 zebra_cv_linux_ipv6=no])
1098 fi
1099
1100 if test "$zebra_cv_linux_ipv6" = "yes";then
paula159ed92003-06-04 11:01:45 +00001101 AC_MSG_CHECKING(for GNU libc >= 2.1)
1102 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1103 AC_EGREP_CPP(yes, [
paul7ea487b2003-03-17 02:05:07 +00001104#include <features.h>
1105#if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1106 yes
paula159ed92003-06-04 11:01:45 +00001107#endif],
1108 [glibc=yes
1109 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1110 AC_MSG_RESULT(yes)],
1111 AC_MSG_RESULT(no)
1112 )
1113 RIPNGD="ripngd"
1114 OSPF6D="ospf6d"
1115 if test "$glibc" != "yes"; then
paul7ea487b2003-03-17 02:05:07 +00001116 INCLUDES="-I/usr/inet6/include"
1117 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1118 LIB_IPV6="-L/usr/inet6/lib -linet6"
1119 fi
paula159ed92003-06-04 11:01:45 +00001120 fi
1121 fi
paul7ea487b2003-03-17 02:05:07 +00001122
1123dnl -----------------------
1124dnl Set IPv6 related values
1125dnl -----------------------
paula159ed92003-06-04 11:01:45 +00001126 LIBS="$LIB_IPV6 $LIBS"
1127 AC_SUBST(LIB_IPV6)
paul7ea487b2003-03-17 02:05:07 +00001128
paula159ed92003-06-04 11:01:45 +00001129 if test x"$RIPNGD" = x""; then
1130 AC_MSG_RESULT(IPv4 only)
1131 fi
paul7ea487b2003-03-17 02:05:07 +00001132fi
1133
gdtfa3232e2003-12-03 17:52:30 +00001134dnl ------------------
1135dnl IPv6 header checks
1136dnl ------------------
1137if test "x${zebra_cv_ipv6}" = "xyes"; then
1138AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001139 netinet6/in6_var.h netinet6/nd6.h], [], [],
1140 QUAGGA_INCLUDES)
gdtfa3232e2003-12-03 17:52:30 +00001141fi
1142
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001143m4_define([QUAGGA_INCLUDES],dnl
1144QUAGGA_INCLUDES
1145[#if HAVE_NETINET6_IN6_H
1146#include <netinet6/in6.h>
1147#endif
1148#if HAVE_NETINET_IN6_VAR_H
1149#include <netinet/in6_var.h>
1150#endif
1151#if HAVE_NETINET_ICMP6_H
1152# include <netinet/icmp6.h>
1153#endif
1154#if HAVE_NETINET6_IN6_VAR_H
1155# include <netinet6/in6_var.h>
1156#endif
1157#if HAVE_NETINET6_ND6_H
Hasso Tepperfbf24542007-06-25 19:30:59 +00001158# include <netinet6/nd6.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001159#endif
1160])dnl
1161
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +01001162dnl disable doc check
1163if test "${enable_doc}" = "no";then
1164 DOC=""
1165else
1166 DOC="doc"
1167fi
1168
paul7ea487b2003-03-17 02:05:07 +00001169dnl --------------------
1170dnl Daemon disable check
1171dnl --------------------
1172if test "${enable_zebra}" = "no";then
1173 ZEBRA=""
1174else
1175 ZEBRA="zebra"
1176fi
1177
1178if test "${enable_bgpd}" = "no";then
1179 BGPD=""
1180else
1181 BGPD="bgpd"
1182fi
1183
1184if test "${enable_ripd}" = "no";then
1185 RIPD=""
1186else
1187 RIPD="ripd"
1188fi
1189
1190if test "${enable_ospfd}" = "no";then
1191 OSPFD=""
1192else
1193 OSPFD="ospfd"
1194fi
1195
ajsd0199432004-12-22 14:03:52 +00001196if test "${enable_watchquagga}" = "no";then
1197 WATCHQUAGGA=""
1198else
1199 WATCHQUAGGA="watchquagga"
1200fi
1201
paul1ef74ef2003-03-21 15:16:05 +00001202OSPFCLIENT=""
1203if test "${enable_opaque_lsa}" = "yes"; then
1204 if test "${enable_ospfapi}" != "no";then
paul9a569842003-03-28 01:45:13 +00001205 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
paul1ef74ef2003-03-21 15:16:05 +00001206
1207 if test "${enable_ospfclient}" != "no";then
1208 OSPFCLIENT="ospfclient"
1209 fi
1210 fi
1211
paul7ea487b2003-03-17 02:05:07 +00001212fi
1213
1214case "${enable_ripngd}" in
1215 "yes") RIPNGD="ripngd";;
1216 "no" ) RIPNGD="";;
1217 * ) ;;
1218esac
1219
1220case "${enable_ospf6d}" in
1221 "yes") OSPF6D="ospf6d";;
1222 "no" ) OSPF6D="";;
1223 * ) ;;
1224esac
1225
jardin9e867fe2003-12-23 08:56:18 +00001226case "${enable_isisd}" in
1227 "yes") ISISD="isisd";;
1228 "no" ) ISISD="";;
hassoae399ab2004-09-13 20:22:18 +00001229 * ) ;;
jardin9e867fe2003-12-23 08:56:18 +00001230esac
1231
Greg Troxel97cee872007-08-02 13:36:56 +00001232# XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1233case "${enable_solaris}" in
1234 "yes") SOLARIS="solaris";;
1235 "no" ) SOLARIS="";;
1236 * ) ;;
1237esac
1238
paul7ea487b2003-03-17 02:05:07 +00001239if test "${enable_bgp_announce}" = "no";then
Paul Jakma750e8142008-07-22 21:11:48 +00001240 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1241else
1242 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
paul7ea487b2003-03-17 02:05:07 +00001243fi
1244
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +01001245AC_SUBST(DOC)
paul7ea487b2003-03-17 02:05:07 +00001246AC_SUBST(ZEBRA)
1247AC_SUBST(BGPD)
1248AC_SUBST(RIPD)
1249AC_SUBST(RIPNGD)
1250AC_SUBST(OSPFD)
1251AC_SUBST(OSPF6D)
ajsd0199432004-12-22 14:03:52 +00001252AC_SUBST(WATCHQUAGGA)
jardin9e867fe2003-12-23 08:56:18 +00001253AC_SUBST(ISISD)
Greg Troxel97cee872007-08-02 13:36:56 +00001254AC_SUBST(SOLARIS)
paul7ea487b2003-03-17 02:05:07 +00001255AC_SUBST(VTYSH)
1256AC_SUBST(INCLUDES)
1257AC_SUBST(CURSES)
1258AC_SUBST(OSPFCLIENT)
paul1ef74ef2003-03-21 15:16:05 +00001259AC_SUBST(OSPFAPI)
paul7ea487b2003-03-17 02:05:07 +00001260AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1261AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1262AC_CHECK_LIB(crypt, crypt)
1263AC_CHECK_LIB(resolv, res_init)
paul7ea487b2003-03-17 02:05:07 +00001264
1265dnl ---------------------------------------------------
1266dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1267dnl ---------------------------------------------------
paula159ed92003-06-04 11:01:45 +00001268AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1269AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1270AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
paul7ea487b2003-03-17 02:05:07 +00001271
1272dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001273dnl check system has PCRE regexp
1274dnl ---------------------------
1275if test "x$enable_pcreposix" = "xyes"; then
1276 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1277 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1278fi
1279
1280if test "x$enable_pcreposix" != "xyes"; then
1281dnl ---------------------------
paul7ea487b2003-03-17 02:05:07 +00001282dnl check system has GNU regexp
1283dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001284AC_MSG_CHECKING(whether system has GNU regex)
paul7ea487b2003-03-17 02:05:07 +00001285AC_CHECK_LIB(c, regexec,
1286[AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1287 LIB_REGEX=""],
1288[LIB_REGEX="regex.o"])
Jeremy Jackson25f45882009-01-12 16:06:12 -05001289fi
1290AC_SUBST(HAVE_LIBPCREPOSIX)
paul7ea487b2003-03-17 02:05:07 +00001291AC_SUBST(LIB_REGEX)
1292
1293dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001294dnl check Net-SNMP library
paul7ea487b2003-03-17 02:05:07 +00001295dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001296if test "${enable_snmp}" = "yes"; then
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +02001297 if test "$with_crypto" != "no"; then
1298 LIBS="${LIBS} -lcrypto";
1299 fi
paulb1fc9ac2006-01-31 10:09:27 +00001300 AC_CHECK_LIB(netsnmp, asn_parse_int,
1301 [AC_DEFINE(HAVE_NETSNMP,,Net SNMP)
1302 AC_DEFINE(HAVE_SNMP,,SNMP)
1303 LIBS="${LIBS} -lnetsnmp"],
1304 [AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])])
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +02001305
1306 AC_CHECK_HEADER([net-snmp/net-snmp-config.h],
1307 [],
1308 [AC_MSG_ERROR([--enable-snmp given, but cannot find net-snmp-config.h])],
1309 QUAGGA_INCLUDES)
paulb1fc9ac2006-01-31 10:09:27 +00001310 AC_SUBST(SNMP_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001311fi
1312
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001313dnl ---------------------------
1314dnl sockaddr and netinet checks
1315dnl ---------------------------
1316AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1317 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1318 socklen_t,
1319 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1320 struct nd_opt_adv_interval, struct rt_addrinfo,
Paul Jakma11770e12007-06-22 16:14:42 +00001321 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001322 [], [], QUAGGA_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001323
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001324AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1325 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1326 struct sockaddr_in6.sin6_scope_id,
1327 struct if6_aliasreq.ifra_lifetime,
1328 struct nd_opt_adv_interval.nd_opt_ai_type],
1329 [], [], QUAGGA_INCLUDES)
hasso71c0fb52003-05-25 20:18:13 +00001330
paul7ea487b2003-03-17 02:05:07 +00001331dnl ---------------------------
Paul Jakma11770e12007-06-22 16:14:42 +00001332dnl IRDP/pktinfo/icmphdr checks
paul7ea487b2003-03-17 02:05:07 +00001333dnl ---------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001334AC_CHECK_TYPES([struct in_pktinfo],
Paul Jakma11770e12007-06-22 16:14:42 +00001335 [AC_CHECK_TYPES([struct icmphdr],
1336 [if test "${enable_irdp}" != "no"; then
1337 AC_DEFINE(HAVE_IRDP,, IRDP)
1338 fi],
1339 [if test "${enable_irdp}" = "yes"; then
1340 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1341 fi], [QUAGGA_INCLUDES])],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001342 [if test "${enable_irdp}" = "yes"; then
1343 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1344 fi], [QUAGGA_INCLUDES])
vincent29c4c9b2005-03-25 13:05:47 +00001345
paul7ea487b2003-03-17 02:05:07 +00001346dnl --------------------------------------
1347dnl checking for getrusage struct and call
1348dnl --------------------------------------
1349AC_MSG_CHECKING(whether getrusage is available)
1350AC_TRY_COMPILE([#include <sys/resource.h>
1351],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1352[AC_MSG_RESULT(yes)
1353 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1354 AC_MSG_RESULT(no))
1355
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001356dnl --------------------------------------
1357dnl checking for clock_time monotonic struct and call
1358dnl --------------------------------------
Paul Jakma6511cab2009-06-18 17:38:01 +01001359AC_CHECK_DECL(CLOCK_MONOTONIC,
1360 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
Dmitry Tejblum9964fcf2009-11-05 16:50:36 +03001361 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
Paul Jakma6511cab2009-06-18 17:38:01 +01001362], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001363
pauledd7c242003-06-04 13:59:38 +00001364dnl -------------------
1365dnl capabilities checks
1366dnl -------------------
hasso41d3fc92004-04-06 11:59:00 +00001367if test "${enable_capabilities}" != "no"; then
1368 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1369 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1370 [AC_MSG_RESULT(yes)
1371 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1372 quagga_ac_keepcaps="yes"],
1373 AC_MSG_RESULT(no)
pauledd7c242003-06-04 13:59:38 +00001374 )
hasso41d3fc92004-04-06 11:59:00 +00001375 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1376 AC_CHECK_HEADERS(sys/capability.h)
1377 fi
1378 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1379 AC_CHECK_LIB(cap, cap_init,
1380 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1381 LIBCAP="-lcap"
paulceacedb2005-09-29 14:39:32 +00001382 quagga_ac_lcaps="yes"]
hasso41d3fc92004-04-06 11:59:00 +00001383 )
paulceacedb2005-09-29 14:39:32 +00001384 else
1385 AC_CHECK_HEADERS(priv.h,
1386 [AC_MSG_CHECKING(Solaris style privileges are available)
1387 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1388 [AC_MSG_RESULT(yes)
1389 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1390 quagga_ac_scaps="yes"],
1391 AC_MSG_RESULT(no)
1392 )
1393 ]
1394 )
1395 fi
1396 if test x"${quagga_ac_scaps}" = x"yes" \
1397 -o x"${quagga_ac_lcaps}" = x"yes"; then
1398 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
hasso41d3fc92004-04-06 11:59:00 +00001399 fi
pauledd7c242003-06-04 13:59:38 +00001400fi
1401AC_SUBST(LIBCAP)
1402
paulfb2d1502003-06-04 09:40:54 +00001403dnl ---------------------------
1404dnl check for glibc 'backtrace'
1405dnl ---------------------------
1406if test "${glibc}" = "yes"; then
Paul Jakmafb66b292006-05-28 08:26:15 +00001407 AC_CHECK_HEADER([execinfo.h],
1408 [AC_CHECK_FUNC([backtrace],
1409 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1410 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1411 ])
1412 ])
paulfb2d1502003-06-04 09:40:54 +00001413fi
1414
Paul Jakma41be32b2006-03-30 13:53:59 +00001415dnl -----------------------------------------
1416dnl check for malloc mallinfo struct and call
1417dnl this must try and link using LIBS, in
1418dnl order to check no alternative allocator
1419dnl has been specified, which might not provide
1420dnl mallinfo, e.g. such as Umem on Solaris.
1421dnl -----------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001422AC_CHECK_HEADER([malloc.h],
Paul Jakma41be32b2006-03-30 13:53:59 +00001423 [AC_MSG_CHECKING(whether mallinfo is available)
1424 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1425 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1426 [AC_MSG_RESULT(yes)
1427 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1428 AC_MSG_RESULT(no)
1429 )
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001430 ], [], QUAGGA_INCLUDES)
Paul Jakma41be32b2006-03-30 13:53:59 +00001431
paul408ad942003-05-20 00:03:33 +00001432dnl ----------
1433dnl configure date
1434dnl ----------
1435CONFDATE=`date '+%Y%m%d'`
1436AC_SUBST(CONFDATE)
1437
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001438dnl Conditionally enable PIE support for GNU toolchains.
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001439AC_ARG_ENABLE(pie, AS_HELP_STRING([--disable-pie], [Do not build tools as a Position Independent Executables]))
Paul P Komkoff Jr0e9de562008-09-24 16:42:35 +01001440if test "$enable_pie" != "no"; then
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001441 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1442 save_CFLAGS=$CFLAGS
1443 save_LDFLAGS=$LDFLAGS
1444 CFLAGS="$CFLAGS -fPIE"
1445 LDFLAGS="$LDFLAGS -pie"
1446 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1447 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1448 )
1449 CFLAGS=$save_CFLAGS
1450 LDFLAGS=$save_LDFLAGS
1451 ])
1452 if test "$ap_cv_cc_pie" = "yes"; then
1453 PICFLAGS="-fPIE"
1454 PILDFLAGS="-pie"
1455 fi
1456fi
1457
1458AC_SUBST(PICFLAGS)
1459AC_SUBST(PILDFLAGS)
1460
paul7ea487b2003-03-17 02:05:07 +00001461dnl ------------------------------
paula159ed92003-06-04 11:01:45 +00001462dnl set paths for state directory
paul23bd12c2003-04-07 06:11:09 +00001463dnl ------------------------------
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001464AC_MSG_CHECKING(directory to use for state file)
paul23bd12c2003-04-07 06:11:09 +00001465if test "${prefix}" = "NONE"; then
paule8f29842003-08-12 13:08:31 +00001466 quagga_statedir_prefix="";
paul23bd12c2003-04-07 06:11:09 +00001467else
paule8f29842003-08-12 13:08:31 +00001468 quagga_statedir_prefix=${prefix}
paul23bd12c2003-04-07 06:11:09 +00001469fi
1470if test "${localstatedir}" = '${prefix}/var'; then
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001471 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
paule8f29842003-08-12 13:08:31 +00001472 ${quagga_statedir_prefix}/var/adm dnl
1473 ${quagga_statedir_prefix}/etc dnl
paula159ed92003-06-04 11:01:45 +00001474 /var/run dnl
1475 /var/adm dnl
1476 /etc dnl
1477 /dev/null;
paul23bd12c2003-04-07 06:11:09 +00001478 do
paule8f29842003-08-12 13:08:31 +00001479 test -d $QUAGGA_STATE_DIR && break
paul23bd12c2003-04-07 06:11:09 +00001480 done
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001481 quagga_statedir=$QUAGGA_STATE_DIR
paul23bd12c2003-04-07 06:11:09 +00001482else
paule8f29842003-08-12 13:08:31 +00001483 quagga_statedir=${localstatedir}
paul23bd12c2003-04-07 06:11:09 +00001484fi
paule8f29842003-08-12 13:08:31 +00001485if test $quagga_statedir = "/dev/null"; then
paula159ed92003-06-04 11:01:45 +00001486 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1487fi
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001488AC_MSG_RESULT(${quagga_statedir})
1489AC_SUBST(quagga_statedir)
paula159ed92003-06-04 11:01:45 +00001490
paule8f29842003-08-12 13:08:31 +00001491AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1492AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1493AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1494AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1495AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1496AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
jardin9e867fe2003-12-23 08:56:18 +00001497AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
ajsd0199432004-12-22 14:03:52 +00001498AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
paule8f29842003-08-12 13:08:31 +00001499AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1500AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1501AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1502AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1503AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1504AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1505AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
jardin9e867fe2003-12-23 08:56:18 +00001506AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
ajs515210b2004-12-22 15:35:12 +00001507AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
paul7ea487b2003-03-17 02:05:07 +00001508
paul1eb8ef22005-04-07 07:30:20 +00001509dnl -------------------------------
1510dnl Quagga sources should always be
1511dnl current wrt interfaces. Dont
1512dnl allow deprecated interfaces to
1513dnl be exposed.
1514dnl -------------------------------
1515AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1516
paul7ea487b2003-03-17 02:05:07 +00001517dnl ---------------------------
1518dnl Check htonl works correctly
1519dnl ---------------------------
1520AC_MSG_CHECKING(for working htonl)
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001521AC_CACHE_VAL(ac_cv_htonl_works,
1522 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1523 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1524 ]
1525)
paul7ea487b2003-03-17 02:05:07 +00001526AC_MSG_RESULT($ac_cv_htonl_works)
1527
paul14c17fd2004-11-07 22:34:23 +00001528AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
ajsd0199432004-12-22 14:03:52 +00001529 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
jardin9e867fe2003-12-23 08:56:18 +00001530 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
paul14c17fd2004-11-07 22:34:23 +00001531 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
gdt69f1fc22004-08-27 15:57:35 +00001532 pkgsrc/Makefile
paul670bbf12004-11-12 09:05:00 +00001533 redhat/quagga.spec
gdtb7a97f82004-07-23 16:23:56 +00001534 lib/version.h
paul14c17fd2004-11-07 22:34:23 +00001535 doc/defines.texi
hassof695b012005-04-02 19:03:39 +00001536 isisd/topology/Makefile
gdtcbd04082004-08-31 18:16:36 +00001537 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
paulf31293a2004-11-12 09:27:04 +00001538 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
paul26275b02005-04-11 07:10:47 +00001539AC_CONFIG_FILES([solaris/Makefile])
1540
paul670bbf12004-11-12 09:05:00 +00001541AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
hasso48577192004-11-19 06:41:49 +00001542## Hack, but working solution to avoid rebuilding of quagga.info.
1543## It's already in CVS until texinfo 4.7 is more common.
paul14c17fd2004-11-07 22:34:23 +00001544AC_OUTPUT
paul7ea487b2003-03-17 02:05:07 +00001545
1546echo "
hassoc89f6492004-08-26 12:21:28 +00001547Quagga configuration
1548--------------------
1549quagga version : ${PACKAGE_VERSION}
David Wardcdb99502009-12-03 20:22:47 +03001550host operating system : ${host_os}
paul7ea487b2003-03-17 02:05:07 +00001551source code location : ${srcdir}
1552compiler : ${CC}
1553compiler flags : ${CFLAGS}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001554make : ${MAKE-make}
hasso2d582282005-03-28 15:29:07 +00001555includes : ${INCLUDES} ${SNMP_INCLUDES}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001556linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
paule8f29842003-08-12 13:08:31 +00001557state file directory : ${quagga_statedir}
pauldc7a2bf2003-10-22 00:07:44 +00001558config file directory : `eval echo \`echo ${sysconfdir}\``
gdtd6b72f72003-12-03 17:24:27 +00001559example directory : `eval echo \`echo ${exampledir}\``
paul8d4aee52003-06-06 00:30:35 +00001560user to run as : ${enable_user}
1561group to run as : ${enable_group}
1562group for vty sockets : ${enable_vty_group}
gdtaa593d52003-12-22 20:15:53 +00001563config file mask : ${enable_configfile_mask}
1564log file mask : ${enable_logfile_mask}
pauldc7a2bf2003-10-22 00:07:44 +00001565
1566The above user and group must have read/write access to the state file
Paul Jakma105b8232006-05-28 08:02:41 +00001567directory and to the config files in the config file directory."
1568
1569if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1570Warning: The ${MAKE-make} programme detected, either in your path or
1571via the MAKE variable, is not GNU Make. GNU make may be installed as
1572gmake on some systems. and is required to complete a build of Quagga
1573" > /dev/stderr
1574fi