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