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