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