]> git.proxmox.com Git - mirror_frr.git/blame - configure.ac
lib: Fix Spelling mistake
[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 358AC_ARG_ENABLE(ldpd,
5a6869b2 359 AS_HELP_STRING([--disable-ldpd], [do not 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 374AC_ARG_ENABLE(sharpd,
5a6869b2
MS
375 AS_HELP_STRING([--enable-sharpd], [build sharpd]))
376AC_ARG_ENABLE(staticd,
377 AS_HELP_STRING([--disable-staticd], [do not build staticd]))
7ea487bc 378AC_ARG_ENABLE(bgp-announce,
23925784 379 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
65efcfce 380AC_ARG_ENABLE(bgp-vnc,
f95f2ad9 381 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
65efcfce
LB
382AC_ARG_WITH(rfp-path,
383 AS_HELP_STRING([--with-rfp-path[=DIR]],[path to replaced stub RFP used with BGP VNC]))
7ea487bc 384AC_ARG_ENABLE(snmp,
23925784 385 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
b6116506
DL
386AC_ARG_ENABLE(zeromq,
387 AS_HELP_STRING([--enable-zeromq], [enable ZeroMQ handler (libfrrzmq)]))
7ea487bc 388AC_ARG_WITH(libpam,
23925784 389 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
1ef74ef7 390AC_ARG_ENABLE(ospfapi,
23925784 391 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
1ef74ef7 392AC_ARG_ENABLE(ospfclient,
23925784
DL
393 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
394 (this is the default if --disable-ospfapi is set)]))
7ea487bc 395AC_ARG_ENABLE(multipath,
23925784 396 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
fe86b484 397AC_ARG_ENABLE(user,
b2f36157 398 AS_HELP_STRING([--enable-user=USER], [user to run FRR suite as (default frr)]))
fe86b484 399AC_ARG_ENABLE(group,
b2f36157 400 AS_HELP_STRING([--enable-group=GROUP], [group to run FRR suite as (default frr)]))
edd7c245 401AC_ARG_ENABLE(vty_group,
23925784 402 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
aa593d5e 403AC_ARG_ENABLE(configfile_mask,
23925784 404 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
aa593d5e 405AC_ARG_ENABLE(logfile_mask,
23925784 406 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
5fd1f747 407AC_ARG_ENABLE(shell_access,
23925784 408 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
4e40b6d6
KK
409AC_ARG_ENABLE(realms,
410 AS_HELP_STRING([--enable-realms], [enable REALMS support under Linux]))
71c0fb50 411AC_ARG_ENABLE(rtadv,
23925784 412 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
ca776988 413AC_ARG_ENABLE(irdp,
8dc1f7fc 414 AS_HELP_STRING([--disable-irdp], [enable IRDP server support in zebra (default if supported)]))
41d3fc96 415AC_ARG_ENABLE(capabilities,
23925784 416 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
47f6aef0 417AC_ARG_ENABLE(rusage,
23925784 418 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
6b6942f9 419AC_ARG_ENABLE(gcc_ultra_verbose,
23925784 420 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
3453a712 421AC_ARG_ENABLE(linux24_tcp_md5,
23925784 422 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
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
3453a712
PJ
647if test "${enable_linux24_tcp_md5}" = "yes"; then
648 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
649fi
650
d2a0ccc6 651AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
652if test "${enable_rtadv}" != "no"; then
71c0fb50 653 AC_MSG_RESULT(yes)
d2a0ccc6 654 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
2487bea1 655else
656 AC_MSG_RESULT(no)
71c0fb50 657fi
7ea487bc 658
0b02a1b4
JAG
659if test x"${enable_user}" = x"no"; then
660 enable_user=""
661else
662 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
b2f36157 663 enable_user="frr"
0b02a1b4 664 fi
b2f36157 665 AC_DEFINE_UNQUOTED(FRR_USER, "${enable_user}", frr User)
edd7c245 666fi
edd7c245 667
0b02a1b4
JAG
668if test x"${enable_group}" = x"no"; then
669 enable_group=""
670else
671 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
b2f36157 672 enable_group="frr"
0b02a1b4 673 fi
b2f36157 674 AC_DEFINE_UNQUOTED(FRR_GROUP, "${enable_group}", frr Group)
edd7c245 675fi
edd7c245 676
677if test x"${enable_vty_group}" = x"yes" ; then
8d4aee5d 678 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
79cb2169 679elif test x"${enable_vty_group}" != x""; then
8d4aee5d 680 if test x"${enable_vty_group}" != x"no"; then
edd7c245 681 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
682 fi
683fi
26275b05 684AC_SUBST([enable_user])
685AC_SUBST([enable_group])
686AC_SUBST([enable_vty_group])
edd7c245 687
aa593d5e 688enable_configfile_mask=${enable_configfile_mask:-0600}
689AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
690
691enable_logfile_mask=${enable_logfile_mask:-0600}
692AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
693
7a6da5ba 694MPATH_NUM=1
7ea487bc 695
696case "${enable_multipath}" in
7c5d2b76 697 0)
7a6da5ba 698 MPATH_NUM=64
7c5d2b76 699 ;;
90fb3e13 700 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
7a6da5ba 701 MPATH_NUM="${enable_multipath}"
7ea487bc 702 ;;
703 "")
704 ;;
705 *)
6f0e3f6e 706 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
7ea487bc 707 ;;
708esac
709
7a6da5ba 710AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
7ea487bc 711
08c369bd
DS
712AC_DEFINE_UNQUOTED(VTYSH_PAGER, "$VTYSH_PAGER", [What pager to use])
713
83284209
AJ
714dnl --------------------
715dnl Enable code coverage
716dnl --------------------
717AM_CONDITIONAL([HAVE_GCOV],[test '!' "$enable_gcov" = no])
718
c737c7ba
AJ
719dnl ------------------------------------
720dnl Alpine only accepts numeric versions
721dnl ------------------------------------
722if test "x${enable_numeric_version}" != "x" ; then
723 VERSION="`echo ${VERSION} | tr -c -d '[[.0-9]]'`"
724 PACKAGE_VERSION="`echo ${PACKAGE_VERSION} | tr -c -d '[[.0-9]]'`"
725fi
726
1080c13f
JN
727dnl -----------------------------------
728dnl Add extra version string to package
729dnl name, string and version fields.
730dnl -----------------------------------
731if test "x${EXTRAVERSION}" != "x" ; then
0be793e6
DL
732 VERSION="${VERSION}${EXTRAVERSION}"
733 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
3ab11ecc 734 AC_SUBST(PACKAGE_EXTRAVERSION, ["${EXTRAVERSION}"])
0be793e6 735 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
1080c13f
JN
736fi
737
a16dcf7c
DL
738if test "x$with_pkg_git_version" = "xyes"; then
739 if test -d "${srcdir}/.git"; then
740 AC_DEFINE(GIT_VERSION, [1], [include git version info])
741 else with_pkg_git_version="no"
742 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
743 fi
744fi
745AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
0be793e6 746
6f0e3f6e
PJ
747dnl ------------------------------------
748dnl Check C keywords and standard types
749dnl ------------------------------------
750AC_C_CONST
751AC_C_INLINE
6f0e3f6e 752AC_C_VOLATILE
dc7a2bf1 753AC_HEADER_STDC
6f0e3f6e
PJ
754dnl AC_TYPE_PID_T
755AC_TYPE_UID_T
756AC_TYPE_MODE_T
757AC_TYPE_SIZE_T
6f0e3f6e 758AC_STRUCT_TM
dc7a2bf1 759
6f0e3f6e
PJ
760dnl -------------------------
761dnl Check other header files.
762dnl -------------------------
24f5e2fc
DL
763AC_CHECK_HEADERS([stropts.h sys/ksym.h \
764 linux/version.h asm/types.h \
765 sys/cdefs.h])
6f0e3f6e 766
899a4fd2
DL
767ac_stdatomic_ok=false
768AC_DEFINE(FRR_AUTOCONF_ATOMIC, 1, [did autoconf checks for atomic funcs])
769AC_CHECK_HEADER([stdatomic.h],[
770
771 AC_MSG_CHECKING([whether _Atomic qualifier works])
772 AC_LINK_IFELSE([AC_LANG_SOURCE([[
773#include <stdatomic.h>
774int main(int argc, char **argv) {
775 _Atomic int i = 0;
776 return i;
777}
778]])], [
779 AC_DEFINE(HAVE_STDATOMIC_H, 1, [found stdatomic.h])
780 AC_MSG_RESULT([yes])
781 ac_stdatomic_ok=true
782 ], [
783 AC_MSG_RESULT([no])
784 ])
785])
786
787AS_IF([$ac_stdatomic_ok], [true], [
788 AC_MSG_CHECKING([for __atomic_* builtins])
789 AC_LINK_IFELSE([AC_LANG_SOURCE([[
790int main(int argc, char **argv) {
791 volatile int i = 1;
792 __atomic_store_n (&i, 0, __ATOMIC_RELEASE);
793 return __atomic_load_n (&i, __ATOMIC_ACQUIRE);
794}
795]])], [
796 AC_DEFINE(HAVE___ATOMIC, 1, [found __atomic builtins])
797 AC_MSG_RESULT([yes])
798 ], [
799 AC_MSG_RESULT([no])
800
801 dnl FreeBSD 9 has a broken stdatomic.h where _Atomic doesn't work
802 AC_MSG_CHECKING([for __sync_* builtins])
803 AC_LINK_IFELSE([AC_LANG_SOURCE([[
804int main(int argc, char **argv) {
805 volatile int i = 1;
806 __sync_fetch_and_sub (&i, 1);
807 return __sync_val_compare_and_swap (&i, 0, 1);
808}
809]])], [
810 AC_DEFINE(HAVE___SYNC, 1, [found __sync builtins])
811 AC_MSG_RESULT([yes])
812
813 AC_MSG_CHECKING([for __sync_swap builtin])
814 AC_LINK_IFELSE([AC_LANG_SOURCE([[
815int main(int argc, char **argv) {
816 volatile int i = 1;
817 return __sync_swap (&i, 2);
818}
819]])], [
820 AC_DEFINE(HAVE___SYNC_SWAP, 1, [found __sync_swap builtin])
821 AC_MSG_RESULT([yes])
822 ], [
823 AC_MSG_RESULT([no])
824 ])
825
826 ], [
827 AC_MSG_RESULT([no])
828 AC_MSG_FAILURE([stdatomic.h unavailable and $CC has neither __atomic nor __sync builtins])
829 ])
830 ])
831])
832
6f0e3f6e 833dnl Utility macro to avoid retyping includes all the time
8e4da10b 834m4_define([FRR_INCLUDES],
6f0e3f6e
PJ
835[#ifdef SUNOS_5
836#define _XPG4_2
837#define __EXTENSIONS__
838#endif
839#include <stdio.h>
24f5e2fc
DL
840#include <stdlib.h>
841#include <stddef.h>
842#include <sys/types.h>
6f0e3f6e 843/* sys/conf.h depends on param.h on FBSD at least */
24f5e2fc 844#include <sys/param.h>
6f0e3f6e 845/* Required for MAXSIG */
24f5e2fc
DL
846#include <signal.h>
847#include <sys/socket.h>
ea057677
HT
848#ifdef __APPLE__
849# define __APPLE_USE_RFC_3542
850#endif
24f5e2fc
DL
851#include <netinet/in.h>
852#include <sys/time.h>
853#include <time.h>
854#include <net/if.h>
2b43bf23
DO
855])dnl
856
857dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
858dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
859dnl an additional round for it.
860
8e4da10b 861AC_CHECK_HEADERS([net/if_var.h], [], [], FRR_INCLUDES)
2b43bf23 862
8e4da10b
DL
863m4_define([FRR_INCLUDES],
864FRR_INCLUDES
2b43bf23
DO
865[#if HAVE_NET_IF_VAR_H
866# include <net/if_var.h>
867#endif
868])dnl
869
24f5e2fc
DL
870AC_CHECK_HEADERS([netinet/in_var.h \
871 net/if_dl.h net/netopt.h \
872 inet/nd.h netinet/ip_icmp.h \
6f0e3f6e 873 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
8e4da10b 874 [], [], FRR_INCLUDES)
6f0e3f6e
PJ
875
876AC_CHECK_HEADERS([ucontext.h], [], [],
877[#ifndef __USE_GNU
878#define __USE_GNU
879#endif /* __USE_GNU */
8e4da10b 880FRR_INCLUDES
6f0e3f6e
PJ
881])
882
bccbd141
JT
883m4_define([UCONTEXT_INCLUDES],
884[#include <ucontext.h>])dnl
885
886AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
887 [], [], [UCONTEXT_INCLUDES])
888AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
889 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
890 [], [], [UCONTEXT_INCLUDES])],
891 [], [UCONTEXT_INCLUDES])
892AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
893 [], [], [UCONTEXT_INCLUDES])
894
8e4da10b
DL
895m4_define([FRR_INCLUDES],
896FRR_INCLUDES
24f5e2fc
DL
897[
898#include <sys/un.h>
899#include <netinet/in_systm.h>
6f0e3f6e
PJ
900#if HAVE_NETINET_IN_VAR_H
901# include <netinet/in_var.h>
902#endif
903#if HAVE_NET_IF_DL_H
904# include <net/if_dl.h>
905#endif
6f0e3f6e
PJ
906#if HAVE_NET_NETOPT_H
907# include <net/netopt.h>
908#endif
24f5e2fc 909#include <net/route.h>
6f0e3f6e
PJ
910#if HAVE_INET_ND_H
911# include <inet/nd.h>
912#endif
24f5e2fc 913#include <arpa/inet.h>
11770e10
PJ
914/* Required for IDRP */
915#if HAVE_NETINET_IP_ICMP_H
916# include <netinet/ip_icmp.h>
917#endif
6f0e3f6e 918])dnl
dc7a2bf1 919
fa3232e1 920dnl V6 headers are checked below, after we check for v6
7ea487bc 921
ddfeb486
DL
922AC_MSG_CHECKING([which operating system interface to use])
923case "$host_os" in
924 sunos* | solaris2*)
925 AC_MSG_RESULT([Solaris])
926
927 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
928 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
929
930 AC_CHECK_LIB(socket, main)
931 AC_CHECK_LIB(nsl, main)
932 AC_CHECK_LIB(umem, main)
933 AC_CHECK_FUNCS([printstack], [
934 AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
935 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
936 ])
937 CURSES=-lcurses
938 SOLARIS="solaris"
939 ;;
940 linux*)
941 AC_MSG_RESULT([Linux])
942
943 AC_DEFINE(GNU_LINUX,,GNU Linux)
944 AC_DEFINE(HAVE_NETLINK,,netlink)
945 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
946
947 dnl Linux has a compilation problem with mixing
948 dnl netinet/in.h and linux/in6.h they are not
949 dnl compatible. There has been discussion on
950 dnl how to fix it but no real progress on implementation
951 dnl when they fix it, remove this
952 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
ddfeb486
DL
953 ;;
954 openbsd*)
955 AC_MSG_RESULT([OpenBSD])
956
957 AC_DEFINE(OPEN_BSD,,OpenBSD)
958 AC_DEFINE(KAME,1,KAME IPv6)
d616d639 959 AC_DEFINE(BSD_V6_SYSCTL,1,BSD v6 sysctl to turn on and off forwarding)
004174c7
JAG
960
961 if test "x${enable_pimd}" != "xno"; then
962 case "$host_os" in
963 openbsd6.0)
964 ;;
965 openbsd[6-9]*)
966 AC_MSG_FAILURE([pimd cannot be enabled as PIM support has been removed from OpenBSD 6.1])
967 ;;
968 esac
969 fi
ddfeb486
DL
970 ;;
971 *)
972 AC_MSG_RESULT([BSD])
973
974 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
975 AC_DEFINE(KAME,1,KAME IPv6)
d616d639 976 AC_DEFINE(BSD_V6_SYSCTL,1,BSD v6 sysctl to turn on and off forwarding)
ddfeb486 977 ;;
7ea487bc 978esac
0fb07d51 979AM_CONDITIONAL(SOLARIS, test "${SOLARIS}" = "solaris")
7ea487bc 980
62c9f504
PJ
981AC_SYS_LARGEFILE
982
4e40b6d6
KK
983dnl ------------------------
984dnl Integrated REALMS option
985dnl ------------------------
986if test "${enable_realms}" = "yes"; then
987 case "$host_os" in
988 linux*)
989 AC_DEFINE(SUPPORT_REALMS,, Realms support)
990 ;;
991 *)
992 echo "Sorry, only Linux has REALMS support"
993 exit 1
994 ;;
995 esac
996fi
997AM_CONDITIONAL([SUPPORT_REALMS], [test "${enable_realms}" = "yes"])
998
7ea487bc 999dnl ---------------------
1000dnl Integrated VTY option
1001dnl ---------------------
1002case "${enable_vtysh}" in
f0646db0
DS
1003 "no") VTYSH="";;
1004 *) VTYSH="vtysh";
7ea487bc 1005 AC_DEFINE(VTYSH,,VTY shell)
fc9d0745 1006dnl Vtysh uses libreadline, which looks for termcap functions at
6f0e3f6e 1007dnl configure time. We follow readlines search order.
fc9d0745 1008dnl The required procedures are in libtermcap on NetBSD, in
1009dnl [TODO] on Linux, and in [TODO] on Solaris.
c0689394 1010 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
a969459c 1011 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
1012 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
1013 [AC_CHECK_LIB(ncurses, tputs,
1014 LIBREADLINE="$LIBREADLINE -lncurses")]
1015 )]
1016 )]
1017 )
4c2f8e95 1018 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
a969459c 1019 "$LIBREADLINE")
7ea487bc 1020 if test $ac_cv_lib_readline_main = no; then
fc9d0745 1021 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
7ea487bc 1022 fi
1023 AC_CHECK_HEADER(readline/history.h)
1024 if test $ac_cv_header_readline_history_h = no;then
1025 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
1026 fi
a969459c 1027 AC_CHECK_LIB(readline, rl_completion_matches,
1028 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
3d3de8c4 1029 if test $ac_cv_lib_readline_rl_completion_matches = no; then
1030 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
1031 fi
1032 ;;
7ea487bc 1033esac
c0689394 1034AC_SUBST(LIBREADLINE)
f027d331 1035AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
7ea487bc 1036
1037dnl ----------
1038dnl PAM module
6159928d 1039dnl
1689cf7e 1040dnl FRR detects the PAM library it is built against by checking for a
6159928d
DO
1041dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
1042dnl is known to #include pam_appl.h, the standard header of a PAM library, and
1043dnl openpam.h doesn't do that, although depends on the header too. Hence a
1044dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
1045dnl of OpenPAM.
7ea487bc 1046dnl ----------
24cd435b 1047if test "$with_libpam" = "yes"; then
6f0e3f6e
PJ
1048 AC_CHECK_HEADER([security/pam_misc.h],
1049 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
1050 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
1051 pam_conv_func="misc_conv"
1052 ],
8e4da10b 1053 [], FRR_INCLUDES)
6f0e3f6e
PJ
1054 AC_CHECK_HEADER([security/openpam.h],
1055 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
1056 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
1057 pam_conv_func="openpam_ttyconv"
1058 ],
8e4da10b 1059 [], FRR_INCLUDES[#include <security/pam_appl.h>])
24cd435b 1060 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
1061 AC_MSG_WARN([*** pam support will not be built ***])
1062 with_libpam="no"
1063 fi
1064fi
1065
7ea487bc 1066if test "$with_libpam" = "yes"; then
6f0e3f6e 1067dnl took this test from proftpds configure.in and suited to our needs
7ea487bc 1068dnl -------------------------------------------------------------------------
1069dnl
1070dnl This next check looks funky due to a linker problem with some versions
1071dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
1072dnl omitted requiring libdl linking information. PAM-0.72 or better ships
1073dnl with RedHat 6.2 and Debian 2.2 or better.
1074AC_CHECK_LIB(pam, pam_start,
24cd435b 1075 [AC_CHECK_LIB(pam, $pam_conv_func,
7ea487bc 1076 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1077 LIBPAM="-lpam"],
1078 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1079 LIBPAM="-lpam -lpam_misc"]
1080 )
1081 ],
1082
1083 [AC_CHECK_LIB(pam, pam_end,
24cd435b 1084 [AC_CHECK_LIB(pam, $pam_conv_func,
a159ed93 1085 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
7ea487bc 1086 LIBPAM="-lpam -ldl"],
a159ed93 1087 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
7ea487bc 1088 LIBPAM="-lpam -ldl -lpam_misc"]
1089 )
1090 ],AC_MSG_WARN([*** pam support will not be built ***]),
1091 [-ldl])
1092 ]
1093)
1094fi
1095AC_SUBST(LIBPAM)
1096
1097dnl -------------------------------
1098dnl Endian-ness check
1099dnl -------------------------------
1100AC_WORDS_BIGENDIAN
1101
1102dnl -------------------------------
1103dnl check the size in byte of the C
1104dnl -------------------------------
1105dnl AC_CHECK_SIZEOF(char)
1106dnl AC_CHECK_SIZEOF(int)
1107dnl AC_CHECK_SIZEOF(short)
1108dnl AC_CHECK_SIZEOF(long)
1109
1110dnl ----------------------------
1111dnl check existance of functions
1112dnl ----------------------------
6f0e3f6e
PJ
1113AC_FUNC_FNMATCH
1114AC_FUNC_FORK
6f0e3f6e 1115AC_FUNC_MKTIME
6f0e3f6e 1116AC_FUNC_STAT
6f0e3f6e
PJ
1117
1118dnl -------------------------------
1119dnl bgpd needs pow() and hence libm
1120dnl -------------------------------
1121TMPLIBS="$LIBS"
1122AC_CHECK_HEADER([math.h],
1123 [AC_CHECK_LIB([m], [pow],
1124 [LIBM="-lm"
1125 LIBS="$LIBS $LIBM"
6f0e3f6e
PJ
1126 AC_CHECK_FUNCS(pow,[],[LIBM=""])
1127 ])
1128])
1129if test x"$LIBM" = x ; then
1130 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
1131fi
1132LIBS="$TMPLIBS"
1133AC_SUBST(LIBM)
1134
154b9e8f
DL
1135AC_CHECK_FUNCS([ppoll], [
1136 AC_DEFINE([HAVE_PPOLL], 1, [have Linux/BSD ppoll()])
1137])
1138AC_CHECK_FUNCS([pollts], [
1139 AC_DEFINE([HAVE_POLLTS], 1, [have NetBSD pollts()])
1140])
1141
6f0e3f6e
PJ
1142dnl ---------------
1143dnl other functions
1144dnl ---------------
24f5e2fc
DL
1145AC_CHECK_FUNCS([ \
1146 strlcat strlcpy \
316d0ae5 1147 getgrouplist])
6f0e3f6e 1148
13460c44
FL
1149AC_CHECK_HEADER([asm-generic/unistd.h],
1150 [AC_CHECK_DECL(__NR_setns,
1151 AC_DEFINE(HAVE_NETNS,, Have netns),,
8e4da10b 1152 FRR_INCLUDES [#include <asm-generic/unistd.h>
13460c44 1153 ])
428cd73f 1154 AC_CHECK_FUNCS(setns)]
13460c44
FL
1155 )
1156
238497fc
PJ
1157dnl --------------------------
1158dnl Determine IS-IS I/O method
1159dnl --------------------------
745bf05f
DL
1160AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
1161AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
1162AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
238497fc
PJ
1163AC_CHECK_HEADER(net/bpf.h)
1164AC_CHECK_HEADER(sys/dlpi.h)
1165AC_MSG_CHECKING(zebra IS-IS I/O method)
ddfeb486
DL
1166
1167case "$host_os" in
1168 linux*)
1169 AC_MSG_RESULT(pfpacket)
1170 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
1171 ;;
1172 solaris* | sunos*)
1173 AC_MSG_RESULT(DLPI)
1174 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
1175 ;;
1176 *)
1177 if test $ac_cv_header_net_bpf_h = no; then
1178 if test $ac_cv_header_sys_dlpi_h = no; then
1179 AC_MSG_RESULT(none)
86e463cf
DL
1180 if test "${enable_isisd}" = yes; then
1181 AC_MSG_FAILURE([IS-IS support requested but no packet backend found])
1182 fi
ddfeb486 1183 AC_MSG_WARN([*** IS-IS support will not be built ***])
86e463cf 1184 enable_isisd="no"
ddfeb486
DL
1185 else
1186 AC_MSG_RESULT(DLPI)
1187 fi
1188 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
238497fc 1189 else
ddfeb486
DL
1190 AC_MSG_RESULT(BPF)
1191 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
238497fc 1192 fi
ddfeb486
DL
1193 ;;
1194esac
745bf05f 1195AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
238497fc 1196
b99760ab 1197dnl ------------------------------------
1198dnl check for broken CMSG_FIRSTHDR macro
1199dnl ------------------------------------
6c20046f 1200AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
5b087528 1201AC_RUN_IFELSE([AC_LANG_SOURCE([[
b99760ab 1202#ifdef SUNOS_5
1203#define _XPG4_2
1204#define __EXTENSIONS__
1205#endif
24f5e2fc 1206#include <stdlib.h>
b99760ab 1207#include <sys/types.h>
1208#include <sys/socket.h>
1209
1210main()
1211{
1212 struct msghdr msg;
1213 char buf[4];
1214
1215 msg.msg_control = buf;
1216 msg.msg_controllen = 0;
1217
1218 if (CMSG_FIRSTHDR(&msg) != NULL)
1219 exit(0);
1220 exit (1);
5b087528 1221}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
d33e8d7b 1222[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
b99760ab 1223
42c98199 1224dnl ---------------------------------------------------------------
1225dnl figure out how to specify an interface in multicast sockets API
1226dnl ---------------------------------------------------------------
8e4da10b 1227AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
42c98199 1228
b3f2bf7c 1229AC_CHECK_HEADERS([linux/mroute.h], [], [],[
24f5e2fc
DL
1230 #include <sys/socket.h>
1231 #include <netinet/in.h>
b3f2bf7c
RW
1232 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
1233 #include <linux/types.h>
1234])
1235
8e4da10b
DL
1236m4_define([FRR_INCLUDES],
1237FRR_INCLUDES
b3f2bf7c
RW
1238[#if HAVE_LINUX_MROUTE_H
1239# include <linux/mroute.h>
1240#endif
1241])dnl
1242
1243AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
24f5e2fc
DL
1244 #include <sys/socket.h>
1245 #include <sys/types.h>
1246 #include <netinet/in.h>
1247 #include <net/route.h>
b3f2bf7c
RW
1248])
1249
8e4da10b
DL
1250m4_define([FRR_INCLUDES],
1251FRR_INCLUDES
b3f2bf7c
RW
1252[#if HAVE_NETINET_IP_MROUTE_H
1253# include <netinet/ip_mroute.h>
1254#endif
1255])dnl
1256
42c98199 1257AC_MSG_CHECKING([for BSD struct ip_mreq hack])
24f5e2fc
DL
1258AC_TRY_COMPILE([#include <sys/param.h>],
1259[#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 1260 return (0);
1261#else
1262 #error No support for BSD struct ip_mreq hack detected
1263#endif],[AC_MSG_RESULT(yes)
1264AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1265AC_MSG_RESULT(no))
1266
10d04cdb
DT
1267AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1268AC_TRY_COMPILE([
1269#include <sys/types.h>
1270#include <netinet/in.h>
1271], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1272], [AC_MSG_RESULT(yes)
1273AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1274AC_MSG_RESULT(no))
1275
c543a173
AS
1276dnl ---------------------------------------------------------------
1277dnl figure out how to check link-state
1278dnl ---------------------------------------------------------------
24f5e2fc
DL
1279AC_CHECK_HEADER( [net/if_media.h],
1280 [m4_define([LINK_DETECT_INCLUDES],
8e4da10b 1281 FRR_INCLUDES
24f5e2fc
DL
1282 [#include <net/if_media.h>
1283 ])
1284 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1285 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1286 [], LINK_DETECT_INCLUDES)],
1287 [],
8e4da10b 1288 FRR_INCLUDES)
c543a173 1289
9234b382
DV
1290dnl ---------------------------------------------------------------
1291dnl Additional, newer way to check link-state using ifi_link_state.
1292dnl Not available in all BSD's when ifmediareq available
1293dnl ---------------------------------------------------------------
24f5e2fc
DL
1294AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1295 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
8e4da10b 1296 [], FRR_INCLUDES)
9234b382 1297
0df7c91f
PJ
1298dnl ------------------------
1299dnl TCP_MD5SIG socket option
1300dnl ------------------------
1301
1302AC_CHECK_HEADER([netinet/tcp.h],
1303 [m4_define([MD5_INCLUDES],
8e4da10b 1304 FRR_INCLUDES
0df7c91f
PJ
1305 [#include <netinet/tcp.h>
1306 ])
1307 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1308 [],
8e4da10b 1309 FRR_INCLUDES)
0df7c91f
PJ
1310if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1311 AC_CHECK_HEADER([linux/tcp.h],
1312 [m4_define([MD5_INCLUDES],
8e4da10b 1313 FRR_INCLUDES
0df7c91f
PJ
1314 [#include <linux/tcp.h>
1315 ])
1316 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1317fi
1318
60060acc
RW
1319dnl ----------------------------------------------------------------------------
1320dnl figure out if domainname is available in the utsname struct (GNU extension).
1321dnl ----------------------------------------------------------------------------
1322AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1323
fa3232e1 1324dnl ------------------
1325dnl IPv6 header checks
1326dnl ------------------
24f5e2fc 1327AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
6f0e3f6e 1328 netinet6/in6_var.h netinet6/nd6.h], [], [],
8e4da10b 1329 FRR_INCLUDES)
fa3232e1 1330
8e4da10b
DL
1331m4_define([FRR_INCLUDES],dnl
1332FRR_INCLUDES
6f0e3f6e
PJ
1333[#if HAVE_NETINET6_IN6_H
1334#include <netinet6/in6.h>
1335#endif
1336#if HAVE_NETINET_IN6_VAR_H
1337#include <netinet/in6_var.h>
1338#endif
24f5e2fc 1339#include <netinet/icmp6.h>
6f0e3f6e
PJ
1340#if HAVE_NETINET6_IN6_VAR_H
1341# include <netinet6/in6_var.h>
1342#endif
1343#if HAVE_NETINET6_ND6_H
fbf24544 1344# include <netinet6/nd6.h>
6f0e3f6e
PJ
1345#endif
1346])dnl
1347
cbcd9bfc
JT
1348dnl disable doc check
1349if test "${enable_doc}" = "no";then
1350 DOC=""
1351else
1352 DOC="doc"
1353fi
1354
7ea487bc 1355dnl --------------------
1356dnl Daemon disable check
1357dnl --------------------
64d44794 1358AM_CONDITIONAL(ZEBRA, test "${enable_zebra}" != "no")
7ea487bc 1359
1360if test "${enable_bgpd}" = "no";then
1361 BGPD=""
1362else
1363 BGPD="bgpd"
1364fi
f027d331 1365AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
7ea487bc 1366
7f269117 1367AM_CONDITIONAL(RIPD, test "${enable_ripd}" != "no")
afca0690 1368AM_CONDITIONAL(OSPFD, test "${enable_ospfd}" != "no")
30237d29 1369AM_CONDITIONAL(LDPD, test "${enable_ldpd}" != "no")
7ea487bc 1370
30237d29 1371AS_IF([test "${enable_ldpd}" != "no"], [
87ab4aec 1372 AC_DEFINE(HAVE_LDPD, 1, ldpd)
30237d29 1373])
eac6e3f0 1374
7134904b
RZ
1375if test "$enable_bfdd" = "no"; then
1376 AC_DEFINE(HAVE_BFDD, 0, bfdd)
1377 BFDD=""
1378else
1379 AC_DEFINE(HAVE_BFDD, 1, bfdd)
1380 BFDD="bfdd"
1381
1382 case $host_os in
1383 linux*)
1384 AC_DEFINE(BFD_LINUX, 1, bfdd)
1385 ;;
1386
1387 *)
1388 AC_DEFINE(BFD_BSD, 1, bfdd)
1389 ;;
1390 esac
1391fi
1392
1393AM_CONDITIONAL(BFDD, [test "x$BFDD" = "xbfdd"])
1394
1395if test $ac_cv_lib_json_c_json_object_get = no -a "x$BFDD" = "xbfdd"; then
1396 AC_MSG_ERROR(["you must use json-c library to use bfdd"])
1397fi
1398
42350cfc 1399NHRPD=""
ddfeb486
DL
1400case "$host_os" in
1401 linux*)
1402 if test "${enable_nhrpd}" != "no"; then
1403 NHRPD="nhrpd"
1404 fi
1405 ;;
1406 *)
1407 if test "${enable_nhrpd}" = "yes"; then
1408 AC_MSG_ERROR([nhrpd requires kernel APIs that are only present on Linux.])
1409 fi
1410 ;;
1411esac
2fb975da
TT
1412AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1413
b6f5781c 1414AM_CONDITIONAL(EIGRPD, test "${enable_eigrpd}" != "no")
7f57883e 1415
9473e340
DS
1416if test "${enable_watchfrr}" = "no";then
1417 WATCHFRR=""
d0199430 1418else
9473e340 1419 WATCHFRR="watchfrr"
d0199430 1420fi
9473e340 1421AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
d0199430 1422
1ef74ef7 1423OSPFCLIENT=""
cd66cd4c 1424if test "${enable_ospfapi}" != "no";then
9a569848 1425 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1ef74ef7 1426
cd66cd4c 1427 if test "${enable_ospfclient}" != "no";then
1ef74ef7 1428 OSPFCLIENT="ospfclient"
1ef74ef7 1429 fi
7ea487bc 1430fi
cd66cd4c 1431
f027d331 1432AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
7f269117 1433AM_CONDITIONAL(RIPNGD, test "${enable_ripngd}" != "no")
b6f5781c 1434AM_CONDITIONAL(BABELD, test "${enable_babeld}" != "no")
afca0690 1435AM_CONDITIONAL(OSPF6D, test "${enable_ospf6d}" != "no")
86e463cf 1436AM_CONDITIONAL(ISISD, test "${enable_isisd}" != "no")
35a3c3c1 1437AM_CONDITIONAL(PIMD, test "${enable_pimd}" != "no")
e5c83d9b 1438AM_CONDITIONAL(PBRD, test "${enable_pbrd}" != "no")
2222a716 1439AM_CONDITIONAL(SHARPD, test "${enable_sharpd}" = "yes")
7e24fdf3 1440AM_CONDITIONAL(STATICD, test "${enable_staticd}" != "no")
12e41d03 1441
7ea487bc 1442if test "${enable_bgp_announce}" = "no";then
750e8146
PJ
1443 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1444else
1445 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
7ea487bc 1446fi
1447
65efcfce
LB
1448if test "${with_rfp_path}" = "yes" || test x"${with_rfp_path}" = x""; then
1449 with_rfp_path="bgpd/rfp-example"
1450fi
1451if test "${with_rfp_path}" != "no"; then
1452 VNC_RFP_PATH="${with_rfp_path}"
1453 AC_SUBST(VNC_RFP_PATH)
1454fi
1455
f95f2ad9 1456if test "${enable_bgp_vnc}" != "no";then
65efcfce
LB
1457 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
1458 RFPTEST="${with_rfp_path}/rfptest"
1459 LIBRFP="${with_rfp_path}/librfp"
1460 RFPINC="${with_rfp_path}/librfp"
1461else
1462 RFPTEST=
1463 LIBRFP=
1464 RFPINC="bgpd/rfp-example/librfp"
1465fi
1466# set
f95f2ad9 1467AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
65efcfce 1468
cbcd9bfc 1469AC_SUBST(DOC)
65efcfce
LB
1470AC_SUBST(RFPTEST)
1471AC_SUBST(LIBRFP)
1472AC_SUBST(RFPINC)
7ea487bc 1473AC_SUBST(BGPD)
97cee877 1474AC_SUBST(SOLARIS)
7ea487bc 1475AC_SUBST(VTYSH)
7ea487bc 1476AC_SUBST(CURSES)
f9e75524
JAG
1477AC_CHECK_LIB(crypt, crypt, [],
1478 [AC_CHECK_LIB(crypto, DES_crypt)])
7ea487bc 1479AC_CHECK_LIB(resolv, res_init)
7ea487bc 1480
25f45887
JJ
1481dnl ---------------------------
1482dnl check system has PCRE regexp
1483dnl ---------------------------
1484if test "x$enable_pcreposix" = "xyes"; then
ad9a0825
DL
1485 AC_CHECK_LIB(pcreposix, regexec, [], [
1486 AC_MSG_ERROR([--enable-pcreposix given but unable to find libpcreposix])
1487 ])
25f45887 1488fi
25f45887 1489AC_SUBST(HAVE_LIBPCREPOSIX)
7ea487bc 1490
2fb975da
TT
1491dnl ------------------
1492dnl check C-Ares library
1493dnl ------------------
42350cfc 1494if test "${NHRPD}" != ""; then
92e50261
DL
1495 PKG_CHECK_MODULES([CARES], [libcares], , [
1496 AC_MSG_ERROR([trying to build nhrpd, but libcares not found. install c-ares and its -dev headers.])
1497 ])
2fb975da
TT
1498fi
1499
1500
7ea487bc 1501dnl ------------------
b1fc9acb 1502dnl check Net-SNMP library
7ea487bc 1503dnl ------------------
53b99735 1504if test "${enable_snmp}" != "" -a "${enable_snmp}" != "no"; then
08d7f653
VB
1505 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1506 if test x"$NETSNMP_CONFIG" = x"no"; then
1507 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1508 fi
46081234
DL
1509 SNMP_LIBS="`${NETSNMP_CONFIG} --agent-libs`"
1510 SNMP_CFLAGS="`${NETSNMP_CONFIG} --base-cflags`"
08d7f653 1511 AC_MSG_CHECKING([whether we can link to Net-SNMP])
92e50261 1512 AC_LINK_IFELSE_FLAGS([$SNMP_CFLAGS], [$SNMP_LIBS], [AC_LANG_PROGRAM([
08d7f653
VB
1513int main(void);
1514],
1515[
1516{
1517 return 0;
1518}
92e50261 1519])], [
08d7f653 1520 AC_MSG_ERROR([--enable-snmp given but not usable])])
d6be5fb9
VB
1521 case "${enable_snmp}" in
1522 yes)
1523 SNMP_METHOD=agentx
1524 ;;
1525 smux|agentx)
1526 SNMP_METHOD="${enable_snmp}"
1527 ;;
1528 *)
1529 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1530 ;;
1531 esac
1532 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1533 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1534 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
6cf9df08 1535fi
46081234
DL
1536AM_CONDITIONAL([SNMP], [test "x${SNMP_METHOD}" != "x"])
1537AC_SUBST(SNMP_LIBS)
1538AC_SUBST(SNMP_CFLAGS)
6cf9df08 1539
4db0cff1
QY
1540dnl ---------------
1541dnl math
1542dnl ---------------
1543AC_SEARCH_LIBS([sqrt], [m])
1544
b249c083
DL
1545dnl ---------------
1546dnl dlopen & dlinfo
1547dnl ---------------
30771d65
DL
1548AC_SEARCH_LIBS(dlopen, [dl dld], [], [
1549 AC_MSG_ERROR([unable to find the dlopen()])
1550])
1551
b249c083
DL
1552AC_CHECK_HEADERS([link.h])
1553
1554AC_MSG_CHECKING([for dlinfo(RTLD_DI_ORIGIN)])
1555AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1556#include <stdlib.h>
1557#ifdef HAVE_LINK_H
1558#include <link.h>
1559#endif
1560#include <dlfcn.h>
1561]], [[
1562 char origin[1];
1563 dlinfo (NULL, RTLD_DI_ORIGIN, &origin);
1564]])], [
1565 AC_MSG_RESULT(yes)
1566 AC_DEFINE(HAVE_DLINFO_ORIGIN, 1, [Have dlinfo RTLD_DI_ORIGIN])
1567], [
1568 AC_MSG_RESULT(no)
1569])
1570
1571AC_MSG_CHECKING([for dlinfo(RTLD_DI_LINKMAP)])
1572AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1573#include <stdlib.h>
1574#ifdef HAVE_LINK_H
1575#include <link.h>
1576#endif
1577#include <dlfcn.h>
1578]], [[
1579 struct link_map *lm = NULL;
1580 dlinfo (NULL, RTLD_DI_LINKMAP, &lm);
1581]])], [
1582 AC_MSG_RESULT(yes)
1583 AC_DEFINE(HAVE_DLINFO_LINKMAP, 1, [Have dlinfo RTLD_DI_LINKMAP])
1584], [
1585 AC_MSG_RESULT(no)
1586])
1587
6cf9df08 1588
62ff928b
DS
1589AM_CONDITIONAL(SNMP, test "x$SNMP_METHOD" = "xagentx")
1590
7ea487bc 1591dnl ---------------------------
6f0e3f6e 1592dnl sockaddr and netinet checks
7ea487bc 1593dnl ---------------------------
24f5e2fc
DL
1594AC_CHECK_TYPES([
1595 struct sockaddr_dl,
1596 struct vifctl, struct mfcctl, struct sioc_sg_req,
12e41d03 1597 vifi_t, struct sioc_vif_req, struct igmpmsg,
6f0e3f6e
PJ
1598 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1599 struct nd_opt_adv_interval, struct rt_addrinfo,
11770e10 1600 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
8e4da10b 1601 [], [], FRR_INCLUDES)
6f0e3f6e
PJ
1602
1603AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1604 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
ca3ccd87 1605 struct sockaddr_dl.sdl_len,
6f0e3f6e
PJ
1606 struct if6_aliasreq.ifra_lifetime,
1607 struct nd_opt_adv_interval.nd_opt_ai_type],
8e4da10b 1608 [], [], FRR_INCLUDES)
29c4c9bd 1609
6f0e3f6e 1610dnl ---------------------------
11770e10 1611dnl IRDP/pktinfo/icmphdr checks
6f0e3f6e 1612dnl ---------------------------
8dc1f7fc
DL
1613
1614AC_CHECK_TYPES([struct in_pktinfo], [
1615 AC_CHECK_TYPES([struct icmphdr], [
1616 IRDP=true
1617 ], [
1618 IRDP=false
1619 ], [FRR_INCLUDES])
1620], [
1621 IRDP=false
1622], [FRR_INCLUDES])
1623
1624case "${enable_irdp}" in
1625yes)
1626 $IRDP || AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1627 ;;
1628no)
1629 IRDP=false
1630 ;;
1631esac
1632
1633AM_CONDITIONAL(IRDP, $IRDP)
29c4c9bd 1634
12e41d03
DL
1635dnl -----------------------
1636dnl checking for IP_PKTINFO
1637dnl -----------------------
1638AC_MSG_CHECKING(for IP_PKTINFO)
1639AC_TRY_COMPILE([#include <netdb.h>], [
1640 int opt = IP_PKTINFO;
1641], [
1642 AC_MSG_RESULT(yes)
1643 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1644], [
1645 AC_MSG_RESULT(no)
1646])
1647
1648dnl ---------------------------
1649dnl checking for IP_RECVDSTADDR
1650dnl ---------------------------
1651AC_MSG_CHECKING(for IP_RECVDSTADDR)
1652AC_TRY_COMPILE([#include <netinet/in.h>], [
1653 int opt = IP_RECVDSTADDR;
1654], [
1655 AC_MSG_RESULT(yes)
1656 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1657], [
1658 AC_MSG_RESULT(no)
1659])
1660
1661dnl ----------------------
1662dnl checking for IP_RECVIF
1663dnl ----------------------
1664AC_MSG_CHECKING(for IP_RECVIF)
1665AC_TRY_COMPILE([#include <netinet/in.h>], [
1666 int opt = IP_RECVIF;
1667], [
1668 AC_MSG_RESULT(yes)
1669 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1670], [
1671 AC_MSG_RESULT(no)
1672])
1673
eac6e3f0
RW
1674dnl ----------------------
1675dnl checking for SO_BINDANY
1676dnl ----------------------
1677AC_MSG_CHECKING(for SO_BINDANY)
1678AC_TRY_COMPILE([#include <sys/socket.h>], [
1679 int opt = SO_BINDANY;
1680], [
1681 AC_MSG_RESULT(yes)
1682 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1683], [
1684 AC_MSG_RESULT(no)
1685])
1686
1687dnl ----------------------
1688dnl checking for IP_FREEBIND
1689dnl ----------------------
1690AC_MSG_CHECKING(for IP_FREEBIND)
1691AC_TRY_COMPILE([#include <netinet/in.h>], [
1692 int opt = IP_FREEBIND;
1693], [
1694 AC_MSG_RESULT(yes)
1695 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1696], [
1697 AC_MSG_RESULT(no)
1698])
1699
ba0cb3fe
DS
1700dnl --------------------------------------
1701dnl checking for be32dec existence or not
1702dnl --------------------------------------
1703AC_CHECK_DECLS([be32enc, be32dec], [], [],
1704 [#include <sys/endian.h>])
1705
c4376c9d
SH
1706dnl --------------------------------------
1707dnl checking for clock_time monotonic struct and call
1708dnl --------------------------------------
6511cab2
PJ
1709AC_CHECK_DECL(CLOCK_MONOTONIC,
1710 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
9964fcfc 1711 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
8e4da10b 1712], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
c4376c9d 1713
bbf5ffa0
QY
1714dnl --------------------------------------
1715dnl checking for flex and bison
1716dnl --------------------------------------
4a06690f 1717
bbf5ffa0 1718AM_PROG_LEX
4a06690f 1719AC_MSG_CHECKING(version of flex)
1689cf7e
JAG
1720frr_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
1721frr_ac_flex_version="${frr_ac_flex_version##* }"
1722AC_MSG_RESULT([$frr_ac_flex_version])
1723AX_COMPARE_VERSION([$frr_ac_flex_version], [lt], [2.5.20], [
4a06690f
DL
1724 LEX="$SHELL $missing_dir/missing flex"
1725 if test -f "${srcdir}/lib/command_lex.c" -a -f "${srcdir}/lib/command_lex.h"; then
1726 AC_MSG_WARN([using pregenerated flex output files])
1727 else
1728 AC_MSG_ERROR([flex failure and pregenerated files not included (probably a git build)])
1729 fi
1730 AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
1731 AC_SUBST([LEXLIB], [''])
1732])
0d37f9f3 1733
bbf5ffa0 1734AC_PROG_YACC
0d37f9f3
DL
1735dnl thanks GNU bison for this b*llshit...
1736AC_MSG_CHECKING(version of bison)
1689cf7e
JAG
1737frr_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
1738frr_ac_bison_version="${frr_ac_bison_version##* }"
1739frr_ac_bison_missing="false"
1740case "x${frr_ac_bison_version}" in
0d37f9f3
DL
1741 x2.7*)
1742 BISON_OPENBRACE='"'
1743 BISON_CLOSEBRACE='"'
05dbb7df 1744 BISON_VERBOSE=''
1689cf7e 1745 AC_MSG_RESULT([$frr_ac_bison_version - 2.7 or older])
0d37f9f3
DL
1746 ;;
1747 x2.*|x1.*)
1689cf7e 1748 AC_MSG_RESULT([$frr_ac_bison_version])
0d37f9f3 1749 AC_MSG_WARN([installed bison is too old. Please install GNU bison 2.7.x or newer.])
1689cf7e 1750 frr_ac_bison_missing="true"
0d37f9f3
DL
1751 ;;
1752 x)
1753 AC_MSG_RESULT([none])
1754 AC_MSG_WARN([could not determine bison version. Please install GNU bison 2.7.x or newer.])
1689cf7e 1755 frr_ac_bison_missing="true"
0d37f9f3
DL
1756 ;;
1757 *)
1758 BISON_OPENBRACE='{'
1759 BISON_CLOSEBRACE='}'
05dbb7df 1760 BISON_VERBOSE='-Dparse.error=verbose'
1689cf7e 1761 AC_MSG_RESULT([$frr_ac_bison_version - 3.0 or newer])
0d37f9f3
DL
1762 ;;
1763esac
1764AC_SUBST(BISON_OPENBRACE)
1765AC_SUBST(BISON_CLOSEBRACE)
05dbb7df 1766AC_SUBST(BISON_VERBOSE)
0d37f9f3 1767
1689cf7e 1768if $frr_ac_bison_missing; then
0d37f9f3
DL
1769 YACC="$SHELL $missing_dir/missing bison -y"
1770 if test -f "${srcdir}/lib/command_parse.c" -a -f "${srcdir}/lib/command_parse.h"; then
1771 AC_MSG_WARN([using pregenerated bison output files])
1772 else
1773 AC_MSG_ERROR([bison failure and pregenerated files not included (probably a git build)])
1774 fi
1775fi
bbf5ffa0 1776
edd7c245 1777dnl -------------------
1778dnl capabilities checks
1779dnl -------------------
41d3fc96 1780if test "${enable_capabilities}" != "no"; then
1781 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1782 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1783 [AC_MSG_RESULT(yes)
1784 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
8e4da10b 1785 frr_ac_keepcaps="yes"],
41d3fc96 1786 AC_MSG_RESULT(no)
edd7c245 1787 )
8e4da10b 1788 if test x"${frr_ac_keepcaps}" = x"yes"; then
41d3fc96 1789 AC_CHECK_HEADERS(sys/capability.h)
1790 fi
1791 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1792 AC_CHECK_LIB(cap, cap_init,
1793 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1794 LIBCAP="-lcap"
8e4da10b 1795 frr_ac_lcaps="yes"]
41d3fc96 1796 )
ceacedba 1797 else
1798 AC_CHECK_HEADERS(priv.h,
1799 [AC_MSG_CHECKING(Solaris style privileges are available)
1800 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1801 [AC_MSG_RESULT(yes)
1802 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
8e4da10b 1803 frr_ac_scaps="yes"],
ceacedba 1804 AC_MSG_RESULT(no)
1805 )
1806 ]
1807 )
1808 fi
8e4da10b
DL
1809 if test x"${frr_ac_scaps}" = x"yes" \
1810 -o x"${frr_ac_lcaps}" = x"yes"; then
ceacedba 1811 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
41d3fc96 1812 fi
edd7c245 1813fi
1814AC_SUBST(LIBCAP)
1815
fb2d1502 1816dnl ---------------------------
1817dnl check for glibc 'backtrace'
1818dnl ---------------------------
8c99b4c1
DL
1819if test x"${enable_backtrace}" != x"no" ; then
1820 backtrace_ok=no
1821 AC_CHECK_HEADER([execinfo.h], [
1822 AC_SEARCH_LIBS([backtrace], [execinfo], [
1823 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1824 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1825 backtrace_ok=yes
1826 ],, [-lm])
eda3529e 1827 ])
8c99b4c1
DL
1828
1829 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1830 dnl user explicitly requested backtrace but we failed to find support
1831 AC_MSG_FAILURE([failed to find backtrace support])
1832 fi
1833fi
fb2d1502 1834
41be32bf
PJ
1835dnl -----------------------------------------
1836dnl check for malloc mallinfo struct and call
1837dnl this must try and link using LIBS, in
1838dnl order to check no alternative allocator
1839dnl has been specified, which might not provide
1840dnl mallinfo, e.g. such as Umem on Solaris.
1841dnl -----------------------------------------
fa896a1d
DL
1842AC_CHECK_HEADERS([malloc.h malloc/malloc.h],,, [FRR_INCLUDES])
1843
1844AC_MSG_CHECKING(whether mallinfo is available)
1845AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES [
1846#ifdef HAVE_MALLOC_H
1847#include <malloc.h>
1848#endif
1849#ifdef HAVE_MALLOC_MALLOC_H
1850#include <malloc/malloc.h>
1851#endif
1852]], [[
1853struct mallinfo ac_x; ac_x = mallinfo ();
1854]])], [
1855 AC_MSG_RESULT(yes)
1856 AC_DEFINE(HAVE_MALLINFO,,mallinfo)
1857], [
1858 AC_MSG_RESULT(no)
1859])
1860
1861AC_MSG_CHECKING(whether malloc_usable_size is available)
1862AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES [
1863#ifdef HAVE_MALLOC_H
1864#include <malloc.h>
1865#endif
1866#ifdef HAVE_MALLOC_MALLOC_H
1867#include <malloc/malloc.h>
1868#endif
1869]], [[
1870size_t ac_x; ac_x = malloc_usable_size(NULL);
1871]])], [
1872 AC_MSG_RESULT(yes)
1873 AC_DEFINE(HAVE_MALLOC_USABLE_SIZE,,malloc_usable_size)
1874], [
1875 AC_MSG_RESULT(no)
1876
1877 AC_MSG_CHECKING(whether malloc_size is available)
1878 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1879#ifdef HAVE_MALLOC_H
1880#include <malloc.h>
1881#endif
1882#ifdef HAVE_MALLOC_MALLOC_H
1883#include <malloc/malloc.h>
1884#endif
1885]], [[
1886size_t ac_x; ac_x = malloc_size(NULL);
1887]])], [
1888 AC_MSG_RESULT(yes)
1889 AC_DEFINE(HAVE_MALLOC_SIZE,,malloc_size)
1890 ], [
1891 AC_MSG_RESULT(no)
1892 ])
1893])
41be32bf 1894
b6116506
DL
1895dnl ------
1896dnl ZeroMQ
1897dnl ------
1898if test "x$enable_zeromq" != "xno"; then
1899 PKG_CHECK_MODULES(ZEROMQ, [libzmq >= 4.0.0], [
1900 AC_DEFINE(HAVE_ZEROMQ, 1, [Enable ZeroMQ support])
1901 ZEROMQ=true
1902 ], [
1903 if test "x$enable_zeromq" = "xyes"; then
1904 AC_MSG_ERROR([configuration specifies --enable-zeromq but libzmq was not found])
1905 fi
1906 ])
1907fi
1908AM_CONDITIONAL([ZEROMQ], test "x$ZEROMQ" = "xtrue")
1909
408ad943 1910dnl ----------
1911dnl configure date
1912dnl ----------
5e2dd3fa
LB
1913dev_version=`echo $VERSION | grep dev`
1914#don't expire deprecated code in non 'dev' branch
1915if test "${dev_version}" = ""; then
1916 CONFDATE=0
1917else
1918 CONFDATE=`date '+%Y%m%d'`
1919fi
408ad943 1920AC_SUBST(CONFDATE)
1921
7ea487bc 1922dnl ------------------------------
a159ed93 1923dnl set paths for state directory
23bd12c3 1924dnl ------------------------------
e84999d9 1925AC_MSG_CHECKING(directory to use for state file)
23bd12c3 1926if test "${prefix}" = "NONE"; then
b2f36157 1927 frr_statedir_prefix="";
23bd12c3 1928else
b2f36157 1929 frr_statedir_prefix=${prefix}
23bd12c3 1930fi
1931if test "${localstatedir}" = '${prefix}/var'; then
8e4da10b 1932 for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
b2f36157
DL
1933 ${frr_statedir_prefix}/var/adm dnl
1934 ${frr_statedir_prefix}/etc dnl
a159ed93 1935 /var/run dnl
1936 /var/adm dnl
1937 /etc dnl
1938 /dev/null;
23bd12c3 1939 do
8e4da10b 1940 test -d $FRR_STATE_DIR && break
23bd12c3 1941 done
8e4da10b 1942 frr_statedir=$FRR_STATE_DIR
23bd12c3 1943else
b2f36157 1944 frr_statedir=${localstatedir}
a159ed93 1945fi
b2f36157 1946if test $frr_statedir = "/dev/null"; then
a159ed93 1947 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1948fi
b2f36157
DL
1949AC_MSG_RESULT(${frr_statedir})
1950AC_SUBST(frr_statedir)
1951
b2f36157 1952AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
b2f36157 1953AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
7134904b 1954AC_DEFINE_UNQUOTED(BFDD_CONTROL_SOCKET, "$frr_statedir/bfdd.sock", bfdd control socket)
b2f36157 1955AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
7ea487bc 1956
95c4aff2
DL
1957dnl autoconf does this, but it does it too late...
1958test "x$prefix" = xNONE && prefix=$ac_default_prefix
1959test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
1960
1961dnl get the full path, recursing through variables...
1962vtysh_bin="$bindir/vtysh"
1963for I in 1 2 3 4 5 6 7 8 9 10; do
1964 eval vtysh_bin="\"$vtysh_bin\""
1965done
1966AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
1967
a07169b1
DL
1968CFG_SYSCONF="$sysconfdir"
1969CFG_SBIN="$sbindir"
1970CFG_STATE="$frr_statedir"
30771d65 1971CFG_MODULE="$moduledir"
a07169b1
DL
1972for I in 1 2 3 4 5 6 7 8 9 10; do
1973 eval CFG_SYSCONF="\"$CFG_SYSCONF\""
1974 eval CFG_SBIN="\"$CFG_SBIN\""
1975 eval CFG_STATE="\"$CFG_STATE\""
30771d65 1976 eval CFG_MODULE="\"$CFG_MODULE\""
a07169b1
DL
1977done
1978AC_SUBST(CFG_SYSCONF)
1979AC_SUBST(CFG_SBIN)
1980AC_SUBST(CFG_STATE)
30771d65
DL
1981AC_SUBST(CFG_MODULE)
1982AC_DEFINE_UNQUOTED(MODULE_PATH, "$CFG_MODULE", path to modules)
a07169b1 1983
dabecd7c
MR
1984dnl ------------------------------------
1985dnl Enable RPKI and add librtr to libs
1986dnl ------------------------------------
1987if test "${enable_rpki}" = "yes"; then
1988 PKG_CHECK_MODULES(RTRLIB,[rtrlib >= 0.5.0],
1989 [AC_DEFINE(HAVE_RPKI,1,Enable RPKI prefix validation for BGP)
1990 RPKI=true],
1991 [RPKI=false
1992 AC_MSG_ERROR([rtrlib was not found on your system or is too old.])]
1993 )
1994fi
1995AM_CONDITIONAL([RPKI], test "x$RPKI" = "xtrue")
1996
1997dnl ------------------------------------------
1998dnl Check whether rtrlib was build with ssh support
1999dnl ------------------------------------------
2000AC_MSG_CHECKING([whether the RTR Library is compiled with SSH])
2001AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "rtrlib/rtrlib.h"]],
2002 [[struct tr_ssh_config config;]])],
2003 [AC_MSG_RESULT(yes)
2004 AC_DEFINE(FOUND_SSH,,found_ssh)],
2005 AC_MSG_RESULT(no)
2006)
2007
7ea487bc 2008dnl ---------------------------
2009dnl Check htonl works correctly
2010dnl ---------------------------
2011AC_MSG_CHECKING(for working htonl)
6f0e3f6e 2012AC_CACHE_VAL(ac_cv_htonl_works,
8e4da10b 2013 [AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
6f0e3f6e
PJ
2014 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
2015 ]
2016)
7ea487bc 2017AC_MSG_RESULT($ac_cv_htonl_works)
2018
7f269117 2019AC_CONFIG_FILES([Makefile
bd354725 2020 bgpd/Makefile
30237d29 2021 vtysh/Makefile
524ada7f
QY
2022 doc/Makefile
2023 doc/user/Makefile
2024 doc/manpages/Makefile
2025 doc/developer/Makefile
2026 tests/Makefile
2027 bgpd/rfp-example/rfptest/Makefile
2028 bgpd/rfp-example/librfp/Makefile
22ea387f 2029 redhat/frr.spec
495feb8a 2030 debianpkg/Makefile
5eee7099 2031 debianpkg/changelog
c737c7ba 2032 alpine/APKBUILD
3ab11ecc 2033 snapcraft/snapcraft.yaml
b7a97f82 2034 lib/version.h
8efe88ea 2035 tests/lib/cli/test_cli.refout
cbd04084 2036 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
7f57883e
DS
2037 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh
2038 pkgsrc/eigrpd.sh])
65efcfce 2039
0953865f
LB
2040if test "${enable_bgp_vnc}" != "no"; then
2041 if test "${with_rfp_path}" != "bgpd/rfp-example" ; then
2042 AC_CONFIG_FILES([${with_rfp_path}/rfptest/Makefile ${with_rfp_path}/librfp/Makefile])
2043 fi
2044fi
65efcfce 2045
26275b05 2046AC_CONFIG_FILES([solaris/Makefile])
2047
670bbf19 2048AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
65efcfce 2049
306ed681
DL
2050AC_CONFIG_COMMANDS([lib/route_types.h], [
2051 dst="${ac_abs_top_builddir}/lib/route_types.h"
2052 ${PERL} "${ac_abs_top_srcdir}/lib/route_types.pl" \
2053 < "${ac_abs_top_srcdir}/lib/route_types.txt" \
2054 > "${dst}.tmp"
2055 test -f "${dst}" \
2056 && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
2057 && rm "${dst}.tmp" \
2058 || mv "${dst}.tmp" "${dst}"
2059], [
2060 PERL="$PERL"
2061])
2062
2063AS_IF([test "x$with_pkg_git_version" = "xyes"], [
2064 AC_CONFIG_COMMANDS([lib/gitversion.h], [
2065 dst="${ac_abs_top_builddir}/lib/gitversion.h"
2066 ${PERL} "${ac_abs_top_srcdir}/lib/gitversion.pl" \
2067 "${ac_abs_top_srcdir}" \
2068 > "${dst}.tmp"
2069 test -f "${dst}" \
2070 && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
2071 && rm "${dst}.tmp" \
2072 || mv "${dst}.tmp" "${dst}"
2073 ], [
2074 PERL="$PERL"
2075 ])
2076])
2077
1689cf7e 2078## Hack, but working solution to avoid rebuilding of frr.info.
48577196 2079## It's already in CVS until texinfo 4.7 is more common.
14c17fd8 2080AC_OUTPUT
7ea487bc 2081
2082echo "
447a8fe9 2083FRRouting configuration
b2f36157
DL
2084------------------------------
2085FRR version : ${PACKAGE_VERSION}
1080c13f 2086host operating system : ${host_os}
7ea487bc 2087source code location : ${srcdir}
2088compiler : ${CC}
2089compiler flags : ${CFLAGS}
6f0e3f6e 2090make : ${MAKE-make}
6f0e3f6e 2091linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
b2f36157 2092state file directory : ${frr_statedir}
dc7a2bf1 2093config file directory : `eval echo \`echo ${sysconfdir}\``
d6b72f7a 2094example directory : `eval echo \`echo ${exampledir}\``
30771d65 2095module directory : ${CFG_MODULE}
b2f36157
DL
2096user to run as : ${enable_user}
2097group to run as : ${enable_group}
2098group for vty sockets : ${enable_vty_group}
aa593d5e 2099config file mask : ${enable_configfile_mask}
2100log file mask : ${enable_logfile_mask}
dad253b4 2101zebra protobuf enabled : ${have_protobuf:-no}
dc7a2bf1 2102
2103The above user and group must have read/write access to the state file
105b8239 2104directory and to the config files in the config file directory."