blob: c1f618248b5c0e15a19c83c7cac34db580512073 [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 Jakma5012bc32009-05-08 23:20:19 +010011AC_INIT(Quagga, 0.99.12, [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
Greg Troxel1bbaa8c2007-02-06 19:36:47 +000024dnl GNU awk is required for lib/memtype.h made by memtypes.awk.
25dnl BSD awk complains: awk: gensub doesn't support backreferences (subst "\1")
paul03ecfb62005-04-16 15:38:23 +000026AC_CHECK_PROG([GAWK],[gawk],[gawk],[/bin/false])
27AC_ARG_VAR([GAWK],[GNU AWK])
28
gdtd6b72f72003-12-03 17:24:27 +000029dnl default is to match previous behavior
gdtc4f0efe2003-12-04 15:39:25 +000030exampledir=${sysconfdir}
gdtd6b72f72003-12-03 17:24:27 +000031AC_ARG_ENABLE([exampledir],
32 AC_HELP_STRING([--enable-exampledir],
33 [specify alternate directory for examples]),
34 exampledir="$enableval",)
gdtc4f0efe2003-12-04 15:39:25 +000035dnl XXX add --exampledir to autoconf standard directory list somehow
gdtd6b72f72003-12-03 17:24:27 +000036AC_SUBST(exampledir)
37
gdtcbd04082004-08-31 18:16:36 +000038dnl default is to match previous behavior
39pkgsrcrcdir=""
40pkgsrcdir=""
41AC_ARG_ENABLE([pkgsrcrcdir],
42 AC_HELP_STRING([--enable-pkgsrcrcdir],
43 [specify directory for rc.d scripts]),
44 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
45dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
46AC_SUBST(pkgsrcdir)
47AC_SUBST(pkgsrcrcdir)
48
paul7ea487b2003-03-17 02:05:07 +000049dnl ------------
50dnl Check CFLAGS
51dnl ------------
52AC_ARG_WITH(cflags,
53[ --with-cflags Set CFLAGS for use in compilation.])
54if test "x$with_cflags" != "x" ; then
55 CFLAGS="$with_cflags" ; cflags_specified=yes ;
56elif test -n "$CFLAGS" ; then
57 cflags_specified=yes ;
58fi
59
hasso1969e4b2005-03-27 13:07:23 +000060dnl --------------------
61dnl Check CC and friends
62dnl --------------------
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +010063AC_LANG([C])
paul7ea487b2003-03-17 02:05:07 +000064AC_PROG_CC
hasso1969e4b2005-03-27 13:07:23 +000065AC_PROG_CPP
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +010066AM_PROG_CC_C_O
hasso1969e4b2005-03-27 13:07:23 +000067AC_PROG_EGREP
Greg Troxel553bdfe2007-02-06 20:10:35 +000068
69dnl autoconf 2.59 appears not to support AC_PROG_SED
70dnl AC_PROG_SED
71AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
hasso1969e4b2005-03-27 13:07:23 +000072
73dnl ------------------------------------------------------------------
74dnl Intel compiler check. Although Intel tries really hard to make icc
75dnl look like gcc, there are some differences. It's very verbose with
76dnl -Wall and it doesn't support the individual -W options.
77dnl ------------------------------------------------------------------
paul6a4b8832005-11-26 08:28:00 +000078if test "x${GCC}" = "xyes" ; then
79 COMPILER="GCC"
80 AC_MSG_CHECKING([whether we are using the Intel compiler])
81 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
82 [AC_MSG_RESULT([no])],
83 [COMPILER="ICC"
84 AC_MSG_RESULT([yes])]
85 )
86else
87 AC_MSG_CHECKING([whether we are using SunPro compiler])
88 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
89 [AC_MSG_RESULT([no])],
90 [COMPILER="SUNPRO"
91 AC_MSG_RESULT([yes])]
92 )
93fi
paul7ea487b2003-03-17 02:05:07 +000094
paula49c0ff2004-09-30 06:08:58 +000095dnl ---------------------------------------------
paul7ea487b2003-03-17 02:05:07 +000096dnl If CLFAGS doesn\'t exist set default value
paula49c0ff2004-09-30 06:08:58 +000097dnl AC_PROG_CC will have set minimal default
98dnl already, eg "-O2 -g" for gcc, "-g" for others
paul27eebb32004-07-22 18:16:59 +000099dnl (Wall is gcc specific... have to make sure
100dnl gcc is being used before setting it)
101dnl
paul6a4b8832005-11-26 08:28:00 +0000102dnl Intel icc 8.0 also sets __GNUC__,
103dnl but doesn't support all these fancy -W options.
hasso1969e4b2005-03-27 13:07:23 +0000104dnl Intel compiler warnings we ignore:
105dnl 279: controlling expression is constant.
106dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
107dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
108dnl macro.
109dnl 981: operands are evaluated in unspecified order.
paul6a4b8832005-11-26 08:28:00 +0000110dnl
111dnl Sun Studio 10 / SunPro 5.7 is also supported,
112dnl so lets set some sane CFLAGS for it.
113dnl ---------------------------------------------
hasso1969e4b2005-03-27 13:07:23 +0000114
paul6a4b8832005-11-26 08:28:00 +0000115AC_MSG_CHECKING([whether to set a default CFLAGS])
116if test "x${cflags_specified}" = "x" ; then
117 case ${COMPILER} in
118 "ICC")
119 CFLAGS="-Os -g -Wall -wd 279,869,981"
120 AC_MSG_RESULT([Intel default])
121 ;;
122 "GCC")
Andrew J. Schorr5fa05092007-04-30 19:14:08 +0000123 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
paul6a4b8832005-11-26 08:28:00 +0000124 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
125 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
126 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
127 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
128 # TODO: conditionally addd -Wpacked if handled
129 AC_MSG_RESULT([gcc default])
130 ;;
131 "SUNPRO")
Paul Jakma105b8232006-05-28 08:02:41 +0000132 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
paul6a4b8832005-11-26 08:28:00 +0000133 AC_MSG_RESULT([SunPro default])
134 ;;
135 *)
136 AC_MSG_RESULT([unknown compiler])
137 ;;
138 esac
139else
140 AC_MSG_RESULT([CFLAGS supplied by user])
hasso1969e4b2005-03-27 13:07:23 +0000141fi
142
paul7ea487b2003-03-17 02:05:07 +0000143dnl --------------
144dnl Check programs
145dnl --------------
paul7ea487b2003-03-17 02:05:07 +0000146AC_PROG_INSTALL
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000147AC_PROG_LN_S
paul7ea487b2003-03-17 02:05:07 +0000148AC_PROG_MAKE_SET
149AC_CHECK_TOOL(AR, ar)
paul7ea487b2003-03-17 02:05:07 +0000150
Paul Jakma105b8232006-05-28 08:02:41 +0000151dnl ---------------------------
152dnl We, perhaps unfortunately,
153dnl depend on GNU Make specific
154dnl constructs.
155dnl Give the user a warning if
156dnl not GNU Make.
157dnl ---------------------------
158AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
159 [quagga_cv_gnu_make=no
160 if ${MAKE-make} --version 2>/dev/null | \
161 grep '^GNU Make ' >/dev/null ; then
162 quagga_cv_gnu_make=yes;
163 fi
164 ]
165)
166
Paul Jakmad46d2a22007-05-10 16:53:04 +0000167dnl -----------------
168dnl System extensions
169dnl -----------------
paul7ea487b2003-03-17 02:05:07 +0000170AC_AIX
Paul Jakmad46d2a22007-05-10 16:53:04 +0000171AC_GNU_SOURCE
paul7ea487b2003-03-17 02:05:07 +0000172
gdt87efd642004-06-30 17:36:11 +0000173dnl -------
174dnl libtool
175dnl -------
paul0fc42942004-08-19 04:41:21 +0000176AC_PROG_LIBTOOL
gdt87efd642004-06-30 17:36:11 +0000177
paul7ea487b2003-03-17 02:05:07 +0000178dnl ----------------------
179dnl Packages configuration
180dnl ----------------------
181AC_ARG_ENABLE(vtysh,
gdtfc9d0742004-06-30 14:25:12 +0000182[ --enable-vtysh include integrated vty shell for Quagga])
paul7ea487b2003-03-17 02:05:07 +0000183AC_ARG_ENABLE(ipv6,
184[ --disable-ipv6 turn off IPv6 related features and daemons])
185AC_ARG_ENABLE(zebra,
186[ --disable-zebra do not build zebra daemon])
187AC_ARG_ENABLE(bgpd,
188[ --disable-bgpd do not build bgpd])
189AC_ARG_ENABLE(ripd,
190[ --disable-ripd do not build ripd])
191AC_ARG_ENABLE(ripngd,
192[ --disable-ripngd do not build ripngd])
193AC_ARG_ENABLE(ospfd,
194[ --disable-ospfd do not build ospfd])
paul7ea487b2003-03-17 02:05:07 +0000195AC_ARG_ENABLE(ospf6d,
196[ --disable-ospf6d do not build ospf6d])
ajsd0199432004-12-22 14:03:52 +0000197AC_ARG_ENABLE(watchquagga,
198[ --disable-watchquagga do not build watchquagga])
jardin9e867fe2003-12-23 08:56:18 +0000199AC_ARG_ENABLE(isisd,
hassoae399ab2004-09-13 20:22:18 +0000200[ --enable-isisd build isisd])
Greg Troxel97cee872007-08-02 13:36:56 +0000201AC_ARG_ENABLE(solaris,
202[ --enable-solaris build solaris])
paul7ea487b2003-03-17 02:05:07 +0000203AC_ARG_ENABLE(bgp-announce,
204[ --disable-bgp-announce, turn off BGP route announcement])
205AC_ARG_ENABLE(netlink,
206[ --enable-netlink force to use Linux netlink interface])
207AC_ARG_ENABLE(broken-aliases,
208[ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +0200209AC_ARG_WITH(crypto,
210[ --without-crypto do not use libcrypto in SNMP])
paul7ea487b2003-03-17 02:05:07 +0000211AC_ARG_ENABLE(snmp,
212[ --enable-snmp enable SNMP support])
213AC_ARG_WITH(libpam,
214[ --with-libpam use libpam for PAM support in vtysh])
hasso71c0fb52003-05-25 20:18:13 +0000215AC_ARG_ENABLE(tcp-zebra,
paul7ea487b2003-03-17 02:05:07 +0000216[ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
paul7ea487b2003-03-17 02:05:07 +0000217AC_ARG_ENABLE(opaque-lsa,
paul1ef74ef2003-03-21 15:16:05 +0000218[ --enable-opaque-lsa enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
219AC_ARG_ENABLE(ospfapi,
220[ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database,
221 (this is the default if --enable-opaque-lsa is not set)])
222AC_ARG_ENABLE(ospfclient,
223[ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
224 (this is the default if --disable-ospfapi is set)])
paul7ea487b2003-03-17 02:05:07 +0000225AC_ARG_ENABLE(ospf-te,
226[ --enable-ospf-te enable Traffic Engineering Extension to OSPF])
227AC_ARG_ENABLE(multipath,
228[ --enable-multipath=ARG enable multipath function, ARG must be digit])
Paul P Komkoff Jrfe86b482008-08-13 16:56:05 +0100229AC_ARG_ENABLE(user,
230 AC_HELP_STRING([--enable-user=user], [user to run Quagga suite as (default quagga)]))
231AC_ARG_ENABLE(group,
232 AC_HELP_STRING([--enable-group=group], [group to run Quagga suite as (default quagga)]))
pauledd7c242003-06-04 13:59:38 +0000233AC_ARG_ENABLE(vty_group,
paul6b6942f2004-10-22 04:55:05 +0000234[ --enable-vty-group=ARG set vty sockets to have specified group as owner])
gdtaa593d52003-12-22 20:15:53 +0000235AC_ARG_ENABLE(configfile_mask,
236[ --enable-configfile-mask=ARG set mask for config files])
237AC_ARG_ENABLE(logfile_mask,
238[ --enable-logfile-mask=ARG set mask for log files])
pauledd7c242003-06-04 13:59:38 +0000239
hasso71c0fb52003-05-25 20:18:13 +0000240AC_ARG_ENABLE(rtadv,
paul6b6942f2004-10-22 04:55:05 +0000241[ --disable-rtadv disable IPV6 router advertisement feature])
hassoca776982004-06-12 14:33:05 +0000242AC_ARG_ENABLE(irdp,
paul6b6942f2004-10-22 04:55:05 +0000243[ --enable-irdp enable IRDP server support in zebra])
hassof695b012005-04-02 19:03:39 +0000244AC_ARG_ENABLE(isis_topology,
245[ --enable-isis-topology enable IS-IS topology generator])
hasso41d3fc92004-04-06 11:59:00 +0000246AC_ARG_ENABLE(capabilities,
247[ --disable-capabilities disable using POSIX capabilities])
paul6b6942f2004-10-22 04:55:05 +0000248AC_ARG_ENABLE(gcc_ultra_verbose,
249[ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
Paul Jakma3453a712009-06-12 14:21:02 +0100250AC_ARG_ENABLE(linux24_tcp_md5,
251[ --enable-linux24-tcp-md5 enable support for old, Linux-2.4 RFC2385 patch])
ajs3cade262004-12-29 17:50:22 +0000252AC_ARG_ENABLE(gcc-rdynamic,
253[ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
ajs924b9222005-04-16 17:11:24 +0000254AC_ARG_ENABLE(time-check,
255[ --disable-time-check disable slow thread warning messages])
paul6b6942f2004-10-22 04:55:05 +0000256
257if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
258 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
259 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
260 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
261 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
262fi
paul7ea487b2003-03-17 02:05:07 +0000263
ajs3cade262004-12-29 17:50:22 +0000264if test x"${enable_gcc_rdynamic}" = x"yes" ; then
265 LDFLAGS="${LDFLAGS} -rdynamic"
266fi
267
ajs924b9222005-04-16 17:11:24 +0000268if test x"${enable_time_check}" != x"no" ; then
269 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
270 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
271 else
272 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
273 fi
274fi
275
paul7ea487b2003-03-17 02:05:07 +0000276if test "${enable_broken_aliases}" = "yes"; then
277 if test "${enable_netlink}" = "yes"
278 then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000279 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
paul7ea487b2003-03-17 02:05:07 +0000280 fi
281 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
282 enable_netlink=no
283fi
284
285if test "${enable_tcp_zebra}" = "yes"; then
286 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
287fi
288
paul7ea487b2003-03-17 02:05:07 +0000289if test "${enable_opaque_lsa}" = "yes"; then
290 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
291fi
292
293if test "${enable_ospf_te}" = "yes"; then
294 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
295 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
296fi
297
Paul Jakma3453a712009-06-12 14:21:02 +0100298if test "${enable_linux24_tcp_md5}" = "yes"; then
299 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
300fi
301
gdtd2a0ccc2003-12-03 18:13:48 +0000302AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
303if test "${enable_rtadv}" != "no"; then
hasso71c0fb52003-05-25 20:18:13 +0000304 AC_MSG_RESULT(yes)
gdtd2a0ccc2003-12-03 18:13:48 +0000305 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
paul2487bea2003-05-25 23:51:31 +0000306else
307 AC_MSG_RESULT(no)
hasso71c0fb52003-05-25 20:18:13 +0000308fi
paul7ea487b2003-03-17 02:05:07 +0000309
hassoca776982004-06-12 14:33:05 +0000310if test "${enable_irdp}" = "yes"; then
311 AC_DEFINE(HAVE_IRDP,, IRDP )
312fi
313
hassof695b012005-04-02 19:03:39 +0000314if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
315 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
316 ISIS_TOPOLOGY_INCLUDES="-I./topology"
317 ISIS_TOPOLOGY_DIR="topology"
318 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
319fi
320
321AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
322AC_SUBST(ISIS_TOPOLOGY_DIR)
323AC_SUBST(ISIS_TOPOLOGY_LIB)
324
paul79cb2162003-06-06 12:19:53 +0000325if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
paule8f29842003-08-12 13:08:31 +0000326 enable_user="quagga"
pauledd7c242003-06-04 13:59:38 +0000327elif test "${enable_user}" = "no"; then
328 enable_user="root"
329fi
pauledd7c242003-06-04 13:59:38 +0000330
paul79cb2162003-06-06 12:19:53 +0000331if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
paule8f29842003-08-12 13:08:31 +0000332 enable_group="quagga"
pauledd7c242003-06-04 13:59:38 +0000333elif test "${enable_group}" = "no"; then
334 enable_group="root"
335fi
pauledd7c242003-06-04 13:59:38 +0000336
337if test x"${enable_vty_group}" = x"yes" ; then
paul8d4aee52003-06-06 00:30:35 +0000338 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
paul79cb2162003-06-06 12:19:53 +0000339elif test x"${enable_vty_group}" != x""; then
paul8d4aee52003-06-06 00:30:35 +0000340 if test x"${enable_vty_group}" != x"no"; then
pauledd7c242003-06-04 13:59:38 +0000341 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
342 fi
343fi
paul26275b02005-04-11 07:10:47 +0000344AC_SUBST([enable_user])
345AC_SUBST([enable_group])
346AC_SUBST([enable_vty_group])
347AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
348AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
pauledd7c242003-06-04 13:59:38 +0000349
gdtaa593d52003-12-22 20:15:53 +0000350enable_configfile_mask=${enable_configfile_mask:-0600}
351AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
352
353enable_logfile_mask=${enable_logfile_mask:-0600}
354AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
355
paul7ea487b2003-03-17 02:05:07 +0000356MULTIPATH_NUM=1
357
358case "${enable_multipath}" in
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000359 [[0-9]|[1-9][0-9]])
paul7ea487b2003-03-17 02:05:07 +0000360 MULTIPATH_NUM="${enable_multipath}"
361 ;;
362 "")
363 ;;
364 *)
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000365 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
paul7ea487b2003-03-17 02:05:07 +0000366 ;;
367esac
368
paul7ea487b2003-03-17 02:05:07 +0000369AC_SUBST(MULTIPATH_NUM)
370
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000371dnl ------------------------------------
372dnl Check C keywords and standard types
373dnl ------------------------------------
374AC_C_CONST
375AC_C_INLINE
376AC_C_RESTRICT
377AC_C_VOLATILE
pauldc7a2bf2003-10-22 00:07:44 +0000378AC_HEADER_STDC
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000379AC_HEADER_TIME
380AC_HEADER_SYS_WAIT
381dnl AC_TYPE_PID_T
382AC_TYPE_UID_T
383AC_TYPE_MODE_T
384AC_TYPE_SIZE_T
385AC_TYPE_SIGNAL
386AC_STRUCT_TM
pauldc7a2bf2003-10-22 00:07:44 +0000387
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000388dnl -------------------------
389dnl Check other header files.
390dnl -------------------------
391AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
392 sys/types.h linux/version.h netdb.h asm/types.h \
393 sys/param.h limits.h signal.h libutil.h \
394 sys/socket.h netinet/in.h])
395
396dnl Utility macro to avoid retyping includes all the time
397m4_define([QUAGGA_INCLUDES],
398[#ifdef SUNOS_5
399#define _XPG4_2
400#define __EXTENSIONS__
401#endif
402#include <stdio.h>
403#if STDC_HEADERS
404# include <stdlib.h>
405# include <stddef.h>
406#else
407# if HAVE_STDLIB_H
408# include <stdlib.h>
409# endif
410#endif
411#if HAVE_SYS_TYPES_H
412# include <sys/types.h>
413#endif
414/* sys/conf.h depends on param.h on FBSD at least */
415#if HAVE_SYS_PARAM_H
416# include <sys/param.h>
417#endif
418/* Required for MAXSIG */
419#if HAVE_SIGNAL_H
420# include <signal.h>
421#endif
422#if HAVE_SYS_SOCKET_H
423# include <sys/socket.h>
424#endif
425#if HAVE_NETINET_IN_H
426# include <netinet/in.h>
427#endif
428])dnl
429
430AC_CHECK_HEADERS([sys/un.h net/if.h netinet/in_systm.h netinet/in_var.h \
431 net/if_dl.h net/if_var.h net/netopt.h net/route.h \
Paul Jakma11770e12007-06-22 16:14:42 +0000432 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000433 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
434 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
435 [], [], QUAGGA_INCLUDES)
436
437AC_CHECK_HEADERS([ucontext.h], [], [],
438[#ifndef __USE_GNU
439#define __USE_GNU
440#endif /* __USE_GNU */
441QUAGGA_INCLUDES
442])
443
444m4_define([QUAGGA_INCLUDES],
445QUAGGA_INCLUDES
446[#if HAVE_NET_IF_H
447# include <net/if.h>
448#endif
449#if HAVE_SYS_UN_H
450# include <sys/un.h>
451#endif
452#if HAVE_NETINET_IN_SYSTM_H
453# include <netinet/in_systm.h>
454#endif
455#if HAVE_NETINET_IN_VAR_H
456# include <netinet/in_var.h>
457#endif
458#if HAVE_NET_IF_DL_H
459# include <net/if_dl.h>
460#endif
461#if HAVE_NET_IF_VAR_H
462# include <net/if_var.h>
463#endif
464#if HAVE_NET_NETOPT_H
465# include <net/netopt.h>
466#endif
467#if HAVE_NET_ROUTE_H
468# include <net/route.h>
469#endif
470#if HAVE_INET_ND_H
471# include <inet/nd.h>
472#endif
473#if HAVE_ARPA_INET_H
474# include <arpa/inet.h>
475#endif
Paul Jakma11770e12007-06-22 16:14:42 +0000476/* Required for IDRP */
477#if HAVE_NETINET_IP_ICMP_H
478# include <netinet/ip_icmp.h>
479#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000480])dnl
pauldc7a2bf2003-10-22 00:07:44 +0000481
gdtfa3232e2003-12-03 17:52:30 +0000482dnl V6 headers are checked below, after we check for v6
paul7ea487b2003-03-17 02:05:07 +0000483
paul7ea487b2003-03-17 02:05:07 +0000484dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
485case "$host" in
paulafd8a122005-03-12 06:36:10 +0000486 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
paul7ea487b2003-03-17 02:05:07 +0000487 opsys=sol2-6
paulafd8a122005-03-12 06:36:10 +0000488 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
paul19877dd2004-05-11 10:49:35 +0000489 AC_DEFINE(SUNOS_5, 1, SunOS 5)
paul7ea487b2003-03-17 02:05:07 +0000490 AC_CHECK_LIB(xnet, main)
491 CURSES=-lcurses
492 ;;
paul1b73de82005-04-10 16:31:51 +0000493 [*-sunos5.[8-9]] \
494 | [*-sunos5.1[0-9]] \
495 | [*-sunos5.1[0-9].[0-9]] \
496 | [*-solaris2.[8-9]] \
497 | [*-solaris2.1[0-9]] \
498 | [*-solaris2.1[0-9].[0-9]])
paulafd8a122005-03-12 06:36:10 +0000499 opsys=sol8
Paul Jakmafb66b292006-05-28 08:26:15 +0000500 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
501 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
paul19877dd2004-05-11 10:49:35 +0000502 AC_CHECK_LIB(socket, main)
503 AC_CHECK_LIB(nsl, main)
paul1b73de82005-04-10 16:31:51 +0000504 AC_CHECK_LIB(umem, main)
Paul Jakmafb66b292006-05-28 08:26:15 +0000505 AC_CHECK_FUNCS([printstack],
506 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
507 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
508 ])
paul19877dd2004-05-11 10:49:35 +0000509 CURSES=-lcurses
510 ;;
paul7ea487b2003-03-17 02:05:07 +0000511 *-sunos5* | *-solaris2*)
paul19877dd2004-05-11 10:49:35 +0000512 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
paul7ea487b2003-03-17 02:05:07 +0000513 AC_CHECK_LIB(socket, main)
514 AC_CHECK_LIB(nsl, main)
515 CURSES=-lcurses
516 ;;
hassoc45eb832005-02-19 13:58:06 +0000517 *-linux*)
paul7ea487b2003-03-17 02:05:07 +0000518 opsys=gnu-linux
519 AC_DEFINE(GNU_LINUX,,GNU Linux)
520 ;;
521 *-nec-sysv4*)
522 AC_CHECK_LIB(nsl, gethostbyname)
523 AC_CHECK_LIB(socket, socket)
524 ;;
paul7ea487b2003-03-17 02:05:07 +0000525 *-openbsd*)
526 opsys=openbsd
527 AC_DEFINE(OPEN_BSD,,OpenBSD)
528 ;;
529 *-bsdi*)
530 opsys=bsdi
531 OTHER_METHOD="mtu_kvm.o"
532 AC_CHECK_LIB(kvm, main)
533 ;;
paul49e3b3c2003-10-23 20:39:50 +0000534 *-irix6.5)
pauldc7a2bf2003-10-22 00:07:44 +0000535 opsys=irix
536 AC_DEFINE(IRIX_65,,IRIX 6.5)
537 ;;
paul7ea487b2003-03-17 02:05:07 +0000538esac
539
540dnl ---------------------
541dnl Integrated VTY option
542dnl ---------------------
543case "${enable_vtysh}" in
544 "yes") VTYSH="vtysh";
545 AC_DEFINE(VTYSH,,VTY shell)
gdtfc9d0742004-06-30 14:25:12 +0000546 AC_PATH_PROG(PERL, perl)
547dnl Vtysh uses libreadline, which looks for termcap functions at
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000548dnl configure time. We follow readlines search order.
gdtfc9d0742004-06-30 14:25:12 +0000549dnl The required procedures are in libtermcap on NetBSD, in
550dnl [TODO] on Linux, and in [TODO] on Solaris.
hassoc0689392005-08-25 12:00:58 +0000551 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
paula9694592005-08-25 14:50:05 +0000552 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
553 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
554 [AC_CHECK_LIB(ncurses, tputs,
555 LIBREADLINE="$LIBREADLINE -lncurses")]
556 )]
557 )]
558 )
559 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
560 "$LIBREADLINE")
paul7ea487b2003-03-17 02:05:07 +0000561 if test $ac_cv_lib_readline_main = no; then
gdtfc9d0742004-06-30 14:25:12 +0000562 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
paul7ea487b2003-03-17 02:05:07 +0000563 fi
564 AC_CHECK_HEADER(readline/history.h)
565 if test $ac_cv_header_readline_history_h = no;then
566 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
567 fi
paula9694592005-08-25 14:50:05 +0000568 AC_CHECK_LIB(readline, rl_completion_matches,
569 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
paul3d3de8c2003-05-23 10:33:49 +0000570 if test $ac_cv_lib_readline_rl_completion_matches = no; then
571 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
572 fi
573 ;;
paul7ea487b2003-03-17 02:05:07 +0000574 "no" ) VTYSH="";;
575 * ) ;;
576esac
hassoc0689392005-08-25 12:00:58 +0000577AC_SUBST(LIBREADLINE)
paul7ea487b2003-03-17 02:05:07 +0000578
579dnl ----------
580dnl PAM module
581dnl ----------
582if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000583 AC_CHECK_HEADER([security/pam_misc.h],
584 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
585 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
586 pam_conv_func="misc_conv"
587 ],
588 [], QUAGGA_INCLUDES)
589 AC_CHECK_HEADER([security/openpam.h],
590 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
591 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
592 pam_conv_func="openpam_ttyconv"
593 ],
594 [], QUAGGA_INCLUDES)
paul24cd4352003-05-06 12:16:27 +0000595 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
596 AC_MSG_WARN([*** pam support will not be built ***])
597 with_libpam="no"
598 fi
599fi
600
601if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000602dnl took this test from proftpds configure.in and suited to our needs
paul7ea487b2003-03-17 02:05:07 +0000603dnl -------------------------------------------------------------------------
604dnl
605dnl This next check looks funky due to a linker problem with some versions
606dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
607dnl omitted requiring libdl linking information. PAM-0.72 or better ships
608dnl with RedHat 6.2 and Debian 2.2 or better.
609AC_CHECK_LIB(pam, pam_start,
paul24cd4352003-05-06 12:16:27 +0000610 [AC_CHECK_LIB(pam, $pam_conv_func,
paul7ea487b2003-03-17 02:05:07 +0000611 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
612 LIBPAM="-lpam"],
613 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
614 LIBPAM="-lpam -lpam_misc"]
615 )
616 ],
617
618 [AC_CHECK_LIB(pam, pam_end,
paul24cd4352003-05-06 12:16:27 +0000619 [AC_CHECK_LIB(pam, $pam_conv_func,
paula159ed92003-06-04 11:01:45 +0000620 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000621 LIBPAM="-lpam -ldl"],
paula159ed92003-06-04 11:01:45 +0000622 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000623 LIBPAM="-lpam -ldl -lpam_misc"]
624 )
625 ],AC_MSG_WARN([*** pam support will not be built ***]),
626 [-ldl])
627 ]
628)
629fi
630AC_SUBST(LIBPAM)
631
632dnl -------------------------------
633dnl Endian-ness check
634dnl -------------------------------
635AC_WORDS_BIGENDIAN
636
637dnl -------------------------------
638dnl check the size in byte of the C
639dnl -------------------------------
640dnl AC_CHECK_SIZEOF(char)
641dnl AC_CHECK_SIZEOF(int)
642dnl AC_CHECK_SIZEOF(short)
643dnl AC_CHECK_SIZEOF(long)
644
645dnl ----------------------------
646dnl check existance of functions
647dnl ----------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000648AC_FUNC_CHOWN
649AC_FUNC_FNMATCH
650AC_FUNC_FORK
651AC_FUNC_MALLOC
652AC_FUNC_MEMCMP
653AC_FUNC_MKTIME
654AC_FUNC_STRFTIME
655AC_FUNC_REALLOC
656AC_FUNC_STAT
657AC_FUNC_SELECT_ARGTYPES
658AC_FUNC_STRFTIME
Paul Jakmad46d2a22007-05-10 16:53:04 +0000659dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
660dnl can lead to strange side effects. So we just check for strnlen
661dnl directly, see below.
Paul Jakma2b5cb412007-05-10 17:05:16 +0000662dnl AC_FUNC_STRNLENdnl
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000663AC_FUNC_VPRINTF
664
665dnl -------------------------------
666dnl bgpd needs pow() and hence libm
667dnl -------------------------------
668TMPLIBS="$LIBS"
669AC_CHECK_HEADER([math.h],
670 [AC_CHECK_LIB([m], [pow],
671 [LIBM="-lm"
672 LIBS="$LIBS $LIBM"
673 AC_DEFINE(HAVE_LIBM,, Have libm)
674 AC_CHECK_FUNCS(pow,[],[LIBM=""])
675 ])
676])
677if test x"$LIBM" = x ; then
678 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
679fi
680LIBS="$TMPLIBS"
681AC_SUBST(LIBM)
682
683dnl ---------------
684dnl other functions
685dnl ---------------
686AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
Paul Jakmad46d2a22007-05-10 16:53:04 +0000687 inet_ntoa inet_aton strnlen \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000688 memchr memmove memset select socket \
689 strcasecmp strchr strcspn strdup strerror \
690 strncasecmp strndup strrchr strspn strstr \
691 strtol strtoul strlcat strlcpy \
692 daemon snprintf vsnprintf \
693 if_nametoindex if_indextoname getifaddrs \
694 uname fcntl])
695
paula159ed92003-06-04 11:01:45 +0000696AC_CHECK_FUNCS(setproctitle, ,
697 [AC_CHECK_LIB(util, setproctitle,
698 [LIBS="$LIBS -lutil"
699 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
700 ]
701 )
702 ]
703)
paul7ea487b2003-03-17 02:05:07 +0000704
705dnl ------------------------------------
706dnl Determine routing get and set method
707dnl ------------------------------------
708AC_MSG_CHECKING(zebra between kernel interface method)
709if test x"$opsys" = x"gnu-linux"; then
710 if test "${enable_netlink}" = "yes";then
711 AC_MSG_RESULT(netlink)
712 RT_METHOD=rt_netlink.o
713 AC_DEFINE(HAVE_NETLINK,,netlink)
714 netlink=yes
715 elif test "${enable_netlink}" = "no"; then
716 AC_MSG_RESULT(ioctl)
717 RT_METHOD=rt_ioctl.o
718 netlink=no
719 else
720 AC_MSG_RESULT(netlink)
721 RT_METHOD=rt_netlink.o
722 AC_DEFINE(HAVE_NETLINK,,netlink)
723 netlink=yes
724 fi
paul19877dd2004-05-11 10:49:35 +0000725elif test x"$opsys" = x"sol2-6";then
726 AC_MSG_RESULT(Route socket)
727 KERNEL_METHOD="kernel_socket.o"
728 RT_METHOD="rt_socket.o"
paulafd8a122005-03-12 06:36:10 +0000729elif test x"$opsys" = x"sol8";then
paul19877dd2004-05-11 10:49:35 +0000730 AC_MSG_RESULT(Route socket)
731 KERNEL_METHOD="kernel_socket.o"
732 RT_METHOD="rt_socket.o"
733elif test "$opsys" = "irix" ; then
734 AC_MSG_RESULT(Route socket)
735 KERNEL_METHOD="kernel_socket.o"
736 RT_METHOD="rt_socket.o"
paul7ea487b2003-03-17 02:05:07 +0000737else
paul19877dd2004-05-11 10:49:35 +0000738 AC_TRY_RUN([#include <errno.h>
paul7ea487b2003-03-17 02:05:07 +0000739#include <sys/types.h>
740#include <sys/socket.h>
741
742main ()
743{
744 int ac_sock;
745
746 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
747 if (ac_sock < 0 && errno == EINVAL)
748 exit (1);
749 exit (0);
750}],
751 [KERNEL_METHOD=kernel_socket.o
752 RT_METHOD=rt_socket.o
753 AC_MSG_RESULT(socket)],
754 [RT_METHOD=rt_ioctl.o
755 AC_MSG_RESULT(ioctl)],
756 [KERNEL_METHOD=kernel_socket.o
757 RT_METHOD=rt_socket.o
758 AC_MSG_RESULT(socket)])
paul7ea487b2003-03-17 02:05:07 +0000759fi
760AC_SUBST(RT_METHOD)
761AC_SUBST(KERNEL_METHOD)
762AC_SUBST(OTHER_METHOD)
763
Paul Jakma238497f2007-08-07 18:49:18 +0000764dnl --------------------------
765dnl Determine IS-IS I/O method
766dnl --------------------------
767AC_CHECK_HEADER(net/bpf.h)
768AC_CHECK_HEADER(sys/dlpi.h)
769AC_MSG_CHECKING(zebra IS-IS I/O method)
770if test x"$opsys" = x"gnu-linux"; then
771 AC_MSG_RESULT(pfpacket)
772 ISIS_METHOD=isis_pfpacket.o
773elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
774 AC_MSG_RESULT(DLPI)
775 ISIS_METHOD="isis_dlpi.o"
776else
777 if test $ac_cv_header_net_bpf_h = no; then
778 if test $ac_cv_header_sys_dlpi_h = no; then
779 AC_MSG_RESULT(none)
780 AC_MSG_WARN([*** IS-IS support will not be built ***])
781 ISISD=""
782 else
783 AC_MSG_RESULT(DLPI)
784 fi
785 ISIS_METHOD="isis_dlpi.o"
786 else
787 AC_MSG_RESULT(BPF)
788 ISIS_METHOD="isis_bpf.o"
789 fi
790fi
791AC_SUBST(ISIS_METHOD)
792
ajsb99760a2005-01-04 16:24:43 +0000793dnl ------------------------------------
794dnl check for broken CMSG_FIRSTHDR macro
795dnl ------------------------------------
gdt6c200462005-01-04 17:02:48 +0000796AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
hasso5b087522005-04-03 23:46:37 +0000797AC_RUN_IFELSE([AC_LANG_SOURCE([[
ajsb99760a2005-01-04 16:24:43 +0000798#ifdef SUNOS_5
799#define _XPG4_2
800#define __EXTENSIONS__
801#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000802#ifdef HAVE_STDLIB_H
803# include <stdlib.h>
804#endif
805#ifdef HAVE_SYS_TYPES_H
ajsb99760a2005-01-04 16:24:43 +0000806#include <sys/types.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000807#endif
808#ifdef HAVE_SYS_SOCKET_H
ajsb99760a2005-01-04 16:24:43 +0000809#include <sys/socket.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000810#endif
ajsb99760a2005-01-04 16:24:43 +0000811
812main()
813{
814 struct msghdr msg;
815 char buf[4];
816
817 msg.msg_control = buf;
818 msg.msg_controllen = 0;
819
820 if (CMSG_FIRSTHDR(&msg) != NULL)
821 exit(0);
822 exit (1);
hasso5b087522005-04-03 23:46:37 +0000823}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
hassod33e8d72005-04-03 13:07:21 +0000824[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
ajsb99760a2005-01-04 16:24:43 +0000825
paul7ea487b2003-03-17 02:05:07 +0000826dnl ------------------------------
827dnl check kernel route read method
828dnl ------------------------------
829AC_CACHE_CHECK(route read method check, zebra_rtread,
830[if test "$netlink" = yes; then
831 RTREAD_METHOD="rtread_netlink.o"
832 zebra_rtread="netlink"
833else
834for zebra_rtread in /proc/net/route /dev/ip /dev/null;
835do
836 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
837done
838case $zebra_rtread in
839 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
840 zebra_rtread="proc";;
paul9c30ab62003-07-08 08:36:17 +0000841 "/dev/ip")
842 case "$host" in
843 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
844 zebra_rtread="sysctl";;
845 *) RTREAD_METHOD="rtread_getmsg.o"
846 zebra_rtread="getmsg";;
847 esac;;
paul7ea487b2003-03-17 02:05:07 +0000848 *) RTREAD_METHOD="rtread_sysctl.o"
849 zebra_rtread="sysctl";;
850esac
851fi])
852AC_SUBST(RTREAD_METHOD)
853
854dnl -----------------------------
855dnl check interface lookup method
856dnl -----------------------------
paul19877dd2004-05-11 10:49:35 +0000857IOCTL_METHOD=ioctl.o
paul7ea487b2003-03-17 02:05:07 +0000858AC_MSG_CHECKING(interface looking up method)
859if test "$netlink" = yes; then
860 AC_MSG_RESULT(netlink)
861 IF_METHOD=if_netlink.o
paul19877dd2004-05-11 10:49:35 +0000862elif test "$opsys" = "sol2-6";then
863 AC_MSG_RESULT(Solaris GIF)
864 IF_METHOD=if_ioctl.o
paulafd8a122005-03-12 06:36:10 +0000865elif test "$opsys" = "sol8";then
paul19877dd2004-05-11 10:49:35 +0000866 AC_MSG_RESULT(Solaris GLIF)
867 IF_METHOD=if_ioctl_solaris.o
868 IOCTL_METHOD=ioctl_solaris.o
869elif test "$opsys" = "irix" ; then
870 AC_MSG_RESULT(IRIX)
871 IF_METHOD=if_ioctl.o
872elif test "$opsys" = "openbsd";then
873 AC_MSG_RESULT(openbsd)
874 IF_METHOD=if_ioctl.o
875elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
876 AC_MSG_RESULT(sysctl)
paul7ea487b2003-03-17 02:05:07 +0000877 IF_METHOD=if_sysctl.o
878 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
paul19877dd2004-05-11 10:49:35 +0000879else
paul7ea487b2003-03-17 02:05:07 +0000880 AC_MSG_RESULT(ioctl)
881 IF_METHOD=if_ioctl.o
paul7ea487b2003-03-17 02:05:07 +0000882fi
883AC_SUBST(IF_METHOD)
paul19877dd2004-05-11 10:49:35 +0000884AC_SUBST(IOCTL_METHOD)
paul7ea487b2003-03-17 02:05:07 +0000885
paul42c98192005-05-07 02:22:51 +0000886dnl ---------------------------------------------------------------
887dnl figure out how to specify an interface in multicast sockets API
888dnl ---------------------------------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000889AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
paul42c98192005-05-07 02:22:51 +0000890
891AC_MSG_CHECKING([for BSD struct ip_mreq hack])
892AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
893#include <sys/param.h>
Denis Ovsienkoc5408352009-04-13 20:11:44 +0400894#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 +0000895 return (0);
896#else
897 #error No support for BSD struct ip_mreq hack detected
898#endif],[AC_MSG_RESULT(yes)
899AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
900AC_MSG_RESULT(no))
901
Andrew J. Schorrc543a172008-01-10 15:24:32 +0000902dnl ---------------------------------------------------------------
903dnl figure out how to check link-state
904dnl ---------------------------------------------------------------
Andrew J. Schorr6418bed2008-01-11 16:33:59 +0000905AC_CHECK_HEADER([net/if.h],
906 [AC_CHECK_HEADER( [net/if_media.h],
907 [m4_define([LINK_DETECT_INCLUDES],
908 QUAGGA_INCLUDES
909 [#include <net/if_media.h>
910 ])
911 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
912 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
913 [], LINK_DETECT_INCLUDES)],
914 [],
915 QUAGGA_INCLUDES)],
916 [], QUAGGA_INCLUDES )
Andrew J. Schorrc543a172008-01-10 15:24:32 +0000917
Paul Jakma0df7c912008-07-21 21:02:49 +0000918dnl ------------------------
919dnl TCP_MD5SIG socket option
920dnl ------------------------
921
922AC_CHECK_HEADER([netinet/tcp.h],
923 [m4_define([MD5_INCLUDES],
924 QUAGGA_INCLUDES
925 [#include <netinet/tcp.h>
926 ])
927 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
928 [],
929 QUAGGA_INCLUDES)
930if test $ac_cv_have_decl_TCP_MD5SIG = no; then
931 AC_CHECK_HEADER([linux/tcp.h],
932 [m4_define([MD5_INCLUDES],
933 QUAGGA_INCLUDES
934 [#include <linux/tcp.h>
935 ])
936 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
937fi
938
paul7ea487b2003-03-17 02:05:07 +0000939dnl -----------------------
940dnl check proc file system.
941dnl -----------------------
Stephen Hemmingercadfb2c2008-08-16 18:03:44 +0100942if test "$netlink" != yes; then
943 if test -r /proc/net/dev; then
944 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
945 IF_PROC=if_proc.o
946 fi
947 if test -r /proc/net/if_inet6; then
948 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
949 IF_PROC=if_proc.o
950 fi
paul7ea487b2003-03-17 02:05:07 +0000951fi
952AC_SUBST(IF_PROC)
953
954dnl -----------------------------
955dnl check ipforward detect method
956dnl -----------------------------
957AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
958[for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
959do
960 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
961done
962case $zebra_ipforward_path in
963 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
964 zebra_ipforward_path="proc";;
965 "/dev/ip")
966 case "$host" in
967 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
968 zebra_ipforward_path="ews";;
paul9c30ab62003-07-08 08:36:17 +0000969 *-freebsd*) IPFORWARD=ipforward_sysctl.o
970 zebra_ipforward_path="sysctl";;
paul7ea487b2003-03-17 02:05:07 +0000971 *) IPFORWARD=ipforward_solaris.o
972 zebra_ipforward_path="solaris";;
973 esac;;
974 *) IPFORWARD=ipforward_sysctl.o
975 zebra_ipforward_path="sysctl";;
976esac])
977AC_SUBST(IPFORWARD)
978
979AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
980
981dnl ----------
982dnl IPv6 check
983dnl ----------
984AC_MSG_CHECKING(whether does this OS have IPv6 stack)
985if test "${enable_ipv6}" = "no"; then
986 AC_MSG_RESULT(disabled)
987else
988dnl ----------
989dnl INRIA IPv6
990dnl ----------
paula159ed92003-06-04 11:01:45 +0000991 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
992 zebra_cv_ipv6=yes
993 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
994 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
995 RIPNGD="ripngd"
996 OSPF6D="ospf6d"
997 LIB_IPV6=""
998 AC_MSG_RESULT(INRIA IPv6)
paul7ea487b2003-03-17 02:05:07 +0000999dnl ---------
1000dnl KAME IPv6
1001dnl ---------
paula159ed92003-06-04 11:01:45 +00001002 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1003 zebra_cv_ipv6=yes
1004 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1005 AC_DEFINE(KAME,1,KAME IPv6)
1006 RIPNGD="ripngd"
1007 OSPF6D="ospf6d"
1008 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
paul7ea487b2003-03-17 02:05:07 +00001009 LIB_IPV6="-L/usr/local/v6/lib -linet6"
paula159ed92003-06-04 11:01:45 +00001010 fi
1011 AC_MSG_RESULT(KAME)
hasso71c0fb52003-05-25 20:18:13 +00001012dnl -------------------------
1013dnl MUSICA IPv6
1014dnl default host check
1015dnl It is not used by Kheops
1016dnl -------------------------
paula159ed92003-06-04 11:01:45 +00001017 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1018 zebra_cv_ipv6=yes
1019 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1020 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1021 AC_DEFINE(KAME,1,KAME IPv6 stack)
1022 RIPNGD="ripngd"
1023 OSPF6D="ospf6d"
1024 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
hasso71c0fb52003-05-25 20:18:13 +00001025 LIB_IPV6="-L/usr/local/v6/lib -linet6"
paula159ed92003-06-04 11:01:45 +00001026 fi
1027 AC_MSG_RESULT(MUSICA)
paul7ea487b2003-03-17 02:05:07 +00001028dnl ---------
1029dnl NRL check
1030dnl ---------
paula159ed92003-06-04 11:01:45 +00001031 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1032 zebra_cv_ipv6=yes
1033 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1034 AC_DEFINE(NRL,1,NRL)
1035 RIPNGD="ripngd"
1036 OSPF6D="ospf6d"
1037 if test x"$opsys" = x"bsdi";then
paul7ea487b2003-03-17 02:05:07 +00001038 AC_DEFINE(BSDI_NRL,,BSDI)
1039 AC_MSG_RESULT(BSDI_NRL)
paula159ed92003-06-04 11:01:45 +00001040 else
paul7ea487b2003-03-17 02:05:07 +00001041 AC_MSG_RESULT(NRL)
paula159ed92003-06-04 11:01:45 +00001042 fi
paul19877dd2004-05-11 10:49:35 +00001043dnl ------------------------------------
1044dnl Solaris 9, 10 and potentially higher
1045dnl ------------------------------------
paulafd8a122005-03-12 06:36:10 +00001046 elif test x"$opsys" = x"sol8"; then
paul19877dd2004-05-11 10:49:35 +00001047 zebra_cv_ipv6=yes;
1048 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1049 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1050 RIPNGD="ripngd"
1051 OSPF6D="ospf6d"
1052 AC_MSG_RESULT(Solaris IPv6)
paul7ea487b2003-03-17 02:05:07 +00001053dnl ----------
1054dnl Linux IPv6
1055dnl ----------
paula159ed92003-06-04 11:01:45 +00001056 elif test "${enable_ipv6}" = "yes"; then
1057 AC_EGREP_CPP(yes, [
1058 #include <linux/version.h>
1059 /* 2.1.128 or later */
1060 #if LINUX_VERSION_CODE >= 0x020180
1061 yes
1062 #endif],
1063 [zebra_cv_ipv6=yes
1064 zebra_cv_linux_ipv6=yes
1065 AC_MSG_RESULT(Linux IPv6)])
1066 else
1067 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1068 then
paul7ea487b2003-03-17 02:05:07 +00001069 zebra_cv_ipv6=yes
1070 zebra_cv_linux_ipv6=yes
1071 AC_MSG_RESULT(Linux IPv6)
paula159ed92003-06-04 11:01:45 +00001072 fi
1073 fi
paul7ea487b2003-03-17 02:05:07 +00001074
paula159ed92003-06-04 11:01:45 +00001075 if test "$zebra_cv_linux_ipv6" = "yes";then
hasso850d39f2005-06-30 13:52:20 +00001076 AC_MSG_CHECKING(whether libc has IPv6 support)
1077 AC_TRY_LINK([#include <netinet/in.h>
1078 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1079 [AC_MSG_RESULT(yes)
1080 zebra_cv_ipv6=yes
1081 zebra_cv_linux_ipv6=yes],
1082 [AC_MSG_RESULT(no)
1083 zebra_cv_ipv6=no
1084 zebra_cv_linux_ipv6=no])
1085 fi
1086
1087 if test "$zebra_cv_linux_ipv6" = "yes";then
paula159ed92003-06-04 11:01:45 +00001088 AC_MSG_CHECKING(for GNU libc >= 2.1)
1089 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1090 AC_EGREP_CPP(yes, [
paul7ea487b2003-03-17 02:05:07 +00001091#include <features.h>
1092#if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1093 yes
paula159ed92003-06-04 11:01:45 +00001094#endif],
1095 [glibc=yes
1096 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1097 AC_MSG_RESULT(yes)],
1098 AC_MSG_RESULT(no)
1099 )
1100 RIPNGD="ripngd"
1101 OSPF6D="ospf6d"
1102 if test "$glibc" != "yes"; then
paul7ea487b2003-03-17 02:05:07 +00001103 INCLUDES="-I/usr/inet6/include"
1104 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1105 LIB_IPV6="-L/usr/inet6/lib -linet6"
1106 fi
paula159ed92003-06-04 11:01:45 +00001107 fi
1108 fi
paul7ea487b2003-03-17 02:05:07 +00001109
1110dnl -----------------------
1111dnl Set IPv6 related values
1112dnl -----------------------
paula159ed92003-06-04 11:01:45 +00001113 LIBS="$LIB_IPV6 $LIBS"
1114 AC_SUBST(LIB_IPV6)
paul7ea487b2003-03-17 02:05:07 +00001115
paula159ed92003-06-04 11:01:45 +00001116 if test x"$RIPNGD" = x""; then
1117 AC_MSG_RESULT(IPv4 only)
1118 fi
paul7ea487b2003-03-17 02:05:07 +00001119fi
1120
gdtfa3232e2003-12-03 17:52:30 +00001121dnl ------------------
1122dnl IPv6 header checks
1123dnl ------------------
1124if test "x${zebra_cv_ipv6}" = "xyes"; then
1125AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001126 netinet6/in6_var.h netinet6/nd6.h], [], [],
1127 QUAGGA_INCLUDES)
gdtfa3232e2003-12-03 17:52:30 +00001128fi
1129
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001130m4_define([QUAGGA_INCLUDES],dnl
1131QUAGGA_INCLUDES
1132[#if HAVE_NETINET6_IN6_H
1133#include <netinet6/in6.h>
1134#endif
1135#if HAVE_NETINET_IN6_VAR_H
1136#include <netinet/in6_var.h>
1137#endif
1138#if HAVE_NETINET_ICMP6_H
1139# include <netinet/icmp6.h>
1140#endif
1141#if HAVE_NETINET6_IN6_VAR_H
1142# include <netinet6/in6_var.h>
1143#endif
1144#if HAVE_NETINET6_ND6_H
Hasso Tepperfbf24542007-06-25 19:30:59 +00001145# include <netinet6/nd6.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001146#endif
1147])dnl
1148
paul7ea487b2003-03-17 02:05:07 +00001149dnl --------------------
1150dnl Daemon disable check
1151dnl --------------------
1152if test "${enable_zebra}" = "no";then
1153 ZEBRA=""
1154else
1155 ZEBRA="zebra"
1156fi
1157
1158if test "${enable_bgpd}" = "no";then
1159 BGPD=""
1160else
1161 BGPD="bgpd"
1162fi
1163
1164if test "${enable_ripd}" = "no";then
1165 RIPD=""
1166else
1167 RIPD="ripd"
1168fi
1169
1170if test "${enable_ospfd}" = "no";then
1171 OSPFD=""
1172else
1173 OSPFD="ospfd"
1174fi
1175
ajsd0199432004-12-22 14:03:52 +00001176if test "${enable_watchquagga}" = "no";then
1177 WATCHQUAGGA=""
1178else
1179 WATCHQUAGGA="watchquagga"
1180fi
1181
paul1ef74ef2003-03-21 15:16:05 +00001182OSPFCLIENT=""
1183if test "${enable_opaque_lsa}" = "yes"; then
1184 if test "${enable_ospfapi}" != "no";then
paul9a569842003-03-28 01:45:13 +00001185 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
paul1ef74ef2003-03-21 15:16:05 +00001186
1187 if test "${enable_ospfclient}" != "no";then
1188 OSPFCLIENT="ospfclient"
1189 fi
1190 fi
1191
paul7ea487b2003-03-17 02:05:07 +00001192fi
1193
1194case "${enable_ripngd}" in
1195 "yes") RIPNGD="ripngd";;
1196 "no" ) RIPNGD="";;
1197 * ) ;;
1198esac
1199
1200case "${enable_ospf6d}" in
1201 "yes") OSPF6D="ospf6d";;
1202 "no" ) OSPF6D="";;
1203 * ) ;;
1204esac
1205
jardin9e867fe2003-12-23 08:56:18 +00001206case "${enable_isisd}" in
1207 "yes") ISISD="isisd";;
1208 "no" ) ISISD="";;
hassoae399ab2004-09-13 20:22:18 +00001209 * ) ;;
jardin9e867fe2003-12-23 08:56:18 +00001210esac
1211
Greg Troxel97cee872007-08-02 13:36:56 +00001212# XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1213case "${enable_solaris}" in
1214 "yes") SOLARIS="solaris";;
1215 "no" ) SOLARIS="";;
1216 * ) ;;
1217esac
1218
paul7ea487b2003-03-17 02:05:07 +00001219if test "${enable_bgp_announce}" = "no";then
Paul Jakma750e8142008-07-22 21:11:48 +00001220 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1221else
1222 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
paul7ea487b2003-03-17 02:05:07 +00001223fi
1224
1225AC_SUBST(ZEBRA)
1226AC_SUBST(BGPD)
1227AC_SUBST(RIPD)
1228AC_SUBST(RIPNGD)
1229AC_SUBST(OSPFD)
1230AC_SUBST(OSPF6D)
ajsd0199432004-12-22 14:03:52 +00001231AC_SUBST(WATCHQUAGGA)
jardin9e867fe2003-12-23 08:56:18 +00001232AC_SUBST(ISISD)
Greg Troxel97cee872007-08-02 13:36:56 +00001233AC_SUBST(SOLARIS)
paul7ea487b2003-03-17 02:05:07 +00001234AC_SUBST(VTYSH)
1235AC_SUBST(INCLUDES)
1236AC_SUBST(CURSES)
1237AC_SUBST(OSPFCLIENT)
paul1ef74ef2003-03-21 15:16:05 +00001238AC_SUBST(OSPFAPI)
paul7ea487b2003-03-17 02:05:07 +00001239AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1240AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1241AC_CHECK_LIB(crypt, crypt)
1242AC_CHECK_LIB(resolv, res_init)
paul7ea487b2003-03-17 02:05:07 +00001243
1244dnl ---------------------------------------------------
1245dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1246dnl ---------------------------------------------------
paula159ed92003-06-04 11:01:45 +00001247AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1248AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1249AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
paul7ea487b2003-03-17 02:05:07 +00001250
1251dnl ---------------------------
1252dnl check system has GNU regexp
1253dnl ---------------------------
1254dnl AC_MSG_CHECKING(whether system has GNU regex)
1255AC_CHECK_LIB(c, regexec,
1256[AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1257 LIB_REGEX=""],
1258[LIB_REGEX="regex.o"])
1259AC_SUBST(LIB_REGEX)
1260
1261dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001262dnl check Net-SNMP library
paul7ea487b2003-03-17 02:05:07 +00001263dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001264if test "${enable_snmp}" = "yes"; then
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +02001265 if test "$with_crypto" != "no"; then
1266 LIBS="${LIBS} -lcrypto";
1267 fi
paulb1fc9ac2006-01-31 10:09:27 +00001268 AC_CHECK_LIB(netsnmp, asn_parse_int,
1269 [AC_DEFINE(HAVE_NETSNMP,,Net SNMP)
1270 AC_DEFINE(HAVE_SNMP,,SNMP)
1271 LIBS="${LIBS} -lnetsnmp"],
1272 [AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])])
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +02001273
1274 AC_CHECK_HEADER([net-snmp/net-snmp-config.h],
1275 [],
1276 [AC_MSG_ERROR([--enable-snmp given, but cannot find net-snmp-config.h])],
1277 QUAGGA_INCLUDES)
paulb1fc9ac2006-01-31 10:09:27 +00001278 AC_SUBST(SNMP_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001279fi
1280
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001281dnl ---------------------------
1282dnl sockaddr and netinet checks
1283dnl ---------------------------
1284AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1285 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1286 socklen_t,
1287 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1288 struct nd_opt_adv_interval, struct rt_addrinfo,
Paul Jakma11770e12007-06-22 16:14:42 +00001289 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001290 [], [], QUAGGA_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001291
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001292AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1293 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1294 struct sockaddr_in6.sin6_scope_id,
1295 struct if6_aliasreq.ifra_lifetime,
1296 struct nd_opt_adv_interval.nd_opt_ai_type],
1297 [], [], QUAGGA_INCLUDES)
hasso71c0fb52003-05-25 20:18:13 +00001298
paul7ea487b2003-03-17 02:05:07 +00001299dnl ---------------------------
Paul Jakma11770e12007-06-22 16:14:42 +00001300dnl IRDP/pktinfo/icmphdr checks
paul7ea487b2003-03-17 02:05:07 +00001301dnl ---------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001302AC_CHECK_TYPES([struct in_pktinfo],
Paul Jakma11770e12007-06-22 16:14:42 +00001303 [AC_CHECK_TYPES([struct icmphdr],
1304 [if test "${enable_irdp}" != "no"; then
1305 AC_DEFINE(HAVE_IRDP,, IRDP)
1306 fi],
1307 [if test "${enable_irdp}" = "yes"; then
1308 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1309 fi], [QUAGGA_INCLUDES])],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001310 [if test "${enable_irdp}" = "yes"; then
1311 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1312 fi], [QUAGGA_INCLUDES])
vincent29c4c9b2005-03-25 13:05:47 +00001313
paul7ea487b2003-03-17 02:05:07 +00001314dnl --------------------------------------
1315dnl checking for getrusage struct and call
1316dnl --------------------------------------
1317AC_MSG_CHECKING(whether getrusage is available)
1318AC_TRY_COMPILE([#include <sys/resource.h>
1319],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1320[AC_MSG_RESULT(yes)
1321 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1322 AC_MSG_RESULT(no))
1323
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001324dnl --------------------------------------
1325dnl checking for clock_time monotonic struct and call
1326dnl --------------------------------------
1327AC_CHECK_LIB(rt, clock_gettime,
1328[AC_DEFINE(HAVE_MONOTONIC_CLOCK,, Have monotonic clock)
1329 LIBS="$LIBS -lrt"]
1330)
1331
1332
1333
pauledd7c242003-06-04 13:59:38 +00001334dnl -------------------
1335dnl capabilities checks
1336dnl -------------------
hasso41d3fc92004-04-06 11:59:00 +00001337if test "${enable_capabilities}" != "no"; then
1338 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1339 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1340 [AC_MSG_RESULT(yes)
1341 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1342 quagga_ac_keepcaps="yes"],
1343 AC_MSG_RESULT(no)
pauledd7c242003-06-04 13:59:38 +00001344 )
hasso41d3fc92004-04-06 11:59:00 +00001345 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1346 AC_CHECK_HEADERS(sys/capability.h)
1347 fi
1348 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1349 AC_CHECK_LIB(cap, cap_init,
1350 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1351 LIBCAP="-lcap"
paulceacedb2005-09-29 14:39:32 +00001352 quagga_ac_lcaps="yes"]
hasso41d3fc92004-04-06 11:59:00 +00001353 )
paulceacedb2005-09-29 14:39:32 +00001354 else
1355 AC_CHECK_HEADERS(priv.h,
1356 [AC_MSG_CHECKING(Solaris style privileges are available)
1357 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1358 [AC_MSG_RESULT(yes)
1359 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1360 quagga_ac_scaps="yes"],
1361 AC_MSG_RESULT(no)
1362 )
1363 ]
1364 )
1365 fi
1366 if test x"${quagga_ac_scaps}" = x"yes" \
1367 -o x"${quagga_ac_lcaps}" = x"yes"; then
1368 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
hasso41d3fc92004-04-06 11:59:00 +00001369 fi
pauledd7c242003-06-04 13:59:38 +00001370fi
1371AC_SUBST(LIBCAP)
1372
paulfb2d1502003-06-04 09:40:54 +00001373dnl ---------------------------
1374dnl check for glibc 'backtrace'
1375dnl ---------------------------
1376if test "${glibc}" = "yes"; then
Paul Jakmafb66b292006-05-28 08:26:15 +00001377 AC_CHECK_HEADER([execinfo.h],
1378 [AC_CHECK_FUNC([backtrace],
1379 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1380 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1381 ])
1382 ])
paulfb2d1502003-06-04 09:40:54 +00001383fi
1384
Paul Jakma41be32b2006-03-30 13:53:59 +00001385dnl -----------------------------------------
1386dnl check for malloc mallinfo struct and call
1387dnl this must try and link using LIBS, in
1388dnl order to check no alternative allocator
1389dnl has been specified, which might not provide
1390dnl mallinfo, e.g. such as Umem on Solaris.
1391dnl -----------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001392AC_CHECK_HEADER([malloc.h],
Paul Jakma41be32b2006-03-30 13:53:59 +00001393 [AC_MSG_CHECKING(whether mallinfo is available)
1394 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1395 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1396 [AC_MSG_RESULT(yes)
1397 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1398 AC_MSG_RESULT(no)
1399 )
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001400 ], [], QUAGGA_INCLUDES)
Paul Jakma41be32b2006-03-30 13:53:59 +00001401
paul408ad942003-05-20 00:03:33 +00001402dnl ----------
1403dnl configure date
1404dnl ----------
1405CONFDATE=`date '+%Y%m%d'`
1406AC_SUBST(CONFDATE)
1407
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001408dnl Conditionally enable PIE support for GNU toolchains.
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001409AC_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 +01001410if test "$enable_pie" != "no"; then
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001411 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1412 save_CFLAGS=$CFLAGS
1413 save_LDFLAGS=$LDFLAGS
1414 CFLAGS="$CFLAGS -fPIE"
1415 LDFLAGS="$LDFLAGS -pie"
1416 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1417 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1418 )
1419 CFLAGS=$save_CFLAGS
1420 LDFLAGS=$save_LDFLAGS
1421 ])
1422 if test "$ap_cv_cc_pie" = "yes"; then
1423 PICFLAGS="-fPIE"
1424 PILDFLAGS="-pie"
1425 fi
1426fi
1427
1428AC_SUBST(PICFLAGS)
1429AC_SUBST(PILDFLAGS)
1430
paul7ea487b2003-03-17 02:05:07 +00001431dnl ------------------------------
paula159ed92003-06-04 11:01:45 +00001432dnl set paths for state directory
paul23bd12c2003-04-07 06:11:09 +00001433dnl ------------------------------
1434if test "${prefix}" = "NONE"; then
paule8f29842003-08-12 13:08:31 +00001435 quagga_statedir_prefix="";
paul23bd12c2003-04-07 06:11:09 +00001436else
paule8f29842003-08-12 13:08:31 +00001437 quagga_statedir_prefix=${prefix}
paul23bd12c2003-04-07 06:11:09 +00001438fi
1439if test "${localstatedir}" = '${prefix}/var'; then
paula159ed92003-06-04 11:01:45 +00001440 AC_CACHE_CHECK(state directory,ac_statedir,
paule8f29842003-08-12 13:08:31 +00001441 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1442 ${quagga_statedir_prefix}/var/adm dnl
1443 ${quagga_statedir_prefix}/etc dnl
paula159ed92003-06-04 11:01:45 +00001444 /var/run dnl
1445 /var/adm dnl
1446 /etc dnl
1447 /dev/null;
paul23bd12c2003-04-07 06:11:09 +00001448 do
paule8f29842003-08-12 13:08:31 +00001449 test -d $QUAGGA_STATE_DIR && break
paul23bd12c2003-04-07 06:11:09 +00001450 done
paule8f29842003-08-12 13:08:31 +00001451 quagga_statedir=$QUAGGA_STATE_DIR])
paul23bd12c2003-04-07 06:11:09 +00001452else
paule8f29842003-08-12 13:08:31 +00001453 quagga_statedir=${localstatedir}
paula159ed92003-06-04 11:01:45 +00001454 AC_MSG_CHECKING(directory to use for state file)
paule8f29842003-08-12 13:08:31 +00001455 AC_MSG_RESULT(${quagga_statedir})
paul26275b02005-04-11 07:10:47 +00001456 AC_SUBST(quagga_statedir)
paul23bd12c2003-04-07 06:11:09 +00001457fi
paule8f29842003-08-12 13:08:31 +00001458if test $quagga_statedir = "/dev/null"; then
paula159ed92003-06-04 11:01:45 +00001459 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1460fi
1461
paule8f29842003-08-12 13:08:31 +00001462AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1463AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1464AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1465AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1466AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1467AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
jardin9e867fe2003-12-23 08:56:18 +00001468AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
ajsd0199432004-12-22 14:03:52 +00001469AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
paule8f29842003-08-12 13:08:31 +00001470AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1471AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1472AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1473AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1474AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1475AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1476AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
jardin9e867fe2003-12-23 08:56:18 +00001477AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
ajs515210b2004-12-22 15:35:12 +00001478AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
paul7ea487b2003-03-17 02:05:07 +00001479
paul1eb8ef22005-04-07 07:30:20 +00001480dnl -------------------------------
1481dnl Quagga sources should always be
1482dnl current wrt interfaces. Dont
1483dnl allow deprecated interfaces to
1484dnl be exposed.
1485dnl -------------------------------
1486AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1487
paul7ea487b2003-03-17 02:05:07 +00001488dnl ---------------------------
1489dnl Check htonl works correctly
1490dnl ---------------------------
1491AC_MSG_CHECKING(for working htonl)
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001492AC_CACHE_VAL(ac_cv_htonl_works,
1493 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1494 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1495 ]
1496)
paul7ea487b2003-03-17 02:05:07 +00001497AC_MSG_RESULT($ac_cv_htonl_works)
1498
paul14c17fd2004-11-07 22:34:23 +00001499AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
ajsd0199432004-12-22 14:03:52 +00001500 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
jardin9e867fe2003-12-23 08:56:18 +00001501 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
paul14c17fd2004-11-07 22:34:23 +00001502 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
gdt69f1fc22004-08-27 15:57:35 +00001503 pkgsrc/Makefile
paul670bbf12004-11-12 09:05:00 +00001504 redhat/quagga.spec
gdtb7a97f82004-07-23 16:23:56 +00001505 lib/version.h
paul14c17fd2004-11-07 22:34:23 +00001506 doc/defines.texi
hassof695b012005-04-02 19:03:39 +00001507 isisd/topology/Makefile
gdtcbd04082004-08-31 18:16:36 +00001508 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
paulf31293a2004-11-12 09:27:04 +00001509 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
paul26275b02005-04-11 07:10:47 +00001510AC_CONFIG_FILES([solaris/Makefile])
1511
paul670bbf12004-11-12 09:05:00 +00001512AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
hasso48577192004-11-19 06:41:49 +00001513## Hack, but working solution to avoid rebuilding of quagga.info.
1514## It's already in CVS until texinfo 4.7 is more common.
paul14c17fd2004-11-07 22:34:23 +00001515AC_OUTPUT
paul7ea487b2003-03-17 02:05:07 +00001516
1517echo "
hassoc89f6492004-08-26 12:21:28 +00001518Quagga configuration
1519--------------------
1520quagga version : ${PACKAGE_VERSION}
paul7ea487b2003-03-17 02:05:07 +00001521host operationg system : ${host_os}
1522source code location : ${srcdir}
1523compiler : ${CC}
1524compiler flags : ${CFLAGS}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001525make : ${MAKE-make}
hasso2d582282005-03-28 15:29:07 +00001526includes : ${INCLUDES} ${SNMP_INCLUDES}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001527linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
paule8f29842003-08-12 13:08:31 +00001528state file directory : ${quagga_statedir}
pauldc7a2bf2003-10-22 00:07:44 +00001529config file directory : `eval echo \`echo ${sysconfdir}\``
gdtd6b72f72003-12-03 17:24:27 +00001530example directory : `eval echo \`echo ${exampledir}\``
paul8d4aee52003-06-06 00:30:35 +00001531user to run as : ${enable_user}
1532group to run as : ${enable_group}
1533group for vty sockets : ${enable_vty_group}
gdtaa593d52003-12-22 20:15:53 +00001534config file mask : ${enable_configfile_mask}
1535log file mask : ${enable_logfile_mask}
pauldc7a2bf2003-10-22 00:07:44 +00001536
1537The above user and group must have read/write access to the state file
Paul Jakma105b8232006-05-28 08:02:41 +00001538directory and to the config files in the config file directory."
1539
1540if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1541Warning: The ${MAKE-make} programme detected, either in your path or
1542via the MAKE variable, is not GNU Make. GNU make may be installed as
1543gmake on some systems. and is required to complete a build of Quagga
1544" > /dev/stderr
1545fi