blob: 9e958b1c3818977f8cd973a9511fa725fccfc07a [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
Denis Ovsienko878715c2011-07-12 17:14:13 +040011AC_INIT(Quagga, 0.99.17.1, [https://bugzilla.quagga.net])
paulfa1253d2003-09-24 05:09:26 +000012AC_CONFIG_SRCDIR(lib/zebra.h)
Paul Jakma62c9f502009-07-19 17:33:21 +010013AC_CONFIG_MACRO_DIR([m4])
ajsdfb9a542005-04-11 14:55:55 +000014
15dnl -----------------------------------
16dnl Get hostname and other information.
17dnl -----------------------------------
18AC_CANONICAL_BUILD()
19AC_CANONICAL_HOST()
20AC_CANONICAL_TARGET()
21
gdt81b81822004-04-07 22:48:47 +000022AM_INIT_AUTOMAKE(1.6)
paul7ea487b2003-03-17 02:05:07 +000023AM_CONFIG_HEADER(config.h)
24
Jeremy Jackson7ec57362009-01-21 22:10:40 -050025AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
26if test "x$GAWK" = "xnot-in-PATH" ; then
27 AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
28BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
29fi
paul03ecfb62005-04-16 15:38:23 +000030AC_ARG_VAR([GAWK],[GNU AWK])
31
gdtd6b72f72003-12-03 17:24:27 +000032dnl default is to match previous behavior
gdtc4f0efe2003-12-04 15:39:25 +000033exampledir=${sysconfdir}
gdtd6b72f72003-12-03 17:24:27 +000034AC_ARG_ENABLE([exampledir],
35 AC_HELP_STRING([--enable-exampledir],
36 [specify alternate directory for examples]),
37 exampledir="$enableval",)
gdtc4f0efe2003-12-04 15:39:25 +000038dnl XXX add --exampledir to autoconf standard directory list somehow
gdtd6b72f72003-12-03 17:24:27 +000039AC_SUBST(exampledir)
40
gdtcbd04082004-08-31 18:16:36 +000041dnl default is to match previous behavior
42pkgsrcrcdir=""
43pkgsrcdir=""
44AC_ARG_ENABLE([pkgsrcrcdir],
45 AC_HELP_STRING([--enable-pkgsrcrcdir],
46 [specify directory for rc.d scripts]),
47 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
48dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
49AC_SUBST(pkgsrcdir)
50AC_SUBST(pkgsrcrcdir)
51
paul7ea487b2003-03-17 02:05:07 +000052dnl ------------
53dnl Check CFLAGS
54dnl ------------
55AC_ARG_WITH(cflags,
56[ --with-cflags Set CFLAGS for use in compilation.])
57if test "x$with_cflags" != "x" ; then
58 CFLAGS="$with_cflags" ; cflags_specified=yes ;
59elif test -n "$CFLAGS" ; then
60 cflags_specified=yes ;
61fi
62
hasso1969e4b2005-03-27 13:07:23 +000063dnl --------------------
64dnl Check CC and friends
65dnl --------------------
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +010066AC_LANG([C])
paul7ea487b2003-03-17 02:05:07 +000067AC_PROG_CC
hasso1969e4b2005-03-27 13:07:23 +000068AC_PROG_CPP
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +010069AM_PROG_CC_C_O
hasso1969e4b2005-03-27 13:07:23 +000070AC_PROG_EGREP
Greg Troxel553bdfe2007-02-06 20:10:35 +000071
72dnl autoconf 2.59 appears not to support AC_PROG_SED
73dnl AC_PROG_SED
74AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
hasso1969e4b2005-03-27 13:07:23 +000075
76dnl ------------------------------------------------------------------
77dnl Intel compiler check. Although Intel tries really hard to make icc
78dnl look like gcc, there are some differences. It's very verbose with
79dnl -Wall and it doesn't support the individual -W options.
80dnl ------------------------------------------------------------------
paul6a4b8832005-11-26 08:28:00 +000081if test "x${GCC}" = "xyes" ; then
82 COMPILER="GCC"
83 AC_MSG_CHECKING([whether we are using the Intel compiler])
84 AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
85 [AC_MSG_RESULT([no])],
86 [COMPILER="ICC"
87 AC_MSG_RESULT([yes])]
88 )
89else
90 AC_MSG_CHECKING([whether we are using SunPro compiler])
91 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
92 [AC_MSG_RESULT([no])],
93 [COMPILER="SUNPRO"
94 AC_MSG_RESULT([yes])]
95 )
96fi
paul7ea487b2003-03-17 02:05:07 +000097
paula49c0ff2004-09-30 06:08:58 +000098dnl ---------------------------------------------
paul7ea487b2003-03-17 02:05:07 +000099dnl If CLFAGS doesn\'t exist set default value
paula49c0ff2004-09-30 06:08:58 +0000100dnl AC_PROG_CC will have set minimal default
101dnl already, eg "-O2 -g" for gcc, "-g" for others
paul27eebb32004-07-22 18:16:59 +0000102dnl (Wall is gcc specific... have to make sure
103dnl gcc is being used before setting it)
104dnl
paul6a4b8832005-11-26 08:28:00 +0000105dnl Intel icc 8.0 also sets __GNUC__,
106dnl but doesn't support all these fancy -W options.
hasso1969e4b2005-03-27 13:07:23 +0000107dnl Intel compiler warnings we ignore:
108dnl 279: controlling expression is constant.
109dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
110dnl about "self", "vty", "argc" and "argv" never referenced in DEFUN
111dnl macro.
112dnl 981: operands are evaluated in unspecified order.
paul6a4b8832005-11-26 08:28:00 +0000113dnl
114dnl Sun Studio 10 / SunPro 5.7 is also supported,
115dnl so lets set some sane CFLAGS for it.
116dnl ---------------------------------------------
hasso1969e4b2005-03-27 13:07:23 +0000117
paul6a4b8832005-11-26 08:28:00 +0000118AC_MSG_CHECKING([whether to set a default CFLAGS])
119if test "x${cflags_specified}" = "x" ; then
120 case ${COMPILER} in
121 "ICC")
122 CFLAGS="-Os -g -Wall -wd 279,869,981"
123 AC_MSG_RESULT([Intel default])
124 ;;
125 "GCC")
Andrew J. Schorr5fa05092007-04-30 19:14:08 +0000126 CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
paul6a4b8832005-11-26 08:28:00 +0000127 CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
128 CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
129 CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
130 CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
131 # TODO: conditionally addd -Wpacked if handled
132 AC_MSG_RESULT([gcc default])
133 ;;
134 "SUNPRO")
Paul Jakma105b8232006-05-28 08:02:41 +0000135 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
paul6a4b8832005-11-26 08:28:00 +0000136 AC_MSG_RESULT([SunPro default])
137 ;;
138 *)
139 AC_MSG_RESULT([unknown compiler])
140 ;;
141 esac
142else
143 AC_MSG_RESULT([CFLAGS supplied by user])
hasso1969e4b2005-03-27 13:07:23 +0000144fi
145
paul7ea487b2003-03-17 02:05:07 +0000146dnl --------------
147dnl Check programs
148dnl --------------
paul7ea487b2003-03-17 02:05:07 +0000149AC_PROG_INSTALL
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000150AC_PROG_LN_S
paul7ea487b2003-03-17 02:05:07 +0000151AC_PROG_MAKE_SET
152AC_CHECK_TOOL(AR, ar)
paul7ea487b2003-03-17 02:05:07 +0000153
Paul Jakma105b8232006-05-28 08:02:41 +0000154dnl ---------------------------
155dnl We, perhaps unfortunately,
156dnl depend on GNU Make specific
157dnl constructs.
158dnl Give the user a warning if
159dnl not GNU Make.
160dnl ---------------------------
161AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
162 [quagga_cv_gnu_make=no
163 if ${MAKE-make} --version 2>/dev/null | \
164 grep '^GNU Make ' >/dev/null ; then
165 quagga_cv_gnu_make=yes;
166 fi
167 ]
168)
169
Paul Jakmad46d2a22007-05-10 16:53:04 +0000170dnl -----------------
171dnl System extensions
172dnl -----------------
Paul Jakmad46d2a22007-05-10 16:53:04 +0000173AC_GNU_SOURCE
paul7ea487b2003-03-17 02:05:07 +0000174
gdt87efd642004-06-30 17:36:11 +0000175dnl -------
176dnl libtool
177dnl -------
paul0fc42942004-08-19 04:41:21 +0000178AC_PROG_LIBTOOL
gdt87efd642004-06-30 17:36:11 +0000179
paul7ea487b2003-03-17 02:05:07 +0000180dnl ----------------------
181dnl Packages configuration
182dnl ----------------------
183AC_ARG_ENABLE(vtysh,
gdtfc9d0742004-06-30 14:25:12 +0000184[ --enable-vtysh include integrated vty shell for Quagga])
paul7ea487b2003-03-17 02:05:07 +0000185AC_ARG_ENABLE(ipv6,
186[ --disable-ipv6 turn off IPv6 related features and daemons])
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +0100187AC_ARG_ENABLE(doc,
188[ --disable-doc do not build docs])
paul7ea487b2003-03-17 02:05:07 +0000189AC_ARG_ENABLE(zebra,
190[ --disable-zebra do not build zebra daemon])
191AC_ARG_ENABLE(bgpd,
192[ --disable-bgpd do not build bgpd])
193AC_ARG_ENABLE(ripd,
194[ --disable-ripd do not build ripd])
195AC_ARG_ENABLE(ripngd,
196[ --disable-ripngd do not build ripngd])
197AC_ARG_ENABLE(ospfd,
198[ --disable-ospfd do not build ospfd])
paul7ea487b2003-03-17 02:05:07 +0000199AC_ARG_ENABLE(ospf6d,
200[ --disable-ospf6d do not build ospf6d])
ajsd0199432004-12-22 14:03:52 +0000201AC_ARG_ENABLE(watchquagga,
202[ --disable-watchquagga do not build watchquagga])
jardin9e867fe2003-12-23 08:56:18 +0000203AC_ARG_ENABLE(isisd,
hassoae399ab2004-09-13 20:22:18 +0000204[ --enable-isisd build isisd])
Greg Troxel97cee872007-08-02 13:36:56 +0000205AC_ARG_ENABLE(solaris,
206[ --enable-solaris build solaris])
paul7ea487b2003-03-17 02:05:07 +0000207AC_ARG_ENABLE(bgp-announce,
208[ --disable-bgp-announce, turn off BGP route announcement])
209AC_ARG_ENABLE(netlink,
210[ --enable-netlink force to use Linux netlink interface])
211AC_ARG_ENABLE(broken-aliases,
212[ --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +0200213AC_ARG_WITH(crypto,
214[ --without-crypto do not use libcrypto in SNMP])
paul7ea487b2003-03-17 02:05:07 +0000215AC_ARG_ENABLE(snmp,
216[ --enable-snmp enable SNMP support])
217AC_ARG_WITH(libpam,
218[ --with-libpam use libpam for PAM support in vtysh])
hasso71c0fb52003-05-25 20:18:13 +0000219AC_ARG_ENABLE(tcp-zebra,
paul7ea487b2003-03-17 02:05:07 +0000220[ --enable-tcp-zebra enable TCP/IP socket connection between zebra and protocol daemon])
paul7ea487b2003-03-17 02:05:07 +0000221AC_ARG_ENABLE(opaque-lsa,
paul1ef74ef2003-03-21 15:16:05 +0000222[ --enable-opaque-lsa enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
223AC_ARG_ENABLE(ospfapi,
224[ --disable-ospfapi do not build OSPFAPI to access the OSPF LSA Database,
225 (this is the default if --enable-opaque-lsa is not set)])
226AC_ARG_ENABLE(ospfclient,
227[ --disable-ospfclient do not build OSPFAPI client for OSPFAPI,
228 (this is the default if --disable-ospfapi is set)])
paul7ea487b2003-03-17 02:05:07 +0000229AC_ARG_ENABLE(ospf-te,
230[ --enable-ospf-te enable Traffic Engineering Extension to OSPF])
231AC_ARG_ENABLE(multipath,
232[ --enable-multipath=ARG enable multipath function, ARG must be digit])
Paul P Komkoff Jrfe86b482008-08-13 16:56:05 +0100233AC_ARG_ENABLE(user,
234 AC_HELP_STRING([--enable-user=user], [user to run Quagga suite as (default quagga)]))
235AC_ARG_ENABLE(group,
236 AC_HELP_STRING([--enable-group=group], [group to run Quagga suite as (default quagga)]))
pauledd7c242003-06-04 13:59:38 +0000237AC_ARG_ENABLE(vty_group,
paul6b6942f2004-10-22 04:55:05 +0000238[ --enable-vty-group=ARG set vty sockets to have specified group as owner])
gdtaa593d52003-12-22 20:15:53 +0000239AC_ARG_ENABLE(configfile_mask,
240[ --enable-configfile-mask=ARG set mask for config files])
241AC_ARG_ENABLE(logfile_mask,
242[ --enable-logfile-mask=ARG set mask for log files])
pauledd7c242003-06-04 13:59:38 +0000243
hasso71c0fb52003-05-25 20:18:13 +0000244AC_ARG_ENABLE(rtadv,
paul6b6942f2004-10-22 04:55:05 +0000245[ --disable-rtadv disable IPV6 router advertisement feature])
hassoca776982004-06-12 14:33:05 +0000246AC_ARG_ENABLE(irdp,
paul6b6942f2004-10-22 04:55:05 +0000247[ --enable-irdp enable IRDP server support in zebra])
hassof695b012005-04-02 19:03:39 +0000248AC_ARG_ENABLE(isis_topology,
249[ --enable-isis-topology enable IS-IS topology generator])
hasso41d3fc92004-04-06 11:59:00 +0000250AC_ARG_ENABLE(capabilities,
251[ --disable-capabilities disable using POSIX capabilities])
paul6b6942f2004-10-22 04:55:05 +0000252AC_ARG_ENABLE(gcc_ultra_verbose,
253[ --enable-gcc-ultra-verbose enable ultra verbose GCC warnings])
Paul Jakma3453a712009-06-12 14:21:02 +0100254AC_ARG_ENABLE(linux24_tcp_md5,
255[ --enable-linux24-tcp-md5 enable support for old, Linux-2.4 RFC2385 patch])
ajs3cade262004-12-29 17:50:22 +0000256AC_ARG_ENABLE(gcc-rdynamic,
257[ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
ajs924b9222005-04-16 17:11:24 +0000258AC_ARG_ENABLE(time-check,
259[ --disable-time-check disable slow thread warning messages])
Jeremy Jackson25f45882009-01-12 16:06:12 -0500260AC_ARG_ENABLE(pcreposix,
261[ --enable-pcreposix enable using PCRE Posix libs for regex functions])
paul6b6942f2004-10-22 04:55:05 +0000262
263if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
264 CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
265 CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
266 CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
267 CFLAGS="${CFLAGS} -Wpacked -Wpadded"
268fi
paul7ea487b2003-03-17 02:05:07 +0000269
ajs3cade262004-12-29 17:50:22 +0000270if test x"${enable_gcc_rdynamic}" = x"yes" ; then
271 LDFLAGS="${LDFLAGS} -rdynamic"
272fi
273
ajs924b9222005-04-16 17:11:24 +0000274if test x"${enable_time_check}" != x"no" ; then
275 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
276 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
277 else
278 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
279 fi
280fi
281
paul7ea487b2003-03-17 02:05:07 +0000282if test "${enable_broken_aliases}" = "yes"; then
283 if test "${enable_netlink}" = "yes"
284 then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000285 AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
paul7ea487b2003-03-17 02:05:07 +0000286 fi
287 AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
288 enable_netlink=no
289fi
290
291if test "${enable_tcp_zebra}" = "yes"; then
292 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
293fi
294
paul7ea487b2003-03-17 02:05:07 +0000295if test "${enable_opaque_lsa}" = "yes"; then
296 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
297fi
298
299if test "${enable_ospf_te}" = "yes"; then
300 AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
301 AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
302fi
303
Paul Jakma3453a712009-06-12 14:21:02 +0100304if test "${enable_linux24_tcp_md5}" = "yes"; then
305 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
306fi
307
gdtd2a0ccc2003-12-03 18:13:48 +0000308AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
309if test "${enable_rtadv}" != "no"; then
hasso71c0fb52003-05-25 20:18:13 +0000310 AC_MSG_RESULT(yes)
gdtd2a0ccc2003-12-03 18:13:48 +0000311 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
paul2487bea2003-05-25 23:51:31 +0000312else
313 AC_MSG_RESULT(no)
hasso71c0fb52003-05-25 20:18:13 +0000314fi
paul7ea487b2003-03-17 02:05:07 +0000315
hassoca776982004-06-12 14:33:05 +0000316if test "${enable_irdp}" = "yes"; then
317 AC_DEFINE(HAVE_IRDP,, IRDP )
318fi
319
hassof695b012005-04-02 19:03:39 +0000320if test "${enable_isisd}" = "yes" && test "${enable_isis_topology}" = yes; then
321 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
322 ISIS_TOPOLOGY_INCLUDES="-I./topology"
323 ISIS_TOPOLOGY_DIR="topology"
324 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
325fi
326
327AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
328AC_SUBST(ISIS_TOPOLOGY_DIR)
329AC_SUBST(ISIS_TOPOLOGY_LIB)
330
paul79cb2162003-06-06 12:19:53 +0000331if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
paule8f29842003-08-12 13:08:31 +0000332 enable_user="quagga"
pauledd7c242003-06-04 13:59:38 +0000333elif test "${enable_user}" = "no"; then
334 enable_user="root"
335fi
pauledd7c242003-06-04 13:59:38 +0000336
paul79cb2162003-06-06 12:19:53 +0000337if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
paule8f29842003-08-12 13:08:31 +0000338 enable_group="quagga"
pauledd7c242003-06-04 13:59:38 +0000339elif test "${enable_group}" = "no"; then
340 enable_group="root"
341fi
pauledd7c242003-06-04 13:59:38 +0000342
343if test x"${enable_vty_group}" = x"yes" ; then
paul8d4aee52003-06-06 00:30:35 +0000344 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
paul79cb2162003-06-06 12:19:53 +0000345elif test x"${enable_vty_group}" != x""; then
paul8d4aee52003-06-06 00:30:35 +0000346 if test x"${enable_vty_group}" != x"no"; then
pauledd7c242003-06-04 13:59:38 +0000347 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
348 fi
349fi
paul26275b02005-04-11 07:10:47 +0000350AC_SUBST([enable_user])
351AC_SUBST([enable_group])
352AC_SUBST([enable_vty_group])
353AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
354AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
pauledd7c242003-06-04 13:59:38 +0000355
gdtaa593d52003-12-22 20:15:53 +0000356enable_configfile_mask=${enable_configfile_mask:-0600}
357AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
358
359enable_logfile_mask=${enable_logfile_mask:-0600}
360AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
361
paul7ea487b2003-03-17 02:05:07 +0000362MULTIPATH_NUM=1
363
364case "${enable_multipath}" in
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000365 [[0-9]|[1-9][0-9]])
paul7ea487b2003-03-17 02:05:07 +0000366 MULTIPATH_NUM="${enable_multipath}"
367 ;;
368 "")
369 ;;
370 *)
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000371 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
paul7ea487b2003-03-17 02:05:07 +0000372 ;;
373esac
374
paul7ea487b2003-03-17 02:05:07 +0000375AC_SUBST(MULTIPATH_NUM)
376
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000377dnl ------------------------------------
378dnl Check C keywords and standard types
379dnl ------------------------------------
380AC_C_CONST
381AC_C_INLINE
382AC_C_RESTRICT
383AC_C_VOLATILE
pauldc7a2bf2003-10-22 00:07:44 +0000384AC_HEADER_STDC
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000385AC_HEADER_TIME
386AC_HEADER_SYS_WAIT
387dnl AC_TYPE_PID_T
388AC_TYPE_UID_T
389AC_TYPE_MODE_T
390AC_TYPE_SIZE_T
391AC_TYPE_SIGNAL
392AC_STRUCT_TM
pauldc7a2bf2003-10-22 00:07:44 +0000393
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000394dnl -------------------------
395dnl Check other header files.
396dnl -------------------------
397AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
398 sys/types.h linux/version.h netdb.h asm/types.h \
399 sys/param.h limits.h signal.h libutil.h \
Paul Jakma6511cab2009-06-18 17:38:01 +0100400 sys/socket.h netinet/in.h time.h sys/time.h])
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000401
402dnl Utility macro to avoid retyping includes all the time
403m4_define([QUAGGA_INCLUDES],
404[#ifdef SUNOS_5
405#define _XPG4_2
406#define __EXTENSIONS__
407#endif
408#include <stdio.h>
409#if STDC_HEADERS
410# include <stdlib.h>
411# include <stddef.h>
412#else
413# if HAVE_STDLIB_H
414# include <stdlib.h>
415# endif
416#endif
417#if HAVE_SYS_TYPES_H
418# include <sys/types.h>
419#endif
420/* sys/conf.h depends on param.h on FBSD at least */
421#if HAVE_SYS_PARAM_H
422# include <sys/param.h>
423#endif
424/* Required for MAXSIG */
425#if HAVE_SIGNAL_H
426# include <signal.h>
427#endif
428#if HAVE_SYS_SOCKET_H
429# include <sys/socket.h>
430#endif
431#if HAVE_NETINET_IN_H
432# include <netinet/in.h>
433#endif
Paul Jakma6511cab2009-06-18 17:38:01 +0100434#ifdef TIME_WITH_SYS_TIME
435# include <sys/time.h>
436# include <time.h>
437#else
438# ifdef HAVE_SYS_TIME_H
439# include <sys/time.h>
440# else
441# include <time.h>
442# endif
443#endif /* TIME_WITH_SYS_TIME */
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000444])dnl
445
Denis Ovsienko51122332011-07-14 16:30:08 +0400446dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
447dnl round below execution begins, otherwise it doesn't properly detect
448dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
449dnl on FreeBSD (BZ#408).
450
451AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
452
453m4_define([QUAGGA_INCLUDES],
454QUAGGA_INCLUDES
455[#if HAVE_NET_IF_H
456# include <net/if.h>
457#endif
458])dnl
459
460dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
461dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
462dnl an additional round for it.
463
464AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
465
466m4_define([QUAGGA_INCLUDES],
467QUAGGA_INCLUDES
468[#if HAVE_NET_IF_VAR_H
469# include <net/if_var.h>
470#endif
471])dnl
472
473AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
474 net/if_dl.h net/netopt.h net/route.h \
Paul Jakma11770e12007-06-22 16:14:42 +0000475 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000476 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
477 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
478 [], [], QUAGGA_INCLUDES)
479
480AC_CHECK_HEADERS([ucontext.h], [], [],
481[#ifndef __USE_GNU
482#define __USE_GNU
483#endif /* __USE_GNU */
484QUAGGA_INCLUDES
485])
486
487m4_define([QUAGGA_INCLUDES],
488QUAGGA_INCLUDES
Denis Ovsienko51122332011-07-14 16:30:08 +0400489[#if HAVE_SYS_UN_H
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000490# include <sys/un.h>
491#endif
492#if HAVE_NETINET_IN_SYSTM_H
493# include <netinet/in_systm.h>
494#endif
495#if HAVE_NETINET_IN_VAR_H
496# include <netinet/in_var.h>
497#endif
498#if HAVE_NET_IF_DL_H
499# include <net/if_dl.h>
500#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000501#if HAVE_NET_NETOPT_H
502# include <net/netopt.h>
503#endif
504#if HAVE_NET_ROUTE_H
505# include <net/route.h>
506#endif
507#if HAVE_INET_ND_H
508# include <inet/nd.h>
509#endif
510#if HAVE_ARPA_INET_H
511# include <arpa/inet.h>
512#endif
Paul Jakma11770e12007-06-22 16:14:42 +0000513/* Required for IDRP */
514#if HAVE_NETINET_IP_ICMP_H
515# include <netinet/ip_icmp.h>
516#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000517])dnl
pauldc7a2bf2003-10-22 00:07:44 +0000518
gdtfa3232e2003-12-03 17:52:30 +0000519dnl V6 headers are checked below, after we check for v6
paul7ea487b2003-03-17 02:05:07 +0000520
paul7ea487b2003-03-17 02:05:07 +0000521dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
522case "$host" in
paulafd8a122005-03-12 06:36:10 +0000523 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
paul7ea487b2003-03-17 02:05:07 +0000524 opsys=sol2-6
paulafd8a122005-03-12 06:36:10 +0000525 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
paul19877dd2004-05-11 10:49:35 +0000526 AC_DEFINE(SUNOS_5, 1, SunOS 5)
paul7ea487b2003-03-17 02:05:07 +0000527 AC_CHECK_LIB(xnet, main)
528 CURSES=-lcurses
529 ;;
paul1b73de82005-04-10 16:31:51 +0000530 [*-sunos5.[8-9]] \
531 | [*-sunos5.1[0-9]] \
532 | [*-sunos5.1[0-9].[0-9]] \
533 | [*-solaris2.[8-9]] \
534 | [*-solaris2.1[0-9]] \
535 | [*-solaris2.1[0-9].[0-9]])
paulafd8a122005-03-12 06:36:10 +0000536 opsys=sol8
Paul Jakmafb66b292006-05-28 08:26:15 +0000537 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
538 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
paul19877dd2004-05-11 10:49:35 +0000539 AC_CHECK_LIB(socket, main)
540 AC_CHECK_LIB(nsl, main)
paul1b73de82005-04-10 16:31:51 +0000541 AC_CHECK_LIB(umem, main)
Paul Jakmafb66b292006-05-28 08:26:15 +0000542 AC_CHECK_FUNCS([printstack],
543 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
544 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
545 ])
paul19877dd2004-05-11 10:49:35 +0000546 CURSES=-lcurses
547 ;;
paul7ea487b2003-03-17 02:05:07 +0000548 *-sunos5* | *-solaris2*)
paul19877dd2004-05-11 10:49:35 +0000549 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
paul7ea487b2003-03-17 02:05:07 +0000550 AC_CHECK_LIB(socket, main)
551 AC_CHECK_LIB(nsl, main)
552 CURSES=-lcurses
553 ;;
hassoc45eb832005-02-19 13:58:06 +0000554 *-linux*)
paul7ea487b2003-03-17 02:05:07 +0000555 opsys=gnu-linux
556 AC_DEFINE(GNU_LINUX,,GNU Linux)
557 ;;
558 *-nec-sysv4*)
559 AC_CHECK_LIB(nsl, gethostbyname)
560 AC_CHECK_LIB(socket, socket)
561 ;;
paul7ea487b2003-03-17 02:05:07 +0000562 *-openbsd*)
563 opsys=openbsd
564 AC_DEFINE(OPEN_BSD,,OpenBSD)
565 ;;
566 *-bsdi*)
567 opsys=bsdi
568 OTHER_METHOD="mtu_kvm.o"
569 AC_CHECK_LIB(kvm, main)
570 ;;
paul49e3b3c2003-10-23 20:39:50 +0000571 *-irix6.5)
pauldc7a2bf2003-10-22 00:07:44 +0000572 opsys=irix
573 AC_DEFINE(IRIX_65,,IRIX 6.5)
574 ;;
paul7ea487b2003-03-17 02:05:07 +0000575esac
576
Paul Jakma62c9f502009-07-19 17:33:21 +0100577AC_SYS_LARGEFILE
578
paul7ea487b2003-03-17 02:05:07 +0000579dnl ---------------------
580dnl Integrated VTY option
581dnl ---------------------
582case "${enable_vtysh}" in
583 "yes") VTYSH="vtysh";
584 AC_DEFINE(VTYSH,,VTY shell)
gdtfc9d0742004-06-30 14:25:12 +0000585 AC_PATH_PROG(PERL, perl)
586dnl Vtysh uses libreadline, which looks for termcap functions at
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000587dnl configure time. We follow readlines search order.
gdtfc9d0742004-06-30 14:25:12 +0000588dnl The required procedures are in libtermcap on NetBSD, in
589dnl [TODO] on Linux, and in [TODO] on Solaris.
hassoc0689392005-08-25 12:00:58 +0000590 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
paula9694592005-08-25 14:50:05 +0000591 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
592 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
593 [AC_CHECK_LIB(ncurses, tputs,
594 LIBREADLINE="$LIBREADLINE -lncurses")]
595 )]
596 )]
597 )
598 AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
599 "$LIBREADLINE")
paul7ea487b2003-03-17 02:05:07 +0000600 if test $ac_cv_lib_readline_main = no; then
gdtfc9d0742004-06-30 14:25:12 +0000601 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
paul7ea487b2003-03-17 02:05:07 +0000602 fi
603 AC_CHECK_HEADER(readline/history.h)
604 if test $ac_cv_header_readline_history_h = no;then
605 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
606 fi
paula9694592005-08-25 14:50:05 +0000607 AC_CHECK_LIB(readline, rl_completion_matches,
608 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
paul3d3de8c2003-05-23 10:33:49 +0000609 if test $ac_cv_lib_readline_rl_completion_matches = no; then
610 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
611 fi
612 ;;
paul7ea487b2003-03-17 02:05:07 +0000613 "no" ) VTYSH="";;
614 * ) ;;
615esac
hassoc0689392005-08-25 12:00:58 +0000616AC_SUBST(LIBREADLINE)
paul7ea487b2003-03-17 02:05:07 +0000617
618dnl ----------
619dnl PAM module
620dnl ----------
621if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000622 AC_CHECK_HEADER([security/pam_misc.h],
623 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
624 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
625 pam_conv_func="misc_conv"
626 ],
627 [], QUAGGA_INCLUDES)
628 AC_CHECK_HEADER([security/openpam.h],
629 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
630 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
631 pam_conv_func="openpam_ttyconv"
632 ],
633 [], QUAGGA_INCLUDES)
paul24cd4352003-05-06 12:16:27 +0000634 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
635 AC_MSG_WARN([*** pam support will not be built ***])
636 with_libpam="no"
637 fi
638fi
639
640if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000641dnl took this test from proftpds configure.in and suited to our needs
paul7ea487b2003-03-17 02:05:07 +0000642dnl -------------------------------------------------------------------------
643dnl
644dnl This next check looks funky due to a linker problem with some versions
645dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
646dnl omitted requiring libdl linking information. PAM-0.72 or better ships
647dnl with RedHat 6.2 and Debian 2.2 or better.
648AC_CHECK_LIB(pam, pam_start,
paul24cd4352003-05-06 12:16:27 +0000649 [AC_CHECK_LIB(pam, $pam_conv_func,
paul7ea487b2003-03-17 02:05:07 +0000650 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
651 LIBPAM="-lpam"],
652 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
653 LIBPAM="-lpam -lpam_misc"]
654 )
655 ],
656
657 [AC_CHECK_LIB(pam, pam_end,
paul24cd4352003-05-06 12:16:27 +0000658 [AC_CHECK_LIB(pam, $pam_conv_func,
paula159ed92003-06-04 11:01:45 +0000659 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000660 LIBPAM="-lpam -ldl"],
paula159ed92003-06-04 11:01:45 +0000661 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000662 LIBPAM="-lpam -ldl -lpam_misc"]
663 )
664 ],AC_MSG_WARN([*** pam support will not be built ***]),
665 [-ldl])
666 ]
667)
668fi
669AC_SUBST(LIBPAM)
670
671dnl -------------------------------
672dnl Endian-ness check
673dnl -------------------------------
674AC_WORDS_BIGENDIAN
675
676dnl -------------------------------
677dnl check the size in byte of the C
678dnl -------------------------------
679dnl AC_CHECK_SIZEOF(char)
680dnl AC_CHECK_SIZEOF(int)
681dnl AC_CHECK_SIZEOF(short)
682dnl AC_CHECK_SIZEOF(long)
683
684dnl ----------------------------
685dnl check existance of functions
686dnl ----------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000687AC_FUNC_CHOWN
688AC_FUNC_FNMATCH
689AC_FUNC_FORK
690AC_FUNC_MALLOC
691AC_FUNC_MEMCMP
692AC_FUNC_MKTIME
693AC_FUNC_STRFTIME
694AC_FUNC_REALLOC
695AC_FUNC_STAT
696AC_FUNC_SELECT_ARGTYPES
697AC_FUNC_STRFTIME
Paul Jakmad46d2a22007-05-10 16:53:04 +0000698dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
699dnl can lead to strange side effects. So we just check for strnlen
700dnl directly, see below.
Paul Jakma2b5cb412007-05-10 17:05:16 +0000701dnl AC_FUNC_STRNLENdnl
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000702AC_FUNC_VPRINTF
703
704dnl -------------------------------
705dnl bgpd needs pow() and hence libm
706dnl -------------------------------
707TMPLIBS="$LIBS"
708AC_CHECK_HEADER([math.h],
709 [AC_CHECK_LIB([m], [pow],
710 [LIBM="-lm"
711 LIBS="$LIBS $LIBM"
712 AC_DEFINE(HAVE_LIBM,, Have libm)
713 AC_CHECK_FUNCS(pow,[],[LIBM=""])
714 ])
715])
716if test x"$LIBM" = x ; then
717 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
718fi
719LIBS="$TMPLIBS"
720AC_SUBST(LIBM)
721
722dnl ---------------
723dnl other functions
724dnl ---------------
725AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
Paul Jakmad46d2a22007-05-10 16:53:04 +0000726 inet_ntoa inet_aton strnlen \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000727 memchr memmove memset select socket \
728 strcasecmp strchr strcspn strdup strerror \
729 strncasecmp strndup strrchr strspn strstr \
730 strtol strtoul strlcat strlcpy \
731 daemon snprintf vsnprintf \
732 if_nametoindex if_indextoname getifaddrs \
733 uname fcntl])
734
paula159ed92003-06-04 11:01:45 +0000735AC_CHECK_FUNCS(setproctitle, ,
736 [AC_CHECK_LIB(util, setproctitle,
737 [LIBS="$LIBS -lutil"
738 AC_DEFINE(HAVE_SETPROCTITLE,, Have setproctitle)
739 ]
740 )
741 ]
742)
paul7ea487b2003-03-17 02:05:07 +0000743
744dnl ------------------------------------
745dnl Determine routing get and set method
746dnl ------------------------------------
747AC_MSG_CHECKING(zebra between kernel interface method)
748if test x"$opsys" = x"gnu-linux"; then
749 if test "${enable_netlink}" = "yes";then
750 AC_MSG_RESULT(netlink)
751 RT_METHOD=rt_netlink.o
752 AC_DEFINE(HAVE_NETLINK,,netlink)
753 netlink=yes
754 elif test "${enable_netlink}" = "no"; then
755 AC_MSG_RESULT(ioctl)
756 RT_METHOD=rt_ioctl.o
757 netlink=no
758 else
759 AC_MSG_RESULT(netlink)
760 RT_METHOD=rt_netlink.o
761 AC_DEFINE(HAVE_NETLINK,,netlink)
762 netlink=yes
763 fi
paul19877dd2004-05-11 10:49:35 +0000764elif test x"$opsys" = x"sol2-6";then
765 AC_MSG_RESULT(Route socket)
766 KERNEL_METHOD="kernel_socket.o"
767 RT_METHOD="rt_socket.o"
paulafd8a122005-03-12 06:36:10 +0000768elif test x"$opsys" = x"sol8";then
paul19877dd2004-05-11 10:49:35 +0000769 AC_MSG_RESULT(Route socket)
770 KERNEL_METHOD="kernel_socket.o"
771 RT_METHOD="rt_socket.o"
772elif test "$opsys" = "irix" ; then
773 AC_MSG_RESULT(Route socket)
774 KERNEL_METHOD="kernel_socket.o"
775 RT_METHOD="rt_socket.o"
paul7ea487b2003-03-17 02:05:07 +0000776else
paul19877dd2004-05-11 10:49:35 +0000777 AC_TRY_RUN([#include <errno.h>
paul7ea487b2003-03-17 02:05:07 +0000778#include <sys/types.h>
779#include <sys/socket.h>
780
781main ()
782{
783 int ac_sock;
784
785 ac_sock = socket (AF_ROUTE, SOCK_RAW, 0);
786 if (ac_sock < 0 && errno == EINVAL)
787 exit (1);
788 exit (0);
789}],
790 [KERNEL_METHOD=kernel_socket.o
791 RT_METHOD=rt_socket.o
792 AC_MSG_RESULT(socket)],
793 [RT_METHOD=rt_ioctl.o
794 AC_MSG_RESULT(ioctl)],
795 [KERNEL_METHOD=kernel_socket.o
796 RT_METHOD=rt_socket.o
797 AC_MSG_RESULT(socket)])
paul7ea487b2003-03-17 02:05:07 +0000798fi
799AC_SUBST(RT_METHOD)
800AC_SUBST(KERNEL_METHOD)
801AC_SUBST(OTHER_METHOD)
802
Paul Jakma238497f2007-08-07 18:49:18 +0000803dnl --------------------------
804dnl Determine IS-IS I/O method
805dnl --------------------------
David Lamparter745bf052010-02-02 21:49:35 +0100806AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
807AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
808AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
Paul Jakma238497f2007-08-07 18:49:18 +0000809AC_CHECK_HEADER(net/bpf.h)
810AC_CHECK_HEADER(sys/dlpi.h)
811AC_MSG_CHECKING(zebra IS-IS I/O method)
812if test x"$opsys" = x"gnu-linux"; then
813 AC_MSG_RESULT(pfpacket)
David Lamparter745bf052010-02-02 21:49:35 +0100814 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
Paul Jakma238497f2007-08-07 18:49:18 +0000815elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
816 AC_MSG_RESULT(DLPI)
David Lamparter745bf052010-02-02 21:49:35 +0100817 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
Paul Jakma238497f2007-08-07 18:49:18 +0000818else
819 if test $ac_cv_header_net_bpf_h = no; then
820 if test $ac_cv_header_sys_dlpi_h = no; then
821 AC_MSG_RESULT(none)
822 AC_MSG_WARN([*** IS-IS support will not be built ***])
823 ISISD=""
824 else
825 AC_MSG_RESULT(DLPI)
826 fi
David Lamparter745bf052010-02-02 21:49:35 +0100827 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
Paul Jakma238497f2007-08-07 18:49:18 +0000828 else
829 AC_MSG_RESULT(BPF)
David Lamparter745bf052010-02-02 21:49:35 +0100830 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
Paul Jakma238497f2007-08-07 18:49:18 +0000831 fi
832fi
David Lamparter745bf052010-02-02 21:49:35 +0100833AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
Paul Jakma238497f2007-08-07 18:49:18 +0000834
ajsb99760a2005-01-04 16:24:43 +0000835dnl ------------------------------------
836dnl check for broken CMSG_FIRSTHDR macro
837dnl ------------------------------------
gdt6c200462005-01-04 17:02:48 +0000838AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
hasso5b087522005-04-03 23:46:37 +0000839AC_RUN_IFELSE([AC_LANG_SOURCE([[
ajsb99760a2005-01-04 16:24:43 +0000840#ifdef SUNOS_5
841#define _XPG4_2
842#define __EXTENSIONS__
843#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000844#ifdef HAVE_STDLIB_H
845# include <stdlib.h>
846#endif
847#ifdef HAVE_SYS_TYPES_H
ajsb99760a2005-01-04 16:24:43 +0000848#include <sys/types.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000849#endif
850#ifdef HAVE_SYS_SOCKET_H
ajsb99760a2005-01-04 16:24:43 +0000851#include <sys/socket.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000852#endif
ajsb99760a2005-01-04 16:24:43 +0000853
854main()
855{
856 struct msghdr msg;
857 char buf[4];
858
859 msg.msg_control = buf;
860 msg.msg_controllen = 0;
861
862 if (CMSG_FIRSTHDR(&msg) != NULL)
863 exit(0);
864 exit (1);
hasso5b087522005-04-03 23:46:37 +0000865}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
hassod33e8d72005-04-03 13:07:21 +0000866[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
ajsb99760a2005-01-04 16:24:43 +0000867
paul7ea487b2003-03-17 02:05:07 +0000868dnl ------------------------------
869dnl check kernel route read method
870dnl ------------------------------
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500871AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
872[if test "x$netlink" = xyes; then
873 quagga_cv_rtread_method="netlink"
paul7ea487b2003-03-17 02:05:07 +0000874else
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500875for quagga_cv_rtread_method in /proc/net/route /dev/ip /dev/null;
paul7ea487b2003-03-17 02:05:07 +0000876do
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500877 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
paul7ea487b2003-03-17 02:05:07 +0000878done
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500879case $quagga_cv_rtread_method in
880 "/proc/net/route") quagga_cv_rtread_method="proc";;
paul9c30ab62003-07-08 08:36:17 +0000881 "/dev/ip")
882 case "$host" in
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500883 *-freebsd*) quagga_cv_rtread_method="sysctl";;
884 *) quagga_cv_rtread_method="getmsg";;
paul9c30ab62003-07-08 08:36:17 +0000885 esac;;
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500886 *)
887 quagga_cv_rtread_method="sysctl";;
paul7ea487b2003-03-17 02:05:07 +0000888esac
889fi])
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500890RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
paul7ea487b2003-03-17 02:05:07 +0000891AC_SUBST(RTREAD_METHOD)
892
893dnl -----------------------------
894dnl check interface lookup method
895dnl -----------------------------
paul19877dd2004-05-11 10:49:35 +0000896IOCTL_METHOD=ioctl.o
paul7ea487b2003-03-17 02:05:07 +0000897AC_MSG_CHECKING(interface looking up method)
898if test "$netlink" = yes; then
899 AC_MSG_RESULT(netlink)
900 IF_METHOD=if_netlink.o
paul19877dd2004-05-11 10:49:35 +0000901elif test "$opsys" = "sol2-6";then
902 AC_MSG_RESULT(Solaris GIF)
903 IF_METHOD=if_ioctl.o
paulafd8a122005-03-12 06:36:10 +0000904elif test "$opsys" = "sol8";then
paul19877dd2004-05-11 10:49:35 +0000905 AC_MSG_RESULT(Solaris GLIF)
906 IF_METHOD=if_ioctl_solaris.o
907 IOCTL_METHOD=ioctl_solaris.o
908elif test "$opsys" = "irix" ; then
909 AC_MSG_RESULT(IRIX)
910 IF_METHOD=if_ioctl.o
911elif test "$opsys" = "openbsd";then
912 AC_MSG_RESULT(openbsd)
913 IF_METHOD=if_ioctl.o
914elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
915 AC_MSG_RESULT(sysctl)
paul7ea487b2003-03-17 02:05:07 +0000916 IF_METHOD=if_sysctl.o
917 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
paul19877dd2004-05-11 10:49:35 +0000918else
paul7ea487b2003-03-17 02:05:07 +0000919 AC_MSG_RESULT(ioctl)
920 IF_METHOD=if_ioctl.o
paul7ea487b2003-03-17 02:05:07 +0000921fi
922AC_SUBST(IF_METHOD)
paul19877dd2004-05-11 10:49:35 +0000923AC_SUBST(IOCTL_METHOD)
paul7ea487b2003-03-17 02:05:07 +0000924
paul42c98192005-05-07 02:22:51 +0000925dnl ---------------------------------------------------------------
926dnl figure out how to specify an interface in multicast sockets API
927dnl ---------------------------------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000928AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
paul42c98192005-05-07 02:22:51 +0000929
930AC_MSG_CHECKING([for BSD struct ip_mreq hack])
931AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
932#include <sys/param.h>
Denis Ovsienkoc5408352009-04-13 20:11:44 +0400933#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 +0000934 return (0);
935#else
936 #error No support for BSD struct ip_mreq hack detected
937#endif],[AC_MSG_RESULT(yes)
938AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
939AC_MSG_RESULT(no))
940
Andrew J. Schorrc543a172008-01-10 15:24:32 +0000941dnl ---------------------------------------------------------------
942dnl figure out how to check link-state
943dnl ---------------------------------------------------------------
Andrew J. Schorr6418bed2008-01-11 16:33:59 +0000944AC_CHECK_HEADER([net/if.h],
945 [AC_CHECK_HEADER( [net/if_media.h],
946 [m4_define([LINK_DETECT_INCLUDES],
947 QUAGGA_INCLUDES
948 [#include <net/if_media.h>
949 ])
950 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
951 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
952 [], LINK_DETECT_INCLUDES)],
953 [],
954 QUAGGA_INCLUDES)],
955 [], QUAGGA_INCLUDES )
Andrew J. Schorrc543a172008-01-10 15:24:32 +0000956
Paul Jakma0df7c912008-07-21 21:02:49 +0000957dnl ------------------------
958dnl TCP_MD5SIG socket option
959dnl ------------------------
960
961AC_CHECK_HEADER([netinet/tcp.h],
962 [m4_define([MD5_INCLUDES],
963 QUAGGA_INCLUDES
964 [#include <netinet/tcp.h>
965 ])
966 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
967 [],
968 QUAGGA_INCLUDES)
969if test $ac_cv_have_decl_TCP_MD5SIG = no; then
970 AC_CHECK_HEADER([linux/tcp.h],
971 [m4_define([MD5_INCLUDES],
972 QUAGGA_INCLUDES
973 [#include <linux/tcp.h>
974 ])
975 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
976fi
977
paul7ea487b2003-03-17 02:05:07 +0000978dnl -----------------------
979dnl check proc file system.
980dnl -----------------------
Stephen Hemmingercadfb2c2008-08-16 18:03:44 +0100981if test "$netlink" != yes; then
982 if test -r /proc/net/dev; then
983 AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
984 IF_PROC=if_proc.o
985 fi
986 if test -r /proc/net/if_inet6; then
987 AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
988 IF_PROC=if_proc.o
989 fi
paul7ea487b2003-03-17 02:05:07 +0000990fi
991AC_SUBST(IF_PROC)
992
993dnl -----------------------------
994dnl check ipforward detect method
995dnl -----------------------------
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500996AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
997[for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
paul7ea487b2003-03-17 02:05:07 +0000998do
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500999 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
paul7ea487b2003-03-17 02:05:07 +00001000done
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001001case $quagga_cv_ipforward_method in
1002 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
paul7ea487b2003-03-17 02:05:07 +00001003 "/dev/ip")
1004 case "$host" in
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001005 *-nec-sysv4*) quagga_cv_ipforward_method="ews";;
1006 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1007 *) quagga_cv_ipforward_method="solaris";;
paul7ea487b2003-03-17 02:05:07 +00001008 esac;;
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001009 *) quagga_cv_ipforward_method="sysctl";;
paul7ea487b2003-03-17 02:05:07 +00001010esac])
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001011IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
paul7ea487b2003-03-17 02:05:07 +00001012AC_SUBST(IPFORWARD)
1013
1014AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
1015
1016dnl ----------
1017dnl IPv6 check
1018dnl ----------
1019AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1020if test "${enable_ipv6}" = "no"; then
1021 AC_MSG_RESULT(disabled)
1022else
1023dnl ----------
1024dnl INRIA IPv6
1025dnl ----------
paula159ed92003-06-04 11:01:45 +00001026 if grep IPV6_INRIA_VERSION /usr/include/netinet/in.h >/dev/null 2>&1; then
1027 zebra_cv_ipv6=yes
1028 AC_DEFINE(HAVE_IPV6,1,INRIA IPv6)
1029 AC_DEFINE(INRIA_IPV6,1,INRIA IPv6)
1030 RIPNGD="ripngd"
1031 OSPF6D="ospf6d"
1032 LIB_IPV6=""
1033 AC_MSG_RESULT(INRIA IPv6)
paul7ea487b2003-03-17 02:05:07 +00001034dnl ---------
1035dnl KAME IPv6
1036dnl ---------
paula159ed92003-06-04 11:01:45 +00001037 elif grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1038 zebra_cv_ipv6=yes
1039 AC_DEFINE(HAVE_IPV6,1,KAME IPv6)
1040 AC_DEFINE(KAME,1,KAME IPv6)
1041 RIPNGD="ripngd"
1042 OSPF6D="ospf6d"
1043 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
paul7ea487b2003-03-17 02:05:07 +00001044 LIB_IPV6="-L/usr/local/v6/lib -linet6"
paula159ed92003-06-04 11:01:45 +00001045 fi
1046 AC_MSG_RESULT(KAME)
hasso71c0fb52003-05-25 20:18:13 +00001047dnl -------------------------
1048dnl MUSICA IPv6
1049dnl default host check
1050dnl It is not used by Kheops
1051dnl -------------------------
paula159ed92003-06-04 11:01:45 +00001052 elif grep MUSICA /usr/include6/netinet6/in6.h >/dev/null 2>&1; then
1053 zebra_cv_ipv6=yes
1054 AC_DEFINE(HAVE_IPV6,1,Musicia IPv6)
1055 AC_DEFINE(MUSICA,1,Musica IPv6 stack)
1056 AC_DEFINE(KAME,1,KAME IPv6 stack)
1057 RIPNGD="ripngd"
1058 OSPF6D="ospf6d"
1059 if test -d /usr/local/v6/lib -a -f /usr/local/v6/lib/libinet6.a; then
hasso71c0fb52003-05-25 20:18:13 +00001060 LIB_IPV6="-L/usr/local/v6/lib -linet6"
paula159ed92003-06-04 11:01:45 +00001061 fi
1062 AC_MSG_RESULT(MUSICA)
paul7ea487b2003-03-17 02:05:07 +00001063dnl ---------
1064dnl NRL check
1065dnl ---------
paula159ed92003-06-04 11:01:45 +00001066 elif grep NRL /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1067 zebra_cv_ipv6=yes
1068 AC_DEFINE(HAVE_IPV6,1,NRL IPv6)
1069 AC_DEFINE(NRL,1,NRL)
1070 RIPNGD="ripngd"
1071 OSPF6D="ospf6d"
1072 if test x"$opsys" = x"bsdi";then
paul7ea487b2003-03-17 02:05:07 +00001073 AC_DEFINE(BSDI_NRL,,BSDI)
1074 AC_MSG_RESULT(BSDI_NRL)
paula159ed92003-06-04 11:01:45 +00001075 else
paul7ea487b2003-03-17 02:05:07 +00001076 AC_MSG_RESULT(NRL)
paula159ed92003-06-04 11:01:45 +00001077 fi
paul19877dd2004-05-11 10:49:35 +00001078dnl ------------------------------------
1079dnl Solaris 9, 10 and potentially higher
1080dnl ------------------------------------
paulafd8a122005-03-12 06:36:10 +00001081 elif test x"$opsys" = x"sol8"; then
paul19877dd2004-05-11 10:49:35 +00001082 zebra_cv_ipv6=yes;
1083 AC_DEFINE(HAVE_IPV6, 1, IPv6)
1084 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1085 RIPNGD="ripngd"
1086 OSPF6D="ospf6d"
1087 AC_MSG_RESULT(Solaris IPv6)
paul7ea487b2003-03-17 02:05:07 +00001088dnl ----------
1089dnl Linux IPv6
1090dnl ----------
paula159ed92003-06-04 11:01:45 +00001091 elif test "${enable_ipv6}" = "yes"; then
1092 AC_EGREP_CPP(yes, [
1093 #include <linux/version.h>
1094 /* 2.1.128 or later */
1095 #if LINUX_VERSION_CODE >= 0x020180
1096 yes
1097 #endif],
1098 [zebra_cv_ipv6=yes
1099 zebra_cv_linux_ipv6=yes
1100 AC_MSG_RESULT(Linux IPv6)])
1101 else
1102 if test x`ls /proc/net/ipv6_route 2>/dev/null` = x"/proc/net/ipv6_route"
1103 then
paul7ea487b2003-03-17 02:05:07 +00001104 zebra_cv_ipv6=yes
1105 zebra_cv_linux_ipv6=yes
1106 AC_MSG_RESULT(Linux IPv6)
paula159ed92003-06-04 11:01:45 +00001107 fi
1108 fi
paul7ea487b2003-03-17 02:05:07 +00001109
paula159ed92003-06-04 11:01:45 +00001110 if test "$zebra_cv_linux_ipv6" = "yes";then
hasso850d39f2005-06-30 13:52:20 +00001111 AC_MSG_CHECKING(whether libc has IPv6 support)
1112 AC_TRY_LINK([#include <netinet/in.h>
1113 ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
1114 [AC_MSG_RESULT(yes)
1115 zebra_cv_ipv6=yes
1116 zebra_cv_linux_ipv6=yes],
1117 [AC_MSG_RESULT(no)
1118 zebra_cv_ipv6=no
1119 zebra_cv_linux_ipv6=no])
1120 fi
1121
1122 if test "$zebra_cv_linux_ipv6" = "yes";then
paula159ed92003-06-04 11:01:45 +00001123 AC_MSG_CHECKING(for GNU libc >= 2.1)
1124 AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
1125 AC_EGREP_CPP(yes, [
paul7ea487b2003-03-17 02:05:07 +00001126#include <features.h>
1127#if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
1128 yes
paula159ed92003-06-04 11:01:45 +00001129#endif],
1130 [glibc=yes
1131 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1132 AC_MSG_RESULT(yes)],
1133 AC_MSG_RESULT(no)
1134 )
1135 RIPNGD="ripngd"
1136 OSPF6D="ospf6d"
1137 if test "$glibc" != "yes"; then
paul7ea487b2003-03-17 02:05:07 +00001138 INCLUDES="-I/usr/inet6/include"
1139 if test x`ls /usr/inet6/lib/libinet6.a 2>/dev/null` != x;then
1140 LIB_IPV6="-L/usr/inet6/lib -linet6"
1141 fi
paula159ed92003-06-04 11:01:45 +00001142 fi
1143 fi
paul7ea487b2003-03-17 02:05:07 +00001144
1145dnl -----------------------
1146dnl Set IPv6 related values
1147dnl -----------------------
paula159ed92003-06-04 11:01:45 +00001148 LIBS="$LIB_IPV6 $LIBS"
1149 AC_SUBST(LIB_IPV6)
paul7ea487b2003-03-17 02:05:07 +00001150
paula159ed92003-06-04 11:01:45 +00001151 if test x"$RIPNGD" = x""; then
1152 AC_MSG_RESULT(IPv4 only)
1153 fi
paul7ea487b2003-03-17 02:05:07 +00001154fi
1155
gdtfa3232e2003-12-03 17:52:30 +00001156dnl ------------------
1157dnl IPv6 header checks
1158dnl ------------------
1159if test "x${zebra_cv_ipv6}" = "xyes"; then
1160AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001161 netinet6/in6_var.h netinet6/nd6.h], [], [],
1162 QUAGGA_INCLUDES)
gdtfa3232e2003-12-03 17:52:30 +00001163fi
1164
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001165m4_define([QUAGGA_INCLUDES],dnl
1166QUAGGA_INCLUDES
1167[#if HAVE_NETINET6_IN6_H
1168#include <netinet6/in6.h>
1169#endif
1170#if HAVE_NETINET_IN6_VAR_H
1171#include <netinet/in6_var.h>
1172#endif
1173#if HAVE_NETINET_ICMP6_H
1174# include <netinet/icmp6.h>
1175#endif
1176#if HAVE_NETINET6_IN6_VAR_H
1177# include <netinet6/in6_var.h>
1178#endif
1179#if HAVE_NETINET6_ND6_H
Hasso Tepperfbf24542007-06-25 19:30:59 +00001180# include <netinet6/nd6.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001181#endif
1182])dnl
1183
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +01001184dnl disable doc check
1185if test "${enable_doc}" = "no";then
1186 DOC=""
1187else
1188 DOC="doc"
1189fi
1190
paul7ea487b2003-03-17 02:05:07 +00001191dnl --------------------
1192dnl Daemon disable check
1193dnl --------------------
1194if test "${enable_zebra}" = "no";then
1195 ZEBRA=""
1196else
1197 ZEBRA="zebra"
1198fi
1199
1200if test "${enable_bgpd}" = "no";then
1201 BGPD=""
1202else
1203 BGPD="bgpd"
1204fi
1205
1206if test "${enable_ripd}" = "no";then
1207 RIPD=""
1208else
1209 RIPD="ripd"
1210fi
1211
1212if test "${enable_ospfd}" = "no";then
1213 OSPFD=""
1214else
1215 OSPFD="ospfd"
1216fi
1217
ajsd0199432004-12-22 14:03:52 +00001218if test "${enable_watchquagga}" = "no";then
1219 WATCHQUAGGA=""
1220else
1221 WATCHQUAGGA="watchquagga"
1222fi
1223
paul1ef74ef2003-03-21 15:16:05 +00001224OSPFCLIENT=""
1225if test "${enable_opaque_lsa}" = "yes"; then
1226 if test "${enable_ospfapi}" != "no";then
paul9a569842003-03-28 01:45:13 +00001227 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
paul1ef74ef2003-03-21 15:16:05 +00001228
1229 if test "${enable_ospfclient}" != "no";then
1230 OSPFCLIENT="ospfclient"
1231 fi
1232 fi
1233
paul7ea487b2003-03-17 02:05:07 +00001234fi
1235
1236case "${enable_ripngd}" in
1237 "yes") RIPNGD="ripngd";;
1238 "no" ) RIPNGD="";;
1239 * ) ;;
1240esac
1241
1242case "${enable_ospf6d}" in
1243 "yes") OSPF6D="ospf6d";;
1244 "no" ) OSPF6D="";;
1245 * ) ;;
1246esac
1247
jardin9e867fe2003-12-23 08:56:18 +00001248case "${enable_isisd}" in
1249 "yes") ISISD="isisd";;
1250 "no" ) ISISD="";;
hassoae399ab2004-09-13 20:22:18 +00001251 * ) ;;
jardin9e867fe2003-12-23 08:56:18 +00001252esac
1253
Greg Troxel97cee872007-08-02 13:36:56 +00001254# XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
1255case "${enable_solaris}" in
1256 "yes") SOLARIS="solaris";;
1257 "no" ) SOLARIS="";;
1258 * ) ;;
1259esac
1260
paul7ea487b2003-03-17 02:05:07 +00001261if test "${enable_bgp_announce}" = "no";then
Paul Jakma750e8142008-07-22 21:11:48 +00001262 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1263else
1264 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
paul7ea487b2003-03-17 02:05:07 +00001265fi
1266
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +01001267AC_SUBST(DOC)
paul7ea487b2003-03-17 02:05:07 +00001268AC_SUBST(ZEBRA)
1269AC_SUBST(BGPD)
1270AC_SUBST(RIPD)
1271AC_SUBST(RIPNGD)
1272AC_SUBST(OSPFD)
1273AC_SUBST(OSPF6D)
ajsd0199432004-12-22 14:03:52 +00001274AC_SUBST(WATCHQUAGGA)
jardin9e867fe2003-12-23 08:56:18 +00001275AC_SUBST(ISISD)
Greg Troxel97cee872007-08-02 13:36:56 +00001276AC_SUBST(SOLARIS)
paul7ea487b2003-03-17 02:05:07 +00001277AC_SUBST(VTYSH)
1278AC_SUBST(INCLUDES)
1279AC_SUBST(CURSES)
1280AC_SUBST(OSPFCLIENT)
paul1ef74ef2003-03-21 15:16:05 +00001281AC_SUBST(OSPFAPI)
paul7ea487b2003-03-17 02:05:07 +00001282AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1283AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1284AC_CHECK_LIB(crypt, crypt)
1285AC_CHECK_LIB(resolv, res_init)
paul7ea487b2003-03-17 02:05:07 +00001286
1287dnl ---------------------------------------------------
1288dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
1289dnl ---------------------------------------------------
paula159ed92003-06-04 11:01:45 +00001290AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
1291AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
1292AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
paul7ea487b2003-03-17 02:05:07 +00001293
1294dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001295dnl check system has PCRE regexp
1296dnl ---------------------------
1297if test "x$enable_pcreposix" = "xyes"; then
1298 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1299 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1300fi
1301
1302if test "x$enable_pcreposix" != "xyes"; then
1303dnl ---------------------------
paul7ea487b2003-03-17 02:05:07 +00001304dnl check system has GNU regexp
1305dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001306AC_MSG_CHECKING(whether system has GNU regex)
paul7ea487b2003-03-17 02:05:07 +00001307AC_CHECK_LIB(c, regexec,
1308[AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1309 LIB_REGEX=""],
1310[LIB_REGEX="regex.o"])
Jeremy Jackson25f45882009-01-12 16:06:12 -05001311fi
1312AC_SUBST(HAVE_LIBPCREPOSIX)
paul7ea487b2003-03-17 02:05:07 +00001313AC_SUBST(LIB_REGEX)
1314
1315dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001316dnl check Net-SNMP library
paul7ea487b2003-03-17 02:05:07 +00001317dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001318if test "${enable_snmp}" = "yes"; then
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +02001319 if test "$with_crypto" != "no"; then
1320 LIBS="${LIBS} -lcrypto";
1321 fi
paulb1fc9ac2006-01-31 10:09:27 +00001322 AC_CHECK_LIB(netsnmp, asn_parse_int,
1323 [AC_DEFINE(HAVE_NETSNMP,,Net SNMP)
1324 AC_DEFINE(HAVE_SNMP,,SNMP)
1325 LIBS="${LIBS} -lnetsnmp"],
1326 [AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])])
Joakim Tjernlundfb62a3c2008-05-13 20:03:32 +02001327
1328 AC_CHECK_HEADER([net-snmp/net-snmp-config.h],
1329 [],
1330 [AC_MSG_ERROR([--enable-snmp given, but cannot find net-snmp-config.h])],
1331 QUAGGA_INCLUDES)
paulb1fc9ac2006-01-31 10:09:27 +00001332 AC_SUBST(SNMP_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001333fi
1334
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001335dnl ---------------------------
1336dnl sockaddr and netinet checks
1337dnl ---------------------------
1338AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1339 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1340 socklen_t,
1341 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1342 struct nd_opt_adv_interval, struct rt_addrinfo,
Paul Jakma11770e12007-06-22 16:14:42 +00001343 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001344 [], [], QUAGGA_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001345
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001346AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1347 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1348 struct sockaddr_in6.sin6_scope_id,
1349 struct if6_aliasreq.ifra_lifetime,
1350 struct nd_opt_adv_interval.nd_opt_ai_type],
1351 [], [], QUAGGA_INCLUDES)
hasso71c0fb52003-05-25 20:18:13 +00001352
paul7ea487b2003-03-17 02:05:07 +00001353dnl ---------------------------
Paul Jakma11770e12007-06-22 16:14:42 +00001354dnl IRDP/pktinfo/icmphdr checks
paul7ea487b2003-03-17 02:05:07 +00001355dnl ---------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001356AC_CHECK_TYPES([struct in_pktinfo],
Paul Jakma11770e12007-06-22 16:14:42 +00001357 [AC_CHECK_TYPES([struct icmphdr],
1358 [if test "${enable_irdp}" != "no"; then
1359 AC_DEFINE(HAVE_IRDP,, IRDP)
1360 fi],
1361 [if test "${enable_irdp}" = "yes"; then
1362 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1363 fi], [QUAGGA_INCLUDES])],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001364 [if test "${enable_irdp}" = "yes"; then
1365 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1366 fi], [QUAGGA_INCLUDES])
vincent29c4c9b2005-03-25 13:05:47 +00001367
paul7ea487b2003-03-17 02:05:07 +00001368dnl --------------------------------------
1369dnl checking for getrusage struct and call
1370dnl --------------------------------------
1371AC_MSG_CHECKING(whether getrusage is available)
1372AC_TRY_COMPILE([#include <sys/resource.h>
1373],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1374[AC_MSG_RESULT(yes)
1375 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1376 AC_MSG_RESULT(no))
1377
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001378dnl --------------------------------------
1379dnl checking for clock_time monotonic struct and call
1380dnl --------------------------------------
Paul Jakma6511cab2009-06-18 17:38:01 +01001381AC_CHECK_DECL(CLOCK_MONOTONIC,
1382 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
Dmitry Tejblum9964fcf2009-11-05 16:50:36 +03001383 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
Paul Jakma6511cab2009-06-18 17:38:01 +01001384], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001385
pauledd7c242003-06-04 13:59:38 +00001386dnl -------------------
1387dnl capabilities checks
1388dnl -------------------
hasso41d3fc92004-04-06 11:59:00 +00001389if test "${enable_capabilities}" != "no"; then
1390 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1391 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1392 [AC_MSG_RESULT(yes)
1393 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1394 quagga_ac_keepcaps="yes"],
1395 AC_MSG_RESULT(no)
pauledd7c242003-06-04 13:59:38 +00001396 )
hasso41d3fc92004-04-06 11:59:00 +00001397 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1398 AC_CHECK_HEADERS(sys/capability.h)
1399 fi
1400 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1401 AC_CHECK_LIB(cap, cap_init,
1402 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1403 LIBCAP="-lcap"
paulceacedb2005-09-29 14:39:32 +00001404 quagga_ac_lcaps="yes"]
hasso41d3fc92004-04-06 11:59:00 +00001405 )
paulceacedb2005-09-29 14:39:32 +00001406 else
1407 AC_CHECK_HEADERS(priv.h,
1408 [AC_MSG_CHECKING(Solaris style privileges are available)
1409 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1410 [AC_MSG_RESULT(yes)
1411 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1412 quagga_ac_scaps="yes"],
1413 AC_MSG_RESULT(no)
1414 )
1415 ]
1416 )
1417 fi
1418 if test x"${quagga_ac_scaps}" = x"yes" \
1419 -o x"${quagga_ac_lcaps}" = x"yes"; then
1420 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
hasso41d3fc92004-04-06 11:59:00 +00001421 fi
pauledd7c242003-06-04 13:59:38 +00001422fi
1423AC_SUBST(LIBCAP)
1424
paulfb2d1502003-06-04 09:40:54 +00001425dnl ---------------------------
1426dnl check for glibc 'backtrace'
1427dnl ---------------------------
1428if test "${glibc}" = "yes"; then
Paul Jakmafb66b292006-05-28 08:26:15 +00001429 AC_CHECK_HEADER([execinfo.h],
1430 [AC_CHECK_FUNC([backtrace],
1431 [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1432 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1433 ])
1434 ])
paulfb2d1502003-06-04 09:40:54 +00001435fi
1436
Paul Jakma41be32b2006-03-30 13:53:59 +00001437dnl -----------------------------------------
1438dnl check for malloc mallinfo struct and call
1439dnl this must try and link using LIBS, in
1440dnl order to check no alternative allocator
1441dnl has been specified, which might not provide
1442dnl mallinfo, e.g. such as Umem on Solaris.
1443dnl -----------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001444AC_CHECK_HEADER([malloc.h],
Paul Jakma41be32b2006-03-30 13:53:59 +00001445 [AC_MSG_CHECKING(whether mallinfo is available)
1446 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1447 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1448 [AC_MSG_RESULT(yes)
1449 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1450 AC_MSG_RESULT(no)
1451 )
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001452 ], [], QUAGGA_INCLUDES)
Paul Jakma41be32b2006-03-30 13:53:59 +00001453
paul408ad942003-05-20 00:03:33 +00001454dnl ----------
1455dnl configure date
1456dnl ----------
1457CONFDATE=`date '+%Y%m%d'`
1458AC_SUBST(CONFDATE)
1459
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001460dnl Conditionally enable PIE support for GNU toolchains.
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001461AC_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 +01001462if test "$enable_pie" != "no"; then
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +01001463 AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
1464 save_CFLAGS=$CFLAGS
1465 save_LDFLAGS=$LDFLAGS
1466 CFLAGS="$CFLAGS -fPIE"
1467 LDFLAGS="$LDFLAGS -pie"
1468 AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
1469 [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
1470 )
1471 CFLAGS=$save_CFLAGS
1472 LDFLAGS=$save_LDFLAGS
1473 ])
1474 if test "$ap_cv_cc_pie" = "yes"; then
1475 PICFLAGS="-fPIE"
1476 PILDFLAGS="-pie"
1477 fi
1478fi
1479
1480AC_SUBST(PICFLAGS)
1481AC_SUBST(PILDFLAGS)
1482
paul7ea487b2003-03-17 02:05:07 +00001483dnl ------------------------------
paula159ed92003-06-04 11:01:45 +00001484dnl set paths for state directory
paul23bd12c2003-04-07 06:11:09 +00001485dnl ------------------------------
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001486AC_MSG_CHECKING(directory to use for state file)
paul23bd12c2003-04-07 06:11:09 +00001487if test "${prefix}" = "NONE"; then
paule8f29842003-08-12 13:08:31 +00001488 quagga_statedir_prefix="";
paul23bd12c2003-04-07 06:11:09 +00001489else
paule8f29842003-08-12 13:08:31 +00001490 quagga_statedir_prefix=${prefix}
paul23bd12c2003-04-07 06:11:09 +00001491fi
1492if test "${localstatedir}" = '${prefix}/var'; then
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001493 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
paule8f29842003-08-12 13:08:31 +00001494 ${quagga_statedir_prefix}/var/adm dnl
1495 ${quagga_statedir_prefix}/etc dnl
paula159ed92003-06-04 11:01:45 +00001496 /var/run dnl
1497 /var/adm dnl
1498 /etc dnl
1499 /dev/null;
paul23bd12c2003-04-07 06:11:09 +00001500 do
paule8f29842003-08-12 13:08:31 +00001501 test -d $QUAGGA_STATE_DIR && break
paul23bd12c2003-04-07 06:11:09 +00001502 done
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001503 quagga_statedir=$QUAGGA_STATE_DIR
paul23bd12c2003-04-07 06:11:09 +00001504else
paule8f29842003-08-12 13:08:31 +00001505 quagga_statedir=${localstatedir}
paul23bd12c2003-04-07 06:11:09 +00001506fi
paule8f29842003-08-12 13:08:31 +00001507if test $quagga_statedir = "/dev/null"; then
paula159ed92003-06-04 11:01:45 +00001508 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1509fi
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001510AC_MSG_RESULT(${quagga_statedir})
1511AC_SUBST(quagga_statedir)
paula159ed92003-06-04 11:01:45 +00001512
paule8f29842003-08-12 13:08:31 +00001513AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1514AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1515AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1516AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1517AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1518AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
jardin9e867fe2003-12-23 08:56:18 +00001519AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
ajsd0199432004-12-22 14:03:52 +00001520AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
paule8f29842003-08-12 13:08:31 +00001521AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1522AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1523AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1524AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1525AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1526AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1527AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
jardin9e867fe2003-12-23 08:56:18 +00001528AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
ajs515210b2004-12-22 15:35:12 +00001529AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
paul7ea487b2003-03-17 02:05:07 +00001530
paul1eb8ef22005-04-07 07:30:20 +00001531dnl -------------------------------
1532dnl Quagga sources should always be
1533dnl current wrt interfaces. Dont
1534dnl allow deprecated interfaces to
1535dnl be exposed.
1536dnl -------------------------------
1537AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1538
paul7ea487b2003-03-17 02:05:07 +00001539dnl ---------------------------
1540dnl Check htonl works correctly
1541dnl ---------------------------
1542AC_MSG_CHECKING(for working htonl)
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001543AC_CACHE_VAL(ac_cv_htonl_works,
1544 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1545 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1546 ]
1547)
paul7ea487b2003-03-17 02:05:07 +00001548AC_MSG_RESULT($ac_cv_htonl_works)
1549
paul14c17fd2004-11-07 22:34:23 +00001550AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
ajsd0199432004-12-22 14:03:52 +00001551 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
jardin9e867fe2003-12-23 08:56:18 +00001552 ospf6d/Makefile isisd/Makefile vtysh/Makefile doc/Makefile
paul14c17fd2004-11-07 22:34:23 +00001553 ospfclient/Makefile tests/Makefile m4/Makefile redhat/Makefile
gdt69f1fc22004-08-27 15:57:35 +00001554 pkgsrc/Makefile
paul670bbf12004-11-12 09:05:00 +00001555 redhat/quagga.spec
gdtb7a97f82004-07-23 16:23:56 +00001556 lib/version.h
paul14c17fd2004-11-07 22:34:23 +00001557 doc/defines.texi
hassof695b012005-04-02 19:03:39 +00001558 isisd/topology/Makefile
gdtcbd04082004-08-31 18:16:36 +00001559 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
paulf31293a2004-11-12 09:27:04 +00001560 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
paul26275b02005-04-11 07:10:47 +00001561AC_CONFIG_FILES([solaris/Makefile])
1562
paul670bbf12004-11-12 09:05:00 +00001563AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
hasso48577192004-11-19 06:41:49 +00001564## Hack, but working solution to avoid rebuilding of quagga.info.
1565## It's already in CVS until texinfo 4.7 is more common.
paul14c17fd2004-11-07 22:34:23 +00001566AC_OUTPUT
paul7ea487b2003-03-17 02:05:07 +00001567
1568echo "
hassoc89f6492004-08-26 12:21:28 +00001569Quagga configuration
1570--------------------
1571quagga version : ${PACKAGE_VERSION}
David Wardcdb99502009-12-03 20:22:47 +03001572host operating system : ${host_os}
paul7ea487b2003-03-17 02:05:07 +00001573source code location : ${srcdir}
1574compiler : ${CC}
1575compiler flags : ${CFLAGS}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001576make : ${MAKE-make}
hasso2d582282005-03-28 15:29:07 +00001577includes : ${INCLUDES} ${SNMP_INCLUDES}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001578linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
paule8f29842003-08-12 13:08:31 +00001579state file directory : ${quagga_statedir}
pauldc7a2bf2003-10-22 00:07:44 +00001580config file directory : `eval echo \`echo ${sysconfdir}\``
gdtd6b72f72003-12-03 17:24:27 +00001581example directory : `eval echo \`echo ${exampledir}\``
paul8d4aee52003-06-06 00:30:35 +00001582user to run as : ${enable_user}
1583group to run as : ${enable_group}
1584group for vty sockets : ${enable_vty_group}
gdtaa593d52003-12-22 20:15:53 +00001585config file mask : ${enable_configfile_mask}
1586log file mask : ${enable_logfile_mask}
pauldc7a2bf2003-10-22 00:07:44 +00001587
1588The above user and group must have read/write access to the state file
Paul Jakma105b8232006-05-28 08:02:41 +00001589directory and to the config files in the config file directory."
1590
1591if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1592Warning: The ${MAKE-make} programme detected, either in your path or
1593via the MAKE variable, is not GNU Make. GNU make may be installed as
1594gmake on some systems. and is required to complete a build of Quagga
1595" > /dev/stderr
1596fi