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