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