blob: 0bfdde6fbd525dc0e24d92c0eb55cf06fdd67e77 [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 Jakmaf9f47312016-02-16 11:30:33 +00008AC_PREREQ(2.60)
paul7ea487b2003-03-17 02:05:07 +00009
Paul Jakmac876b0b2017-02-08 15:19:38 +000010AC_INIT(Quagga, 1.2.0, [https://bugzilla.quagga.net])
David Lamparter7abd8752014-11-22 10:43:29 -080011CONFIG_ARGS="$*"
12AC_SUBST(CONFIG_ARGS)
paulfa1253d2003-09-24 05:09:26 +000013AC_CONFIG_SRCDIR(lib/zebra.h)
Paul Jakma62c9f502009-07-19 17:33:21 +010014AC_CONFIG_MACRO_DIR([m4])
ajsdfb9a542005-04-11 14:55:55 +000015
16dnl -----------------------------------
17dnl Get hostname and other information.
18dnl -----------------------------------
19AC_CANONICAL_BUILD()
20AC_CANONICAL_HOST()
21AC_CANONICAL_TARGET()
22
Avneesh Sachdevb2624482016-04-04 10:54:56 -070023# Disable portability warnings -- our automake code (in particular
24# common.am) uses some constructs specific to gmake.
25AM_INIT_AUTOMAKE([1.6 -Wno-portability])
Pawel Wieczorkiewicz2ab67a72016-04-01 12:54:38 +020026
27m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
David Lampartercc813082015-02-10 11:39:39 +010028AM_SILENT_RULES([yes])
Hasso Tepper303bb002013-01-13 17:45:28 +000029AC_CONFIG_HEADERS(config.h)
paul7ea487b2003-03-17 02:05:07 +000030
David Lamparter0be793e2012-11-27 01:34:56 +000031AC_PATH_PROG(PERL, perl)
Jeremy Jackson7ec57362009-01-21 22:10:40 -050032AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
33if test "x$GAWK" = "xnot-in-PATH" ; then
34 AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
35BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
36fi
paul03ecfb62005-04-16 15:38:23 +000037AC_ARG_VAR([GAWK],[GNU AWK])
38
gdtd6b72f72003-12-03 17:24:27 +000039dnl default is to match previous behavior
gdtc4f0efe2003-12-04 15:39:25 +000040exampledir=${sysconfdir}
gdtd6b72f72003-12-03 17:24:27 +000041AC_ARG_ENABLE([exampledir],
David Lamparterb6fa7602014-06-28 22:15:59 +020042 AS_HELP_STRING([--enable-exampledir],
gdtd6b72f72003-12-03 17:24:27 +000043 [specify alternate directory for examples]),
44 exampledir="$enableval",)
gdtc4f0efe2003-12-04 15:39:25 +000045dnl XXX add --exampledir to autoconf standard directory list somehow
gdtd6b72f72003-12-03 17:24:27 +000046AC_SUBST(exampledir)
47
gdtcbd04082004-08-31 18:16:36 +000048dnl default is to match previous behavior
49pkgsrcrcdir=""
50pkgsrcdir=""
51AC_ARG_ENABLE([pkgsrcrcdir],
David Lamparterb6fa7602014-06-28 22:15:59 +020052 AS_HELP_STRING([--enable-pkgsrcrcdir],
gdtcbd04082004-08-31 18:16:36 +000053 [specify directory for rc.d scripts]),
54 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
55dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
56AC_SUBST(pkgsrcdir)
57AC_SUBST(pkgsrcrcdir)
58
paul7ea487b2003-03-17 02:05:07 +000059dnl ------------
60dnl Check CFLAGS
61dnl ------------
62AC_ARG_WITH(cflags,
63[ --with-cflags Set CFLAGS for use in compilation.])
64if test "x$with_cflags" != "x" ; then
65 CFLAGS="$with_cflags" ; cflags_specified=yes ;
66elif test -n "$CFLAGS" ; then
67 cflags_specified=yes ;
68fi
69
hasso1969e4b2005-03-27 13:07:23 +000070dnl --------------------
71dnl Check CC and friends
72dnl --------------------
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +010073AC_LANG([C])
paul7ea487b2003-03-17 02:05:07 +000074AC_PROG_CC
hasso1969e4b2005-03-27 13:07:23 +000075AC_PROG_CPP
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +010076AM_PROG_CC_C_O
Paul Jakmaf9f47312016-02-16 11:30:33 +000077AC_PROG_RANLIB
hasso1969e4b2005-03-27 13:07:23 +000078AC_PROG_EGREP
Timo Teräsdafa05e2017-01-19 17:27:01 +020079PKG_PROG_PKG_CONFIG
Martin Wintera53d4e52016-10-20 23:55:10 -070080AC_PROG_CC_C99
Greg Troxel553bdfe2007-02-06 20:10:35 +000081
Paul Jakmaf25b7312017-03-07 10:36:14 +000082dnl libtool prereq.
83AC_USE_SYSTEM_EXTENSIONS
84
85dnl -------
86dnl libtool
87dnl -------
88LT_INIT
89
90dnl create libtool now, so we can test version below for
91dnl fstack-protector-strong
92LT_OUTPUT
93
Greg Troxel553bdfe2007-02-06 20:10:35 +000094dnl autoconf 2.59 appears not to support AC_PROG_SED
95dnl AC_PROG_SED
96AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
hasso1969e4b2005-03-27 13:07:23 +000097
Paul Jakma3c06ac02017-02-05 21:45:05 +000098dnl Check for pdflatex and latexmk, in case someone wants to build
99dnl PDFs from TeX (as used to be case for HACKING)
Paul Jakmafa482832012-03-08 13:51:21 +0000100AC_CHECK_PROG([PDFLATEX],[pdflatex],[pdflatex],[/bin/false])
101AC_CHECK_PROG([LATEXMK],[latexmk],[latexmk],[/bin/false])
102if test "x$PDFLATEX" = "x/bin/false" -o "x$LATEXMK" = "x/bin/false"; then
103 AC_MSG_WARN([Will not be able to make PDF versions of TeX documents])
104else
105 HAVE_LATEX=true
106fi
107AM_CONDITIONAL([HAVE_LATEX], [test "x$HAVE_LATEX" = "xtrue"])
Paul Jakma3c06ac02017-02-05 21:45:05 +0000108dnl for making HACKING.pdf from HACKING.md using pandoc
109AC_CHECK_PROG([PANDOC],[pandoc],[pandoc],[/bin/false])
110if test "x$PDFLATEX" = "x/bin/false" -o "x$PANDOC" = "x/bin/false"; then
111 AC_MSG_WARN([Will not be able to make PDF versions of MD documents])
112else
113 HAVE_PANDOC=true
114fi
115AM_CONDITIONAL([HAVE_PANDOC], [test "x$HAVE_PANDOC" = "xtrue"])
Paul Jakmafa482832012-03-08 13:51:21 +0000116
David Lamparter3a7e83c2015-03-03 09:55:51 +0100117if test "x${GCC}" != "xyes" ; then
paul6a4b8832005-11-26 08:28:00 +0000118 AC_MSG_CHECKING([whether we are using SunPro compiler])
119 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
120 [AC_MSG_RESULT([no])],
121 [COMPILER="SUNPRO"
122 AC_MSG_RESULT([yes])]
123 )
124fi
paul7ea487b2003-03-17 02:05:07 +0000125
paula49c0ff2004-09-30 06:08:58 +0000126dnl ---------------------------------------------
paul7ea487b2003-03-17 02:05:07 +0000127dnl If CLFAGS doesn\'t exist set default value
paula49c0ff2004-09-30 06:08:58 +0000128dnl AC_PROG_CC will have set minimal default
129dnl already, eg "-O2 -g" for gcc, "-g" for others
paul27eebb32004-07-22 18:16:59 +0000130dnl (Wall is gcc specific... have to make sure
131dnl gcc is being used before setting it)
132dnl
paul6a4b8832005-11-26 08:28:00 +0000133dnl Sun Studio 10 / SunPro 5.7 is also supported,
134dnl so lets set some sane CFLAGS for it.
135dnl ---------------------------------------------
hasso1969e4b2005-03-27 13:07:23 +0000136
David Lamparter3a7e83c2015-03-03 09:55:51 +0100137AC_DEFUN([AC_C_FLAG], [{
138 AC_LANG_PUSH(C)
139 ac_c_flag_save="$CFLAGS"
140 CFLAGS="$CFLAGS $1"
141 AC_MSG_CHECKING([[whether $CC supports $1]])
142 AC_COMPILE_IFELSE(
143 [AC_LANG_PROGRAM([[]])],
144 [
145 AC_MSG_RESULT([yes])
146 m4_if([$3], [], [], [
147 CFLAGS="$ac_c_flag_save"
148 $3
149 ])
150 ], [
151 CFLAGS="$ac_c_flag_save"
152 AC_MSG_RESULT([no])
153 $2
154 ])
155 AC_LANG_POP(C)
156 }])
157
Paul Jakma32947f22017-03-07 14:35:29 +0000158AC_MSG_CHECKING([which default CFLAGS to set])
paul6a4b8832005-11-26 08:28:00 +0000159if test "x${cflags_specified}" = "x" ; then
160 case ${COMPILER} in
paul6a4b8832005-11-26 08:28:00 +0000161 "SUNPRO")
Paul Jakma32947f22017-03-07 14:35:29 +0000162 AC_MSG_RESULT([Sun Studio])
163 AC_C_FLAG([-g])
164 AC_C_FLAG([-xO4])
165 AC_C_FLAG([-xspace])
166 AC_C_FLAG([-xstrconst])
167 AC_C_FLAG([-xc99])
168 AC_C_FLAG([-errfmt])
169 AC_C_FLAG([-xipo])
170 dnl AC_C_FLAG([-xlinkopt=2]) SPARC only dnl
171 dnl AC_C_FLAG([-xcode=pic32])dnl
David Lamparter3a7e83c2015-03-03 09:55:51 +0100172 ;;
paul6a4b8832005-11-26 08:28:00 +0000173 *)
David Lamparter3a7e83c2015-03-03 09:55:51 +0100174 AC_MSG_RESULT([autodetecting])
175
176 AC_C_FLAG([-diag-error 10006])
David Lamparter3a7e83c2015-03-03 09:55:51 +0100177 AC_C_FLAG([-g])
178 AC_C_FLAG([-Os], [
179 AC_C_FLAG([-O2])
180 ])
Paul Jakmaf25b7312017-03-07 10:36:14 +0000181 dnl fstack-protector-strong gives __stack_chk_fail_local
182 dnl being an 'Undefined symbol' on OpenIndiana hipster, with gcc 6.
183 dnl gcc -shared is being used to do the link, however the error is
184 dnl from ld. Disable. An issue with libtool < 2.4.6 dropping the
185 dnl -fstack-protector-strong argument from the shared link.
186 AC_MSG_CHECKING([whether libtool can support fstack-protector])
187 if test x"$(./libtool --version \
188 | awk -F '[[ \t.]]' \
189 'NR == 1 { \
190 if ($(NF-2) <= 2 && $(NF-1) <= 4 && $NF < 6) \
191 print 0; \
192 else print 1 \
193 }')" = "x1" ; then
194 AC_MSG_RESULT([yes])
195 AC_C_FLAG([-fstack-protector-strong])
Paul Jakma69f8d5d2017-03-08 17:15:58 +0000196 AC_C_FLAG([--param=ssp-buffer-size=4])
Paul Jakmaf25b7312017-03-07 10:36:14 +0000197 else
198 AC_MSG_RESULT([no])
199 AC_MSG_WARN([upgrade to libtool >= 2.4.6!])
200 fi
Paul Jakma69f8d5d2017-03-08 17:15:58 +0000201 AC_C_FLAG([-D_FORTIFY_SOURCE=2])
202 AC_C_FLAG([-Wformat])
203 AC_C_FLAG([-Wformat-security])
Paul Jakma52c0bc72015-08-20 21:30:17 +0100204 AC_C_FLAG([-fpie])
David Lamparter3a7e83c2015-03-03 09:55:51 +0100205 AC_C_FLAG([-fno-omit-frame-pointer])
206 AC_C_FLAG([-Wall])
207 AC_C_FLAG([-Wextra])
208 AC_C_FLAG([-Wmissing-prototypes])
209 AC_C_FLAG([-Wmissing-declarations])
210 AC_C_FLAG([-Wpointer-arith])
211 AC_C_FLAG([-Wbad-function-cast])
212 AC_C_FLAG([-Wwrite-strings])
213 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
214 AC_C_FLAG([-Wcast-qual])
215 AC_C_FLAG([-Wstrict-prototypes])
216 AC_C_FLAG([-Wmissing-noreturn])
217 AC_C_FLAG([-Wmissing-format-attribute])
218 AC_C_FLAG([-Wunreachable-code])
219 AC_C_FLAG([-Wpacked])
220 AC_C_FLAG([-Wpadded])
221 else
222 AC_C_FLAG([-Wno-unused-result])
223 fi
224 AC_C_FLAG([-Wno-unused-parameter])
225 AC_C_FLAG([-Wno-missing-field-initializers])
226 # ICC emits a broken warning for const char *x = a ? "b" : "c";
227 # for some reason the string consts get 'promoted' to char *,
228 # triggering a const to non-const conversion warning.
229 AC_C_FLAG([-diag-disable 3179])
paul6a4b8832005-11-26 08:28:00 +0000230 ;;
231 esac
232else
233 AC_MSG_RESULT([CFLAGS supplied by user])
hasso1969e4b2005-03-27 13:07:23 +0000234fi
235
David Lamparterc0bedeb2015-03-03 10:00:43 +0100236if test x"${enable_werror}" = x"yes" ; then
237 WERROR="-Werror"
238fi
239AC_SUBST(WERROR)
240
paul7ea487b2003-03-17 02:05:07 +0000241dnl --------------
242dnl Check programs
243dnl --------------
paul7ea487b2003-03-17 02:05:07 +0000244AC_PROG_INSTALL
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000245AC_PROG_LN_S
paul7ea487b2003-03-17 02:05:07 +0000246AC_PROG_MAKE_SET
247AC_CHECK_TOOL(AR, ar)
paul7ea487b2003-03-17 02:05:07 +0000248
Paul Jakma105b8232006-05-28 08:02:41 +0000249dnl ---------------------------
250dnl We, perhaps unfortunately,
251dnl depend on GNU Make specific
252dnl constructs.
253dnl Give the user a warning if
254dnl not GNU Make.
255dnl ---------------------------
256AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
257 [quagga_cv_gnu_make=no
258 if ${MAKE-make} --version 2>/dev/null | \
259 grep '^GNU Make ' >/dev/null ; then
260 quagga_cv_gnu_make=yes;
261 fi
262 ]
263)
264
Paul Jakmad46d2a22007-05-10 16:53:04 +0000265dnl -----------------
266dnl System extensions
267dnl -----------------
Paul Jakmad46d2a22007-05-10 16:53:04 +0000268AC_GNU_SOURCE
paul7ea487b2003-03-17 02:05:07 +0000269
gdt87efd642004-06-30 17:36:11 +0000270
paul7ea487b2003-03-17 02:05:07 +0000271dnl ----------------------
272dnl Packages configuration
273dnl ----------------------
Joachim Nilsson1080c132012-05-30 08:15:48 +0200274AC_ARG_WITH(pkg-extra-version,
275 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
276 [EXTRAVERSION=$withval],)
David Lamparter0be793e2012-11-27 01:34:56 +0000277AC_ARG_WITH(pkg-git-version,
278 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
David Lampartera16dcf72012-12-13 11:20:50 +0100279 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
paul7ea487b2003-03-17 02:05:07 +0000280AC_ARG_ENABLE(vtysh,
Donald Sharpe6756782015-07-16 21:18:34 -0400281 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for Quagga]))
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +0100282AC_ARG_ENABLE(doc,
David Lamparterb6fa7602014-06-28 22:15:59 +0200283 AS_HELP_STRING([--disable-doc], [do not build docs]))
paul7ea487b2003-03-17 02:05:07 +0000284AC_ARG_ENABLE(zebra,
David Lamparterb6fa7602014-06-28 22:15:59 +0200285 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
paul7ea487b2003-03-17 02:05:07 +0000286AC_ARG_ENABLE(bgpd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200287 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
paul7ea487b2003-03-17 02:05:07 +0000288AC_ARG_ENABLE(ripd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200289 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
paul7ea487b2003-03-17 02:05:07 +0000290AC_ARG_ENABLE(ripngd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200291 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
paul7ea487b2003-03-17 02:05:07 +0000292AC_ARG_ENABLE(ospfd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200293 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
paul7ea487b2003-03-17 02:05:07 +0000294AC_ARG_ENABLE(ospf6d,
David Lamparterb6fa7602014-06-28 22:15:59 +0200295 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
Timo Teräsdafa05e2017-01-19 17:27:01 +0200296AC_ARG_ENABLE(nhrpd,
297 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
ajsd0199432004-12-22 14:03:52 +0000298AC_ARG_ENABLE(watchquagga,
David Lamparterb6fa7602014-06-28 22:15:59 +0200299 AS_HELP_STRING([--disable-watchquagga], [do not build watchquagga]))
jardin9e867fe2003-12-23 08:56:18 +0000300AC_ARG_ENABLE(isisd,
David Lamparter656a2c02015-02-09 11:36:10 +0100301 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
Everton Marques871dbcf2009-08-11 15:43:05 -0300302AC_ARG_ENABLE(pimd,
Donald Sharpe6756782015-07-16 21:18:34 -0400303 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
paul7ea487b2003-03-17 02:05:07 +0000304AC_ARG_ENABLE(bgp-announce,
David Lamparterb6fa7602014-06-28 22:15:59 +0200305 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
paul7ea487b2003-03-17 02:05:07 +0000306AC_ARG_ENABLE(snmp,
David Lamparterb6fa7602014-06-28 22:15:59 +0200307 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
paul7ea487b2003-03-17 02:05:07 +0000308AC_ARG_WITH(libpam,
David Lamparterb6fa7602014-06-28 22:15:59 +0200309 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
hasso71c0fb52003-05-25 20:18:13 +0000310AC_ARG_ENABLE(tcp-zebra,
David Lamparterb6fa7602014-06-28 22:15:59 +0200311 AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
paul1ef74ef2003-03-21 15:16:05 +0000312AC_ARG_ENABLE(ospfapi,
David Lamparterb6fa7602014-06-28 22:15:59 +0200313 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
paul1ef74ef2003-03-21 15:16:05 +0000314AC_ARG_ENABLE(ospfclient,
David Lamparterb6fa7602014-06-28 22:15:59 +0200315 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
316 (this is the default if --disable-ospfapi is set)]))
paul7ea487b2003-03-17 02:05:07 +0000317AC_ARG_ENABLE(multipath,
David Lamparterb6fa7602014-06-28 22:15:59 +0200318 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
Paul P Komkoff Jrfe86b482008-08-13 16:56:05 +0100319AC_ARG_ENABLE(user,
David Lamparterb6fa7602014-06-28 22:15:59 +0200320 AS_HELP_STRING([--enable-user=USER], [user to run Quagga suite as (default quagga)]))
Paul P Komkoff Jrfe86b482008-08-13 16:56:05 +0100321AC_ARG_ENABLE(group,
David Lamparterb6fa7602014-06-28 22:15:59 +0200322 AS_HELP_STRING([--enable-group=GROUP], [group to run Quagga suite as (default quagga)]))
pauledd7c242003-06-04 13:59:38 +0000323AC_ARG_ENABLE(vty_group,
David Lamparterb6fa7602014-06-28 22:15:59 +0200324 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
gdtaa593d52003-12-22 20:15:53 +0000325AC_ARG_ENABLE(configfile_mask,
David Lamparterb6fa7602014-06-28 22:15:59 +0200326 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
gdtaa593d52003-12-22 20:15:53 +0000327AC_ARG_ENABLE(logfile_mask,
David Lamparterb6fa7602014-06-28 22:15:59 +0200328 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
pauledd7c242003-06-04 13:59:38 +0000329
hasso71c0fb52003-05-25 20:18:13 +0000330AC_ARG_ENABLE(rtadv,
David Lamparterb6fa7602014-06-28 22:15:59 +0200331 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
hassoca776982004-06-12 14:33:05 +0000332AC_ARG_ENABLE(irdp,
David Lamparterb6fa7602014-06-28 22:15:59 +0200333 AS_HELP_STRING([--enable-irdp], [enable IRDP server support in zebra]))
hassof695b012005-04-02 19:03:39 +0000334AC_ARG_ENABLE(isis_topology,
David Lamparterb6fa7602014-06-28 22:15:59 +0200335 AS_HELP_STRING([--enable-isis-topology], [enable IS-IS topology generator]))
hasso41d3fc92004-04-06 11:59:00 +0000336AC_ARG_ENABLE(capabilities,
David Lamparterb6fa7602014-06-28 22:15:59 +0200337 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
Stephen Hemminger47f6aef2013-01-04 22:29:22 +0000338AC_ARG_ENABLE(rusage,
David Lamparterb6fa7602014-06-28 22:15:59 +0200339 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
paul6b6942f2004-10-22 04:55:05 +0000340AC_ARG_ENABLE(gcc_ultra_verbose,
David Lamparterb6fa7602014-06-28 22:15:59 +0200341 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
Paul Jakma3453a712009-06-12 14:21:02 +0100342AC_ARG_ENABLE(linux24_tcp_md5,
David Lamparterb6fa7602014-06-28 22:15:59 +0200343 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
ajs3cade262004-12-29 17:50:22 +0000344AC_ARG_ENABLE(gcc-rdynamic,
David Lamparterb6fa7602014-06-28 22:15:59 +0200345 AS_HELP_STRING([--enable-gcc-rdynamic], [enable linking with -rdynamic for better backtraces (default if gcc)]))
David Lamparter8c99b4c2013-08-01 07:43:36 +0000346AC_ARG_ENABLE(backtrace,
David Lamparterb6fa7602014-06-28 22:15:59 +0200347 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
ajs924b9222005-04-16 17:11:24 +0000348AC_ARG_ENABLE(time-check,
David Lamparterb6fa7602014-06-28 22:15:59 +0200349 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
Jeremy Jackson25f45882009-01-12 16:06:12 -0500350AC_ARG_ENABLE(pcreposix,
David Lamparterb6fa7602014-06-28 22:15:59 +0200351 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000352AC_ARG_ENABLE(fpm,
David Lamparterb6fa7602014-06-28 22:15:59 +0200353 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
David Lamparterc0bedeb2015-03-03 10:00:43 +0100354AC_ARG_ENABLE(werror,
355 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
Avneesh Sachdev07e5b642016-04-04 10:54:55 -0700356AC_ARG_ENABLE([protobuf],
357 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
paul6b6942f2004-10-22 04:55:05 +0000358
Avneesh Sachdev7e4025c2016-03-11 12:21:24 -0800359AC_ARG_ENABLE([dev_build],
360 AS_HELP_STRING([--enable-dev-build], [build for development]))
361
David Lamparter8c99b4c2013-08-01 07:43:36 +0000362if test x"${enable_gcc_rdynamic}" != x"no" ; then
363 if test x"${enable_gcc_rdynamic}" = x"yes" -o x"$COMPILER" = x"GCC"; then
364 LDFLAGS="${LDFLAGS} -rdynamic"
365 fi
ajs3cade262004-12-29 17:50:22 +0000366fi
367
ajs924b9222005-04-16 17:11:24 +0000368if test x"${enable_time_check}" != x"no" ; then
369 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
370 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
371 else
372 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
373 fi
374fi
375
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000376if test "${enable_fpm}" = "yes"; then
377 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
378fi
379
Avneesh Sachdev7e4025c2016-03-11 12:21:24 -0800380if test "x${enable_dev_build}" = "xyes"; then
381 AC_DEFINE(DEV_BUILD,,Build for development)
382fi
383AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
384
Avneesh Sachdev07e5b642016-04-04 10:54:55 -0700385#
386# Logic for protobuf support.
387#
388if test "$enable_protobuf" = "yes"; then
389 have_protobuf=yes
390
391 # Check for protoc-c
392 AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
393 if test "x$PROTOC_C" = "x/bin/false"; then
394 have_protobuf=no
395 else
396 found_protobuf_c=no
397 PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
398 [found_protobuf_c=yes],
399 [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
400
401 if test "x$found_protobuf_c" = "xyes"; then
402 LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
403 CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
404 else
405 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
406 [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
407 fi
408 fi
409fi
410
411# Fail if the user explicity enabled protobuf support and we couldn't
412# find the compiler or libraries.
413if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
414 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
415fi
416
417if test "x$have_protobuf" = "xyes"; then
418 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
419fi
420
421AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
422
423#
424# End of logic for protobuf support.
425#
426
paul7ea487b2003-03-17 02:05:07 +0000427if test "${enable_tcp_zebra}" = "yes"; then
428 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
429fi
430
Paul Jakma3453a712009-06-12 14:21:02 +0100431if test "${enable_linux24_tcp_md5}" = "yes"; then
432 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
433fi
434
gdtd2a0ccc2003-12-03 18:13:48 +0000435AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
436if test "${enable_rtadv}" != "no"; then
hasso71c0fb52003-05-25 20:18:13 +0000437 AC_MSG_RESULT(yes)
gdtd2a0ccc2003-12-03 18:13:48 +0000438 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
paul2487bea2003-05-25 23:51:31 +0000439else
440 AC_MSG_RESULT(no)
hasso71c0fb52003-05-25 20:18:13 +0000441fi
paul7ea487b2003-03-17 02:05:07 +0000442
hassoca776982004-06-12 14:33:05 +0000443if test "${enable_irdp}" = "yes"; then
444 AC_DEFINE(HAVE_IRDP,, IRDP )
445fi
446
David Lamparter656a2c02015-02-09 11:36:10 +0100447if test "${enable_isisd}" != "no" && test "${enable_isis_topology}" = yes; then
hassof695b012005-04-02 19:03:39 +0000448 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
David Lamparteree1ac2d2012-07-19 12:58:59 +0200449 ISIS_TOPOLOGY_INCLUDES="-I\$(srcdir)/topology"
hassof695b012005-04-02 19:03:39 +0000450 ISIS_TOPOLOGY_DIR="topology"
451 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
452fi
453
454AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
455AC_SUBST(ISIS_TOPOLOGY_DIR)
456AC_SUBST(ISIS_TOPOLOGY_LIB)
457
Jafar Al-Gharaibeha8f97902016-07-28 14:41:20 -0500458if test x"${enable_user}" = x"no"; then
459 enable_user=""
460else
461 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
462 enable_user="quagga"
463 fi
464 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
pauledd7c242003-06-04 13:59:38 +0000465fi
pauledd7c242003-06-04 13:59:38 +0000466
Jafar Al-Gharaibeha8f97902016-07-28 14:41:20 -0500467if test x"${enable_group}" = x"no"; then
468 enable_group=""
469else
470 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
471 enable_group="quagga"
472 fi
473 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
pauledd7c242003-06-04 13:59:38 +0000474fi
pauledd7c242003-06-04 13:59:38 +0000475
476if test x"${enable_vty_group}" = x"yes" ; then
paul8d4aee52003-06-06 00:30:35 +0000477 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
paul79cb2162003-06-06 12:19:53 +0000478elif test x"${enable_vty_group}" != x""; then
paul8d4aee52003-06-06 00:30:35 +0000479 if test x"${enable_vty_group}" != x"no"; then
pauledd7c242003-06-04 13:59:38 +0000480 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
481 fi
482fi
paul26275b02005-04-11 07:10:47 +0000483AC_SUBST([enable_user])
484AC_SUBST([enable_group])
485AC_SUBST([enable_vty_group])
pauledd7c242003-06-04 13:59:38 +0000486
gdtaa593d52003-12-22 20:15:53 +0000487enable_configfile_mask=${enable_configfile_mask:-0600}
488AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
489
490enable_logfile_mask=${enable_logfile_mask:-0600}
491AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
492
Donald Sharpd1839632015-12-09 08:24:44 -0500493MPATH_NUM=1
paul7ea487b2003-03-17 02:05:07 +0000494
495case "${enable_multipath}" in
Donald Sharpd1839632015-12-09 08:24:44 -0500496 0)
497 MPATH_NUM=64
498 ;;
499 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
500 MPATH_NUM="${enable_multipath}"
paul7ea487b2003-03-17 02:05:07 +0000501 ;;
502 "")
503 ;;
504 *)
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000505 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
paul7ea487b2003-03-17 02:05:07 +0000506 ;;
507esac
508
Donald Sharpd1839632015-12-09 08:24:44 -0500509AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
paul7ea487b2003-03-17 02:05:07 +0000510
Joachim Nilsson1080c132012-05-30 08:15:48 +0200511dnl -----------------------------------
512dnl Add extra version string to package
513dnl name, string and version fields.
514dnl -----------------------------------
515if test "x${EXTRAVERSION}" != "x" ; then
David Lamparter0be793e2012-11-27 01:34:56 +0000516 VERSION="${VERSION}${EXTRAVERSION}"
517 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
518 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
Joachim Nilsson1080c132012-05-30 08:15:48 +0200519fi
520
David Lampartera16dcf72012-12-13 11:20:50 +0100521if test "x$with_pkg_git_version" = "xyes"; then
522 if test -d "${srcdir}/.git"; then
523 AC_DEFINE(GIT_VERSION, [1], [include git version info])
524 else with_pkg_git_version="no"
525 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
526 fi
527fi
528AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
David Lamparter0be793e2012-11-27 01:34:56 +0000529
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000530dnl ------------------------------------
531dnl Check C keywords and standard types
532dnl ------------------------------------
533AC_C_CONST
534AC_C_INLINE
535AC_C_RESTRICT
536AC_C_VOLATILE
pauldc7a2bf2003-10-22 00:07:44 +0000537AC_HEADER_STDC
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000538AC_HEADER_TIME
539AC_HEADER_SYS_WAIT
Paul Jakmae8441a82015-09-15 16:15:27 +0100540AC_HEADER_STDBOOL
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000541dnl AC_TYPE_PID_T
542AC_TYPE_UID_T
543AC_TYPE_MODE_T
544AC_TYPE_SIZE_T
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000545AC_STRUCT_TM
pauldc7a2bf2003-10-22 00:07:44 +0000546
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000547dnl -------------------------
548dnl Check other header files.
549dnl -------------------------
550AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
551 sys/types.h linux/version.h netdb.h asm/types.h \
Timo Teräs16ffb262014-07-29 09:41:54 +0000552 sys/cdefs.h sys/param.h limits.h signal.h \
Paul Jakma7e49a4f2016-08-02 13:36:03 +0100553 sys/socket.h netinet/in.h time.h sys/time.h features.h])
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000554
555dnl Utility macro to avoid retyping includes all the time
556m4_define([QUAGGA_INCLUDES],
557[#ifdef SUNOS_5
558#define _XPG4_2
559#define __EXTENSIONS__
560#endif
561#include <stdio.h>
562#if STDC_HEADERS
563# include <stdlib.h>
564# include <stddef.h>
565#else
566# if HAVE_STDLIB_H
567# include <stdlib.h>
568# endif
569#endif
570#if HAVE_SYS_TYPES_H
571# include <sys/types.h>
572#endif
573/* sys/conf.h depends on param.h on FBSD at least */
574#if HAVE_SYS_PARAM_H
575# include <sys/param.h>
576#endif
577/* Required for MAXSIG */
578#if HAVE_SIGNAL_H
579# include <signal.h>
580#endif
581#if HAVE_SYS_SOCKET_H
582# include <sys/socket.h>
583#endif
Hasso Tepperea057672013-01-13 17:45:29 +0000584#ifdef __APPLE__
585# define __APPLE_USE_RFC_3542
586#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000587#if HAVE_NETINET_IN_H
588# include <netinet/in.h>
589#endif
Paul Jakma6511cab2009-06-18 17:38:01 +0100590#ifdef TIME_WITH_SYS_TIME
591# include <sys/time.h>
592# include <time.h>
593#else
594# ifdef HAVE_SYS_TIME_H
595# include <sys/time.h>
596# else
597# include <time.h>
598# endif
599#endif /* TIME_WITH_SYS_TIME */
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000600])dnl
601
Denis Ovsienko2b43bf22011-07-14 16:30:08 +0400602dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
603dnl round below execution begins, otherwise it doesn't properly detect
604dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
605dnl on FreeBSD (BZ#408).
606
607AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
608
609m4_define([QUAGGA_INCLUDES],
610QUAGGA_INCLUDES
611[#if HAVE_NET_IF_H
612# include <net/if.h>
613#endif
614])dnl
615
616dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
617dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
618dnl an additional round for it.
619
620AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
621
622m4_define([QUAGGA_INCLUDES],
623QUAGGA_INCLUDES
624[#if HAVE_NET_IF_VAR_H
625# include <net/if_var.h>
626#endif
627])dnl
628
629AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
630 net/if_dl.h net/netopt.h net/route.h \
Paul Jakma11770e12007-06-22 16:14:42 +0000631 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000632 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
633 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
634 [], [], QUAGGA_INCLUDES)
635
636AC_CHECK_HEADERS([ucontext.h], [], [],
637[#ifndef __USE_GNU
638#define __USE_GNU
639#endif /* __USE_GNU */
640QUAGGA_INCLUDES
641])
642
Joakim Tjernlundb166ea22009-06-25 16:40:06 +0100643m4_define([UCONTEXT_INCLUDES],
644[#include <ucontext.h>])dnl
645
646AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
647 [], [], [UCONTEXT_INCLUDES])
648AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
649 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
650 [], [], [UCONTEXT_INCLUDES])],
651 [], [UCONTEXT_INCLUDES])
652AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
653 [], [], [UCONTEXT_INCLUDES])
654
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000655m4_define([QUAGGA_INCLUDES],
656QUAGGA_INCLUDES
Denis Ovsienko2b43bf22011-07-14 16:30:08 +0400657[#if HAVE_SYS_UN_H
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000658# include <sys/un.h>
659#endif
660#if HAVE_NETINET_IN_SYSTM_H
661# include <netinet/in_systm.h>
662#endif
663#if HAVE_NETINET_IN_VAR_H
664# include <netinet/in_var.h>
665#endif
666#if HAVE_NET_IF_DL_H
667# include <net/if_dl.h>
668#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000669#if HAVE_NET_NETOPT_H
670# include <net/netopt.h>
671#endif
672#if HAVE_NET_ROUTE_H
673# include <net/route.h>
674#endif
675#if HAVE_INET_ND_H
676# include <inet/nd.h>
677#endif
678#if HAVE_ARPA_INET_H
679# include <arpa/inet.h>
680#endif
Paul Jakma11770e12007-06-22 16:14:42 +0000681/* Required for IDRP */
682#if HAVE_NETINET_IP_ICMP_H
683# include <netinet/ip_icmp.h>
684#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000685])dnl
pauldc7a2bf2003-10-22 00:07:44 +0000686
gdtfa3232e2003-12-03 17:52:30 +0000687dnl V6 headers are checked below, after we check for v6
paul7ea487b2003-03-17 02:05:07 +0000688
paul7ea487b2003-03-17 02:05:07 +0000689dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
690case "$host" in
paulafd8a122005-03-12 06:36:10 +0000691 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
paul7ea487b2003-03-17 02:05:07 +0000692 opsys=sol2-6
paulafd8a122005-03-12 06:36:10 +0000693 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
paul19877dd2004-05-11 10:49:35 +0000694 AC_DEFINE(SUNOS_5, 1, SunOS 5)
paul7ea487b2003-03-17 02:05:07 +0000695 AC_CHECK_LIB(xnet, main)
696 CURSES=-lcurses
David Lampartere8d0d242014-06-28 22:07:41 +0200697 SOLARIS="solaris"
paul7ea487b2003-03-17 02:05:07 +0000698 ;;
paul1b73de82005-04-10 16:31:51 +0000699 [*-sunos5.[8-9]] \
700 | [*-sunos5.1[0-9]] \
701 | [*-sunos5.1[0-9].[0-9]] \
702 | [*-solaris2.[8-9]] \
703 | [*-solaris2.1[0-9]] \
704 | [*-solaris2.1[0-9].[0-9]])
paulafd8a122005-03-12 06:36:10 +0000705 opsys=sol8
Paul Jakmafb66b292006-05-28 08:26:15 +0000706 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
707 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
paul19877dd2004-05-11 10:49:35 +0000708 AC_CHECK_LIB(socket, main)
709 AC_CHECK_LIB(nsl, main)
paul1b73de82005-04-10 16:31:51 +0000710 AC_CHECK_LIB(umem, main)
Paul Jakmafb66b292006-05-28 08:26:15 +0000711 AC_CHECK_FUNCS([printstack],
712 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
713 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
714 ])
paul19877dd2004-05-11 10:49:35 +0000715 CURSES=-lcurses
David Lampartere8d0d242014-06-28 22:07:41 +0200716 SOLARIS="solaris"
paul19877dd2004-05-11 10:49:35 +0000717 ;;
paul7ea487b2003-03-17 02:05:07 +0000718 *-sunos5* | *-solaris2*)
paul19877dd2004-05-11 10:49:35 +0000719 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
paul7ea487b2003-03-17 02:05:07 +0000720 AC_CHECK_LIB(socket, main)
721 AC_CHECK_LIB(nsl, main)
722 CURSES=-lcurses
David Lampartere8d0d242014-06-28 22:07:41 +0200723 SOLARIS="solaris"
paul7ea487b2003-03-17 02:05:07 +0000724 ;;
hassoc45eb832005-02-19 13:58:06 +0000725 *-linux*)
paul7ea487b2003-03-17 02:05:07 +0000726 opsys=gnu-linux
727 AC_DEFINE(GNU_LINUX,,GNU Linux)
728 ;;
paul7ea487b2003-03-17 02:05:07 +0000729 *-openbsd*)
730 opsys=openbsd
731 AC_DEFINE(OPEN_BSD,,OpenBSD)
732 ;;
paul7ea487b2003-03-17 02:05:07 +0000733esac
734
Paul Jakma62c9f502009-07-19 17:33:21 +0100735AC_SYS_LARGEFILE
736
paul7ea487b2003-03-17 02:05:07 +0000737dnl ---------------------
738dnl Integrated VTY option
739dnl ---------------------
740case "${enable_vtysh}" in
Donald Sharpe6756782015-07-16 21:18:34 -0400741 "no") VTYSH="";;
742 *) VTYSH="vtysh";
paul7ea487b2003-03-17 02:05:07 +0000743 AC_DEFINE(VTYSH,,VTY shell)
gdtfc9d0742004-06-30 14:25:12 +0000744dnl Vtysh uses libreadline, which looks for termcap functions at
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000745dnl configure time. We follow readlines search order.
gdtfc9d0742004-06-30 14:25:12 +0000746dnl The required procedures are in libtermcap on NetBSD, in
747dnl [TODO] on Linux, and in [TODO] on Solaris.
hassoc0689392005-08-25 12:00:58 +0000748 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
paula9694592005-08-25 14:50:05 +0000749 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
750 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
751 [AC_CHECK_LIB(ncurses, tputs,
752 LIBREADLINE="$LIBREADLINE -lncurses")]
753 )]
754 )]
755 )
Thomas Petazzoni64f8c7d2016-08-21 09:23:04 +0300756 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
paula9694592005-08-25 14:50:05 +0000757 "$LIBREADLINE")
paul7ea487b2003-03-17 02:05:07 +0000758 if test $ac_cv_lib_readline_main = no; then
gdtfc9d0742004-06-30 14:25:12 +0000759 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
paul7ea487b2003-03-17 02:05:07 +0000760 fi
761 AC_CHECK_HEADER(readline/history.h)
762 if test $ac_cv_header_readline_history_h = no;then
763 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
764 fi
paula9694592005-08-25 14:50:05 +0000765 AC_CHECK_LIB(readline, rl_completion_matches,
766 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
paul3d3de8c2003-05-23 10:33:49 +0000767 if test $ac_cv_lib_readline_rl_completion_matches = no; then
768 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
769 fi
770 ;;
paul7ea487b2003-03-17 02:05:07 +0000771 "no" ) VTYSH="";;
paul7ea487b2003-03-17 02:05:07 +0000772esac
hassoc0689392005-08-25 12:00:58 +0000773AC_SUBST(LIBREADLINE)
David Wardf027d332012-04-30 11:36:15 -0400774AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
paul7ea487b2003-03-17 02:05:07 +0000775
776dnl ----------
777dnl PAM module
Denis Ovsienko61599282011-07-15 00:24:15 +0400778dnl
779dnl Quagga detects the PAM library it is built against by checking for a
780dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
781dnl is known to #include pam_appl.h, the standard header of a PAM library, and
782dnl openpam.h doesn't do that, although depends on the header too. Hence a
783dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
784dnl of OpenPAM.
paul7ea487b2003-03-17 02:05:07 +0000785dnl ----------
786if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000787 AC_CHECK_HEADER([security/pam_misc.h],
788 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
789 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
790 pam_conv_func="misc_conv"
791 ],
792 [], QUAGGA_INCLUDES)
793 AC_CHECK_HEADER([security/openpam.h],
794 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
795 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
796 pam_conv_func="openpam_ttyconv"
797 ],
Denis Ovsienko61599282011-07-15 00:24:15 +0400798 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
paul24cd4352003-05-06 12:16:27 +0000799 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
800 AC_MSG_WARN([*** pam support will not be built ***])
801 with_libpam="no"
802 fi
803fi
804
805if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000806dnl took this test from proftpds configure.in and suited to our needs
paul7ea487b2003-03-17 02:05:07 +0000807dnl -------------------------------------------------------------------------
808dnl
809dnl This next check looks funky due to a linker problem with some versions
810dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
811dnl omitted requiring libdl linking information. PAM-0.72 or better ships
812dnl with RedHat 6.2 and Debian 2.2 or better.
813AC_CHECK_LIB(pam, pam_start,
paul24cd4352003-05-06 12:16:27 +0000814 [AC_CHECK_LIB(pam, $pam_conv_func,
paul7ea487b2003-03-17 02:05:07 +0000815 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
816 LIBPAM="-lpam"],
817 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
818 LIBPAM="-lpam -lpam_misc"]
819 )
820 ],
821
822 [AC_CHECK_LIB(pam, pam_end,
paul24cd4352003-05-06 12:16:27 +0000823 [AC_CHECK_LIB(pam, $pam_conv_func,
paula159ed92003-06-04 11:01:45 +0000824 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000825 LIBPAM="-lpam -ldl"],
paula159ed92003-06-04 11:01:45 +0000826 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000827 LIBPAM="-lpam -ldl -lpam_misc"]
828 )
829 ],AC_MSG_WARN([*** pam support will not be built ***]),
830 [-ldl])
831 ]
832)
833fi
834AC_SUBST(LIBPAM)
835
836dnl -------------------------------
837dnl Endian-ness check
838dnl -------------------------------
839AC_WORDS_BIGENDIAN
840
841dnl -------------------------------
842dnl check the size in byte of the C
843dnl -------------------------------
844dnl AC_CHECK_SIZEOF(char)
845dnl AC_CHECK_SIZEOF(int)
846dnl AC_CHECK_SIZEOF(short)
847dnl AC_CHECK_SIZEOF(long)
848
849dnl ----------------------------
850dnl check existance of functions
851dnl ----------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000852AC_FUNC_CHOWN
853AC_FUNC_FNMATCH
854AC_FUNC_FORK
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000855AC_FUNC_MEMCMP
856AC_FUNC_MKTIME
857AC_FUNC_STRFTIME
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000858AC_FUNC_STAT
859AC_FUNC_SELECT_ARGTYPES
860AC_FUNC_STRFTIME
Paul Jakmad46d2a22007-05-10 16:53:04 +0000861dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
862dnl can lead to strange side effects. So we just check for strnlen
863dnl directly, see below.
Paul Jakma2b5cb412007-05-10 17:05:16 +0000864dnl AC_FUNC_STRNLENdnl
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000865AC_FUNC_VPRINTF
866
867dnl -------------------------------
868dnl bgpd needs pow() and hence libm
869dnl -------------------------------
870TMPLIBS="$LIBS"
871AC_CHECK_HEADER([math.h],
872 [AC_CHECK_LIB([m], [pow],
873 [LIBM="-lm"
874 LIBS="$LIBS $LIBM"
875 AC_DEFINE(HAVE_LIBM,, Have libm)
876 AC_CHECK_FUNCS(pow,[],[LIBM=""])
877 ])
878])
879if test x"$LIBM" = x ; then
880 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
881fi
882LIBS="$TMPLIBS"
883AC_SUBST(LIBM)
884
885dnl ---------------
886dnl other functions
887dnl ---------------
888AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
Paul Jakmad46d2a22007-05-10 16:53:04 +0000889 inet_ntoa inet_aton strnlen \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000890 memchr memmove memset select socket \
891 strcasecmp strchr strcspn strdup strerror \
892 strncasecmp strndup strrchr strspn strstr \
893 strtol strtoul strlcat strlcpy \
894 daemon snprintf vsnprintf \
895 if_nametoindex if_indextoname getifaddrs \
David Lamparter12bbd622015-09-15 02:26:44 -0700896 uname fcntl getgrouplist])
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000897
paul7ea487b2003-03-17 02:05:07 +0000898
Feng Lu55cfa2f2014-07-03 18:24:34 +0800899AC_CHECK_HEADER([asm-generic/unistd.h],
900 [AC_CHECK_DECL(__NR_setns,
901 AC_DEFINE(HAVE_NETNS,, Have netns),,
902 QUAGGA_INCLUDES [#include <asm-generic/unistd.h>
903 ])
904 AC_CHECK_FUNCS(setns, AC_DEFINE(HAVE_SETNS,, Have setns))]
905 )
906
paul7ea487b2003-03-17 02:05:07 +0000907dnl ------------------------------------
908dnl Determine routing get and set method
909dnl ------------------------------------
910AC_MSG_CHECKING(zebra between kernel interface method)
911if test x"$opsys" = x"gnu-linux"; then
David Lamparter2e5ca492014-06-28 20:54:31 +0200912 AC_MSG_RESULT(netlink)
913 RT_METHOD=rt_netlink.o
914 AC_DEFINE(HAVE_NETLINK,,netlink)
915 netlink=yes
paul7ea487b2003-03-17 02:05:07 +0000916else
David Lamparter39b233f2014-06-28 21:49:18 +0200917 AC_MSG_RESULT(Route socket)
918 KERNEL_METHOD="kernel_socket.o"
919 RT_METHOD="rt_socket.o"
paul7ea487b2003-03-17 02:05:07 +0000920fi
921AC_SUBST(RT_METHOD)
922AC_SUBST(KERNEL_METHOD)
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000923AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
paul7ea487b2003-03-17 02:05:07 +0000924
Paul Jakma238497f2007-08-07 18:49:18 +0000925dnl --------------------------
926dnl Determine IS-IS I/O method
927dnl --------------------------
David Lamparter745bf052010-02-02 21:49:35 +0100928AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
929AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
930AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
Paul Jakma238497f2007-08-07 18:49:18 +0000931AC_CHECK_HEADER(net/bpf.h)
932AC_CHECK_HEADER(sys/dlpi.h)
933AC_MSG_CHECKING(zebra IS-IS I/O method)
934if test x"$opsys" = x"gnu-linux"; then
935 AC_MSG_RESULT(pfpacket)
David Lamparter745bf052010-02-02 21:49:35 +0100936 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
Paul Jakma238497f2007-08-07 18:49:18 +0000937elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
938 AC_MSG_RESULT(DLPI)
David Lamparter745bf052010-02-02 21:49:35 +0100939 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
Paul Jakma238497f2007-08-07 18:49:18 +0000940else
941 if test $ac_cv_header_net_bpf_h = no; then
942 if test $ac_cv_header_sys_dlpi_h = no; then
943 AC_MSG_RESULT(none)
944 AC_MSG_WARN([*** IS-IS support will not be built ***])
945 ISISD=""
946 else
947 AC_MSG_RESULT(DLPI)
948 fi
David Lamparter745bf052010-02-02 21:49:35 +0100949 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
Paul Jakma238497f2007-08-07 18:49:18 +0000950 else
951 AC_MSG_RESULT(BPF)
David Lamparter745bf052010-02-02 21:49:35 +0100952 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
Paul Jakma238497f2007-08-07 18:49:18 +0000953 fi
954fi
David Lamparter745bf052010-02-02 21:49:35 +0100955AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
Paul Jakma238497f2007-08-07 18:49:18 +0000956
ajsb99760a2005-01-04 16:24:43 +0000957dnl ------------------------------------
958dnl check for broken CMSG_FIRSTHDR macro
959dnl ------------------------------------
gdt6c200462005-01-04 17:02:48 +0000960AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
hasso5b087522005-04-03 23:46:37 +0000961AC_RUN_IFELSE([AC_LANG_SOURCE([[
ajsb99760a2005-01-04 16:24:43 +0000962#ifdef SUNOS_5
963#define _XPG4_2
964#define __EXTENSIONS__
965#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000966#ifdef HAVE_STDLIB_H
967# include <stdlib.h>
968#endif
969#ifdef HAVE_SYS_TYPES_H
ajsb99760a2005-01-04 16:24:43 +0000970#include <sys/types.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000971#endif
972#ifdef HAVE_SYS_SOCKET_H
ajsb99760a2005-01-04 16:24:43 +0000973#include <sys/socket.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000974#endif
ajsb99760a2005-01-04 16:24:43 +0000975
976main()
977{
978 struct msghdr msg;
979 char buf[4];
980
981 msg.msg_control = buf;
982 msg.msg_controllen = 0;
983
984 if (CMSG_FIRSTHDR(&msg) != NULL)
985 exit(0);
986 exit (1);
hasso5b087522005-04-03 23:46:37 +0000987}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
hassod33e8d72005-04-03 13:07:21 +0000988[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
ajsb99760a2005-01-04 16:24:43 +0000989
paul7ea487b2003-03-17 02:05:07 +0000990dnl ------------------------------
991dnl check kernel route read method
992dnl ------------------------------
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500993AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
994[if test "x$netlink" = xyes; then
995 quagga_cv_rtread_method="netlink"
paul7ea487b2003-03-17 02:05:07 +0000996else
David Lamparter2e5ca492014-06-28 20:54:31 +0200997for quagga_cv_rtread_method in /dev/ip /dev/null;
paul7ea487b2003-03-17 02:05:07 +0000998do
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500999 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
paul7ea487b2003-03-17 02:05:07 +00001000done
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001001case $quagga_cv_rtread_method in
paul9c30ab62003-07-08 08:36:17 +00001002 "/dev/ip")
1003 case "$host" in
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001004 *-freebsd*) quagga_cv_rtread_method="sysctl";;
1005 *) quagga_cv_rtread_method="getmsg";;
paul9c30ab62003-07-08 08:36:17 +00001006 esac;;
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001007 *)
1008 quagga_cv_rtread_method="sysctl";;
paul7ea487b2003-03-17 02:05:07 +00001009esac
1010fi])
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001011RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
paul7ea487b2003-03-17 02:05:07 +00001012AC_SUBST(RTREAD_METHOD)
1013
1014dnl -----------------------------
1015dnl check interface lookup method
1016dnl -----------------------------
paul19877dd2004-05-11 10:49:35 +00001017IOCTL_METHOD=ioctl.o
paul7ea487b2003-03-17 02:05:07 +00001018AC_MSG_CHECKING(interface looking up method)
1019if test "$netlink" = yes; then
1020 AC_MSG_RESULT(netlink)
1021 IF_METHOD=if_netlink.o
paul19877dd2004-05-11 10:49:35 +00001022elif test "$opsys" = "sol2-6";then
1023 AC_MSG_RESULT(Solaris GIF)
1024 IF_METHOD=if_ioctl.o
paulafd8a122005-03-12 06:36:10 +00001025elif test "$opsys" = "sol8";then
paul19877dd2004-05-11 10:49:35 +00001026 AC_MSG_RESULT(Solaris GLIF)
1027 IF_METHOD=if_ioctl_solaris.o
1028 IOCTL_METHOD=ioctl_solaris.o
paul19877dd2004-05-11 10:49:35 +00001029elif test "$opsys" = "openbsd";then
1030 AC_MSG_RESULT(openbsd)
1031 IF_METHOD=if_ioctl.o
1032elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
1033 AC_MSG_RESULT(sysctl)
paul7ea487b2003-03-17 02:05:07 +00001034 IF_METHOD=if_sysctl.o
1035 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
paul19877dd2004-05-11 10:49:35 +00001036else
paul7ea487b2003-03-17 02:05:07 +00001037 AC_MSG_RESULT(ioctl)
1038 IF_METHOD=if_ioctl.o
paul7ea487b2003-03-17 02:05:07 +00001039fi
1040AC_SUBST(IF_METHOD)
paul19877dd2004-05-11 10:49:35 +00001041AC_SUBST(IOCTL_METHOD)
paul7ea487b2003-03-17 02:05:07 +00001042
paul42c98192005-05-07 02:22:51 +00001043dnl ---------------------------------------------------------------
1044dnl figure out how to specify an interface in multicast sockets API
1045dnl ---------------------------------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001046AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
paul42c98192005-05-07 02:22:51 +00001047
Donald Sharp1934e782015-06-05 12:15:44 -07001048AC_CHECK_HEADERS([linux/mroute.h], [], [],
1049[
1050#if HAVE_NETINET_IN_H
1051#include<netinet/in.h>
1052#endif])
paul42c98192005-05-07 02:22:51 +00001053AC_MSG_CHECKING([for BSD struct ip_mreq hack])
1054AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
1055#include <sys/param.h>
Brian Bennettb8a893c2015-02-17 22:32:22 +00001056#endif],[#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__sun)
paul42c98192005-05-07 02:22:51 +00001057 return (0);
1058#else
1059 #error No support for BSD struct ip_mreq hack detected
1060#endif],[AC_MSG_RESULT(yes)
1061AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1062AC_MSG_RESULT(no))
1063
Dmitrij Tejblum10d04cd2011-08-22 11:39:35 +04001064AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1065AC_TRY_COMPILE([
1066#include <sys/types.h>
1067#include <netinet/in.h>
1068], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1069], [AC_MSG_RESULT(yes)
1070AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1071AC_MSG_RESULT(no))
1072
Andrew J. Schorrc543a172008-01-10 15:24:32 +00001073dnl ---------------------------------------------------------------
1074dnl figure out how to check link-state
1075dnl ---------------------------------------------------------------
Andrew J. Schorr6418bed2008-01-11 16:33:59 +00001076AC_CHECK_HEADER([net/if.h],
1077 [AC_CHECK_HEADER( [net/if_media.h],
1078 [m4_define([LINK_DETECT_INCLUDES],
1079 QUAGGA_INCLUDES
1080 [#include <net/if_media.h>
1081 ])
1082 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1083 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1084 [], LINK_DETECT_INCLUDES)],
1085 [],
1086 QUAGGA_INCLUDES)],
1087 [], QUAGGA_INCLUDES )
Andrew J. Schorrc543a172008-01-10 15:24:32 +00001088
Doug VanLeuven9234b382012-10-10 16:12:32 -07001089dnl ---------------------------------------------------------------
1090dnl Additional, newer way to check link-state using ifi_link_state.
1091dnl Not available in all BSD's when ifmediareq available
1092dnl ---------------------------------------------------------------
1093AC_CHECK_HEADER([net/if.h],
1094 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1095 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1096 [], QUAGGA_INCLUDES),
1097 ,)
1098
Paul Jakma0df7c912008-07-21 21:02:49 +00001099dnl ------------------------
1100dnl TCP_MD5SIG socket option
1101dnl ------------------------
1102
1103AC_CHECK_HEADER([netinet/tcp.h],
1104 [m4_define([MD5_INCLUDES],
1105 QUAGGA_INCLUDES
1106 [#include <netinet/tcp.h>
1107 ])
1108 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1109 [],
1110 QUAGGA_INCLUDES)
1111if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1112 AC_CHECK_HEADER([linux/tcp.h],
1113 [m4_define([MD5_INCLUDES],
1114 QUAGGA_INCLUDES
1115 [#include <linux/tcp.h>
1116 ])
1117 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1118fi
1119
paul7ea487b2003-03-17 02:05:07 +00001120dnl -----------------------------
1121dnl check ipforward detect method
1122dnl -----------------------------
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001123AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
David Lamparterca9f3422009-09-16 02:11:00 +02001124[if test x$cross_compiling = xyes; then
1125 if test x"$opsys" = x"gnu-linux"; then
1126 quagga_cv_ipforward_method=/proc/net/snmp
1127 else
1128 quagga_cv_ipforward_method=/dev/ip
1129 fi
1130else
1131 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1132 do
1133 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1134 done
1135fi
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001136case $quagga_cv_ipforward_method in
1137 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
paul7ea487b2003-03-17 02:05:07 +00001138 "/dev/ip")
1139 case "$host" in
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001140 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1141 *) quagga_cv_ipforward_method="solaris";;
paul7ea487b2003-03-17 02:05:07 +00001142 esac;;
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001143 *) quagga_cv_ipforward_method="sysctl";;
paul7ea487b2003-03-17 02:05:07 +00001144esac])
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001145IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
paul7ea487b2003-03-17 02:05:07 +00001146AC_SUBST(IPFORWARD)
1147
1148AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
1149
1150dnl ----------
1151dnl IPv6 check
1152dnl ----------
1153AC_MSG_CHECKING(whether does this OS have IPv6 stack)
paul7ea487b2003-03-17 02:05:07 +00001154dnl ---------
1155dnl KAME IPv6
1156dnl ---------
David Lamparter6d6df302014-06-28 21:12:37 +02001157 if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
paula159ed92003-06-04 11:01:45 +00001158 AC_DEFINE(KAME,1,KAME IPv6)
paula159ed92003-06-04 11:01:45 +00001159 AC_MSG_RESULT(KAME)
paul19877dd2004-05-11 10:49:35 +00001160dnl ------------------------------------
1161dnl Solaris 9, 10 and potentially higher
1162dnl ------------------------------------
paulafd8a122005-03-12 06:36:10 +00001163 elif test x"$opsys" = x"sol8"; then
paul19877dd2004-05-11 10:49:35 +00001164 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
paul19877dd2004-05-11 10:49:35 +00001165 AC_MSG_RESULT(Solaris IPv6)
paul7ea487b2003-03-17 02:05:07 +00001166dnl ----------
1167dnl Linux IPv6
1168dnl ----------
David Lamparter29ed6222014-06-28 21:42:25 +02001169 elif test x"$opsys" = x"gnu-linux"; then
Timo Teräs3ef0b872014-07-29 09:41:56 +00001170 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
David Lamparter29ed6222014-06-28 21:42:25 +02001171 AC_MSG_RESULT(Linux IPv6)
1172 else
David Lamparter7fe17e62014-11-22 10:31:33 -08001173 AC_MSG_ERROR([Failed to detect IPv6 stack])
paula159ed92003-06-04 11:01:45 +00001174 fi
paul7ea487b2003-03-17 02:05:07 +00001175
David Lamparter7fe17e62014-11-22 10:31:33 -08001176dnl this is unconditial, for compatibility
1177AC_DEFINE(HAVE_IPV6,1,IPv6)
paul7ea487b2003-03-17 02:05:07 +00001178
gdtfa3232e2003-12-03 17:52:30 +00001179dnl ------------------
1180dnl IPv6 header checks
1181dnl ------------------
gdtfa3232e2003-12-03 17:52:30 +00001182AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
David Lamparter05a69d22015-05-27 22:15:37 +02001183 netinet6/in6_var.h netinet6/nd6.h], [], [],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001184 QUAGGA_INCLUDES)
gdtfa3232e2003-12-03 17:52:30 +00001185
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001186m4_define([QUAGGA_INCLUDES],dnl
1187QUAGGA_INCLUDES
1188[#if HAVE_NETINET6_IN6_H
1189#include <netinet6/in6.h>
1190#endif
1191#if HAVE_NETINET_IN6_VAR_H
1192#include <netinet/in6_var.h>
1193#endif
1194#if HAVE_NETINET_ICMP6_H
1195# include <netinet/icmp6.h>
1196#endif
1197#if HAVE_NETINET6_IN6_VAR_H
1198# include <netinet6/in6_var.h>
1199#endif
1200#if HAVE_NETINET6_ND6_H
Hasso Tepperfbf24542007-06-25 19:30:59 +00001201# include <netinet6/nd6.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001202#endif
1203])dnl
1204
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +01001205dnl disable doc check
1206if test "${enable_doc}" = "no";then
1207 DOC=""
1208else
1209 DOC="doc"
1210fi
1211
paul7ea487b2003-03-17 02:05:07 +00001212dnl --------------------
1213dnl Daemon disable check
1214dnl --------------------
1215if test "${enable_zebra}" = "no";then
1216 ZEBRA=""
1217else
1218 ZEBRA="zebra"
1219fi
David Wardf027d332012-04-30 11:36:15 -04001220AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
paul7ea487b2003-03-17 02:05:07 +00001221
1222if test "${enable_bgpd}" = "no";then
1223 BGPD=""
1224else
1225 BGPD="bgpd"
1226fi
David Wardf027d332012-04-30 11:36:15 -04001227AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
paul7ea487b2003-03-17 02:05:07 +00001228
1229if test "${enable_ripd}" = "no";then
1230 RIPD=""
1231else
1232 RIPD="ripd"
1233fi
David Wardf027d332012-04-30 11:36:15 -04001234AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
paul7ea487b2003-03-17 02:05:07 +00001235
1236if test "${enable_ospfd}" = "no";then
1237 OSPFD=""
1238else
1239 OSPFD="ospfd"
1240fi
David Wardf027d332012-04-30 11:36:15 -04001241AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
paul7ea487b2003-03-17 02:05:07 +00001242
Timo Teräsdafa05e2017-01-19 17:27:01 +02001243if test x"$opsys" != x"gnu-linux"; then
1244 dnl NHRPd works currently with Linux only.
1245 enable_nhrpd="no"
1246fi
1247if test "${enable_nhrpd}" = "no";then
1248 NHRPD=""
1249else
1250 NHRPD="nhrpd"
1251fi
1252AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1253
ajsd0199432004-12-22 14:03:52 +00001254if test "${enable_watchquagga}" = "no";then
1255 WATCHQUAGGA=""
1256else
1257 WATCHQUAGGA="watchquagga"
1258fi
David Wardf027d332012-04-30 11:36:15 -04001259AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
ajsd0199432004-12-22 14:03:52 +00001260
paul1ef74ef2003-03-21 15:16:05 +00001261OSPFCLIENT=""
Donald Sharp36fef572015-12-16 14:22:10 -05001262if test "${enable_ospfapi}" != "no";then
paul9a569842003-03-28 01:45:13 +00001263 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
paul1ef74ef2003-03-21 15:16:05 +00001264
Donald Sharp36fef572015-12-16 14:22:10 -05001265 if test "${enable_ospfclient}" != "no";then
paul1ef74ef2003-03-21 15:16:05 +00001266 OSPFCLIENT="ospfclient"
paul1ef74ef2003-03-21 15:16:05 +00001267 fi
paul7ea487b2003-03-17 02:05:07 +00001268fi
Donald Sharp36fef572015-12-16 14:22:10 -05001269
David Wardf027d332012-04-30 11:36:15 -04001270AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
paul7ea487b2003-03-17 02:05:07 +00001271
1272case "${enable_ripngd}" in
paul7ea487b2003-03-17 02:05:07 +00001273 "no" ) RIPNGD="";;
David Lamparter7fe17e62014-11-22 10:31:33 -08001274 * ) RIPNGD="ripngd";;
paul7ea487b2003-03-17 02:05:07 +00001275esac
David Wardf027d332012-04-30 11:36:15 -04001276AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
paul7ea487b2003-03-17 02:05:07 +00001277
1278case "${enable_ospf6d}" in
paul7ea487b2003-03-17 02:05:07 +00001279 "no" ) OSPF6D="";;
David Lamparter7fe17e62014-11-22 10:31:33 -08001280 * ) OSPF6D="ospf6d";;
paul7ea487b2003-03-17 02:05:07 +00001281esac
David Wardf027d332012-04-30 11:36:15 -04001282AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
paul7ea487b2003-03-17 02:05:07 +00001283
jardin9e867fe2003-12-23 08:56:18 +00001284case "${enable_isisd}" in
jardin9e867fe2003-12-23 08:56:18 +00001285 "no" ) ISISD="";;
David Lamparter656a2c02015-02-09 11:36:10 +01001286 * ) ISISD="isisd";;
jardin9e867fe2003-12-23 08:56:18 +00001287esac
David Wardf027d332012-04-30 11:36:15 -04001288AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
jardin9e867fe2003-12-23 08:56:18 +00001289
Everton Marques871dbcf2009-08-11 15:43:05 -03001290case "${enable_pimd}" in
Everton Marques871dbcf2009-08-11 15:43:05 -03001291 "no" ) PIMD="";;
Donald Sharpe6756782015-07-16 21:18:34 -04001292 * ) PIMD="pimd";;
Everton Marques871dbcf2009-08-11 15:43:05 -03001293esac
Everton Marquesff57d362014-06-25 15:54:03 -03001294AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
Everton Marques871dbcf2009-08-11 15:43:05 -03001295
paul7ea487b2003-03-17 02:05:07 +00001296if test "${enable_bgp_announce}" = "no";then
Paul Jakma750e8142008-07-22 21:11:48 +00001297 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1298else
1299 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
paul7ea487b2003-03-17 02:05:07 +00001300fi
1301
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +01001302AC_SUBST(DOC)
paul7ea487b2003-03-17 02:05:07 +00001303AC_SUBST(ZEBRA)
1304AC_SUBST(BGPD)
1305AC_SUBST(RIPD)
1306AC_SUBST(RIPNGD)
1307AC_SUBST(OSPFD)
1308AC_SUBST(OSPF6D)
Timo Teräsdafa05e2017-01-19 17:27:01 +02001309AC_SUBST(NHRPD)
ajsd0199432004-12-22 14:03:52 +00001310AC_SUBST(WATCHQUAGGA)
jardin9e867fe2003-12-23 08:56:18 +00001311AC_SUBST(ISISD)
Everton Marques871dbcf2009-08-11 15:43:05 -03001312AC_SUBST(PIMD)
Greg Troxel97cee872007-08-02 13:36:56 +00001313AC_SUBST(SOLARIS)
paul7ea487b2003-03-17 02:05:07 +00001314AC_SUBST(VTYSH)
paul7ea487b2003-03-17 02:05:07 +00001315AC_SUBST(CURSES)
1316AC_SUBST(OSPFCLIENT)
paul1ef74ef2003-03-21 15:16:05 +00001317AC_SUBST(OSPFAPI)
paul7ea487b2003-03-17 02:05:07 +00001318AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1319AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1320AC_CHECK_LIB(crypt, crypt)
1321AC_CHECK_LIB(resolv, res_init)
paul7ea487b2003-03-17 02:05:07 +00001322
paul7ea487b2003-03-17 02:05:07 +00001323dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001324dnl check system has PCRE regexp
1325dnl ---------------------------
1326if test "x$enable_pcreposix" = "xyes"; then
1327 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1328 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1329fi
1330
1331if test "x$enable_pcreposix" != "xyes"; then
1332dnl ---------------------------
paul7ea487b2003-03-17 02:05:07 +00001333dnl check system has GNU regexp
1334dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001335AC_MSG_CHECKING(whether system has GNU regex)
paul7ea487b2003-03-17 02:05:07 +00001336AC_CHECK_LIB(c, regexec,
1337[AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1338 LIB_REGEX=""],
1339[LIB_REGEX="regex.o"])
Jeremy Jackson25f45882009-01-12 16:06:12 -05001340fi
1341AC_SUBST(HAVE_LIBPCREPOSIX)
paul7ea487b2003-03-17 02:05:07 +00001342AC_SUBST(LIB_REGEX)
1343
1344dnl ------------------
Timo Teräsdafa05e2017-01-19 17:27:01 +02001345dnl check C-Ares library
1346dnl ------------------
1347if test "${enable_nhrpd}" != "no";then
1348 PKG_CHECK_MODULES([CARES], [libcares])
1349fi
1350
1351
1352dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001353dnl check Net-SNMP library
paul7ea487b2003-03-17 02:05:07 +00001354dnl ------------------
Vincent Bernatd6be5fb2012-05-24 09:44:43 +02001355if test "${enable_snmp}" != ""; then
Vincent Bernat08d7f652012-05-22 22:29:17 +02001356 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1357 if test x"$NETSNMP_CONFIG" = x"no"; then
1358 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1359 fi
1360 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1361 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1362 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1363 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1364int main(void);
1365],
1366[
1367{
1368 return 0;
1369}
1370])],[AC_MSG_RESULT(yes)],[
1371 AC_MSG_RESULT(no)
1372 AC_MSG_ERROR([--enable-snmp given but not usable])])
1373 AC_DEFINE(HAVE_SNMP,,SNMP)
Vincent Bernatd6be5fb2012-05-24 09:44:43 +02001374 case "${enable_snmp}" in
1375 yes)
1376 SNMP_METHOD=agentx
1377 ;;
1378 smux|agentx)
1379 SNMP_METHOD="${enable_snmp}"
1380 ;;
1381 *)
1382 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1383 ;;
1384 esac
1385 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1386 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1387 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
paul7ea487b2003-03-17 02:05:07 +00001388fi
1389
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001390dnl ---------------------------
1391dnl sockaddr and netinet checks
1392dnl ---------------------------
1393AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1394 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
Everton Marques871dbcf2009-08-11 15:43:05 -03001395 socklen_t, struct vifctl, struct mfcctl, struct sioc_sg_req,
1396 vifi_t, struct sioc_vif_req, struct igmpmsg,
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001397 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1398 struct nd_opt_adv_interval, struct rt_addrinfo,
Paul Jakma11770e12007-06-22 16:14:42 +00001399 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001400 [], [], QUAGGA_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001401
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001402AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1403 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1404 struct sockaddr_in6.sin6_scope_id,
David Lamparterca3ccd82012-09-26 14:52:39 +02001405 struct sockaddr_dl.sdl_len,
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001406 struct if6_aliasreq.ifra_lifetime,
1407 struct nd_opt_adv_interval.nd_opt_ai_type],
1408 [], [], QUAGGA_INCLUDES)
hasso71c0fb52003-05-25 20:18:13 +00001409
paul7ea487b2003-03-17 02:05:07 +00001410dnl ---------------------------
Paul Jakma11770e12007-06-22 16:14:42 +00001411dnl IRDP/pktinfo/icmphdr checks
paul7ea487b2003-03-17 02:05:07 +00001412dnl ---------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001413AC_CHECK_TYPES([struct in_pktinfo],
Paul Jakma11770e12007-06-22 16:14:42 +00001414 [AC_CHECK_TYPES([struct icmphdr],
1415 [if test "${enable_irdp}" != "no"; then
1416 AC_DEFINE(HAVE_IRDP,, IRDP)
1417 fi],
1418 [if test "${enable_irdp}" = "yes"; then
1419 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1420 fi], [QUAGGA_INCLUDES])],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001421 [if test "${enable_irdp}" = "yes"; then
1422 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1423 fi], [QUAGGA_INCLUDES])
vincent29c4c9b2005-03-25 13:05:47 +00001424
Everton Marques871dbcf2009-08-11 15:43:05 -03001425dnl -----------------------
1426dnl checking for IP_PKTINFO
1427dnl -----------------------
1428AC_MSG_CHECKING(for IP_PKTINFO)
1429AC_TRY_COMPILE([#include <netdb.h>], [
1430 int opt = IP_PKTINFO;
1431], [
1432 AC_MSG_RESULT(yes)
1433 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1434], [
1435 AC_MSG_RESULT(no)
1436])
1437
1438dnl ---------------------------
1439dnl checking for IP_RECVDSTADDR
1440dnl ---------------------------
1441AC_MSG_CHECKING(for IP_RECVDSTADDR)
1442AC_TRY_COMPILE([#include <netinet/in.h>], [
1443 int opt = IP_RECVDSTADDR;
1444], [
1445 AC_MSG_RESULT(yes)
1446 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1447], [
1448 AC_MSG_RESULT(no)
1449])
1450
1451dnl ----------------------
1452dnl checking for IP_RECVIF
1453dnl ----------------------
1454AC_MSG_CHECKING(for IP_RECVIF)
1455AC_TRY_COMPILE([#include <netinet/in.h>], [
1456 int opt = IP_RECVIF;
1457], [
1458 AC_MSG_RESULT(yes)
1459 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1460], [
1461 AC_MSG_RESULT(no)
1462])
1463
paul7ea487b2003-03-17 02:05:07 +00001464dnl --------------------------------------
1465dnl checking for getrusage struct and call
1466dnl --------------------------------------
Stephen Hemminger47f6aef2013-01-04 22:29:22 +00001467if test "${enable_rusage}" != "no"; then
1468 AC_MSG_CHECKING(whether getrusage is available)
1469 AC_TRY_COMPILE([#include <sys/resource.h>],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1470 [AC_MSG_RESULT(yes)
1471 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1472 AC_MSG_RESULT(no))
1473fi
paul7ea487b2003-03-17 02:05:07 +00001474
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001475dnl --------------------------------------
1476dnl checking for clock_time monotonic struct and call
1477dnl --------------------------------------
Paul Jakma6511cab2009-06-18 17:38:01 +01001478AC_CHECK_DECL(CLOCK_MONOTONIC,
1479 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
Dmitry Tejblum9964fcf2009-11-05 16:50:36 +03001480 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
Paul Jakma6511cab2009-06-18 17:38:01 +01001481], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001482
pauledd7c242003-06-04 13:59:38 +00001483dnl -------------------
1484dnl capabilities checks
1485dnl -------------------
hasso41d3fc92004-04-06 11:59:00 +00001486if test "${enable_capabilities}" != "no"; then
1487 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1488 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1489 [AC_MSG_RESULT(yes)
1490 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1491 quagga_ac_keepcaps="yes"],
1492 AC_MSG_RESULT(no)
pauledd7c242003-06-04 13:59:38 +00001493 )
hasso41d3fc92004-04-06 11:59:00 +00001494 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1495 AC_CHECK_HEADERS(sys/capability.h)
1496 fi
1497 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1498 AC_CHECK_LIB(cap, cap_init,
1499 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1500 LIBCAP="-lcap"
paulceacedb2005-09-29 14:39:32 +00001501 quagga_ac_lcaps="yes"]
hasso41d3fc92004-04-06 11:59:00 +00001502 )
paulceacedb2005-09-29 14:39:32 +00001503 else
1504 AC_CHECK_HEADERS(priv.h,
1505 [AC_MSG_CHECKING(Solaris style privileges are available)
1506 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1507 [AC_MSG_RESULT(yes)
1508 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1509 quagga_ac_scaps="yes"],
1510 AC_MSG_RESULT(no)
1511 )
1512 ]
1513 )
1514 fi
1515 if test x"${quagga_ac_scaps}" = x"yes" \
1516 -o x"${quagga_ac_lcaps}" = x"yes"; then
1517 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
hasso41d3fc92004-04-06 11:59:00 +00001518 fi
pauledd7c242003-06-04 13:59:38 +00001519fi
1520AC_SUBST(LIBCAP)
1521
Doug VanLeuven327c4cd2012-12-14 14:58:30 +02001522dnl ---------------------------------------------------------------------------
1523dnl http://www.gnu.org/software/autoconf-archive/ax_sys_weak_alias.html
1524dnl Check for and set one of the following = 1
1525dnl HAVE_SYS_WEAK_ALIAS_ATTRIBUTE
1526dnl HAVE_SYS_WEAK_ALIAS_PRAGMA
1527dnl HAVE_SYS_WEAK_ALIAS_HPSECONDARY
1528dnl HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE
1529dnl If any scheme is found, set
1530dnl HAVE_SYS_WEAK_ALIAS=1
1531dnl The following variable is set to text value
1532dnl WEAK_ALIAS = "attribute" || "pragma" || "hpsecondary" || "criduplicate" || "no"
1533dnl If weak alias can cross object file boundaries
1534dnl WEAK_ALIAS_CROSSFILE = "yes" || "no"
1535dnl ---------------------------------------------------------------------------
1536AX_SYS_WEAK_ALIAS
1537
paulfb2d1502003-06-04 09:40:54 +00001538dnl ---------------------------
1539dnl check for glibc 'backtrace'
1540dnl ---------------------------
David Lamparter8c99b4c2013-08-01 07:43:36 +00001541if test x"${enable_backtrace}" != x"no" ; then
1542 backtrace_ok=no
1543 AC_CHECK_HEADER([execinfo.h], [
1544 AC_SEARCH_LIBS([backtrace], [execinfo], [
1545 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1546 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1547 backtrace_ok=yes
1548 ],, [-lm])
Dmitrij Tejblumeda35292011-09-15 20:00:33 +04001549 ])
David Lamparter8c99b4c2013-08-01 07:43:36 +00001550
1551 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1552 dnl user explicitly requested backtrace but we failed to find support
1553 AC_MSG_FAILURE([failed to find backtrace support])
1554 fi
1555fi
paulfb2d1502003-06-04 09:40:54 +00001556
Paul Jakma41be32b2006-03-30 13:53:59 +00001557dnl -----------------------------------------
1558dnl check for malloc mallinfo struct and call
1559dnl this must try and link using LIBS, in
1560dnl order to check no alternative allocator
1561dnl has been specified, which might not provide
1562dnl mallinfo, e.g. such as Umem on Solaris.
1563dnl -----------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001564AC_CHECK_HEADER([malloc.h],
Paul Jakma41be32b2006-03-30 13:53:59 +00001565 [AC_MSG_CHECKING(whether mallinfo is available)
1566 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1567 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1568 [AC_MSG_RESULT(yes)
1569 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1570 AC_MSG_RESULT(no)
1571 )
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001572 ], [], QUAGGA_INCLUDES)
Paul Jakma41be32b2006-03-30 13:53:59 +00001573
paul408ad942003-05-20 00:03:33 +00001574dnl ----------
1575dnl configure date
1576dnl ----------
1577CONFDATE=`date '+%Y%m%d'`
1578AC_SUBST(CONFDATE)
1579
David Lamparterf281ab92013-02-26 16:21:20 +01001580dnl -------
1581dnl DejaGNU
1582dnl -------
1583if test x"$DEJAGNU" = x
1584then
1585 DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
1586fi
1587RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
1588
1589AC_SUBST(DEJAGNU)
1590AC_SUBST(RUNTESTDEFAULTFLAGS)
1591
paul7ea487b2003-03-17 02:05:07 +00001592dnl ------------------------------
paula159ed92003-06-04 11:01:45 +00001593dnl set paths for state directory
paul23bd12c2003-04-07 06:11:09 +00001594dnl ------------------------------
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001595AC_MSG_CHECKING(directory to use for state file)
paul23bd12c2003-04-07 06:11:09 +00001596if test "${prefix}" = "NONE"; then
paule8f29842003-08-12 13:08:31 +00001597 quagga_statedir_prefix="";
paul23bd12c2003-04-07 06:11:09 +00001598else
paule8f29842003-08-12 13:08:31 +00001599 quagga_statedir_prefix=${prefix}
paul23bd12c2003-04-07 06:11:09 +00001600fi
1601if test "${localstatedir}" = '${prefix}/var'; then
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001602 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
paule8f29842003-08-12 13:08:31 +00001603 ${quagga_statedir_prefix}/var/adm dnl
1604 ${quagga_statedir_prefix}/etc dnl
paula159ed92003-06-04 11:01:45 +00001605 /var/run dnl
1606 /var/adm dnl
1607 /etc dnl
1608 /dev/null;
paul23bd12c2003-04-07 06:11:09 +00001609 do
paule8f29842003-08-12 13:08:31 +00001610 test -d $QUAGGA_STATE_DIR && break
paul23bd12c2003-04-07 06:11:09 +00001611 done
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001612 quagga_statedir=$QUAGGA_STATE_DIR
paul23bd12c2003-04-07 06:11:09 +00001613else
paule8f29842003-08-12 13:08:31 +00001614 quagga_statedir=${localstatedir}
paul23bd12c2003-04-07 06:11:09 +00001615fi
paule8f29842003-08-12 13:08:31 +00001616if test $quagga_statedir = "/dev/null"; then
paula159ed92003-06-04 11:01:45 +00001617 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1618fi
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001619AC_MSG_RESULT(${quagga_statedir})
1620AC_SUBST(quagga_statedir)
paula159ed92003-06-04 11:01:45 +00001621
paule8f29842003-08-12 13:08:31 +00001622AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1623AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1624AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1625AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1626AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1627AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
Timo Teräsdafa05e2017-01-19 17:27:01 +02001628AC_DEFINE_UNQUOTED(PATH_NHRPD_PID, "$quagga_statedir/nhrpd.pid",nhrpd PID)
jardin9e867fe2003-12-23 08:56:18 +00001629AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
Everton Marques871dbcf2009-08-11 15:43:05 -03001630AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$quagga_statedir/pimd.pid",pimd PID)
ajsd0199432004-12-22 14:03:52 +00001631AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
paule8f29842003-08-12 13:08:31 +00001632AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1633AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1634AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1635AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1636AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1637AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1638AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
Timo Teräsdafa05e2017-01-19 17:27:01 +02001639AC_DEFINE_UNQUOTED(NHRP_VTYSH_PATH, "$quagga_statedir/nhrpd.vty",nhrpd vty socket)
jardin9e867fe2003-12-23 08:56:18 +00001640AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
Everton Marques871dbcf2009-08-11 15:43:05 -03001641AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$quagga_statedir/pimd.vty",pimd vty socket)
ajs515210b2004-12-22 15:35:12 +00001642AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
paul7ea487b2003-03-17 02:05:07 +00001643
paul1eb8ef22005-04-07 07:30:20 +00001644dnl -------------------------------
1645dnl Quagga sources should always be
1646dnl current wrt interfaces. Dont
1647dnl allow deprecated interfaces to
1648dnl be exposed.
1649dnl -------------------------------
1650AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1651
paul7ea487b2003-03-17 02:05:07 +00001652dnl ---------------------------
1653dnl Check htonl works correctly
1654dnl ---------------------------
1655AC_MSG_CHECKING(for working htonl)
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001656AC_CACHE_VAL(ac_cv_htonl_works,
1657 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1658 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1659 ]
1660)
paul7ea487b2003-03-17 02:05:07 +00001661AC_MSG_RESULT($ac_cv_htonl_works)
1662
Avneesh Sachdev07e5b642016-04-04 10:54:55 -07001663AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
ajsd0199432004-12-22 14:03:52 +00001664 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
Paul Jakma336724d2015-05-11 15:13:31 +01001665 ospf6d/Makefile isisd/Makefile vtysh/Makefile
David Lamparterf281ab92013-02-26 16:21:20 +01001666 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
Timo Teräsdafa05e2017-01-19 17:27:01 +02001667 pimd/Makefile nhrpd/Makefile
David Lamparter5bb7e4d2013-02-26 17:53:30 +01001668 tests/bgpd.tests/Makefile
David Lamparterc69905b2013-01-24 01:39:14 +01001669 tests/libzebra.tests/Makefile
David Lamparterf281ab92013-02-26 16:21:20 +01001670 redhat/Makefile
gdt69f1fc22004-08-27 15:57:35 +00001671 pkgsrc/Makefile
Avneesh Sachdevef20ef72016-04-04 10:54:57 -07001672 fpm/Makefile
paul670bbf12004-11-12 09:05:00 +00001673 redhat/quagga.spec
gdtb7a97f82004-07-23 16:23:56 +00001674 lib/version.h
hassof695b012005-04-02 19:03:39 +00001675 isisd/topology/Makefile
gdtcbd04082004-08-31 18:16:36 +00001676 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
paulf31293a2004-11-12 09:27:04 +00001677 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
paul26275b02005-04-11 07:10:47 +00001678AC_CONFIG_FILES([solaris/Makefile])
1679
paul670bbf12004-11-12 09:05:00 +00001680AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
hasso48577192004-11-19 06:41:49 +00001681## Hack, but working solution to avoid rebuilding of quagga.info.
1682## It's already in CVS until texinfo 4.7 is more common.
paul14c17fd2004-11-07 22:34:23 +00001683AC_OUTPUT
paul7ea487b2003-03-17 02:05:07 +00001684
1685echo "
hassoc89f6492004-08-26 12:21:28 +00001686Quagga configuration
1687--------------------
1688quagga version : ${PACKAGE_VERSION}
Joachim Nilsson1080c132012-05-30 08:15:48 +02001689host operating system : ${host_os}
paul7ea487b2003-03-17 02:05:07 +00001690source code location : ${srcdir}
1691compiler : ${CC}
1692compiler flags : ${CFLAGS}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001693make : ${MAKE-make}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001694linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
paule8f29842003-08-12 13:08:31 +00001695state file directory : ${quagga_statedir}
pauldc7a2bf2003-10-22 00:07:44 +00001696config file directory : `eval echo \`echo ${sysconfdir}\``
gdtd6b72f72003-12-03 17:24:27 +00001697example directory : `eval echo \`echo ${exampledir}\``
paul8d4aee52003-06-06 00:30:35 +00001698user to run as : ${enable_user}
1699group to run as : ${enable_group}
1700group for vty sockets : ${enable_vty_group}
gdtaa593d52003-12-22 20:15:53 +00001701config file mask : ${enable_configfile_mask}
1702log file mask : ${enable_logfile_mask}
Avneesh Sachdev07e5b642016-04-04 10:54:55 -07001703zebra protobuf enabled : ${have_protobuf:-no}
pauldc7a2bf2003-10-22 00:07:44 +00001704
1705The above user and group must have read/write access to the state file
Paul Jakma105b8232006-05-28 08:02:41 +00001706directory and to the config files in the config file directory."
1707
1708if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1709Warning: The ${MAKE-make} programme detected, either in your path or
1710via the MAKE variable, is not GNU Make. GNU make may be installed as
1711gmake on some systems. and is required to complete a build of Quagga
1712" > /dev/stderr
1713fi