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