blob: 402c89135c2d95d4f34e2c7451ec3c543d7fc5d4 [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
paul6a4b8832005-11-26 08:28:00 +0000158AC_MSG_CHECKING([whether to set a default CFLAGS])
159if test "x${cflags_specified}" = "x" ; then
160 case ${COMPILER} in
paul6a4b8832005-11-26 08:28:00 +0000161 "SUNPRO")
David Lamparter3a7e83c2015-03-03 09:55:51 +0100162 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
163 AC_MSG_RESULT([SunPro default])
164 ;;
paul6a4b8832005-11-26 08:28:00 +0000165 *)
David Lamparter3a7e83c2015-03-03 09:55:51 +0100166 AC_MSG_RESULT([autodetecting])
167
168 AC_C_FLAG([-diag-error 10006])
David Lamparter3a7e83c2015-03-03 09:55:51 +0100169 AC_C_FLAG([-g])
170 AC_C_FLAG([-Os], [
171 AC_C_FLAG([-O2])
172 ])
Paul Jakmaf25b7312017-03-07 10:36:14 +0000173 dnl fstack-protector-strong gives __stack_chk_fail_local
174 dnl being an 'Undefined symbol' on OpenIndiana hipster, with gcc 6.
175 dnl gcc -shared is being used to do the link, however the error is
176 dnl from ld. Disable. An issue with libtool < 2.4.6 dropping the
177 dnl -fstack-protector-strong argument from the shared link.
178 AC_MSG_CHECKING([whether libtool can support fstack-protector])
179 if test x"$(./libtool --version \
180 | awk -F '[[ \t.]]' \
181 'NR == 1 { \
182 if ($(NF-2) <= 2 && $(NF-1) <= 4 && $NF < 6) \
183 print 0; \
184 else print 1 \
185 }')" = "x1" ; then
186 AC_MSG_RESULT([yes])
187 AC_C_FLAG([-fstack-protector-strong])
188 else
189 AC_MSG_RESULT([no])
190 AC_MSG_WARN([upgrade to libtool >= 2.4.6!])
191 fi
Paul Jakma52c0bc72015-08-20 21:30:17 +0100192 AC_C_FLAG([-fpie])
David Lamparter3a7e83c2015-03-03 09:55:51 +0100193 AC_C_FLAG([-fno-omit-frame-pointer])
194 AC_C_FLAG([-Wall])
195 AC_C_FLAG([-Wextra])
196 AC_C_FLAG([-Wmissing-prototypes])
197 AC_C_FLAG([-Wmissing-declarations])
198 AC_C_FLAG([-Wpointer-arith])
199 AC_C_FLAG([-Wbad-function-cast])
200 AC_C_FLAG([-Wwrite-strings])
201 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
202 AC_C_FLAG([-Wcast-qual])
203 AC_C_FLAG([-Wstrict-prototypes])
204 AC_C_FLAG([-Wmissing-noreturn])
205 AC_C_FLAG([-Wmissing-format-attribute])
206 AC_C_FLAG([-Wunreachable-code])
207 AC_C_FLAG([-Wpacked])
208 AC_C_FLAG([-Wpadded])
209 else
210 AC_C_FLAG([-Wno-unused-result])
211 fi
212 AC_C_FLAG([-Wno-unused-parameter])
213 AC_C_FLAG([-Wno-missing-field-initializers])
214 # ICC emits a broken warning for const char *x = a ? "b" : "c";
215 # for some reason the string consts get 'promoted' to char *,
216 # triggering a const to non-const conversion warning.
217 AC_C_FLAG([-diag-disable 3179])
paul6a4b8832005-11-26 08:28:00 +0000218 ;;
219 esac
220else
221 AC_MSG_RESULT([CFLAGS supplied by user])
hasso1969e4b2005-03-27 13:07:23 +0000222fi
223
David Lamparterc0bedeb2015-03-03 10:00:43 +0100224if test x"${enable_werror}" = x"yes" ; then
225 WERROR="-Werror"
226fi
227AC_SUBST(WERROR)
228
paul7ea487b2003-03-17 02:05:07 +0000229dnl --------------
230dnl Check programs
231dnl --------------
paul7ea487b2003-03-17 02:05:07 +0000232AC_PROG_INSTALL
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000233AC_PROG_LN_S
paul7ea487b2003-03-17 02:05:07 +0000234AC_PROG_MAKE_SET
235AC_CHECK_TOOL(AR, ar)
paul7ea487b2003-03-17 02:05:07 +0000236
Paul Jakma105b8232006-05-28 08:02:41 +0000237dnl ---------------------------
238dnl We, perhaps unfortunately,
239dnl depend on GNU Make specific
240dnl constructs.
241dnl Give the user a warning if
242dnl not GNU Make.
243dnl ---------------------------
244AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
245 [quagga_cv_gnu_make=no
246 if ${MAKE-make} --version 2>/dev/null | \
247 grep '^GNU Make ' >/dev/null ; then
248 quagga_cv_gnu_make=yes;
249 fi
250 ]
251)
252
Paul Jakmad46d2a22007-05-10 16:53:04 +0000253dnl -----------------
254dnl System extensions
255dnl -----------------
Paul Jakmad46d2a22007-05-10 16:53:04 +0000256AC_GNU_SOURCE
paul7ea487b2003-03-17 02:05:07 +0000257
gdt87efd642004-06-30 17:36:11 +0000258
paul7ea487b2003-03-17 02:05:07 +0000259dnl ----------------------
260dnl Packages configuration
261dnl ----------------------
Joachim Nilsson1080c132012-05-30 08:15:48 +0200262AC_ARG_WITH(pkg-extra-version,
263 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
264 [EXTRAVERSION=$withval],)
David Lamparter0be793e2012-11-27 01:34:56 +0000265AC_ARG_WITH(pkg-git-version,
266 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
David Lampartera16dcf72012-12-13 11:20:50 +0100267 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
paul7ea487b2003-03-17 02:05:07 +0000268AC_ARG_ENABLE(vtysh,
Donald Sharpe6756782015-07-16 21:18:34 -0400269 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for Quagga]))
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +0100270AC_ARG_ENABLE(doc,
David Lamparterb6fa7602014-06-28 22:15:59 +0200271 AS_HELP_STRING([--disable-doc], [do not build docs]))
paul7ea487b2003-03-17 02:05:07 +0000272AC_ARG_ENABLE(zebra,
David Lamparterb6fa7602014-06-28 22:15:59 +0200273 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
paul7ea487b2003-03-17 02:05:07 +0000274AC_ARG_ENABLE(bgpd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200275 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
paul7ea487b2003-03-17 02:05:07 +0000276AC_ARG_ENABLE(ripd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200277 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
paul7ea487b2003-03-17 02:05:07 +0000278AC_ARG_ENABLE(ripngd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200279 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
paul7ea487b2003-03-17 02:05:07 +0000280AC_ARG_ENABLE(ospfd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200281 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
paul7ea487b2003-03-17 02:05:07 +0000282AC_ARG_ENABLE(ospf6d,
David Lamparterb6fa7602014-06-28 22:15:59 +0200283 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
Timo Teräsdafa05e2017-01-19 17:27:01 +0200284AC_ARG_ENABLE(nhrpd,
285 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
ajsd0199432004-12-22 14:03:52 +0000286AC_ARG_ENABLE(watchquagga,
David Lamparterb6fa7602014-06-28 22:15:59 +0200287 AS_HELP_STRING([--disable-watchquagga], [do not build watchquagga]))
jardin9e867fe2003-12-23 08:56:18 +0000288AC_ARG_ENABLE(isisd,
David Lamparter656a2c02015-02-09 11:36:10 +0100289 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
Everton Marques871dbcf2009-08-11 15:43:05 -0300290AC_ARG_ENABLE(pimd,
Donald Sharpe6756782015-07-16 21:18:34 -0400291 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
paul7ea487b2003-03-17 02:05:07 +0000292AC_ARG_ENABLE(bgp-announce,
David Lamparterb6fa7602014-06-28 22:15:59 +0200293 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
paul7ea487b2003-03-17 02:05:07 +0000294AC_ARG_ENABLE(snmp,
David Lamparterb6fa7602014-06-28 22:15:59 +0200295 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
paul7ea487b2003-03-17 02:05:07 +0000296AC_ARG_WITH(libpam,
David Lamparterb6fa7602014-06-28 22:15:59 +0200297 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
hasso71c0fb52003-05-25 20:18:13 +0000298AC_ARG_ENABLE(tcp-zebra,
David Lamparterb6fa7602014-06-28 22:15:59 +0200299 AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
paul1ef74ef2003-03-21 15:16:05 +0000300AC_ARG_ENABLE(ospfapi,
David Lamparterb6fa7602014-06-28 22:15:59 +0200301 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
paul1ef74ef2003-03-21 15:16:05 +0000302AC_ARG_ENABLE(ospfclient,
David Lamparterb6fa7602014-06-28 22:15:59 +0200303 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
304 (this is the default if --disable-ospfapi is set)]))
paul7ea487b2003-03-17 02:05:07 +0000305AC_ARG_ENABLE(multipath,
David Lamparterb6fa7602014-06-28 22:15:59 +0200306 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
Paul P Komkoff Jrfe86b482008-08-13 16:56:05 +0100307AC_ARG_ENABLE(user,
David Lamparterb6fa7602014-06-28 22:15:59 +0200308 AS_HELP_STRING([--enable-user=USER], [user to run Quagga suite as (default quagga)]))
Paul P Komkoff Jrfe86b482008-08-13 16:56:05 +0100309AC_ARG_ENABLE(group,
David Lamparterb6fa7602014-06-28 22:15:59 +0200310 AS_HELP_STRING([--enable-group=GROUP], [group to run Quagga suite as (default quagga)]))
pauledd7c242003-06-04 13:59:38 +0000311AC_ARG_ENABLE(vty_group,
David Lamparterb6fa7602014-06-28 22:15:59 +0200312 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
gdtaa593d52003-12-22 20:15:53 +0000313AC_ARG_ENABLE(configfile_mask,
David Lamparterb6fa7602014-06-28 22:15:59 +0200314 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
gdtaa593d52003-12-22 20:15:53 +0000315AC_ARG_ENABLE(logfile_mask,
David Lamparterb6fa7602014-06-28 22:15:59 +0200316 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
pauledd7c242003-06-04 13:59:38 +0000317
hasso71c0fb52003-05-25 20:18:13 +0000318AC_ARG_ENABLE(rtadv,
David Lamparterb6fa7602014-06-28 22:15:59 +0200319 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
hassoca776982004-06-12 14:33:05 +0000320AC_ARG_ENABLE(irdp,
David Lamparterb6fa7602014-06-28 22:15:59 +0200321 AS_HELP_STRING([--enable-irdp], [enable IRDP server support in zebra]))
hassof695b012005-04-02 19:03:39 +0000322AC_ARG_ENABLE(isis_topology,
David Lamparterb6fa7602014-06-28 22:15:59 +0200323 AS_HELP_STRING([--enable-isis-topology], [enable IS-IS topology generator]))
hasso41d3fc92004-04-06 11:59:00 +0000324AC_ARG_ENABLE(capabilities,
David Lamparterb6fa7602014-06-28 22:15:59 +0200325 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
Stephen Hemminger47f6aef2013-01-04 22:29:22 +0000326AC_ARG_ENABLE(rusage,
David Lamparterb6fa7602014-06-28 22:15:59 +0200327 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
paul6b6942f2004-10-22 04:55:05 +0000328AC_ARG_ENABLE(gcc_ultra_verbose,
David Lamparterb6fa7602014-06-28 22:15:59 +0200329 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
Paul Jakma3453a712009-06-12 14:21:02 +0100330AC_ARG_ENABLE(linux24_tcp_md5,
David Lamparterb6fa7602014-06-28 22:15:59 +0200331 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
ajs3cade262004-12-29 17:50:22 +0000332AC_ARG_ENABLE(gcc-rdynamic,
David Lamparterb6fa7602014-06-28 22:15:59 +0200333 AS_HELP_STRING([--enable-gcc-rdynamic], [enable linking with -rdynamic for better backtraces (default if gcc)]))
David Lamparter8c99b4c2013-08-01 07:43:36 +0000334AC_ARG_ENABLE(backtrace,
David Lamparterb6fa7602014-06-28 22:15:59 +0200335 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
ajs924b9222005-04-16 17:11:24 +0000336AC_ARG_ENABLE(time-check,
David Lamparterb6fa7602014-06-28 22:15:59 +0200337 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
Jeremy Jackson25f45882009-01-12 16:06:12 -0500338AC_ARG_ENABLE(pcreposix,
David Lamparterb6fa7602014-06-28 22:15:59 +0200339 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000340AC_ARG_ENABLE(fpm,
David Lamparterb6fa7602014-06-28 22:15:59 +0200341 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
David Lamparterc0bedeb2015-03-03 10:00:43 +0100342AC_ARG_ENABLE(werror,
343 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
Avneesh Sachdev07e5b642016-04-04 10:54:55 -0700344AC_ARG_ENABLE([protobuf],
345 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
paul6b6942f2004-10-22 04:55:05 +0000346
Avneesh Sachdev7e4025c2016-03-11 12:21:24 -0800347AC_ARG_ENABLE([dev_build],
348 AS_HELP_STRING([--enable-dev-build], [build for development]))
349
David Lamparter8c99b4c2013-08-01 07:43:36 +0000350if test x"${enable_gcc_rdynamic}" != x"no" ; then
351 if test x"${enable_gcc_rdynamic}" = x"yes" -o x"$COMPILER" = x"GCC"; then
352 LDFLAGS="${LDFLAGS} -rdynamic"
353 fi
ajs3cade262004-12-29 17:50:22 +0000354fi
355
ajs924b9222005-04-16 17:11:24 +0000356if test x"${enable_time_check}" != x"no" ; then
357 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
358 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
359 else
360 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
361 fi
362fi
363
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000364if test "${enable_fpm}" = "yes"; then
365 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
366fi
367
Avneesh Sachdev7e4025c2016-03-11 12:21:24 -0800368if test "x${enable_dev_build}" = "xyes"; then
369 AC_DEFINE(DEV_BUILD,,Build for development)
370fi
371AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
372
Avneesh Sachdev07e5b642016-04-04 10:54:55 -0700373#
374# Logic for protobuf support.
375#
376if test "$enable_protobuf" = "yes"; then
377 have_protobuf=yes
378
379 # Check for protoc-c
380 AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
381 if test "x$PROTOC_C" = "x/bin/false"; then
382 have_protobuf=no
383 else
384 found_protobuf_c=no
385 PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
386 [found_protobuf_c=yes],
387 [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
388
389 if test "x$found_protobuf_c" = "xyes"; then
390 LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
391 CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
392 else
393 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
394 [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
395 fi
396 fi
397fi
398
399# Fail if the user explicity enabled protobuf support and we couldn't
400# find the compiler or libraries.
401if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
402 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
403fi
404
405if test "x$have_protobuf" = "xyes"; then
406 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
407fi
408
409AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
410
411#
412# End of logic for protobuf support.
413#
414
paul7ea487b2003-03-17 02:05:07 +0000415if test "${enable_tcp_zebra}" = "yes"; then
416 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
417fi
418
Paul Jakma3453a712009-06-12 14:21:02 +0100419if test "${enable_linux24_tcp_md5}" = "yes"; then
420 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
421fi
422
gdtd2a0ccc2003-12-03 18:13:48 +0000423AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
424if test "${enable_rtadv}" != "no"; then
hasso71c0fb52003-05-25 20:18:13 +0000425 AC_MSG_RESULT(yes)
gdtd2a0ccc2003-12-03 18:13:48 +0000426 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
paul2487bea2003-05-25 23:51:31 +0000427else
428 AC_MSG_RESULT(no)
hasso71c0fb52003-05-25 20:18:13 +0000429fi
paul7ea487b2003-03-17 02:05:07 +0000430
hassoca776982004-06-12 14:33:05 +0000431if test "${enable_irdp}" = "yes"; then
432 AC_DEFINE(HAVE_IRDP,, IRDP )
433fi
434
David Lamparter656a2c02015-02-09 11:36:10 +0100435if test "${enable_isisd}" != "no" && test "${enable_isis_topology}" = yes; then
hassof695b012005-04-02 19:03:39 +0000436 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
David Lamparteree1ac2d2012-07-19 12:58:59 +0200437 ISIS_TOPOLOGY_INCLUDES="-I\$(srcdir)/topology"
hassof695b012005-04-02 19:03:39 +0000438 ISIS_TOPOLOGY_DIR="topology"
439 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
440fi
441
442AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
443AC_SUBST(ISIS_TOPOLOGY_DIR)
444AC_SUBST(ISIS_TOPOLOGY_LIB)
445
Jafar Al-Gharaibeha8f97902016-07-28 14:41:20 -0500446if test x"${enable_user}" = x"no"; then
447 enable_user=""
448else
449 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
450 enable_user="quagga"
451 fi
452 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
pauledd7c242003-06-04 13:59:38 +0000453fi
pauledd7c242003-06-04 13:59:38 +0000454
Jafar Al-Gharaibeha8f97902016-07-28 14:41:20 -0500455if test x"${enable_group}" = x"no"; then
456 enable_group=""
457else
458 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
459 enable_group="quagga"
460 fi
461 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
pauledd7c242003-06-04 13:59:38 +0000462fi
pauledd7c242003-06-04 13:59:38 +0000463
464if test x"${enable_vty_group}" = x"yes" ; then
paul8d4aee52003-06-06 00:30:35 +0000465 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
paul79cb2162003-06-06 12:19:53 +0000466elif test x"${enable_vty_group}" != x""; then
paul8d4aee52003-06-06 00:30:35 +0000467 if test x"${enable_vty_group}" != x"no"; then
pauledd7c242003-06-04 13:59:38 +0000468 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
469 fi
470fi
paul26275b02005-04-11 07:10:47 +0000471AC_SUBST([enable_user])
472AC_SUBST([enable_group])
473AC_SUBST([enable_vty_group])
pauledd7c242003-06-04 13:59:38 +0000474
gdtaa593d52003-12-22 20:15:53 +0000475enable_configfile_mask=${enable_configfile_mask:-0600}
476AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
477
478enable_logfile_mask=${enable_logfile_mask:-0600}
479AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
480
Donald Sharpd1839632015-12-09 08:24:44 -0500481MPATH_NUM=1
paul7ea487b2003-03-17 02:05:07 +0000482
483case "${enable_multipath}" in
Donald Sharpd1839632015-12-09 08:24:44 -0500484 0)
485 MPATH_NUM=64
486 ;;
487 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
488 MPATH_NUM="${enable_multipath}"
paul7ea487b2003-03-17 02:05:07 +0000489 ;;
490 "")
491 ;;
492 *)
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000493 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
paul7ea487b2003-03-17 02:05:07 +0000494 ;;
495esac
496
Donald Sharpd1839632015-12-09 08:24:44 -0500497AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
paul7ea487b2003-03-17 02:05:07 +0000498
Joachim Nilsson1080c132012-05-30 08:15:48 +0200499dnl -----------------------------------
500dnl Add extra version string to package
501dnl name, string and version fields.
502dnl -----------------------------------
503if test "x${EXTRAVERSION}" != "x" ; then
David Lamparter0be793e2012-11-27 01:34:56 +0000504 VERSION="${VERSION}${EXTRAVERSION}"
505 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
506 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
Joachim Nilsson1080c132012-05-30 08:15:48 +0200507fi
508
David Lampartera16dcf72012-12-13 11:20:50 +0100509if test "x$with_pkg_git_version" = "xyes"; then
510 if test -d "${srcdir}/.git"; then
511 AC_DEFINE(GIT_VERSION, [1], [include git version info])
512 else with_pkg_git_version="no"
513 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
514 fi
515fi
516AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
David Lamparter0be793e2012-11-27 01:34:56 +0000517
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000518dnl ------------------------------------
519dnl Check C keywords and standard types
520dnl ------------------------------------
521AC_C_CONST
522AC_C_INLINE
523AC_C_RESTRICT
524AC_C_VOLATILE
pauldc7a2bf2003-10-22 00:07:44 +0000525AC_HEADER_STDC
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000526AC_HEADER_TIME
527AC_HEADER_SYS_WAIT
Paul Jakmae8441a82015-09-15 16:15:27 +0100528AC_HEADER_STDBOOL
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000529dnl AC_TYPE_PID_T
530AC_TYPE_UID_T
531AC_TYPE_MODE_T
532AC_TYPE_SIZE_T
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000533AC_STRUCT_TM
pauldc7a2bf2003-10-22 00:07:44 +0000534
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000535dnl -------------------------
536dnl Check other header files.
537dnl -------------------------
538AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
539 sys/types.h linux/version.h netdb.h asm/types.h \
Timo Teräs16ffb262014-07-29 09:41:54 +0000540 sys/cdefs.h sys/param.h limits.h signal.h \
Paul Jakma7e49a4f2016-08-02 13:36:03 +0100541 sys/socket.h netinet/in.h time.h sys/time.h features.h])
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000542
543dnl Utility macro to avoid retyping includes all the time
544m4_define([QUAGGA_INCLUDES],
545[#ifdef SUNOS_5
546#define _XPG4_2
547#define __EXTENSIONS__
548#endif
549#include <stdio.h>
550#if STDC_HEADERS
551# include <stdlib.h>
552# include <stddef.h>
553#else
554# if HAVE_STDLIB_H
555# include <stdlib.h>
556# endif
557#endif
558#if HAVE_SYS_TYPES_H
559# include <sys/types.h>
560#endif
561/* sys/conf.h depends on param.h on FBSD at least */
562#if HAVE_SYS_PARAM_H
563# include <sys/param.h>
564#endif
565/* Required for MAXSIG */
566#if HAVE_SIGNAL_H
567# include <signal.h>
568#endif
569#if HAVE_SYS_SOCKET_H
570# include <sys/socket.h>
571#endif
Hasso Tepperea057672013-01-13 17:45:29 +0000572#ifdef __APPLE__
573# define __APPLE_USE_RFC_3542
574#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000575#if HAVE_NETINET_IN_H
576# include <netinet/in.h>
577#endif
Paul Jakma6511cab2009-06-18 17:38:01 +0100578#ifdef TIME_WITH_SYS_TIME
579# include <sys/time.h>
580# include <time.h>
581#else
582# ifdef HAVE_SYS_TIME_H
583# include <sys/time.h>
584# else
585# include <time.h>
586# endif
587#endif /* TIME_WITH_SYS_TIME */
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000588])dnl
589
Denis Ovsienko2b43bf22011-07-14 16:30:08 +0400590dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
591dnl round below execution begins, otherwise it doesn't properly detect
592dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
593dnl on FreeBSD (BZ#408).
594
595AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
596
597m4_define([QUAGGA_INCLUDES],
598QUAGGA_INCLUDES
599[#if HAVE_NET_IF_H
600# include <net/if.h>
601#endif
602])dnl
603
604dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
605dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
606dnl an additional round for it.
607
608AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
609
610m4_define([QUAGGA_INCLUDES],
611QUAGGA_INCLUDES
612[#if HAVE_NET_IF_VAR_H
613# include <net/if_var.h>
614#endif
615])dnl
616
617AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
618 net/if_dl.h net/netopt.h net/route.h \
Paul Jakma11770e12007-06-22 16:14:42 +0000619 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000620 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
621 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
622 [], [], QUAGGA_INCLUDES)
623
624AC_CHECK_HEADERS([ucontext.h], [], [],
625[#ifndef __USE_GNU
626#define __USE_GNU
627#endif /* __USE_GNU */
628QUAGGA_INCLUDES
629])
630
Joakim Tjernlundb166ea22009-06-25 16:40:06 +0100631m4_define([UCONTEXT_INCLUDES],
632[#include <ucontext.h>])dnl
633
634AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
635 [], [], [UCONTEXT_INCLUDES])
636AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
637 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
638 [], [], [UCONTEXT_INCLUDES])],
639 [], [UCONTEXT_INCLUDES])
640AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
641 [], [], [UCONTEXT_INCLUDES])
642
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000643m4_define([QUAGGA_INCLUDES],
644QUAGGA_INCLUDES
Denis Ovsienko2b43bf22011-07-14 16:30:08 +0400645[#if HAVE_SYS_UN_H
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000646# include <sys/un.h>
647#endif
648#if HAVE_NETINET_IN_SYSTM_H
649# include <netinet/in_systm.h>
650#endif
651#if HAVE_NETINET_IN_VAR_H
652# include <netinet/in_var.h>
653#endif
654#if HAVE_NET_IF_DL_H
655# include <net/if_dl.h>
656#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000657#if HAVE_NET_NETOPT_H
658# include <net/netopt.h>
659#endif
660#if HAVE_NET_ROUTE_H
661# include <net/route.h>
662#endif
663#if HAVE_INET_ND_H
664# include <inet/nd.h>
665#endif
666#if HAVE_ARPA_INET_H
667# include <arpa/inet.h>
668#endif
Paul Jakma11770e12007-06-22 16:14:42 +0000669/* Required for IDRP */
670#if HAVE_NETINET_IP_ICMP_H
671# include <netinet/ip_icmp.h>
672#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000673])dnl
pauldc7a2bf2003-10-22 00:07:44 +0000674
gdtfa3232e2003-12-03 17:52:30 +0000675dnl V6 headers are checked below, after we check for v6
paul7ea487b2003-03-17 02:05:07 +0000676
paul7ea487b2003-03-17 02:05:07 +0000677dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
678case "$host" in
paulafd8a122005-03-12 06:36:10 +0000679 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
paul7ea487b2003-03-17 02:05:07 +0000680 opsys=sol2-6
paulafd8a122005-03-12 06:36:10 +0000681 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
paul19877dd2004-05-11 10:49:35 +0000682 AC_DEFINE(SUNOS_5, 1, SunOS 5)
paul7ea487b2003-03-17 02:05:07 +0000683 AC_CHECK_LIB(xnet, main)
684 CURSES=-lcurses
David Lampartere8d0d242014-06-28 22:07:41 +0200685 SOLARIS="solaris"
paul7ea487b2003-03-17 02:05:07 +0000686 ;;
paul1b73de82005-04-10 16:31:51 +0000687 [*-sunos5.[8-9]] \
688 | [*-sunos5.1[0-9]] \
689 | [*-sunos5.1[0-9].[0-9]] \
690 | [*-solaris2.[8-9]] \
691 | [*-solaris2.1[0-9]] \
692 | [*-solaris2.1[0-9].[0-9]])
paulafd8a122005-03-12 06:36:10 +0000693 opsys=sol8
Paul Jakmafb66b292006-05-28 08:26:15 +0000694 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
695 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
paul19877dd2004-05-11 10:49:35 +0000696 AC_CHECK_LIB(socket, main)
697 AC_CHECK_LIB(nsl, main)
paul1b73de82005-04-10 16:31:51 +0000698 AC_CHECK_LIB(umem, main)
Paul Jakmafb66b292006-05-28 08:26:15 +0000699 AC_CHECK_FUNCS([printstack],
700 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
701 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
702 ])
paul19877dd2004-05-11 10:49:35 +0000703 CURSES=-lcurses
David Lampartere8d0d242014-06-28 22:07:41 +0200704 SOLARIS="solaris"
paul19877dd2004-05-11 10:49:35 +0000705 ;;
paul7ea487b2003-03-17 02:05:07 +0000706 *-sunos5* | *-solaris2*)
paul19877dd2004-05-11 10:49:35 +0000707 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
paul7ea487b2003-03-17 02:05:07 +0000708 AC_CHECK_LIB(socket, main)
709 AC_CHECK_LIB(nsl, main)
710 CURSES=-lcurses
David Lampartere8d0d242014-06-28 22:07:41 +0200711 SOLARIS="solaris"
paul7ea487b2003-03-17 02:05:07 +0000712 ;;
hassoc45eb832005-02-19 13:58:06 +0000713 *-linux*)
paul7ea487b2003-03-17 02:05:07 +0000714 opsys=gnu-linux
715 AC_DEFINE(GNU_LINUX,,GNU Linux)
716 ;;
paul7ea487b2003-03-17 02:05:07 +0000717 *-openbsd*)
718 opsys=openbsd
719 AC_DEFINE(OPEN_BSD,,OpenBSD)
720 ;;
paul7ea487b2003-03-17 02:05:07 +0000721esac
722
Paul Jakma62c9f502009-07-19 17:33:21 +0100723AC_SYS_LARGEFILE
724
paul7ea487b2003-03-17 02:05:07 +0000725dnl ---------------------
726dnl Integrated VTY option
727dnl ---------------------
728case "${enable_vtysh}" in
Donald Sharpe6756782015-07-16 21:18:34 -0400729 "no") VTYSH="";;
730 *) VTYSH="vtysh";
paul7ea487b2003-03-17 02:05:07 +0000731 AC_DEFINE(VTYSH,,VTY shell)
gdtfc9d0742004-06-30 14:25:12 +0000732dnl Vtysh uses libreadline, which looks for termcap functions at
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000733dnl configure time. We follow readlines search order.
gdtfc9d0742004-06-30 14:25:12 +0000734dnl The required procedures are in libtermcap on NetBSD, in
735dnl [TODO] on Linux, and in [TODO] on Solaris.
hassoc0689392005-08-25 12:00:58 +0000736 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
paula9694592005-08-25 14:50:05 +0000737 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
738 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
739 [AC_CHECK_LIB(ncurses, tputs,
740 LIBREADLINE="$LIBREADLINE -lncurses")]
741 )]
742 )]
743 )
Thomas Petazzoni64f8c7d2016-08-21 09:23:04 +0300744 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
paula9694592005-08-25 14:50:05 +0000745 "$LIBREADLINE")
paul7ea487b2003-03-17 02:05:07 +0000746 if test $ac_cv_lib_readline_main = no; then
gdtfc9d0742004-06-30 14:25:12 +0000747 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
paul7ea487b2003-03-17 02:05:07 +0000748 fi
749 AC_CHECK_HEADER(readline/history.h)
750 if test $ac_cv_header_readline_history_h = no;then
751 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
752 fi
paula9694592005-08-25 14:50:05 +0000753 AC_CHECK_LIB(readline, rl_completion_matches,
754 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
paul3d3de8c2003-05-23 10:33:49 +0000755 if test $ac_cv_lib_readline_rl_completion_matches = no; then
756 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
757 fi
758 ;;
paul7ea487b2003-03-17 02:05:07 +0000759 "no" ) VTYSH="";;
paul7ea487b2003-03-17 02:05:07 +0000760esac
hassoc0689392005-08-25 12:00:58 +0000761AC_SUBST(LIBREADLINE)
David Wardf027d332012-04-30 11:36:15 -0400762AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
paul7ea487b2003-03-17 02:05:07 +0000763
764dnl ----------
765dnl PAM module
Denis Ovsienko61599282011-07-15 00:24:15 +0400766dnl
767dnl Quagga detects the PAM library it is built against by checking for a
768dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
769dnl is known to #include pam_appl.h, the standard header of a PAM library, and
770dnl openpam.h doesn't do that, although depends on the header too. Hence a
771dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
772dnl of OpenPAM.
paul7ea487b2003-03-17 02:05:07 +0000773dnl ----------
774if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000775 AC_CHECK_HEADER([security/pam_misc.h],
776 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
777 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
778 pam_conv_func="misc_conv"
779 ],
780 [], QUAGGA_INCLUDES)
781 AC_CHECK_HEADER([security/openpam.h],
782 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
783 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
784 pam_conv_func="openpam_ttyconv"
785 ],
Denis Ovsienko61599282011-07-15 00:24:15 +0400786 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
paul24cd4352003-05-06 12:16:27 +0000787 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
788 AC_MSG_WARN([*** pam support will not be built ***])
789 with_libpam="no"
790 fi
791fi
792
793if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000794dnl took this test from proftpds configure.in and suited to our needs
paul7ea487b2003-03-17 02:05:07 +0000795dnl -------------------------------------------------------------------------
796dnl
797dnl This next check looks funky due to a linker problem with some versions
798dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
799dnl omitted requiring libdl linking information. PAM-0.72 or better ships
800dnl with RedHat 6.2 and Debian 2.2 or better.
801AC_CHECK_LIB(pam, pam_start,
paul24cd4352003-05-06 12:16:27 +0000802 [AC_CHECK_LIB(pam, $pam_conv_func,
paul7ea487b2003-03-17 02:05:07 +0000803 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
804 LIBPAM="-lpam"],
805 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
806 LIBPAM="-lpam -lpam_misc"]
807 )
808 ],
809
810 [AC_CHECK_LIB(pam, pam_end,
paul24cd4352003-05-06 12:16:27 +0000811 [AC_CHECK_LIB(pam, $pam_conv_func,
paula159ed92003-06-04 11:01:45 +0000812 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000813 LIBPAM="-lpam -ldl"],
paula159ed92003-06-04 11:01:45 +0000814 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000815 LIBPAM="-lpam -ldl -lpam_misc"]
816 )
817 ],AC_MSG_WARN([*** pam support will not be built ***]),
818 [-ldl])
819 ]
820)
821fi
822AC_SUBST(LIBPAM)
823
824dnl -------------------------------
825dnl Endian-ness check
826dnl -------------------------------
827AC_WORDS_BIGENDIAN
828
829dnl -------------------------------
830dnl check the size in byte of the C
831dnl -------------------------------
832dnl AC_CHECK_SIZEOF(char)
833dnl AC_CHECK_SIZEOF(int)
834dnl AC_CHECK_SIZEOF(short)
835dnl AC_CHECK_SIZEOF(long)
836
837dnl ----------------------------
838dnl check existance of functions
839dnl ----------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000840AC_FUNC_CHOWN
841AC_FUNC_FNMATCH
842AC_FUNC_FORK
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000843AC_FUNC_MEMCMP
844AC_FUNC_MKTIME
845AC_FUNC_STRFTIME
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000846AC_FUNC_STAT
847AC_FUNC_SELECT_ARGTYPES
848AC_FUNC_STRFTIME
Paul Jakmad46d2a22007-05-10 16:53:04 +0000849dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
850dnl can lead to strange side effects. So we just check for strnlen
851dnl directly, see below.
Paul Jakma2b5cb412007-05-10 17:05:16 +0000852dnl AC_FUNC_STRNLENdnl
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000853AC_FUNC_VPRINTF
854
855dnl -------------------------------
856dnl bgpd needs pow() and hence libm
857dnl -------------------------------
858TMPLIBS="$LIBS"
859AC_CHECK_HEADER([math.h],
860 [AC_CHECK_LIB([m], [pow],
861 [LIBM="-lm"
862 LIBS="$LIBS $LIBM"
863 AC_DEFINE(HAVE_LIBM,, Have libm)
864 AC_CHECK_FUNCS(pow,[],[LIBM=""])
865 ])
866])
867if test x"$LIBM" = x ; then
868 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
869fi
870LIBS="$TMPLIBS"
871AC_SUBST(LIBM)
872
873dnl ---------------
874dnl other functions
875dnl ---------------
876AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
Paul Jakmad46d2a22007-05-10 16:53:04 +0000877 inet_ntoa inet_aton strnlen \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000878 memchr memmove memset select socket \
879 strcasecmp strchr strcspn strdup strerror \
880 strncasecmp strndup strrchr strspn strstr \
881 strtol strtoul strlcat strlcpy \
882 daemon snprintf vsnprintf \
883 if_nametoindex if_indextoname getifaddrs \
David Lamparter12bbd622015-09-15 02:26:44 -0700884 uname fcntl getgrouplist])
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000885
paul7ea487b2003-03-17 02:05:07 +0000886
Feng Lu55cfa2f2014-07-03 18:24:34 +0800887AC_CHECK_HEADER([asm-generic/unistd.h],
888 [AC_CHECK_DECL(__NR_setns,
889 AC_DEFINE(HAVE_NETNS,, Have netns),,
890 QUAGGA_INCLUDES [#include <asm-generic/unistd.h>
891 ])
892 AC_CHECK_FUNCS(setns, AC_DEFINE(HAVE_SETNS,, Have setns))]
893 )
894
paul7ea487b2003-03-17 02:05:07 +0000895dnl ------------------------------------
896dnl Determine routing get and set method
897dnl ------------------------------------
898AC_MSG_CHECKING(zebra between kernel interface method)
899if test x"$opsys" = x"gnu-linux"; then
David Lamparter2e5ca492014-06-28 20:54:31 +0200900 AC_MSG_RESULT(netlink)
901 RT_METHOD=rt_netlink.o
902 AC_DEFINE(HAVE_NETLINK,,netlink)
903 netlink=yes
paul7ea487b2003-03-17 02:05:07 +0000904else
David Lamparter39b233f2014-06-28 21:49:18 +0200905 AC_MSG_RESULT(Route socket)
906 KERNEL_METHOD="kernel_socket.o"
907 RT_METHOD="rt_socket.o"
paul7ea487b2003-03-17 02:05:07 +0000908fi
909AC_SUBST(RT_METHOD)
910AC_SUBST(KERNEL_METHOD)
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000911AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
paul7ea487b2003-03-17 02:05:07 +0000912
Paul Jakma238497f2007-08-07 18:49:18 +0000913dnl --------------------------
914dnl Determine IS-IS I/O method
915dnl --------------------------
David Lamparter745bf052010-02-02 21:49:35 +0100916AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
917AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
918AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
Paul Jakma238497f2007-08-07 18:49:18 +0000919AC_CHECK_HEADER(net/bpf.h)
920AC_CHECK_HEADER(sys/dlpi.h)
921AC_MSG_CHECKING(zebra IS-IS I/O method)
922if test x"$opsys" = x"gnu-linux"; then
923 AC_MSG_RESULT(pfpacket)
David Lamparter745bf052010-02-02 21:49:35 +0100924 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
Paul Jakma238497f2007-08-07 18:49:18 +0000925elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
926 AC_MSG_RESULT(DLPI)
David Lamparter745bf052010-02-02 21:49:35 +0100927 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
Paul Jakma238497f2007-08-07 18:49:18 +0000928else
929 if test $ac_cv_header_net_bpf_h = no; then
930 if test $ac_cv_header_sys_dlpi_h = no; then
931 AC_MSG_RESULT(none)
932 AC_MSG_WARN([*** IS-IS support will not be built ***])
933 ISISD=""
934 else
935 AC_MSG_RESULT(DLPI)
936 fi
David Lamparter745bf052010-02-02 21:49:35 +0100937 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
Paul Jakma238497f2007-08-07 18:49:18 +0000938 else
939 AC_MSG_RESULT(BPF)
David Lamparter745bf052010-02-02 21:49:35 +0100940 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
Paul Jakma238497f2007-08-07 18:49:18 +0000941 fi
942fi
David Lamparter745bf052010-02-02 21:49:35 +0100943AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
Paul Jakma238497f2007-08-07 18:49:18 +0000944
ajsb99760a2005-01-04 16:24:43 +0000945dnl ------------------------------------
946dnl check for broken CMSG_FIRSTHDR macro
947dnl ------------------------------------
gdt6c200462005-01-04 17:02:48 +0000948AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
hasso5b087522005-04-03 23:46:37 +0000949AC_RUN_IFELSE([AC_LANG_SOURCE([[
ajsb99760a2005-01-04 16:24:43 +0000950#ifdef SUNOS_5
951#define _XPG4_2
952#define __EXTENSIONS__
953#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000954#ifdef HAVE_STDLIB_H
955# include <stdlib.h>
956#endif
957#ifdef HAVE_SYS_TYPES_H
ajsb99760a2005-01-04 16:24:43 +0000958#include <sys/types.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000959#endif
960#ifdef HAVE_SYS_SOCKET_H
ajsb99760a2005-01-04 16:24:43 +0000961#include <sys/socket.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000962#endif
ajsb99760a2005-01-04 16:24:43 +0000963
964main()
965{
966 struct msghdr msg;
967 char buf[4];
968
969 msg.msg_control = buf;
970 msg.msg_controllen = 0;
971
972 if (CMSG_FIRSTHDR(&msg) != NULL)
973 exit(0);
974 exit (1);
hasso5b087522005-04-03 23:46:37 +0000975}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
hassod33e8d72005-04-03 13:07:21 +0000976[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
ajsb99760a2005-01-04 16:24:43 +0000977
paul7ea487b2003-03-17 02:05:07 +0000978dnl ------------------------------
979dnl check kernel route read method
980dnl ------------------------------
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500981AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
982[if test "x$netlink" = xyes; then
983 quagga_cv_rtread_method="netlink"
paul7ea487b2003-03-17 02:05:07 +0000984else
David Lamparter2e5ca492014-06-28 20:54:31 +0200985for quagga_cv_rtread_method in /dev/ip /dev/null;
paul7ea487b2003-03-17 02:05:07 +0000986do
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500987 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
paul7ea487b2003-03-17 02:05:07 +0000988done
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500989case $quagga_cv_rtread_method in
paul9c30ab62003-07-08 08:36:17 +0000990 "/dev/ip")
991 case "$host" in
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500992 *-freebsd*) quagga_cv_rtread_method="sysctl";;
993 *) quagga_cv_rtread_method="getmsg";;
paul9c30ab62003-07-08 08:36:17 +0000994 esac;;
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500995 *)
996 quagga_cv_rtread_method="sysctl";;
paul7ea487b2003-03-17 02:05:07 +0000997esac
998fi])
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500999RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
paul7ea487b2003-03-17 02:05:07 +00001000AC_SUBST(RTREAD_METHOD)
1001
1002dnl -----------------------------
1003dnl check interface lookup method
1004dnl -----------------------------
paul19877dd2004-05-11 10:49:35 +00001005IOCTL_METHOD=ioctl.o
paul7ea487b2003-03-17 02:05:07 +00001006AC_MSG_CHECKING(interface looking up method)
1007if test "$netlink" = yes; then
1008 AC_MSG_RESULT(netlink)
1009 IF_METHOD=if_netlink.o
paul19877dd2004-05-11 10:49:35 +00001010elif test "$opsys" = "sol2-6";then
1011 AC_MSG_RESULT(Solaris GIF)
1012 IF_METHOD=if_ioctl.o
paulafd8a122005-03-12 06:36:10 +00001013elif test "$opsys" = "sol8";then
paul19877dd2004-05-11 10:49:35 +00001014 AC_MSG_RESULT(Solaris GLIF)
1015 IF_METHOD=if_ioctl_solaris.o
1016 IOCTL_METHOD=ioctl_solaris.o
paul19877dd2004-05-11 10:49:35 +00001017elif test "$opsys" = "openbsd";then
1018 AC_MSG_RESULT(openbsd)
1019 IF_METHOD=if_ioctl.o
1020elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
1021 AC_MSG_RESULT(sysctl)
paul7ea487b2003-03-17 02:05:07 +00001022 IF_METHOD=if_sysctl.o
1023 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
paul19877dd2004-05-11 10:49:35 +00001024else
paul7ea487b2003-03-17 02:05:07 +00001025 AC_MSG_RESULT(ioctl)
1026 IF_METHOD=if_ioctl.o
paul7ea487b2003-03-17 02:05:07 +00001027fi
1028AC_SUBST(IF_METHOD)
paul19877dd2004-05-11 10:49:35 +00001029AC_SUBST(IOCTL_METHOD)
paul7ea487b2003-03-17 02:05:07 +00001030
paul42c98192005-05-07 02:22:51 +00001031dnl ---------------------------------------------------------------
1032dnl figure out how to specify an interface in multicast sockets API
1033dnl ---------------------------------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001034AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
paul42c98192005-05-07 02:22:51 +00001035
Donald Sharp1934e782015-06-05 12:15:44 -07001036AC_CHECK_HEADERS([linux/mroute.h], [], [],
1037[
1038#if HAVE_NETINET_IN_H
1039#include<netinet/in.h>
1040#endif])
paul42c98192005-05-07 02:22:51 +00001041AC_MSG_CHECKING([for BSD struct ip_mreq hack])
1042AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
1043#include <sys/param.h>
Brian Bennettb8a893c2015-02-17 22:32:22 +00001044#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 +00001045 return (0);
1046#else
1047 #error No support for BSD struct ip_mreq hack detected
1048#endif],[AC_MSG_RESULT(yes)
1049AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1050AC_MSG_RESULT(no))
1051
Dmitrij Tejblum10d04cd2011-08-22 11:39:35 +04001052AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1053AC_TRY_COMPILE([
1054#include <sys/types.h>
1055#include <netinet/in.h>
1056], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1057], [AC_MSG_RESULT(yes)
1058AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1059AC_MSG_RESULT(no))
1060
Andrew J. Schorrc543a172008-01-10 15:24:32 +00001061dnl ---------------------------------------------------------------
1062dnl figure out how to check link-state
1063dnl ---------------------------------------------------------------
Andrew J. Schorr6418bed2008-01-11 16:33:59 +00001064AC_CHECK_HEADER([net/if.h],
1065 [AC_CHECK_HEADER( [net/if_media.h],
1066 [m4_define([LINK_DETECT_INCLUDES],
1067 QUAGGA_INCLUDES
1068 [#include <net/if_media.h>
1069 ])
1070 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1071 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1072 [], LINK_DETECT_INCLUDES)],
1073 [],
1074 QUAGGA_INCLUDES)],
1075 [], QUAGGA_INCLUDES )
Andrew J. Schorrc543a172008-01-10 15:24:32 +00001076
Doug VanLeuven9234b382012-10-10 16:12:32 -07001077dnl ---------------------------------------------------------------
1078dnl Additional, newer way to check link-state using ifi_link_state.
1079dnl Not available in all BSD's when ifmediareq available
1080dnl ---------------------------------------------------------------
1081AC_CHECK_HEADER([net/if.h],
1082 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1083 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1084 [], QUAGGA_INCLUDES),
1085 ,)
1086
Paul Jakma0df7c912008-07-21 21:02:49 +00001087dnl ------------------------
1088dnl TCP_MD5SIG socket option
1089dnl ------------------------
1090
1091AC_CHECK_HEADER([netinet/tcp.h],
1092 [m4_define([MD5_INCLUDES],
1093 QUAGGA_INCLUDES
1094 [#include <netinet/tcp.h>
1095 ])
1096 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1097 [],
1098 QUAGGA_INCLUDES)
1099if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1100 AC_CHECK_HEADER([linux/tcp.h],
1101 [m4_define([MD5_INCLUDES],
1102 QUAGGA_INCLUDES
1103 [#include <linux/tcp.h>
1104 ])
1105 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1106fi
1107
paul7ea487b2003-03-17 02:05:07 +00001108dnl -----------------------------
1109dnl check ipforward detect method
1110dnl -----------------------------
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001111AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
David Lamparterca9f3422009-09-16 02:11:00 +02001112[if test x$cross_compiling = xyes; then
1113 if test x"$opsys" = x"gnu-linux"; then
1114 quagga_cv_ipforward_method=/proc/net/snmp
1115 else
1116 quagga_cv_ipforward_method=/dev/ip
1117 fi
1118else
1119 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1120 do
1121 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1122 done
1123fi
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001124case $quagga_cv_ipforward_method in
1125 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
paul7ea487b2003-03-17 02:05:07 +00001126 "/dev/ip")
1127 case "$host" in
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001128 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1129 *) quagga_cv_ipforward_method="solaris";;
paul7ea487b2003-03-17 02:05:07 +00001130 esac;;
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001131 *) quagga_cv_ipforward_method="sysctl";;
paul7ea487b2003-03-17 02:05:07 +00001132esac])
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001133IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
paul7ea487b2003-03-17 02:05:07 +00001134AC_SUBST(IPFORWARD)
1135
1136AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
1137
1138dnl ----------
1139dnl IPv6 check
1140dnl ----------
1141AC_MSG_CHECKING(whether does this OS have IPv6 stack)
paul7ea487b2003-03-17 02:05:07 +00001142dnl ---------
1143dnl KAME IPv6
1144dnl ---------
David Lamparter6d6df302014-06-28 21:12:37 +02001145 if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
paula159ed92003-06-04 11:01:45 +00001146 AC_DEFINE(KAME,1,KAME IPv6)
paula159ed92003-06-04 11:01:45 +00001147 AC_MSG_RESULT(KAME)
paul19877dd2004-05-11 10:49:35 +00001148dnl ------------------------------------
1149dnl Solaris 9, 10 and potentially higher
1150dnl ------------------------------------
paulafd8a122005-03-12 06:36:10 +00001151 elif test x"$opsys" = x"sol8"; then
paul19877dd2004-05-11 10:49:35 +00001152 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
paul19877dd2004-05-11 10:49:35 +00001153 AC_MSG_RESULT(Solaris IPv6)
paul7ea487b2003-03-17 02:05:07 +00001154dnl ----------
1155dnl Linux IPv6
1156dnl ----------
David Lamparter29ed6222014-06-28 21:42:25 +02001157 elif test x"$opsys" = x"gnu-linux"; then
Timo Teräs3ef0b872014-07-29 09:41:56 +00001158 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
David Lamparter29ed6222014-06-28 21:42:25 +02001159 AC_MSG_RESULT(Linux IPv6)
1160 else
David Lamparter7fe17e62014-11-22 10:31:33 -08001161 AC_MSG_ERROR([Failed to detect IPv6 stack])
paula159ed92003-06-04 11:01:45 +00001162 fi
paul7ea487b2003-03-17 02:05:07 +00001163
David Lamparter7fe17e62014-11-22 10:31:33 -08001164dnl this is unconditial, for compatibility
1165AC_DEFINE(HAVE_IPV6,1,IPv6)
paul7ea487b2003-03-17 02:05:07 +00001166
gdtfa3232e2003-12-03 17:52:30 +00001167dnl ------------------
1168dnl IPv6 header checks
1169dnl ------------------
gdtfa3232e2003-12-03 17:52:30 +00001170AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
David Lamparter05a69d22015-05-27 22:15:37 +02001171 netinet6/in6_var.h netinet6/nd6.h], [], [],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001172 QUAGGA_INCLUDES)
gdtfa3232e2003-12-03 17:52:30 +00001173
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001174m4_define([QUAGGA_INCLUDES],dnl
1175QUAGGA_INCLUDES
1176[#if HAVE_NETINET6_IN6_H
1177#include <netinet6/in6.h>
1178#endif
1179#if HAVE_NETINET_IN6_VAR_H
1180#include <netinet/in6_var.h>
1181#endif
1182#if HAVE_NETINET_ICMP6_H
1183# include <netinet/icmp6.h>
1184#endif
1185#if HAVE_NETINET6_IN6_VAR_H
1186# include <netinet6/in6_var.h>
1187#endif
1188#if HAVE_NETINET6_ND6_H
Hasso Tepperfbf24542007-06-25 19:30:59 +00001189# include <netinet6/nd6.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001190#endif
1191])dnl
1192
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +01001193dnl disable doc check
1194if test "${enable_doc}" = "no";then
1195 DOC=""
1196else
1197 DOC="doc"
1198fi
1199
paul7ea487b2003-03-17 02:05:07 +00001200dnl --------------------
1201dnl Daemon disable check
1202dnl --------------------
1203if test "${enable_zebra}" = "no";then
1204 ZEBRA=""
1205else
1206 ZEBRA="zebra"
1207fi
David Wardf027d332012-04-30 11:36:15 -04001208AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
paul7ea487b2003-03-17 02:05:07 +00001209
1210if test "${enable_bgpd}" = "no";then
1211 BGPD=""
1212else
1213 BGPD="bgpd"
1214fi
David Wardf027d332012-04-30 11:36:15 -04001215AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
paul7ea487b2003-03-17 02:05:07 +00001216
1217if test "${enable_ripd}" = "no";then
1218 RIPD=""
1219else
1220 RIPD="ripd"
1221fi
David Wardf027d332012-04-30 11:36:15 -04001222AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
paul7ea487b2003-03-17 02:05:07 +00001223
1224if test "${enable_ospfd}" = "no";then
1225 OSPFD=""
1226else
1227 OSPFD="ospfd"
1228fi
David Wardf027d332012-04-30 11:36:15 -04001229AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
paul7ea487b2003-03-17 02:05:07 +00001230
Timo Teräsdafa05e2017-01-19 17:27:01 +02001231if test x"$opsys" != x"gnu-linux"; then
1232 dnl NHRPd works currently with Linux only.
1233 enable_nhrpd="no"
1234fi
1235if test "${enable_nhrpd}" = "no";then
1236 NHRPD=""
1237else
1238 NHRPD="nhrpd"
1239fi
1240AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1241
ajsd0199432004-12-22 14:03:52 +00001242if test "${enable_watchquagga}" = "no";then
1243 WATCHQUAGGA=""
1244else
1245 WATCHQUAGGA="watchquagga"
1246fi
David Wardf027d332012-04-30 11:36:15 -04001247AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
ajsd0199432004-12-22 14:03:52 +00001248
paul1ef74ef2003-03-21 15:16:05 +00001249OSPFCLIENT=""
Donald Sharp36fef572015-12-16 14:22:10 -05001250if test "${enable_ospfapi}" != "no";then
paul9a569842003-03-28 01:45:13 +00001251 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
paul1ef74ef2003-03-21 15:16:05 +00001252
Donald Sharp36fef572015-12-16 14:22:10 -05001253 if test "${enable_ospfclient}" != "no";then
paul1ef74ef2003-03-21 15:16:05 +00001254 OSPFCLIENT="ospfclient"
paul1ef74ef2003-03-21 15:16:05 +00001255 fi
paul7ea487b2003-03-17 02:05:07 +00001256fi
Donald Sharp36fef572015-12-16 14:22:10 -05001257
David Wardf027d332012-04-30 11:36:15 -04001258AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
paul7ea487b2003-03-17 02:05:07 +00001259
1260case "${enable_ripngd}" in
paul7ea487b2003-03-17 02:05:07 +00001261 "no" ) RIPNGD="";;
David Lamparter7fe17e62014-11-22 10:31:33 -08001262 * ) RIPNGD="ripngd";;
paul7ea487b2003-03-17 02:05:07 +00001263esac
David Wardf027d332012-04-30 11:36:15 -04001264AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
paul7ea487b2003-03-17 02:05:07 +00001265
1266case "${enable_ospf6d}" in
paul7ea487b2003-03-17 02:05:07 +00001267 "no" ) OSPF6D="";;
David Lamparter7fe17e62014-11-22 10:31:33 -08001268 * ) OSPF6D="ospf6d";;
paul7ea487b2003-03-17 02:05:07 +00001269esac
David Wardf027d332012-04-30 11:36:15 -04001270AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
paul7ea487b2003-03-17 02:05:07 +00001271
jardin9e867fe2003-12-23 08:56:18 +00001272case "${enable_isisd}" in
jardin9e867fe2003-12-23 08:56:18 +00001273 "no" ) ISISD="";;
David Lamparter656a2c02015-02-09 11:36:10 +01001274 * ) ISISD="isisd";;
jardin9e867fe2003-12-23 08:56:18 +00001275esac
David Wardf027d332012-04-30 11:36:15 -04001276AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
jardin9e867fe2003-12-23 08:56:18 +00001277
Everton Marques871dbcf2009-08-11 15:43:05 -03001278case "${enable_pimd}" in
Everton Marques871dbcf2009-08-11 15:43:05 -03001279 "no" ) PIMD="";;
Donald Sharpe6756782015-07-16 21:18:34 -04001280 * ) PIMD="pimd";;
Everton Marques871dbcf2009-08-11 15:43:05 -03001281esac
Everton Marquesff57d362014-06-25 15:54:03 -03001282AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
Everton Marques871dbcf2009-08-11 15:43:05 -03001283
paul7ea487b2003-03-17 02:05:07 +00001284if test "${enable_bgp_announce}" = "no";then
Paul Jakma750e8142008-07-22 21:11:48 +00001285 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1286else
1287 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
paul7ea487b2003-03-17 02:05:07 +00001288fi
1289
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +01001290AC_SUBST(DOC)
paul7ea487b2003-03-17 02:05:07 +00001291AC_SUBST(ZEBRA)
1292AC_SUBST(BGPD)
1293AC_SUBST(RIPD)
1294AC_SUBST(RIPNGD)
1295AC_SUBST(OSPFD)
1296AC_SUBST(OSPF6D)
Timo Teräsdafa05e2017-01-19 17:27:01 +02001297AC_SUBST(NHRPD)
ajsd0199432004-12-22 14:03:52 +00001298AC_SUBST(WATCHQUAGGA)
jardin9e867fe2003-12-23 08:56:18 +00001299AC_SUBST(ISISD)
Everton Marques871dbcf2009-08-11 15:43:05 -03001300AC_SUBST(PIMD)
Greg Troxel97cee872007-08-02 13:36:56 +00001301AC_SUBST(SOLARIS)
paul7ea487b2003-03-17 02:05:07 +00001302AC_SUBST(VTYSH)
paul7ea487b2003-03-17 02:05:07 +00001303AC_SUBST(CURSES)
1304AC_SUBST(OSPFCLIENT)
paul1ef74ef2003-03-21 15:16:05 +00001305AC_SUBST(OSPFAPI)
paul7ea487b2003-03-17 02:05:07 +00001306AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1307AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1308AC_CHECK_LIB(crypt, crypt)
1309AC_CHECK_LIB(resolv, res_init)
paul7ea487b2003-03-17 02:05:07 +00001310
paul7ea487b2003-03-17 02:05:07 +00001311dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001312dnl check system has PCRE regexp
1313dnl ---------------------------
1314if test "x$enable_pcreposix" = "xyes"; then
1315 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1316 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1317fi
1318
1319if test "x$enable_pcreposix" != "xyes"; then
1320dnl ---------------------------
paul7ea487b2003-03-17 02:05:07 +00001321dnl check system has GNU regexp
1322dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001323AC_MSG_CHECKING(whether system has GNU regex)
paul7ea487b2003-03-17 02:05:07 +00001324AC_CHECK_LIB(c, regexec,
1325[AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1326 LIB_REGEX=""],
1327[LIB_REGEX="regex.o"])
Jeremy Jackson25f45882009-01-12 16:06:12 -05001328fi
1329AC_SUBST(HAVE_LIBPCREPOSIX)
paul7ea487b2003-03-17 02:05:07 +00001330AC_SUBST(LIB_REGEX)
1331
1332dnl ------------------
Timo Teräsdafa05e2017-01-19 17:27:01 +02001333dnl check C-Ares library
1334dnl ------------------
1335if test "${enable_nhrpd}" != "no";then
1336 PKG_CHECK_MODULES([CARES], [libcares])
1337fi
1338
1339
1340dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001341dnl check Net-SNMP library
paul7ea487b2003-03-17 02:05:07 +00001342dnl ------------------
Vincent Bernatd6be5fb2012-05-24 09:44:43 +02001343if test "${enable_snmp}" != ""; then
Vincent Bernat08d7f652012-05-22 22:29:17 +02001344 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1345 if test x"$NETSNMP_CONFIG" = x"no"; then
1346 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1347 fi
1348 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1349 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1350 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1351 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1352int main(void);
1353],
1354[
1355{
1356 return 0;
1357}
1358])],[AC_MSG_RESULT(yes)],[
1359 AC_MSG_RESULT(no)
1360 AC_MSG_ERROR([--enable-snmp given but not usable])])
1361 AC_DEFINE(HAVE_SNMP,,SNMP)
Vincent Bernatd6be5fb2012-05-24 09:44:43 +02001362 case "${enable_snmp}" in
1363 yes)
1364 SNMP_METHOD=agentx
1365 ;;
1366 smux|agentx)
1367 SNMP_METHOD="${enable_snmp}"
1368 ;;
1369 *)
1370 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1371 ;;
1372 esac
1373 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1374 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1375 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
paul7ea487b2003-03-17 02:05:07 +00001376fi
1377
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001378dnl ---------------------------
1379dnl sockaddr and netinet checks
1380dnl ---------------------------
1381AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1382 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
Everton Marques871dbcf2009-08-11 15:43:05 -03001383 socklen_t, struct vifctl, struct mfcctl, struct sioc_sg_req,
1384 vifi_t, struct sioc_vif_req, struct igmpmsg,
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001385 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1386 struct nd_opt_adv_interval, struct rt_addrinfo,
Paul Jakma11770e12007-06-22 16:14:42 +00001387 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001388 [], [], QUAGGA_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001389
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001390AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1391 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1392 struct sockaddr_in6.sin6_scope_id,
David Lamparterca3ccd82012-09-26 14:52:39 +02001393 struct sockaddr_dl.sdl_len,
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001394 struct if6_aliasreq.ifra_lifetime,
1395 struct nd_opt_adv_interval.nd_opt_ai_type],
1396 [], [], QUAGGA_INCLUDES)
hasso71c0fb52003-05-25 20:18:13 +00001397
paul7ea487b2003-03-17 02:05:07 +00001398dnl ---------------------------
Paul Jakma11770e12007-06-22 16:14:42 +00001399dnl IRDP/pktinfo/icmphdr checks
paul7ea487b2003-03-17 02:05:07 +00001400dnl ---------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001401AC_CHECK_TYPES([struct in_pktinfo],
Paul Jakma11770e12007-06-22 16:14:42 +00001402 [AC_CHECK_TYPES([struct icmphdr],
1403 [if test "${enable_irdp}" != "no"; then
1404 AC_DEFINE(HAVE_IRDP,, IRDP)
1405 fi],
1406 [if test "${enable_irdp}" = "yes"; then
1407 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1408 fi], [QUAGGA_INCLUDES])],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001409 [if test "${enable_irdp}" = "yes"; then
1410 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1411 fi], [QUAGGA_INCLUDES])
vincent29c4c9b2005-03-25 13:05:47 +00001412
Everton Marques871dbcf2009-08-11 15:43:05 -03001413dnl -----------------------
1414dnl checking for IP_PKTINFO
1415dnl -----------------------
1416AC_MSG_CHECKING(for IP_PKTINFO)
1417AC_TRY_COMPILE([#include <netdb.h>], [
1418 int opt = IP_PKTINFO;
1419], [
1420 AC_MSG_RESULT(yes)
1421 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1422], [
1423 AC_MSG_RESULT(no)
1424])
1425
1426dnl ---------------------------
1427dnl checking for IP_RECVDSTADDR
1428dnl ---------------------------
1429AC_MSG_CHECKING(for IP_RECVDSTADDR)
1430AC_TRY_COMPILE([#include <netinet/in.h>], [
1431 int opt = IP_RECVDSTADDR;
1432], [
1433 AC_MSG_RESULT(yes)
1434 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1435], [
1436 AC_MSG_RESULT(no)
1437])
1438
1439dnl ----------------------
1440dnl checking for IP_RECVIF
1441dnl ----------------------
1442AC_MSG_CHECKING(for IP_RECVIF)
1443AC_TRY_COMPILE([#include <netinet/in.h>], [
1444 int opt = IP_RECVIF;
1445], [
1446 AC_MSG_RESULT(yes)
1447 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1448], [
1449 AC_MSG_RESULT(no)
1450])
1451
paul7ea487b2003-03-17 02:05:07 +00001452dnl --------------------------------------
1453dnl checking for getrusage struct and call
1454dnl --------------------------------------
Stephen Hemminger47f6aef2013-01-04 22:29:22 +00001455if test "${enable_rusage}" != "no"; then
1456 AC_MSG_CHECKING(whether getrusage is available)
1457 AC_TRY_COMPILE([#include <sys/resource.h>],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1458 [AC_MSG_RESULT(yes)
1459 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1460 AC_MSG_RESULT(no))
1461fi
paul7ea487b2003-03-17 02:05:07 +00001462
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001463dnl --------------------------------------
1464dnl checking for clock_time monotonic struct and call
1465dnl --------------------------------------
Paul Jakma6511cab2009-06-18 17:38:01 +01001466AC_CHECK_DECL(CLOCK_MONOTONIC,
1467 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
Dmitry Tejblum9964fcf2009-11-05 16:50:36 +03001468 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
Paul Jakma6511cab2009-06-18 17:38:01 +01001469], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001470
pauledd7c242003-06-04 13:59:38 +00001471dnl -------------------
1472dnl capabilities checks
1473dnl -------------------
hasso41d3fc92004-04-06 11:59:00 +00001474if test "${enable_capabilities}" != "no"; then
1475 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1476 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1477 [AC_MSG_RESULT(yes)
1478 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1479 quagga_ac_keepcaps="yes"],
1480 AC_MSG_RESULT(no)
pauledd7c242003-06-04 13:59:38 +00001481 )
hasso41d3fc92004-04-06 11:59:00 +00001482 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1483 AC_CHECK_HEADERS(sys/capability.h)
1484 fi
1485 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1486 AC_CHECK_LIB(cap, cap_init,
1487 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1488 LIBCAP="-lcap"
paulceacedb2005-09-29 14:39:32 +00001489 quagga_ac_lcaps="yes"]
hasso41d3fc92004-04-06 11:59:00 +00001490 )
paulceacedb2005-09-29 14:39:32 +00001491 else
1492 AC_CHECK_HEADERS(priv.h,
1493 [AC_MSG_CHECKING(Solaris style privileges are available)
1494 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1495 [AC_MSG_RESULT(yes)
1496 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1497 quagga_ac_scaps="yes"],
1498 AC_MSG_RESULT(no)
1499 )
1500 ]
1501 )
1502 fi
1503 if test x"${quagga_ac_scaps}" = x"yes" \
1504 -o x"${quagga_ac_lcaps}" = x"yes"; then
1505 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
hasso41d3fc92004-04-06 11:59:00 +00001506 fi
pauledd7c242003-06-04 13:59:38 +00001507fi
1508AC_SUBST(LIBCAP)
1509
Doug VanLeuven327c4cd2012-12-14 14:58:30 +02001510dnl ---------------------------------------------------------------------------
1511dnl http://www.gnu.org/software/autoconf-archive/ax_sys_weak_alias.html
1512dnl Check for and set one of the following = 1
1513dnl HAVE_SYS_WEAK_ALIAS_ATTRIBUTE
1514dnl HAVE_SYS_WEAK_ALIAS_PRAGMA
1515dnl HAVE_SYS_WEAK_ALIAS_HPSECONDARY
1516dnl HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE
1517dnl If any scheme is found, set
1518dnl HAVE_SYS_WEAK_ALIAS=1
1519dnl The following variable is set to text value
1520dnl WEAK_ALIAS = "attribute" || "pragma" || "hpsecondary" || "criduplicate" || "no"
1521dnl If weak alias can cross object file boundaries
1522dnl WEAK_ALIAS_CROSSFILE = "yes" || "no"
1523dnl ---------------------------------------------------------------------------
1524AX_SYS_WEAK_ALIAS
1525
paulfb2d1502003-06-04 09:40:54 +00001526dnl ---------------------------
1527dnl check for glibc 'backtrace'
1528dnl ---------------------------
David Lamparter8c99b4c2013-08-01 07:43:36 +00001529if test x"${enable_backtrace}" != x"no" ; then
1530 backtrace_ok=no
1531 AC_CHECK_HEADER([execinfo.h], [
1532 AC_SEARCH_LIBS([backtrace], [execinfo], [
1533 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1534 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1535 backtrace_ok=yes
1536 ],, [-lm])
Dmitrij Tejblumeda35292011-09-15 20:00:33 +04001537 ])
David Lamparter8c99b4c2013-08-01 07:43:36 +00001538
1539 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1540 dnl user explicitly requested backtrace but we failed to find support
1541 AC_MSG_FAILURE([failed to find backtrace support])
1542 fi
1543fi
paulfb2d1502003-06-04 09:40:54 +00001544
Paul Jakma41be32b2006-03-30 13:53:59 +00001545dnl -----------------------------------------
1546dnl check for malloc mallinfo struct and call
1547dnl this must try and link using LIBS, in
1548dnl order to check no alternative allocator
1549dnl has been specified, which might not provide
1550dnl mallinfo, e.g. such as Umem on Solaris.
1551dnl -----------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001552AC_CHECK_HEADER([malloc.h],
Paul Jakma41be32b2006-03-30 13:53:59 +00001553 [AC_MSG_CHECKING(whether mallinfo is available)
1554 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1555 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1556 [AC_MSG_RESULT(yes)
1557 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1558 AC_MSG_RESULT(no)
1559 )
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001560 ], [], QUAGGA_INCLUDES)
Paul Jakma41be32b2006-03-30 13:53:59 +00001561
paul408ad942003-05-20 00:03:33 +00001562dnl ----------
1563dnl configure date
1564dnl ----------
1565CONFDATE=`date '+%Y%m%d'`
1566AC_SUBST(CONFDATE)
1567
David Lamparterf281ab92013-02-26 16:21:20 +01001568dnl -------
1569dnl DejaGNU
1570dnl -------
1571if test x"$DEJAGNU" = x
1572then
1573 DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
1574fi
1575RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
1576
1577AC_SUBST(DEJAGNU)
1578AC_SUBST(RUNTESTDEFAULTFLAGS)
1579
paul7ea487b2003-03-17 02:05:07 +00001580dnl ------------------------------
paula159ed92003-06-04 11:01:45 +00001581dnl set paths for state directory
paul23bd12c2003-04-07 06:11:09 +00001582dnl ------------------------------
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001583AC_MSG_CHECKING(directory to use for state file)
paul23bd12c2003-04-07 06:11:09 +00001584if test "${prefix}" = "NONE"; then
paule8f29842003-08-12 13:08:31 +00001585 quagga_statedir_prefix="";
paul23bd12c2003-04-07 06:11:09 +00001586else
paule8f29842003-08-12 13:08:31 +00001587 quagga_statedir_prefix=${prefix}
paul23bd12c2003-04-07 06:11:09 +00001588fi
1589if test "${localstatedir}" = '${prefix}/var'; then
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001590 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
paule8f29842003-08-12 13:08:31 +00001591 ${quagga_statedir_prefix}/var/adm dnl
1592 ${quagga_statedir_prefix}/etc dnl
paula159ed92003-06-04 11:01:45 +00001593 /var/run dnl
1594 /var/adm dnl
1595 /etc dnl
1596 /dev/null;
paul23bd12c2003-04-07 06:11:09 +00001597 do
paule8f29842003-08-12 13:08:31 +00001598 test -d $QUAGGA_STATE_DIR && break
paul23bd12c2003-04-07 06:11:09 +00001599 done
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001600 quagga_statedir=$QUAGGA_STATE_DIR
paul23bd12c2003-04-07 06:11:09 +00001601else
paule8f29842003-08-12 13:08:31 +00001602 quagga_statedir=${localstatedir}
paul23bd12c2003-04-07 06:11:09 +00001603fi
paule8f29842003-08-12 13:08:31 +00001604if test $quagga_statedir = "/dev/null"; then
paula159ed92003-06-04 11:01:45 +00001605 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1606fi
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001607AC_MSG_RESULT(${quagga_statedir})
1608AC_SUBST(quagga_statedir)
paula159ed92003-06-04 11:01:45 +00001609
paule8f29842003-08-12 13:08:31 +00001610AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1611AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1612AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1613AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1614AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1615AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
Timo Teräsdafa05e2017-01-19 17:27:01 +02001616AC_DEFINE_UNQUOTED(PATH_NHRPD_PID, "$quagga_statedir/nhrpd.pid",nhrpd PID)
jardin9e867fe2003-12-23 08:56:18 +00001617AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
Everton Marques871dbcf2009-08-11 15:43:05 -03001618AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$quagga_statedir/pimd.pid",pimd PID)
ajsd0199432004-12-22 14:03:52 +00001619AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
paule8f29842003-08-12 13:08:31 +00001620AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1621AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1622AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1623AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1624AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1625AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1626AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
Timo Teräsdafa05e2017-01-19 17:27:01 +02001627AC_DEFINE_UNQUOTED(NHRP_VTYSH_PATH, "$quagga_statedir/nhrpd.vty",nhrpd vty socket)
jardin9e867fe2003-12-23 08:56:18 +00001628AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
Everton Marques871dbcf2009-08-11 15:43:05 -03001629AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$quagga_statedir/pimd.vty",pimd vty socket)
ajs515210b2004-12-22 15:35:12 +00001630AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
paul7ea487b2003-03-17 02:05:07 +00001631
paul1eb8ef22005-04-07 07:30:20 +00001632dnl -------------------------------
1633dnl Quagga sources should always be
1634dnl current wrt interfaces. Dont
1635dnl allow deprecated interfaces to
1636dnl be exposed.
1637dnl -------------------------------
1638AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1639
paul7ea487b2003-03-17 02:05:07 +00001640dnl ---------------------------
1641dnl Check htonl works correctly
1642dnl ---------------------------
1643AC_MSG_CHECKING(for working htonl)
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001644AC_CACHE_VAL(ac_cv_htonl_works,
1645 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1646 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1647 ]
1648)
paul7ea487b2003-03-17 02:05:07 +00001649AC_MSG_RESULT($ac_cv_htonl_works)
1650
Avneesh Sachdev07e5b642016-04-04 10:54:55 -07001651AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
ajsd0199432004-12-22 14:03:52 +00001652 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
Paul Jakma336724d2015-05-11 15:13:31 +01001653 ospf6d/Makefile isisd/Makefile vtysh/Makefile
David Lamparterf281ab92013-02-26 16:21:20 +01001654 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
Timo Teräsdafa05e2017-01-19 17:27:01 +02001655 pimd/Makefile nhrpd/Makefile
David Lamparter5bb7e4d2013-02-26 17:53:30 +01001656 tests/bgpd.tests/Makefile
David Lamparterc69905b2013-01-24 01:39:14 +01001657 tests/libzebra.tests/Makefile
David Lamparterf281ab92013-02-26 16:21:20 +01001658 redhat/Makefile
gdt69f1fc22004-08-27 15:57:35 +00001659 pkgsrc/Makefile
Avneesh Sachdevef20ef72016-04-04 10:54:57 -07001660 fpm/Makefile
paul670bbf12004-11-12 09:05:00 +00001661 redhat/quagga.spec
gdtb7a97f82004-07-23 16:23:56 +00001662 lib/version.h
hassof695b012005-04-02 19:03:39 +00001663 isisd/topology/Makefile
gdtcbd04082004-08-31 18:16:36 +00001664 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
paulf31293a2004-11-12 09:27:04 +00001665 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
paul26275b02005-04-11 07:10:47 +00001666AC_CONFIG_FILES([solaris/Makefile])
1667
paul670bbf12004-11-12 09:05:00 +00001668AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
hasso48577192004-11-19 06:41:49 +00001669## Hack, but working solution to avoid rebuilding of quagga.info.
1670## It's already in CVS until texinfo 4.7 is more common.
paul14c17fd2004-11-07 22:34:23 +00001671AC_OUTPUT
paul7ea487b2003-03-17 02:05:07 +00001672
1673echo "
hassoc89f6492004-08-26 12:21:28 +00001674Quagga configuration
1675--------------------
1676quagga version : ${PACKAGE_VERSION}
Joachim Nilsson1080c132012-05-30 08:15:48 +02001677host operating system : ${host_os}
paul7ea487b2003-03-17 02:05:07 +00001678source code location : ${srcdir}
1679compiler : ${CC}
1680compiler flags : ${CFLAGS}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001681make : ${MAKE-make}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001682linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
paule8f29842003-08-12 13:08:31 +00001683state file directory : ${quagga_statedir}
pauldc7a2bf2003-10-22 00:07:44 +00001684config file directory : `eval echo \`echo ${sysconfdir}\``
gdtd6b72f72003-12-03 17:24:27 +00001685example directory : `eval echo \`echo ${exampledir}\``
paul8d4aee52003-06-06 00:30:35 +00001686user to run as : ${enable_user}
1687group to run as : ${enable_group}
1688group for vty sockets : ${enable_vty_group}
gdtaa593d52003-12-22 20:15:53 +00001689config file mask : ${enable_configfile_mask}
1690log file mask : ${enable_logfile_mask}
Avneesh Sachdev07e5b642016-04-04 10:54:55 -07001691zebra protobuf enabled : ${have_protobuf:-no}
pauldc7a2bf2003-10-22 00:07:44 +00001692
1693The above user and group must have read/write access to the state file
Paul Jakma105b8232006-05-28 08:02:41 +00001694directory and to the config files in the config file directory."
1695
1696if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1697Warning: The ${MAKE-make} programme detected, either in your path or
1698via the MAKE variable, is not GNU Make. GNU make may be installed as
1699gmake on some systems. and is required to complete a build of Quagga
1700" > /dev/stderr
1701fi