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