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