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