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