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