blob: 547b68666ec6e427ccdd820dea5e21cfe88ed3d6 [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 Jakmae1f3d392008-06-10 21:25:38 +000011AC_INIT(Quagga, 0.99.10, [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])
ajs3cade262004-12-29 17:50:22 +0000250AC_ARG_ENABLE(gcc-rdynamic,
251[ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
ajs924b9222005-04-16 17:11:24 +0000252AC_ARG_ENABLE(time-check,
253[ --disable-time-check disable slow thread warning messages])
paul6b6942f2004-10-22 04:55:05 +0000254
255if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
256 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
257 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
258 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
259 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
260fi
paul7ea487b2003-03-17 02:05:07 +0000261
ajs3cade262004-12-29 17:50:22 +0000262if test x"${enable_gcc_rdynamic}" = x"yes" ; then
263 LDFLAGS="${LDFLAGS} -rdynamic"
264fi
265
ajs924b9222005-04-16 17:11:24 +0000266if test x"${enable_time_check}" != x"no" ; then
267 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
268 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
269 else
270 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
271 fi
272fi
273
paul7ea487b2003-03-17 02:05:07 +0000274if test "${enable_broken_aliases}" = "yes"; then
275 if test "${enable_netlink}" = "yes"
276 then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000277 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
paul7ea487b2003-03-17 02:05:07 +0000278 fi
279 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
280 enable_netlink=no
281fi
282
283if test "${enable_tcp_zebra}" = "yes"; then
284 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
285fi
286
paul7ea487b2003-03-17 02:05:07 +0000287if test "${enable_opaque_lsa}" = "yes"; then
288 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
289fi
290
291if test "${enable_ospf_te}" = "yes"; then
292 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
293 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
294fi
295
gdtd2a0ccc2003-12-03 18:13:48 +0000296AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
297if test "${enable_rtadv}" != "no"; then
hasso71c0fb52003-05-25 20:18:13 +0000298 AC_MSG_RESULT(yes)
gdtd2a0ccc2003-12-03 18:13:48 +0000299 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
paul2487bea2003-05-25 23:51:31 +0000300else
301 AC_MSG_RESULT(no)
hasso71c0fb52003-05-25 20:18:13 +0000302fi
paul7ea487b2003-03-17 02:05:07 +0000303
hassoca776982004-06-12 14:33:05 +0000304if test "${enable_irdp}" = "yes"; then
305 AC_DEFINE(HAVE_IRDP,, IRDP )
306fi
307
hassof695b012005-04-02 19:03:39 +0000308if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
309 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
310 ISIS_TOPOLOGY_INCLUDES="-I./topology"
311 ISIS_TOPOLOGY_DIR="topology"
312 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
313fi
314
315AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
316AC_SUBST(ISIS_TOPOLOGY_DIR)
317AC_SUBST(ISIS_TOPOLOGY_LIB)
318
paul79cb2162003-06-06 12:19:53 +0000319if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
paule8f29842003-08-12 13:08:31 +0000320 enable_user="quagga"
pauledd7c242003-06-04 13:59:38 +0000321elif test "${enable_user}" = "no"; then
322 enable_user="root"
323fi
pauledd7c242003-06-04 13:59:38 +0000324
paul79cb2162003-06-06 12:19:53 +0000325if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
paule8f29842003-08-12 13:08:31 +0000326 enable_group="quagga"
pauledd7c242003-06-04 13:59:38 +0000327elif test "${enable_group}" = "no"; then
328 enable_group="root"
329fi
pauledd7c242003-06-04 13:59:38 +0000330
331if test x"${enable_vty_group}" = x"yes" ; then
paul8d4aee52003-06-06 00:30:35 +0000332 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
paul79cb2162003-06-06 12:19:53 +0000333elif test x"${enable_vty_group}" != x""; then
paul8d4aee52003-06-06 00:30:35 +0000334 if test x"${enable_vty_group}" != x"no"; then
pauledd7c242003-06-04 13:59:38 +0000335 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
336 fi
337fi
paul26275b02005-04-11 07:10:47 +0000338AC_SUBST([enable_user])
339AC_SUBST([enable_group])
340AC_SUBST([enable_vty_group])
341AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
342AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
pauledd7c242003-06-04 13:59:38 +0000343
gdtaa593d52003-12-22 20:15:53 +0000344enable_configfile_mask=${enable_configfile_mask:-0600}
345AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
346
347enable_logfile_mask=${enable_logfile_mask:-0600}
348AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
349
paul7ea487b2003-03-17 02:05:07 +0000350MULTIPATH_NUM=1
351
352case "${enable_multipath}" in
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000353 [[0-9]|[1-9][0-9]])
paul7ea487b2003-03-17 02:05:07 +0000354 MULTIPATH_NUM="${enable_multipath}"
355 ;;
356 "")
357 ;;
358 *)
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000359 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
paul7ea487b2003-03-17 02:05:07 +0000360 ;;
361esac
362
paul7ea487b2003-03-17 02:05:07 +0000363AC_SUBST(MULTIPATH_NUM)
364
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000365dnl ------------------------------------
366dnl Check C keywords and standard types
367dnl ------------------------------------
368AC_C_CONST
369AC_C_INLINE
370AC_C_RESTRICT
371AC_C_VOLATILE
pauldc7a2bf2003-10-22 00:07:44 +0000372AC_HEADER_STDC
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000373AC_HEADER_TIME
374AC_HEADER_SYS_WAIT
375dnl AC_TYPE_PID_T
376AC_TYPE_UID_T
377AC_TYPE_MODE_T
378AC_TYPE_SIZE_T
379AC_TYPE_SIGNAL
380AC_STRUCT_TM
pauldc7a2bf2003-10-22 00:07:44 +0000381
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000382dnl -------------------------
383dnl Check other header files.
384dnl -------------------------
385AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
386 sys/types.h linux/version.h netdb.h asm/types.h \
387 sys/param.h limits.h signal.h libutil.h \
388 sys/socket.h netinet/in.h])
389
390dnl Utility macro to avoid retyping includes all the time
391m4_define([QUAGGA_INCLUDES],
392[#ifdef SUNOS_5
393#define _XPG4_2
394#define __EXTENSIONS__
395#endif
396#include <stdio.h>
397#if STDC_HEADERS
398# include <stdlib.h>
399# include <stddef.h>
400#else
401# if HAVE_STDLIB_H
402# include <stdlib.h>
403# endif
404#endif
405#if HAVE_SYS_TYPES_H
406# include <sys/types.h>
407#endif
408/* sys/conf.h depends on param.h on FBSD at least */
409#if HAVE_SYS_PARAM_H
410# include <sys/param.h>
411#endif
412/* Required for MAXSIG */
413#if HAVE_SIGNAL_H
414# include <signal.h>
415#endif
416#if HAVE_SYS_SOCKET_H
417# include <sys/socket.h>
418#endif
419#if HAVE_NETINET_IN_H
420# include <netinet/in.h>
421#endif
422])dnl
423
424AC_CHECK_HEADERS([sys/un.h net/if.h netinet/in_systm.h netinet/in_var.h \
425 net/if_dl.h net/if_var.h net/netopt.h net/route.h \
Paul Jakma11770e12007-06-22 16:14:42 +0000426 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000427 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
428 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
429 [], [], QUAGGA_INCLUDES)
430
431AC_CHECK_HEADERS([ucontext.h], [], [],
432[#ifndef __USE_GNU
433#define __USE_GNU
434#endif /* __USE_GNU */
435QUAGGA_INCLUDES
436])
437
438m4_define([QUAGGA_INCLUDES],
439QUAGGA_INCLUDES
440[#if HAVE_NET_IF_H
441# include <net/if.h>
442#endif
443#if HAVE_SYS_UN_H
444# include <sys/un.h>
445#endif
446#if HAVE_NETINET_IN_SYSTM_H
447# include <netinet/in_systm.h>
448#endif
449#if HAVE_NETINET_IN_VAR_H
450# include <netinet/in_var.h>
451#endif
452#if HAVE_NET_IF_DL_H
453# include <net/if_dl.h>
454#endif
455#if HAVE_NET_IF_VAR_H
456# include <net/if_var.h>
457#endif
458#if HAVE_NET_NETOPT_H
459# include <net/netopt.h>
460#endif
461#if HAVE_NET_ROUTE_H
462# include <net/route.h>
463#endif
464#if HAVE_INET_ND_H
465# include <inet/nd.h>
466#endif
467#if HAVE_ARPA_INET_H
468# include <arpa/inet.h>
469#endif
Paul Jakma11770e12007-06-22 16:14:42 +0000470/* Required for IDRP */
471#if HAVE_NETINET_IP_ICMP_H
472# include <netinet/ip_icmp.h>
473#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000474])dnl
pauldc7a2bf2003-10-22 00:07:44 +0000475
gdtfa3232e2003-12-03 17:52:30 +0000476dnl V6 headers are checked below, after we check for v6
paul7ea487b2003-03-17 02:05:07 +0000477
paul7ea487b2003-03-17 02:05:07 +0000478dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
479case "$host" in
paulafd8a122005-03-12 06:36:10 +0000480 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
paul7ea487b2003-03-17 02:05:07 +0000481 opsys=sol2-6
paulafd8a122005-03-12 06:36:10 +0000482 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
paul19877dd2004-05-11 10:49:35 +0000483 AC_DEFINE(SUNOS_5, 1, SunOS 5)
paul7ea487b2003-03-17 02:05:07 +0000484 AC_CHECK_LIB(xnet, main)
485 CURSES=-lcurses
486 ;;
paul1b73de82005-04-10 16:31:51 +0000487 [*-sunos5.[8-9]] \
488 | [*-sunos5.1[0-9]] \
489 | [*-sunos5.1[0-9].[0-9]] \
490 | [*-solaris2.[8-9]] \
491 | [*-solaris2.1[0-9]] \
492 | [*-solaris2.1[0-9].[0-9]])
paulafd8a122005-03-12 06:36:10 +0000493 opsys=sol8
Paul Jakmafb66b292006-05-28 08:26:15 +0000494 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
495 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
paul19877dd2004-05-11 10:49:35 +0000496 AC_CHECK_LIB(socket, main)
497 AC_CHECK_LIB(nsl, main)
paul1b73de82005-04-10 16:31:51 +0000498 AC_CHECK_LIB(umem, main)
Paul Jakmafb66b292006-05-28 08:26:15 +0000499 AC_CHECK_FUNCS([printstack],
500 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
501 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
502 ])
paul19877dd2004-05-11 10:49:35 +0000503 CURSES=-lcurses
504 ;;
paul7ea487b2003-03-17 02:05:07 +0000505 *-sunos5* | *-solaris2*)
paul19877dd2004-05-11 10:49:35 +0000506 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
paul7ea487b2003-03-17 02:05:07 +0000507 AC_CHECK_LIB(socket, main)
508 AC_CHECK_LIB(nsl, main)
509 CURSES=-lcurses
510 ;;
hassoc45eb832005-02-19 13:58:06 +0000511 *-linux*)
paul7ea487b2003-03-17 02:05:07 +0000512 opsys=gnu-linux
513 AC_DEFINE(GNU_LINUX,,GNU Linux)
514 ;;
515 *-nec-sysv4*)
516 AC_CHECK_LIB(nsl, gethostbyname)
517 AC_CHECK_LIB(socket, socket)
518 ;;
paul7ea487b2003-03-17 02:05:07 +0000519 *-openbsd*)
520 opsys=openbsd
521 AC_DEFINE(OPEN_BSD,,OpenBSD)
522 ;;
523 *-bsdi*)
524 opsys=bsdi
525 OTHER_METHOD="mtu_kvm.o"
526 AC_CHECK_LIB(kvm, main)
527 ;;
paul49e3b3c2003-10-23 20:39:50 +0000528 *-irix6.5)
pauldc7a2bf2003-10-22 00:07:44 +0000529 opsys=irix
530 AC_DEFINE(IRIX_65,,IRIX 6.5)
531 ;;
paul7ea487b2003-03-17 02:05:07 +0000532esac
533
534dnl ---------------------
535dnl Integrated VTY option
536dnl ---------------------
537case "${enable_vtysh}" in
538 "yes") VTYSH="vtysh";
539 AC_DEFINE(VTYSH,,VTY shell)
gdtfc9d0742004-06-30 14:25:12 +0000540 AC_PATH_PROG(PERL, perl)
541dnl Vtysh uses libreadline, which looks for termcap functions at
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000542dnl configure time. We follow readlines search order.
gdtfc9d0742004-06-30 14:25:12 +0000543dnl The required procedures are in libtermcap on NetBSD, in
544dnl [TODO] on Linux, and in [TODO] on Solaris.
hassoc0689392005-08-25 12:00:58 +0000545 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
paula9694592005-08-25 14:50:05 +0000546 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
547 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
548 [AC_CHECK_LIB(ncurses, tputs,
549 LIBREADLINE="$LIBREADLINE -lncurses")]
550 )]
551 )]
552 )
553 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
554 "$LIBREADLINE")
paul7ea487b2003-03-17 02:05:07 +0000555 if test $ac_cv_lib_readline_main = no; then
gdtfc9d0742004-06-30 14:25:12 +0000556 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
paul7ea487b2003-03-17 02:05:07 +0000557 fi
558 AC_CHECK_HEADER(readline/history.h)
559 if test $ac_cv_header_readline_history_h = no;then
560 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
561 fi
paula9694592005-08-25 14:50:05 +0000562 AC_CHECK_LIB(readline, rl_completion_matches,
563 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
paul3d3de8c2003-05-23 10:33:49 +0000564 if test $ac_cv_lib_readline_rl_completion_matches = no; then
565 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
566 fi
567 ;;
paul7ea487b2003-03-17 02:05:07 +0000568 "no" ) VTYSH="";;
569 * ) ;;
570esac
hassoc0689392005-08-25 12:00:58 +0000571AC_SUBST(LIBREADLINE)
paul7ea487b2003-03-17 02:05:07 +0000572
573dnl ----------
574dnl PAM module
575dnl ----------
576if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000577 AC_CHECK_HEADER([security/pam_misc.h],
578 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
579 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
580 pam_conv_func="misc_conv"
581 ],
582 [], QUAGGA_INCLUDES)
583 AC_CHECK_HEADER([security/openpam.h],
584 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
585 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
586 pam_conv_func="openpam_ttyconv"
587 ],
588 [], QUAGGA_INCLUDES)
paul24cd4352003-05-06 12:16:27 +0000589 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
590 AC_MSG_WARN([*** pam support will not be built ***])
591 with_libpam="no"
592 fi
593fi
594
595if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000596dnl took this test from proftpds configure.in and suited to our needs
paul7ea487b2003-03-17 02:05:07 +0000597dnl -------------------------------------------------------------------------
598dnl
599dnl This next check looks funky due to a linker problem with some versions
600dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
601dnl omitted requiring libdl linking information. PAM-0.72 or better ships
602dnl with RedHat 6.2 and Debian 2.2 or better.
603AC_CHECK_LIB(pam, pam_start,
paul24cd4352003-05-06 12:16:27 +0000604 [AC_CHECK_LIB(pam, $pam_conv_func,
paul7ea487b2003-03-17 02:05:07 +0000605 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
606 LIBPAM="-lpam"],
607 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
608 LIBPAM="-lpam -lpam_misc"]
609 )
610 ],
611
612 [AC_CHECK_LIB(pam, pam_end,
paul24cd4352003-05-06 12:16:27 +0000613 [AC_CHECK_LIB(pam, $pam_conv_func,
paula159ed92003-06-04 11:01:45 +0000614 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000615 LIBPAM="-lpam -ldl"],
paula159ed92003-06-04 11:01:45 +0000616 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000617 LIBPAM="-lpam -ldl -lpam_misc"]
618 )
619 ],AC_MSG_WARN([*** pam support will not be built ***]),
620 [-ldl])
621 ]
622)
623fi
624AC_SUBST(LIBPAM)
625
626dnl -------------------------------
627dnl Endian-ness check
628dnl -------------------------------
629AC_WORDS_BIGENDIAN
630
631dnl -------------------------------
632dnl check the size in byte of the C
633dnl -------------------------------
634dnl AC_CHECK_SIZEOF(char)
635dnl AC_CHECK_SIZEOF(int)
636dnl AC_CHECK_SIZEOF(short)
637dnl AC_CHECK_SIZEOF(long)
638
639dnl ----------------------------
640dnl check existance of functions
641dnl ----------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000642AC_FUNC_CHOWN
643AC_FUNC_FNMATCH
644AC_FUNC_FORK
645AC_FUNC_MALLOC
646AC_FUNC_MEMCMP
647AC_FUNC_MKTIME
648AC_FUNC_STRFTIME
649AC_FUNC_REALLOC
650AC_FUNC_STAT
651AC_FUNC_SELECT_ARGTYPES
652AC_FUNC_STRFTIME
Paul Jakmad46d2a22007-05-10 16:53:04 +0000653dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
654dnl can lead to strange side effects. So we just check for strnlen
655dnl directly, see below.
Paul Jakma2b5cb412007-05-10 17:05:16 +0000656dnl AC_FUNC_STRNLENdnl
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000657AC_FUNC_VPRINTF
658
659dnl -------------------------------
660dnl bgpd needs pow() and hence libm
661dnl -------------------------------
662TMPLIBS="$LIBS"
663AC_CHECK_HEADER([math.h],
664 [AC_CHECK_LIB([m], [pow],
665 [LIBM="-lm"
666 LIBS="$LIBS $LIBM"
667 AC_DEFINE(HAVE_LIBM,, Have libm)
668 AC_CHECK_FUNCS(pow,[],[LIBM=""])
669 ])
670])
671if test x"$LIBM" = x ; then
672 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
673fi
674LIBS="$TMPLIBS"
675AC_SUBST(LIBM)
676
677dnl ---------------
678dnl other functions
679dnl ---------------
680AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
Paul Jakmad46d2a22007-05-10 16:53:04 +0000681 inet_ntoa inet_aton strnlen \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000682 memchr memmove memset select socket \
683 strcasecmp strchr strcspn strdup strerror \
684 strncasecmp strndup strrchr strspn strstr \
685 strtol strtoul strlcat strlcpy \
686 daemon snprintf vsnprintf \
687 if_nametoindex if_indextoname getifaddrs \
688 uname fcntl])
689
paula159ed92003-06-04 11:01:45 +0000690AC_CHECK_FUNCS(setproctitle, ,
691 [AC_CHECK_LIB(util, setproctitle,
692 [LIBS="$LIBS -lutil"
693 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
694 ]
695 )
696 ]
697)
paul7ea487b2003-03-17 02:05:07 +0000698
699dnl ------------------------------------
700dnl Determine routing get and set method
701dnl ------------------------------------
702AC_MSG_CHECKING(zebra between kernel interface method)
703if test x"$opsys" = x"gnu-linux"; then
704 if test "${enable_netlink}" = "yes";then
705 AC_MSG_RESULT(netlink)
706 RT_METHOD=rt_netlink.o
707 AC_DEFINE(HAVE_NETLINK,,netlink)
708 netlink=yes
709 elif test "${enable_netlink}" = "no"; then
710 AC_MSG_RESULT(ioctl)
711 RT_METHOD=rt_ioctl.o
712 netlink=no
713 else
714 AC_MSG_RESULT(netlink)
715 RT_METHOD=rt_netlink.o
716 AC_DEFINE(HAVE_NETLINK,,netlink)
717 netlink=yes
718 fi
paul19877dd2004-05-11 10:49:35 +0000719elif test x"$opsys" = x"sol2-6";then
720 AC_MSG_RESULT(Route socket)
721 KERNEL_METHOD="kernel_socket.o"
722 RT_METHOD="rt_socket.o"
paulafd8a122005-03-12 06:36:10 +0000723elif test x"$opsys" = x"sol8";then
paul19877dd2004-05-11 10:49:35 +0000724 AC_MSG_RESULT(Route socket)
725 KERNEL_METHOD="kernel_socket.o"
726 RT_METHOD="rt_socket.o"
727elif test "$opsys" = "irix" ; then
728 AC_MSG_RESULT(Route socket)
729 KERNEL_METHOD="kernel_socket.o"
730 RT_METHOD="rt_socket.o"
paul7ea487b2003-03-17 02:05:07 +0000731else
paul19877dd2004-05-11 10:49:35 +0000732 AC_TRY_RUN([#include <errno.h>
paul7ea487b2003-03-17 02:05:07 +0000733#include <sys/types.h>
734#include <sys/socket.h>
735
736main ()
737{
738 int ac_sock;
739
740 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
741 if (ac_sock < 0 && errno == EINVAL)
742 exit (1);
743 exit (0);
744}],
745 [KERNEL_METHOD=kernel_socket.o
746 RT_METHOD=rt_socket.o
747 AC_MSG_RESULT(socket)],
748 [RT_METHOD=rt_ioctl.o
749 AC_MSG_RESULT(ioctl)],
750 [KERNEL_METHOD=kernel_socket.o
751 RT_METHOD=rt_socket.o
752 AC_MSG_RESULT(socket)])
paul7ea487b2003-03-17 02:05:07 +0000753fi
754AC_SUBST(RT_METHOD)
755AC_SUBST(KERNEL_METHOD)
756AC_SUBST(OTHER_METHOD)
757
Paul Jakma238497f2007-08-07 18:49:18 +0000758dnl --------------------------
759dnl Determine IS-IS I/O method
760dnl --------------------------
761AC_CHECK_HEADER(net/bpf.h)
762AC_CHECK_HEADER(sys/dlpi.h)
763AC_MSG_CHECKING(zebra IS-IS I/O method)
764if test x"$opsys" = x"gnu-linux"; then
765 AC_MSG_RESULT(pfpacket)
766 ISIS_METHOD=isis_pfpacket.o
767elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
768 AC_MSG_RESULT(DLPI)
769 ISIS_METHOD="isis_dlpi.o"
770else
771 if test $ac_cv_header_net_bpf_h = no; then
772 if test $ac_cv_header_sys_dlpi_h = no; then
773 AC_MSG_RESULT(none)
774 AC_MSG_WARN([*** IS-IS support will not be built ***])
775 ISISD=""
776 else
777 AC_MSG_RESULT(DLPI)
778 fi
779 ISIS_METHOD="isis_dlpi.o"
780 else
781 AC_MSG_RESULT(BPF)
782 ISIS_METHOD="isis_bpf.o"
783 fi
784fi
785AC_SUBST(ISIS_METHOD)
786
ajsb99760a2005-01-04 16:24:43 +0000787dnl ------------------------------------
788dnl check for broken CMSG_FIRSTHDR macro
789dnl ------------------------------------
gdt6c200462005-01-04 17:02:48 +0000790AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
hasso5b087522005-04-03 23:46:37 +0000791AC_RUN_IFELSE([AC_LANG_SOURCE([[
ajsb99760a2005-01-04 16:24:43 +0000792#ifdef SUNOS_5
793#define _XPG4_2
794#define __EXTENSIONS__
795#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000796#ifdef HAVE_STDLIB_H
797# include <stdlib.h>
798#endif
799#ifdef HAVE_SYS_TYPES_H
ajsb99760a2005-01-04 16:24:43 +0000800#include <sys/types.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000801#endif
802#ifdef HAVE_SYS_SOCKET_H
ajsb99760a2005-01-04 16:24:43 +0000803#include <sys/socket.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000804#endif
ajsb99760a2005-01-04 16:24:43 +0000805
806main()
807{
808 struct msghdr msg;
809 char buf[4];
810
811 msg.msg_control = buf;
812 msg.msg_controllen = 0;
813
814 if (CMSG_FIRSTHDR(&msg) != NULL)
815 exit(0);
816 exit (1);
hasso5b087522005-04-03 23:46:37 +0000817}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
hassod33e8d72005-04-03 13:07:21 +0000818[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
ajsb99760a2005-01-04 16:24:43 +0000819
paul7ea487b2003-03-17 02:05:07 +0000820dnl ------------------------------
821dnl check kernel route read method
822dnl ------------------------------
823AC_CACHE_CHECK(route read method check, zebra_rtread,
824[if test "$netlink" = yes; then
825 RTREAD_METHOD="rtread_netlink.o"
826 zebra_rtread="netlink"
827else
828for zebra_rtread in /proc/net/route /dev/ip /dev/null;
829do
830 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
831done
832case $zebra_rtread in
833 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
834 zebra_rtread="proc";;
paul9c30ab62003-07-08 08:36:17 +0000835 "/dev/ip")
836 case "$host" in
837 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
838 zebra_rtread="sysctl";;
839 *) RTREAD_METHOD="rtread_getmsg.o"
840 zebra_rtread="getmsg";;
841 esac;;
paul7ea487b2003-03-17 02:05:07 +0000842 *) RTREAD_METHOD="rtread_sysctl.o"
843 zebra_rtread="sysctl";;
844esac
845fi])
846AC_SUBST(RTREAD_METHOD)
847
848dnl -----------------------------
849dnl check interface lookup method
850dnl -----------------------------
paul19877dd2004-05-11 10:49:35 +0000851IOCTL_METHOD=ioctl.o
paul7ea487b2003-03-17 02:05:07 +0000852AC_MSG_CHECKING(interface looking up method)
853if test "$netlink" = yes; then
854 AC_MSG_RESULT(netlink)
855 IF_METHOD=if_netlink.o
paul19877dd2004-05-11 10:49:35 +0000856elif test "$opsys" = "sol2-6";then
857 AC_MSG_RESULT(Solaris GIF)
858 IF_METHOD=if_ioctl.o
paulafd8a122005-03-12 06:36:10 +0000859elif test "$opsys" = "sol8";then
paul19877dd2004-05-11 10:49:35 +0000860 AC_MSG_RESULT(Solaris GLIF)
861 IF_METHOD=if_ioctl_solaris.o
862 IOCTL_METHOD=ioctl_solaris.o
863elif test "$opsys" = "irix" ; then
864 AC_MSG_RESULT(IRIX)
865 IF_METHOD=if_ioctl.o
866elif test "$opsys" = "openbsd";then
867 AC_MSG_RESULT(openbsd)
868 IF_METHOD=if_ioctl.o
869elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
870 AC_MSG_RESULT(sysctl)
paul7ea487b2003-03-17 02:05:07 +0000871 IF_METHOD=if_sysctl.o
872 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
paul19877dd2004-05-11 10:49:35 +0000873else
paul7ea487b2003-03-17 02:05:07 +0000874 AC_MSG_RESULT(ioctl)
875 IF_METHOD=if_ioctl.o
paul7ea487b2003-03-17 02:05:07 +0000876fi
877AC_SUBST(IF_METHOD)
paul19877dd2004-05-11 10:49:35 +0000878AC_SUBST(IOCTL_METHOD)
paul7ea487b2003-03-17 02:05:07 +0000879
paul42c98192005-05-07 02:22:51 +0000880dnl ---------------------------------------------------------------
881dnl figure out how to specify an interface in multicast sockets API
882dnl ---------------------------------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000883AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
paul42c98192005-05-07 02:22:51 +0000884
885AC_MSG_CHECKING([for BSD struct ip_mreq hack])
886AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
887#include <sys/param.h>
888#endif],[#if (defined(__FreeBSD__) && (__FreeBSD_version >= 500022 || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000)
889 return (0);
890#else
891 #error No support for BSD struct ip_mreq hack detected
892#endif],[AC_MSG_RESULT(yes)
893AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
894AC_MSG_RESULT(no))
895
Andrew J. Schorrc543a172008-01-10 15:24:32 +0000896dnl ---------------------------------------------------------------
897dnl figure out how to check link-state
898dnl ---------------------------------------------------------------
Andrew J. Schorr6418bed2008-01-11 16:33:59 +0000899AC_CHECK_HEADER([net/if.h],
900 [AC_CHECK_HEADER( [net/if_media.h],
901 [m4_define([LINK_DETECT_INCLUDES],
902 QUAGGA_INCLUDES
903 [#include <net/if_media.h>
904 ])
905 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
906 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
907 [], LINK_DETECT_INCLUDES)],
908 [],
909 QUAGGA_INCLUDES)],
910 [], QUAGGA_INCLUDES )
Andrew J. Schorrc543a172008-01-10 15:24:32 +0000911
Paul Jakma0df7c912008-07-21 21:02:49 +0000912dnl ------------------------
913dnl TCP_MD5SIG socket option
914dnl ------------------------
915
916AC_CHECK_HEADER([netinet/tcp.h],
917 [m4_define([MD5_INCLUDES],
918 QUAGGA_INCLUDES
919 [#include <netinet/tcp.h>
920 ])
921 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
922 [],
923 QUAGGA_INCLUDES)
924if test $ac_cv_have_decl_TCP_MD5SIG = no; then
925 AC_CHECK_HEADER([linux/tcp.h],
926 [m4_define([MD5_INCLUDES],
927 QUAGGA_INCLUDES
928 [#include <linux/tcp.h>
929 ])
930 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
931fi
932
paul7ea487b2003-03-17 02:05:07 +0000933dnl -----------------------
934dnl check proc file system.
935dnl -----------------------
Stephen Hemmingercadfb2c2008-08-16 18:03:44 +0100936if test "$netlink" != yes; then
937 if test -r /proc/net/dev; then
938 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
939 IF_PROC=if_proc.o
940 fi
941 if test -r /proc/net/if_inet6; then
942 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
943 IF_PROC=if_proc.o
944 fi
paul7ea487b2003-03-17 02:05:07 +0000945fi
946AC_SUBST(IF_PROC)
947
948dnl -----------------------------
949dnl check ipforward detect method
950dnl -----------------------------
951AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
952[for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
953do
954 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
955done
956case $zebra_ipforward_path in
957 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
958 zebra_ipforward_path="proc";;
959 "/dev/ip")
960 case "$host" in
961 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
962 zebra_ipforward_path="ews";;
paul9c30ab62003-07-08 08:36:17 +0000963 *-freebsd*) IPFORWARD=ipforward_sysctl.o
964 zebra_ipforward_path="sysctl";;
paul7ea487b2003-03-17 02:05:07 +0000965 *) IPFORWARD=ipforward_solaris.o
966 zebra_ipforward_path="solaris";;
967 esac;;
968 *) IPFORWARD=ipforward_sysctl.o
969 zebra_ipforward_path="sysctl";;
970esac])
971AC_SUBST(IPFORWARD)
972
973AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
974
975dnl ----------
976dnl IPv6 check
977dnl ----------
978AC_MSG_CHECKING(whether does this OS have IPv6 stack)
979if test "${enable_ipv6}" = "no"; then
980 AC_MSG_RESULT(disabled)
981else
982dnl ----------
983dnl INRIA IPv6
984dnl ----------
paula159ed92003-06-04 11:01:45 +0000985 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
986 zebra_cv_ipv6=yes
987 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
988 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
989 RIPNGD="ripngd"
990 OSPF6D="ospf6d"
991 LIB_IPV6=""
992 AC_MSG_RESULT(INRIA IPv6)
paul7ea487b2003-03-17 02:05:07 +0000993dnl ---------
994dnl KAME IPv6
995dnl ---------
paula159ed92003-06-04 11:01:45 +0000996 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
997 zebra_cv_ipv6=yes
998 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
999 AC_DEFINE(KAME,1,KAME IPv6)
1000 RIPNGD="ripngd"
1001 OSPF6D="ospf6d"
1002 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
paul7ea487b2003-03-17 02:05:07 +00001003 LIB_IPV6="-L/usr/local/v6/lib -linet6"
paula159ed92003-06-04 11:01:45 +00001004 fi
1005 AC_MSG_RESULT(KAME)
hasso71c0fb52003-05-25 20:18:13 +00001006dnl -------------------------
1007dnl MUSICA IPv6
1008dnl default host check
1009dnl It is not used by Kheops
1010dnl -------------------------
paula159ed92003-06-04 11:01:45 +00001011 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1012 zebra_cv_ipv6=yes
1013 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1014 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1015 AC_DEFINE(KAME,1,KAME IPv6 stack)
1016 RIPNGD="ripngd"
1017 OSPF6D="ospf6d"
1018 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
hasso71c0fb52003-05-25 20:18:13 +00001019 LIB_IPV6="-L/usr/local/v6/lib -linet6"
paula159ed92003-06-04 11:01:45 +00001020 fi
1021 AC_MSG_RESULT(MUSICA)
paul7ea487b2003-03-17 02:05:07 +00001022dnl ---------
1023dnl NRL check
1024dnl ---------
paula159ed92003-06-04 11:01:45 +00001025 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1026 zebra_cv_ipv6=yes
1027 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1028 AC_DEFINE(NRL,1,NRL)
1029 RIPNGD="ripngd"
1030 OSPF6D="ospf6d"
1031 if test x"$opsys" = x"bsdi";then
paul7ea487b2003-03-17 02:05:07 +00001032 AC_DEFINE(BSDI_NRL,,BSDI)
1033 AC_MSG_RESULT(BSDI_NRL)
paula159ed92003-06-04 11:01:45 +00001034 else
paul7ea487b2003-03-17 02:05:07 +00001035 AC_MSG_RESULT(NRL)
paula159ed92003-06-04 11:01:45 +00001036 fi
paul19877dd2004-05-11 10:49:35 +00001037dnl ------------------------------------
1038dnl Solaris 9, 10 and potentially higher
1039dnl ------------------------------------
paulafd8a122005-03-12 06:36:10 +00001040 elif test x"$opsys" = x"sol8"; then
paul19877dd2004-05-11 10:49:35 +00001041 zebra_cv_ipv6=yes;
1042 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1043 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1044 RIPNGD="ripngd"
1045 OSPF6D="ospf6d"
1046 AC_MSG_RESULT(Solaris IPv6)
paul7ea487b2003-03-17 02:05:07 +00001047dnl ----------
1048dnl Linux IPv6
1049dnl ----------
paula159ed92003-06-04 11:01:45 +00001050 elif test "${enable_ipv6}" = "yes"; then
1051 AC_EGREP_CPP(yes, [
1052 #include <linux/version.h>
1053 /* 2.1.128 or later */
1054 #if LINUX_VERSION_CODE >= 0x020180
1055 yes
1056 #endif],
1057 [zebra_cv_ipv6=yes
1058 zebra_cv_linux_ipv6=yes
1059 AC_MSG_RESULT(Linux IPv6)])
1060 else
1061 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1062 then
paul7ea487b2003-03-17 02:05:07 +00001063 zebra_cv_ipv6=yes
1064 zebra_cv_linux_ipv6=yes
1065 AC_MSG_RESULT(Linux IPv6)
paula159ed92003-06-04 11:01:45 +00001066 fi
1067 fi
paul7ea487b2003-03-17 02:05:07 +00001068
paula159ed92003-06-04 11:01:45 +00001069 if test "$zebra_cv_linux_ipv6" = "yes";then
hasso850d39f2005-06-30 13:52:20 +00001070 AC_MSG_CHECKING(whether libc has IPv6 support)
1071 AC_TRY_LINK([#include <netinet/in.h>
1072 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1073 [AC_MSG_RESULT(yes)
1074 zebra_cv_ipv6=yes
1075 zebra_cv_linux_ipv6=yes],
1076 [AC_MSG_RESULT(no)
1077 zebra_cv_ipv6=no
1078 zebra_cv_linux_ipv6=no])
1079 fi
1080
1081 if test "$zebra_cv_linux_ipv6" = "yes";then
paula159ed92003-06-04 11:01:45 +00001082 AC_MSG_CHECKING(for GNU libc >= 2.1)
1083 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1084 AC_EGREP_CPP(yes, [
paul7ea487b2003-03-17 02:05:07 +00001085#include <features.h>
1086#if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1087 yes
paula159ed92003-06-04 11:01:45 +00001088#endif],
1089 [glibc=yes
1090 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1091 AC_MSG_RESULT(yes)],
1092 AC_MSG_RESULT(no)
1093 )
1094 RIPNGD="ripngd"
1095 OSPF6D="ospf6d"
1096 if test "$glibc" != "yes"; then
paul7ea487b2003-03-17 02:05:07 +00001097 INCLUDES="-I/usr/inet6/include"
1098 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1099 LIB_IPV6="-L/usr/inet6/lib -linet6"
1100 fi
paula159ed92003-06-04 11:01:45 +00001101 fi
1102 fi
paul7ea487b2003-03-17 02:05:07 +00001103
1104dnl -----------------------
1105dnl Set IPv6 related values
1106dnl -----------------------
paula159ed92003-06-04 11:01:45 +00001107 LIBS="$LIB_IPV6 $LIBS"
1108 AC_SUBST(LIB_IPV6)
paul7ea487b2003-03-17 02:05:07 +00001109
paula159ed92003-06-04 11:01:45 +00001110 if test x"$RIPNGD" = x""; then
1111 AC_MSG_RESULT(IPv4 only)
1112 fi
paul7ea487b2003-03-17 02:05:07 +00001113fi
1114
gdtfa3232e2003-12-03 17:52:30 +00001115dnl ------------------
1116dnl IPv6 header checks
1117dnl ------------------
1118if test "x${zebra_cv_ipv6}" = "xyes"; then
1119AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001120 netinet6/in6_var.h netinet6/nd6.h], [], [],
1121 QUAGGA_INCLUDES)
gdtfa3232e2003-12-03 17:52:30 +00001122fi
1123
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001124m4_define([QUAGGA_INCLUDES],dnl
1125QUAGGA_INCLUDES
1126[#if HAVE_NETINET6_IN6_H
1127#include <netinet6/in6.h>
1128#endif
1129#if HAVE_NETINET_IN6_VAR_H
1130#include <netinet/in6_var.h>
1131#endif
1132#if HAVE_NETINET_ICMP6_H
1133# include <netinet/icmp6.h>
1134#endif
1135#if HAVE_NETINET6_IN6_VAR_H
1136# include <netinet6/in6_var.h>
1137#endif
1138#if HAVE_NETINET6_ND6_H
Hasso Tepperfbf24542007-06-25 19:30:59 +00001139# include <netinet6/nd6.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001140#endif
1141])dnl
1142
paul7ea487b2003-03-17 02:05:07 +00001143dnl --------------------
1144dnl Daemon disable check
1145dnl --------------------
1146if test "${enable_zebra}" = "no";then
1147 ZEBRA=""
1148else
1149 ZEBRA="zebra"
1150fi
1151
1152if test "${enable_bgpd}" = "no";then
1153 BGPD=""
1154else
1155 BGPD="bgpd"
1156fi
1157
1158if test "${enable_ripd}" = "no";then
1159 RIPD=""
1160else
1161 RIPD="ripd"
1162fi
1163
1164if test "${enable_ospfd}" = "no";then
1165 OSPFD=""
1166else
1167 OSPFD="ospfd"
1168fi
1169
ajsd0199432004-12-22 14:03:52 +00001170if test "${enable_watchquagga}" = "no";then
1171 WATCHQUAGGA=""
1172else
1173 WATCHQUAGGA="watchquagga"
1174fi
1175
paul1ef74ef2003-03-21 15:16:05 +00001176OSPFCLIENT=""
1177if test "${enable_opaque_lsa}" = "yes"; then
1178 if test "${enable_ospfapi}" != "no";then
paul9a569842003-03-28 01:45:13 +00001179 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
paul1ef74ef2003-03-21 15:16:05 +00001180
1181 if test "${enable_ospfclient}" != "no";then
1182 OSPFCLIENT="ospfclient"
1183 fi
1184 fi
1185
paul7ea487b2003-03-17 02:05:07 +00001186fi
1187
1188case "${enable_ripngd}" in
1189 "yes") RIPNGD="ripngd";;
1190 "no" ) RIPNGD="";;
1191 * ) ;;
1192esac
1193
1194case "${enable_ospf6d}" in
1195 "yes") OSPF6D="ospf6d";;
1196 "no" ) OSPF6D="";;
1197 * ) ;;
1198esac
1199
jardin9e867fe2003-12-23 08:56:18 +00001200case "${enable_isisd}" in
1201 "yes") ISISD="isisd";;
1202 "no" ) ISISD="";;
hassoae399ab2004-09-13 20:22:18 +00001203 * ) ;;
jardin9e867fe2003-12-23 08:56:18 +00001204esac
1205
Greg Troxel97cee872007-08-02 13:36:56 +00001206# XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1207case "${enable_solaris}" in
1208 "yes") SOLARIS="solaris";;
1209 "no" ) SOLARIS="";;
1210 * ) ;;
1211esac
1212
paul7ea487b2003-03-17 02:05:07 +00001213if test "${enable_bgp_announce}" = "no";then
Paul Jakma750e8142008-07-22 21:11:48 +00001214 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1215else
1216 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
paul7ea487b2003-03-17 02:05:07 +00001217fi
1218
1219AC_SUBST(ZEBRA)
1220AC_SUBST(BGPD)
1221AC_SUBST(RIPD)
1222AC_SUBST(RIPNGD)
1223AC_SUBST(OSPFD)
1224AC_SUBST(OSPF6D)
ajsd0199432004-12-22 14:03:52 +00001225AC_SUBST(WATCHQUAGGA)
jardin9e867fe2003-12-23 08:56:18 +00001226AC_SUBST(ISISD)
Greg Troxel97cee872007-08-02 13:36:56 +00001227AC_SUBST(SOLARIS)
paul7ea487b2003-03-17 02:05:07 +00001228AC_SUBST(VTYSH)
1229AC_SUBST(INCLUDES)
1230AC_SUBST(CURSES)
1231AC_SUBST(OSPFCLIENT)
paul1ef74ef2003-03-21 15:16:05 +00001232AC_SUBST(OSPFAPI)
paul7ea487b2003-03-17 02:05:07 +00001233AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1234AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1235AC_CHECK_LIB(crypt, crypt)
1236AC_CHECK_LIB(resolv, res_init)
paul7ea487b2003-03-17 02:05:07 +00001237
1238dnl ---------------------------------------------------
1239dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1240dnl ---------------------------------------------------
paula159ed92003-06-04 11:01:45 +00001241AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1242AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1243AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
paul7ea487b2003-03-17 02:05:07 +00001244
1245dnl ---------------------------
1246dnl check system has GNU regexp
1247dnl ---------------------------
1248dnl AC_MSG_CHECKING(whether system has GNU regex)
1249AC_CHECK_LIB(c, regexec,
1250[AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1251 LIB_REGEX=""],
1252[LIB_REGEX="regex.o"])
1253AC_SUBST(LIB_REGEX)
1254
1255dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001256dnl check Net-SNMP library
paul7ea487b2003-03-17 02:05:07 +00001257dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001258if test "${enable_snmp}" = "yes"; then
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +02001259 if test "$with_crypto" != "no"; then
1260 LIBS="${LIBS} -lcrypto";
1261 fi
paulb1fc9ac2006-01-31 10:09:27 +00001262 AC_CHECK_LIB(netsnmp, asn_parse_int,
1263 [AC_DEFINE(HAVE_NETSNMP,,Net SNMP)
1264 AC_DEFINE(HAVE_SNMP,,SNMP)
1265 LIBS="${LIBS} -lnetsnmp"],
1266 [AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])])
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +02001267
1268 AC_CHECK_HEADER([net-snmp/net-snmp-config.h],
1269 [],
1270 [AC_MSG_ERROR([--enable-snmp given, but cannot find net-snmp-config.h])],
1271 QUAGGA_INCLUDES)
paulb1fc9ac2006-01-31 10:09:27 +00001272 AC_SUBST(SNMP_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001273fi
1274
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001275dnl ---------------------------
1276dnl sockaddr and netinet checks
1277dnl ---------------------------
1278AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1279 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1280 socklen_t,
1281 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1282 struct nd_opt_adv_interval, struct rt_addrinfo,
Paul Jakma11770e12007-06-22 16:14:42 +00001283 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001284 [], [], QUAGGA_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001285
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001286AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1287 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1288 struct sockaddr_in6.sin6_scope_id,
1289 struct if6_aliasreq.ifra_lifetime,
1290 struct nd_opt_adv_interval.nd_opt_ai_type],
1291 [], [], QUAGGA_INCLUDES)
hasso71c0fb52003-05-25 20:18:13 +00001292
paul7ea487b2003-03-17 02:05:07 +00001293dnl ---------------------------
Paul Jakma11770e12007-06-22 16:14:42 +00001294dnl IRDP/pktinfo/icmphdr checks
paul7ea487b2003-03-17 02:05:07 +00001295dnl ---------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001296AC_CHECK_TYPES([struct in_pktinfo],
Paul Jakma11770e12007-06-22 16:14:42 +00001297 [AC_CHECK_TYPES([struct icmphdr],
1298 [if test "${enable_irdp}" != "no"; then
1299 AC_DEFINE(HAVE_IRDP,, IRDP)
1300 fi],
1301 [if test "${enable_irdp}" = "yes"; then
1302 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1303 fi], [QUAGGA_INCLUDES])],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001304 [if test "${enable_irdp}" = "yes"; then
1305 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1306 fi], [QUAGGA_INCLUDES])
vincent29c4c9b2005-03-25 13:05:47 +00001307
paul7ea487b2003-03-17 02:05:07 +00001308dnl --------------------------------------
1309dnl checking for getrusage struct and call
1310dnl --------------------------------------
1311AC_MSG_CHECKING(whether getrusage is available)
1312AC_TRY_COMPILE([#include <sys/resource.h>
1313],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1314[AC_MSG_RESULT(yes)
1315 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1316 AC_MSG_RESULT(no))
1317
pauledd7c242003-06-04 13:59:38 +00001318dnl -------------------
1319dnl capabilities checks
1320dnl -------------------
hasso41d3fc92004-04-06 11:59:00 +00001321if test "${enable_capabilities}" != "no"; then
1322 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1323 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1324 [AC_MSG_RESULT(yes)
1325 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1326 quagga_ac_keepcaps="yes"],
1327 AC_MSG_RESULT(no)
pauledd7c242003-06-04 13:59:38 +00001328 )
hasso41d3fc92004-04-06 11:59:00 +00001329 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1330 AC_CHECK_HEADERS(sys/capability.h)
1331 fi
1332 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1333 AC_CHECK_LIB(cap, cap_init,
1334 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1335 LIBCAP="-lcap"
paulceacedb2005-09-29 14:39:32 +00001336 quagga_ac_lcaps="yes"]
hasso41d3fc92004-04-06 11:59:00 +00001337 )
paulceacedb2005-09-29 14:39:32 +00001338 else
1339 AC_CHECK_HEADERS(priv.h,
1340 [AC_MSG_CHECKING(Solaris style privileges are available)
1341 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1342 [AC_MSG_RESULT(yes)
1343 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1344 quagga_ac_scaps="yes"],
1345 AC_MSG_RESULT(no)
1346 )
1347 ]
1348 )
1349 fi
1350 if test x"${quagga_ac_scaps}" = x"yes" \
1351 -o x"${quagga_ac_lcaps}" = x"yes"; then
1352 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
hasso41d3fc92004-04-06 11:59:00 +00001353 fi
pauledd7c242003-06-04 13:59:38 +00001354fi
1355AC_SUBST(LIBCAP)
1356
paulfb2d1502003-06-04 09:40:54 +00001357dnl ---------------------------
1358dnl check for glibc 'backtrace'
1359dnl ---------------------------
1360if test "${glibc}" = "yes"; then
Paul Jakmafb66b292006-05-28 08:26:15 +00001361 AC_CHECK_HEADER([execinfo.h],
1362 [AC_CHECK_FUNC([backtrace],
1363 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1364 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1365 ])
1366 ])
paulfb2d1502003-06-04 09:40:54 +00001367fi
1368
Paul Jakma41be32b2006-03-30 13:53:59 +00001369dnl -----------------------------------------
1370dnl check for malloc mallinfo struct and call
1371dnl this must try and link using LIBS, in
1372dnl order to check no alternative allocator
1373dnl has been specified, which might not provide
1374dnl mallinfo, e.g. such as Umem on Solaris.
1375dnl -----------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001376AC_CHECK_HEADER([malloc.h],
Paul Jakma41be32b2006-03-30 13:53:59 +00001377 [AC_MSG_CHECKING(whether mallinfo is available)
1378 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1379 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1380 [AC_MSG_RESULT(yes)
1381 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1382 AC_MSG_RESULT(no)
1383 )
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001384 ], [], QUAGGA_INCLUDES)
Paul Jakma41be32b2006-03-30 13:53:59 +00001385
paul408ad942003-05-20 00:03:33 +00001386dnl ----------
1387dnl configure date
1388dnl ----------
1389CONFDATE=`date '+%Y%m%d'`
1390AC_SUBST(CONFDATE)
1391
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001392dnl Conditionally enable PIE support for GNU toolchains.
1393enable_pie=yes
1394
1395AC_ARG_ENABLE(pie, AS_HELP_STRING([--disable-pie], [Do not build tools as a Position Independent Executables]))
1396if test "$enable_pie" = "yes"; then
1397 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1398 save_CFLAGS=$CFLAGS
1399 save_LDFLAGS=$LDFLAGS
1400 CFLAGS="$CFLAGS -fPIE"
1401 LDFLAGS="$LDFLAGS -pie"
1402 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1403 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1404 )
1405 CFLAGS=$save_CFLAGS
1406 LDFLAGS=$save_LDFLAGS
1407 ])
1408 if test "$ap_cv_cc_pie" = "yes"; then
1409 PICFLAGS="-fPIE"
1410 PILDFLAGS="-pie"
1411 fi
1412fi
1413
1414AC_SUBST(PICFLAGS)
1415AC_SUBST(PILDFLAGS)
1416
paul7ea487b2003-03-17 02:05:07 +00001417dnl ------------------------------
paula159ed92003-06-04 11:01:45 +00001418dnl set paths for state directory
paul23bd12c2003-04-07 06:11:09 +00001419dnl ------------------------------
1420if test "${prefix}" = "NONE"; then
paule8f29842003-08-12 13:08:31 +00001421 quagga_statedir_prefix="";
paul23bd12c2003-04-07 06:11:09 +00001422else
paule8f29842003-08-12 13:08:31 +00001423 quagga_statedir_prefix=${prefix}
paul23bd12c2003-04-07 06:11:09 +00001424fi
1425if test "${localstatedir}" = '${prefix}/var'; then
paula159ed92003-06-04 11:01:45 +00001426 AC_CACHE_CHECK(state directory,ac_statedir,
paule8f29842003-08-12 13:08:31 +00001427 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1428 ${quagga_statedir_prefix}/var/adm dnl
1429 ${quagga_statedir_prefix}/etc dnl
paula159ed92003-06-04 11:01:45 +00001430 /var/run dnl
1431 /var/adm dnl
1432 /etc dnl
1433 /dev/null;
paul23bd12c2003-04-07 06:11:09 +00001434 do
paule8f29842003-08-12 13:08:31 +00001435 test -d $QUAGGA_STATE_DIR && break
paul23bd12c2003-04-07 06:11:09 +00001436 done
paule8f29842003-08-12 13:08:31 +00001437 quagga_statedir=$QUAGGA_STATE_DIR])
paul23bd12c2003-04-07 06:11:09 +00001438else
paule8f29842003-08-12 13:08:31 +00001439 quagga_statedir=${localstatedir}
paula159ed92003-06-04 11:01:45 +00001440 AC_MSG_CHECKING(directory to use for state file)
paule8f29842003-08-12 13:08:31 +00001441 AC_MSG_RESULT(${quagga_statedir})
paul26275b02005-04-11 07:10:47 +00001442 AC_SUBST(quagga_statedir)
paul23bd12c2003-04-07 06:11:09 +00001443fi
paule8f29842003-08-12 13:08:31 +00001444if test $quagga_statedir = "/dev/null"; then
paula159ed92003-06-04 11:01:45 +00001445 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1446fi
1447
paule8f29842003-08-12 13:08:31 +00001448AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1449AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1450AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1451AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1452AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1453AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
jardin9e867fe2003-12-23 08:56:18 +00001454AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
ajsd0199432004-12-22 14:03:52 +00001455AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
paule8f29842003-08-12 13:08:31 +00001456AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1457AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1458AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1459AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1460AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1461AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1462AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
jardin9e867fe2003-12-23 08:56:18 +00001463AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
ajs515210b2004-12-22 15:35:12 +00001464AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
paul7ea487b2003-03-17 02:05:07 +00001465
paul1eb8ef22005-04-07 07:30:20 +00001466dnl -------------------------------
1467dnl Quagga sources should always be
1468dnl current wrt interfaces. Dont
1469dnl allow deprecated interfaces to
1470dnl be exposed.
1471dnl -------------------------------
1472AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1473
paul7ea487b2003-03-17 02:05:07 +00001474dnl ---------------------------
1475dnl Check htonl works correctly
1476dnl ---------------------------
1477AC_MSG_CHECKING(for working htonl)
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001478AC_CACHE_VAL(ac_cv_htonl_works,
1479 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1480 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1481 ]
1482)
paul7ea487b2003-03-17 02:05:07 +00001483AC_MSG_RESULT($ac_cv_htonl_works)
1484
paul14c17fd2004-11-07 22:34:23 +00001485AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
ajsd0199432004-12-22 14:03:52 +00001486 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
jardin9e867fe2003-12-23 08:56:18 +00001487 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
paul14c17fd2004-11-07 22:34:23 +00001488 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
gdt69f1fc22004-08-27 15:57:35 +00001489 pkgsrc/Makefile
paul670bbf12004-11-12 09:05:00 +00001490 redhat/quagga.spec
gdtb7a97f82004-07-23 16:23:56 +00001491 lib/version.h
paul14c17fd2004-11-07 22:34:23 +00001492 doc/defines.texi
hassof695b012005-04-02 19:03:39 +00001493 isisd/topology/Makefile
gdtcbd04082004-08-31 18:16:36 +00001494 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
paulf31293a2004-11-12 09:27:04 +00001495 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
paul26275b02005-04-11 07:10:47 +00001496AC_CONFIG_FILES([solaris/Makefile])
1497
paul670bbf12004-11-12 09:05:00 +00001498AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
hasso48577192004-11-19 06:41:49 +00001499## Hack, but working solution to avoid rebuilding of quagga.info.
1500## It's already in CVS until texinfo 4.7 is more common.
paul14c17fd2004-11-07 22:34:23 +00001501AC_OUTPUT
paul7ea487b2003-03-17 02:05:07 +00001502
1503echo "
hassoc89f6492004-08-26 12:21:28 +00001504Quagga configuration
1505--------------------
1506quagga version : ${PACKAGE_VERSION}
paul7ea487b2003-03-17 02:05:07 +00001507host operationg system : ${host_os}
1508source code location : ${srcdir}
1509compiler : ${CC}
1510compiler flags : ${CFLAGS}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001511make : ${MAKE-make}
hasso2d582282005-03-28 15:29:07 +00001512includes : ${INCLUDES} ${SNMP_INCLUDES}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001513linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
paule8f29842003-08-12 13:08:31 +00001514state file directory : ${quagga_statedir}
pauldc7a2bf2003-10-22 00:07:44 +00001515config file directory : `eval echo \`echo ${sysconfdir}\``
gdtd6b72f72003-12-03 17:24:27 +00001516example directory : `eval echo \`echo ${exampledir}\``
paul8d4aee52003-06-06 00:30:35 +00001517user to run as : ${enable_user}
1518group to run as : ${enable_group}
1519group for vty sockets : ${enable_vty_group}
gdtaa593d52003-12-22 20:15:53 +00001520config file mask : ${enable_configfile_mask}
1521log file mask : ${enable_logfile_mask}
pauldc7a2bf2003-10-22 00:07:44 +00001522
1523The above user and group must have read/write access to the state file
Paul Jakma105b8232006-05-28 08:02:41 +00001524directory and to the config files in the config file directory."
1525
1526if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1527Warning: The ${MAKE-make} programme detected, either in your path or
1528via the MAKE variable, is not GNU Make. GNU make may be installed as
1529gmake on some systems. and is required to complete a build of Quagga
1530" > /dev/stderr
1531fi