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