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