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