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