]> git.proxmox.com Git - mirror_frr.git/blame - configure.ac
debianpkg: remove bad USE_* options, add WERROR
[mirror_frr.git] / configure.ac
CommitLineData
7ea487bc 1##
447a8fe9 2## Configure template file for FRRouting.
7ea487bc 3## autoconf will generate configure script.
4##
5## Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
e8f2984c 6## Portions Copyright (c) 2003 Paul Jakma <paul@dishone.st>
7ea487bc 7##
9bc6875a 8AC_PREREQ(2.60)
7ea487bc 9
17808c03 10AC_INIT(frr, 6.1-dev, [https://github.com/frrouting/frr/issues])
d6180888 11PACKAGE_URL="https://frrouting.org/"
34982989 12AC_SUBST(PACKAGE_URL)
447a8fe9 13PACKAGE_FULLNAME="FRRouting"
a07169b1
DL
14AC_SUBST(PACKAGE_FULLNAME)
15
5ee1bde7 16CONFIG_ARGS="$ac_configure_args"
80db5ac1 17AC_SUBST(CONFIG_ARGS)
a07169b1 18
fa1253d0 19AC_CONFIG_SRCDIR(lib/zebra.h)
62c9f504 20AC_CONFIG_MACRO_DIR([m4])
dfb9a545 21
22dnl -----------------------------------
23dnl Get hostname and other information.
24dnl -----------------------------------
25AC_CANONICAL_BUILD()
26AC_CANONICAL_HOST()
29ad6f68
DL
27
28AS_IF([test "$host" != "$build"], [
29 if test "$srcdir" = "."; then
30 AC_MSG_ERROR([cross-compilation is only possible with builddir separate from srcdir. create a separate directory and run as .../path-to-frr/configure.])
31 fi
32 test -d hosttools || mkdir hosttools
33 abssrc="`cd \"${srcdir}\"; pwd`"
34
35 AC_MSG_NOTICE([...])
36 AC_MSG_NOTICE([... cross-compilation: creating hosttools directory and self-configuring for build platform tools])
37 AC_MSG_NOTICE([... use HOST_CPPFLAGS / HOST_CFLAGS / HOST_LDFLAGS if neccessary])
38 AC_MSG_NOTICE([...])
39
40 ( CPPFLAGS="$HOST_CPPFLAGS"; \
41 CFLAGS="$HOST_CFLAGS"; \
42 LDFLAGS="$HOST_LDFLAGS"; \
c71b8557 43 cd hosttools; "${abssrc}/configure" "--host=$build" "--build=$build" "--enable-clippy-only" "--disable-nhrpd" "--disable-vtysh"; )
29ad6f68
DL
44
45 AC_MSG_NOTICE([...])
46 AC_MSG_NOTICE([... cross-compilation: finished self-configuring for build platform tools])
47 AC_MSG_NOTICE([...])
48
49 build_clippy="false"
4a121f99 50 HOSTTOOLS="hosttools/"
29ad6f68
DL
51], [
52 build_clippy="true"
4a121f99 53 HOSTTOOLS=""
29ad6f68 54])
4a121f99 55AC_SUBST(HOSTTOOLS)
29ad6f68 56AM_CONDITIONAL([BUILD_CLIPPY], [$build_clippy])
dfb9a545 57
f77cba1b
AS
58# Disable portability warnings -- our automake code (in particular
59# common.am) uses some constructs specific to gmake.
f20aafee 60AM_INIT_AUTOMAKE([1.12 -Wno-portability foreign])
50cfc0d2 61m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
e54583ea 62AM_SILENT_RULES([yes])
303bb005 63AC_CONFIG_HEADERS(config.h)
7ea487bc 64
0be793e6 65AC_PATH_PROG(PERL, perl)
00c03bc9 66PKG_PROG_PKG_CONFIG
03ecfb67 67
d6b72f7a 68dnl default is to match previous behavior
c4f0efe6 69exampledir=${sysconfdir}
d6b72f7a 70AC_ARG_ENABLE([exampledir],
23925784 71 AS_HELP_STRING([--enable-exampledir],
d6b72f7a 72 [specify alternate directory for examples]),
73 exampledir="$enableval",)
c4f0efe6 74dnl XXX add --exampledir to autoconf standard directory list somehow
d6b72f7a 75AC_SUBST(exampledir)
76
cbd04084 77dnl default is to match previous behavior
78pkgsrcrcdir=""
cbd04084 79AC_ARG_ENABLE([pkgsrcrcdir],
23925784 80 AS_HELP_STRING([--enable-pkgsrcrcdir],
cbd04084 81 [specify directory for rc.d scripts]),
53d93be1 82 pkgsrcrcdir="$enableval",)
cbd04084 83dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
cbd04084 84AC_SUBST(pkgsrcrcdir)
53d93be1 85AM_CONDITIONAL([PKGSRC], [test "x$pkgsrcrcdir" != "x"])
cbd04084 86
30771d65
DL
87AC_ARG_WITH([moduledir], [AS_HELP_STRING([--with-moduledir=DIR], [module directory (${libdir}/frr/modules)])], [
88 moduledir="$withval"
89], [
90 moduledir="\${libdir}/frr/modules"
91])
92AC_SUBST([moduledir], [$moduledir])
93
3f9c7369 94AC_ARG_ENABLE(tcmalloc,
428cd73f 95 AS_HELP_STRING([--enable-tcmalloc], [Turn on tcmalloc]),
3f9c7369
DS
96[case "${enableval}" in
97 yes) tcmalloc_enabled=true
98LIBS="$LIBS -ltcmalloc_minimal"
99 ;;
100 no) tcmalloc_enabled=false ;;
101 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
102esac],[tcmalloc_enabled=false])
103
104
fbd0bae6
DL
105dnl Thanks autoconf, but we don't want a default -g -O2. We have our own
106dnl flag determination logic.
107CFLAGS="${CFLAGS:-}"
108
1969e4b9 109dnl --------------------
110dnl Check CC and friends
111dnl --------------------
a89b1641
DL
112dnl note orig_cflags is also used further down
113orig_cflags="$CFLAGS"
46bc0e43 114AC_LANG([C])
7ea487bc 115AC_PROG_CC
1969e4b9 116AC_PROG_CPP
46bc0e43 117AM_PROG_CC_C_O
a89b1641
DL
118dnl remove autoconf default "-g -O2"
119CFLAGS="$orig_cflags"
1769aff8 120AC_PROG_CC_C99
8aa42b82 121dnl NB: see C11 below
553bdfe3 122
a89b1641 123AC_PROG_EGREP
2fb975da 124PKG_PROG_PKG_CONFIG
a89b1641 125
553bdfe3
GT
126dnl autoconf 2.59 appears not to support AC_PROG_SED
127dnl AC_PROG_SED
128AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
1969e4b9 129
1689cf7e 130dnl try and enable CFLAGS that are useful for FRR
a89b1641 131dnl - specifically, options to control warnings
1969e4b9 132
b31fd749 133AC_USE_SYSTEM_EXTENSIONS
988225dd 134AC_DEFUN([AC_C_FLAG], [{
2a636b43
DL
135 m4_pushdef([cachename],[m4_translit([frr_cv_$1],[ =-],[___])])
136 AC_CACHE_CHECK([[whether $CC supports $1]], cachename, [
988225dd
DL
137 AC_LANG_PUSH(C)
138 ac_c_flag_save="$CFLAGS"
139 CFLAGS="$CFLAGS $1"
988225dd
DL
140 AC_COMPILE_IFELSE(
141 [AC_LANG_PROGRAM([[]])],
142 [
2a636b43 143 cachename=yes
988225dd 144 ], [
2a636b43 145 cachename=no
988225dd 146 ])
2a636b43 147 CFLAGS="$ac_c_flag_save"
988225dd 148 AC_LANG_POP(C)
2a636b43
DL
149 ])
150 if test "${cachename}" = yes; then
151 m4_if([$3], [], [CFLAGS="$CFLAGS $1"], [$3])
152 else
153 :
154 $2
155 fi
156 m4_popdef([cachename])
157}])
988225dd 158
92e50261
DL
159AC_DEFUN([AC_LINK_IFELSE_FLAGS], [{
160 AC_LANG_PUSH(C)
161 ac_cflags_save="$CFLAGS"
162 ac_libs_save="$LIBS"
163 CFLAGS="$CFLAGS $1"
164 LIBS="$LIBS $2"
165 AC_LINK_IFELSE(
166 [$3],
167 [
168 AC_MSG_RESULT([yes])
169 CFLAGS="$ac_cflags_save"
170 LIBS="$ac_libs_save"
171 $5
172 ], [
173 AC_MSG_RESULT([no])
174 CFLAGS="$ac_cflags_save"
175 LIBS="$ac_libs_save"
176 $4
177 ])
178 AC_LANG_POP(C)
179 }])
180
a89b1641
DL
181dnl ICC won't bail on unknown options without -diag-error 10006
182dnl need to do this first so we get useful results for the other options
183AC_C_FLAG([-diag-error 10006])
184
8aa42b82
DL
185dnl AC_PROG_CC_C99 may change CC to include -std=gnu99 or something
186ac_cc="$CC"
187CC="${CC% -std=gnu99}"
188CC="${CC% -std=c99}"
189
190AC_C_FLAG([-std=gnu11], [CC="$ac_cc"], [CC="$CC -std=gnu11"])
191
09329dbc 192dnl if the user has specified any CFLAGS, override our settings
83284209
AJ
193if test "x${enable_gcov}" = "xyes"; then
194 if test "z$orig_cflags" = "z"; then
195 AC_C_FLAG([-coverage])
196 AC_C_FLAG([-O0])
197 fi
198
199 LDFLAGS="${LDFLAGS} -lgcov"
200elif test "x${enable_dev_build}" = "xyes"; then
09329dbc
DS
201 AC_DEFINE(DEV_BUILD,,Build for development)
202 if test "z$orig_cflags" = "z"; then
203 AC_C_FLAG([-g3])
204 AC_C_FLAG([-O0])
205 fi
634949ae
DS
206 if test "x${enable_lua}" = "xyes"; then
207 AC_CHECK_LIB([lua], [lua_newstate],
208 [LIBS="$LIBS -llua"])
209 AC_DEFINE(HAVE_LUA,,Lua enabled for development)
210 fi
09329dbc 211else
634949ae
DS
212 if test "x${enable_lua}" = "xyes"; then
213 AC_MSG_ERROR([Lua is not meant to be built/used outside of development at this time])
214 fi
09329dbc
DS
215 if test "z$orig_cflags" = "z"; then
216 AC_C_FLAG([-g])
217 AC_C_FLAG([-Os], [
218 AC_C_FLAG([-O2])
219 ])
220 fi
221fi
222AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
223
a89b1641
DL
224dnl always want these CFLAGS
225AC_C_FLAG([-fno-omit-frame-pointer])
c594d99f 226AC_C_FLAG([-funwind-tables])
a89b1641
DL
227AC_C_FLAG([-Wall])
228AC_C_FLAG([-Wextra])
229AC_C_FLAG([-Wmissing-prototypes])
230AC_C_FLAG([-Wmissing-declarations])
231AC_C_FLAG([-Wpointer-arith])
232AC_C_FLAG([-Wbad-function-cast])
233AC_C_FLAG([-Wwrite-strings])
234if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
235 AC_C_FLAG([-Wcast-qual])
236 AC_C_FLAG([-Wstrict-prototypes])
237 AC_C_FLAG([-Wmissing-noreturn])
238 AC_C_FLAG([-Wmissing-format-attribute])
239 AC_C_FLAG([-Wunreachable-code])
240 AC_C_FLAG([-Wpacked])
241 AC_C_FLAG([-Wpadded])
2b5773b2 242 AC_C_FLAG([-Wshadow])
6a4b8832 243else
a89b1641 244 AC_C_FLAG([-Wno-unused-result])
1969e4b9 245fi
a89b1641
DL
246AC_C_FLAG([-Wno-unused-parameter])
247AC_C_FLAG([-Wno-missing-field-initializers])
248
249dnl ICC emits a broken warning for const char *x = a ? "b" : "c";
250dnl for some reason the string consts get 'promoted' to char *,
251dnl triggering a const to non-const conversion warning.
252AC_C_FLAG([-diag-disable 3179])
1969e4b9 253
aa9584c1
DS
254if test x"${enable_werror}" = x"yes" ; then
255 WERROR="-Werror"
256fi
257AC_SUBST(WERROR)
258
dbac691d
DL
259SAN_FLAGS=""
260if test "$enable_address_sanitizer" = "yes"; then
261 AC_C_FLAG([-fsanitize=address], [
262 AC_MSG_ERROR([$CC does not support Address Sanitizer.])
263 ], [
264 SAN_FLAGS="$SAN_FLAGS -fsanitize=address"
265 ])
266fi
267if test "$enable_thread_sanitizer" = "yes"; then
268 AC_C_FLAG([-fsanitize=thread], [
269 AC_MSG_ERROR([$CC does not support Thread Sanitizer.])
270 ], [
271 SAN_FLAGS="$SAN_FLAGS -fsanitize=thread"
272 ])
273fi
274if test "$enable_memory_sanitizer" = "yes"; then
275 AC_C_FLAG([-fsanitize=thread -fPIE -pie], [
276 AC_MSG_ERROR([$CC does not support Thread Sanitizer.])
277 ], [
278 SAN_FLAGS="-fsanitize=memory -fPIE -pie"
279 ])
280fi
281AC_SUBST([SAN_FLAGS])
282
b31fd749
DL
283dnl ----------
284dnl Essentials
285dnl ----------
286
287AX_PTHREAD([
288 CC="$PTHREAD_CC"
289 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
290 LIBS="$PTHREAD_LIBS $LIBS"
291], [
1689cf7e 292 AC_MSG_FAILURE([This FRR version needs pthreads])
b31fd749
DL
293])
294
afc9534f
DS
295AC_SEARCH_LIBS([pthread_condattr_setclock], [],
296 [frr_cv_pthread_condattr_setclock=yes],
297 [frr_cv_pthread_condattr_setclock=no])
298if test "$frr_cv_pthread_condattr_setclock" = yes; then
299 AC_DEFINE(HAVE_PTHREAD_CONDATTR_SETCLOCK, 1, [Have pthread.h pthread_condattr_setclock])
300fi
301
7ea487bc 302dnl --------------
303dnl Check programs
304dnl --------------
7ea487bc 305AC_PROG_INSTALL
6f0e3f6e 306AC_PROG_LN_S
7ea487bc 307AC_PROG_MAKE_SET
308AC_CHECK_TOOL(AR, ar)
7ea487bc 309
87efd646 310dnl -------
311dnl libtool
312dnl -------
d6e76257
DL
313AC_ARG_ENABLE(static-bin,
314 AS_HELP_STRING([--enable-static-bin], [link binaries statically]))
95bb8305 315LT_INIT
d6e76257
DL
316_LT_CONFIG_LIBTOOL([
317 patch -N -i "${srcdir}/m4/libtool-whole-archive.patch" libtool >&AS_MESSAGE_LOG_FD || \
318 AC_MSG_WARN([Could not patch libtool for static linking support. Loading modules into a statically linked daemon will fail.])
319])
320if test "$enable_static_bin" = "yes"; then
321 AC_LDFLAGS="-static"
322fi
323AC_SUBST(AC_LDFLAGS)
324AM_CONDITIONAL([STATIC_BIN], [test "x$enable_static_bin" = "xyes"])
87efd646 325
105a8189
DL
326dnl $AR and $RANLIB are set by LT_INIT above
327AC_MSG_CHECKING([whether $AR supports D option])
328if $AR crD conftest.a; then
329 AC_MSG_RESULT([yes])
330 dnl ARFLAGS is for automake, AR_FLAGS for libtool m-(
331 ARFLAGS="crD"
332 AR_FLAGS="crD"
333else
334 AC_MSG_RESULT([no])
335 ARFLAGS="cru"
336 AR_FLAGS="cru"
337fi
338AC_SUBST(ARFLAGS)
339AC_SUBST(AR_FLAGS)
340
341AC_MSG_CHECKING([whether $RANLIB supports D option])
342if $RANLIB -D conftest.a; then
343 AC_MSG_RESULT([yes])
344 RANLIB="$RANLIB -D"
345else
346 AC_MSG_RESULT([no])
347fi
348AC_SUBST(RANLIB)
349
350test -f conftest.a && rm conftest.a
351
7ea487bc 352dnl ----------------------
353dnl Packages configuration
354dnl ----------------------
1080c13f
JN
355AC_ARG_WITH(pkg-extra-version,
356 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
357 [EXTRAVERSION=$withval],)
0be793e6
DL
358AC_ARG_WITH(pkg-git-version,
359 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
a16dcf7c 360 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
08c369bd
DS
361AC_ARG_WITH(vtysh_pager,
362 AS_HELP_STRING([--with-vtysh-pager=PAGER], [control what pager is compiled in as default]),
363 VTYSH_PAGER=$withval, VTYSH_PAGER="more")
7ea487bc 364AC_ARG_ENABLE(vtysh,
1689cf7e 365 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for FRR]))
cbcd9bfc 366AC_ARG_ENABLE(doc,
23925784 367 AS_HELP_STRING([--disable-doc], [do not build docs]))
9e53b315 368AC_ARG_ENABLE(doc-html,
50dc6dbd 369 AS_HELP_STRING([--enable-doc-html], [build HTML docs]))
7ea487bc 370AC_ARG_ENABLE(zebra,
23925784 371 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
7ea487bc 372AC_ARG_ENABLE(bgpd,
23925784 373 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
7ea487bc 374AC_ARG_ENABLE(ripd,
23925784 375 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
7ea487bc 376AC_ARG_ENABLE(ripngd,
23925784 377 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
7ea487bc 378AC_ARG_ENABLE(ospfd,
23925784 379 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
7ea487bc 380AC_ARG_ENABLE(ospf6d,
23925784 381 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
eac6e3f0 382AC_ARG_ENABLE(ldpd,
5a6869b2 383 AS_HELP_STRING([--disable-ldpd], [do not build ldpd]))
2fb975da
TT
384AC_ARG_ENABLE(nhrpd,
385 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
7f57883e
DS
386AC_ARG_ENABLE(eigrpd,
387 AS_HELP_STRING([--disable-eigrpd], [do not build eigrpd]))
ca10883e
DS
388AC_ARG_ENABLE(babeld,
389 AS_HELP_STRING([--disable-babeld], [do not build babeld]))
9473e340
DS
390AC_ARG_ENABLE(watchfrr,
391 AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
9e867fe6 392AC_ARG_ENABLE(isisd,
c3a9461e 393 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
12e41d03 394AC_ARG_ENABLE(pimd,
23925784 395 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
3cab181d
DS
396AC_ARG_ENABLE(pbrd,
397 AS_HELP_STRING([--disable-pbrd], [do not build pbrd]))
2222a716 398AC_ARG_ENABLE(sharpd,
5a6869b2
MS
399 AS_HELP_STRING([--enable-sharpd], [build sharpd]))
400AC_ARG_ENABLE(staticd,
401 AS_HELP_STRING([--disable-staticd], [do not build staticd]))
7c0cbd0e
CF
402AC_ARG_ENABLE(fabricd,
403 AS_HELP_STRING([--disable-fabricd], [do not build fabricd]))
7ea487bc 404AC_ARG_ENABLE(bgp-announce,
23925784 405 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
65efcfce 406AC_ARG_ENABLE(bgp-vnc,
f95f2ad9 407 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
7ea487bc 408AC_ARG_ENABLE(snmp,
807ed4e9 409 AS_HELP_STRING([--enable-snmp], [enable SNMP support for agentx]))
b6116506
DL
410AC_ARG_ENABLE(zeromq,
411 AS_HELP_STRING([--enable-zeromq], [enable ZeroMQ handler (libfrrzmq)]))
7ea487bc 412AC_ARG_WITH(libpam,
23925784 413 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
1ef74ef7 414AC_ARG_ENABLE(ospfapi,
23925784 415 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
1ef74ef7 416AC_ARG_ENABLE(ospfclient,
23925784
DL
417 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
418 (this is the default if --disable-ospfapi is set)]))
7ea487bc 419AC_ARG_ENABLE(multipath,
23925784 420 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
fe86b484 421AC_ARG_ENABLE(user,
b2f36157 422 AS_HELP_STRING([--enable-user=USER], [user to run FRR suite as (default frr)]))
fe86b484 423AC_ARG_ENABLE(group,
b2f36157 424 AS_HELP_STRING([--enable-group=GROUP], [group to run FRR suite as (default frr)]))
edd7c245 425AC_ARG_ENABLE(vty_group,
23925784 426 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
aa593d5e 427AC_ARG_ENABLE(configfile_mask,
23925784 428 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
aa593d5e 429AC_ARG_ENABLE(logfile_mask,
23925784 430 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
5fd1f747 431AC_ARG_ENABLE(shell_access,
23925784 432 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
4e40b6d6
KK
433AC_ARG_ENABLE(realms,
434 AS_HELP_STRING([--enable-realms], [enable REALMS support under Linux]))
71c0fb50 435AC_ARG_ENABLE(rtadv,
23925784 436 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
ca776988 437AC_ARG_ENABLE(irdp,
8dc1f7fc 438 AS_HELP_STRING([--disable-irdp], [enable IRDP server support in zebra (default if supported)]))
41d3fc96 439AC_ARG_ENABLE(capabilities,
23925784 440 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
47f6aef0 441AC_ARG_ENABLE(rusage,
23925784 442 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
6b6942f9 443AC_ARG_ENABLE(gcc_ultra_verbose,
23925784 444 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
8c99b4c1 445AC_ARG_ENABLE(backtrace,
23925784 446 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
924b9229 447AC_ARG_ENABLE(time-check,
23925784 448 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
25f45887 449AC_ARG_ENABLE(pcreposix,
23925784 450 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
5adc2528 451AC_ARG_ENABLE(fpm,
23925784 452 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
ddd82ff6 453AC_ARG_ENABLE(systemd,
23925784 454 AS_HELP_STRING([--enable-systemd], [enable Systemd support]))
aa9584c1
DS
455AC_ARG_ENABLE(werror,
456 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
000cf1fb 457AC_ARG_ENABLE(cumulus,
23925784 458 AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions]))
df970aa6
DS
459AC_ARG_ENABLE(datacenter,
460 AS_HELP_STRING([--enable-datacenter], [enable Compilation for Data Center Extensions]))
411314ed
DS
461AC_ARG_ENABLE(fuzzing,
462 AS_HELP_STRING([--enable-fuzzing], [enable ability to fuzz various parts of FRR]))
acfa8927
SW
463AC_ARG_ENABLE(netlink_fuzzing,
464 AS_HELP_STRING([--enable-netlink-fuzzing], [enable ability to fuzz netlink listening socket in zebra]))
76981cd3
DS
465AC_ARG_ENABLE(rr-semantics,
466 AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics]))
dad253b4
AS
467AC_ARG_ENABLE([protobuf],
468 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
28436d6d 469AC_ARG_ENABLE([oldvpn_commands],
fcc65b0f 470 AS_HELP_STRING([--enable-oldvpn-commands], [Keep old vpn commands]))
dabecd7c
MR
471AC_ARG_ENABLE(rpki,
472 AS_HELP_STRING([--enable-rpki], [enable RPKI prefix validation support]))
c71b8557
LC
473AC_ARG_ENABLE([clippy-only],
474 AS_HELP_STRING([--enable-clippy-only], [Only build clippy]))
c737c7ba
AJ
475AC_ARG_ENABLE([numeric_version],
476 AS_HELP_STRING([--enable-numeric-version], [Only numeric digits allowed in version (for Alpine)]))
83284209
AJ
477AC_ARG_ENABLE([gcov],
478 AS_HELP_STRING([--enable-gcov], [Add code coverage information]))
7134904b
RZ
479AC_ARG_ENABLE(bfdd,
480 AS_HELP_STRING([--disable-bfdd], [do not build bfdd]))
dbac691d
DL
481AC_ARG_ENABLE([address-sanitizer],
482 AS_HELP_STRING([--enable-address-sanitizer], [enable AddressSanitizer support for detecting a wide variety of memory allocation and deallocation errors]))
483AC_ARG_ENABLE([thread-sanitizer],
484 AS_HELP_STRING([--enable-thread-sanitizer], [enable ThreadSanitizer support for detecting data races]))
485AC_ARG_ENABLE([memory-sanitizer],
486 AS_HELP_STRING([--enable-memory-sanitizer], [enable MemorySanitizer support for detecting uninitialized memory reads]))
6b6942f9 487
c71b8557 488AS_IF([test "${enable_clippy_only}" != "yes"], [
112072ac 489AC_CHECK_HEADERS(json-c/json.h)
ea2fd55a 490AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c", [], [-lm])
39d3cc4e 491if test "$ac_cv_lib_json_c_json_object_get" = no; then
10b8ab26 492 AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
39d3cc4e 493 if test "$ac_cv_lib_json_json_object_get" = no; then
10b8ab26
DS
494 AC_MSG_ERROR([lib json is needed to compile])
495 fi
c2f4c19c 496fi
c71b8557 497])
c2f4c19c 498
3b8282a8
AS
499AC_ARG_ENABLE([dev_build],
500 AS_HELP_STRING([--enable-dev-build], [build for development]))
501
634949ae
DS
502AC_ARG_ENABLE([lua],
503 AS_HELP_STRING([--enable-lua], [Build Lua scripting]))
504
924b9229 505if test x"${enable_time_check}" != x"no" ; then
506 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
507 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
508 else
509 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
510 fi
511fi
512
37219958
DS
513case "${enable_systemd}" in
514 "no") ;;
515 "yes")
516 AC_CHECK_LIB(systemd, sd_notify, LIBS="$LIBS -lsystemd")
517 if test $ac_cv_lib_systemd_sd_notify = no; then
518 AC_MSG_ERROR([enable systemd has been specified but systemd development env not found on your system])
63e30864
DS
519 else
520 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
37219958
DS
521 fi
522 ;;
523 "*") ;;
524esac
ddd82ff6 525
76981cd3
DS
526if test "${enable_rr_semantics}" != "no" ; then
527 AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics)
528fi
529
df970aa6
DS
530if test "${enable_datacenter}" = "yes" ; then
531 AC_DEFINE(HAVE_DATACENTER,,Compile extensions for a DataCenter)
8efe88ea
DL
532 DFLT_NAME="datacenter"
533else
534 DFLT_NAME="traditional"
000cf1fb 535fi
df970aa6 536
411314ed
DS
537if test "${enable_fuzzing}" = "yes" ; then
538 AC_DEFINE(HANDLE_ZAPI_FUZZING,,Compile extensions to use with a fuzzer)
539fi
540
acfa8927
SW
541if test "${enable_netlink_fuzzing}" = "yes" ; then
542 AC_DEFINE(HANDLE_NETLINK_FUZZING,,Compile extensions to use with a fuzzer for netlink)
543fi
544
df970aa6
DS
545if test "${enable_cumulus}" = "yes" ; then
546 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
547fi
548
8efe88ea
DL
549AC_SUBST(DFLT_NAME)
550AC_DEFINE_UNQUOTED(DFLT_NAME,["$DFLT_NAME"], Name of the configuration default set)
000cf1fb 551
576b6b5d
DS
552if test "${enable_shell_access}" = "yes"; then
553 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
554fi
555
4f8ea50c 556AM_CONDITIONAL([FPM], [test "x$enable_fpm" = "xyes"])
5adc2528 557
29ad6f68
DL
558#
559# Python for clippy
560#
29ad6f68 561
0fca9cee
DL
562AC_DEFUN([FRR_PYTHON_CHECK_WORKING], [
563 AC_MSG_CHECKING([whether we found a working Python version])
564 AC_LINK_IFELSE_FLAGS([$PYTHON_CFLAGS], [$PYTHON_LIBS], [AC_LANG_PROGRAM([
29ad6f68
DL
565#include <Python.h>
566#if PY_VERSION_HEX < 0x02070000
567#error python too old
568#endif
569int main(void);
570],
571[
572{
573 Py_Initialize();
574 return 0;
575}
576])], [
0fca9cee
DL
577 # some python installs are missing the zlib dependency...
578 PYTHON_LIBS="${PYTHON_LIBS} -lz"
29ad6f68
DL
579 AC_LINK_IFELSE_FLAGS([$PYTHON_CFLAGS], [$PYTHON_LIBS], [AC_LANG_PROGRAM([
580#include <Python.h>
581#if PY_VERSION_HEX < 0x02070000
582#error python too old
583#endif
584int main(void);
585],
586[
587{
588 Py_Initialize();
589 return 0;
590}
591])], [
0fca9cee
DL
592 m4_if([$1], [], [
593 PYTHONCONFIG=""
594 unset PYTHON_LIBS
595 unset PYTHON_CFLAGS
596 ], [$1])
597 ])
598 ])
599])
600
601AS_IF([test "$host" = "$build"], [
602 PYTHONCONFIG=""
603
604 # ordering:
605 # 1. try python3, but respect the user's preference on which minor ver
606 # 2. try python, which might be py3 or py2 again on the user's preference
607 # 3. try python2 (can really only be 2.7 but eh)
608 # 4. try 3.6 > 3.5 > 3.4 > 3.3 > 3.2 > 2.7 through pkg-config (no user pref)
609 #
610 # (AX_PYTHON_DEVEL has no clue about py3 vs py2)
611 # (AX_PYTHON does not do what we need)
612
613 AC_CHECK_TOOLS([PYTHONCONFIG], [ \
614 python3-config \
615 python-config \
616 python2-config \
617 python3.6-config \
618 python3.5-config \
619 python3.4-config \
620 python3.3-config \
621 python3.2-config \
622 python2.7-config ])
623 if test -n "$PYTHONCONFIG"; then
624 PYTHON_CFLAGS="`\"${PYTHONCONFIG}\" --includes`"
625 PYTHON_LIBS="`\"${PYTHONCONFIG}\" --ldflags`"
626
627 FRR_PYTHON_CHECK_WORKING([])
628 fi
629
630 if test -z "$PYTHONCONFIG"; then
631 PKG_CHECK_MODULES([PYTHON], python-3.6, [], [
632 PKG_CHECK_MODULES([PYTHON], python-3.5, [], [
633 PKG_CHECK_MODULES([PYTHON], python-3.4, [], [
634 PKG_CHECK_MODULES([PYTHON], python-3.3, [], [
635 PKG_CHECK_MODULES([PYTHON], python-3.2, [], [
636 PKG_CHECK_MODULES([PYTHON], python-2.7, [], [
637 AC_MSG_FAILURE([could not find python-config or pkg-config python, please install Python development files from libpython-dev or similar])
638 ])])])])])])
639
640
641 FRR_PYTHON_CHECK_WORKING([
29ad6f68
DL
642 AC_MSG_FAILURE([could not find python-config or pkg-config python, please install Python development files from libpython-dev or similar])
643 ])
644 fi
645])
646AC_SUBST(PYTHON_CFLAGS)
647AC_SUBST(PYTHON_LIBS)
648
dad253b4
AS
649#
650# Logic for protobuf support.
651#
652if test "$enable_protobuf" = "yes"; then
2b2f275e
DL
653 # Check for protoc & protoc-c
654
655 # protoc is not required, it's only for a "be nice" helper target
656 AC_CHECK_PROGS([PROTOC], [protoc], [/bin/false])
657
658 AC_CHECK_PROGS([PROTOC_C], [protoc-c], [/bin/false])
659 if test "$PROTOC_C" = "/bin/false"; then
660 AC_MSG_FAILURE([protobuf requested but protoc-c not found. Install protobuf-c.])
661 fi
662
663 PKG_CHECK_MODULES([PROTOBUF_C], [libprotobuf-c >= 0.14],, [
664 AC_MSG_FAILURE([protobuf requested but libprotobuf-c not found. Install protobuf-c.])
665 ])
666 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [], [
667 AC_MSG_FAILURE([protobuf requested but protobuf-c.h not found. Install protobuf-c.])
668 ])
669
670 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
dad253b4 671fi
2b2f275e 672AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$enable_protobuf" = "xyes"])
dad253b4 673
28436d6d
PG
674#
675# Logic for old vpn commans support.
676#
fcc65b0f 677if test "$enable_oldvpn_commands" = "yes"; then
28436d6d
PG
678 AC_DEFINE(KEEP_OLD_VPN_COMMANDS,, [Define for compiling with old vpn commands])
679fi
680
dad253b4
AS
681#
682# End of logic for protobuf support.
683#
684
d2a0ccc6 685AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
686if test "${enable_rtadv}" != "no"; then
71c0fb50 687 AC_MSG_RESULT(yes)
d2a0ccc6 688 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
2487bea1 689else
690 AC_MSG_RESULT(no)
71c0fb50 691fi
7ea487bc 692
0b02a1b4
JAG
693if test x"${enable_user}" = x"no"; then
694 enable_user=""
695else
696 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
b2f36157 697 enable_user="frr"
0b02a1b4 698 fi
b2f36157 699 AC_DEFINE_UNQUOTED(FRR_USER, "${enable_user}", frr User)
edd7c245 700fi
edd7c245 701
0b02a1b4
JAG
702if test x"${enable_group}" = x"no"; then
703 enable_group=""
704else
705 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
b2f36157 706 enable_group="frr"
0b02a1b4 707 fi
b2f36157 708 AC_DEFINE_UNQUOTED(FRR_GROUP, "${enable_group}", frr Group)
edd7c245 709fi
edd7c245 710
711if test x"${enable_vty_group}" = x"yes" ; then
8d4aee5d 712 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
79cb2169 713elif test x"${enable_vty_group}" != x""; then
8d4aee5d 714 if test x"${enable_vty_group}" != x"no"; then
edd7c245 715 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
716 fi
717fi
26275b05 718AC_SUBST([enable_user])
719AC_SUBST([enable_group])
720AC_SUBST([enable_vty_group])
edd7c245 721
aa593d5e 722enable_configfile_mask=${enable_configfile_mask:-0600}
723AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
724
725enable_logfile_mask=${enable_logfile_mask:-0600}
726AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
727
7a6da5ba 728MPATH_NUM=1
7ea487bc 729
730case "${enable_multipath}" in
7c5d2b76 731 0)
7a6da5ba 732 MPATH_NUM=64
7c5d2b76 733 ;;
90fb3e13 734 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
7a6da5ba 735 MPATH_NUM="${enable_multipath}"
7ea487bc 736 ;;
737 "")
738 ;;
739 *)
6f0e3f6e 740 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
7ea487bc 741 ;;
742esac
743
7a6da5ba 744AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
7ea487bc 745
08c369bd
DS
746AC_DEFINE_UNQUOTED(VTYSH_PAGER, "$VTYSH_PAGER", [What pager to use])
747
83284209
AJ
748dnl --------------------
749dnl Enable code coverage
750dnl --------------------
751AM_CONDITIONAL([HAVE_GCOV],[test '!' "$enable_gcov" = no])
752
c737c7ba
AJ
753dnl ------------------------------------
754dnl Alpine only accepts numeric versions
755dnl ------------------------------------
756if test "x${enable_numeric_version}" != "x" ; then
757 VERSION="`echo ${VERSION} | tr -c -d '[[.0-9]]'`"
758 PACKAGE_VERSION="`echo ${PACKAGE_VERSION} | tr -c -d '[[.0-9]]'`"
759fi
760
1080c13f
JN
761dnl -----------------------------------
762dnl Add extra version string to package
763dnl name, string and version fields.
764dnl -----------------------------------
765if test "x${EXTRAVERSION}" != "x" ; then
0be793e6
DL
766 VERSION="${VERSION}${EXTRAVERSION}"
767 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
3ab11ecc 768 AC_SUBST(PACKAGE_EXTRAVERSION, ["${EXTRAVERSION}"])
0be793e6 769 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
1080c13f
JN
770fi
771
a16dcf7c
DL
772if test "x$with_pkg_git_version" = "xyes"; then
773 if test -d "${srcdir}/.git"; then
774 AC_DEFINE(GIT_VERSION, [1], [include git version info])
775 else with_pkg_git_version="no"
776 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
777 fi
778fi
779AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
0be793e6 780
42efb0d4
DL
781AC_CHECK_TOOL([OBJCOPY], [objcopy], [:])
782AC_CACHE_CHECK([for .interp value to use], [frr_cv_interp], [
783 frr_cv_interp=""
784 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])], [
785 if $OBJCOPY -j.interp -Obinary conftest conftest.interp; then
786 frr_cv_interp="`xargs -0 echo < conftest.interp`"
787 fi
788 test -f conftest.interp && rm conftest.interp
789 ])
790])
791if test -n "$frr_cv_interp"; then
792 AC_DEFINE_UNQUOTED(INTERP, ["$frr_cv_interp"], [.interp value])
793fi
794
6f0e3f6e
PJ
795dnl ------------------------------------
796dnl Check C keywords and standard types
797dnl ------------------------------------
798AC_C_CONST
799AC_C_INLINE
6f0e3f6e 800AC_C_VOLATILE
dc7a2bf1 801AC_HEADER_STDC
6f0e3f6e
PJ
802dnl AC_TYPE_PID_T
803AC_TYPE_UID_T
804AC_TYPE_MODE_T
805AC_TYPE_SIZE_T
6f0e3f6e 806AC_STRUCT_TM
dc7a2bf1 807
6f0e3f6e
PJ
808dnl -------------------------
809dnl Check other header files.
810dnl -------------------------
24f5e2fc
DL
811AC_CHECK_HEADERS([stropts.h sys/ksym.h \
812 linux/version.h asm/types.h \
813 sys/cdefs.h])
6f0e3f6e 814
899a4fd2
DL
815ac_stdatomic_ok=false
816AC_DEFINE(FRR_AUTOCONF_ATOMIC, 1, [did autoconf checks for atomic funcs])
817AC_CHECK_HEADER([stdatomic.h],[
818
819 AC_MSG_CHECKING([whether _Atomic qualifier works])
820 AC_LINK_IFELSE([AC_LANG_SOURCE([[
821#include <stdatomic.h>
822int main(int argc, char **argv) {
823 _Atomic int i = 0;
824 return i;
825}
826]])], [
827 AC_DEFINE(HAVE_STDATOMIC_H, 1, [found stdatomic.h])
828 AC_MSG_RESULT([yes])
829 ac_stdatomic_ok=true
830 ], [
831 AC_MSG_RESULT([no])
832 ])
833])
834
835AS_IF([$ac_stdatomic_ok], [true], [
836 AC_MSG_CHECKING([for __atomic_* builtins])
837 AC_LINK_IFELSE([AC_LANG_SOURCE([[
838int main(int argc, char **argv) {
839 volatile int i = 1;
840 __atomic_store_n (&i, 0, __ATOMIC_RELEASE);
841 return __atomic_load_n (&i, __ATOMIC_ACQUIRE);
842}
843]])], [
844 AC_DEFINE(HAVE___ATOMIC, 1, [found __atomic builtins])
845 AC_MSG_RESULT([yes])
846 ], [
847 AC_MSG_RESULT([no])
848
849 dnl FreeBSD 9 has a broken stdatomic.h where _Atomic doesn't work
850 AC_MSG_CHECKING([for __sync_* builtins])
851 AC_LINK_IFELSE([AC_LANG_SOURCE([[
852int main(int argc, char **argv) {
853 volatile int i = 1;
854 __sync_fetch_and_sub (&i, 1);
855 return __sync_val_compare_and_swap (&i, 0, 1);
856}
857]])], [
858 AC_DEFINE(HAVE___SYNC, 1, [found __sync builtins])
859 AC_MSG_RESULT([yes])
860
861 AC_MSG_CHECKING([for __sync_swap builtin])
862 AC_LINK_IFELSE([AC_LANG_SOURCE([[
863int main(int argc, char **argv) {
864 volatile int i = 1;
865 return __sync_swap (&i, 2);
866}
867]])], [
868 AC_DEFINE(HAVE___SYNC_SWAP, 1, [found __sync_swap builtin])
869 AC_MSG_RESULT([yes])
870 ], [
871 AC_MSG_RESULT([no])
872 ])
873
874 ], [
875 AC_MSG_RESULT([no])
876 AC_MSG_FAILURE([stdatomic.h unavailable and $CC has neither __atomic nor __sync builtins])
877 ])
878 ])
879])
880
324be174
DL
881AC_CHECK_HEADERS([pthread_np.h],,, [
882#include <pthread.h>
883])
e9d938b8 884AC_CHECK_FUNCS([pthread_setname_np pthread_set_name_np])
324be174 885
6f0e3f6e 886dnl Utility macro to avoid retyping includes all the time
8e4da10b 887m4_define([FRR_INCLUDES],
6f0e3f6e 888[#ifdef SUNOS_5
0718b562 889#define _POSIX_C_SOURCE 200809L
6f0e3f6e
PJ
890#define __EXTENSIONS__
891#endif
892#include <stdio.h>
24f5e2fc
DL
893#include <stdlib.h>
894#include <stddef.h>
895#include <sys/types.h>
6f0e3f6e 896/* sys/conf.h depends on param.h on FBSD at least */
24f5e2fc 897#include <sys/param.h>
6f0e3f6e 898/* Required for MAXSIG */
24f5e2fc
DL
899#include <signal.h>
900#include <sys/socket.h>
ea057677
HT
901#ifdef __APPLE__
902# define __APPLE_USE_RFC_3542
903#endif
24f5e2fc
DL
904#include <netinet/in.h>
905#include <sys/time.h>
906#include <time.h>
907#include <net/if.h>
2b43bf23
DO
908])dnl
909
910dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
911dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
912dnl an additional round for it.
913
8e4da10b 914AC_CHECK_HEADERS([net/if_var.h], [], [], FRR_INCLUDES)
2b43bf23 915
8e4da10b
DL
916m4_define([FRR_INCLUDES],
917FRR_INCLUDES
2b43bf23
DO
918[#if HAVE_NET_IF_VAR_H
919# include <net/if_var.h>
920#endif
921])dnl
922
24f5e2fc
DL
923AC_CHECK_HEADERS([netinet/in_var.h \
924 net/if_dl.h net/netopt.h \
925 inet/nd.h netinet/ip_icmp.h \
6f0e3f6e 926 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
8e4da10b 927 [], [], FRR_INCLUDES)
6f0e3f6e
PJ
928
929AC_CHECK_HEADERS([ucontext.h], [], [],
930[#ifndef __USE_GNU
931#define __USE_GNU
932#endif /* __USE_GNU */
8e4da10b 933FRR_INCLUDES
6f0e3f6e
PJ
934])
935
bccbd141
JT
936m4_define([UCONTEXT_INCLUDES],
937[#include <ucontext.h>])dnl
938
939AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
940 [], [], [UCONTEXT_INCLUDES])
941AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
942 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
943 [], [], [UCONTEXT_INCLUDES])],
944 [], [UCONTEXT_INCLUDES])
945AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
946 [], [], [UCONTEXT_INCLUDES])
947
8e4da10b
DL
948m4_define([FRR_INCLUDES],
949FRR_INCLUDES
24f5e2fc
DL
950[
951#include <sys/un.h>
952#include <netinet/in_systm.h>
6f0e3f6e
PJ
953#if HAVE_NETINET_IN_VAR_H
954# include <netinet/in_var.h>
955#endif
956#if HAVE_NET_IF_DL_H
957# include <net/if_dl.h>
958#endif
6f0e3f6e
PJ
959#if HAVE_NET_NETOPT_H
960# include <net/netopt.h>
961#endif
24f5e2fc 962#include <net/route.h>
6f0e3f6e
PJ
963#if HAVE_INET_ND_H
964# include <inet/nd.h>
965#endif
24f5e2fc 966#include <arpa/inet.h>
11770e10
PJ
967/* Required for IDRP */
968#if HAVE_NETINET_IP_ICMP_H
969# include <netinet/ip_icmp.h>
970#endif
6f0e3f6e 971])dnl
dc7a2bf1 972
fa3232e1 973dnl V6 headers are checked below, after we check for v6
7ea487bc 974
ddfeb486
DL
975AC_MSG_CHECKING([which operating system interface to use])
976case "$host_os" in
977 sunos* | solaris2*)
978 AC_MSG_RESULT([Solaris])
979
980 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
981 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
0718b562 982 AC_DEFINE(_POSIX_C_SOURCE, 200809L, [enable POSIX.1-2008 and XPG7/SUSv4])
ddfeb486
DL
983
984 AC_CHECK_LIB(socket, main)
985 AC_CHECK_LIB(nsl, main)
986 AC_CHECK_LIB(umem, main)
ddfeb486
DL
987 CURSES=-lcurses
988 SOLARIS="solaris"
989 ;;
990 linux*)
991 AC_MSG_RESULT([Linux])
992
993 AC_DEFINE(GNU_LINUX,,GNU Linux)
994 AC_DEFINE(HAVE_NETLINK,,netlink)
995 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
996
997 dnl Linux has a compilation problem with mixing
998 dnl netinet/in.h and linux/in6.h they are not
999 dnl compatible. There has been discussion on
1000 dnl how to fix it but no real progress on implementation
1001 dnl when they fix it, remove this
1002 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
ddfeb486
DL
1003 ;;
1004 openbsd*)
1005 AC_MSG_RESULT([OpenBSD])
1006
1007 AC_DEFINE(OPEN_BSD,,OpenBSD)
1008 AC_DEFINE(KAME,1,KAME IPv6)
d616d639 1009 AC_DEFINE(BSD_V6_SYSCTL,1,BSD v6 sysctl to turn on and off forwarding)
004174c7
JAG
1010
1011 if test "x${enable_pimd}" != "xno"; then
1012 case "$host_os" in
1013 openbsd6.0)
1014 ;;
1015 openbsd[6-9]*)
1016 AC_MSG_FAILURE([pimd cannot be enabled as PIM support has been removed from OpenBSD 6.1])
1017 ;;
1018 esac
1019 fi
ddfeb486
DL
1020 ;;
1021 *)
1022 AC_MSG_RESULT([BSD])
1023
1024 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
1025 AC_DEFINE(KAME,1,KAME IPv6)
d616d639 1026 AC_DEFINE(BSD_V6_SYSCTL,1,BSD v6 sysctl to turn on and off forwarding)
ddfeb486 1027 ;;
7ea487bc 1028esac
0fb07d51 1029AM_CONDITIONAL(SOLARIS, test "${SOLARIS}" = "solaris")
7ea487bc 1030
62c9f504
PJ
1031AC_SYS_LARGEFILE
1032
4e40b6d6
KK
1033dnl ------------------------
1034dnl Integrated REALMS option
1035dnl ------------------------
1036if test "${enable_realms}" = "yes"; then
1037 case "$host_os" in
1038 linux*)
1039 AC_DEFINE(SUPPORT_REALMS,, Realms support)
1040 ;;
1041 *)
1042 echo "Sorry, only Linux has REALMS support"
1043 exit 1
1044 ;;
1045 esac
1046fi
1047AM_CONDITIONAL([SUPPORT_REALMS], [test "${enable_realms}" = "yes"])
1048
7ea487bc 1049dnl ---------------------
1050dnl Integrated VTY option
1051dnl ---------------------
1052case "${enable_vtysh}" in
f0646db0
DS
1053 "no") VTYSH="";;
1054 *) VTYSH="vtysh";
7ea487bc 1055 AC_DEFINE(VTYSH,,VTY shell)
fc9d0745 1056dnl Vtysh uses libreadline, which looks for termcap functions at
6f0e3f6e 1057dnl configure time. We follow readlines search order.
fc9d0745 1058dnl The required procedures are in libtermcap on NetBSD, in
1059dnl [TODO] on Linux, and in [TODO] on Solaris.
c0689394 1060 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
a969459c 1061 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
1062 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
1063 [AC_CHECK_LIB(ncurses, tputs,
1064 LIBREADLINE="$LIBREADLINE -lncurses")]
1065 )]
1066 )]
1067 )
4c2f8e95 1068 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
a969459c 1069 "$LIBREADLINE")
7ea487bc 1070 if test $ac_cv_lib_readline_main = no; then
fc9d0745 1071 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
7ea487bc 1072 fi
1073 AC_CHECK_HEADER(readline/history.h)
1074 if test $ac_cv_header_readline_history_h = no;then
1075 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
1076 fi
a969459c 1077 AC_CHECK_LIB(readline, rl_completion_matches,
1078 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
3d3de8c4 1079 if test $ac_cv_lib_readline_rl_completion_matches = no; then
1080 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
1081 fi
8860ffdc
DS
1082 AC_SEARCH_LIBS([append_history], [readline], [frr_cv_append_history=yes], [frr_cv_append_history=no])
1083 if test "$frr_cv_append_history" = yes; then
1084 AC_DEFINE(HAVE_APPEND_HISTORY, 1, [Have history.h append_history])
1085 fi
3d3de8c4 1086 ;;
7ea487bc 1087esac
c0689394 1088AC_SUBST(LIBREADLINE)
f027d331 1089AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
7ea487bc 1090
1091dnl ----------
1092dnl PAM module
6159928d 1093dnl
1689cf7e 1094dnl FRR detects the PAM library it is built against by checking for a
6159928d
DO
1095dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
1096dnl is known to #include pam_appl.h, the standard header of a PAM library, and
1097dnl openpam.h doesn't do that, although depends on the header too. Hence a
1098dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
1099dnl of OpenPAM.
7ea487bc 1100dnl ----------
24cd435b 1101if test "$with_libpam" = "yes"; then
6f0e3f6e
PJ
1102 AC_CHECK_HEADER([security/pam_misc.h],
1103 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
1104 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
1105 pam_conv_func="misc_conv"
1106 ],
8e4da10b 1107 [], FRR_INCLUDES)
6f0e3f6e
PJ
1108 AC_CHECK_HEADER([security/openpam.h],
1109 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
1110 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
1111 pam_conv_func="openpam_ttyconv"
1112 ],
8e4da10b 1113 [], FRR_INCLUDES[#include <security/pam_appl.h>])
24cd435b 1114 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
1115 AC_MSG_WARN([*** pam support will not be built ***])
1116 with_libpam="no"
1117 fi
1118fi
1119
7ea487bc 1120if test "$with_libpam" = "yes"; then
6f0e3f6e 1121dnl took this test from proftpds configure.in and suited to our needs
7ea487bc 1122dnl -------------------------------------------------------------------------
1123dnl
1124dnl This next check looks funky due to a linker problem with some versions
1125dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
1126dnl omitted requiring libdl linking information. PAM-0.72 or better ships
1127dnl with RedHat 6.2 and Debian 2.2 or better.
1128AC_CHECK_LIB(pam, pam_start,
24cd435b 1129 [AC_CHECK_LIB(pam, $pam_conv_func,
7ea487bc 1130 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1131 LIBPAM="-lpam"],
1132 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1133 LIBPAM="-lpam -lpam_misc"]
1134 )
1135 ],
1136
1137 [AC_CHECK_LIB(pam, pam_end,
24cd435b 1138 [AC_CHECK_LIB(pam, $pam_conv_func,
a159ed93 1139 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
7ea487bc 1140 LIBPAM="-lpam -ldl"],
a159ed93 1141 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
7ea487bc 1142 LIBPAM="-lpam -ldl -lpam_misc"]
1143 )
1144 ],AC_MSG_WARN([*** pam support will not be built ***]),
1145 [-ldl])
1146 ]
1147)
1148fi
1149AC_SUBST(LIBPAM)
1150
1151dnl -------------------------------
1152dnl Endian-ness check
1153dnl -------------------------------
1154AC_WORDS_BIGENDIAN
1155
1156dnl -------------------------------
1157dnl check the size in byte of the C
1158dnl -------------------------------
1159dnl AC_CHECK_SIZEOF(char)
1160dnl AC_CHECK_SIZEOF(int)
1161dnl AC_CHECK_SIZEOF(short)
1162dnl AC_CHECK_SIZEOF(long)
1163
1164dnl ----------------------------
1165dnl check existance of functions
1166dnl ----------------------------
6f0e3f6e
PJ
1167AC_FUNC_FNMATCH
1168AC_FUNC_FORK
6f0e3f6e 1169AC_FUNC_MKTIME
6f0e3f6e 1170AC_FUNC_STAT
6f0e3f6e
PJ
1171
1172dnl -------------------------------
1173dnl bgpd needs pow() and hence libm
1174dnl -------------------------------
1175TMPLIBS="$LIBS"
1176AC_CHECK_HEADER([math.h],
1177 [AC_CHECK_LIB([m], [pow],
1178 [LIBM="-lm"
1179 LIBS="$LIBS $LIBM"
6f0e3f6e
PJ
1180 AC_CHECK_FUNCS(pow,[],[LIBM=""])
1181 ])
1182])
1183if test x"$LIBM" = x ; then
1184 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
1185fi
1186LIBS="$TMPLIBS"
634949ae 1187
6f0e3f6e
PJ
1188AC_SUBST(LIBM)
1189
154b9e8f
DL
1190AC_CHECK_FUNCS([ppoll], [
1191 AC_DEFINE([HAVE_PPOLL], 1, [have Linux/BSD ppoll()])
1192])
1193AC_CHECK_FUNCS([pollts], [
1194 AC_DEFINE([HAVE_POLLTS], 1, [have NetBSD pollts()])
1195])
1196
6f0e3f6e
PJ
1197dnl ---------------
1198dnl other functions
1199dnl ---------------
24f5e2fc
DL
1200AC_CHECK_FUNCS([ \
1201 strlcat strlcpy \
316d0ae5 1202 getgrouplist])
6f0e3f6e 1203
13460c44
FL
1204AC_CHECK_HEADER([asm-generic/unistd.h],
1205 [AC_CHECK_DECL(__NR_setns,
1206 AC_DEFINE(HAVE_NETNS,, Have netns),,
8e4da10b 1207 FRR_INCLUDES [#include <asm-generic/unistd.h>
13460c44 1208 ])
428cd73f 1209 AC_CHECK_FUNCS(setns)]
13460c44
FL
1210 )
1211
238497fc
PJ
1212dnl --------------------------
1213dnl Determine IS-IS I/O method
1214dnl --------------------------
745bf05f
DL
1215AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
1216AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
1217AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
238497fc
PJ
1218AC_CHECK_HEADER(net/bpf.h)
1219AC_CHECK_HEADER(sys/dlpi.h)
1220AC_MSG_CHECKING(zebra IS-IS I/O method)
ddfeb486
DL
1221
1222case "$host_os" in
1223 linux*)
1224 AC_MSG_RESULT(pfpacket)
1225 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
1226 ;;
1227 solaris* | sunos*)
1228 AC_MSG_RESULT(DLPI)
1229 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
1230 ;;
1231 *)
1232 if test $ac_cv_header_net_bpf_h = no; then
1233 if test $ac_cv_header_sys_dlpi_h = no; then
1234 AC_MSG_RESULT(none)
7c0cbd0e 1235 if test "${enable_isisd}" = yes -o "${enable_fabricd}" = yes; then
86e463cf
DL
1236 AC_MSG_FAILURE([IS-IS support requested but no packet backend found])
1237 fi
ddfeb486 1238 AC_MSG_WARN([*** IS-IS support will not be built ***])
86e463cf 1239 enable_isisd="no"
7c0cbd0e 1240 enable_fabricd="no"
ddfeb486
DL
1241 else
1242 AC_MSG_RESULT(DLPI)
1243 fi
1244 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
238497fc 1245 else
ddfeb486
DL
1246 AC_MSG_RESULT(BPF)
1247 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
238497fc 1248 fi
ddfeb486
DL
1249 ;;
1250esac
745bf05f 1251AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
238497fc 1252
42c98199 1253dnl ---------------------------------------------------------------
1254dnl figure out how to specify an interface in multicast sockets API
1255dnl ---------------------------------------------------------------
8e4da10b 1256AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
42c98199 1257
b3f2bf7c 1258AC_CHECK_HEADERS([linux/mroute.h], [], [],[
24f5e2fc
DL
1259 #include <sys/socket.h>
1260 #include <netinet/in.h>
b3f2bf7c
RW
1261 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
1262 #include <linux/types.h>
1263])
1264
8e4da10b
DL
1265m4_define([FRR_INCLUDES],
1266FRR_INCLUDES
b3f2bf7c
RW
1267[#if HAVE_LINUX_MROUTE_H
1268# include <linux/mroute.h>
1269#endif
1270])dnl
1271
1272AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
24f5e2fc
DL
1273 #include <sys/socket.h>
1274 #include <sys/types.h>
1275 #include <netinet/in.h>
1276 #include <net/route.h>
b3f2bf7c
RW
1277])
1278
8e4da10b
DL
1279m4_define([FRR_INCLUDES],
1280FRR_INCLUDES
b3f2bf7c
RW
1281[#if HAVE_NETINET_IP_MROUTE_H
1282# include <netinet/ip_mroute.h>
1283#endif
1284])dnl
1285
42c98199 1286AC_MSG_CHECKING([for BSD struct ip_mreq hack])
24f5e2fc
DL
1287AC_TRY_COMPILE([#include <sys/param.h>],
1288[#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)
42c98199 1289 return (0);
1290#else
1291 #error No support for BSD struct ip_mreq hack detected
1292#endif],[AC_MSG_RESULT(yes)
1293AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1294AC_MSG_RESULT(no))
1295
10d04cdb
DT
1296AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1297AC_TRY_COMPILE([
1298#include <sys/types.h>
1299#include <netinet/in.h>
1300], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1301], [AC_MSG_RESULT(yes)
1302AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1303AC_MSG_RESULT(no))
1304
c543a173
AS
1305dnl ---------------------------------------------------------------
1306dnl figure out how to check link-state
1307dnl ---------------------------------------------------------------
24f5e2fc
DL
1308AC_CHECK_HEADER( [net/if_media.h],
1309 [m4_define([LINK_DETECT_INCLUDES],
8e4da10b 1310 FRR_INCLUDES
24f5e2fc
DL
1311 [#include <net/if_media.h>
1312 ])
1313 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1314 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1315 [], LINK_DETECT_INCLUDES)],
1316 [],
8e4da10b 1317 FRR_INCLUDES)
c543a173 1318
9234b382
DV
1319dnl ---------------------------------------------------------------
1320dnl Additional, newer way to check link-state using ifi_link_state.
1321dnl Not available in all BSD's when ifmediareq available
1322dnl ---------------------------------------------------------------
24f5e2fc
DL
1323AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1324 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
8e4da10b 1325 [], FRR_INCLUDES)
9234b382 1326
0df7c91f
PJ
1327dnl ------------------------
1328dnl TCP_MD5SIG socket option
1329dnl ------------------------
1330
1331AC_CHECK_HEADER([netinet/tcp.h],
1332 [m4_define([MD5_INCLUDES],
8e4da10b 1333 FRR_INCLUDES
0df7c91f
PJ
1334 [#include <netinet/tcp.h>
1335 ])
1336 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1337 [],
8e4da10b 1338 FRR_INCLUDES)
0df7c91f
PJ
1339if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1340 AC_CHECK_HEADER([linux/tcp.h],
1341 [m4_define([MD5_INCLUDES],
8e4da10b 1342 FRR_INCLUDES
0df7c91f
PJ
1343 [#include <linux/tcp.h>
1344 ])
1345 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1346fi
1347
60060acc
RW
1348dnl ----------------------------------------------------------------------------
1349dnl figure out if domainname is available in the utsname struct (GNU extension).
1350dnl ----------------------------------------------------------------------------
1351AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1352
fa3232e1 1353dnl ------------------
1354dnl IPv6 header checks
1355dnl ------------------
24f5e2fc 1356AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
6f0e3f6e 1357 netinet6/in6_var.h netinet6/nd6.h], [], [],
8e4da10b 1358 FRR_INCLUDES)
fa3232e1 1359
8e4da10b
DL
1360m4_define([FRR_INCLUDES],dnl
1361FRR_INCLUDES
6f0e3f6e
PJ
1362[#if HAVE_NETINET6_IN6_H
1363#include <netinet6/in6.h>
1364#endif
1365#if HAVE_NETINET_IN6_VAR_H
1366#include <netinet/in6_var.h>
1367#endif
24f5e2fc 1368#include <netinet/icmp6.h>
6f0e3f6e
PJ
1369#if HAVE_NETINET6_IN6_VAR_H
1370# include <netinet6/in6_var.h>
1371#endif
1372#if HAVE_NETINET6_ND6_H
fbf24544 1373# include <netinet6/nd6.h>
6f0e3f6e
PJ
1374#endif
1375])dnl
1376
cbcd9bfc 1377dnl disable doc check
f4f2f2cc
DL
1378AC_CHECK_PROGS([SPHINXBUILD], [sphinx-build sphinx-build3 sphinx-build2], [/bin/false])
1379if test "$SPHINXBUILD" = "/bin/false"; then
1380 if test "${enable_doc}" = "yes"; then
1381 AC_MSG_ERROR([Documentation was explicitly requested with --enable-doc but sphinx-build is not available. Please disable docs or install sphinx.])
1382 fi
1383fi
1384AM_CONDITIONAL(DOC, test "${enable_doc}" != "no" -a "$SPHINXBUILD" != "/bin/false")
50dc6dbd 1385AM_CONDITIONAL(DOC_HTML, test "${enable_doc_html}" = "yes")
cbcd9bfc 1386
7ea487bc 1387dnl --------------------
1388dnl Daemon disable check
1389dnl --------------------
64d44794 1390AM_CONDITIONAL(ZEBRA, test "${enable_zebra}" != "no")
7ea487bc 1391
1392if test "${enable_bgpd}" = "no";then
1393 BGPD=""
1394else
1395 BGPD="bgpd"
1396fi
f027d331 1397AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
7ea487bc 1398
7f269117 1399AM_CONDITIONAL(RIPD, test "${enable_ripd}" != "no")
afca0690 1400AM_CONDITIONAL(OSPFD, test "${enable_ospfd}" != "no")
30237d29 1401AM_CONDITIONAL(LDPD, test "${enable_ldpd}" != "no")
7ea487bc 1402
30237d29 1403AS_IF([test "${enable_ldpd}" != "no"], [
87ab4aec 1404 AC_DEFINE(HAVE_LDPD, 1, ldpd)
30237d29 1405])
eac6e3f0 1406
7134904b
RZ
1407if test "$enable_bfdd" = "no"; then
1408 AC_DEFINE(HAVE_BFDD, 0, bfdd)
1409 BFDD=""
1410else
1411 AC_DEFINE(HAVE_BFDD, 1, bfdd)
1412 BFDD="bfdd"
1413
1414 case $host_os in
1415 linux*)
1416 AC_DEFINE(BFD_LINUX, 1, bfdd)
1417 ;;
1418
1419 *)
1420 AC_DEFINE(BFD_BSD, 1, bfdd)
1421 ;;
1422 esac
1423fi
1424
1425AM_CONDITIONAL(BFDD, [test "x$BFDD" = "xbfdd"])
1426
39d3cc4e 1427if test "$ac_cv_lib_json_c_json_object_get" = no -a "x$BFDD" = "xbfdd"; then
7134904b
RZ
1428 AC_MSG_ERROR(["you must use json-c library to use bfdd"])
1429fi
1430
42350cfc 1431NHRPD=""
ddfeb486
DL
1432case "$host_os" in
1433 linux*)
1434 if test "${enable_nhrpd}" != "no"; then
1435 NHRPD="nhrpd"
1436 fi
1437 ;;
1438 *)
1439 if test "${enable_nhrpd}" = "yes"; then
1440 AC_MSG_ERROR([nhrpd requires kernel APIs that are only present on Linux.])
1441 fi
1442 ;;
1443esac
2fb975da
TT
1444AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1445
b6f5781c 1446AM_CONDITIONAL(EIGRPD, test "${enable_eigrpd}" != "no")
7f57883e 1447
9473e340
DS
1448if test "${enable_watchfrr}" = "no";then
1449 WATCHFRR=""
d0199430 1450else
9473e340 1451 WATCHFRR="watchfrr"
d0199430 1452fi
9473e340 1453AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
d0199430 1454
1ef74ef7 1455OSPFCLIENT=""
cd66cd4c 1456if test "${enable_ospfapi}" != "no";then
9a569848 1457 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1ef74ef7 1458
cd66cd4c 1459 if test "${enable_ospfclient}" != "no";then
1ef74ef7 1460 OSPFCLIENT="ospfclient"
1ef74ef7 1461 fi
7ea487bc 1462fi
cd66cd4c 1463
f027d331 1464AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
7f269117 1465AM_CONDITIONAL(RIPNGD, test "${enable_ripngd}" != "no")
b6f5781c 1466AM_CONDITIONAL(BABELD, test "${enable_babeld}" != "no")
afca0690 1467AM_CONDITIONAL(OSPF6D, test "${enable_ospf6d}" != "no")
86e463cf 1468AM_CONDITIONAL(ISISD, test "${enable_isisd}" != "no")
35a3c3c1 1469AM_CONDITIONAL(PIMD, test "${enable_pimd}" != "no")
e5c83d9b 1470AM_CONDITIONAL(PBRD, test "${enable_pbrd}" != "no")
2222a716 1471AM_CONDITIONAL(SHARPD, test "${enable_sharpd}" = "yes")
7e24fdf3 1472AM_CONDITIONAL(STATICD, test "${enable_staticd}" != "no")
7c0cbd0e 1473AM_CONDITIONAL(FABRICD, test "${enable_fabricd}" != "no")
12e41d03 1474
7ea487bc 1475if test "${enable_bgp_announce}" = "no";then
750e8146
PJ
1476 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1477else
1478 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
7ea487bc 1479fi
1480
f95f2ad9 1481if test "${enable_bgp_vnc}" != "no";then
65efcfce 1482 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
65efcfce 1483fi
f95f2ad9 1484AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
65efcfce 1485
97cee877 1486AC_SUBST(SOLARIS)
7ea487bc 1487AC_SUBST(CURSES)
f9e75524
JAG
1488AC_CHECK_LIB(crypt, crypt, [],
1489 [AC_CHECK_LIB(crypto, DES_crypt)])
7ea487bc 1490AC_CHECK_LIB(resolv, res_init)
7ea487bc 1491
25f45887
JJ
1492dnl ---------------------------
1493dnl check system has PCRE regexp
1494dnl ---------------------------
1495if test "x$enable_pcreposix" = "xyes"; then
ad9a0825
DL
1496 AC_CHECK_LIB(pcreposix, regexec, [], [
1497 AC_MSG_ERROR([--enable-pcreposix given but unable to find libpcreposix])
1498 ])
25f45887 1499fi
25f45887 1500AC_SUBST(HAVE_LIBPCREPOSIX)
7ea487bc 1501
2fb975da
TT
1502dnl ------------------
1503dnl check C-Ares library
1504dnl ------------------
42350cfc 1505if test "${NHRPD}" != ""; then
92e50261
DL
1506 PKG_CHECK_MODULES([CARES], [libcares], , [
1507 AC_MSG_ERROR([trying to build nhrpd, but libcares not found. install c-ares and its -dev headers.])
1508 ])
2fb975da
TT
1509fi
1510
1511
7ea487bc 1512dnl ------------------
b1fc9acb 1513dnl check Net-SNMP library
7ea487bc 1514dnl ------------------
53b99735 1515if test "${enable_snmp}" != "" -a "${enable_snmp}" != "no"; then
08d7f653
VB
1516 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1517 if test x"$NETSNMP_CONFIG" = x"no"; then
1518 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1519 fi
46081234
DL
1520 SNMP_LIBS="`${NETSNMP_CONFIG} --agent-libs`"
1521 SNMP_CFLAGS="`${NETSNMP_CONFIG} --base-cflags`"
08d7f653 1522 AC_MSG_CHECKING([whether we can link to Net-SNMP])
92e50261 1523 AC_LINK_IFELSE_FLAGS([$SNMP_CFLAGS], [$SNMP_LIBS], [AC_LANG_PROGRAM([
08d7f653
VB
1524int main(void);
1525],
1526[
1527{
1528 return 0;
1529}
92e50261 1530])], [
08d7f653 1531 AC_MSG_ERROR([--enable-snmp given but not usable])])
d6be5fb9
VB
1532 case "${enable_snmp}" in
1533 yes)
1534 SNMP_METHOD=agentx
1535 ;;
807ed4e9 1536 agentx)
d6be5fb9
VB
1537 SNMP_METHOD="${enable_snmp}"
1538 ;;
1539 *)
807ed4e9 1540 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use yes or agentx])
d6be5fb9
VB
1541 ;;
1542 esac
d6be5fb9
VB
1543 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1544 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
6cf9df08 1545fi
46081234
DL
1546AM_CONDITIONAL([SNMP], [test "x${SNMP_METHOD}" != "x"])
1547AC_SUBST(SNMP_LIBS)
1548AC_SUBST(SNMP_CFLAGS)
6cf9df08 1549
4db0cff1
QY
1550dnl ---------------
1551dnl math
1552dnl ---------------
1553AC_SEARCH_LIBS([sqrt], [m])
1554
b249c083
DL
1555dnl ---------------
1556dnl dlopen & dlinfo
1557dnl ---------------
30771d65
DL
1558AC_SEARCH_LIBS(dlopen, [dl dld], [], [
1559 AC_MSG_ERROR([unable to find the dlopen()])
1560])
1561
b249c083
DL
1562AC_CHECK_HEADERS([link.h])
1563
2a636b43
DL
1564AC_CACHE_CHECK([for dlinfo(RTLD_DI_ORIGIN)], [frr_cv_rtld_di_origin], [
1565 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
b249c083
DL
1566#include <stdlib.h>
1567#ifdef HAVE_LINK_H
1568#include <link.h>
1569#endif
1570#include <dlfcn.h>
1571]], [[
1572 char origin[1];
1573 dlinfo (NULL, RTLD_DI_ORIGIN, &origin);
1574]])], [
2a636b43
DL
1575 frr_cv_rtld_di_origin=yes
1576 ], [
1577 frr_cv_rtld_di_origin=no
1578 ])
b249c083 1579])
2a636b43
DL
1580if test "$frr_cv_rtld_di_origin" = yes; then
1581 AC_DEFINE(HAVE_DLINFO_ORIGIN, 1, [Have dlinfo RTLD_DI_ORIGIN])
1582fi
b249c083 1583
2a636b43
DL
1584AC_CACHE_CHECK([for dlinfo(RTLD_DI_LINKMAP)], [frr_cv_rtld_di_linkmap], [
1585 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
b249c083
DL
1586#include <stdlib.h>
1587#ifdef HAVE_LINK_H
1588#include <link.h>
1589#endif
1590#include <dlfcn.h>
1591]], [[
1592 struct link_map *lm = NULL;
1593 dlinfo (NULL, RTLD_DI_LINKMAP, &lm);
1594]])], [
2a636b43
DL
1595 frr_cv_rtld_di_linkmap=yes
1596 ], [
1597 frr_cv_rtld_di_linkmap=no
1598 ])
b249c083 1599])
2a636b43
DL
1600if test "$frr_cv_rtld_di_linkmap" = yes; then
1601 AC_DEFINE(HAVE_DLINFO_LINKMAP, 1, [Have dlinfo RTLD_DI_LINKMAP])
1602fi
6cf9df08 1603
62ff928b
DS
1604AM_CONDITIONAL(SNMP, test "x$SNMP_METHOD" = "xagentx")
1605
7ea487bc 1606dnl ---------------------------
6f0e3f6e 1607dnl sockaddr and netinet checks
7ea487bc 1608dnl ---------------------------
24f5e2fc
DL
1609AC_CHECK_TYPES([
1610 struct sockaddr_dl,
1611 struct vifctl, struct mfcctl, struct sioc_sg_req,
12e41d03 1612 vifi_t, struct sioc_vif_req, struct igmpmsg,
6f0e3f6e
PJ
1613 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1614 struct nd_opt_adv_interval, struct rt_addrinfo,
11770e10 1615 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
8e4da10b 1616 [], [], FRR_INCLUDES)
6f0e3f6e
PJ
1617
1618AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1619 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
ca3ccd87 1620 struct sockaddr_dl.sdl_len,
6f0e3f6e
PJ
1621 struct if6_aliasreq.ifra_lifetime,
1622 struct nd_opt_adv_interval.nd_opt_ai_type],
8e4da10b 1623 [], [], FRR_INCLUDES)
29c4c9bd 1624
6f0e3f6e 1625dnl ---------------------------
11770e10 1626dnl IRDP/pktinfo/icmphdr checks
6f0e3f6e 1627dnl ---------------------------
8dc1f7fc
DL
1628
1629AC_CHECK_TYPES([struct in_pktinfo], [
1630 AC_CHECK_TYPES([struct icmphdr], [
1631 IRDP=true
1632 ], [
1633 IRDP=false
1634 ], [FRR_INCLUDES])
1635], [
1636 IRDP=false
1637], [FRR_INCLUDES])
1638
1639case "${enable_irdp}" in
1640yes)
1641 $IRDP || AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1642 ;;
1643no)
1644 IRDP=false
1645 ;;
1646esac
1647
1648AM_CONDITIONAL(IRDP, $IRDP)
29c4c9bd 1649
12e41d03
DL
1650dnl -----------------------
1651dnl checking for IP_PKTINFO
1652dnl -----------------------
1653AC_MSG_CHECKING(for IP_PKTINFO)
1654AC_TRY_COMPILE([#include <netdb.h>], [
1655 int opt = IP_PKTINFO;
1656], [
1657 AC_MSG_RESULT(yes)
1658 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1659], [
1660 AC_MSG_RESULT(no)
1661])
1662
1663dnl ---------------------------
1664dnl checking for IP_RECVDSTADDR
1665dnl ---------------------------
1666AC_MSG_CHECKING(for IP_RECVDSTADDR)
1667AC_TRY_COMPILE([#include <netinet/in.h>], [
1668 int opt = IP_RECVDSTADDR;
1669], [
1670 AC_MSG_RESULT(yes)
1671 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1672], [
1673 AC_MSG_RESULT(no)
1674])
1675
1676dnl ----------------------
1677dnl checking for IP_RECVIF
1678dnl ----------------------
1679AC_MSG_CHECKING(for IP_RECVIF)
1680AC_TRY_COMPILE([#include <netinet/in.h>], [
1681 int opt = IP_RECVIF;
1682], [
1683 AC_MSG_RESULT(yes)
1684 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1685], [
1686 AC_MSG_RESULT(no)
1687])
1688
eac6e3f0
RW
1689dnl ----------------------
1690dnl checking for SO_BINDANY
1691dnl ----------------------
1692AC_MSG_CHECKING(for SO_BINDANY)
1693AC_TRY_COMPILE([#include <sys/socket.h>], [
1694 int opt = SO_BINDANY;
1695], [
1696 AC_MSG_RESULT(yes)
1697 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1698], [
1699 AC_MSG_RESULT(no)
1700])
1701
1702dnl ----------------------
1703dnl checking for IP_FREEBIND
1704dnl ----------------------
1705AC_MSG_CHECKING(for IP_FREEBIND)
1706AC_TRY_COMPILE([#include <netinet/in.h>], [
1707 int opt = IP_FREEBIND;
1708], [
1709 AC_MSG_RESULT(yes)
1710 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1711], [
1712 AC_MSG_RESULT(no)
1713])
1714
ba0cb3fe
DS
1715dnl --------------------------------------
1716dnl checking for be32dec existence or not
1717dnl --------------------------------------
1718AC_CHECK_DECLS([be32enc, be32dec], [], [],
1719 [#include <sys/endian.h>])
1720
c4376c9d
SH
1721dnl --------------------------------------
1722dnl checking for clock_time monotonic struct and call
1723dnl --------------------------------------
6511cab2
PJ
1724AC_CHECK_DECL(CLOCK_MONOTONIC,
1725 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
9964fcfc 1726 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
8e4da10b 1727], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
c4376c9d 1728
bbf5ffa0
QY
1729dnl --------------------------------------
1730dnl checking for flex and bison
1731dnl --------------------------------------
4a06690f 1732
bbf5ffa0 1733AM_PROG_LEX
4a06690f 1734AC_MSG_CHECKING(version of flex)
1689cf7e
JAG
1735frr_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
1736frr_ac_flex_version="${frr_ac_flex_version##* }"
1737AC_MSG_RESULT([$frr_ac_flex_version])
1738AX_COMPARE_VERSION([$frr_ac_flex_version], [lt], [2.5.20], [
4a06690f
DL
1739 LEX="$SHELL $missing_dir/missing flex"
1740 if test -f "${srcdir}/lib/command_lex.c" -a -f "${srcdir}/lib/command_lex.h"; then
1741 AC_MSG_WARN([using pregenerated flex output files])
1742 else
1743 AC_MSG_ERROR([flex failure and pregenerated files not included (probably a git build)])
1744 fi
1745 AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
1746 AC_SUBST([LEXLIB], [''])
1747])
0d37f9f3 1748
bbf5ffa0 1749AC_PROG_YACC
0d37f9f3
DL
1750dnl thanks GNU bison for this b*llshit...
1751AC_MSG_CHECKING(version of bison)
1689cf7e
JAG
1752frr_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
1753frr_ac_bison_version="${frr_ac_bison_version##* }"
1754frr_ac_bison_missing="false"
1755case "x${frr_ac_bison_version}" in
0d37f9f3
DL
1756 x2.7*)
1757 BISON_OPENBRACE='"'
1758 BISON_CLOSEBRACE='"'
05dbb7df 1759 BISON_VERBOSE=''
1689cf7e 1760 AC_MSG_RESULT([$frr_ac_bison_version - 2.7 or older])
0d37f9f3
DL
1761 ;;
1762 x2.*|x1.*)
1689cf7e 1763 AC_MSG_RESULT([$frr_ac_bison_version])
0d37f9f3 1764 AC_MSG_WARN([installed bison is too old. Please install GNU bison 2.7.x or newer.])
1689cf7e 1765 frr_ac_bison_missing="true"
0d37f9f3
DL
1766 ;;
1767 x)
1768 AC_MSG_RESULT([none])
1769 AC_MSG_WARN([could not determine bison version. Please install GNU bison 2.7.x or newer.])
1689cf7e 1770 frr_ac_bison_missing="true"
0d37f9f3
DL
1771 ;;
1772 *)
1773 BISON_OPENBRACE='{'
1774 BISON_CLOSEBRACE='}'
05dbb7df 1775 BISON_VERBOSE='-Dparse.error=verbose'
1689cf7e 1776 AC_MSG_RESULT([$frr_ac_bison_version - 3.0 or newer])
0d37f9f3
DL
1777 ;;
1778esac
1779AC_SUBST(BISON_OPENBRACE)
1780AC_SUBST(BISON_CLOSEBRACE)
05dbb7df 1781AC_SUBST(BISON_VERBOSE)
0d37f9f3 1782
1689cf7e 1783if $frr_ac_bison_missing; then
0d37f9f3
DL
1784 YACC="$SHELL $missing_dir/missing bison -y"
1785 if test -f "${srcdir}/lib/command_parse.c" -a -f "${srcdir}/lib/command_parse.h"; then
1786 AC_MSG_WARN([using pregenerated bison output files])
1787 else
1788 AC_MSG_ERROR([bison failure and pregenerated files not included (probably a git build)])
1789 fi
1790fi
bbf5ffa0 1791
edd7c245 1792dnl -------------------
1793dnl capabilities checks
1794dnl -------------------
41d3fc96 1795if test "${enable_capabilities}" != "no"; then
1796 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1797 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1798 [AC_MSG_RESULT(yes)
1799 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
8e4da10b 1800 frr_ac_keepcaps="yes"],
41d3fc96 1801 AC_MSG_RESULT(no)
edd7c245 1802 )
8e4da10b 1803 if test x"${frr_ac_keepcaps}" = x"yes"; then
41d3fc96 1804 AC_CHECK_HEADERS(sys/capability.h)
1805 fi
1806 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1807 AC_CHECK_LIB(cap, cap_init,
1808 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1809 LIBCAP="-lcap"
8e4da10b 1810 frr_ac_lcaps="yes"]
41d3fc96 1811 )
ceacedba 1812 else
1813 AC_CHECK_HEADERS(priv.h,
1814 [AC_MSG_CHECKING(Solaris style privileges are available)
1815 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1816 [AC_MSG_RESULT(yes)
1817 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
8e4da10b 1818 frr_ac_scaps="yes"],
ceacedba 1819 AC_MSG_RESULT(no)
1820 )
1821 ]
1822 )
1823 fi
8e4da10b
DL
1824 if test x"${frr_ac_scaps}" = x"yes" \
1825 -o x"${frr_ac_lcaps}" = x"yes"; then
ceacedba 1826 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
41d3fc96 1827 fi
edd7c245 1828fi
1829AC_SUBST(LIBCAP)
1830
fb2d1502 1831dnl ---------------------------
1832dnl check for glibc 'backtrace'
1833dnl ---------------------------
8c99b4c1
DL
1834if test x"${enable_backtrace}" != x"no" ; then
1835 backtrace_ok=no
68b8a15f
DL
1836 PKG_CHECK_MODULES([UNWIND], [libunwind], [
1837 AC_DEFINE(HAVE_LIBUNWIND, 1, [libunwind])
1838 backtrace_ok=yes
1839 ], [
1840 case "$host_os" in
1841 sunos* | solaris2*)
1842 AC_CHECK_FUNCS([printstack], [
1843 AC_DEFINE([HAVE_PRINTSTACK], 1, [Solaris printstack])
1844 backtrace_ok=yes
1845 ])
1846 ;;
1847 esac
1848 if test "$backtrace_ok" = no; then
1849 AC_CHECK_HEADER([execinfo.h], [
1850 AC_SEARCH_LIBS([backtrace], [execinfo], [
1851 AC_DEFINE(HAVE_GLIBC_BACKTRACE, 1, [Glibc backtrace])
1852 backtrace_ok=yes
1853 ],, [-lm])
1854 ])
1855 fi
eda3529e 1856 ])
8c99b4c1
DL
1857
1858 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1859 dnl user explicitly requested backtrace but we failed to find support
68b8a15f 1860 AC_MSG_FAILURE([failed to find backtrace or libunwind support])
8c99b4c1
DL
1861 fi
1862fi
fb2d1502 1863
41be32bf
PJ
1864dnl -----------------------------------------
1865dnl check for malloc mallinfo struct and call
1866dnl this must try and link using LIBS, in
1867dnl order to check no alternative allocator
1868dnl has been specified, which might not provide
1869dnl mallinfo, e.g. such as Umem on Solaris.
1870dnl -----------------------------------------
324be174 1871AC_CHECK_HEADERS([malloc.h malloc_np.h malloc/malloc.h],,, [FRR_INCLUDES])
fa896a1d 1872
2a636b43
DL
1873AC_CACHE_CHECK([whether mallinfo is available], [frr_cv_mallinfo], [
1874 AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES [
fa896a1d
DL
1875#ifdef HAVE_MALLOC_H
1876#include <malloc.h>
1877#endif
324be174
DL
1878#ifdef HAVE_MALLOC_NP_H
1879#include <malloc_np.h>
1880#endif
fa896a1d
DL
1881#ifdef HAVE_MALLOC_MALLOC_H
1882#include <malloc/malloc.h>
1883#endif
1884]], [[
1885struct mallinfo ac_x; ac_x = mallinfo ();
1886]])], [
2a636b43
DL
1887 frr_cv_mallinfo=yes
1888 ], [
1889 frr_cv_mallinfo=no
1890 ])
fa896a1d 1891])
2a636b43
DL
1892if test "$frr_cv_mallinfo" = yes; then
1893 AC_DEFINE(HAVE_MALLINFO,,mallinfo)
1894fi
fa896a1d
DL
1895
1896AC_MSG_CHECKING(whether malloc_usable_size is available)
1897AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES [
1898#ifdef HAVE_MALLOC_H
1899#include <malloc.h>
1900#endif
1901#ifdef HAVE_MALLOC_MALLOC_H
1902#include <malloc/malloc.h>
1903#endif
1904]], [[
1905size_t ac_x; ac_x = malloc_usable_size(NULL);
1906]])], [
1907 AC_MSG_RESULT(yes)
1908 AC_DEFINE(HAVE_MALLOC_USABLE_SIZE,,malloc_usable_size)
1909], [
1910 AC_MSG_RESULT(no)
1911
1912 AC_MSG_CHECKING(whether malloc_size is available)
1913 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1914#ifdef HAVE_MALLOC_H
1915#include <malloc.h>
1916#endif
1917#ifdef HAVE_MALLOC_MALLOC_H
1918#include <malloc/malloc.h>
1919#endif
1920]], [[
1921size_t ac_x; ac_x = malloc_size(NULL);
1922]])], [
1923 AC_MSG_RESULT(yes)
1924 AC_DEFINE(HAVE_MALLOC_SIZE,,malloc_size)
1925 ], [
1926 AC_MSG_RESULT(no)
1927 ])
1928])
41be32bf 1929
b6116506
DL
1930dnl ------
1931dnl ZeroMQ
1932dnl ------
1933if test "x$enable_zeromq" != "xno"; then
1934 PKG_CHECK_MODULES(ZEROMQ, [libzmq >= 4.0.0], [
1935 AC_DEFINE(HAVE_ZEROMQ, 1, [Enable ZeroMQ support])
1936 ZEROMQ=true
1937 ], [
1938 if test "x$enable_zeromq" = "xyes"; then
1939 AC_MSG_ERROR([configuration specifies --enable-zeromq but libzmq was not found])
1940 fi
1941 ])
1942fi
1943AM_CONDITIONAL([ZEROMQ], test "x$ZEROMQ" = "xtrue")
1944
408ad943 1945dnl ----------
1946dnl configure date
1947dnl ----------
5e2dd3fa
LB
1948dev_version=`echo $VERSION | grep dev`
1949#don't expire deprecated code in non 'dev' branch
1950if test "${dev_version}" = ""; then
1951 CONFDATE=0
1952else
1953 CONFDATE=`date '+%Y%m%d'`
1954fi
408ad943 1955AC_SUBST(CONFDATE)
1956
7ea487bc 1957dnl ------------------------------
a159ed93 1958dnl set paths for state directory
23bd12c3 1959dnl ------------------------------
e84999d9 1960AC_MSG_CHECKING(directory to use for state file)
23bd12c3 1961if test "${prefix}" = "NONE"; then
b2f36157 1962 frr_statedir_prefix="";
23bd12c3 1963else
b2f36157 1964 frr_statedir_prefix=${prefix}
23bd12c3 1965fi
1966if test "${localstatedir}" = '${prefix}/var'; then
8e4da10b 1967 for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
b2f36157
DL
1968 ${frr_statedir_prefix}/var/adm dnl
1969 ${frr_statedir_prefix}/etc dnl
a159ed93 1970 /var/run dnl
1971 /var/adm dnl
1972 /etc dnl
1973 /dev/null;
23bd12c3 1974 do
8e4da10b 1975 test -d $FRR_STATE_DIR && break
23bd12c3 1976 done
8e4da10b 1977 frr_statedir=$FRR_STATE_DIR
23bd12c3 1978else
b2f36157 1979 frr_statedir=${localstatedir}
a159ed93 1980fi
b2f36157 1981if test $frr_statedir = "/dev/null"; then
a159ed93 1982 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1983fi
b2f36157
DL
1984AC_MSG_RESULT(${frr_statedir})
1985AC_SUBST(frr_statedir)
1986
b2f36157 1987AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
b2f36157 1988AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
7134904b 1989AC_DEFINE_UNQUOTED(BFDD_CONTROL_SOCKET, "$frr_statedir/bfdd.sock", bfdd control socket)
b2f36157 1990AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
7ea487bc 1991
95c4aff2
DL
1992dnl autoconf does this, but it does it too late...
1993test "x$prefix" = xNONE && prefix=$ac_default_prefix
1994test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
1995
1996dnl get the full path, recursing through variables...
1997vtysh_bin="$bindir/vtysh"
1998for I in 1 2 3 4 5 6 7 8 9 10; do
1999 eval vtysh_bin="\"$vtysh_bin\""
2000done
2001AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
40da52d8 2002AC_SUBST(vtysh_bin)
95c4aff2 2003
a07169b1
DL
2004CFG_SYSCONF="$sysconfdir"
2005CFG_SBIN="$sbindir"
2006CFG_STATE="$frr_statedir"
30771d65 2007CFG_MODULE="$moduledir"
a07169b1
DL
2008for I in 1 2 3 4 5 6 7 8 9 10; do
2009 eval CFG_SYSCONF="\"$CFG_SYSCONF\""
2010 eval CFG_SBIN="\"$CFG_SBIN\""
2011 eval CFG_STATE="\"$CFG_STATE\""
30771d65 2012 eval CFG_MODULE="\"$CFG_MODULE\""
a07169b1
DL
2013done
2014AC_SUBST(CFG_SYSCONF)
2015AC_SUBST(CFG_SBIN)
2016AC_SUBST(CFG_STATE)
30771d65
DL
2017AC_SUBST(CFG_MODULE)
2018AC_DEFINE_UNQUOTED(MODULE_PATH, "$CFG_MODULE", path to modules)
a07169b1 2019
dabecd7c
MR
2020dnl ------------------------------------
2021dnl Enable RPKI and add librtr to libs
2022dnl ------------------------------------
2023if test "${enable_rpki}" = "yes"; then
2024 PKG_CHECK_MODULES(RTRLIB,[rtrlib >= 0.5.0],
086aec2a 2025 [RPKI=true],
dabecd7c
MR
2026 [RPKI=false
2027 AC_MSG_ERROR([rtrlib was not found on your system or is too old.])]
2028 )
2029fi
2030AM_CONDITIONAL([RPKI], test "x$RPKI" = "xtrue")
2031
2032dnl ------------------------------------------
2033dnl Check whether rtrlib was build with ssh support
2034dnl ------------------------------------------
2035AC_MSG_CHECKING([whether the RTR Library is compiled with SSH])
2036AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "rtrlib/rtrlib.h"]],
2037 [[struct tr_ssh_config config;]])],
2038 [AC_MSG_RESULT(yes)
2039 AC_DEFINE(FOUND_SSH,,found_ssh)],
2040 AC_MSG_RESULT(no)
2041)
2042
7ea487bc 2043dnl ---------------------------
2044dnl Check htonl works correctly
2045dnl ---------------------------
2046AC_MSG_CHECKING(for working htonl)
6f0e3f6e 2047AC_CACHE_VAL(ac_cv_htonl_works,
8e4da10b 2048 [AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
6f0e3f6e
PJ
2049 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
2050 ]
2051)
7ea487bc 2052AC_MSG_RESULT($ac_cv_htonl_works)
2053
892d21b1
DL
2054AC_CONFIG_FILES([Makefile],[sed -e 's/^#AUTODERP# //' -i Makefile])
2055
2056AC_CONFIG_FILES([
22ea387f 2057 redhat/frr.spec
e3863245 2058 solaris/Makefile
5eee7099 2059 debianpkg/changelog
c737c7ba 2060 alpine/APKBUILD
3ab11ecc 2061 snapcraft/snapcraft.yaml
b7a97f82 2062 lib/version.h
8efe88ea 2063 tests/lib/cli/test_cli.refout
cbd04084 2064 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
7f57883e
DS
2065 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh
2066 pkgsrc/eigrpd.sh])
65efcfce 2067
670bbf19 2068AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
40da52d8 2069AC_CONFIG_FILES([tools/frr],[chmod +x tools/frr])
65efcfce 2070
306ed681
DL
2071AC_CONFIG_COMMANDS([lib/route_types.h], [
2072 dst="${ac_abs_top_builddir}/lib/route_types.h"
2073 ${PERL} "${ac_abs_top_srcdir}/lib/route_types.pl" \
2074 < "${ac_abs_top_srcdir}/lib/route_types.txt" \
2075 > "${dst}.tmp"
2076 test -f "${dst}" \
2077 && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
2078 && rm "${dst}.tmp" \
2079 || mv "${dst}.tmp" "${dst}"
2080], [
2081 PERL="$PERL"
2082])
2083
2084AS_IF([test "x$with_pkg_git_version" = "xyes"], [
2085 AC_CONFIG_COMMANDS([lib/gitversion.h], [
2086 dst="${ac_abs_top_builddir}/lib/gitversion.h"
2087 ${PERL} "${ac_abs_top_srcdir}/lib/gitversion.pl" \
2088 "${ac_abs_top_srcdir}" \
2089 > "${dst}.tmp"
2090 test -f "${dst}" \
2091 && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
2092 && rm "${dst}.tmp" \
2093 || mv "${dst}.tmp" "${dst}"
2094 ], [
2095 PERL="$PERL"
2096 ])
2097])
2098
1689cf7e 2099## Hack, but working solution to avoid rebuilding of frr.info.
48577196 2100## It's already in CVS until texinfo 4.7 is more common.
14c17fd8 2101AC_OUTPUT
7ea487bc 2102
2103echo "
447a8fe9 2104FRRouting configuration
b2f36157
DL
2105------------------------------
2106FRR version : ${PACKAGE_VERSION}
1080c13f 2107host operating system : ${host_os}
7ea487bc 2108source code location : ${srcdir}
2109compiler : ${CC}
dbac691d 2110compiler flags : ${CFLAGS} ${SAN_FLAGS}
6f0e3f6e 2111make : ${MAKE-make}
dbac691d 2112linker flags : ${LDFLAGS} ${SAN_FLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
b2f36157 2113state file directory : ${frr_statedir}
dc7a2bf1 2114config file directory : `eval echo \`echo ${sysconfdir}\``
d6b72f7a 2115example directory : `eval echo \`echo ${exampledir}\``
30771d65 2116module directory : ${CFG_MODULE}
b2f36157
DL
2117user to run as : ${enable_user}
2118group to run as : ${enable_group}
2119group for vty sockets : ${enable_vty_group}
aa593d5e 2120config file mask : ${enable_configfile_mask}
2121log file mask : ${enable_logfile_mask}
2b2f275e 2122zebra protobuf enabled : ${enable_protobuf:-no}
dc7a2bf1 2123
2124The above user and group must have read/write access to the state file
105b8239 2125directory and to the config files in the config file directory."
410a2492
JAG
2126
2127if test "${enable_doc}" != "no";then
f4f2f2cc 2128 AS_IF([test "$SPHINXBUILD" = /bin/false],
410a2492
JAG
2129 AC_MSG_WARN(sphinx-build is missing but required to build documentation))
2130fi