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