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