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