blob: b9dcddc41b6273ddd8a2bf4c6e6bba4e5f0eeb78 [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])
196 else
197 AC_MSG_RESULT([no])
198 AC_MSG_WARN([upgrade to libtool >= 2.4.6!])
199 fi
Paul Jakma52c0bc72015-08-20 21:30:17 +0100200 AC_C_FLAG([-fpie])
David Lamparter3a7e83c2015-03-03 09:55:51 +0100201 AC_C_FLAG([-fno-omit-frame-pointer])
202 AC_C_FLAG([-Wall])
203 AC_C_FLAG([-Wextra])
204 AC_C_FLAG([-Wmissing-prototypes])
205 AC_C_FLAG([-Wmissing-declarations])
206 AC_C_FLAG([-Wpointer-arith])
207 AC_C_FLAG([-Wbad-function-cast])
208 AC_C_FLAG([-Wwrite-strings])
209 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
210 AC_C_FLAG([-Wcast-qual])
211 AC_C_FLAG([-Wstrict-prototypes])
212 AC_C_FLAG([-Wmissing-noreturn])
213 AC_C_FLAG([-Wmissing-format-attribute])
214 AC_C_FLAG([-Wunreachable-code])
215 AC_C_FLAG([-Wpacked])
216 AC_C_FLAG([-Wpadded])
217 else
218 AC_C_FLAG([-Wno-unused-result])
219 fi
220 AC_C_FLAG([-Wno-unused-parameter])
221 AC_C_FLAG([-Wno-missing-field-initializers])
222 # ICC emits a broken warning for const char *x = a ? "b" : "c";
223 # for some reason the string consts get 'promoted' to char *,
224 # triggering a const to non-const conversion warning.
225 AC_C_FLAG([-diag-disable 3179])
paul6a4b8832005-11-26 08:28:00 +0000226 ;;
227 esac
228else
229 AC_MSG_RESULT([CFLAGS supplied by user])
hasso1969e4b2005-03-27 13:07:23 +0000230fi
231
David Lamparterc0bedeb2015-03-03 10:00:43 +0100232if test x"${enable_werror}" = x"yes" ; then
233 WERROR="-Werror"
234fi
235AC_SUBST(WERROR)
236
paul7ea487b2003-03-17 02:05:07 +0000237dnl --------------
238dnl Check programs
239dnl --------------
paul7ea487b2003-03-17 02:05:07 +0000240AC_PROG_INSTALL
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000241AC_PROG_LN_S
paul7ea487b2003-03-17 02:05:07 +0000242AC_PROG_MAKE_SET
243AC_CHECK_TOOL(AR, ar)
paul7ea487b2003-03-17 02:05:07 +0000244
Paul Jakma105b8232006-05-28 08:02:41 +0000245dnl ---------------------------
246dnl We, perhaps unfortunately,
247dnl depend on GNU Make specific
248dnl constructs.
249dnl Give the user a warning if
250dnl not GNU Make.
251dnl ---------------------------
252AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
253 [quagga_cv_gnu_make=no
254 if ${MAKE-make} --version 2>/dev/null | \
255 grep '^GNU Make ' >/dev/null ; then
256 quagga_cv_gnu_make=yes;
257 fi
258 ]
259)
260
Paul Jakmad46d2a22007-05-10 16:53:04 +0000261dnl -----------------
262dnl System extensions
263dnl -----------------
Paul Jakmad46d2a22007-05-10 16:53:04 +0000264AC_GNU_SOURCE
paul7ea487b2003-03-17 02:05:07 +0000265
gdt87efd642004-06-30 17:36:11 +0000266
paul7ea487b2003-03-17 02:05:07 +0000267dnl ----------------------
268dnl Packages configuration
269dnl ----------------------
Joachim Nilsson1080c132012-05-30 08:15:48 +0200270AC_ARG_WITH(pkg-extra-version,
271 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
272 [EXTRAVERSION=$withval],)
David Lamparter0be793e2012-11-27 01:34:56 +0000273AC_ARG_WITH(pkg-git-version,
274 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
David Lampartera16dcf72012-12-13 11:20:50 +0100275 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
paul7ea487b2003-03-17 02:05:07 +0000276AC_ARG_ENABLE(vtysh,
Donald Sharpe6756782015-07-16 21:18:34 -0400277 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for Quagga]))
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +0100278AC_ARG_ENABLE(doc,
David Lamparterb6fa7602014-06-28 22:15:59 +0200279 AS_HELP_STRING([--disable-doc], [do not build docs]))
paul7ea487b2003-03-17 02:05:07 +0000280AC_ARG_ENABLE(zebra,
David Lamparterb6fa7602014-06-28 22:15:59 +0200281 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
paul7ea487b2003-03-17 02:05:07 +0000282AC_ARG_ENABLE(bgpd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200283 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
paul7ea487b2003-03-17 02:05:07 +0000284AC_ARG_ENABLE(ripd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200285 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
paul7ea487b2003-03-17 02:05:07 +0000286AC_ARG_ENABLE(ripngd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200287 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
paul7ea487b2003-03-17 02:05:07 +0000288AC_ARG_ENABLE(ospfd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200289 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
paul7ea487b2003-03-17 02:05:07 +0000290AC_ARG_ENABLE(ospf6d,
David Lamparterb6fa7602014-06-28 22:15:59 +0200291 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
Timo Teräsdafa05e2017-01-19 17:27:01 +0200292AC_ARG_ENABLE(nhrpd,
293 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
ajsd0199432004-12-22 14:03:52 +0000294AC_ARG_ENABLE(watchquagga,
David Lamparterb6fa7602014-06-28 22:15:59 +0200295 AS_HELP_STRING([--disable-watchquagga], [do not build watchquagga]))
jardin9e867fe2003-12-23 08:56:18 +0000296AC_ARG_ENABLE(isisd,
David Lamparter656a2c02015-02-09 11:36:10 +0100297 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
Everton Marques871dbcf2009-08-11 15:43:05 -0300298AC_ARG_ENABLE(pimd,
Donald Sharpe6756782015-07-16 21:18:34 -0400299 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
paul7ea487b2003-03-17 02:05:07 +0000300AC_ARG_ENABLE(bgp-announce,
David Lamparterb6fa7602014-06-28 22:15:59 +0200301 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
paul7ea487b2003-03-17 02:05:07 +0000302AC_ARG_ENABLE(snmp,
David Lamparterb6fa7602014-06-28 22:15:59 +0200303 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
paul7ea487b2003-03-17 02:05:07 +0000304AC_ARG_WITH(libpam,
David Lamparterb6fa7602014-06-28 22:15:59 +0200305 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
hasso71c0fb52003-05-25 20:18:13 +0000306AC_ARG_ENABLE(tcp-zebra,
David Lamparterb6fa7602014-06-28 22:15:59 +0200307 AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
paul1ef74ef2003-03-21 15:16:05 +0000308AC_ARG_ENABLE(ospfapi,
David Lamparterb6fa7602014-06-28 22:15:59 +0200309 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
paul1ef74ef2003-03-21 15:16:05 +0000310AC_ARG_ENABLE(ospfclient,
David Lamparterb6fa7602014-06-28 22:15:59 +0200311 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
312 (this is the default if --disable-ospfapi is set)]))
paul7ea487b2003-03-17 02:05:07 +0000313AC_ARG_ENABLE(multipath,
David Lamparterb6fa7602014-06-28 22:15:59 +0200314 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
Paul P Komkoff Jrfe86b482008-08-13 16:56:05 +0100315AC_ARG_ENABLE(user,
David Lamparterb6fa7602014-06-28 22:15:59 +0200316 AS_HELP_STRING([--enable-user=USER], [user to run Quagga suite as (default quagga)]))
Paul P Komkoff Jrfe86b482008-08-13 16:56:05 +0100317AC_ARG_ENABLE(group,
David Lamparterb6fa7602014-06-28 22:15:59 +0200318 AS_HELP_STRING([--enable-group=GROUP], [group to run Quagga suite as (default quagga)]))
pauledd7c242003-06-04 13:59:38 +0000319AC_ARG_ENABLE(vty_group,
David Lamparterb6fa7602014-06-28 22:15:59 +0200320 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
gdtaa593d52003-12-22 20:15:53 +0000321AC_ARG_ENABLE(configfile_mask,
David Lamparterb6fa7602014-06-28 22:15:59 +0200322 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
gdtaa593d52003-12-22 20:15:53 +0000323AC_ARG_ENABLE(logfile_mask,
David Lamparterb6fa7602014-06-28 22:15:59 +0200324 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
pauledd7c242003-06-04 13:59:38 +0000325
hasso71c0fb52003-05-25 20:18:13 +0000326AC_ARG_ENABLE(rtadv,
David Lamparterb6fa7602014-06-28 22:15:59 +0200327 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
hassoca776982004-06-12 14:33:05 +0000328AC_ARG_ENABLE(irdp,
David Lamparterb6fa7602014-06-28 22:15:59 +0200329 AS_HELP_STRING([--enable-irdp], [enable IRDP server support in zebra]))
hassof695b012005-04-02 19:03:39 +0000330AC_ARG_ENABLE(isis_topology,
David Lamparterb6fa7602014-06-28 22:15:59 +0200331 AS_HELP_STRING([--enable-isis-topology], [enable IS-IS topology generator]))
hasso41d3fc92004-04-06 11:59:00 +0000332AC_ARG_ENABLE(capabilities,
David Lamparterb6fa7602014-06-28 22:15:59 +0200333 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
Stephen Hemminger47f6aef2013-01-04 22:29:22 +0000334AC_ARG_ENABLE(rusage,
David Lamparterb6fa7602014-06-28 22:15:59 +0200335 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
paul6b6942f2004-10-22 04:55:05 +0000336AC_ARG_ENABLE(gcc_ultra_verbose,
David Lamparterb6fa7602014-06-28 22:15:59 +0200337 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
Paul Jakma3453a712009-06-12 14:21:02 +0100338AC_ARG_ENABLE(linux24_tcp_md5,
David Lamparterb6fa7602014-06-28 22:15:59 +0200339 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
ajs3cade262004-12-29 17:50:22 +0000340AC_ARG_ENABLE(gcc-rdynamic,
David Lamparterb6fa7602014-06-28 22:15:59 +0200341 AS_HELP_STRING([--enable-gcc-rdynamic], [enable linking with -rdynamic for better backtraces (default if gcc)]))
David Lamparter8c99b4c2013-08-01 07:43:36 +0000342AC_ARG_ENABLE(backtrace,
David Lamparterb6fa7602014-06-28 22:15:59 +0200343 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
ajs924b9222005-04-16 17:11:24 +0000344AC_ARG_ENABLE(time-check,
David Lamparterb6fa7602014-06-28 22:15:59 +0200345 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
Jeremy Jackson25f45882009-01-12 16:06:12 -0500346AC_ARG_ENABLE(pcreposix,
David Lamparterb6fa7602014-06-28 22:15:59 +0200347 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000348AC_ARG_ENABLE(fpm,
David Lamparterb6fa7602014-06-28 22:15:59 +0200349 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
David Lamparterc0bedeb2015-03-03 10:00:43 +0100350AC_ARG_ENABLE(werror,
351 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
Avneesh Sachdev07e5b642016-04-04 10:54:55 -0700352AC_ARG_ENABLE([protobuf],
353 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
paul6b6942f2004-10-22 04:55:05 +0000354
Avneesh Sachdev7e4025c2016-03-11 12:21:24 -0800355AC_ARG_ENABLE([dev_build],
356 AS_HELP_STRING([--enable-dev-build], [build for development]))
357
David Lamparter8c99b4c2013-08-01 07:43:36 +0000358if test x"${enable_gcc_rdynamic}" != x"no" ; then
359 if test x"${enable_gcc_rdynamic}" = x"yes" -o x"$COMPILER" = x"GCC"; then
360 LDFLAGS="${LDFLAGS} -rdynamic"
361 fi
ajs3cade262004-12-29 17:50:22 +0000362fi
363
ajs924b9222005-04-16 17:11:24 +0000364if test x"${enable_time_check}" != x"no" ; then
365 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
366 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
367 else
368 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
369 fi
370fi
371
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000372if test "${enable_fpm}" = "yes"; then
373 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
374fi
375
Avneesh Sachdev7e4025c2016-03-11 12:21:24 -0800376if test "x${enable_dev_build}" = "xyes"; then
377 AC_DEFINE(DEV_BUILD,,Build for development)
378fi
379AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
380
Avneesh Sachdev07e5b642016-04-04 10:54:55 -0700381#
382# Logic for protobuf support.
383#
384if test "$enable_protobuf" = "yes"; then
385 have_protobuf=yes
386
387 # Check for protoc-c
388 AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
389 if test "x$PROTOC_C" = "x/bin/false"; then
390 have_protobuf=no
391 else
392 found_protobuf_c=no
393 PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
394 [found_protobuf_c=yes],
395 [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
396
397 if test "x$found_protobuf_c" = "xyes"; then
398 LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
399 CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
400 else
401 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
402 [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
403 fi
404 fi
405fi
406
407# Fail if the user explicity enabled protobuf support and we couldn't
408# find the compiler or libraries.
409if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
410 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
411fi
412
413if test "x$have_protobuf" = "xyes"; then
414 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
415fi
416
417AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
418
419#
420# End of logic for protobuf support.
421#
422
paul7ea487b2003-03-17 02:05:07 +0000423if test "${enable_tcp_zebra}" = "yes"; then
424 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
425fi
426
Paul Jakma3453a712009-06-12 14:21:02 +0100427if test "${enable_linux24_tcp_md5}" = "yes"; then
428 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
429fi
430
gdtd2a0ccc2003-12-03 18:13:48 +0000431AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
432if test "${enable_rtadv}" != "no"; then
hasso71c0fb52003-05-25 20:18:13 +0000433 AC_MSG_RESULT(yes)
gdtd2a0ccc2003-12-03 18:13:48 +0000434 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
paul2487bea2003-05-25 23:51:31 +0000435else
436 AC_MSG_RESULT(no)
hasso71c0fb52003-05-25 20:18:13 +0000437fi
paul7ea487b2003-03-17 02:05:07 +0000438
hassoca776982004-06-12 14:33:05 +0000439if test "${enable_irdp}" = "yes"; then
440 AC_DEFINE(HAVE_IRDP,, IRDP )
441fi
442
David Lamparter656a2c02015-02-09 11:36:10 +0100443if test "${enable_isisd}" != "no" && test "${enable_isis_topology}" = yes; then
hassof695b012005-04-02 19:03:39 +0000444 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
David Lamparteree1ac2d2012-07-19 12:58:59 +0200445 ISIS_TOPOLOGY_INCLUDES="-I\$(srcdir)/topology"
hassof695b012005-04-02 19:03:39 +0000446 ISIS_TOPOLOGY_DIR="topology"
447 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
448fi
449
450AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
451AC_SUBST(ISIS_TOPOLOGY_DIR)
452AC_SUBST(ISIS_TOPOLOGY_LIB)
453
Jafar Al-Gharaibeha8f97902016-07-28 14:41:20 -0500454if test x"${enable_user}" = x"no"; then
455 enable_user=""
456else
457 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
458 enable_user="quagga"
459 fi
460 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
pauledd7c242003-06-04 13:59:38 +0000461fi
pauledd7c242003-06-04 13:59:38 +0000462
Jafar Al-Gharaibeha8f97902016-07-28 14:41:20 -0500463if test x"${enable_group}" = x"no"; then
464 enable_group=""
465else
466 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
467 enable_group="quagga"
468 fi
469 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
pauledd7c242003-06-04 13:59:38 +0000470fi
pauledd7c242003-06-04 13:59:38 +0000471
472if test x"${enable_vty_group}" = x"yes" ; then
paul8d4aee52003-06-06 00:30:35 +0000473 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
paul79cb2162003-06-06 12:19:53 +0000474elif test x"${enable_vty_group}" != x""; then
paul8d4aee52003-06-06 00:30:35 +0000475 if test x"${enable_vty_group}" != x"no"; then
pauledd7c242003-06-04 13:59:38 +0000476 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
477 fi
478fi
paul26275b02005-04-11 07:10:47 +0000479AC_SUBST([enable_user])
480AC_SUBST([enable_group])
481AC_SUBST([enable_vty_group])
pauledd7c242003-06-04 13:59:38 +0000482
gdtaa593d52003-12-22 20:15:53 +0000483enable_configfile_mask=${enable_configfile_mask:-0600}
484AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
485
486enable_logfile_mask=${enable_logfile_mask:-0600}
487AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
488
Donald Sharpd1839632015-12-09 08:24:44 -0500489MPATH_NUM=1
paul7ea487b2003-03-17 02:05:07 +0000490
491case "${enable_multipath}" in
Donald Sharpd1839632015-12-09 08:24:44 -0500492 0)
493 MPATH_NUM=64
494 ;;
495 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
496 MPATH_NUM="${enable_multipath}"
paul7ea487b2003-03-17 02:05:07 +0000497 ;;
498 "")
499 ;;
500 *)
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000501 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
paul7ea487b2003-03-17 02:05:07 +0000502 ;;
503esac
504
Donald Sharpd1839632015-12-09 08:24:44 -0500505AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
paul7ea487b2003-03-17 02:05:07 +0000506
Joachim Nilsson1080c132012-05-30 08:15:48 +0200507dnl -----------------------------------
508dnl Add extra version string to package
509dnl name, string and version fields.
510dnl -----------------------------------
511if test "x${EXTRAVERSION}" != "x" ; then
David Lamparter0be793e2012-11-27 01:34:56 +0000512 VERSION="${VERSION}${EXTRAVERSION}"
513 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
514 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
Joachim Nilsson1080c132012-05-30 08:15:48 +0200515fi
516
David Lampartera16dcf72012-12-13 11:20:50 +0100517if test "x$with_pkg_git_version" = "xyes"; then
518 if test -d "${srcdir}/.git"; then
519 AC_DEFINE(GIT_VERSION, [1], [include git version info])
520 else with_pkg_git_version="no"
521 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
522 fi
523fi
524AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
David Lamparter0be793e2012-11-27 01:34:56 +0000525
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000526dnl ------------------------------------
527dnl Check C keywords and standard types
528dnl ------------------------------------
529AC_C_CONST
530AC_C_INLINE
531AC_C_RESTRICT
532AC_C_VOLATILE
pauldc7a2bf2003-10-22 00:07:44 +0000533AC_HEADER_STDC
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000534AC_HEADER_TIME
535AC_HEADER_SYS_WAIT
Paul Jakmae8441a82015-09-15 16:15:27 +0100536AC_HEADER_STDBOOL
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000537dnl AC_TYPE_PID_T
538AC_TYPE_UID_T
539AC_TYPE_MODE_T
540AC_TYPE_SIZE_T
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000541AC_STRUCT_TM
pauldc7a2bf2003-10-22 00:07:44 +0000542
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000543dnl -------------------------
544dnl Check other header files.
545dnl -------------------------
546AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
547 sys/types.h linux/version.h netdb.h asm/types.h \
Timo Teräs16ffb262014-07-29 09:41:54 +0000548 sys/cdefs.h sys/param.h limits.h signal.h \
Paul Jakma7e49a4f2016-08-02 13:36:03 +0100549 sys/socket.h netinet/in.h time.h sys/time.h features.h])
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000550
551dnl Utility macro to avoid retyping includes all the time
552m4_define([QUAGGA_INCLUDES],
553[#ifdef SUNOS_5
554#define _XPG4_2
555#define __EXTENSIONS__
556#endif
557#include <stdio.h>
558#if STDC_HEADERS
559# include <stdlib.h>
560# include <stddef.h>
561#else
562# if HAVE_STDLIB_H
563# include <stdlib.h>
564# endif
565#endif
566#if HAVE_SYS_TYPES_H
567# include <sys/types.h>
568#endif
569/* sys/conf.h depends on param.h on FBSD at least */
570#if HAVE_SYS_PARAM_H
571# include <sys/param.h>
572#endif
573/* Required for MAXSIG */
574#if HAVE_SIGNAL_H
575# include <signal.h>
576#endif
577#if HAVE_SYS_SOCKET_H
578# include <sys/socket.h>
579#endif
Hasso Tepperea057672013-01-13 17:45:29 +0000580#ifdef __APPLE__
581# define __APPLE_USE_RFC_3542
582#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000583#if HAVE_NETINET_IN_H
584# include <netinet/in.h>
585#endif
Paul Jakma6511cab2009-06-18 17:38:01 +0100586#ifdef TIME_WITH_SYS_TIME
587# include <sys/time.h>
588# include <time.h>
589#else
590# ifdef HAVE_SYS_TIME_H
591# include <sys/time.h>
592# else
593# include <time.h>
594# endif
595#endif /* TIME_WITH_SYS_TIME */
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000596])dnl
597
Denis Ovsienko2b43bf22011-07-14 16:30:08 +0400598dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
599dnl round below execution begins, otherwise it doesn't properly detect
600dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
601dnl on FreeBSD (BZ#408).
602
603AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
604
605m4_define([QUAGGA_INCLUDES],
606QUAGGA_INCLUDES
607[#if HAVE_NET_IF_H
608# include <net/if.h>
609#endif
610])dnl
611
612dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
613dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
614dnl an additional round for it.
615
616AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
617
618m4_define([QUAGGA_INCLUDES],
619QUAGGA_INCLUDES
620[#if HAVE_NET_IF_VAR_H
621# include <net/if_var.h>
622#endif
623])dnl
624
625AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
626 net/if_dl.h net/netopt.h net/route.h \
Paul Jakma11770e12007-06-22 16:14:42 +0000627 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000628 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
629 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
630 [], [], QUAGGA_INCLUDES)
631
632AC_CHECK_HEADERS([ucontext.h], [], [],
633[#ifndef __USE_GNU
634#define __USE_GNU
635#endif /* __USE_GNU */
636QUAGGA_INCLUDES
637])
638
Joakim Tjernlundb166ea22009-06-25 16:40:06 +0100639m4_define([UCONTEXT_INCLUDES],
640[#include <ucontext.h>])dnl
641
642AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
643 [], [], [UCONTEXT_INCLUDES])
644AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
645 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
646 [], [], [UCONTEXT_INCLUDES])],
647 [], [UCONTEXT_INCLUDES])
648AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
649 [], [], [UCONTEXT_INCLUDES])
650
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000651m4_define([QUAGGA_INCLUDES],
652QUAGGA_INCLUDES
Denis Ovsienko2b43bf22011-07-14 16:30:08 +0400653[#if HAVE_SYS_UN_H
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000654# include <sys/un.h>
655#endif
656#if HAVE_NETINET_IN_SYSTM_H
657# include <netinet/in_systm.h>
658#endif
659#if HAVE_NETINET_IN_VAR_H
660# include <netinet/in_var.h>
661#endif
662#if HAVE_NET_IF_DL_H
663# include <net/if_dl.h>
664#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000665#if HAVE_NET_NETOPT_H
666# include <net/netopt.h>
667#endif
668#if HAVE_NET_ROUTE_H
669# include <net/route.h>
670#endif
671#if HAVE_INET_ND_H
672# include <inet/nd.h>
673#endif
674#if HAVE_ARPA_INET_H
675# include <arpa/inet.h>
676#endif
Paul Jakma11770e12007-06-22 16:14:42 +0000677/* Required for IDRP */
678#if HAVE_NETINET_IP_ICMP_H
679# include <netinet/ip_icmp.h>
680#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000681])dnl
pauldc7a2bf2003-10-22 00:07:44 +0000682
gdtfa3232e2003-12-03 17:52:30 +0000683dnl V6 headers are checked below, after we check for v6
paul7ea487b2003-03-17 02:05:07 +0000684
paul7ea487b2003-03-17 02:05:07 +0000685dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
686case "$host" in
paulafd8a122005-03-12 06:36:10 +0000687 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
paul7ea487b2003-03-17 02:05:07 +0000688 opsys=sol2-6
paulafd8a122005-03-12 06:36:10 +0000689 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
paul19877dd2004-05-11 10:49:35 +0000690 AC_DEFINE(SUNOS_5, 1, SunOS 5)
paul7ea487b2003-03-17 02:05:07 +0000691 AC_CHECK_LIB(xnet, main)
692 CURSES=-lcurses
David Lampartere8d0d242014-06-28 22:07:41 +0200693 SOLARIS="solaris"
paul7ea487b2003-03-17 02:05:07 +0000694 ;;
paul1b73de82005-04-10 16:31:51 +0000695 [*-sunos5.[8-9]] \
696 | [*-sunos5.1[0-9]] \
697 | [*-sunos5.1[0-9].[0-9]] \
698 | [*-solaris2.[8-9]] \
699 | [*-solaris2.1[0-9]] \
700 | [*-solaris2.1[0-9].[0-9]])
paulafd8a122005-03-12 06:36:10 +0000701 opsys=sol8
Paul Jakmafb66b292006-05-28 08:26:15 +0000702 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
703 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
paul19877dd2004-05-11 10:49:35 +0000704 AC_CHECK_LIB(socket, main)
705 AC_CHECK_LIB(nsl, main)
paul1b73de82005-04-10 16:31:51 +0000706 AC_CHECK_LIB(umem, main)
Paul Jakmafb66b292006-05-28 08:26:15 +0000707 AC_CHECK_FUNCS([printstack],
708 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
709 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
710 ])
paul19877dd2004-05-11 10:49:35 +0000711 CURSES=-lcurses
David Lampartere8d0d242014-06-28 22:07:41 +0200712 SOLARIS="solaris"
paul19877dd2004-05-11 10:49:35 +0000713 ;;
paul7ea487b2003-03-17 02:05:07 +0000714 *-sunos5* | *-solaris2*)
paul19877dd2004-05-11 10:49:35 +0000715 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
paul7ea487b2003-03-17 02:05:07 +0000716 AC_CHECK_LIB(socket, main)
717 AC_CHECK_LIB(nsl, main)
718 CURSES=-lcurses
David Lampartere8d0d242014-06-28 22:07:41 +0200719 SOLARIS="solaris"
paul7ea487b2003-03-17 02:05:07 +0000720 ;;
hassoc45eb832005-02-19 13:58:06 +0000721 *-linux*)
paul7ea487b2003-03-17 02:05:07 +0000722 opsys=gnu-linux
723 AC_DEFINE(GNU_LINUX,,GNU Linux)
724 ;;
paul7ea487b2003-03-17 02:05:07 +0000725 *-openbsd*)
726 opsys=openbsd
727 AC_DEFINE(OPEN_BSD,,OpenBSD)
728 ;;
paul7ea487b2003-03-17 02:05:07 +0000729esac
730
Paul Jakma62c9f502009-07-19 17:33:21 +0100731AC_SYS_LARGEFILE
732
paul7ea487b2003-03-17 02:05:07 +0000733dnl ---------------------
734dnl Integrated VTY option
735dnl ---------------------
736case "${enable_vtysh}" in
Donald Sharpe6756782015-07-16 21:18:34 -0400737 "no") VTYSH="";;
738 *) VTYSH="vtysh";
paul7ea487b2003-03-17 02:05:07 +0000739 AC_DEFINE(VTYSH,,VTY shell)
gdtfc9d0742004-06-30 14:25:12 +0000740dnl Vtysh uses libreadline, which looks for termcap functions at
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000741dnl configure time. We follow readlines search order.
gdtfc9d0742004-06-30 14:25:12 +0000742dnl The required procedures are in libtermcap on NetBSD, in
743dnl [TODO] on Linux, and in [TODO] on Solaris.
hassoc0689392005-08-25 12:00:58 +0000744 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
paula9694592005-08-25 14:50:05 +0000745 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
746 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
747 [AC_CHECK_LIB(ncurses, tputs,
748 LIBREADLINE="$LIBREADLINE -lncurses")]
749 )]
750 )]
751 )
Thomas Petazzoni64f8c7d2016-08-21 09:23:04 +0300752 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
paula9694592005-08-25 14:50:05 +0000753 "$LIBREADLINE")
paul7ea487b2003-03-17 02:05:07 +0000754 if test $ac_cv_lib_readline_main = no; then
gdtfc9d0742004-06-30 14:25:12 +0000755 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
paul7ea487b2003-03-17 02:05:07 +0000756 fi
757 AC_CHECK_HEADER(readline/history.h)
758 if test $ac_cv_header_readline_history_h = no;then
759 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
760 fi
paula9694592005-08-25 14:50:05 +0000761 AC_CHECK_LIB(readline, rl_completion_matches,
762 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
paul3d3de8c2003-05-23 10:33:49 +0000763 if test $ac_cv_lib_readline_rl_completion_matches = no; then
764 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
765 fi
766 ;;
paul7ea487b2003-03-17 02:05:07 +0000767 "no" ) VTYSH="";;
paul7ea487b2003-03-17 02:05:07 +0000768esac
hassoc0689392005-08-25 12:00:58 +0000769AC_SUBST(LIBREADLINE)
David Wardf027d332012-04-30 11:36:15 -0400770AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
paul7ea487b2003-03-17 02:05:07 +0000771
772dnl ----------
773dnl PAM module
Denis Ovsienko61599282011-07-15 00:24:15 +0400774dnl
775dnl Quagga detects the PAM library it is built against by checking for a
776dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
777dnl is known to #include pam_appl.h, the standard header of a PAM library, and
778dnl openpam.h doesn't do that, although depends on the header too. Hence a
779dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
780dnl of OpenPAM.
paul7ea487b2003-03-17 02:05:07 +0000781dnl ----------
782if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000783 AC_CHECK_HEADER([security/pam_misc.h],
784 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
785 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
786 pam_conv_func="misc_conv"
787 ],
788 [], QUAGGA_INCLUDES)
789 AC_CHECK_HEADER([security/openpam.h],
790 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
791 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
792 pam_conv_func="openpam_ttyconv"
793 ],
Denis Ovsienko61599282011-07-15 00:24:15 +0400794 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
paul24cd4352003-05-06 12:16:27 +0000795 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
796 AC_MSG_WARN([*** pam support will not be built ***])
797 with_libpam="no"
798 fi
799fi
800
801if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000802dnl took this test from proftpds configure.in and suited to our needs
paul7ea487b2003-03-17 02:05:07 +0000803dnl -------------------------------------------------------------------------
804dnl
805dnl This next check looks funky due to a linker problem with some versions
806dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
807dnl omitted requiring libdl linking information. PAM-0.72 or better ships
808dnl with RedHat 6.2 and Debian 2.2 or better.
809AC_CHECK_LIB(pam, pam_start,
paul24cd4352003-05-06 12:16:27 +0000810 [AC_CHECK_LIB(pam, $pam_conv_func,
paul7ea487b2003-03-17 02:05:07 +0000811 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
812 LIBPAM="-lpam"],
813 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
814 LIBPAM="-lpam -lpam_misc"]
815 )
816 ],
817
818 [AC_CHECK_LIB(pam, pam_end,
paul24cd4352003-05-06 12:16:27 +0000819 [AC_CHECK_LIB(pam, $pam_conv_func,
paula159ed92003-06-04 11:01:45 +0000820 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000821 LIBPAM="-lpam -ldl"],
paula159ed92003-06-04 11:01:45 +0000822 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000823 LIBPAM="-lpam -ldl -lpam_misc"]
824 )
825 ],AC_MSG_WARN([*** pam support will not be built ***]),
826 [-ldl])
827 ]
828)
829fi
830AC_SUBST(LIBPAM)
831
832dnl -------------------------------
833dnl Endian-ness check
834dnl -------------------------------
835AC_WORDS_BIGENDIAN
836
837dnl -------------------------------
838dnl check the size in byte of the C
839dnl -------------------------------
840dnl AC_CHECK_SIZEOF(char)
841dnl AC_CHECK_SIZEOF(int)
842dnl AC_CHECK_SIZEOF(short)
843dnl AC_CHECK_SIZEOF(long)
844
845dnl ----------------------------
846dnl check existance of functions
847dnl ----------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000848AC_FUNC_CHOWN
849AC_FUNC_FNMATCH
850AC_FUNC_FORK
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000851AC_FUNC_MEMCMP
852AC_FUNC_MKTIME
853AC_FUNC_STRFTIME
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000854AC_FUNC_STAT
855AC_FUNC_SELECT_ARGTYPES
856AC_FUNC_STRFTIME
Paul Jakmad46d2a22007-05-10 16:53:04 +0000857dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
858dnl can lead to strange side effects. So we just check for strnlen
859dnl directly, see below.
Paul Jakma2b5cb412007-05-10 17:05:16 +0000860dnl AC_FUNC_STRNLENdnl
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000861AC_FUNC_VPRINTF
862
863dnl -------------------------------
864dnl bgpd needs pow() and hence libm
865dnl -------------------------------
866TMPLIBS="$LIBS"
867AC_CHECK_HEADER([math.h],
868 [AC_CHECK_LIB([m], [pow],
869 [LIBM="-lm"
870 LIBS="$LIBS $LIBM"
871 AC_DEFINE(HAVE_LIBM,, Have libm)
872 AC_CHECK_FUNCS(pow,[],[LIBM=""])
873 ])
874])
875if test x"$LIBM" = x ; then
876 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
877fi
878LIBS="$TMPLIBS"
879AC_SUBST(LIBM)
880
881dnl ---------------
882dnl other functions
883dnl ---------------
884AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
Paul Jakmad46d2a22007-05-10 16:53:04 +0000885 inet_ntoa inet_aton strnlen \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000886 memchr memmove memset select socket \
887 strcasecmp strchr strcspn strdup strerror \
888 strncasecmp strndup strrchr strspn strstr \
889 strtol strtoul strlcat strlcpy \
890 daemon snprintf vsnprintf \
891 if_nametoindex if_indextoname getifaddrs \
David Lamparter12bbd622015-09-15 02:26:44 -0700892 uname fcntl getgrouplist])
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000893
paul7ea487b2003-03-17 02:05:07 +0000894
Feng Lu55cfa2f2014-07-03 18:24:34 +0800895AC_CHECK_HEADER([asm-generic/unistd.h],
896 [AC_CHECK_DECL(__NR_setns,
897 AC_DEFINE(HAVE_NETNS,, Have netns),,
898 QUAGGA_INCLUDES [#include <asm-generic/unistd.h>
899 ])
900 AC_CHECK_FUNCS(setns, AC_DEFINE(HAVE_SETNS,, Have setns))]
901 )
902
paul7ea487b2003-03-17 02:05:07 +0000903dnl ------------------------------------
904dnl Determine routing get and set method
905dnl ------------------------------------
906AC_MSG_CHECKING(zebra between kernel interface method)
907if test x"$opsys" = x"gnu-linux"; then
David Lamparter2e5ca492014-06-28 20:54:31 +0200908 AC_MSG_RESULT(netlink)
909 RT_METHOD=rt_netlink.o
910 AC_DEFINE(HAVE_NETLINK,,netlink)
911 netlink=yes
paul7ea487b2003-03-17 02:05:07 +0000912else
David Lamparter39b233f2014-06-28 21:49:18 +0200913 AC_MSG_RESULT(Route socket)
914 KERNEL_METHOD="kernel_socket.o"
915 RT_METHOD="rt_socket.o"
paul7ea487b2003-03-17 02:05:07 +0000916fi
917AC_SUBST(RT_METHOD)
918AC_SUBST(KERNEL_METHOD)
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000919AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
paul7ea487b2003-03-17 02:05:07 +0000920
Paul Jakma238497f2007-08-07 18:49:18 +0000921dnl --------------------------
922dnl Determine IS-IS I/O method
923dnl --------------------------
David Lamparter745bf052010-02-02 21:49:35 +0100924AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
925AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
926AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
Paul Jakma238497f2007-08-07 18:49:18 +0000927AC_CHECK_HEADER(net/bpf.h)
928AC_CHECK_HEADER(sys/dlpi.h)
929AC_MSG_CHECKING(zebra IS-IS I/O method)
930if test x"$opsys" = x"gnu-linux"; then
931 AC_MSG_RESULT(pfpacket)
David Lamparter745bf052010-02-02 21:49:35 +0100932 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
Paul Jakma238497f2007-08-07 18:49:18 +0000933elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
934 AC_MSG_RESULT(DLPI)
David Lamparter745bf052010-02-02 21:49:35 +0100935 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
Paul Jakma238497f2007-08-07 18:49:18 +0000936else
937 if test $ac_cv_header_net_bpf_h = no; then
938 if test $ac_cv_header_sys_dlpi_h = no; then
939 AC_MSG_RESULT(none)
940 AC_MSG_WARN([*** IS-IS support will not be built ***])
941 ISISD=""
942 else
943 AC_MSG_RESULT(DLPI)
944 fi
David Lamparter745bf052010-02-02 21:49:35 +0100945 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
Paul Jakma238497f2007-08-07 18:49:18 +0000946 else
947 AC_MSG_RESULT(BPF)
David Lamparter745bf052010-02-02 21:49:35 +0100948 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
Paul Jakma238497f2007-08-07 18:49:18 +0000949 fi
950fi
David Lamparter745bf052010-02-02 21:49:35 +0100951AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
Paul Jakma238497f2007-08-07 18:49:18 +0000952
ajsb99760a2005-01-04 16:24:43 +0000953dnl ------------------------------------
954dnl check for broken CMSG_FIRSTHDR macro
955dnl ------------------------------------
gdt6c200462005-01-04 17:02:48 +0000956AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
hasso5b087522005-04-03 23:46:37 +0000957AC_RUN_IFELSE([AC_LANG_SOURCE([[
ajsb99760a2005-01-04 16:24:43 +0000958#ifdef SUNOS_5
959#define _XPG4_2
960#define __EXTENSIONS__
961#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000962#ifdef HAVE_STDLIB_H
963# include <stdlib.h>
964#endif
965#ifdef HAVE_SYS_TYPES_H
ajsb99760a2005-01-04 16:24:43 +0000966#include <sys/types.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000967#endif
968#ifdef HAVE_SYS_SOCKET_H
ajsb99760a2005-01-04 16:24:43 +0000969#include <sys/socket.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000970#endif
ajsb99760a2005-01-04 16:24:43 +0000971
972main()
973{
974 struct msghdr msg;
975 char buf[4];
976
977 msg.msg_control = buf;
978 msg.msg_controllen = 0;
979
980 if (CMSG_FIRSTHDR(&msg) != NULL)
981 exit(0);
982 exit (1);
hasso5b087522005-04-03 23:46:37 +0000983}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
hassod33e8d72005-04-03 13:07:21 +0000984[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
ajsb99760a2005-01-04 16:24:43 +0000985
paul7ea487b2003-03-17 02:05:07 +0000986dnl ------------------------------
987dnl check kernel route read method
988dnl ------------------------------
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500989AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
990[if test "x$netlink" = xyes; then
991 quagga_cv_rtread_method="netlink"
paul7ea487b2003-03-17 02:05:07 +0000992else
David Lamparter2e5ca492014-06-28 20:54:31 +0200993for quagga_cv_rtread_method in /dev/ip /dev/null;
paul7ea487b2003-03-17 02:05:07 +0000994do
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500995 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
paul7ea487b2003-03-17 02:05:07 +0000996done
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500997case $quagga_cv_rtread_method in
paul9c30ab62003-07-08 08:36:17 +0000998 "/dev/ip")
999 case "$host" in
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001000 *-freebsd*) quagga_cv_rtread_method="sysctl";;
1001 *) quagga_cv_rtread_method="getmsg";;
paul9c30ab62003-07-08 08:36:17 +00001002 esac;;
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001003 *)
1004 quagga_cv_rtread_method="sysctl";;
paul7ea487b2003-03-17 02:05:07 +00001005esac
1006fi])
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001007RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
paul7ea487b2003-03-17 02:05:07 +00001008AC_SUBST(RTREAD_METHOD)
1009
1010dnl -----------------------------
1011dnl check interface lookup method
1012dnl -----------------------------
paul19877dd2004-05-11 10:49:35 +00001013IOCTL_METHOD=ioctl.o
paul7ea487b2003-03-17 02:05:07 +00001014AC_MSG_CHECKING(interface looking up method)
1015if test "$netlink" = yes; then
1016 AC_MSG_RESULT(netlink)
1017 IF_METHOD=if_netlink.o
paul19877dd2004-05-11 10:49:35 +00001018elif test "$opsys" = "sol2-6";then
1019 AC_MSG_RESULT(Solaris GIF)
1020 IF_METHOD=if_ioctl.o
paulafd8a122005-03-12 06:36:10 +00001021elif test "$opsys" = "sol8";then
paul19877dd2004-05-11 10:49:35 +00001022 AC_MSG_RESULT(Solaris GLIF)
1023 IF_METHOD=if_ioctl_solaris.o
1024 IOCTL_METHOD=ioctl_solaris.o
paul19877dd2004-05-11 10:49:35 +00001025elif test "$opsys" = "openbsd";then
1026 AC_MSG_RESULT(openbsd)
1027 IF_METHOD=if_ioctl.o
1028elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
1029 AC_MSG_RESULT(sysctl)
paul7ea487b2003-03-17 02:05:07 +00001030 IF_METHOD=if_sysctl.o
1031 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
paul19877dd2004-05-11 10:49:35 +00001032else
paul7ea487b2003-03-17 02:05:07 +00001033 AC_MSG_RESULT(ioctl)
1034 IF_METHOD=if_ioctl.o
paul7ea487b2003-03-17 02:05:07 +00001035fi
1036AC_SUBST(IF_METHOD)
paul19877dd2004-05-11 10:49:35 +00001037AC_SUBST(IOCTL_METHOD)
paul7ea487b2003-03-17 02:05:07 +00001038
paul42c98192005-05-07 02:22:51 +00001039dnl ---------------------------------------------------------------
1040dnl figure out how to specify an interface in multicast sockets API
1041dnl ---------------------------------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001042AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
paul42c98192005-05-07 02:22:51 +00001043
Donald Sharp1934e782015-06-05 12:15:44 -07001044AC_CHECK_HEADERS([linux/mroute.h], [], [],
1045[
1046#if HAVE_NETINET_IN_H
1047#include<netinet/in.h>
1048#endif])
paul42c98192005-05-07 02:22:51 +00001049AC_MSG_CHECKING([for BSD struct ip_mreq hack])
1050AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
1051#include <sys/param.h>
Brian Bennettb8a893c2015-02-17 22:32:22 +00001052#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 +00001053 return (0);
1054#else
1055 #error No support for BSD struct ip_mreq hack detected
1056#endif],[AC_MSG_RESULT(yes)
1057AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1058AC_MSG_RESULT(no))
1059
Dmitrij Tejblum10d04cd2011-08-22 11:39:35 +04001060AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1061AC_TRY_COMPILE([
1062#include <sys/types.h>
1063#include <netinet/in.h>
1064], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1065], [AC_MSG_RESULT(yes)
1066AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1067AC_MSG_RESULT(no))
1068
Andrew J. Schorrc543a172008-01-10 15:24:32 +00001069dnl ---------------------------------------------------------------
1070dnl figure out how to check link-state
1071dnl ---------------------------------------------------------------
Andrew J. Schorr6418bed2008-01-11 16:33:59 +00001072AC_CHECK_HEADER([net/if.h],
1073 [AC_CHECK_HEADER( [net/if_media.h],
1074 [m4_define([LINK_DETECT_INCLUDES],
1075 QUAGGA_INCLUDES
1076 [#include <net/if_media.h>
1077 ])
1078 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1079 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1080 [], LINK_DETECT_INCLUDES)],
1081 [],
1082 QUAGGA_INCLUDES)],
1083 [], QUAGGA_INCLUDES )
Andrew J. Schorrc543a172008-01-10 15:24:32 +00001084
Doug VanLeuven9234b382012-10-10 16:12:32 -07001085dnl ---------------------------------------------------------------
1086dnl Additional, newer way to check link-state using ifi_link_state.
1087dnl Not available in all BSD's when ifmediareq available
1088dnl ---------------------------------------------------------------
1089AC_CHECK_HEADER([net/if.h],
1090 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1091 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1092 [], QUAGGA_INCLUDES),
1093 ,)
1094
Paul Jakma0df7c912008-07-21 21:02:49 +00001095dnl ------------------------
1096dnl TCP_MD5SIG socket option
1097dnl ------------------------
1098
1099AC_CHECK_HEADER([netinet/tcp.h],
1100 [m4_define([MD5_INCLUDES],
1101 QUAGGA_INCLUDES
1102 [#include <netinet/tcp.h>
1103 ])
1104 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1105 [],
1106 QUAGGA_INCLUDES)
1107if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1108 AC_CHECK_HEADER([linux/tcp.h],
1109 [m4_define([MD5_INCLUDES],
1110 QUAGGA_INCLUDES
1111 [#include <linux/tcp.h>
1112 ])
1113 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1114fi
1115
paul7ea487b2003-03-17 02:05:07 +00001116dnl -----------------------------
1117dnl check ipforward detect method
1118dnl -----------------------------
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001119AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
David Lamparterca9f3422009-09-16 02:11:00 +02001120[if test x$cross_compiling = xyes; then
1121 if test x"$opsys" = x"gnu-linux"; then
1122 quagga_cv_ipforward_method=/proc/net/snmp
1123 else
1124 quagga_cv_ipforward_method=/dev/ip
1125 fi
1126else
1127 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1128 do
1129 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1130 done
1131fi
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001132case $quagga_cv_ipforward_method in
1133 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
paul7ea487b2003-03-17 02:05:07 +00001134 "/dev/ip")
1135 case "$host" in
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001136 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1137 *) quagga_cv_ipforward_method="solaris";;
paul7ea487b2003-03-17 02:05:07 +00001138 esac;;
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001139 *) quagga_cv_ipforward_method="sysctl";;
paul7ea487b2003-03-17 02:05:07 +00001140esac])
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001141IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
paul7ea487b2003-03-17 02:05:07 +00001142AC_SUBST(IPFORWARD)
1143
1144AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
1145
1146dnl ----------
1147dnl IPv6 check
1148dnl ----------
1149AC_MSG_CHECKING(whether does this OS have IPv6 stack)
paul7ea487b2003-03-17 02:05:07 +00001150dnl ---------
1151dnl KAME IPv6
1152dnl ---------
David Lamparter6d6df302014-06-28 21:12:37 +02001153 if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
paula159ed92003-06-04 11:01:45 +00001154 AC_DEFINE(KAME,1,KAME IPv6)
paula159ed92003-06-04 11:01:45 +00001155 AC_MSG_RESULT(KAME)
paul19877dd2004-05-11 10:49:35 +00001156dnl ------------------------------------
1157dnl Solaris 9, 10 and potentially higher
1158dnl ------------------------------------
paulafd8a122005-03-12 06:36:10 +00001159 elif test x"$opsys" = x"sol8"; then
paul19877dd2004-05-11 10:49:35 +00001160 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
paul19877dd2004-05-11 10:49:35 +00001161 AC_MSG_RESULT(Solaris IPv6)
paul7ea487b2003-03-17 02:05:07 +00001162dnl ----------
1163dnl Linux IPv6
1164dnl ----------
David Lamparter29ed6222014-06-28 21:42:25 +02001165 elif test x"$opsys" = x"gnu-linux"; then
Timo Teräs3ef0b872014-07-29 09:41:56 +00001166 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
David Lamparter29ed6222014-06-28 21:42:25 +02001167 AC_MSG_RESULT(Linux IPv6)
1168 else
David Lamparter7fe17e62014-11-22 10:31:33 -08001169 AC_MSG_ERROR([Failed to detect IPv6 stack])
paula159ed92003-06-04 11:01:45 +00001170 fi
paul7ea487b2003-03-17 02:05:07 +00001171
David Lamparter7fe17e62014-11-22 10:31:33 -08001172dnl this is unconditial, for compatibility
1173AC_DEFINE(HAVE_IPV6,1,IPv6)
paul7ea487b2003-03-17 02:05:07 +00001174
gdtfa3232e2003-12-03 17:52:30 +00001175dnl ------------------
1176dnl IPv6 header checks
1177dnl ------------------
gdtfa3232e2003-12-03 17:52:30 +00001178AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
David Lamparter05a69d22015-05-27 22:15:37 +02001179 netinet6/in6_var.h netinet6/nd6.h], [], [],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001180 QUAGGA_INCLUDES)
gdtfa3232e2003-12-03 17:52:30 +00001181
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001182m4_define([QUAGGA_INCLUDES],dnl
1183QUAGGA_INCLUDES
1184[#if HAVE_NETINET6_IN6_H
1185#include <netinet6/in6.h>
1186#endif
1187#if HAVE_NETINET_IN6_VAR_H
1188#include <netinet/in6_var.h>
1189#endif
1190#if HAVE_NETINET_ICMP6_H
1191# include <netinet/icmp6.h>
1192#endif
1193#if HAVE_NETINET6_IN6_VAR_H
1194# include <netinet6/in6_var.h>
1195#endif
1196#if HAVE_NETINET6_ND6_H
Hasso Tepperfbf24542007-06-25 19:30:59 +00001197# include <netinet6/nd6.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001198#endif
1199])dnl
1200
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +01001201dnl disable doc check
1202if test "${enable_doc}" = "no";then
1203 DOC=""
1204else
1205 DOC="doc"
1206fi
1207
paul7ea487b2003-03-17 02:05:07 +00001208dnl --------------------
1209dnl Daemon disable check
1210dnl --------------------
1211if test "${enable_zebra}" = "no";then
1212 ZEBRA=""
1213else
1214 ZEBRA="zebra"
1215fi
David Wardf027d332012-04-30 11:36:15 -04001216AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
paul7ea487b2003-03-17 02:05:07 +00001217
1218if test "${enable_bgpd}" = "no";then
1219 BGPD=""
1220else
1221 BGPD="bgpd"
1222fi
David Wardf027d332012-04-30 11:36:15 -04001223AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
paul7ea487b2003-03-17 02:05:07 +00001224
1225if test "${enable_ripd}" = "no";then
1226 RIPD=""
1227else
1228 RIPD="ripd"
1229fi
David Wardf027d332012-04-30 11:36:15 -04001230AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
paul7ea487b2003-03-17 02:05:07 +00001231
1232if test "${enable_ospfd}" = "no";then
1233 OSPFD=""
1234else
1235 OSPFD="ospfd"
1236fi
David Wardf027d332012-04-30 11:36:15 -04001237AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
paul7ea487b2003-03-17 02:05:07 +00001238
Timo Teräsdafa05e2017-01-19 17:27:01 +02001239if test x"$opsys" != x"gnu-linux"; then
1240 dnl NHRPd works currently with Linux only.
1241 enable_nhrpd="no"
1242fi
1243if test "${enable_nhrpd}" = "no";then
1244 NHRPD=""
1245else
1246 NHRPD="nhrpd"
1247fi
1248AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1249
ajsd0199432004-12-22 14:03:52 +00001250if test "${enable_watchquagga}" = "no";then
1251 WATCHQUAGGA=""
1252else
1253 WATCHQUAGGA="watchquagga"
1254fi
David Wardf027d332012-04-30 11:36:15 -04001255AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
ajsd0199432004-12-22 14:03:52 +00001256
paul1ef74ef2003-03-21 15:16:05 +00001257OSPFCLIENT=""
Donald Sharp36fef572015-12-16 14:22:10 -05001258if test "${enable_ospfapi}" != "no";then
paul9a569842003-03-28 01:45:13 +00001259 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
paul1ef74ef2003-03-21 15:16:05 +00001260
Donald Sharp36fef572015-12-16 14:22:10 -05001261 if test "${enable_ospfclient}" != "no";then
paul1ef74ef2003-03-21 15:16:05 +00001262 OSPFCLIENT="ospfclient"
paul1ef74ef2003-03-21 15:16:05 +00001263 fi
paul7ea487b2003-03-17 02:05:07 +00001264fi
Donald Sharp36fef572015-12-16 14:22:10 -05001265
David Wardf027d332012-04-30 11:36:15 -04001266AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
paul7ea487b2003-03-17 02:05:07 +00001267
1268case "${enable_ripngd}" in
paul7ea487b2003-03-17 02:05:07 +00001269 "no" ) RIPNGD="";;
David Lamparter7fe17e62014-11-22 10:31:33 -08001270 * ) RIPNGD="ripngd";;
paul7ea487b2003-03-17 02:05:07 +00001271esac
David Wardf027d332012-04-30 11:36:15 -04001272AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
paul7ea487b2003-03-17 02:05:07 +00001273
1274case "${enable_ospf6d}" in
paul7ea487b2003-03-17 02:05:07 +00001275 "no" ) OSPF6D="";;
David Lamparter7fe17e62014-11-22 10:31:33 -08001276 * ) OSPF6D="ospf6d";;
paul7ea487b2003-03-17 02:05:07 +00001277esac
David Wardf027d332012-04-30 11:36:15 -04001278AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
paul7ea487b2003-03-17 02:05:07 +00001279
jardin9e867fe2003-12-23 08:56:18 +00001280case "${enable_isisd}" in
jardin9e867fe2003-12-23 08:56:18 +00001281 "no" ) ISISD="";;
David Lamparter656a2c02015-02-09 11:36:10 +01001282 * ) ISISD="isisd";;
jardin9e867fe2003-12-23 08:56:18 +00001283esac
David Wardf027d332012-04-30 11:36:15 -04001284AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
jardin9e867fe2003-12-23 08:56:18 +00001285
Everton Marques871dbcf2009-08-11 15:43:05 -03001286case "${enable_pimd}" in
Everton Marques871dbcf2009-08-11 15:43:05 -03001287 "no" ) PIMD="";;
Donald Sharpe6756782015-07-16 21:18:34 -04001288 * ) PIMD="pimd";;
Everton Marques871dbcf2009-08-11 15:43:05 -03001289esac
Everton Marquesff57d362014-06-25 15:54:03 -03001290AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
Everton Marques871dbcf2009-08-11 15:43:05 -03001291
paul7ea487b2003-03-17 02:05:07 +00001292if test "${enable_bgp_announce}" = "no";then
Paul Jakma750e8142008-07-22 21:11:48 +00001293 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1294else
1295 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
paul7ea487b2003-03-17 02:05:07 +00001296fi
1297
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +01001298AC_SUBST(DOC)
paul7ea487b2003-03-17 02:05:07 +00001299AC_SUBST(ZEBRA)
1300AC_SUBST(BGPD)
1301AC_SUBST(RIPD)
1302AC_SUBST(RIPNGD)
1303AC_SUBST(OSPFD)
1304AC_SUBST(OSPF6D)
Timo Teräsdafa05e2017-01-19 17:27:01 +02001305AC_SUBST(NHRPD)
ajsd0199432004-12-22 14:03:52 +00001306AC_SUBST(WATCHQUAGGA)
jardin9e867fe2003-12-23 08:56:18 +00001307AC_SUBST(ISISD)
Everton Marques871dbcf2009-08-11 15:43:05 -03001308AC_SUBST(PIMD)
Greg Troxel97cee872007-08-02 13:36:56 +00001309AC_SUBST(SOLARIS)
paul7ea487b2003-03-17 02:05:07 +00001310AC_SUBST(VTYSH)
paul7ea487b2003-03-17 02:05:07 +00001311AC_SUBST(CURSES)
1312AC_SUBST(OSPFCLIENT)
paul1ef74ef2003-03-21 15:16:05 +00001313AC_SUBST(OSPFAPI)
paul7ea487b2003-03-17 02:05:07 +00001314AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1315AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1316AC_CHECK_LIB(crypt, crypt)
1317AC_CHECK_LIB(resolv, res_init)
paul7ea487b2003-03-17 02:05:07 +00001318
paul7ea487b2003-03-17 02:05:07 +00001319dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001320dnl check system has PCRE regexp
1321dnl ---------------------------
1322if test "x$enable_pcreposix" = "xyes"; then
1323 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1324 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1325fi
1326
1327if test "x$enable_pcreposix" != "xyes"; then
1328dnl ---------------------------
paul7ea487b2003-03-17 02:05:07 +00001329dnl check system has GNU regexp
1330dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001331AC_MSG_CHECKING(whether system has GNU regex)
paul7ea487b2003-03-17 02:05:07 +00001332AC_CHECK_LIB(c, regexec,
1333[AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1334 LIB_REGEX=""],
1335[LIB_REGEX="regex.o"])
Jeremy Jackson25f45882009-01-12 16:06:12 -05001336fi
1337AC_SUBST(HAVE_LIBPCREPOSIX)
paul7ea487b2003-03-17 02:05:07 +00001338AC_SUBST(LIB_REGEX)
1339
1340dnl ------------------
Timo Teräsdafa05e2017-01-19 17:27:01 +02001341dnl check C-Ares library
1342dnl ------------------
1343if test "${enable_nhrpd}" != "no";then
1344 PKG_CHECK_MODULES([CARES], [libcares])
1345fi
1346
1347
1348dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001349dnl check Net-SNMP library
paul7ea487b2003-03-17 02:05:07 +00001350dnl ------------------
Vincent Bernatd6be5fb2012-05-24 09:44:43 +02001351if test "${enable_snmp}" != ""; then
Vincent Bernat08d7f652012-05-22 22:29:17 +02001352 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1353 if test x"$NETSNMP_CONFIG" = x"no"; then
1354 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1355 fi
1356 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1357 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1358 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1359 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1360int main(void);
1361],
1362[
1363{
1364 return 0;
1365}
1366])],[AC_MSG_RESULT(yes)],[
1367 AC_MSG_RESULT(no)
1368 AC_MSG_ERROR([--enable-snmp given but not usable])])
1369 AC_DEFINE(HAVE_SNMP,,SNMP)
Vincent Bernatd6be5fb2012-05-24 09:44:43 +02001370 case "${enable_snmp}" in
1371 yes)
1372 SNMP_METHOD=agentx
1373 ;;
1374 smux|agentx)
1375 SNMP_METHOD="${enable_snmp}"
1376 ;;
1377 *)
1378 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1379 ;;
1380 esac
1381 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1382 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1383 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
paul7ea487b2003-03-17 02:05:07 +00001384fi
1385
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001386dnl ---------------------------
1387dnl sockaddr and netinet checks
1388dnl ---------------------------
1389AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1390 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
Everton Marques871dbcf2009-08-11 15:43:05 -03001391 socklen_t, struct vifctl, struct mfcctl, struct sioc_sg_req,
1392 vifi_t, struct sioc_vif_req, struct igmpmsg,
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001393 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1394 struct nd_opt_adv_interval, struct rt_addrinfo,
Paul Jakma11770e12007-06-22 16:14:42 +00001395 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001396 [], [], QUAGGA_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001397
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001398AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1399 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1400 struct sockaddr_in6.sin6_scope_id,
David Lamparterca3ccd82012-09-26 14:52:39 +02001401 struct sockaddr_dl.sdl_len,
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001402 struct if6_aliasreq.ifra_lifetime,
1403 struct nd_opt_adv_interval.nd_opt_ai_type],
1404 [], [], QUAGGA_INCLUDES)
hasso71c0fb52003-05-25 20:18:13 +00001405
paul7ea487b2003-03-17 02:05:07 +00001406dnl ---------------------------
Paul Jakma11770e12007-06-22 16:14:42 +00001407dnl IRDP/pktinfo/icmphdr checks
paul7ea487b2003-03-17 02:05:07 +00001408dnl ---------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001409AC_CHECK_TYPES([struct in_pktinfo],
Paul Jakma11770e12007-06-22 16:14:42 +00001410 [AC_CHECK_TYPES([struct icmphdr],
1411 [if test "${enable_irdp}" != "no"; then
1412 AC_DEFINE(HAVE_IRDP,, IRDP)
1413 fi],
1414 [if test "${enable_irdp}" = "yes"; then
1415 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1416 fi], [QUAGGA_INCLUDES])],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001417 [if test "${enable_irdp}" = "yes"; then
1418 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1419 fi], [QUAGGA_INCLUDES])
vincent29c4c9b2005-03-25 13:05:47 +00001420
Everton Marques871dbcf2009-08-11 15:43:05 -03001421dnl -----------------------
1422dnl checking for IP_PKTINFO
1423dnl -----------------------
1424AC_MSG_CHECKING(for IP_PKTINFO)
1425AC_TRY_COMPILE([#include <netdb.h>], [
1426 int opt = IP_PKTINFO;
1427], [
1428 AC_MSG_RESULT(yes)
1429 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1430], [
1431 AC_MSG_RESULT(no)
1432])
1433
1434dnl ---------------------------
1435dnl checking for IP_RECVDSTADDR
1436dnl ---------------------------
1437AC_MSG_CHECKING(for IP_RECVDSTADDR)
1438AC_TRY_COMPILE([#include <netinet/in.h>], [
1439 int opt = IP_RECVDSTADDR;
1440], [
1441 AC_MSG_RESULT(yes)
1442 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1443], [
1444 AC_MSG_RESULT(no)
1445])
1446
1447dnl ----------------------
1448dnl checking for IP_RECVIF
1449dnl ----------------------
1450AC_MSG_CHECKING(for IP_RECVIF)
1451AC_TRY_COMPILE([#include <netinet/in.h>], [
1452 int opt = IP_RECVIF;
1453], [
1454 AC_MSG_RESULT(yes)
1455 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1456], [
1457 AC_MSG_RESULT(no)
1458])
1459
paul7ea487b2003-03-17 02:05:07 +00001460dnl --------------------------------------
1461dnl checking for getrusage struct and call
1462dnl --------------------------------------
Stephen Hemminger47f6aef2013-01-04 22:29:22 +00001463if test "${enable_rusage}" != "no"; then
1464 AC_MSG_CHECKING(whether getrusage is available)
1465 AC_TRY_COMPILE([#include <sys/resource.h>],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1466 [AC_MSG_RESULT(yes)
1467 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1468 AC_MSG_RESULT(no))
1469fi
paul7ea487b2003-03-17 02:05:07 +00001470
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001471dnl --------------------------------------
1472dnl checking for clock_time monotonic struct and call
1473dnl --------------------------------------
Paul Jakma6511cab2009-06-18 17:38:01 +01001474AC_CHECK_DECL(CLOCK_MONOTONIC,
1475 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
Dmitry Tejblum9964fcf2009-11-05 16:50:36 +03001476 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
Paul Jakma6511cab2009-06-18 17:38:01 +01001477], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001478
pauledd7c242003-06-04 13:59:38 +00001479dnl -------------------
1480dnl capabilities checks
1481dnl -------------------
hasso41d3fc92004-04-06 11:59:00 +00001482if test "${enable_capabilities}" != "no"; then
1483 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1484 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1485 [AC_MSG_RESULT(yes)
1486 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1487 quagga_ac_keepcaps="yes"],
1488 AC_MSG_RESULT(no)
pauledd7c242003-06-04 13:59:38 +00001489 )
hasso41d3fc92004-04-06 11:59:00 +00001490 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1491 AC_CHECK_HEADERS(sys/capability.h)
1492 fi
1493 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1494 AC_CHECK_LIB(cap, cap_init,
1495 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1496 LIBCAP="-lcap"
paulceacedb2005-09-29 14:39:32 +00001497 quagga_ac_lcaps="yes"]
hasso41d3fc92004-04-06 11:59:00 +00001498 )
paulceacedb2005-09-29 14:39:32 +00001499 else
1500 AC_CHECK_HEADERS(priv.h,
1501 [AC_MSG_CHECKING(Solaris style privileges are available)
1502 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1503 [AC_MSG_RESULT(yes)
1504 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1505 quagga_ac_scaps="yes"],
1506 AC_MSG_RESULT(no)
1507 )
1508 ]
1509 )
1510 fi
1511 if test x"${quagga_ac_scaps}" = x"yes" \
1512 -o x"${quagga_ac_lcaps}" = x"yes"; then
1513 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
hasso41d3fc92004-04-06 11:59:00 +00001514 fi
pauledd7c242003-06-04 13:59:38 +00001515fi
1516AC_SUBST(LIBCAP)
1517
Doug VanLeuven327c4cd2012-12-14 14:58:30 +02001518dnl ---------------------------------------------------------------------------
1519dnl http://www.gnu.org/software/autoconf-archive/ax_sys_weak_alias.html
1520dnl Check for and set one of the following = 1
1521dnl HAVE_SYS_WEAK_ALIAS_ATTRIBUTE
1522dnl HAVE_SYS_WEAK_ALIAS_PRAGMA
1523dnl HAVE_SYS_WEAK_ALIAS_HPSECONDARY
1524dnl HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE
1525dnl If any scheme is found, set
1526dnl HAVE_SYS_WEAK_ALIAS=1
1527dnl The following variable is set to text value
1528dnl WEAK_ALIAS = "attribute" || "pragma" || "hpsecondary" || "criduplicate" || "no"
1529dnl If weak alias can cross object file boundaries
1530dnl WEAK_ALIAS_CROSSFILE = "yes" || "no"
1531dnl ---------------------------------------------------------------------------
1532AX_SYS_WEAK_ALIAS
1533
paulfb2d1502003-06-04 09:40:54 +00001534dnl ---------------------------
1535dnl check for glibc 'backtrace'
1536dnl ---------------------------
David Lamparter8c99b4c2013-08-01 07:43:36 +00001537if test x"${enable_backtrace}" != x"no" ; then
1538 backtrace_ok=no
1539 AC_CHECK_HEADER([execinfo.h], [
1540 AC_SEARCH_LIBS([backtrace], [execinfo], [
1541 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1542 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1543 backtrace_ok=yes
1544 ],, [-lm])
Dmitrij Tejblumeda35292011-09-15 20:00:33 +04001545 ])
David Lamparter8c99b4c2013-08-01 07:43:36 +00001546
1547 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1548 dnl user explicitly requested backtrace but we failed to find support
1549 AC_MSG_FAILURE([failed to find backtrace support])
1550 fi
1551fi
paulfb2d1502003-06-04 09:40:54 +00001552
Paul Jakma41be32b2006-03-30 13:53:59 +00001553dnl -----------------------------------------
1554dnl check for malloc mallinfo struct and call
1555dnl this must try and link using LIBS, in
1556dnl order to check no alternative allocator
1557dnl has been specified, which might not provide
1558dnl mallinfo, e.g. such as Umem on Solaris.
1559dnl -----------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001560AC_CHECK_HEADER([malloc.h],
Paul Jakma41be32b2006-03-30 13:53:59 +00001561 [AC_MSG_CHECKING(whether mallinfo is available)
1562 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1563 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1564 [AC_MSG_RESULT(yes)
1565 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1566 AC_MSG_RESULT(no)
1567 )
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001568 ], [], QUAGGA_INCLUDES)
Paul Jakma41be32b2006-03-30 13:53:59 +00001569
paul408ad942003-05-20 00:03:33 +00001570dnl ----------
1571dnl configure date
1572dnl ----------
1573CONFDATE=`date '+%Y%m%d'`
1574AC_SUBST(CONFDATE)
1575
David Lamparterf281ab92013-02-26 16:21:20 +01001576dnl -------
1577dnl DejaGNU
1578dnl -------
1579if test x"$DEJAGNU" = x
1580then
1581 DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
1582fi
1583RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
1584
1585AC_SUBST(DEJAGNU)
1586AC_SUBST(RUNTESTDEFAULTFLAGS)
1587
paul7ea487b2003-03-17 02:05:07 +00001588dnl ------------------------------
paula159ed92003-06-04 11:01:45 +00001589dnl set paths for state directory
paul23bd12c2003-04-07 06:11:09 +00001590dnl ------------------------------
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001591AC_MSG_CHECKING(directory to use for state file)
paul23bd12c2003-04-07 06:11:09 +00001592if test "${prefix}" = "NONE"; then
paule8f29842003-08-12 13:08:31 +00001593 quagga_statedir_prefix="";
paul23bd12c2003-04-07 06:11:09 +00001594else
paule8f29842003-08-12 13:08:31 +00001595 quagga_statedir_prefix=${prefix}
paul23bd12c2003-04-07 06:11:09 +00001596fi
1597if test "${localstatedir}" = '${prefix}/var'; then
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001598 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
paule8f29842003-08-12 13:08:31 +00001599 ${quagga_statedir_prefix}/var/adm dnl
1600 ${quagga_statedir_prefix}/etc dnl
paula159ed92003-06-04 11:01:45 +00001601 /var/run dnl
1602 /var/adm dnl
1603 /etc dnl
1604 /dev/null;
paul23bd12c2003-04-07 06:11:09 +00001605 do
paule8f29842003-08-12 13:08:31 +00001606 test -d $QUAGGA_STATE_DIR && break
paul23bd12c2003-04-07 06:11:09 +00001607 done
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001608 quagga_statedir=$QUAGGA_STATE_DIR
paul23bd12c2003-04-07 06:11:09 +00001609else
paule8f29842003-08-12 13:08:31 +00001610 quagga_statedir=${localstatedir}
paul23bd12c2003-04-07 06:11:09 +00001611fi
paule8f29842003-08-12 13:08:31 +00001612if test $quagga_statedir = "/dev/null"; then
paula159ed92003-06-04 11:01:45 +00001613 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1614fi
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001615AC_MSG_RESULT(${quagga_statedir})
1616AC_SUBST(quagga_statedir)
paula159ed92003-06-04 11:01:45 +00001617
paule8f29842003-08-12 13:08:31 +00001618AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1619AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1620AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1621AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1622AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1623AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
Timo Teräsdafa05e2017-01-19 17:27:01 +02001624AC_DEFINE_UNQUOTED(PATH_NHRPD_PID, "$quagga_statedir/nhrpd.pid",nhrpd PID)
jardin9e867fe2003-12-23 08:56:18 +00001625AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
Everton Marques871dbcf2009-08-11 15:43:05 -03001626AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$quagga_statedir/pimd.pid",pimd PID)
ajsd0199432004-12-22 14:03:52 +00001627AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
paule8f29842003-08-12 13:08:31 +00001628AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1629AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1630AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1631AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1632AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1633AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1634AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
Timo Teräsdafa05e2017-01-19 17:27:01 +02001635AC_DEFINE_UNQUOTED(NHRP_VTYSH_PATH, "$quagga_statedir/nhrpd.vty",nhrpd vty socket)
jardin9e867fe2003-12-23 08:56:18 +00001636AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
Everton Marques871dbcf2009-08-11 15:43:05 -03001637AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$quagga_statedir/pimd.vty",pimd vty socket)
ajs515210b2004-12-22 15:35:12 +00001638AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
paul7ea487b2003-03-17 02:05:07 +00001639
paul1eb8ef22005-04-07 07:30:20 +00001640dnl -------------------------------
1641dnl Quagga sources should always be
1642dnl current wrt interfaces. Dont
1643dnl allow deprecated interfaces to
1644dnl be exposed.
1645dnl -------------------------------
1646AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1647
paul7ea487b2003-03-17 02:05:07 +00001648dnl ---------------------------
1649dnl Check htonl works correctly
1650dnl ---------------------------
1651AC_MSG_CHECKING(for working htonl)
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001652AC_CACHE_VAL(ac_cv_htonl_works,
1653 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1654 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1655 ]
1656)
paul7ea487b2003-03-17 02:05:07 +00001657AC_MSG_RESULT($ac_cv_htonl_works)
1658
Avneesh Sachdev07e5b642016-04-04 10:54:55 -07001659AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
ajsd0199432004-12-22 14:03:52 +00001660 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
Paul Jakma336724d2015-05-11 15:13:31 +01001661 ospf6d/Makefile isisd/Makefile vtysh/Makefile
David Lamparterf281ab92013-02-26 16:21:20 +01001662 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
Timo Teräsdafa05e2017-01-19 17:27:01 +02001663 pimd/Makefile nhrpd/Makefile
David Lamparter5bb7e4d2013-02-26 17:53:30 +01001664 tests/bgpd.tests/Makefile
David Lamparterc69905b2013-01-24 01:39:14 +01001665 tests/libzebra.tests/Makefile
David Lamparterf281ab92013-02-26 16:21:20 +01001666 redhat/Makefile
gdt69f1fc22004-08-27 15:57:35 +00001667 pkgsrc/Makefile
Avneesh Sachdevef20ef72016-04-04 10:54:57 -07001668 fpm/Makefile
paul670bbf12004-11-12 09:05:00 +00001669 redhat/quagga.spec
gdtb7a97f82004-07-23 16:23:56 +00001670 lib/version.h
hassof695b012005-04-02 19:03:39 +00001671 isisd/topology/Makefile
gdtcbd04082004-08-31 18:16:36 +00001672 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
paulf31293a2004-11-12 09:27:04 +00001673 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
paul26275b02005-04-11 07:10:47 +00001674AC_CONFIG_FILES([solaris/Makefile])
1675
paul670bbf12004-11-12 09:05:00 +00001676AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
hasso48577192004-11-19 06:41:49 +00001677## Hack, but working solution to avoid rebuilding of quagga.info.
1678## It's already in CVS until texinfo 4.7 is more common.
paul14c17fd2004-11-07 22:34:23 +00001679AC_OUTPUT
paul7ea487b2003-03-17 02:05:07 +00001680
1681echo "
hassoc89f6492004-08-26 12:21:28 +00001682Quagga configuration
1683--------------------
1684quagga version : ${PACKAGE_VERSION}
Joachim Nilsson1080c132012-05-30 08:15:48 +02001685host operating system : ${host_os}
paul7ea487b2003-03-17 02:05:07 +00001686source code location : ${srcdir}
1687compiler : ${CC}
1688compiler flags : ${CFLAGS}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001689make : ${MAKE-make}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001690linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
paule8f29842003-08-12 13:08:31 +00001691state file directory : ${quagga_statedir}
pauldc7a2bf2003-10-22 00:07:44 +00001692config file directory : `eval echo \`echo ${sysconfdir}\``
gdtd6b72f72003-12-03 17:24:27 +00001693example directory : `eval echo \`echo ${exampledir}\``
paul8d4aee52003-06-06 00:30:35 +00001694user to run as : ${enable_user}
1695group to run as : ${enable_group}
1696group for vty sockets : ${enable_vty_group}
gdtaa593d52003-12-22 20:15:53 +00001697config file mask : ${enable_configfile_mask}
1698log file mask : ${enable_logfile_mask}
Avneesh Sachdev07e5b642016-04-04 10:54:55 -07001699zebra protobuf enabled : ${have_protobuf:-no}
pauldc7a2bf2003-10-22 00:07:44 +00001700
1701The above user and group must have read/write access to the state file
Paul Jakma105b8232006-05-28 08:02:41 +00001702directory and to the config files in the config file directory."
1703
1704if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1705Warning: The ${MAKE-make} programme detected, either in your path or
1706via the MAKE variable, is not GNU Make. GNU make may be installed as
1707gmake on some systems. and is required to complete a build of Quagga
1708" > /dev/stderr
1709fi