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