]> git.proxmox.com Git - mirror_frr.git/blame - configure.ac
Merge pull request #2726 from sworleys/Netlink-Filter-AFI
[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
ef2a2c2e 10AC_INIT(frr, 5.1-dev, [https://github.com/frrouting/frr/issues])
d6180888 11PACKAGE_URL="https://frrouting.org/"
34982989 12AC_SUBST(PACKAGE_URL)
447a8fe9 13PACKAGE_FULLNAME="FRRouting"
a07169b1
DL
14AC_SUBST(PACKAGE_FULLNAME)
15
5ee1bde7 16CONFIG_ARGS="$ac_configure_args"
80db5ac1 17AC_SUBST(CONFIG_ARGS)
a07169b1 18
fa1253d0 19AC_CONFIG_SRCDIR(lib/zebra.h)
62c9f504 20AC_CONFIG_MACRO_DIR([m4])
dfb9a545 21
22dnl -----------------------------------
23dnl Get hostname and other information.
24dnl -----------------------------------
25AC_CANONICAL_BUILD()
26AC_CANONICAL_HOST()
29ad6f68
DL
27
28AS_IF([test "$host" != "$build"], [
29 if test "$srcdir" = "."; then
30 AC_MSG_ERROR([cross-compilation is only possible with builddir separate from srcdir. create a separate directory and run as .../path-to-frr/configure.])
31 fi
32 test -d hosttools || mkdir hosttools
33 abssrc="`cd \"${srcdir}\"; pwd`"
34
35 AC_MSG_NOTICE([...])
36 AC_MSG_NOTICE([... cross-compilation: creating hosttools directory and self-configuring for build platform tools])
37 AC_MSG_NOTICE([... use HOST_CPPFLAGS / HOST_CFLAGS / HOST_LDFLAGS if neccessary])
38 AC_MSG_NOTICE([...])
39
40 ( CPPFLAGS="$HOST_CPPFLAGS"; \
41 CFLAGS="$HOST_CFLAGS"; \
42 LDFLAGS="$HOST_LDFLAGS"; \
c71b8557 43 cd hosttools; "${abssrc}/configure" "--host=$build" "--build=$build" "--enable-clippy-only" "--disable-nhrpd" "--disable-vtysh"; )
29ad6f68
DL
44
45 AC_MSG_NOTICE([...])
46 AC_MSG_NOTICE([... cross-compilation: finished self-configuring for build platform tools])
47 AC_MSG_NOTICE([...])
48
49 build_clippy="false"
4a121f99 50 HOSTTOOLS="hosttools/"
29ad6f68
DL
51], [
52 build_clippy="true"
4a121f99 53 HOSTTOOLS=""
29ad6f68 54])
4a121f99 55AC_SUBST(HOSTTOOLS)
29ad6f68 56AM_CONDITIONAL([BUILD_CLIPPY], [$build_clippy])
dfb9a545 57
f77cba1b
AS
58# Disable portability warnings -- our automake code (in particular
59# common.am) uses some constructs specific to gmake.
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]))
7ea487bc 346AC_ARG_ENABLE(zebra,
23925784 347 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
7ea487bc 348AC_ARG_ENABLE(bgpd,
23925784 349 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
7ea487bc 350AC_ARG_ENABLE(ripd,
23925784 351 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
7ea487bc 352AC_ARG_ENABLE(ripngd,
23925784 353 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
7ea487bc 354AC_ARG_ENABLE(ospfd,
23925784 355 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
7ea487bc 356AC_ARG_ENABLE(ospf6d,
23925784 357 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
eac6e3f0
RW
358AC_ARG_ENABLE(ldpd,
359 AS_HELP_STRING([--enable-ldpd], [build ldpd]))
2fb975da
TT
360AC_ARG_ENABLE(nhrpd,
361 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
7f57883e
DS
362AC_ARG_ENABLE(eigrpd,
363 AS_HELP_STRING([--disable-eigrpd], [do not build eigrpd]))
ca10883e
DS
364AC_ARG_ENABLE(babeld,
365 AS_HELP_STRING([--disable-babeld], [do not build babeld]))
9473e340
DS
366AC_ARG_ENABLE(watchfrr,
367 AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
9e867fe6 368AC_ARG_ENABLE(isisd,
c3a9461e 369 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
12e41d03 370AC_ARG_ENABLE(pimd,
23925784 371 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
3cab181d
DS
372AC_ARG_ENABLE(pbrd,
373 AS_HELP_STRING([--disable-pbrd], [do not build pbrd]))
2222a716
DS
374AC_ARG_ENABLE(sharpd,
375 AS_HELP_STRING([--enable-sharpd], [do not build sharpd]))
7ea487bc 376AC_ARG_ENABLE(bgp-announce,
23925784 377 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
65efcfce 378AC_ARG_ENABLE(bgp-vnc,
f95f2ad9 379 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
65efcfce
LB
380AC_ARG_WITH(rfp-path,
381 AS_HELP_STRING([--with-rfp-path[=DIR]],[path to replaced stub RFP used with BGP VNC]))
7ea487bc 382AC_ARG_ENABLE(snmp,
23925784 383 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
b6116506
DL
384AC_ARG_ENABLE(zeromq,
385 AS_HELP_STRING([--enable-zeromq], [enable ZeroMQ handler (libfrrzmq)]))
7ea487bc 386AC_ARG_WITH(libpam,
23925784 387 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
1ef74ef7 388AC_ARG_ENABLE(ospfapi,
23925784 389 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
1ef74ef7 390AC_ARG_ENABLE(ospfclient,
23925784
DL
391 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
392 (this is the default if --disable-ospfapi is set)]))
7ea487bc 393AC_ARG_ENABLE(multipath,
23925784 394 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
fe86b484 395AC_ARG_ENABLE(user,
b2f36157 396 AS_HELP_STRING([--enable-user=USER], [user to run FRR suite as (default frr)]))
fe86b484 397AC_ARG_ENABLE(group,
b2f36157 398 AS_HELP_STRING([--enable-group=GROUP], [group to run FRR suite as (default frr)]))
edd7c245 399AC_ARG_ENABLE(vty_group,
23925784 400 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
aa593d5e 401AC_ARG_ENABLE(configfile_mask,
23925784 402 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
aa593d5e 403AC_ARG_ENABLE(logfile_mask,
23925784 404 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
5fd1f747 405AC_ARG_ENABLE(shell_access,
23925784 406 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
4e40b6d6
KK
407AC_ARG_ENABLE(realms,
408 AS_HELP_STRING([--enable-realms], [enable REALMS support under Linux]))
71c0fb50 409AC_ARG_ENABLE(rtadv,
23925784 410 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
ca776988 411AC_ARG_ENABLE(irdp,
8dc1f7fc 412 AS_HELP_STRING([--disable-irdp], [enable IRDP server support in zebra (default if supported)]))
41d3fc96 413AC_ARG_ENABLE(capabilities,
23925784 414 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
47f6aef0 415AC_ARG_ENABLE(rusage,
23925784 416 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
6b6942f9 417AC_ARG_ENABLE(gcc_ultra_verbose,
23925784 418 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
3453a712 419AC_ARG_ENABLE(linux24_tcp_md5,
23925784 420 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
8c99b4c1 421AC_ARG_ENABLE(backtrace,
23925784 422 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
924b9229 423AC_ARG_ENABLE(time-check,
23925784 424 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
25f45887 425AC_ARG_ENABLE(pcreposix,
23925784 426 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
5adc2528 427AC_ARG_ENABLE(fpm,
23925784 428 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
ddd82ff6 429AC_ARG_ENABLE(systemd,
23925784 430 AS_HELP_STRING([--enable-systemd], [enable Systemd support]))
aa9584c1
DS
431AC_ARG_ENABLE(werror,
432 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
000cf1fb 433AC_ARG_ENABLE(cumulus,
23925784 434 AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions]))
df970aa6
DS
435AC_ARG_ENABLE(datacenter,
436 AS_HELP_STRING([--enable-datacenter], [enable Compilation for Data Center Extensions]))
411314ed
DS
437AC_ARG_ENABLE(fuzzing,
438 AS_HELP_STRING([--enable-fuzzing], [enable ability to fuzz various parts of FRR]))
acfa8927
SW
439AC_ARG_ENABLE(netlink_fuzzing,
440 AS_HELP_STRING([--enable-netlink-fuzzing], [enable ability to fuzz netlink listening socket in zebra]))
76981cd3
DS
441AC_ARG_ENABLE(rr-semantics,
442 AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics]))
dad253b4
AS
443AC_ARG_ENABLE([protobuf],
444 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
28436d6d 445AC_ARG_ENABLE([oldvpn_commands],
fcc65b0f 446 AS_HELP_STRING([--enable-oldvpn-commands], [Keep old vpn commands]))
dabecd7c
MR
447AC_ARG_ENABLE(rpki,
448 AS_HELP_STRING([--enable-rpki], [enable RPKI prefix validation support]))
c71b8557
LC
449AC_ARG_ENABLE([clippy-only],
450 AS_HELP_STRING([--enable-clippy-only], [Only build clippy]))
c737c7ba
AJ
451AC_ARG_ENABLE([numeric_version],
452 AS_HELP_STRING([--enable-numeric-version], [Only numeric digits allowed in version (for Alpine)]))
83284209
AJ
453AC_ARG_ENABLE([gcov],
454 AS_HELP_STRING([--enable-gcov], [Add code coverage information]))
6b6942f9 455
c71b8557 456AS_IF([test "${enable_clippy_only}" != "yes"], [
112072ac 457AC_CHECK_HEADERS(json-c/json.h)
ea2fd55a 458AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c", [], [-lm])
112072ac 459if test $ac_cv_lib_json_c_json_object_get = no; then
10b8ab26
DS
460 AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
461 if test $ac_cv_lib_json_json_object_get = no; then
462 AC_MSG_ERROR([lib json is needed to compile])
463 fi
c2f4c19c 464fi
c71b8557 465])
c2f4c19c 466
3b8282a8
AS
467AC_ARG_ENABLE([dev_build],
468 AS_HELP_STRING([--enable-dev-build], [build for development]))
469
924b9229 470if test x"${enable_time_check}" != x"no" ; then
471 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
472 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
473 else
474 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
475 fi
476fi
477
37219958
DS
478case "${enable_systemd}" in
479 "no") ;;
480 "yes")
481 AC_CHECK_LIB(systemd, sd_notify, LIBS="$LIBS -lsystemd")
482 if test $ac_cv_lib_systemd_sd_notify = no; then
483 AC_MSG_ERROR([enable systemd has been specified but systemd development env not found on your system])
63e30864
DS
484 else
485 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
37219958
DS
486 fi
487 ;;
488 "*") ;;
489esac
ddd82ff6 490
76981cd3
DS
491if test "${enable_rr_semantics}" != "no" ; then
492 AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics)
493fi
494
df970aa6
DS
495if test "${enable_datacenter}" = "yes" ; then
496 AC_DEFINE(HAVE_DATACENTER,,Compile extensions for a DataCenter)
8efe88ea
DL
497 DFLT_NAME="datacenter"
498else
499 DFLT_NAME="traditional"
000cf1fb 500fi
df970aa6 501
411314ed
DS
502if test "${enable_fuzzing}" = "yes" ; then
503 AC_DEFINE(HANDLE_ZAPI_FUZZING,,Compile extensions to use with a fuzzer)
504fi
505
acfa8927
SW
506if test "${enable_netlink_fuzzing}" = "yes" ; then
507 AC_DEFINE(HANDLE_NETLINK_FUZZING,,Compile extensions to use with a fuzzer for netlink)
508fi
509
df970aa6
DS
510if test "${enable_cumulus}" = "yes" ; then
511 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
512fi
513
8efe88ea
DL
514AC_SUBST(DFLT_NAME)
515AC_DEFINE_UNQUOTED(DFLT_NAME,["$DFLT_NAME"], Name of the configuration default set)
000cf1fb 516
576b6b5d
DS
517if test "${enable_shell_access}" = "yes"; then
518 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
519fi
520
4f8ea50c 521AM_CONDITIONAL([FPM], [test "x$enable_fpm" = "xyes"])
5adc2528 522
29ad6f68
DL
523#
524# Python for clippy
525#
526AS_IF([test "$host" = "$build"], [
527 PYTHONCONFIG=""
528
529 # ordering:
530 # 1. try python3, but respect the user's preference on which minor ver
531 # 2. try python, which might be py3 or py2 again on the user's preference
532 # 3. try python2 (can really only be 2.7 but eh)
533 # 4. try 3.5 > 3.4 > 3.3 > 3.2 > 2.7 through pkg-config (no user pref)
534 #
535 # (AX_PYTHON_DEVEL has no clue about py3 vs py2)
536 # (AX_PYTHON does not do what we need)
537
538 AC_CHECK_TOOLS([PYTHONCONFIG], [python3-config python-config python2-config])
539 if test -n "$PYTHONCONFIG"; then
540 PYTHON_CFLAGS="`\"${PYTHONCONFIG}\" --includes`"
541 PYTHON_LIBS="`\"${PYTHONCONFIG}\" --libs`"
542
543 AC_MSG_CHECKING([whether we found a working Python version])
544 AC_LINK_IFELSE_FLAGS([$PYTHON_CFLAGS], [$PYTHON_LIBS], [AC_LANG_PROGRAM([
545#include <Python.h>
546#if PY_VERSION_HEX < 0x02070000
547#error python too old
548#endif
549int main(void);
550],
551[
552{
553 Py_Initialize();
554 return 0;
555}
556])], [
557 PYTHONCONFIG=""
558 unset PYTHON_LIBS
559 unset PYTHON_CFLAGS
560 ])
561 fi
562
563 if test -z "$PYTHONCONFIG"; then
564 PKG_CHECK_MODULES([PYTHON], python-3.5, [], [
565 PKG_CHECK_MODULES([PYTHON], python-3.4, [], [
566 PKG_CHECK_MODULES([PYTHON], python-3.3, [], [
567 PKG_CHECK_MODULES([PYTHON], python-3.2, [], [
568 PKG_CHECK_MODULES([PYTHON], python-2.7, [], [
569 AC_MSG_FAILURE([could not find python-config or pkg-config python, please install Python development files from libpython-dev or similar])
570 ])])])])])
571
572
573 AC_MSG_CHECKING([whether we found a working Python version])
574 AC_LINK_IFELSE_FLAGS([$PYTHON_CFLAGS], [$PYTHON_LIBS], [AC_LANG_PROGRAM([
575#include <Python.h>
576#if PY_VERSION_HEX < 0x02070000
577#error python too old
578#endif
579int main(void);
580],
581[
582{
583 Py_Initialize();
584 return 0;
585}
586])], [
587 AC_MSG_FAILURE([could not find python-config or pkg-config python, please install Python development files from libpython-dev or similar])
588 ])
589 fi
590])
591AC_SUBST(PYTHON_CFLAGS)
592AC_SUBST(PYTHON_LIBS)
593
dad253b4
AS
594#
595# Logic for protobuf support.
596#
597if test "$enable_protobuf" = "yes"; then
598 have_protobuf=yes
599
600 # Check for protoc-c
601 AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
602 if test "x$PROTOC_C" = "x/bin/false"; then
603 have_protobuf=no
604 else
605 found_protobuf_c=no
606 PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
607 [found_protobuf_c=yes],
608 [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
609
610 if test "x$found_protobuf_c" = "xyes"; then
611 LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
612 CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
613 else
614 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
615 [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
616 fi
617 fi
618fi
619
28436d6d
PG
620#
621# Logic for old vpn commans support.
622#
fcc65b0f 623if test "$enable_oldvpn_commands" = "yes"; then
28436d6d
PG
624 AC_DEFINE(KEEP_OLD_VPN_COMMANDS,, [Define for compiling with old vpn commands])
625fi
626
dad253b4
AS
627# Fail if the user explicity enabled protobuf support and we couldn't
628# find the compiler or libraries.
629if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
630 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
631fi
632
633if test "x$have_protobuf" = "xyes"; then
634 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
635fi
636
637AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
638
639#
640# End of logic for protobuf support.
641#
642
3453a712
PJ
643if test "${enable_linux24_tcp_md5}" = "yes"; then
644 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
645fi
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
b99760ab 1193dnl ------------------------------------
1194dnl check for broken CMSG_FIRSTHDR macro
1195dnl ------------------------------------
6c20046f 1196AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
5b087528 1197AC_RUN_IFELSE([AC_LANG_SOURCE([[
b99760ab 1198#ifdef SUNOS_5
1199#define _XPG4_2
1200#define __EXTENSIONS__
1201#endif
24f5e2fc 1202#include <stdlib.h>
b99760ab 1203#include <sys/types.h>
1204#include <sys/socket.h>
1205
1206main()
1207{
1208 struct msghdr msg;
1209 char buf[4];
1210
1211 msg.msg_control = buf;
1212 msg.msg_controllen = 0;
1213
1214 if (CMSG_FIRSTHDR(&msg) != NULL)
1215 exit(0);
1216 exit (1);
5b087528 1217}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
d33e8d7b 1218[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
b99760ab 1219
42c98199 1220dnl ---------------------------------------------------------------
1221dnl figure out how to specify an interface in multicast sockets API
1222dnl ---------------------------------------------------------------
8e4da10b 1223AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
42c98199 1224
b3f2bf7c 1225AC_CHECK_HEADERS([linux/mroute.h], [], [],[
24f5e2fc
DL
1226 #include <sys/socket.h>
1227 #include <netinet/in.h>
b3f2bf7c
RW
1228 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
1229 #include <linux/types.h>
1230])
1231
8e4da10b
DL
1232m4_define([FRR_INCLUDES],
1233FRR_INCLUDES
b3f2bf7c
RW
1234[#if HAVE_LINUX_MROUTE_H
1235# include <linux/mroute.h>
1236#endif
1237])dnl
1238
1239AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
24f5e2fc
DL
1240 #include <sys/socket.h>
1241 #include <sys/types.h>
1242 #include <netinet/in.h>
1243 #include <net/route.h>
b3f2bf7c
RW
1244])
1245
8e4da10b
DL
1246m4_define([FRR_INCLUDES],
1247FRR_INCLUDES
b3f2bf7c
RW
1248[#if HAVE_NETINET_IP_MROUTE_H
1249# include <netinet/ip_mroute.h>
1250#endif
1251])dnl
1252
42c98199 1253AC_MSG_CHECKING([for BSD struct ip_mreq hack])
24f5e2fc
DL
1254AC_TRY_COMPILE([#include <sys/param.h>],
1255[#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 1256 return (0);
1257#else
1258 #error No support for BSD struct ip_mreq hack detected
1259#endif],[AC_MSG_RESULT(yes)
1260AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1261AC_MSG_RESULT(no))
1262
10d04cdb
DT
1263AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1264AC_TRY_COMPILE([
1265#include <sys/types.h>
1266#include <netinet/in.h>
1267], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1268], [AC_MSG_RESULT(yes)
1269AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1270AC_MSG_RESULT(no))
1271
c543a173
AS
1272dnl ---------------------------------------------------------------
1273dnl figure out how to check link-state
1274dnl ---------------------------------------------------------------
24f5e2fc
DL
1275AC_CHECK_HEADER( [net/if_media.h],
1276 [m4_define([LINK_DETECT_INCLUDES],
8e4da10b 1277 FRR_INCLUDES
24f5e2fc
DL
1278 [#include <net/if_media.h>
1279 ])
1280 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1281 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1282 [], LINK_DETECT_INCLUDES)],
1283 [],
8e4da10b 1284 FRR_INCLUDES)
c543a173 1285
9234b382
DV
1286dnl ---------------------------------------------------------------
1287dnl Additional, newer way to check link-state using ifi_link_state.
1288dnl Not available in all BSD's when ifmediareq available
1289dnl ---------------------------------------------------------------
24f5e2fc
DL
1290AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1291 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
8e4da10b 1292 [], FRR_INCLUDES)
9234b382 1293
0df7c91f
PJ
1294dnl ------------------------
1295dnl TCP_MD5SIG socket option
1296dnl ------------------------
1297
1298AC_CHECK_HEADER([netinet/tcp.h],
1299 [m4_define([MD5_INCLUDES],
8e4da10b 1300 FRR_INCLUDES
0df7c91f
PJ
1301 [#include <netinet/tcp.h>
1302 ])
1303 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1304 [],
8e4da10b 1305 FRR_INCLUDES)
0df7c91f
PJ
1306if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1307 AC_CHECK_HEADER([linux/tcp.h],
1308 [m4_define([MD5_INCLUDES],
8e4da10b 1309 FRR_INCLUDES
0df7c91f
PJ
1310 [#include <linux/tcp.h>
1311 ])
1312 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1313fi
1314
60060acc
RW
1315dnl ----------------------------------------------------------------------------
1316dnl figure out if domainname is available in the utsname struct (GNU extension).
1317dnl ----------------------------------------------------------------------------
1318AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1319
fa3232e1 1320dnl ------------------
1321dnl IPv6 header checks
1322dnl ------------------
24f5e2fc 1323AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
6f0e3f6e 1324 netinet6/in6_var.h netinet6/nd6.h], [], [],
8e4da10b 1325 FRR_INCLUDES)
fa3232e1 1326
8e4da10b
DL
1327m4_define([FRR_INCLUDES],dnl
1328FRR_INCLUDES
6f0e3f6e
PJ
1329[#if HAVE_NETINET6_IN6_H
1330#include <netinet6/in6.h>
1331#endif
1332#if HAVE_NETINET_IN6_VAR_H
1333#include <netinet/in6_var.h>
1334#endif
24f5e2fc 1335#include <netinet/icmp6.h>
6f0e3f6e
PJ
1336#if HAVE_NETINET6_IN6_VAR_H
1337# include <netinet6/in6_var.h>
1338#endif
1339#if HAVE_NETINET6_ND6_H
fbf24544 1340# include <netinet6/nd6.h>
6f0e3f6e
PJ
1341#endif
1342])dnl
1343
cbcd9bfc
JT
1344dnl disable doc check
1345if test "${enable_doc}" = "no";then
1346 DOC=""
1347else
1348 DOC="doc"
1349fi
1350
7ea487bc 1351dnl --------------------
1352dnl Daemon disable check
1353dnl --------------------
64d44794 1354AM_CONDITIONAL(ZEBRA, test "${enable_zebra}" != "no")
7ea487bc 1355
1356if test "${enable_bgpd}" = "no";then
1357 BGPD=""
1358else
1359 BGPD="bgpd"
1360fi
f027d331 1361AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
7ea487bc 1362
7f269117 1363AM_CONDITIONAL(RIPD, test "${enable_ripd}" != "no")
afca0690 1364AM_CONDITIONAL(OSPFD, test "${enable_ospfd}" != "no")
30237d29 1365AM_CONDITIONAL(LDPD, test "${enable_ldpd}" != "no")
7ea487bc 1366
30237d29 1367AS_IF([test "${enable_ldpd}" != "no"], [
87ab4aec 1368 AC_DEFINE(HAVE_LDPD, 1, ldpd)
30237d29 1369])
eac6e3f0 1370
42350cfc 1371NHRPD=""
ddfeb486
DL
1372case "$host_os" in
1373 linux*)
1374 if test "${enable_nhrpd}" != "no"; then
1375 NHRPD="nhrpd"
1376 fi
1377 ;;
1378 *)
1379 if test "${enable_nhrpd}" = "yes"; then
1380 AC_MSG_ERROR([nhrpd requires kernel APIs that are only present on Linux.])
1381 fi
1382 ;;
1383esac
2fb975da
TT
1384AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1385
b6f5781c 1386AM_CONDITIONAL(EIGRPD, test "${enable_eigrpd}" != "no")
7f57883e 1387
9473e340
DS
1388if test "${enable_watchfrr}" = "no";then
1389 WATCHFRR=""
d0199430 1390else
9473e340 1391 WATCHFRR="watchfrr"
d0199430 1392fi
9473e340 1393AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
d0199430 1394
1ef74ef7 1395OSPFCLIENT=""
cd66cd4c 1396if test "${enable_ospfapi}" != "no";then
9a569848 1397 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1ef74ef7 1398
cd66cd4c 1399 if test "${enable_ospfclient}" != "no";then
1ef74ef7 1400 OSPFCLIENT="ospfclient"
1ef74ef7 1401 fi
7ea487bc 1402fi
cd66cd4c 1403
f027d331 1404AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
7f269117 1405AM_CONDITIONAL(RIPNGD, test "${enable_ripngd}" != "no")
b6f5781c 1406AM_CONDITIONAL(BABELD, test "${enable_babeld}" != "no")
afca0690 1407AM_CONDITIONAL(OSPF6D, test "${enable_ospf6d}" != "no")
86e463cf 1408AM_CONDITIONAL(ISISD, test "${enable_isisd}" != "no")
35a3c3c1 1409AM_CONDITIONAL(PIMD, test "${enable_pimd}" != "no")
e5c83d9b 1410AM_CONDITIONAL(PBRD, test "${enable_pbrd}" != "no")
2222a716 1411AM_CONDITIONAL(SHARPD, test "${enable_sharpd}" = "yes")
12e41d03 1412
7ea487bc 1413if test "${enable_bgp_announce}" = "no";then
750e8146
PJ
1414 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1415else
1416 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
7ea487bc 1417fi
1418
65efcfce
LB
1419if test "${with_rfp_path}" = "yes" || test x"${with_rfp_path}" = x""; then
1420 with_rfp_path="bgpd/rfp-example"
1421fi
1422if test "${with_rfp_path}" != "no"; then
1423 VNC_RFP_PATH="${with_rfp_path}"
1424 AC_SUBST(VNC_RFP_PATH)
1425fi
1426
f95f2ad9 1427if test "${enable_bgp_vnc}" != "no";then
65efcfce
LB
1428 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
1429 RFPTEST="${with_rfp_path}/rfptest"
1430 LIBRFP="${with_rfp_path}/librfp"
1431 RFPINC="${with_rfp_path}/librfp"
1432else
1433 RFPTEST=
1434 LIBRFP=
1435 RFPINC="bgpd/rfp-example/librfp"
1436fi
1437# set
f95f2ad9 1438AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
65efcfce 1439
cbcd9bfc 1440AC_SUBST(DOC)
65efcfce
LB
1441AC_SUBST(RFPTEST)
1442AC_SUBST(LIBRFP)
1443AC_SUBST(RFPINC)
7ea487bc 1444AC_SUBST(BGPD)
97cee877 1445AC_SUBST(SOLARIS)
7ea487bc 1446AC_SUBST(VTYSH)
7ea487bc 1447AC_SUBST(CURSES)
f9e75524
JAG
1448AC_CHECK_LIB(crypt, crypt, [],
1449 [AC_CHECK_LIB(crypto, DES_crypt)])
7ea487bc 1450AC_CHECK_LIB(resolv, res_init)
7ea487bc 1451
25f45887
JJ
1452dnl ---------------------------
1453dnl check system has PCRE regexp
1454dnl ---------------------------
1455if test "x$enable_pcreposix" = "xyes"; then
ad9a0825
DL
1456 AC_CHECK_LIB(pcreposix, regexec, [], [
1457 AC_MSG_ERROR([--enable-pcreposix given but unable to find libpcreposix])
1458 ])
25f45887 1459fi
25f45887 1460AC_SUBST(HAVE_LIBPCREPOSIX)
7ea487bc 1461
2fb975da
TT
1462dnl ------------------
1463dnl check C-Ares library
1464dnl ------------------
42350cfc 1465if test "${NHRPD}" != ""; then
92e50261
DL
1466 PKG_CHECK_MODULES([CARES], [libcares], , [
1467 AC_MSG_ERROR([trying to build nhrpd, but libcares not found. install c-ares and its -dev headers.])
1468 ])
2fb975da
TT
1469fi
1470
1471
7ea487bc 1472dnl ------------------
b1fc9acb 1473dnl check Net-SNMP library
7ea487bc 1474dnl ------------------
53b99735 1475if test "${enable_snmp}" != "" -a "${enable_snmp}" != "no"; then
08d7f653
VB
1476 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1477 if test x"$NETSNMP_CONFIG" = x"no"; then
1478 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1479 fi
46081234
DL
1480 SNMP_LIBS="`${NETSNMP_CONFIG} --agent-libs`"
1481 SNMP_CFLAGS="`${NETSNMP_CONFIG} --base-cflags`"
08d7f653 1482 AC_MSG_CHECKING([whether we can link to Net-SNMP])
92e50261 1483 AC_LINK_IFELSE_FLAGS([$SNMP_CFLAGS], [$SNMP_LIBS], [AC_LANG_PROGRAM([
08d7f653
VB
1484int main(void);
1485],
1486[
1487{
1488 return 0;
1489}
92e50261 1490])], [
08d7f653 1491 AC_MSG_ERROR([--enable-snmp given but not usable])])
d6be5fb9
VB
1492 case "${enable_snmp}" in
1493 yes)
1494 SNMP_METHOD=agentx
1495 ;;
1496 smux|agentx)
1497 SNMP_METHOD="${enable_snmp}"
1498 ;;
1499 *)
1500 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1501 ;;
1502 esac
1503 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1504 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1505 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
6cf9df08 1506fi
46081234
DL
1507AM_CONDITIONAL([SNMP], [test "x${SNMP_METHOD}" != "x"])
1508AC_SUBST(SNMP_LIBS)
1509AC_SUBST(SNMP_CFLAGS)
6cf9df08 1510
4db0cff1
QY
1511dnl ---------------
1512dnl math
1513dnl ---------------
1514AC_SEARCH_LIBS([sqrt], [m])
1515
b249c083
DL
1516dnl ---------------
1517dnl dlopen & dlinfo
1518dnl ---------------
30771d65
DL
1519AC_SEARCH_LIBS(dlopen, [dl dld], [], [
1520 AC_MSG_ERROR([unable to find the dlopen()])
1521])
1522
b249c083
DL
1523AC_CHECK_HEADERS([link.h])
1524
1525AC_MSG_CHECKING([for dlinfo(RTLD_DI_ORIGIN)])
1526AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1527#include <stdlib.h>
1528#ifdef HAVE_LINK_H
1529#include <link.h>
1530#endif
1531#include <dlfcn.h>
1532]], [[
1533 char origin[1];
1534 dlinfo (NULL, RTLD_DI_ORIGIN, &origin);
1535]])], [
1536 AC_MSG_RESULT(yes)
1537 AC_DEFINE(HAVE_DLINFO_ORIGIN, 1, [Have dlinfo RTLD_DI_ORIGIN])
1538], [
1539 AC_MSG_RESULT(no)
1540])
1541
1542AC_MSG_CHECKING([for dlinfo(RTLD_DI_LINKMAP)])
1543AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1544#include <stdlib.h>
1545#ifdef HAVE_LINK_H
1546#include <link.h>
1547#endif
1548#include <dlfcn.h>
1549]], [[
1550 struct link_map *lm = NULL;
1551 dlinfo (NULL, RTLD_DI_LINKMAP, &lm);
1552]])], [
1553 AC_MSG_RESULT(yes)
1554 AC_DEFINE(HAVE_DLINFO_LINKMAP, 1, [Have dlinfo RTLD_DI_LINKMAP])
1555], [
1556 AC_MSG_RESULT(no)
1557])
1558
6cf9df08 1559
62ff928b
DS
1560AM_CONDITIONAL(SNMP, test "x$SNMP_METHOD" = "xagentx")
1561
7ea487bc 1562dnl ---------------------------
6f0e3f6e 1563dnl sockaddr and netinet checks
7ea487bc 1564dnl ---------------------------
24f5e2fc
DL
1565AC_CHECK_TYPES([
1566 struct sockaddr_dl,
1567 struct vifctl, struct mfcctl, struct sioc_sg_req,
12e41d03 1568 vifi_t, struct sioc_vif_req, struct igmpmsg,
6f0e3f6e
PJ
1569 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1570 struct nd_opt_adv_interval, struct rt_addrinfo,
11770e10 1571 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
8e4da10b 1572 [], [], FRR_INCLUDES)
6f0e3f6e
PJ
1573
1574AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1575 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
ca3ccd87 1576 struct sockaddr_dl.sdl_len,
6f0e3f6e
PJ
1577 struct if6_aliasreq.ifra_lifetime,
1578 struct nd_opt_adv_interval.nd_opt_ai_type],
8e4da10b 1579 [], [], FRR_INCLUDES)
29c4c9bd 1580
6f0e3f6e 1581dnl ---------------------------
11770e10 1582dnl IRDP/pktinfo/icmphdr checks
6f0e3f6e 1583dnl ---------------------------
8dc1f7fc
DL
1584
1585AC_CHECK_TYPES([struct in_pktinfo], [
1586 AC_CHECK_TYPES([struct icmphdr], [
1587 IRDP=true
1588 ], [
1589 IRDP=false
1590 ], [FRR_INCLUDES])
1591], [
1592 IRDP=false
1593], [FRR_INCLUDES])
1594
1595case "${enable_irdp}" in
1596yes)
1597 $IRDP || AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1598 ;;
1599no)
1600 IRDP=false
1601 ;;
1602esac
1603
1604AM_CONDITIONAL(IRDP, $IRDP)
29c4c9bd 1605
12e41d03
DL
1606dnl -----------------------
1607dnl checking for IP_PKTINFO
1608dnl -----------------------
1609AC_MSG_CHECKING(for IP_PKTINFO)
1610AC_TRY_COMPILE([#include <netdb.h>], [
1611 int opt = IP_PKTINFO;
1612], [
1613 AC_MSG_RESULT(yes)
1614 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1615], [
1616 AC_MSG_RESULT(no)
1617])
1618
1619dnl ---------------------------
1620dnl checking for IP_RECVDSTADDR
1621dnl ---------------------------
1622AC_MSG_CHECKING(for IP_RECVDSTADDR)
1623AC_TRY_COMPILE([#include <netinet/in.h>], [
1624 int opt = IP_RECVDSTADDR;
1625], [
1626 AC_MSG_RESULT(yes)
1627 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1628], [
1629 AC_MSG_RESULT(no)
1630])
1631
1632dnl ----------------------
1633dnl checking for IP_RECVIF
1634dnl ----------------------
1635AC_MSG_CHECKING(for IP_RECVIF)
1636AC_TRY_COMPILE([#include <netinet/in.h>], [
1637 int opt = IP_RECVIF;
1638], [
1639 AC_MSG_RESULT(yes)
1640 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1641], [
1642 AC_MSG_RESULT(no)
1643])
1644
eac6e3f0
RW
1645dnl ----------------------
1646dnl checking for SO_BINDANY
1647dnl ----------------------
1648AC_MSG_CHECKING(for SO_BINDANY)
1649AC_TRY_COMPILE([#include <sys/socket.h>], [
1650 int opt = SO_BINDANY;
1651], [
1652 AC_MSG_RESULT(yes)
1653 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1654], [
1655 AC_MSG_RESULT(no)
1656])
1657
1658dnl ----------------------
1659dnl checking for IP_FREEBIND
1660dnl ----------------------
1661AC_MSG_CHECKING(for IP_FREEBIND)
1662AC_TRY_COMPILE([#include <netinet/in.h>], [
1663 int opt = IP_FREEBIND;
1664], [
1665 AC_MSG_RESULT(yes)
1666 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1667], [
1668 AC_MSG_RESULT(no)
1669])
1670
ba0cb3fe
DS
1671dnl --------------------------------------
1672dnl checking for be32dec existence or not
1673dnl --------------------------------------
1674AC_CHECK_DECLS([be32enc, be32dec], [], [],
1675 [#include <sys/endian.h>])
1676
c4376c9d
SH
1677dnl --------------------------------------
1678dnl checking for clock_time monotonic struct and call
1679dnl --------------------------------------
6511cab2
PJ
1680AC_CHECK_DECL(CLOCK_MONOTONIC,
1681 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
9964fcfc 1682 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
8e4da10b 1683], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
c4376c9d 1684
bbf5ffa0
QY
1685dnl --------------------------------------
1686dnl checking for flex and bison
1687dnl --------------------------------------
4a06690f 1688
bbf5ffa0 1689AM_PROG_LEX
4a06690f 1690AC_MSG_CHECKING(version of flex)
1689cf7e
JAG
1691frr_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
1692frr_ac_flex_version="${frr_ac_flex_version##* }"
1693AC_MSG_RESULT([$frr_ac_flex_version])
1694AX_COMPARE_VERSION([$frr_ac_flex_version], [lt], [2.5.20], [
4a06690f
DL
1695 LEX="$SHELL $missing_dir/missing flex"
1696 if test -f "${srcdir}/lib/command_lex.c" -a -f "${srcdir}/lib/command_lex.h"; then
1697 AC_MSG_WARN([using pregenerated flex output files])
1698 else
1699 AC_MSG_ERROR([flex failure and pregenerated files not included (probably a git build)])
1700 fi
1701 AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
1702 AC_SUBST([LEXLIB], [''])
1703])
0d37f9f3 1704
bbf5ffa0 1705AC_PROG_YACC
0d37f9f3
DL
1706dnl thanks GNU bison for this b*llshit...
1707AC_MSG_CHECKING(version of bison)
1689cf7e
JAG
1708frr_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
1709frr_ac_bison_version="${frr_ac_bison_version##* }"
1710frr_ac_bison_missing="false"
1711case "x${frr_ac_bison_version}" in
0d37f9f3
DL
1712 x2.7*)
1713 BISON_OPENBRACE='"'
1714 BISON_CLOSEBRACE='"'
05dbb7df 1715 BISON_VERBOSE=''
1689cf7e 1716 AC_MSG_RESULT([$frr_ac_bison_version - 2.7 or older])
0d37f9f3
DL
1717 ;;
1718 x2.*|x1.*)
1689cf7e 1719 AC_MSG_RESULT([$frr_ac_bison_version])
0d37f9f3 1720 AC_MSG_WARN([installed bison is too old. Please install GNU bison 2.7.x or newer.])
1689cf7e 1721 frr_ac_bison_missing="true"
0d37f9f3
DL
1722 ;;
1723 x)
1724 AC_MSG_RESULT([none])
1725 AC_MSG_WARN([could not determine bison version. Please install GNU bison 2.7.x or newer.])
1689cf7e 1726 frr_ac_bison_missing="true"
0d37f9f3
DL
1727 ;;
1728 *)
1729 BISON_OPENBRACE='{'
1730 BISON_CLOSEBRACE='}'
05dbb7df 1731 BISON_VERBOSE='-Dparse.error=verbose'
1689cf7e 1732 AC_MSG_RESULT([$frr_ac_bison_version - 3.0 or newer])
0d37f9f3
DL
1733 ;;
1734esac
1735AC_SUBST(BISON_OPENBRACE)
1736AC_SUBST(BISON_CLOSEBRACE)
05dbb7df 1737AC_SUBST(BISON_VERBOSE)
0d37f9f3 1738
1689cf7e 1739if $frr_ac_bison_missing; then
0d37f9f3
DL
1740 YACC="$SHELL $missing_dir/missing bison -y"
1741 if test -f "${srcdir}/lib/command_parse.c" -a -f "${srcdir}/lib/command_parse.h"; then
1742 AC_MSG_WARN([using pregenerated bison output files])
1743 else
1744 AC_MSG_ERROR([bison failure and pregenerated files not included (probably a git build)])
1745 fi
1746fi
bbf5ffa0 1747
edd7c245 1748dnl -------------------
1749dnl capabilities checks
1750dnl -------------------
41d3fc96 1751if test "${enable_capabilities}" != "no"; then
1752 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1753 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1754 [AC_MSG_RESULT(yes)
1755 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
8e4da10b 1756 frr_ac_keepcaps="yes"],
41d3fc96 1757 AC_MSG_RESULT(no)
edd7c245 1758 )
8e4da10b 1759 if test x"${frr_ac_keepcaps}" = x"yes"; then
41d3fc96 1760 AC_CHECK_HEADERS(sys/capability.h)
1761 fi
1762 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1763 AC_CHECK_LIB(cap, cap_init,
1764 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1765 LIBCAP="-lcap"
8e4da10b 1766 frr_ac_lcaps="yes"]
41d3fc96 1767 )
ceacedba 1768 else
1769 AC_CHECK_HEADERS(priv.h,
1770 [AC_MSG_CHECKING(Solaris style privileges are available)
1771 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1772 [AC_MSG_RESULT(yes)
1773 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
8e4da10b 1774 frr_ac_scaps="yes"],
ceacedba 1775 AC_MSG_RESULT(no)
1776 )
1777 ]
1778 )
1779 fi
8e4da10b
DL
1780 if test x"${frr_ac_scaps}" = x"yes" \
1781 -o x"${frr_ac_lcaps}" = x"yes"; then
ceacedba 1782 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
41d3fc96 1783 fi
edd7c245 1784fi
1785AC_SUBST(LIBCAP)
1786
fb2d1502 1787dnl ---------------------------
1788dnl check for glibc 'backtrace'
1789dnl ---------------------------
8c99b4c1
DL
1790if test x"${enable_backtrace}" != x"no" ; then
1791 backtrace_ok=no
1792 AC_CHECK_HEADER([execinfo.h], [
1793 AC_SEARCH_LIBS([backtrace], [execinfo], [
1794 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1795 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1796 backtrace_ok=yes
1797 ],, [-lm])
eda3529e 1798 ])
8c99b4c1
DL
1799
1800 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1801 dnl user explicitly requested backtrace but we failed to find support
1802 AC_MSG_FAILURE([failed to find backtrace support])
1803 fi
1804fi
fb2d1502 1805
41be32bf
PJ
1806dnl -----------------------------------------
1807dnl check for malloc mallinfo struct and call
1808dnl this must try and link using LIBS, in
1809dnl order to check no alternative allocator
1810dnl has been specified, which might not provide
1811dnl mallinfo, e.g. such as Umem on Solaris.
1812dnl -----------------------------------------
6f0e3f6e 1813AC_CHECK_HEADER([malloc.h],
41be32bf
PJ
1814 [AC_MSG_CHECKING(whether mallinfo is available)
1815 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1816 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1817 [AC_MSG_RESULT(yes)
1818 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1819 AC_MSG_RESULT(no)
1820 )
8e4da10b 1821 ], [], FRR_INCLUDES)
41be32bf 1822
b6116506
DL
1823dnl ------
1824dnl ZeroMQ
1825dnl ------
1826if test "x$enable_zeromq" != "xno"; then
1827 PKG_CHECK_MODULES(ZEROMQ, [libzmq >= 4.0.0], [
1828 AC_DEFINE(HAVE_ZEROMQ, 1, [Enable ZeroMQ support])
1829 ZEROMQ=true
1830 ], [
1831 if test "x$enable_zeromq" = "xyes"; then
1832 AC_MSG_ERROR([configuration specifies --enable-zeromq but libzmq was not found])
1833 fi
1834 ])
1835fi
1836AM_CONDITIONAL([ZEROMQ], test "x$ZEROMQ" = "xtrue")
1837
408ad943 1838dnl ----------
1839dnl configure date
1840dnl ----------
5e2dd3fa
LB
1841dev_version=`echo $VERSION | grep dev`
1842#don't expire deprecated code in non 'dev' branch
1843if test "${dev_version}" = ""; then
1844 CONFDATE=0
1845else
1846 CONFDATE=`date '+%Y%m%d'`
1847fi
408ad943 1848AC_SUBST(CONFDATE)
1849
7ea487bc 1850dnl ------------------------------
a159ed93 1851dnl set paths for state directory
23bd12c3 1852dnl ------------------------------
e84999d9 1853AC_MSG_CHECKING(directory to use for state file)
23bd12c3 1854if test "${prefix}" = "NONE"; then
b2f36157 1855 frr_statedir_prefix="";
23bd12c3 1856else
b2f36157 1857 frr_statedir_prefix=${prefix}
23bd12c3 1858fi
1859if test "${localstatedir}" = '${prefix}/var'; then
8e4da10b 1860 for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
b2f36157
DL
1861 ${frr_statedir_prefix}/var/adm dnl
1862 ${frr_statedir_prefix}/etc dnl
a159ed93 1863 /var/run dnl
1864 /var/adm dnl
1865 /etc dnl
1866 /dev/null;
23bd12c3 1867 do
8e4da10b 1868 test -d $FRR_STATE_DIR && break
23bd12c3 1869 done
8e4da10b 1870 frr_statedir=$FRR_STATE_DIR
23bd12c3 1871else
b2f36157 1872 frr_statedir=${localstatedir}
a159ed93 1873fi
b2f36157 1874if test $frr_statedir = "/dev/null"; then
a159ed93 1875 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1876fi
b2f36157
DL
1877AC_MSG_RESULT(${frr_statedir})
1878AC_SUBST(frr_statedir)
1879
b2f36157 1880AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
b2f36157 1881AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
b2f36157 1882AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
7ea487bc 1883
95c4aff2
DL
1884dnl autoconf does this, but it does it too late...
1885test "x$prefix" = xNONE && prefix=$ac_default_prefix
1886test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
1887
1888dnl get the full path, recursing through variables...
1889vtysh_bin="$bindir/vtysh"
1890for I in 1 2 3 4 5 6 7 8 9 10; do
1891 eval vtysh_bin="\"$vtysh_bin\""
1892done
1893AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
1894
a07169b1
DL
1895CFG_SYSCONF="$sysconfdir"
1896CFG_SBIN="$sbindir"
1897CFG_STATE="$frr_statedir"
30771d65 1898CFG_MODULE="$moduledir"
a07169b1
DL
1899for I in 1 2 3 4 5 6 7 8 9 10; do
1900 eval CFG_SYSCONF="\"$CFG_SYSCONF\""
1901 eval CFG_SBIN="\"$CFG_SBIN\""
1902 eval CFG_STATE="\"$CFG_STATE\""
30771d65 1903 eval CFG_MODULE="\"$CFG_MODULE\""
a07169b1
DL
1904done
1905AC_SUBST(CFG_SYSCONF)
1906AC_SUBST(CFG_SBIN)
1907AC_SUBST(CFG_STATE)
30771d65
DL
1908AC_SUBST(CFG_MODULE)
1909AC_DEFINE_UNQUOTED(MODULE_PATH, "$CFG_MODULE", path to modules)
a07169b1 1910
dabecd7c
MR
1911dnl ------------------------------------
1912dnl Enable RPKI and add librtr to libs
1913dnl ------------------------------------
1914if test "${enable_rpki}" = "yes"; then
1915 PKG_CHECK_MODULES(RTRLIB,[rtrlib >= 0.5.0],
1916 [AC_DEFINE(HAVE_RPKI,1,Enable RPKI prefix validation for BGP)
1917 RPKI=true],
1918 [RPKI=false
1919 AC_MSG_ERROR([rtrlib was not found on your system or is too old.])]
1920 )
1921fi
1922AM_CONDITIONAL([RPKI], test "x$RPKI" = "xtrue")
1923
1924dnl ------------------------------------------
1925dnl Check whether rtrlib was build with ssh support
1926dnl ------------------------------------------
1927AC_MSG_CHECKING([whether the RTR Library is compiled with SSH])
1928AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "rtrlib/rtrlib.h"]],
1929 [[struct tr_ssh_config config;]])],
1930 [AC_MSG_RESULT(yes)
1931 AC_DEFINE(FOUND_SSH,,found_ssh)],
1932 AC_MSG_RESULT(no)
1933)
1934
7ea487bc 1935dnl ---------------------------
1936dnl Check htonl works correctly
1937dnl ---------------------------
1938AC_MSG_CHECKING(for working htonl)
6f0e3f6e 1939AC_CACHE_VAL(ac_cv_htonl_works,
8e4da10b 1940 [AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
6f0e3f6e
PJ
1941 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1942 ]
1943)
7ea487bc 1944AC_MSG_RESULT($ac_cv_htonl_works)
1945
7f269117 1946AC_CONFIG_FILES([Makefile
bd354725 1947 bgpd/Makefile
30237d29 1948 vtysh/Makefile
524ada7f
QY
1949 doc/Makefile
1950 doc/user/Makefile
1951 doc/manpages/Makefile
1952 doc/developer/Makefile
1953 tests/Makefile
1954 bgpd/rfp-example/rfptest/Makefile
1955 bgpd/rfp-example/librfp/Makefile
22ea387f 1956 redhat/frr.spec
495feb8a 1957 debianpkg/Makefile
5eee7099 1958 debianpkg/changelog
c737c7ba 1959 alpine/APKBUILD
3ab11ecc 1960 snapcraft/snapcraft.yaml
b7a97f82 1961 lib/version.h
8efe88ea 1962 tests/lib/cli/test_cli.refout
cbd04084 1963 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
7f57883e
DS
1964 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh
1965 pkgsrc/eigrpd.sh])
65efcfce 1966
0953865f
LB
1967if test "${enable_bgp_vnc}" != "no"; then
1968 if test "${with_rfp_path}" != "bgpd/rfp-example" ; then
1969 AC_CONFIG_FILES([${with_rfp_path}/rfptest/Makefile ${with_rfp_path}/librfp/Makefile])
1970 fi
1971fi
65efcfce 1972
26275b05 1973AC_CONFIG_FILES([solaris/Makefile])
1974
670bbf19 1975AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
65efcfce 1976
306ed681
DL
1977AC_CONFIG_COMMANDS([lib/route_types.h], [
1978 dst="${ac_abs_top_builddir}/lib/route_types.h"
1979 ${PERL} "${ac_abs_top_srcdir}/lib/route_types.pl" \
1980 < "${ac_abs_top_srcdir}/lib/route_types.txt" \
1981 > "${dst}.tmp"
1982 test -f "${dst}" \
1983 && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
1984 && rm "${dst}.tmp" \
1985 || mv "${dst}.tmp" "${dst}"
1986], [
1987 PERL="$PERL"
1988])
1989
1990AS_IF([test "x$with_pkg_git_version" = "xyes"], [
1991 AC_CONFIG_COMMANDS([lib/gitversion.h], [
1992 dst="${ac_abs_top_builddir}/lib/gitversion.h"
1993 ${PERL} "${ac_abs_top_srcdir}/lib/gitversion.pl" \
1994 "${ac_abs_top_srcdir}" \
1995 > "${dst}.tmp"
1996 test -f "${dst}" \
1997 && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
1998 && rm "${dst}.tmp" \
1999 || mv "${dst}.tmp" "${dst}"
2000 ], [
2001 PERL="$PERL"
2002 ])
2003])
2004
1689cf7e 2005## Hack, but working solution to avoid rebuilding of frr.info.
48577196 2006## It's already in CVS until texinfo 4.7 is more common.
14c17fd8 2007AC_OUTPUT
7ea487bc 2008
2009echo "
447a8fe9 2010FRRouting configuration
b2f36157
DL
2011------------------------------
2012FRR version : ${PACKAGE_VERSION}
1080c13f 2013host operating system : ${host_os}
7ea487bc 2014source code location : ${srcdir}
2015compiler : ${CC}
2016compiler flags : ${CFLAGS}
6f0e3f6e 2017make : ${MAKE-make}
6f0e3f6e 2018linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
b2f36157 2019state file directory : ${frr_statedir}
dc7a2bf1 2020config file directory : `eval echo \`echo ${sysconfdir}\``
d6b72f7a 2021example directory : `eval echo \`echo ${exampledir}\``
30771d65 2022module directory : ${CFG_MODULE}
b2f36157
DL
2023user to run as : ${enable_user}
2024group to run as : ${enable_group}
2025group for vty sockets : ${enable_vty_group}
aa593d5e 2026config file mask : ${enable_configfile_mask}
2027log file mask : ${enable_logfile_mask}
dad253b4 2028zebra protobuf enabled : ${have_protobuf:-no}
dc7a2bf1 2029
2030The above user and group must have read/write access to the state file
105b8239 2031directory and to the config files in the config file directory."