blob: 0b8724ee7b1d6123f4e6dc098c3910d96653a057 [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])
Jeremy Jackson25f45882009-01-12 16:06:12 -0500256AC_ARG_ENABLE(pcreposix,
257[ --enable-pcreposix enable using PCRE Posix libs for regex functions])
paul6b6942f2004-10-22 04:55:05 +0000258
259if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
260 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
261 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
262 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
263 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
264fi
paul7ea487b2003-03-17 02:05:07 +0000265
ajs3cade262004-12-29 17:50:22 +0000266if test x"${enable_gcc_rdynamic}" = x"yes" ; then
267 LDFLAGS="${LDFLAGS} -rdynamic"
268fi
269
ajs924b9222005-04-16 17:11:24 +0000270if test x"${enable_time_check}" != x"no" ; then
271 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
272 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
273 else
274 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
275 fi
276fi
277
paul7ea487b2003-03-17 02:05:07 +0000278if test "${enable_broken_aliases}" = "yes"; then
279 if test "${enable_netlink}" = "yes"
280 then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000281 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
paul7ea487b2003-03-17 02:05:07 +0000282 fi
283 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
284 enable_netlink=no
285fi
286
287if test "${enable_tcp_zebra}" = "yes"; then
288 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
289fi
290
paul7ea487b2003-03-17 02:05:07 +0000291if test "${enable_opaque_lsa}" = "yes"; then
292 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
293fi
294
295if test "${enable_ospf_te}" = "yes"; then
296 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
297 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
298fi
299
Paul Jakma3453a712009-06-12 14:21:02 +0100300if test "${enable_linux24_tcp_md5}" = "yes"; then
301 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
302fi
303
gdtd2a0ccc2003-12-03 18:13:48 +0000304AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
305if test "${enable_rtadv}" != "no"; then
hasso71c0fb52003-05-25 20:18:13 +0000306 AC_MSG_RESULT(yes)
gdtd2a0ccc2003-12-03 18:13:48 +0000307 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
paul2487bea2003-05-25 23:51:31 +0000308else
309 AC_MSG_RESULT(no)
hasso71c0fb52003-05-25 20:18:13 +0000310fi
paul7ea487b2003-03-17 02:05:07 +0000311
hassoca776982004-06-12 14:33:05 +0000312if test "${enable_irdp}" = "yes"; then
313 AC_DEFINE(HAVE_IRDP,, IRDP )
314fi
315
hassof695b012005-04-02 19:03:39 +0000316if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
317 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
318 ISIS_TOPOLOGY_INCLUDES="-I./topology"
319 ISIS_TOPOLOGY_DIR="topology"
320 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
321fi
322
323AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
324AC_SUBST(ISIS_TOPOLOGY_DIR)
325AC_SUBST(ISIS_TOPOLOGY_LIB)
326
paul79cb2162003-06-06 12:19:53 +0000327if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
paule8f29842003-08-12 13:08:31 +0000328 enable_user="quagga"
pauledd7c242003-06-04 13:59:38 +0000329elif test "${enable_user}" = "no"; then
330 enable_user="root"
331fi
pauledd7c242003-06-04 13:59:38 +0000332
paul79cb2162003-06-06 12:19:53 +0000333if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
paule8f29842003-08-12 13:08:31 +0000334 enable_group="quagga"
pauledd7c242003-06-04 13:59:38 +0000335elif test "${enable_group}" = "no"; then
336 enable_group="root"
337fi
pauledd7c242003-06-04 13:59:38 +0000338
339if test x"${enable_vty_group}" = x"yes" ; then
paul8d4aee52003-06-06 00:30:35 +0000340 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
paul79cb2162003-06-06 12:19:53 +0000341elif test x"${enable_vty_group}" != x""; then
paul8d4aee52003-06-06 00:30:35 +0000342 if test x"${enable_vty_group}" != x"no"; then
pauledd7c242003-06-04 13:59:38 +0000343 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
344 fi
345fi
paul26275b02005-04-11 07:10:47 +0000346AC_SUBST([enable_user])
347AC_SUBST([enable_group])
348AC_SUBST([enable_vty_group])
349AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
350AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
pauledd7c242003-06-04 13:59:38 +0000351
gdtaa593d52003-12-22 20:15:53 +0000352enable_configfile_mask=${enable_configfile_mask:-0600}
353AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
354
355enable_logfile_mask=${enable_logfile_mask:-0600}
356AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
357
paul7ea487b2003-03-17 02:05:07 +0000358MULTIPATH_NUM=1
359
360case "${enable_multipath}" in
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000361 [[0-9]|[1-9][0-9]])
paul7ea487b2003-03-17 02:05:07 +0000362 MULTIPATH_NUM="${enable_multipath}"
363 ;;
364 "")
365 ;;
366 *)
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000367 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
paul7ea487b2003-03-17 02:05:07 +0000368 ;;
369esac
370
paul7ea487b2003-03-17 02:05:07 +0000371AC_SUBST(MULTIPATH_NUM)
372
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000373dnl ------------------------------------
374dnl Check C keywords and standard types
375dnl ------------------------------------
376AC_C_CONST
377AC_C_INLINE
378AC_C_RESTRICT
379AC_C_VOLATILE
pauldc7a2bf2003-10-22 00:07:44 +0000380AC_HEADER_STDC
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000381AC_HEADER_TIME
382AC_HEADER_SYS_WAIT
383dnl AC_TYPE_PID_T
384AC_TYPE_UID_T
385AC_TYPE_MODE_T
386AC_TYPE_SIZE_T
387AC_TYPE_SIGNAL
388AC_STRUCT_TM
pauldc7a2bf2003-10-22 00:07:44 +0000389
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000390dnl -------------------------
391dnl Check other header files.
392dnl -------------------------
393AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
394 sys/types.h linux/version.h netdb.h asm/types.h \
395 sys/param.h limits.h signal.h libutil.h \
Paul Jakma6511cab2009-06-18 17:38:01 +0100396 sys/socket.h netinet/in.h time.h sys/time.h])
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000397
398dnl Utility macro to avoid retyping includes all the time
399m4_define([QUAGGA_INCLUDES],
400[#ifdef SUNOS_5
401#define _XPG4_2
402#define __EXTENSIONS__
403#endif
404#include <stdio.h>
405#if STDC_HEADERS
406# include <stdlib.h>
407# include <stddef.h>
408#else
409# if HAVE_STDLIB_H
410# include <stdlib.h>
411# endif
412#endif
413#if HAVE_SYS_TYPES_H
414# include <sys/types.h>
415#endif
416/* sys/conf.h depends on param.h on FBSD at least */
417#if HAVE_SYS_PARAM_H
418# include <sys/param.h>
419#endif
420/* Required for MAXSIG */
421#if HAVE_SIGNAL_H
422# include <signal.h>
423#endif
424#if HAVE_SYS_SOCKET_H
425# include <sys/socket.h>
426#endif
427#if HAVE_NETINET_IN_H
428# include <netinet/in.h>
429#endif
Paul Jakma6511cab2009-06-18 17:38:01 +0100430#ifdef TIME_WITH_SYS_TIME
431# include <sys/time.h>
432# include <time.h>
433#else
434# ifdef HAVE_SYS_TIME_H
435# include <sys/time.h>
436# else
437# include <time.h>
438# endif
439#endif /* TIME_WITH_SYS_TIME */
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000440])dnl
441
442AC_CHECK_HEADERS([sys/un.h net/if.h netinet/in_systm.h netinet/in_var.h \
443 net/if_dl.h net/if_var.h net/netopt.h net/route.h \
Paul Jakma11770e12007-06-22 16:14:42 +0000444 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000445 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
446 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
447 [], [], QUAGGA_INCLUDES)
448
449AC_CHECK_HEADERS([ucontext.h], [], [],
450[#ifndef __USE_GNU
451#define __USE_GNU
452#endif /* __USE_GNU */
453QUAGGA_INCLUDES
454])
455
456m4_define([QUAGGA_INCLUDES],
457QUAGGA_INCLUDES
458[#if HAVE_NET_IF_H
459# include <net/if.h>
460#endif
461#if HAVE_SYS_UN_H
462# include <sys/un.h>
463#endif
464#if HAVE_NETINET_IN_SYSTM_H
465# include <netinet/in_systm.h>
466#endif
467#if HAVE_NETINET_IN_VAR_H
468# include <netinet/in_var.h>
469#endif
470#if HAVE_NET_IF_DL_H
471# include <net/if_dl.h>
472#endif
473#if HAVE_NET_IF_VAR_H
474# include <net/if_var.h>
475#endif
476#if HAVE_NET_NETOPT_H
477# include <net/netopt.h>
478#endif
479#if HAVE_NET_ROUTE_H
480# include <net/route.h>
481#endif
482#if HAVE_INET_ND_H
483# include <inet/nd.h>
484#endif
485#if HAVE_ARPA_INET_H
486# include <arpa/inet.h>
487#endif
Paul Jakma11770e12007-06-22 16:14:42 +0000488/* Required for IDRP */
489#if HAVE_NETINET_IP_ICMP_H
490# include <netinet/ip_icmp.h>
491#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000492])dnl
pauldc7a2bf2003-10-22 00:07:44 +0000493
gdtfa3232e2003-12-03 17:52:30 +0000494dnl V6 headers are checked below, after we check for v6
paul7ea487b2003-03-17 02:05:07 +0000495
paul7ea487b2003-03-17 02:05:07 +0000496dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
497case "$host" in
paulafd8a122005-03-12 06:36:10 +0000498 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
paul7ea487b2003-03-17 02:05:07 +0000499 opsys=sol2-6
paulafd8a122005-03-12 06:36:10 +0000500 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
paul19877dd2004-05-11 10:49:35 +0000501 AC_DEFINE(SUNOS_5, 1, SunOS 5)
paul7ea487b2003-03-17 02:05:07 +0000502 AC_CHECK_LIB(xnet, main)
503 CURSES=-lcurses
504 ;;
paul1b73de82005-04-10 16:31:51 +0000505 [*-sunos5.[8-9]] \
506 | [*-sunos5.1[0-9]] \
507 | [*-sunos5.1[0-9].[0-9]] \
508 | [*-solaris2.[8-9]] \
509 | [*-solaris2.1[0-9]] \
510 | [*-solaris2.1[0-9].[0-9]])
paulafd8a122005-03-12 06:36:10 +0000511 opsys=sol8
Paul Jakmafb66b292006-05-28 08:26:15 +0000512 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
513 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
paul19877dd2004-05-11 10:49:35 +0000514 AC_CHECK_LIB(socket, main)
515 AC_CHECK_LIB(nsl, main)
paul1b73de82005-04-10 16:31:51 +0000516 AC_CHECK_LIB(umem, main)
Paul Jakmafb66b292006-05-28 08:26:15 +0000517 AC_CHECK_FUNCS([printstack],
518 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
519 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
520 ])
paul19877dd2004-05-11 10:49:35 +0000521 CURSES=-lcurses
522 ;;
paul7ea487b2003-03-17 02:05:07 +0000523 *-sunos5* | *-solaris2*)
paul19877dd2004-05-11 10:49:35 +0000524 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
paul7ea487b2003-03-17 02:05:07 +0000525 AC_CHECK_LIB(socket, main)
526 AC_CHECK_LIB(nsl, main)
527 CURSES=-lcurses
528 ;;
hassoc45eb832005-02-19 13:58:06 +0000529 *-linux*)
paul7ea487b2003-03-17 02:05:07 +0000530 opsys=gnu-linux
531 AC_DEFINE(GNU_LINUX,,GNU Linux)
532 ;;
533 *-nec-sysv4*)
534 AC_CHECK_LIB(nsl, gethostbyname)
535 AC_CHECK_LIB(socket, socket)
536 ;;
paul7ea487b2003-03-17 02:05:07 +0000537 *-openbsd*)
538 opsys=openbsd
539 AC_DEFINE(OPEN_BSD,,OpenBSD)
540 ;;
541 *-bsdi*)
542 opsys=bsdi
543 OTHER_METHOD="mtu_kvm.o"
544 AC_CHECK_LIB(kvm, main)
545 ;;
paul49e3b3c2003-10-23 20:39:50 +0000546 *-irix6.5)
pauldc7a2bf2003-10-22 00:07:44 +0000547 opsys=irix
548 AC_DEFINE(IRIX_65,,IRIX 6.5)
549 ;;
paul7ea487b2003-03-17 02:05:07 +0000550esac
551
552dnl ---------------------
553dnl Integrated VTY option
554dnl ---------------------
555case "${enable_vtysh}" in
556 "yes") VTYSH="vtysh";
557 AC_DEFINE(VTYSH,,VTY shell)
gdtfc9d0742004-06-30 14:25:12 +0000558 AC_PATH_PROG(PERL, perl)
559dnl Vtysh uses libreadline, which looks for termcap functions at
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000560dnl configure time. We follow readlines search order.
gdtfc9d0742004-06-30 14:25:12 +0000561dnl The required procedures are in libtermcap on NetBSD, in
562dnl [TODO] on Linux, and in [TODO] on Solaris.
hassoc0689392005-08-25 12:00:58 +0000563 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
paula9694592005-08-25 14:50:05 +0000564 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
565 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
566 [AC_CHECK_LIB(ncurses, tputs,
567 LIBREADLINE="$LIBREADLINE -lncurses")]
568 )]
569 )]
570 )
571 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
572 "$LIBREADLINE")
paul7ea487b2003-03-17 02:05:07 +0000573 if test $ac_cv_lib_readline_main = no; then
gdtfc9d0742004-06-30 14:25:12 +0000574 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
paul7ea487b2003-03-17 02:05:07 +0000575 fi
576 AC_CHECK_HEADER(readline/history.h)
577 if test $ac_cv_header_readline_history_h = no;then
578 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
579 fi
paula9694592005-08-25 14:50:05 +0000580 AC_CHECK_LIB(readline, rl_completion_matches,
581 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
paul3d3de8c2003-05-23 10:33:49 +0000582 if test $ac_cv_lib_readline_rl_completion_matches = no; then
583 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
584 fi
585 ;;
paul7ea487b2003-03-17 02:05:07 +0000586 "no" ) VTYSH="";;
587 * ) ;;
588esac
hassoc0689392005-08-25 12:00:58 +0000589AC_SUBST(LIBREADLINE)
paul7ea487b2003-03-17 02:05:07 +0000590
591dnl ----------
592dnl PAM module
593dnl ----------
594if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000595 AC_CHECK_HEADER([security/pam_misc.h],
596 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
597 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
598 pam_conv_func="misc_conv"
599 ],
600 [], QUAGGA_INCLUDES)
601 AC_CHECK_HEADER([security/openpam.h],
602 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
603 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
604 pam_conv_func="openpam_ttyconv"
605 ],
606 [], QUAGGA_INCLUDES)
paul24cd4352003-05-06 12:16:27 +0000607 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
608 AC_MSG_WARN([*** pam support will not be built ***])
609 with_libpam="no"
610 fi
611fi
612
613if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000614dnl took this test from proftpds configure.in and suited to our needs
paul7ea487b2003-03-17 02:05:07 +0000615dnl -------------------------------------------------------------------------
616dnl
617dnl This next check looks funky due to a linker problem with some versions
618dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
619dnl omitted requiring libdl linking information. PAM-0.72 or better ships
620dnl with RedHat 6.2 and Debian 2.2 or better.
621AC_CHECK_LIB(pam, pam_start,
paul24cd4352003-05-06 12:16:27 +0000622 [AC_CHECK_LIB(pam, $pam_conv_func,
paul7ea487b2003-03-17 02:05:07 +0000623 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
624 LIBPAM="-lpam"],
625 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
626 LIBPAM="-lpam -lpam_misc"]
627 )
628 ],
629
630 [AC_CHECK_LIB(pam, pam_end,
paul24cd4352003-05-06 12:16:27 +0000631 [AC_CHECK_LIB(pam, $pam_conv_func,
paula159ed92003-06-04 11:01:45 +0000632 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000633 LIBPAM="-lpam -ldl"],
paula159ed92003-06-04 11:01:45 +0000634 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000635 LIBPAM="-lpam -ldl -lpam_misc"]
636 )
637 ],AC_MSG_WARN([*** pam support will not be built ***]),
638 [-ldl])
639 ]
640)
641fi
642AC_SUBST(LIBPAM)
643
644dnl -------------------------------
645dnl Endian-ness check
646dnl -------------------------------
647AC_WORDS_BIGENDIAN
648
649dnl -------------------------------
650dnl check the size in byte of the C
651dnl -------------------------------
652dnl AC_CHECK_SIZEOF(char)
653dnl AC_CHECK_SIZEOF(int)
654dnl AC_CHECK_SIZEOF(short)
655dnl AC_CHECK_SIZEOF(long)
656
657dnl ----------------------------
658dnl check existance of functions
659dnl ----------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000660AC_FUNC_CHOWN
661AC_FUNC_FNMATCH
662AC_FUNC_FORK
663AC_FUNC_MALLOC
664AC_FUNC_MEMCMP
665AC_FUNC_MKTIME
666AC_FUNC_STRFTIME
667AC_FUNC_REALLOC
668AC_FUNC_STAT
669AC_FUNC_SELECT_ARGTYPES
670AC_FUNC_STRFTIME
Paul Jakmad46d2a22007-05-10 16:53:04 +0000671dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
672dnl can lead to strange side effects. So we just check for strnlen
673dnl directly, see below.
Paul Jakma2b5cb412007-05-10 17:05:16 +0000674dnl AC_FUNC_STRNLENdnl
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000675AC_FUNC_VPRINTF
676
677dnl -------------------------------
678dnl bgpd needs pow() and hence libm
679dnl -------------------------------
680TMPLIBS="$LIBS"
681AC_CHECK_HEADER([math.h],
682 [AC_CHECK_LIB([m], [pow],
683 [LIBM="-lm"
684 LIBS="$LIBS $LIBM"
685 AC_DEFINE(HAVE_LIBM,, Have libm)
686 AC_CHECK_FUNCS(pow,[],[LIBM=""])
687 ])
688])
689if test x"$LIBM" = x ; then
690 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
691fi
692LIBS="$TMPLIBS"
693AC_SUBST(LIBM)
694
695dnl ---------------
696dnl other functions
697dnl ---------------
698AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
Paul Jakmad46d2a22007-05-10 16:53:04 +0000699 inet_ntoa inet_aton strnlen \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000700 memchr memmove memset select socket \
701 strcasecmp strchr strcspn strdup strerror \
702 strncasecmp strndup strrchr strspn strstr \
703 strtol strtoul strlcat strlcpy \
704 daemon snprintf vsnprintf \
705 if_nametoindex if_indextoname getifaddrs \
706 uname fcntl])
707
paula159ed92003-06-04 11:01:45 +0000708AC_CHECK_FUNCS(setproctitle, ,
709 [AC_CHECK_LIB(util, setproctitle,
710 [LIBS="$LIBS -lutil"
711 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
712 ]
713 )
714 ]
715)
paul7ea487b2003-03-17 02:05:07 +0000716
717dnl ------------------------------------
718dnl Determine routing get and set method
719dnl ------------------------------------
720AC_MSG_CHECKING(zebra between kernel interface method)
721if test x"$opsys" = x"gnu-linux"; then
722 if test "${enable_netlink}" = "yes";then
723 AC_MSG_RESULT(netlink)
724 RT_METHOD=rt_netlink.o
725 AC_DEFINE(HAVE_NETLINK,,netlink)
726 netlink=yes
727 elif test "${enable_netlink}" = "no"; then
728 AC_MSG_RESULT(ioctl)
729 RT_METHOD=rt_ioctl.o
730 netlink=no
731 else
732 AC_MSG_RESULT(netlink)
733 RT_METHOD=rt_netlink.o
734 AC_DEFINE(HAVE_NETLINK,,netlink)
735 netlink=yes
736 fi
paul19877dd2004-05-11 10:49:35 +0000737elif test x"$opsys" = x"sol2-6";then
738 AC_MSG_RESULT(Route socket)
739 KERNEL_METHOD="kernel_socket.o"
740 RT_METHOD="rt_socket.o"
paulafd8a122005-03-12 06:36:10 +0000741elif test x"$opsys" = x"sol8";then
paul19877dd2004-05-11 10:49:35 +0000742 AC_MSG_RESULT(Route socket)
743 KERNEL_METHOD="kernel_socket.o"
744 RT_METHOD="rt_socket.o"
745elif test "$opsys" = "irix" ; then
746 AC_MSG_RESULT(Route socket)
747 KERNEL_METHOD="kernel_socket.o"
748 RT_METHOD="rt_socket.o"
paul7ea487b2003-03-17 02:05:07 +0000749else
paul19877dd2004-05-11 10:49:35 +0000750 AC_TRY_RUN([#include <errno.h>
paul7ea487b2003-03-17 02:05:07 +0000751#include <sys/types.h>
752#include <sys/socket.h>
753
754main ()
755{
756 int ac_sock;
757
758 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
759 if (ac_sock < 0 && errno == EINVAL)
760 exit (1);
761 exit (0);
762}],
763 [KERNEL_METHOD=kernel_socket.o
764 RT_METHOD=rt_socket.o
765 AC_MSG_RESULT(socket)],
766 [RT_METHOD=rt_ioctl.o
767 AC_MSG_RESULT(ioctl)],
768 [KERNEL_METHOD=kernel_socket.o
769 RT_METHOD=rt_socket.o
770 AC_MSG_RESULT(socket)])
paul7ea487b2003-03-17 02:05:07 +0000771fi
772AC_SUBST(RT_METHOD)
773AC_SUBST(KERNEL_METHOD)
774AC_SUBST(OTHER_METHOD)
775
Paul Jakma238497f2007-08-07 18:49:18 +0000776dnl --------------------------
777dnl Determine IS-IS I/O method
778dnl --------------------------
779AC_CHECK_HEADER(net/bpf.h)
780AC_CHECK_HEADER(sys/dlpi.h)
781AC_MSG_CHECKING(zebra IS-IS I/O method)
782if test x"$opsys" = x"gnu-linux"; then
783 AC_MSG_RESULT(pfpacket)
784 ISIS_METHOD=isis_pfpacket.o
785elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
786 AC_MSG_RESULT(DLPI)
787 ISIS_METHOD="isis_dlpi.o"
788else
789 if test $ac_cv_header_net_bpf_h = no; then
790 if test $ac_cv_header_sys_dlpi_h = no; then
791 AC_MSG_RESULT(none)
792 AC_MSG_WARN([*** IS-IS support will not be built ***])
793 ISISD=""
794 else
795 AC_MSG_RESULT(DLPI)
796 fi
797 ISIS_METHOD="isis_dlpi.o"
798 else
799 AC_MSG_RESULT(BPF)
800 ISIS_METHOD="isis_bpf.o"
801 fi
802fi
803AC_SUBST(ISIS_METHOD)
804
ajsb99760a2005-01-04 16:24:43 +0000805dnl ------------------------------------
806dnl check for broken CMSG_FIRSTHDR macro
807dnl ------------------------------------
gdt6c200462005-01-04 17:02:48 +0000808AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
hasso5b087522005-04-03 23:46:37 +0000809AC_RUN_IFELSE([AC_LANG_SOURCE([[
ajsb99760a2005-01-04 16:24:43 +0000810#ifdef SUNOS_5
811#define _XPG4_2
812#define __EXTENSIONS__
813#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000814#ifdef HAVE_STDLIB_H
815# include <stdlib.h>
816#endif
817#ifdef HAVE_SYS_TYPES_H
ajsb99760a2005-01-04 16:24:43 +0000818#include <sys/types.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000819#endif
820#ifdef HAVE_SYS_SOCKET_H
ajsb99760a2005-01-04 16:24:43 +0000821#include <sys/socket.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000822#endif
ajsb99760a2005-01-04 16:24:43 +0000823
824main()
825{
826 struct msghdr msg;
827 char buf[4];
828
829 msg.msg_control = buf;
830 msg.msg_controllen = 0;
831
832 if (CMSG_FIRSTHDR(&msg) != NULL)
833 exit(0);
834 exit (1);
hasso5b087522005-04-03 23:46:37 +0000835}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
hassod33e8d72005-04-03 13:07:21 +0000836[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
ajsb99760a2005-01-04 16:24:43 +0000837
paul7ea487b2003-03-17 02:05:07 +0000838dnl ------------------------------
839dnl check kernel route read method
840dnl ------------------------------
841AC_CACHE_CHECK(route read method check, zebra_rtread,
842[if test "$netlink" = yes; then
843 RTREAD_METHOD="rtread_netlink.o"
844 zebra_rtread="netlink"
845else
846for zebra_rtread in /proc/net/route /dev/ip /dev/null;
847do
848 test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
849done
850case $zebra_rtread in
851 "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
852 zebra_rtread="proc";;
paul9c30ab62003-07-08 08:36:17 +0000853 "/dev/ip")
854 case "$host" in
855 *-freebsd*) RTREAD_METHOD=rtread_sysctl.o
856 zebra_rtread="sysctl";;
857 *) RTREAD_METHOD="rtread_getmsg.o"
858 zebra_rtread="getmsg";;
859 esac;;
paul7ea487b2003-03-17 02:05:07 +0000860 *) RTREAD_METHOD="rtread_sysctl.o"
861 zebra_rtread="sysctl";;
862esac
863fi])
864AC_SUBST(RTREAD_METHOD)
865
866dnl -----------------------------
867dnl check interface lookup method
868dnl -----------------------------
paul19877dd2004-05-11 10:49:35 +0000869IOCTL_METHOD=ioctl.o
paul7ea487b2003-03-17 02:05:07 +0000870AC_MSG_CHECKING(interface looking up method)
871if test "$netlink" = yes; then
872 AC_MSG_RESULT(netlink)
873 IF_METHOD=if_netlink.o
paul19877dd2004-05-11 10:49:35 +0000874elif test "$opsys" = "sol2-6";then
875 AC_MSG_RESULT(Solaris GIF)
876 IF_METHOD=if_ioctl.o
paulafd8a122005-03-12 06:36:10 +0000877elif test "$opsys" = "sol8";then
paul19877dd2004-05-11 10:49:35 +0000878 AC_MSG_RESULT(Solaris GLIF)
879 IF_METHOD=if_ioctl_solaris.o
880 IOCTL_METHOD=ioctl_solaris.o
881elif test "$opsys" = "irix" ; then
882 AC_MSG_RESULT(IRIX)
883 IF_METHOD=if_ioctl.o
884elif test "$opsys" = "openbsd";then
885 AC_MSG_RESULT(openbsd)
886 IF_METHOD=if_ioctl.o
887elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
888 AC_MSG_RESULT(sysctl)
paul7ea487b2003-03-17 02:05:07 +0000889 IF_METHOD=if_sysctl.o
890 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
paul19877dd2004-05-11 10:49:35 +0000891else
paul7ea487b2003-03-17 02:05:07 +0000892 AC_MSG_RESULT(ioctl)
893 IF_METHOD=if_ioctl.o
paul7ea487b2003-03-17 02:05:07 +0000894fi
895AC_SUBST(IF_METHOD)
paul19877dd2004-05-11 10:49:35 +0000896AC_SUBST(IOCTL_METHOD)
paul7ea487b2003-03-17 02:05:07 +0000897
paul42c98192005-05-07 02:22:51 +0000898dnl ---------------------------------------------------------------
899dnl figure out how to specify an interface in multicast sockets API
900dnl ---------------------------------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000901AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
paul42c98192005-05-07 02:22:51 +0000902
903AC_MSG_CHECKING([for BSD struct ip_mreq hack])
904AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
905#include <sys/param.h>
Denis Ovsienkoc5408352009-04-13 20:11:44 +0400906#endif],[#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000)
paul42c98192005-05-07 02:22:51 +0000907 return (0);
908#else
909 #error No support for BSD struct ip_mreq hack detected
910#endif],[AC_MSG_RESULT(yes)
911AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
912AC_MSG_RESULT(no))
913
Andrew J. Schorrc543a172008-01-10 15:24:32 +0000914dnl ---------------------------------------------------------------
915dnl figure out how to check link-state
916dnl ---------------------------------------------------------------
Andrew J. Schorr6418bed2008-01-11 16:33:59 +0000917AC_CHECK_HEADER([net/if.h],
918 [AC_CHECK_HEADER( [net/if_media.h],
919 [m4_define([LINK_DETECT_INCLUDES],
920 QUAGGA_INCLUDES
921 [#include <net/if_media.h>
922 ])
923 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
924 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
925 [], LINK_DETECT_INCLUDES)],
926 [],
927 QUAGGA_INCLUDES)],
928 [], QUAGGA_INCLUDES )
Andrew J. Schorrc543a172008-01-10 15:24:32 +0000929
Paul Jakma0df7c912008-07-21 21:02:49 +0000930dnl ------------------------
931dnl TCP_MD5SIG socket option
932dnl ------------------------
933
934AC_CHECK_HEADER([netinet/tcp.h],
935 [m4_define([MD5_INCLUDES],
936 QUAGGA_INCLUDES
937 [#include <netinet/tcp.h>
938 ])
939 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
940 [],
941 QUAGGA_INCLUDES)
942if test $ac_cv_have_decl_TCP_MD5SIG = no; then
943 AC_CHECK_HEADER([linux/tcp.h],
944 [m4_define([MD5_INCLUDES],
945 QUAGGA_INCLUDES
946 [#include <linux/tcp.h>
947 ])
948 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
949fi
950
paul7ea487b2003-03-17 02:05:07 +0000951dnl -----------------------
952dnl check proc file system.
953dnl -----------------------
Stephen Hemmingercadfb2c2008-08-16 18:03:44 +0100954if test "$netlink" != yes; then
955 if test -r /proc/net/dev; then
956 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
957 IF_PROC=if_proc.o
958 fi
959 if test -r /proc/net/if_inet6; then
960 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
961 IF_PROC=if_proc.o
962 fi
paul7ea487b2003-03-17 02:05:07 +0000963fi
964AC_SUBST(IF_PROC)
965
966dnl -----------------------------
967dnl check ipforward detect method
968dnl -----------------------------
969AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
970[for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
971do
972 test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
973done
974case $zebra_ipforward_path in
975 "/proc/net/snmp") IPFORWARD=ipforward_proc.o
976 zebra_ipforward_path="proc";;
977 "/dev/ip")
978 case "$host" in
979 *-nec-sysv4*) IPFORWARD=ipforward_ews.o
980 zebra_ipforward_path="ews";;
paul9c30ab62003-07-08 08:36:17 +0000981 *-freebsd*) IPFORWARD=ipforward_sysctl.o
982 zebra_ipforward_path="sysctl";;
paul7ea487b2003-03-17 02:05:07 +0000983 *) IPFORWARD=ipforward_solaris.o
984 zebra_ipforward_path="solaris";;
985 esac;;
986 *) IPFORWARD=ipforward_sysctl.o
987 zebra_ipforward_path="sysctl";;
988esac])
989AC_SUBST(IPFORWARD)
990
991AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
992
993dnl ----------
994dnl IPv6 check
995dnl ----------
996AC_MSG_CHECKING(whether does this OS have IPv6 stack)
997if test "${enable_ipv6}" = "no"; then
998 AC_MSG_RESULT(disabled)
999else
1000dnl ----------
1001dnl INRIA IPv6
1002dnl ----------
paula159ed92003-06-04 11:01:45 +00001003 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1004 zebra_cv_ipv6=yes
1005 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1006 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1007 RIPNGD="ripngd"
1008 OSPF6D="ospf6d"
1009 LIB_IPV6=""
1010 AC_MSG_RESULT(INRIA IPv6)
paul7ea487b2003-03-17 02:05:07 +00001011dnl ---------
1012dnl KAME IPv6
1013dnl ---------
paula159ed92003-06-04 11:01:45 +00001014 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1015 zebra_cv_ipv6=yes
1016 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1017 AC_DEFINE(KAME,1,KAME IPv6)
1018 RIPNGD="ripngd"
1019 OSPF6D="ospf6d"
1020 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
paul7ea487b2003-03-17 02:05:07 +00001021 LIB_IPV6="-L/usr/local/v6/lib -linet6"
paula159ed92003-06-04 11:01:45 +00001022 fi
1023 AC_MSG_RESULT(KAME)
hasso71c0fb52003-05-25 20:18:13 +00001024dnl -------------------------
1025dnl MUSICA IPv6
1026dnl default host check
1027dnl It is not used by Kheops
1028dnl -------------------------
paula159ed92003-06-04 11:01:45 +00001029 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1030 zebra_cv_ipv6=yes
1031 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1032 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1033 AC_DEFINE(KAME,1,KAME IPv6 stack)
1034 RIPNGD="ripngd"
1035 OSPF6D="ospf6d"
1036 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
hasso71c0fb52003-05-25 20:18:13 +00001037 LIB_IPV6="-L/usr/local/v6/lib -linet6"
paula159ed92003-06-04 11:01:45 +00001038 fi
1039 AC_MSG_RESULT(MUSICA)
paul7ea487b2003-03-17 02:05:07 +00001040dnl ---------
1041dnl NRL check
1042dnl ---------
paula159ed92003-06-04 11:01:45 +00001043 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1044 zebra_cv_ipv6=yes
1045 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1046 AC_DEFINE(NRL,1,NRL)
1047 RIPNGD="ripngd"
1048 OSPF6D="ospf6d"
1049 if test x"$opsys" = x"bsdi";then
paul7ea487b2003-03-17 02:05:07 +00001050 AC_DEFINE(BSDI_NRL,,BSDI)
1051 AC_MSG_RESULT(BSDI_NRL)
paula159ed92003-06-04 11:01:45 +00001052 else
paul7ea487b2003-03-17 02:05:07 +00001053 AC_MSG_RESULT(NRL)
paula159ed92003-06-04 11:01:45 +00001054 fi
paul19877dd2004-05-11 10:49:35 +00001055dnl ------------------------------------
1056dnl Solaris 9, 10 and potentially higher
1057dnl ------------------------------------
paulafd8a122005-03-12 06:36:10 +00001058 elif test x"$opsys" = x"sol8"; then
paul19877dd2004-05-11 10:49:35 +00001059 zebra_cv_ipv6=yes;
1060 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1061 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1062 RIPNGD="ripngd"
1063 OSPF6D="ospf6d"
1064 AC_MSG_RESULT(Solaris IPv6)
paul7ea487b2003-03-17 02:05:07 +00001065dnl ----------
1066dnl Linux IPv6
1067dnl ----------
paula159ed92003-06-04 11:01:45 +00001068 elif test "${enable_ipv6}" = "yes"; then
1069 AC_EGREP_CPP(yes, [
1070 #include <linux/version.h>
1071 /* 2.1.128 or later */
1072 #if LINUX_VERSION_CODE >= 0x020180
1073 yes
1074 #endif],
1075 [zebra_cv_ipv6=yes
1076 zebra_cv_linux_ipv6=yes
1077 AC_MSG_RESULT(Linux IPv6)])
1078 else
1079 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1080 then
paul7ea487b2003-03-17 02:05:07 +00001081 zebra_cv_ipv6=yes
1082 zebra_cv_linux_ipv6=yes
1083 AC_MSG_RESULT(Linux IPv6)
paula159ed92003-06-04 11:01:45 +00001084 fi
1085 fi
paul7ea487b2003-03-17 02:05:07 +00001086
paula159ed92003-06-04 11:01:45 +00001087 if test "$zebra_cv_linux_ipv6" = "yes";then
hasso850d39f2005-06-30 13:52:20 +00001088 AC_MSG_CHECKING(whether libc has IPv6 support)
1089 AC_TRY_LINK([#include <netinet/in.h>
1090 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1091 [AC_MSG_RESULT(yes)
1092 zebra_cv_ipv6=yes
1093 zebra_cv_linux_ipv6=yes],
1094 [AC_MSG_RESULT(no)
1095 zebra_cv_ipv6=no
1096 zebra_cv_linux_ipv6=no])
1097 fi
1098
1099 if test "$zebra_cv_linux_ipv6" = "yes";then
paula159ed92003-06-04 11:01:45 +00001100 AC_MSG_CHECKING(for GNU libc >= 2.1)
1101 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1102 AC_EGREP_CPP(yes, [
paul7ea487b2003-03-17 02:05:07 +00001103#include <features.h>
1104#if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1105 yes
paula159ed92003-06-04 11:01:45 +00001106#endif],
1107 [glibc=yes
1108 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1109 AC_MSG_RESULT(yes)],
1110 AC_MSG_RESULT(no)
1111 )
1112 RIPNGD="ripngd"
1113 OSPF6D="ospf6d"
1114 if test "$glibc" != "yes"; then
paul7ea487b2003-03-17 02:05:07 +00001115 INCLUDES="-I/usr/inet6/include"
1116 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1117 LIB_IPV6="-L/usr/inet6/lib -linet6"
1118 fi
paula159ed92003-06-04 11:01:45 +00001119 fi
1120 fi
paul7ea487b2003-03-17 02:05:07 +00001121
1122dnl -----------------------
1123dnl Set IPv6 related values
1124dnl -----------------------
paula159ed92003-06-04 11:01:45 +00001125 LIBS="$LIB_IPV6 $LIBS"
1126 AC_SUBST(LIB_IPV6)
paul7ea487b2003-03-17 02:05:07 +00001127
paula159ed92003-06-04 11:01:45 +00001128 if test x"$RIPNGD" = x""; then
1129 AC_MSG_RESULT(IPv4 only)
1130 fi
paul7ea487b2003-03-17 02:05:07 +00001131fi
1132
gdtfa3232e2003-12-03 17:52:30 +00001133dnl ------------------
1134dnl IPv6 header checks
1135dnl ------------------
1136if test "x${zebra_cv_ipv6}" = "xyes"; then
1137AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001138 netinet6/in6_var.h netinet6/nd6.h], [], [],
1139 QUAGGA_INCLUDES)
gdtfa3232e2003-12-03 17:52:30 +00001140fi
1141
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001142m4_define([QUAGGA_INCLUDES],dnl
1143QUAGGA_INCLUDES
1144[#if HAVE_NETINET6_IN6_H
1145#include <netinet6/in6.h>
1146#endif
1147#if HAVE_NETINET_IN6_VAR_H
1148#include <netinet/in6_var.h>
1149#endif
1150#if HAVE_NETINET_ICMP6_H
1151# include <netinet/icmp6.h>
1152#endif
1153#if HAVE_NETINET6_IN6_VAR_H
1154# include <netinet6/in6_var.h>
1155#endif
1156#if HAVE_NETINET6_ND6_H
Hasso Tepperfbf24542007-06-25 19:30:59 +00001157# include <netinet6/nd6.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001158#endif
1159])dnl
1160
paul7ea487b2003-03-17 02:05:07 +00001161dnl --------------------
1162dnl Daemon disable check
1163dnl --------------------
1164if test "${enable_zebra}" = "no";then
1165 ZEBRA=""
1166else
1167 ZEBRA="zebra"
1168fi
1169
1170if test "${enable_bgpd}" = "no";then
1171 BGPD=""
1172else
1173 BGPD="bgpd"
1174fi
1175
1176if test "${enable_ripd}" = "no";then
1177 RIPD=""
1178else
1179 RIPD="ripd"
1180fi
1181
1182if test "${enable_ospfd}" = "no";then
1183 OSPFD=""
1184else
1185 OSPFD="ospfd"
1186fi
1187
ajsd0199432004-12-22 14:03:52 +00001188if test "${enable_watchquagga}" = "no";then
1189 WATCHQUAGGA=""
1190else
1191 WATCHQUAGGA="watchquagga"
1192fi
1193
paul1ef74ef2003-03-21 15:16:05 +00001194OSPFCLIENT=""
1195if test "${enable_opaque_lsa}" = "yes"; then
1196 if test "${enable_ospfapi}" != "no";then
paul9a569842003-03-28 01:45:13 +00001197 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
paul1ef74ef2003-03-21 15:16:05 +00001198
1199 if test "${enable_ospfclient}" != "no";then
1200 OSPFCLIENT="ospfclient"
1201 fi
1202 fi
1203
paul7ea487b2003-03-17 02:05:07 +00001204fi
1205
1206case "${enable_ripngd}" in
1207 "yes") RIPNGD="ripngd";;
1208 "no" ) RIPNGD="";;
1209 * ) ;;
1210esac
1211
1212case "${enable_ospf6d}" in
1213 "yes") OSPF6D="ospf6d";;
1214 "no" ) OSPF6D="";;
1215 * ) ;;
1216esac
1217
jardin9e867fe2003-12-23 08:56:18 +00001218case "${enable_isisd}" in
1219 "yes") ISISD="isisd";;
1220 "no" ) ISISD="";;
hassoae399ab2004-09-13 20:22:18 +00001221 * ) ;;
jardin9e867fe2003-12-23 08:56:18 +00001222esac
1223
Greg Troxel97cee872007-08-02 13:36:56 +00001224# XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1225case "${enable_solaris}" in
1226 "yes") SOLARIS="solaris";;
1227 "no" ) SOLARIS="";;
1228 * ) ;;
1229esac
1230
paul7ea487b2003-03-17 02:05:07 +00001231if test "${enable_bgp_announce}" = "no";then
Paul Jakma750e8142008-07-22 21:11:48 +00001232 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1233else
1234 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
paul7ea487b2003-03-17 02:05:07 +00001235fi
1236
1237AC_SUBST(ZEBRA)
1238AC_SUBST(BGPD)
1239AC_SUBST(RIPD)
1240AC_SUBST(RIPNGD)
1241AC_SUBST(OSPFD)
1242AC_SUBST(OSPF6D)
ajsd0199432004-12-22 14:03:52 +00001243AC_SUBST(WATCHQUAGGA)
jardin9e867fe2003-12-23 08:56:18 +00001244AC_SUBST(ISISD)
Greg Troxel97cee872007-08-02 13:36:56 +00001245AC_SUBST(SOLARIS)
paul7ea487b2003-03-17 02:05:07 +00001246AC_SUBST(VTYSH)
1247AC_SUBST(INCLUDES)
1248AC_SUBST(CURSES)
1249AC_SUBST(OSPFCLIENT)
paul1ef74ef2003-03-21 15:16:05 +00001250AC_SUBST(OSPFAPI)
paul7ea487b2003-03-17 02:05:07 +00001251AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1252AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1253AC_CHECK_LIB(crypt, crypt)
1254AC_CHECK_LIB(resolv, res_init)
paul7ea487b2003-03-17 02:05:07 +00001255
1256dnl ---------------------------------------------------
1257dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1258dnl ---------------------------------------------------
paula159ed92003-06-04 11:01:45 +00001259AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1260AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1261AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
paul7ea487b2003-03-17 02:05:07 +00001262
1263dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001264dnl check system has PCRE regexp
1265dnl ---------------------------
1266if test "x$enable_pcreposix" = "xyes"; then
1267 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1268 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1269fi
1270
1271if test "x$enable_pcreposix" != "xyes"; then
1272dnl ---------------------------
paul7ea487b2003-03-17 02:05:07 +00001273dnl check system has GNU regexp
1274dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001275AC_MSG_CHECKING(whether system has GNU regex)
paul7ea487b2003-03-17 02:05:07 +00001276AC_CHECK_LIB(c, regexec,
1277[AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1278 LIB_REGEX=""],
1279[LIB_REGEX="regex.o"])
Jeremy Jackson25f45882009-01-12 16:06:12 -05001280fi
1281AC_SUBST(HAVE_LIBPCREPOSIX)
paul7ea487b2003-03-17 02:05:07 +00001282AC_SUBST(LIB_REGEX)
1283
1284dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001285dnl check Net-SNMP library
paul7ea487b2003-03-17 02:05:07 +00001286dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001287if test "${enable_snmp}" = "yes"; then
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +02001288 if test "$with_crypto" != "no"; then
1289 LIBS="${LIBS} -lcrypto";
1290 fi
paulb1fc9ac2006-01-31 10:09:27 +00001291 AC_CHECK_LIB(netsnmp, asn_parse_int,
1292 [AC_DEFINE(HAVE_NETSNMP,,Net SNMP)
1293 AC_DEFINE(HAVE_SNMP,,SNMP)
1294 LIBS="${LIBS} -lnetsnmp"],
1295 [AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])])
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +02001296
1297 AC_CHECK_HEADER([net-snmp/net-snmp-config.h],
1298 [],
1299 [AC_MSG_ERROR([--enable-snmp given, but cannot find net-snmp-config.h])],
1300 QUAGGA_INCLUDES)
paulb1fc9ac2006-01-31 10:09:27 +00001301 AC_SUBST(SNMP_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001302fi
1303
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001304dnl ---------------------------
1305dnl sockaddr and netinet checks
1306dnl ---------------------------
1307AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1308 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1309 socklen_t,
1310 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1311 struct nd_opt_adv_interval, struct rt_addrinfo,
Paul Jakma11770e12007-06-22 16:14:42 +00001312 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001313 [], [], QUAGGA_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001314
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001315AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1316 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1317 struct sockaddr_in6.sin6_scope_id,
1318 struct if6_aliasreq.ifra_lifetime,
1319 struct nd_opt_adv_interval.nd_opt_ai_type],
1320 [], [], QUAGGA_INCLUDES)
hasso71c0fb52003-05-25 20:18:13 +00001321
paul7ea487b2003-03-17 02:05:07 +00001322dnl ---------------------------
Paul Jakma11770e12007-06-22 16:14:42 +00001323dnl IRDP/pktinfo/icmphdr checks
paul7ea487b2003-03-17 02:05:07 +00001324dnl ---------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001325AC_CHECK_TYPES([struct in_pktinfo],
Paul Jakma11770e12007-06-22 16:14:42 +00001326 [AC_CHECK_TYPES([struct icmphdr],
1327 [if test "${enable_irdp}" != "no"; then
1328 AC_DEFINE(HAVE_IRDP,, IRDP)
1329 fi],
1330 [if test "${enable_irdp}" = "yes"; then
1331 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1332 fi], [QUAGGA_INCLUDES])],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001333 [if test "${enable_irdp}" = "yes"; then
1334 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1335 fi], [QUAGGA_INCLUDES])
vincent29c4c9b2005-03-25 13:05:47 +00001336
paul7ea487b2003-03-17 02:05:07 +00001337dnl --------------------------------------
1338dnl checking for getrusage struct and call
1339dnl --------------------------------------
1340AC_MSG_CHECKING(whether getrusage is available)
1341AC_TRY_COMPILE([#include <sys/resource.h>
1342],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1343[AC_MSG_RESULT(yes)
1344 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1345 AC_MSG_RESULT(no))
1346
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001347dnl --------------------------------------
1348dnl checking for clock_time monotonic struct and call
1349dnl --------------------------------------
Paul Jakma6511cab2009-06-18 17:38:01 +01001350AC_CHECK_DECL(CLOCK_MONOTONIC,
1351 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1352 AC_DEFINE(HAVE_MONOTONIC_CLOCK,, Have monotonic clock)
1353], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001354
pauledd7c242003-06-04 13:59:38 +00001355dnl -------------------
1356dnl capabilities checks
1357dnl -------------------
hasso41d3fc92004-04-06 11:59:00 +00001358if test "${enable_capabilities}" != "no"; then
1359 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1360 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1361 [AC_MSG_RESULT(yes)
1362 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1363 quagga_ac_keepcaps="yes"],
1364 AC_MSG_RESULT(no)
pauledd7c242003-06-04 13:59:38 +00001365 )
hasso41d3fc92004-04-06 11:59:00 +00001366 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1367 AC_CHECK_HEADERS(sys/capability.h)
1368 fi
1369 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1370 AC_CHECK_LIB(cap, cap_init,
1371 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1372 LIBCAP="-lcap"
paulceacedb2005-09-29 14:39:32 +00001373 quagga_ac_lcaps="yes"]
hasso41d3fc92004-04-06 11:59:00 +00001374 )
paulceacedb2005-09-29 14:39:32 +00001375 else
1376 AC_CHECK_HEADERS(priv.h,
1377 [AC_MSG_CHECKING(Solaris style privileges are available)
1378 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1379 [AC_MSG_RESULT(yes)
1380 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1381 quagga_ac_scaps="yes"],
1382 AC_MSG_RESULT(no)
1383 )
1384 ]
1385 )
1386 fi
1387 if test x"${quagga_ac_scaps}" = x"yes" \
1388 -o x"${quagga_ac_lcaps}" = x"yes"; then
1389 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
hasso41d3fc92004-04-06 11:59:00 +00001390 fi
pauledd7c242003-06-04 13:59:38 +00001391fi
1392AC_SUBST(LIBCAP)
1393
paulfb2d1502003-06-04 09:40:54 +00001394dnl ---------------------------
1395dnl check for glibc 'backtrace'
1396dnl ---------------------------
1397if test "${glibc}" = "yes"; then
Paul Jakmafb66b292006-05-28 08:26:15 +00001398 AC_CHECK_HEADER([execinfo.h],
1399 [AC_CHECK_FUNC([backtrace],
1400 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1401 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1402 ])
1403 ])
paulfb2d1502003-06-04 09:40:54 +00001404fi
1405
Paul Jakma41be32b2006-03-30 13:53:59 +00001406dnl -----------------------------------------
1407dnl check for malloc mallinfo struct and call
1408dnl this must try and link using LIBS, in
1409dnl order to check no alternative allocator
1410dnl has been specified, which might not provide
1411dnl mallinfo, e.g. such as Umem on Solaris.
1412dnl -----------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001413AC_CHECK_HEADER([malloc.h],
Paul Jakma41be32b2006-03-30 13:53:59 +00001414 [AC_MSG_CHECKING(whether mallinfo is available)
1415 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1416 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1417 [AC_MSG_RESULT(yes)
1418 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1419 AC_MSG_RESULT(no)
1420 )
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001421 ], [], QUAGGA_INCLUDES)
Paul Jakma41be32b2006-03-30 13:53:59 +00001422
paul408ad942003-05-20 00:03:33 +00001423dnl ----------
1424dnl configure date
1425dnl ----------
1426CONFDATE=`date '+%Y%m%d'`
1427AC_SUBST(CONFDATE)
1428
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001429dnl Conditionally enable PIE support for GNU toolchains.
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001430AC_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 +01001431if test "$enable_pie" != "no"; then
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001432 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1433 save_CFLAGS=$CFLAGS
1434 save_LDFLAGS=$LDFLAGS
1435 CFLAGS="$CFLAGS -fPIE"
1436 LDFLAGS="$LDFLAGS -pie"
1437 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1438 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1439 )
1440 CFLAGS=$save_CFLAGS
1441 LDFLAGS=$save_LDFLAGS
1442 ])
1443 if test "$ap_cv_cc_pie" = "yes"; then
1444 PICFLAGS="-fPIE"
1445 PILDFLAGS="-pie"
1446 fi
1447fi
1448
1449AC_SUBST(PICFLAGS)
1450AC_SUBST(PILDFLAGS)
1451
paul7ea487b2003-03-17 02:05:07 +00001452dnl ------------------------------
paula159ed92003-06-04 11:01:45 +00001453dnl set paths for state directory
paul23bd12c2003-04-07 06:11:09 +00001454dnl ------------------------------
1455if test "${prefix}" = "NONE"; then
paule8f29842003-08-12 13:08:31 +00001456 quagga_statedir_prefix="";
paul23bd12c2003-04-07 06:11:09 +00001457else
paule8f29842003-08-12 13:08:31 +00001458 quagga_statedir_prefix=${prefix}
paul23bd12c2003-04-07 06:11:09 +00001459fi
1460if test "${localstatedir}" = '${prefix}/var'; then
paula159ed92003-06-04 11:01:45 +00001461 AC_CACHE_CHECK(state directory,ac_statedir,
paule8f29842003-08-12 13:08:31 +00001462 [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1463 ${quagga_statedir_prefix}/var/adm dnl
1464 ${quagga_statedir_prefix}/etc dnl
paula159ed92003-06-04 11:01:45 +00001465 /var/run dnl
1466 /var/adm dnl
1467 /etc dnl
1468 /dev/null;
paul23bd12c2003-04-07 06:11:09 +00001469 do
paule8f29842003-08-12 13:08:31 +00001470 test -d $QUAGGA_STATE_DIR && break
paul23bd12c2003-04-07 06:11:09 +00001471 done
paule8f29842003-08-12 13:08:31 +00001472 quagga_statedir=$QUAGGA_STATE_DIR])
paul23bd12c2003-04-07 06:11:09 +00001473else
paule8f29842003-08-12 13:08:31 +00001474 quagga_statedir=${localstatedir}
paula159ed92003-06-04 11:01:45 +00001475 AC_MSG_CHECKING(directory to use for state file)
paule8f29842003-08-12 13:08:31 +00001476 AC_MSG_RESULT(${quagga_statedir})
paul26275b02005-04-11 07:10:47 +00001477 AC_SUBST(quagga_statedir)
paul23bd12c2003-04-07 06:11:09 +00001478fi
paule8f29842003-08-12 13:08:31 +00001479if test $quagga_statedir = "/dev/null"; then
paula159ed92003-06-04 11:01:45 +00001480 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1481fi
1482
paule8f29842003-08-12 13:08:31 +00001483AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1484AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1485AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1486AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1487AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1488AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
jardin9e867fe2003-12-23 08:56:18 +00001489AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
ajsd0199432004-12-22 14:03:52 +00001490AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
paule8f29842003-08-12 13:08:31 +00001491AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1492AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1493AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1494AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1495AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1496AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1497AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
jardin9e867fe2003-12-23 08:56:18 +00001498AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
ajs515210b2004-12-22 15:35:12 +00001499AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
paul7ea487b2003-03-17 02:05:07 +00001500
paul1eb8ef22005-04-07 07:30:20 +00001501dnl -------------------------------
1502dnl Quagga sources should always be
1503dnl current wrt interfaces. Dont
1504dnl allow deprecated interfaces to
1505dnl be exposed.
1506dnl -------------------------------
1507AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1508
paul7ea487b2003-03-17 02:05:07 +00001509dnl ---------------------------
1510dnl Check htonl works correctly
1511dnl ---------------------------
1512AC_MSG_CHECKING(for working htonl)
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001513AC_CACHE_VAL(ac_cv_htonl_works,
1514 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1515 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1516 ]
1517)
paul7ea487b2003-03-17 02:05:07 +00001518AC_MSG_RESULT($ac_cv_htonl_works)
1519
paul14c17fd2004-11-07 22:34:23 +00001520AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
ajsd0199432004-12-22 14:03:52 +00001521 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
jardin9e867fe2003-12-23 08:56:18 +00001522 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
paul14c17fd2004-11-07 22:34:23 +00001523 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
gdt69f1fc22004-08-27 15:57:35 +00001524 pkgsrc/Makefile
paul670bbf12004-11-12 09:05:00 +00001525 redhat/quagga.spec
gdtb7a97f82004-07-23 16:23:56 +00001526 lib/version.h
paul14c17fd2004-11-07 22:34:23 +00001527 doc/defines.texi
hassof695b012005-04-02 19:03:39 +00001528 isisd/topology/Makefile
gdtcbd04082004-08-31 18:16:36 +00001529 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
paulf31293a2004-11-12 09:27:04 +00001530 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
paul26275b02005-04-11 07:10:47 +00001531AC_CONFIG_FILES([solaris/Makefile])
1532
paul670bbf12004-11-12 09:05:00 +00001533AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
hasso48577192004-11-19 06:41:49 +00001534## Hack, but working solution to avoid rebuilding of quagga.info.
1535## It's already in CVS until texinfo 4.7 is more common.
paul14c17fd2004-11-07 22:34:23 +00001536AC_OUTPUT
paul7ea487b2003-03-17 02:05:07 +00001537
1538echo "
hassoc89f6492004-08-26 12:21:28 +00001539Quagga configuration
1540--------------------
1541quagga version : ${PACKAGE_VERSION}
paul7ea487b2003-03-17 02:05:07 +00001542host operationg system : ${host_os}
1543source code location : ${srcdir}
1544compiler : ${CC}
1545compiler flags : ${CFLAGS}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001546make : ${MAKE-make}
hasso2d582282005-03-28 15:29:07 +00001547includes : ${INCLUDES} ${SNMP_INCLUDES}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001548linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
paule8f29842003-08-12 13:08:31 +00001549state file directory : ${quagga_statedir}
pauldc7a2bf2003-10-22 00:07:44 +00001550config file directory : `eval echo \`echo ${sysconfdir}\``
gdtd6b72f72003-12-03 17:24:27 +00001551example directory : `eval echo \`echo ${exampledir}\``
paul8d4aee52003-06-06 00:30:35 +00001552user to run as : ${enable_user}
1553group to run as : ${enable_group}
1554group for vty sockets : ${enable_vty_group}
gdtaa593d52003-12-22 20:15:53 +00001555config file mask : ${enable_configfile_mask}
1556log file mask : ${enable_logfile_mask}
pauldc7a2bf2003-10-22 00:07:44 +00001557
1558The above user and group must have read/write access to the state file
Paul Jakma105b8232006-05-28 08:02:41 +00001559directory and to the config files in the config file directory."
1560
1561if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1562Warning: The ${MAKE-make} programme detected, either in your path or
1563via the MAKE variable, is not GNU Make. GNU make may be installed as
1564gmake on some systems. and is required to complete a build of Quagga
1565" > /dev/stderr
1566fi