blob: cd883d2afdac3c3fa7a2410b5fcf95283ce727c7 [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 Jakma5bc52c72009-06-22 16:11:06 +010011AC_INIT(Quagga, 0.99.13, [http://bugzilla.quagga.net])
paulfa1253d2003-09-24 05:09:26 +000012AC_CONFIG_SRCDIR(lib/zebra.h)
ajsdfb9a542005-04-11 14:55:55 +000013
14dnl -----------------------------------
15dnl Get hostname and other information.
16dnl -----------------------------------
17AC_CANONICAL_BUILD()
18AC_CANONICAL_HOST()
19AC_CANONICAL_TARGET()
20
gdt81b81822004-04-07 22:48:47 +000021AM_INIT_AUTOMAKE(1.6)
paul7ea487b2003-03-17 02:05:07 +000022AM_CONFIG_HEADER(config.h)
23
Jeremy Jackson7ec57362009-01-21 22:10:40 -050024AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
25if test "x$GAWK" = "xnot-in-PATH" ; then
26 AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
27BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
28fi
paul03ecfb62005-04-16 15:38:23 +000029AC_ARG_VAR([GAWK],[GNU AWK])
30
Tomasz Pala80abd9f2009-06-24 22:09:46 +010031AC_SYS_LARGEFILE
32
gdtd6b72f72003-12-03 17:24:27 +000033dnl default is to match previous behavior
gdtc4f0efe2003-12-04 15:39:25 +000034exampledir=${sysconfdir}
gdtd6b72f72003-12-03 17:24:27 +000035AC_ARG_ENABLE([exampledir],
36 AC_HELP_STRING([--enable-exampledir],
37 [specify alternate directory for examples]),
38 exampledir="$enableval",)
gdtc4f0efe2003-12-04 15:39:25 +000039dnl XXX add --exampledir to autoconf standard directory list somehow
gdtd6b72f72003-12-03 17:24:27 +000040AC_SUBST(exampledir)
41
gdtcbd04082004-08-31 18:16:36 +000042dnl default is to match previous behavior
43pkgsrcrcdir=""
44pkgsrcdir=""
45AC_ARG_ENABLE([pkgsrcrcdir],
46 AC_HELP_STRING([--enable-pkgsrcrcdir],
47 [specify directory for rc.d scripts]),
48 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
49dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
50AC_SUBST(pkgsrcdir)
51AC_SUBST(pkgsrcrcdir)
52
paul7ea487b2003-03-17 02:05:07 +000053dnl ------------
54dnl Check CFLAGS
55dnl ------------
56AC_ARG_WITH(cflags,
57[ --with-cflags Set CFLAGS for use in compilation.])
58if test "x$with_cflags" != "x" ; then
59 CFLAGS="$with_cflags" ; cflags_specified=yes ;
60elif test -n "$CFLAGS" ; then
61 cflags_specified=yes ;
62fi
63
hasso1969e4b2005-03-27 13:07:23 +000064dnl --------------------
65dnl Check CC and friends
66dnl --------------------
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +010067AC_LANG([C])
paul7ea487b2003-03-17 02:05:07 +000068AC_PROG_CC
hasso1969e4b2005-03-27 13:07:23 +000069AC_PROG_CPP
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +010070AM_PROG_CC_C_O
hasso1969e4b2005-03-27 13:07:23 +000071AC_PROG_EGREP
Greg Troxel553bdfe2007-02-06 20:10:35 +000072
73dnl autoconf 2.59 appears not to support AC_PROG_SED
74dnl AC_PROG_SED
75AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
hasso1969e4b2005-03-27 13:07:23 +000076
77dnl ------------------------------------------------------------------
78dnl Intel compiler check. Although Intel tries really hard to make icc
79dnl look like gcc, there are some differences. It's very verbose with
80dnl -Wall and it doesn't support the individual -W options.
81dnl ------------------------------------------------------------------
paul6a4b8832005-11-26 08:28:00 +000082if test "x${GCC}" = "xyes" ; then
83 COMPILER="GCC"
84 AC_MSG_CHECKING([whether we are using the Intel compiler])
85 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
86 [AC_MSG_RESULT([no])],
87 [COMPILER="ICC"
88 AC_MSG_RESULT([yes])]
89 )
90else
91 AC_MSG_CHECKING([whether we are using SunPro compiler])
92 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
93 [AC_MSG_RESULT([no])],
94 [COMPILER="SUNPRO"
95 AC_MSG_RESULT([yes])]
96 )
97fi
paul7ea487b2003-03-17 02:05:07 +000098
paula49c0ff2004-09-30 06:08:58 +000099dnl ---------------------------------------------
paul7ea487b2003-03-17 02:05:07 +0000100dnl If CLFAGS doesn\'t exist set default value
paula49c0ff2004-09-30 06:08:58 +0000101dnl AC_PROG_CC will have set minimal default
102dnl already, eg "-O2 -g" for gcc, "-g" for others
paul27eebb32004-07-22 18:16:59 +0000103dnl (Wall is gcc specific... have to make sure
104dnl gcc is being used before setting it)
105dnl
paul6a4b8832005-11-26 08:28:00 +0000106dnl Intel icc 8.0 also sets __GNUC__,
107dnl but doesn't support all these fancy -W options.
hasso1969e4b2005-03-27 13:07:23 +0000108dnl Intel compiler warnings we ignore:
109dnl 279: controlling expression is constant.
110dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
111dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
112dnl macro.
113dnl 981: operands are evaluated in unspecified order.
paul6a4b8832005-11-26 08:28:00 +0000114dnl
115dnl Sun Studio 10 / SunPro 5.7 is also supported,
116dnl so lets set some sane CFLAGS for it.
117dnl ---------------------------------------------
hasso1969e4b2005-03-27 13:07:23 +0000118
paul6a4b8832005-11-26 08:28:00 +0000119AC_MSG_CHECKING([whether to set a default CFLAGS])
120if test "x${cflags_specified}" = "x" ; then
121 case ${COMPILER} in
122 "ICC")
123 CFLAGS="-Os -g -Wall -wd 279,869,981"
124 AC_MSG_RESULT([Intel default])
125 ;;
126 "GCC")
Andrew J. Schorr5fa05092007-04-30 19:14:08 +0000127 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
paul6a4b8832005-11-26 08:28:00 +0000128 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
129 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
130 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
131 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
132 # TODO: conditionally addd -Wpacked if handled
133 AC_MSG_RESULT([gcc default])
134 ;;
135 "SUNPRO")
Paul Jakma105b8232006-05-28 08:02:41 +0000136 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
paul6a4b8832005-11-26 08:28:00 +0000137 AC_MSG_RESULT([SunPro default])
138 ;;
139 *)
140 AC_MSG_RESULT([unknown compiler])
141 ;;
142 esac
143else
144 AC_MSG_RESULT([CFLAGS supplied by user])
hasso1969e4b2005-03-27 13:07:23 +0000145fi
146
paul7ea487b2003-03-17 02:05:07 +0000147dnl --------------
148dnl Check programs
149dnl --------------
paul7ea487b2003-03-17 02:05:07 +0000150AC_PROG_INSTALL
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000151AC_PROG_LN_S
paul7ea487b2003-03-17 02:05:07 +0000152AC_PROG_MAKE_SET
153AC_CHECK_TOOL(AR, ar)
paul7ea487b2003-03-17 02:05:07 +0000154
Paul Jakma105b8232006-05-28 08:02:41 +0000155dnl ---------------------------
156dnl We, perhaps unfortunately,
157dnl depend on GNU Make specific
158dnl constructs.
159dnl Give the user a warning if
160dnl not GNU Make.
161dnl ---------------------------
162AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
163 [quagga_cv_gnu_make=no
164 if ${MAKE-make} --version 2>/dev/null | \
165 grep '^GNU Make ' >/dev/null ; then
166 quagga_cv_gnu_make=yes;
167 fi
168 ]
169)
170
Paul Jakmad46d2a22007-05-10 16:53:04 +0000171dnl -----------------
172dnl System extensions
173dnl -----------------
Paul Jakmad46d2a22007-05-10 16:53:04 +0000174AC_GNU_SOURCE
paul7ea487b2003-03-17 02:05:07 +0000175
gdt87efd642004-06-30 17:36:11 +0000176dnl -------
177dnl libtool
178dnl -------
paul0fc42942004-08-19 04:41:21 +0000179AC_PROG_LIBTOOL
gdt87efd642004-06-30 17:36:11 +0000180
paul7ea487b2003-03-17 02:05:07 +0000181dnl ----------------------
182dnl Packages configuration
183dnl ----------------------
184AC_ARG_ENABLE(vtysh,
gdtfc9d0742004-06-30 14:25:12 +0000185[ --enable-vtysh include integrated vty shell for Quagga])
paul7ea487b2003-03-17 02:05:07 +0000186AC_ARG_ENABLE(ipv6,
187[ --disable-ipv6 turn off IPv6 related features and daemons])
188AC_ARG_ENABLE(zebra,
189[ --disable-zebra do not build zebra daemon])
190AC_ARG_ENABLE(bgpd,
191[ --disable-bgpd do not build bgpd])
192AC_ARG_ENABLE(ripd,
193[ --disable-ripd do not build ripd])
194AC_ARG_ENABLE(ripngd,
195[ --disable-ripngd do not build ripngd])
196AC_ARG_ENABLE(ospfd,
197[ --disable-ospfd do not build ospfd])
paul7ea487b2003-03-17 02:05:07 +0000198AC_ARG_ENABLE(ospf6d,
199[ --disable-ospf6d do not build ospf6d])
ajsd0199432004-12-22 14:03:52 +0000200AC_ARG_ENABLE(watchquagga,
201[ --disable-watchquagga do not build watchquagga])
jardin9e867fe2003-12-23 08:56:18 +0000202AC_ARG_ENABLE(isisd,
hassoae399ab2004-09-13 20:22:18 +0000203[ --enable-isisd build isisd])
Greg Troxel97cee872007-08-02 13:36:56 +0000204AC_ARG_ENABLE(solaris,
205[ --enable-solaris build solaris])
paul7ea487b2003-03-17 02:05:07 +0000206AC_ARG_ENABLE(bgp-announce,
207[ --disable-bgp-announce, turn off BGP route announcement])
208AC_ARG_ENABLE(netlink,
209[ --enable-netlink force to use Linux netlink interface])
210AC_ARG_ENABLE(broken-aliases,
211[ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +0200212AC_ARG_WITH(crypto,
213[ --without-crypto do not use libcrypto in SNMP])
paul7ea487b2003-03-17 02:05:07 +0000214AC_ARG_ENABLE(snmp,
215[ --enable-snmp enable SNMP support])
216AC_ARG_WITH(libpam,
217[ --with-libpam use libpam for PAM support in vtysh])
hasso71c0fb52003-05-25 20:18:13 +0000218AC_ARG_ENABLE(tcp-zebra,
paul7ea487b2003-03-17 02:05:07 +0000219[ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
paul7ea487b2003-03-17 02:05:07 +0000220AC_ARG_ENABLE(opaque-lsa,
paul1ef74ef2003-03-21 15:16:05 +0000221[ --enable-opaque-lsa enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
222AC_ARG_ENABLE(ospfapi,
223[ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database,
224 (this is the default if --enable-opaque-lsa is not set)])
225AC_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,
229[ --enable-ospf-te enable Traffic Engineering Extension to OSPF])
230AC_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
paul7ea487b2003-03-17 02:05:07 +0000294if test "${enable_opaque_lsa}" = "yes"; then
295 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
296fi
297
298if test "${enable_ospf_te}" = "yes"; then
299 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
555dnl ---------------------
556dnl Integrated VTY option
557dnl ---------------------
558case "${enable_vtysh}" in
559 "yes") VTYSH="vtysh";
560 AC_DEFINE(VTYSH,,VTY shell)
gdtfc9d0742004-06-30 14:25:12 +0000561 AC_PATH_PROG(PERL, perl)
562dnl Vtysh uses libreadline, which looks for termcap functions at
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000563dnl configure time. We follow readlines search order.
gdtfc9d0742004-06-30 14:25:12 +0000564dnl The required procedures are in libtermcap on NetBSD, in
565dnl [TODO] on Linux, and in [TODO] on Solaris.
hassoc0689392005-08-25 12:00:58 +0000566 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
paula9694592005-08-25 14:50:05 +0000567 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
568 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
569 [AC_CHECK_LIB(ncurses, tputs,
570 LIBREADLINE="$LIBREADLINE -lncurses")]
571 )]
572 )]
573 )
574 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
575 "$LIBREADLINE")
paul7ea487b2003-03-17 02:05:07 +0000576 if test $ac_cv_lib_readline_main = no; then
gdtfc9d0742004-06-30 14:25:12 +0000577 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
paul7ea487b2003-03-17 02:05:07 +0000578 fi
579 AC_CHECK_HEADER(readline/history.h)
580 if test $ac_cv_header_readline_history_h = no;then
581 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
582 fi
paula9694592005-08-25 14:50:05 +0000583 AC_CHECK_LIB(readline, rl_completion_matches,
584 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
paul3d3de8c2003-05-23 10:33:49 +0000585 if test $ac_cv_lib_readline_rl_completion_matches = no; then
586 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
587 fi
588 ;;
paul7ea487b2003-03-17 02:05:07 +0000589 "no" ) VTYSH="";;
590 * ) ;;
591esac
hassoc0689392005-08-25 12:00:58 +0000592AC_SUBST(LIBREADLINE)
paul7ea487b2003-03-17 02:05:07 +0000593
594dnl ----------
595dnl PAM module
596dnl ----------
597if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000598 AC_CHECK_HEADER([security/pam_misc.h],
599 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
600 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
601 pam_conv_func="misc_conv"
602 ],
603 [], QUAGGA_INCLUDES)
604 AC_CHECK_HEADER([security/openpam.h],
605 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
606 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
607 pam_conv_func="openpam_ttyconv"
608 ],
609 [], QUAGGA_INCLUDES)
paul24cd4352003-05-06 12:16:27 +0000610 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
611 AC_MSG_WARN([*** pam support will not be built ***])
612 with_libpam="no"
613 fi
614fi
615
616if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000617dnl took this test from proftpds configure.in and suited to our needs
paul7ea487b2003-03-17 02:05:07 +0000618dnl -------------------------------------------------------------------------
619dnl
620dnl This next check looks funky due to a linker problem with some versions
621dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
622dnl omitted requiring libdl linking information. PAM-0.72 or better ships
623dnl with RedHat 6.2 and Debian 2.2 or better.
624AC_CHECK_LIB(pam, pam_start,
paul24cd4352003-05-06 12:16:27 +0000625 [AC_CHECK_LIB(pam, $pam_conv_func,
paul7ea487b2003-03-17 02:05:07 +0000626 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
627 LIBPAM="-lpam"],
628 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
629 LIBPAM="-lpam -lpam_misc"]
630 )
631 ],
632
633 [AC_CHECK_LIB(pam, pam_end,
paul24cd4352003-05-06 12:16:27 +0000634 [AC_CHECK_LIB(pam, $pam_conv_func,
paula159ed92003-06-04 11:01:45 +0000635 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000636 LIBPAM="-lpam -ldl"],
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 -lpam_misc"]
639 )
640 ],AC_MSG_WARN([*** pam support will not be built ***]),
641 [-ldl])
642 ]
643)
644fi
645AC_SUBST(LIBPAM)
646
647dnl -------------------------------
648dnl Endian-ness check
649dnl -------------------------------
650AC_WORDS_BIGENDIAN
651
652dnl -------------------------------
653dnl check the size in byte of the C
654dnl -------------------------------
655dnl AC_CHECK_SIZEOF(char)
656dnl AC_CHECK_SIZEOF(int)
657dnl AC_CHECK_SIZEOF(short)
658dnl AC_CHECK_SIZEOF(long)
659
660dnl ----------------------------
661dnl check existance of functions
662dnl ----------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000663AC_FUNC_CHOWN
664AC_FUNC_FNMATCH
665AC_FUNC_FORK
666AC_FUNC_MALLOC
667AC_FUNC_MEMCMP
668AC_FUNC_MKTIME
669AC_FUNC_STRFTIME
670AC_FUNC_REALLOC
671AC_FUNC_STAT
672AC_FUNC_SELECT_ARGTYPES
673AC_FUNC_STRFTIME
Paul Jakmad46d2a22007-05-10 16:53:04 +0000674dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
675dnl can lead to strange side effects. So we just check for strnlen
676dnl directly, see below.
Paul Jakma2b5cb412007-05-10 17:05:16 +0000677dnl AC_FUNC_STRNLENdnl
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000678AC_FUNC_VPRINTF
679
680dnl -------------------------------
681dnl bgpd needs pow() and hence libm
682dnl -------------------------------
683TMPLIBS="$LIBS"
684AC_CHECK_HEADER([math.h],
685 [AC_CHECK_LIB([m], [pow],
686 [LIBM="-lm"
687 LIBS="$LIBS $LIBM"
688 AC_DEFINE(HAVE_LIBM,, Have libm)
689 AC_CHECK_FUNCS(pow,[],[LIBM=""])
690 ])
691])
692if test x"$LIBM" = x ; then
693 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
694fi
695LIBS="$TMPLIBS"
696AC_SUBST(LIBM)
697
698dnl ---------------
699dnl other functions
700dnl ---------------
701AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
Paul Jakmad46d2a22007-05-10 16:53:04 +0000702 inet_ntoa inet_aton strnlen \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000703 memchr memmove memset select socket \
704 strcasecmp strchr strcspn strdup strerror \
705 strncasecmp strndup strrchr strspn strstr \
706 strtol strtoul strlcat strlcpy \
707 daemon snprintf vsnprintf \
708 if_nametoindex if_indextoname getifaddrs \
709 uname fcntl])
710
paula159ed92003-06-04 11:01:45 +0000711AC_CHECK_FUNCS(setproctitle, ,
712 [AC_CHECK_LIB(util, setproctitle,
713 [LIBS="$LIBS -lutil"
714 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
715 ]
716 )
717 ]
718)
paul7ea487b2003-03-17 02:05:07 +0000719
720dnl ------------------------------------
721dnl Determine routing get and set method
722dnl ------------------------------------
723AC_MSG_CHECKING(zebra between kernel interface method)
724if test x"$opsys" = x"gnu-linux"; then
725 if test "${enable_netlink}" = "yes";then
726 AC_MSG_RESULT(netlink)
727 RT_METHOD=rt_netlink.o
728 AC_DEFINE(HAVE_NETLINK,,netlink)
729 netlink=yes
730 elif test "${enable_netlink}" = "no"; then
731 AC_MSG_RESULT(ioctl)
732 RT_METHOD=rt_ioctl.o
733 netlink=no
734 else
735 AC_MSG_RESULT(netlink)
736 RT_METHOD=rt_netlink.o
737 AC_DEFINE(HAVE_NETLINK,,netlink)
738 netlink=yes
739 fi
paul19877dd2004-05-11 10:49:35 +0000740elif test x"$opsys" = x"sol2-6";then
741 AC_MSG_RESULT(Route socket)
742 KERNEL_METHOD="kernel_socket.o"
743 RT_METHOD="rt_socket.o"
paulafd8a122005-03-12 06:36:10 +0000744elif test x"$opsys" = x"sol8";then
paul19877dd2004-05-11 10:49:35 +0000745 AC_MSG_RESULT(Route socket)
746 KERNEL_METHOD="kernel_socket.o"
747 RT_METHOD="rt_socket.o"
748elif test "$opsys" = "irix" ; then
749 AC_MSG_RESULT(Route socket)
750 KERNEL_METHOD="kernel_socket.o"
751 RT_METHOD="rt_socket.o"
paul7ea487b2003-03-17 02:05:07 +0000752else
paul19877dd2004-05-11 10:49:35 +0000753 AC_TRY_RUN([#include <errno.h>
paul7ea487b2003-03-17 02:05:07 +0000754#include <sys/types.h>
755#include <sys/socket.h>
756
757main ()
758{
759 int ac_sock;
760
761 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
762 if (ac_sock < 0 && errno == EINVAL)
763 exit (1);
764 exit (0);
765}],
766 [KERNEL_METHOD=kernel_socket.o
767 RT_METHOD=rt_socket.o
768 AC_MSG_RESULT(socket)],
769 [RT_METHOD=rt_ioctl.o
770 AC_MSG_RESULT(ioctl)],
771 [KERNEL_METHOD=kernel_socket.o
772 RT_METHOD=rt_socket.o
773 AC_MSG_RESULT(socket)])
paul7ea487b2003-03-17 02:05:07 +0000774fi
775AC_SUBST(RT_METHOD)
776AC_SUBST(KERNEL_METHOD)
777AC_SUBST(OTHER_METHOD)
778
Paul Jakma238497f2007-08-07 18:49:18 +0000779dnl --------------------------
780dnl Determine IS-IS I/O method
781dnl --------------------------
782AC_CHECK_HEADER(net/bpf.h)
783AC_CHECK_HEADER(sys/dlpi.h)
784AC_MSG_CHECKING(zebra IS-IS I/O method)
785if test x"$opsys" = x"gnu-linux"; then
786 AC_MSG_RESULT(pfpacket)
787 ISIS_METHOD=isis_pfpacket.o
788elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
789 AC_MSG_RESULT(DLPI)
790 ISIS_METHOD="isis_dlpi.o"
791else
792 if test $ac_cv_header_net_bpf_h = no; then
793 if test $ac_cv_header_sys_dlpi_h = no; then
794 AC_MSG_RESULT(none)
795 AC_MSG_WARN([*** IS-IS support will not be built ***])
796 ISISD=""
797 else
798 AC_MSG_RESULT(DLPI)
799 fi
800 ISIS_METHOD="isis_dlpi.o"
801 else
802 AC_MSG_RESULT(BPF)
803 ISIS_METHOD="isis_bpf.o"
804 fi
805fi
806AC_SUBST(ISIS_METHOD)
807
ajsb99760a2005-01-04 16:24:43 +0000808dnl ------------------------------------
809dnl check for broken CMSG_FIRSTHDR macro
810dnl ------------------------------------
gdt6c200462005-01-04 17:02:48 +0000811AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
hasso5b087522005-04-03 23:46:37 +0000812AC_RUN_IFELSE([AC_LANG_SOURCE([[
ajsb99760a2005-01-04 16:24:43 +0000813#ifdef SUNOS_5
814#define _XPG4_2
815#define __EXTENSIONS__
816#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000817#ifdef HAVE_STDLIB_H
818# include <stdlib.h>
819#endif
820#ifdef HAVE_SYS_TYPES_H
ajsb99760a2005-01-04 16:24:43 +0000821#include <sys/types.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000822#endif
823#ifdef HAVE_SYS_SOCKET_H
ajsb99760a2005-01-04 16:24:43 +0000824#include <sys/socket.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000825#endif
ajsb99760a2005-01-04 16:24:43 +0000826
827main()
828{
829 struct msghdr msg;
830 char buf[4];
831
832 msg.msg_control = buf;
833 msg.msg_controllen = 0;
834
835 if (CMSG_FIRSTHDR(&msg) != NULL)
836 exit(0);
837 exit (1);
hasso5b087522005-04-03 23:46:37 +0000838}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
hassod33e8d72005-04-03 13:07:21 +0000839[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
ajsb99760a2005-01-04 16:24:43 +0000840
paul7ea487b2003-03-17 02:05:07 +0000841dnl ------------------------------
842dnl check kernel route read method
843dnl ------------------------------
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500844AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
845[if test "x$netlink" = xyes; then
846 quagga_cv_rtread_method="netlink"
paul7ea487b2003-03-17 02:05:07 +0000847else
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500848for quagga_cv_rtread_method in /proc/net/route /dev/ip /dev/null;
paul7ea487b2003-03-17 02:05:07 +0000849do
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500850 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
paul7ea487b2003-03-17 02:05:07 +0000851done
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500852case $quagga_cv_rtread_method in
853 "/proc/net/route") quagga_cv_rtread_method="proc";;
paul9c30ab62003-07-08 08:36:17 +0000854 "/dev/ip")
855 case "$host" in
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500856 *-freebsd*) quagga_cv_rtread_method="sysctl";;
857 *) quagga_cv_rtread_method="getmsg";;
paul9c30ab62003-07-08 08:36:17 +0000858 esac;;
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500859 *)
860 quagga_cv_rtread_method="sysctl";;
paul7ea487b2003-03-17 02:05:07 +0000861esac
862fi])
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500863RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
paul7ea487b2003-03-17 02:05:07 +0000864AC_SUBST(RTREAD_METHOD)
865
866dnl -----------------------------
867dnl check interface lookup method
868dnl -----------------------------
paul19877dd2004-05-11 10:49:35 +0000869IOCTL_METHOD=ioctl.o
paul7ea487b2003-03-17 02:05:07 +0000870AC_MSG_CHECKING(interface looking up method)
871if test "$netlink" = yes; then
872 AC_MSG_RESULT(netlink)
873 IF_METHOD=if_netlink.o
paul19877dd2004-05-11 10:49:35 +0000874elif test "$opsys" = "sol2-6";then
875 AC_MSG_RESULT(Solaris GIF)
876 IF_METHOD=if_ioctl.o
paulafd8a122005-03-12 06:36:10 +0000877elif test "$opsys" = "sol8";then
paul19877dd2004-05-11 10:49:35 +0000878 AC_MSG_RESULT(Solaris GLIF)
879 IF_METHOD=if_ioctl_solaris.o
880 IOCTL_METHOD=ioctl_solaris.o
881elif test "$opsys" = "irix" ; then
882 AC_MSG_RESULT(IRIX)
883 IF_METHOD=if_ioctl.o
884elif test "$opsys" = "openbsd";then
885 AC_MSG_RESULT(openbsd)
886 IF_METHOD=if_ioctl.o
887elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
888 AC_MSG_RESULT(sysctl)
paul7ea487b2003-03-17 02:05:07 +0000889 IF_METHOD=if_sysctl.o
890 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
paul19877dd2004-05-11 10:49:35 +0000891else
paul7ea487b2003-03-17 02:05:07 +0000892 AC_MSG_RESULT(ioctl)
893 IF_METHOD=if_ioctl.o
paul7ea487b2003-03-17 02:05:07 +0000894fi
895AC_SUBST(IF_METHOD)
paul19877dd2004-05-11 10:49:35 +0000896AC_SUBST(IOCTL_METHOD)
paul7ea487b2003-03-17 02:05:07 +0000897
paul42c98192005-05-07 02:22:51 +0000898dnl ---------------------------------------------------------------
899dnl figure out how to specify an interface in multicast sockets API
900dnl ---------------------------------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000901AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
paul42c98192005-05-07 02:22:51 +0000902
903AC_MSG_CHECKING([for BSD struct ip_mreq hack])
904AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
905#include <sys/param.h>
Denis Ovsienkoc5408352009-04-13 20:11:44 +0400906#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 +0000907 return (0);
908#else
909 #error No support for BSD struct ip_mreq hack detected
910#endif],[AC_MSG_RESULT(yes)
911AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
912AC_MSG_RESULT(no))
913
Andrew J. Schorrc543a172008-01-10 15:24:32 +0000914dnl ---------------------------------------------------------------
915dnl figure out how to check link-state
916dnl ---------------------------------------------------------------
Andrew J. Schorr6418bed2008-01-11 16:33:59 +0000917AC_CHECK_HEADER([net/if.h],
918 [AC_CHECK_HEADER( [net/if_media.h],
919 [m4_define([LINK_DETECT_INCLUDES],
920 QUAGGA_INCLUDES
921 [#include <net/if_media.h>
922 ])
923 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
924 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
925 [], LINK_DETECT_INCLUDES)],
926 [],
927 QUAGGA_INCLUDES)],
928 [], QUAGGA_INCLUDES )
Andrew J. Schorrc543a172008-01-10 15:24:32 +0000929
Paul Jakma0df7c912008-07-21 21:02:49 +0000930dnl ------------------------
931dnl TCP_MD5SIG socket option
932dnl ------------------------
933
934AC_CHECK_HEADER([netinet/tcp.h],
935 [m4_define([MD5_INCLUDES],
936 QUAGGA_INCLUDES
937 [#include <netinet/tcp.h>
938 ])
939 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
940 [],
941 QUAGGA_INCLUDES)
942if test $ac_cv_have_decl_TCP_MD5SIG = no; then
943 AC_CHECK_HEADER([linux/tcp.h],
944 [m4_define([MD5_INCLUDES],
945 QUAGGA_INCLUDES
946 [#include <linux/tcp.h>
947 ])
948 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
949fi
950
paul7ea487b2003-03-17 02:05:07 +0000951dnl -----------------------
952dnl check proc file system.
953dnl -----------------------
Stephen Hemmingercadfb2c2008-08-16 18:03:44 +0100954if test "$netlink" != yes; then
955 if test -r /proc/net/dev; then
956 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
957 IF_PROC=if_proc.o
958 fi
959 if test -r /proc/net/if_inet6; then
960 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
961 IF_PROC=if_proc.o
962 fi
paul7ea487b2003-03-17 02:05:07 +0000963fi
964AC_SUBST(IF_PROC)
965
966dnl -----------------------------
967dnl check ipforward detect method
968dnl -----------------------------
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500969AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
970[for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
paul7ea487b2003-03-17 02:05:07 +0000971do
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500972 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
paul7ea487b2003-03-17 02:05:07 +0000973done
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500974case $quagga_cv_ipforward_method in
975 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
paul7ea487b2003-03-17 02:05:07 +0000976 "/dev/ip")
977 case "$host" in
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500978 *-nec-sysv4*) quagga_cv_ipforward_method="ews";;
979 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
980 *) quagga_cv_ipforward_method="solaris";;
paul7ea487b2003-03-17 02:05:07 +0000981 esac;;
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500982 *) quagga_cv_ipforward_method="sysctl";;
paul7ea487b2003-03-17 02:05:07 +0000983esac])
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500984IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
paul7ea487b2003-03-17 02:05:07 +0000985AC_SUBST(IPFORWARD)
986
987AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
988
989dnl ----------
990dnl IPv6 check
991dnl ----------
992AC_MSG_CHECKING(whether does this OS have IPv6 stack)
993if test "${enable_ipv6}" = "no"; then
994 AC_MSG_RESULT(disabled)
995else
996dnl ----------
997dnl INRIA IPv6
998dnl ----------
paula159ed92003-06-04 11:01:45 +0000999 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1000 zebra_cv_ipv6=yes
1001 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1002 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1003 RIPNGD="ripngd"
1004 OSPF6D="ospf6d"
1005 LIB_IPV6=""
1006 AC_MSG_RESULT(INRIA IPv6)
paul7ea487b2003-03-17 02:05:07 +00001007dnl ---------
1008dnl KAME IPv6
1009dnl ---------
paula159ed92003-06-04 11:01:45 +00001010 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1011 zebra_cv_ipv6=yes
1012 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1013 AC_DEFINE(KAME,1,KAME IPv6)
1014 RIPNGD="ripngd"
1015 OSPF6D="ospf6d"
1016 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
paul7ea487b2003-03-17 02:05:07 +00001017 LIB_IPV6="-L/usr/local/v6/lib -linet6"
paula159ed92003-06-04 11:01:45 +00001018 fi
1019 AC_MSG_RESULT(KAME)
hasso71c0fb52003-05-25 20:18:13 +00001020dnl -------------------------
1021dnl MUSICA IPv6
1022dnl default host check
1023dnl It is not used by Kheops
1024dnl -------------------------
paula159ed92003-06-04 11:01:45 +00001025 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1026 zebra_cv_ipv6=yes
1027 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1028 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1029 AC_DEFINE(KAME,1,KAME IPv6 stack)
1030 RIPNGD="ripngd"
1031 OSPF6D="ospf6d"
1032 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
hasso71c0fb52003-05-25 20:18:13 +00001033 LIB_IPV6="-L/usr/local/v6/lib -linet6"
paula159ed92003-06-04 11:01:45 +00001034 fi
1035 AC_MSG_RESULT(MUSICA)
paul7ea487b2003-03-17 02:05:07 +00001036dnl ---------
1037dnl NRL check
1038dnl ---------
paula159ed92003-06-04 11:01:45 +00001039 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1040 zebra_cv_ipv6=yes
1041 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1042 AC_DEFINE(NRL,1,NRL)
1043 RIPNGD="ripngd"
1044 OSPF6D="ospf6d"
1045 if test x"$opsys" = x"bsdi";then
paul7ea487b2003-03-17 02:05:07 +00001046 AC_DEFINE(BSDI_NRL,,BSDI)
1047 AC_MSG_RESULT(BSDI_NRL)
paula159ed92003-06-04 11:01:45 +00001048 else
paul7ea487b2003-03-17 02:05:07 +00001049 AC_MSG_RESULT(NRL)
paula159ed92003-06-04 11:01:45 +00001050 fi
paul19877dd2004-05-11 10:49:35 +00001051dnl ------------------------------------
1052dnl Solaris 9, 10 and potentially higher
1053dnl ------------------------------------
paulafd8a122005-03-12 06:36:10 +00001054 elif test x"$opsys" = x"sol8"; then
paul19877dd2004-05-11 10:49:35 +00001055 zebra_cv_ipv6=yes;
1056 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1057 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1058 RIPNGD="ripngd"
1059 OSPF6D="ospf6d"
1060 AC_MSG_RESULT(Solaris IPv6)
paul7ea487b2003-03-17 02:05:07 +00001061dnl ----------
1062dnl Linux IPv6
1063dnl ----------
paula159ed92003-06-04 11:01:45 +00001064 elif test "${enable_ipv6}" = "yes"; then
1065 AC_EGREP_CPP(yes, [
1066 #include <linux/version.h>
1067 /* 2.1.128 or later */
1068 #if LINUX_VERSION_CODE >= 0x020180
1069 yes
1070 #endif],
1071 [zebra_cv_ipv6=yes
1072 zebra_cv_linux_ipv6=yes
1073 AC_MSG_RESULT(Linux IPv6)])
1074 else
1075 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1076 then
paul7ea487b2003-03-17 02:05:07 +00001077 zebra_cv_ipv6=yes
1078 zebra_cv_linux_ipv6=yes
1079 AC_MSG_RESULT(Linux IPv6)
paula159ed92003-06-04 11:01:45 +00001080 fi
1081 fi
paul7ea487b2003-03-17 02:05:07 +00001082
paula159ed92003-06-04 11:01:45 +00001083 if test "$zebra_cv_linux_ipv6" = "yes";then
hasso850d39f2005-06-30 13:52:20 +00001084 AC_MSG_CHECKING(whether libc has IPv6 support)
1085 AC_TRY_LINK([#include <netinet/in.h>
1086 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1087 [AC_MSG_RESULT(yes)
1088 zebra_cv_ipv6=yes
1089 zebra_cv_linux_ipv6=yes],
1090 [AC_MSG_RESULT(no)
1091 zebra_cv_ipv6=no
1092 zebra_cv_linux_ipv6=no])
1093 fi
1094
1095 if test "$zebra_cv_linux_ipv6" = "yes";then
paula159ed92003-06-04 11:01:45 +00001096 AC_MSG_CHECKING(for GNU libc >= 2.1)
1097 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1098 AC_EGREP_CPP(yes, [
paul7ea487b2003-03-17 02:05:07 +00001099#include <features.h>
1100#if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1101 yes
paula159ed92003-06-04 11:01:45 +00001102#endif],
1103 [glibc=yes
1104 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1105 AC_MSG_RESULT(yes)],
1106 AC_MSG_RESULT(no)
1107 )
1108 RIPNGD="ripngd"
1109 OSPF6D="ospf6d"
1110 if test "$glibc" != "yes"; then
paul7ea487b2003-03-17 02:05:07 +00001111 INCLUDES="-I/usr/inet6/include"
1112 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1113 LIB_IPV6="-L/usr/inet6/lib -linet6"
1114 fi
paula159ed92003-06-04 11:01:45 +00001115 fi
1116 fi
paul7ea487b2003-03-17 02:05:07 +00001117
1118dnl -----------------------
1119dnl Set IPv6 related values
1120dnl -----------------------
paula159ed92003-06-04 11:01:45 +00001121 LIBS="$LIB_IPV6 $LIBS"
1122 AC_SUBST(LIB_IPV6)
paul7ea487b2003-03-17 02:05:07 +00001123
paula159ed92003-06-04 11:01:45 +00001124 if test x"$RIPNGD" = x""; then
1125 AC_MSG_RESULT(IPv4 only)
1126 fi
paul7ea487b2003-03-17 02:05:07 +00001127fi
1128
gdtfa3232e2003-12-03 17:52:30 +00001129dnl ------------------
1130dnl IPv6 header checks
1131dnl ------------------
1132if test "x${zebra_cv_ipv6}" = "xyes"; then
1133AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001134 netinet6/in6_var.h netinet6/nd6.h], [], [],
1135 QUAGGA_INCLUDES)
gdtfa3232e2003-12-03 17:52:30 +00001136fi
1137
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001138m4_define([QUAGGA_INCLUDES],dnl
1139QUAGGA_INCLUDES
1140[#if HAVE_NETINET6_IN6_H
1141#include <netinet6/in6.h>
1142#endif
1143#if HAVE_NETINET_IN6_VAR_H
1144#include <netinet/in6_var.h>
1145#endif
1146#if HAVE_NETINET_ICMP6_H
1147# include <netinet/icmp6.h>
1148#endif
1149#if HAVE_NETINET6_IN6_VAR_H
1150# include <netinet6/in6_var.h>
1151#endif
1152#if HAVE_NETINET6_ND6_H
Hasso Tepperfbf24542007-06-25 19:30:59 +00001153# include <netinet6/nd6.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001154#endif
1155])dnl
1156
paul7ea487b2003-03-17 02:05:07 +00001157dnl --------------------
1158dnl Daemon disable check
1159dnl --------------------
1160if test "${enable_zebra}" = "no";then
1161 ZEBRA=""
1162else
1163 ZEBRA="zebra"
1164fi
1165
1166if test "${enable_bgpd}" = "no";then
1167 BGPD=""
1168else
1169 BGPD="bgpd"
1170fi
1171
1172if test "${enable_ripd}" = "no";then
1173 RIPD=""
1174else
1175 RIPD="ripd"
1176fi
1177
1178if test "${enable_ospfd}" = "no";then
1179 OSPFD=""
1180else
1181 OSPFD="ospfd"
1182fi
1183
ajsd0199432004-12-22 14:03:52 +00001184if test "${enable_watchquagga}" = "no";then
1185 WATCHQUAGGA=""
1186else
1187 WATCHQUAGGA="watchquagga"
1188fi
1189
paul1ef74ef2003-03-21 15:16:05 +00001190OSPFCLIENT=""
1191if test "${enable_opaque_lsa}" = "yes"; then
1192 if test "${enable_ospfapi}" != "no";then
paul9a569842003-03-28 01:45:13 +00001193 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
paul1ef74ef2003-03-21 15:16:05 +00001194
1195 if test "${enable_ospfclient}" != "no";then
1196 OSPFCLIENT="ospfclient"
1197 fi
1198 fi
1199
paul7ea487b2003-03-17 02:05:07 +00001200fi
1201
1202case "${enable_ripngd}" in
1203 "yes") RIPNGD="ripngd";;
1204 "no" ) RIPNGD="";;
1205 * ) ;;
1206esac
1207
1208case "${enable_ospf6d}" in
1209 "yes") OSPF6D="ospf6d";;
1210 "no" ) OSPF6D="";;
1211 * ) ;;
1212esac
1213
jardin9e867fe2003-12-23 08:56:18 +00001214case "${enable_isisd}" in
1215 "yes") ISISD="isisd";;
1216 "no" ) ISISD="";;
hassoae399ab2004-09-13 20:22:18 +00001217 * ) ;;
jardin9e867fe2003-12-23 08:56:18 +00001218esac
1219
Greg Troxel97cee872007-08-02 13:36:56 +00001220# XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1221case "${enable_solaris}" in
1222 "yes") SOLARIS="solaris";;
1223 "no" ) SOLARIS="";;
1224 * ) ;;
1225esac
1226
paul7ea487b2003-03-17 02:05:07 +00001227if test "${enable_bgp_announce}" = "no";then
Paul Jakma750e8142008-07-22 21:11:48 +00001228 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1229else
1230 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
paul7ea487b2003-03-17 02:05:07 +00001231fi
1232
1233AC_SUBST(ZEBRA)
1234AC_SUBST(BGPD)
1235AC_SUBST(RIPD)
1236AC_SUBST(RIPNGD)
1237AC_SUBST(OSPFD)
1238AC_SUBST(OSPF6D)
ajsd0199432004-12-22 14:03:52 +00001239AC_SUBST(WATCHQUAGGA)
jardin9e867fe2003-12-23 08:56:18 +00001240AC_SUBST(ISISD)
Greg Troxel97cee872007-08-02 13:36:56 +00001241AC_SUBST(SOLARIS)
paul7ea487b2003-03-17 02:05:07 +00001242AC_SUBST(VTYSH)
1243AC_SUBST(INCLUDES)
1244AC_SUBST(CURSES)
1245AC_SUBST(OSPFCLIENT)
paul1ef74ef2003-03-21 15:16:05 +00001246AC_SUBST(OSPFAPI)
paul7ea487b2003-03-17 02:05:07 +00001247AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1248AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1249AC_CHECK_LIB(crypt, crypt)
1250AC_CHECK_LIB(resolv, res_init)
paul7ea487b2003-03-17 02:05:07 +00001251
1252dnl ---------------------------------------------------
1253dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1254dnl ---------------------------------------------------
paula159ed92003-06-04 11:01:45 +00001255AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1256AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1257AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
paul7ea487b2003-03-17 02:05:07 +00001258
1259dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001260dnl check system has PCRE regexp
1261dnl ---------------------------
1262if test "x$enable_pcreposix" = "xyes"; then
1263 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1264 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1265fi
1266
1267if test "x$enable_pcreposix" != "xyes"; then
1268dnl ---------------------------
paul7ea487b2003-03-17 02:05:07 +00001269dnl check system has GNU regexp
1270dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001271AC_MSG_CHECKING(whether system has GNU regex)
paul7ea487b2003-03-17 02:05:07 +00001272AC_CHECK_LIB(c, regexec,
1273[AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1274 LIB_REGEX=""],
1275[LIB_REGEX="regex.o"])
Jeremy Jackson25f45882009-01-12 16:06:12 -05001276fi
1277AC_SUBST(HAVE_LIBPCREPOSIX)
paul7ea487b2003-03-17 02:05:07 +00001278AC_SUBST(LIB_REGEX)
1279
1280dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001281dnl check Net-SNMP library
paul7ea487b2003-03-17 02:05:07 +00001282dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001283if test "${enable_snmp}" = "yes"; then
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +02001284 if test "$with_crypto" != "no"; then
1285 LIBS="${LIBS} -lcrypto";
1286 fi
paulb1fc9ac2006-01-31 10:09:27 +00001287 AC_CHECK_LIB(netsnmp, asn_parse_int,
1288 [AC_DEFINE(HAVE_NETSNMP,,Net SNMP)
1289 AC_DEFINE(HAVE_SNMP,,SNMP)
1290 LIBS="${LIBS} -lnetsnmp"],
1291 [AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])])
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +02001292
1293 AC_CHECK_HEADER([net-snmp/net-snmp-config.h],
1294 [],
1295 [AC_MSG_ERROR([--enable-snmp given, but cannot find net-snmp-config.h])],
1296 QUAGGA_INCLUDES)
paulb1fc9ac2006-01-31 10:09:27 +00001297 AC_SUBST(SNMP_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001298fi
1299
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001300dnl ---------------------------
1301dnl sockaddr and netinet checks
1302dnl ---------------------------
1303AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1304 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1305 socklen_t,
1306 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1307 struct nd_opt_adv_interval, struct rt_addrinfo,
Paul Jakma11770e12007-06-22 16:14:42 +00001308 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001309 [], [], QUAGGA_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001310
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001311AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1312 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1313 struct sockaddr_in6.sin6_scope_id,
1314 struct if6_aliasreq.ifra_lifetime,
1315 struct nd_opt_adv_interval.nd_opt_ai_type],
1316 [], [], QUAGGA_INCLUDES)
hasso71c0fb52003-05-25 20:18:13 +00001317
paul7ea487b2003-03-17 02:05:07 +00001318dnl ---------------------------
Paul Jakma11770e12007-06-22 16:14:42 +00001319dnl IRDP/pktinfo/icmphdr checks
paul7ea487b2003-03-17 02:05:07 +00001320dnl ---------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001321AC_CHECK_TYPES([struct in_pktinfo],
Paul Jakma11770e12007-06-22 16:14:42 +00001322 [AC_CHECK_TYPES([struct icmphdr],
1323 [if test "${enable_irdp}" != "no"; then
1324 AC_DEFINE(HAVE_IRDP,, IRDP)
1325 fi],
1326 [if test "${enable_irdp}" = "yes"; then
1327 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1328 fi], [QUAGGA_INCLUDES])],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001329 [if test "${enable_irdp}" = "yes"; then
1330 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1331 fi], [QUAGGA_INCLUDES])
vincent29c4c9b2005-03-25 13:05:47 +00001332
paul7ea487b2003-03-17 02:05:07 +00001333dnl --------------------------------------
1334dnl checking for getrusage struct and call
1335dnl --------------------------------------
1336AC_MSG_CHECKING(whether getrusage is available)
1337AC_TRY_COMPILE([#include <sys/resource.h>
1338],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1339[AC_MSG_RESULT(yes)
1340 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1341 AC_MSG_RESULT(no))
1342
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001343dnl --------------------------------------
1344dnl checking for clock_time monotonic struct and call
1345dnl --------------------------------------
Paul Jakma6511cab2009-06-18 17:38:01 +01001346AC_CHECK_DECL(CLOCK_MONOTONIC,
1347 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1348 AC_DEFINE(HAVE_MONOTONIC_CLOCK,, Have monotonic clock)
1349], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001350
pauledd7c242003-06-04 13:59:38 +00001351dnl -------------------
1352dnl capabilities checks
1353dnl -------------------
hasso41d3fc92004-04-06 11:59:00 +00001354if test "${enable_capabilities}" != "no"; then
1355 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1356 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1357 [AC_MSG_RESULT(yes)
1358 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1359 quagga_ac_keepcaps="yes"],
1360 AC_MSG_RESULT(no)
pauledd7c242003-06-04 13:59:38 +00001361 )
hasso41d3fc92004-04-06 11:59:00 +00001362 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1363 AC_CHECK_HEADERS(sys/capability.h)
1364 fi
1365 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1366 AC_CHECK_LIB(cap, cap_init,
1367 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1368 LIBCAP="-lcap"
paulceacedb2005-09-29 14:39:32 +00001369 quagga_ac_lcaps="yes"]
hasso41d3fc92004-04-06 11:59:00 +00001370 )
paulceacedb2005-09-29 14:39:32 +00001371 else
1372 AC_CHECK_HEADERS(priv.h,
1373 [AC_MSG_CHECKING(Solaris style privileges are available)
1374 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1375 [AC_MSG_RESULT(yes)
1376 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1377 quagga_ac_scaps="yes"],
1378 AC_MSG_RESULT(no)
1379 )
1380 ]
1381 )
1382 fi
1383 if test x"${quagga_ac_scaps}" = x"yes" \
1384 -o x"${quagga_ac_lcaps}" = x"yes"; then
1385 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
hasso41d3fc92004-04-06 11:59:00 +00001386 fi
pauledd7c242003-06-04 13:59:38 +00001387fi
1388AC_SUBST(LIBCAP)
1389
paulfb2d1502003-06-04 09:40:54 +00001390dnl ---------------------------
1391dnl check for glibc 'backtrace'
1392dnl ---------------------------
1393if test "${glibc}" = "yes"; then
Paul Jakmafb66b292006-05-28 08:26:15 +00001394 AC_CHECK_HEADER([execinfo.h],
1395 [AC_CHECK_FUNC([backtrace],
1396 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1397 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1398 ])
1399 ])
paulfb2d1502003-06-04 09:40:54 +00001400fi
1401
Paul Jakma41be32b2006-03-30 13:53:59 +00001402dnl -----------------------------------------
1403dnl check for malloc mallinfo struct and call
1404dnl this must try and link using LIBS, in
1405dnl order to check no alternative allocator
1406dnl has been specified, which might not provide
1407dnl mallinfo, e.g. such as Umem on Solaris.
1408dnl -----------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001409AC_CHECK_HEADER([malloc.h],
Paul Jakma41be32b2006-03-30 13:53:59 +00001410 [AC_MSG_CHECKING(whether mallinfo is available)
1411 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1412 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1413 [AC_MSG_RESULT(yes)
1414 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1415 AC_MSG_RESULT(no)
1416 )
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001417 ], [], QUAGGA_INCLUDES)
Paul Jakma41be32b2006-03-30 13:53:59 +00001418
paul408ad942003-05-20 00:03:33 +00001419dnl ----------
1420dnl configure date
1421dnl ----------
1422CONFDATE=`date '+%Y%m%d'`
1423AC_SUBST(CONFDATE)
1424
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001425dnl Conditionally enable PIE support for GNU toolchains.
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001426AC_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 +01001427if test "$enable_pie" != "no"; then
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001428 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1429 save_CFLAGS=$CFLAGS
1430 save_LDFLAGS=$LDFLAGS
1431 CFLAGS="$CFLAGS -fPIE"
1432 LDFLAGS="$LDFLAGS -pie"
1433 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1434 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1435 )
1436 CFLAGS=$save_CFLAGS
1437 LDFLAGS=$save_LDFLAGS
1438 ])
1439 if test "$ap_cv_cc_pie" = "yes"; then
1440 PICFLAGS="-fPIE"
1441 PILDFLAGS="-pie"
1442 fi
1443fi
1444
1445AC_SUBST(PICFLAGS)
1446AC_SUBST(PILDFLAGS)
1447
paul7ea487b2003-03-17 02:05:07 +00001448dnl ------------------------------
paula159ed92003-06-04 11:01:45 +00001449dnl set paths for state directory
paul23bd12c2003-04-07 06:11:09 +00001450dnl ------------------------------
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001451AC_MSG_CHECKING(directory to use for state file)
paul23bd12c2003-04-07 06:11:09 +00001452if test "${prefix}" = "NONE"; then
paule8f29842003-08-12 13:08:31 +00001453 quagga_statedir_prefix="";
paul23bd12c2003-04-07 06:11:09 +00001454else
paule8f29842003-08-12 13:08:31 +00001455 quagga_statedir_prefix=${prefix}
paul23bd12c2003-04-07 06:11:09 +00001456fi
1457if test "${localstatedir}" = '${prefix}/var'; then
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001458 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
paule8f29842003-08-12 13:08:31 +00001459 ${quagga_statedir_prefix}/var/adm dnl
1460 ${quagga_statedir_prefix}/etc dnl
paula159ed92003-06-04 11:01:45 +00001461 /var/run dnl
1462 /var/adm dnl
1463 /etc dnl
1464 /dev/null;
paul23bd12c2003-04-07 06:11:09 +00001465 do
paule8f29842003-08-12 13:08:31 +00001466 test -d $QUAGGA_STATE_DIR && break
paul23bd12c2003-04-07 06:11:09 +00001467 done
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001468 quagga_statedir=$QUAGGA_STATE_DIR
paul23bd12c2003-04-07 06:11:09 +00001469else
paule8f29842003-08-12 13:08:31 +00001470 quagga_statedir=${localstatedir}
paul23bd12c2003-04-07 06:11:09 +00001471fi
paule8f29842003-08-12 13:08:31 +00001472if test $quagga_statedir = "/dev/null"; then
paula159ed92003-06-04 11:01:45 +00001473 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1474fi
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001475AC_MSG_RESULT(${quagga_statedir})
1476AC_SUBST(quagga_statedir)
paula159ed92003-06-04 11:01:45 +00001477
paule8f29842003-08-12 13:08:31 +00001478AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1479AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1480AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1481AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1482AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1483AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
jardin9e867fe2003-12-23 08:56:18 +00001484AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
ajsd0199432004-12-22 14:03:52 +00001485AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
paule8f29842003-08-12 13:08:31 +00001486AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1487AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1488AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1489AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1490AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1491AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1492AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
jardin9e867fe2003-12-23 08:56:18 +00001493AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
ajs515210b2004-12-22 15:35:12 +00001494AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
paul7ea487b2003-03-17 02:05:07 +00001495
paul1eb8ef22005-04-07 07:30:20 +00001496dnl -------------------------------
1497dnl Quagga sources should always be
1498dnl current wrt interfaces. Dont
1499dnl allow deprecated interfaces to
1500dnl be exposed.
1501dnl -------------------------------
1502AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1503
paul7ea487b2003-03-17 02:05:07 +00001504dnl ---------------------------
1505dnl Check htonl works correctly
1506dnl ---------------------------
1507AC_MSG_CHECKING(for working htonl)
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001508AC_CACHE_VAL(ac_cv_htonl_works,
1509 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1510 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1511 ]
1512)
paul7ea487b2003-03-17 02:05:07 +00001513AC_MSG_RESULT($ac_cv_htonl_works)
1514
paul14c17fd2004-11-07 22:34:23 +00001515AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
ajsd0199432004-12-22 14:03:52 +00001516 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
jardin9e867fe2003-12-23 08:56:18 +00001517 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
paul14c17fd2004-11-07 22:34:23 +00001518 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
gdt69f1fc22004-08-27 15:57:35 +00001519 pkgsrc/Makefile
paul670bbf12004-11-12 09:05:00 +00001520 redhat/quagga.spec
gdtb7a97f82004-07-23 16:23:56 +00001521 lib/version.h
paul14c17fd2004-11-07 22:34:23 +00001522 doc/defines.texi
hassof695b012005-04-02 19:03:39 +00001523 isisd/topology/Makefile
gdtcbd04082004-08-31 18:16:36 +00001524 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
paulf31293a2004-11-12 09:27:04 +00001525 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
paul26275b02005-04-11 07:10:47 +00001526AC_CONFIG_FILES([solaris/Makefile])
1527
paul670bbf12004-11-12 09:05:00 +00001528AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
hasso48577192004-11-19 06:41:49 +00001529## Hack, but working solution to avoid rebuilding of quagga.info.
1530## It's already in CVS until texinfo 4.7 is more common.
paul14c17fd2004-11-07 22:34:23 +00001531AC_OUTPUT
paul7ea487b2003-03-17 02:05:07 +00001532
1533echo "
hassoc89f6492004-08-26 12:21:28 +00001534Quagga configuration
1535--------------------
1536quagga version : ${PACKAGE_VERSION}
paul7ea487b2003-03-17 02:05:07 +00001537host operationg system : ${host_os}
1538source code location : ${srcdir}
1539compiler : ${CC}
1540compiler flags : ${CFLAGS}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001541make : ${MAKE-make}
hasso2d582282005-03-28 15:29:07 +00001542includes : ${INCLUDES} ${SNMP_INCLUDES}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001543linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
paule8f29842003-08-12 13:08:31 +00001544state file directory : ${quagga_statedir}
pauldc7a2bf2003-10-22 00:07:44 +00001545config file directory : `eval echo \`echo ${sysconfdir}\``
gdtd6b72f72003-12-03 17:24:27 +00001546example directory : `eval echo \`echo ${exampledir}\``
paul8d4aee52003-06-06 00:30:35 +00001547user to run as : ${enable_user}
1548group to run as : ${enable_group}
1549group for vty sockets : ${enable_vty_group}
gdtaa593d52003-12-22 20:15:53 +00001550config file mask : ${enable_configfile_mask}
1551log file mask : ${enable_logfile_mask}
pauldc7a2bf2003-10-22 00:07:44 +00001552
1553The above user and group must have read/write access to the state file
Paul Jakma105b8232006-05-28 08:02:41 +00001554directory and to the config files in the config file directory."
1555
1556if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1557Warning: The ${MAKE-make} programme detected, either in your path or
1558via the MAKE variable, is not GNU Make. GNU make may be installed as
1559gmake on some systems. and is required to complete a build of Quagga
1560" > /dev/stderr
1561fi