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