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