]> git.proxmox.com Git - mirror_frr.git/blame - configure.ac
Merge remote-tracking branch 'frr/master' into newline-redux
[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
1689cf7e 130dnl try and enable CFLAGS that are useful for FRR
a89b1641 131dnl - specifically, options to control warnings
1969e4b9 132
b31fd749 133AC_USE_SYSTEM_EXTENSIONS
988225dd
DL
134AC_DEFUN([AC_C_FLAG], [{
135 AC_LANG_PUSH(C)
136 ac_c_flag_save="$CFLAGS"
137 CFLAGS="$CFLAGS $1"
138 AC_MSG_CHECKING([[whether $CC supports $1]])
139 AC_COMPILE_IFELSE(
140 [AC_LANG_PROGRAM([[]])],
141 [
142 AC_MSG_RESULT([yes])
143 m4_if([$3], [], [], [
144 CFLAGS="$ac_c_flag_save"
145 $3
146 ])
147 ], [
148 CFLAGS="$ac_c_flag_save"
149 AC_MSG_RESULT([no])
150 $2
151 ])
152 AC_LANG_POP(C)
153 }])
154
92e50261
DL
155AC_DEFUN([AC_LINK_IFELSE_FLAGS], [{
156 AC_LANG_PUSH(C)
157 ac_cflags_save="$CFLAGS"
158 ac_libs_save="$LIBS"
159 CFLAGS="$CFLAGS $1"
160 LIBS="$LIBS $2"
161 AC_LINK_IFELSE(
162 [$3],
163 [
164 AC_MSG_RESULT([yes])
165 CFLAGS="$ac_cflags_save"
166 LIBS="$ac_libs_save"
167 $5
168 ], [
169 AC_MSG_RESULT([no])
170 CFLAGS="$ac_cflags_save"
171 LIBS="$ac_libs_save"
172 $4
173 ])
174 AC_LANG_POP(C)
175 }])
176
a89b1641
DL
177dnl ICC won't bail on unknown options without -diag-error 10006
178dnl need to do this first so we get useful results for the other options
179AC_C_FLAG([-diag-error 10006])
180
8aa42b82
DL
181dnl AC_PROG_CC_C99 may change CC to include -std=gnu99 or something
182ac_cc="$CC"
183CC="${CC% -std=gnu99}"
184CC="${CC% -std=c99}"
185
186AC_C_FLAG([-std=gnu11], [CC="$ac_cc"], [CC="$CC -std=gnu11"])
187
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], [
1689cf7e 252 AC_MSG_FAILURE([This FRR version needs pthreads])
b31fd749
DL
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,
1689cf7e 286 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for FRR]))
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 941dnl
1689cf7e 942dnl FRR detects the PAM library it is built against by checking for a
6159928d
DO
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
4db0cff1
QY
1592dnl ---------------
1593dnl math
1594dnl ---------------
1595AC_SEARCH_LIBS([sqrt], [m])
1596
b249c083
DL
1597dnl ---------------
1598dnl dlopen & dlinfo
1599dnl ---------------
30771d65
DL
1600AC_SEARCH_LIBS(dlopen, [dl dld], [], [
1601 AC_MSG_ERROR([unable to find the dlopen()])
1602])
1603
b249c083
DL
1604AC_CHECK_HEADERS([link.h])
1605
1606AC_MSG_CHECKING([for dlinfo(RTLD_DI_ORIGIN)])
1607AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1608#include <stdlib.h>
1609#ifdef HAVE_LINK_H
1610#include <link.h>
1611#endif
1612#include <dlfcn.h>
1613]], [[
1614 char origin[1];
1615 dlinfo (NULL, RTLD_DI_ORIGIN, &origin);
1616]])], [
1617 AC_MSG_RESULT(yes)
1618 AC_DEFINE(HAVE_DLINFO_ORIGIN, 1, [Have dlinfo RTLD_DI_ORIGIN])
1619], [
1620 AC_MSG_RESULT(no)
1621])
1622
1623AC_MSG_CHECKING([for dlinfo(RTLD_DI_LINKMAP)])
1624AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1625#include <stdlib.h>
1626#ifdef HAVE_LINK_H
1627#include <link.h>
1628#endif
1629#include <dlfcn.h>
1630]], [[
1631 struct link_map *lm = NULL;
1632 dlinfo (NULL, RTLD_DI_LINKMAP, &lm);
1633]])], [
1634 AC_MSG_RESULT(yes)
1635 AC_DEFINE(HAVE_DLINFO_LINKMAP, 1, [Have dlinfo RTLD_DI_LINKMAP])
1636], [
1637 AC_MSG_RESULT(no)
1638])
1639
6cf9df08 1640
62ff928b
DS
1641AM_CONDITIONAL(SNMP, test "x$SNMP_METHOD" = "xagentx")
1642
7ea487bc 1643dnl ---------------------------
6f0e3f6e 1644dnl sockaddr and netinet checks
7ea487bc 1645dnl ---------------------------
24f5e2fc
DL
1646AC_CHECK_TYPES([
1647 struct sockaddr_dl,
1648 struct vifctl, struct mfcctl, struct sioc_sg_req,
12e41d03 1649 vifi_t, struct sioc_vif_req, struct igmpmsg,
6f0e3f6e
PJ
1650 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1651 struct nd_opt_adv_interval, struct rt_addrinfo,
11770e10 1652 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
8e4da10b 1653 [], [], FRR_INCLUDES)
6f0e3f6e
PJ
1654
1655AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1656 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
ca3ccd87 1657 struct sockaddr_dl.sdl_len,
6f0e3f6e
PJ
1658 struct if6_aliasreq.ifra_lifetime,
1659 struct nd_opt_adv_interval.nd_opt_ai_type],
8e4da10b 1660 [], [], FRR_INCLUDES)
29c4c9bd 1661
6f0e3f6e 1662dnl ---------------------------
11770e10 1663dnl IRDP/pktinfo/icmphdr checks
6f0e3f6e
PJ
1664dnl ---------------------------
1665AC_CHECK_TYPES([struct in_pktinfo],
11770e10
PJ
1666 [AC_CHECK_TYPES([struct icmphdr],
1667 [if test "${enable_irdp}" != "no"; then
1668 AC_DEFINE(HAVE_IRDP,, IRDP)
1669 fi],
1670 [if test "${enable_irdp}" = "yes"; then
1671 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
8e4da10b 1672 fi], [FRR_INCLUDES])],
6f0e3f6e
PJ
1673 [if test "${enable_irdp}" = "yes"; then
1674 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
8e4da10b 1675 fi], [FRR_INCLUDES])
29c4c9bd 1676
12e41d03
DL
1677dnl -----------------------
1678dnl checking for IP_PKTINFO
1679dnl -----------------------
1680AC_MSG_CHECKING(for IP_PKTINFO)
1681AC_TRY_COMPILE([#include <netdb.h>], [
1682 int opt = IP_PKTINFO;
1683], [
1684 AC_MSG_RESULT(yes)
1685 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1686], [
1687 AC_MSG_RESULT(no)
1688])
1689
1690dnl ---------------------------
1691dnl checking for IP_RECVDSTADDR
1692dnl ---------------------------
1693AC_MSG_CHECKING(for IP_RECVDSTADDR)
1694AC_TRY_COMPILE([#include <netinet/in.h>], [
1695 int opt = IP_RECVDSTADDR;
1696], [
1697 AC_MSG_RESULT(yes)
1698 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1699], [
1700 AC_MSG_RESULT(no)
1701])
1702
1703dnl ----------------------
1704dnl checking for IP_RECVIF
1705dnl ----------------------
1706AC_MSG_CHECKING(for IP_RECVIF)
1707AC_TRY_COMPILE([#include <netinet/in.h>], [
1708 int opt = IP_RECVIF;
1709], [
1710 AC_MSG_RESULT(yes)
1711 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1712], [
1713 AC_MSG_RESULT(no)
1714])
1715
eac6e3f0
RW
1716dnl ----------------------
1717dnl checking for SO_BINDANY
1718dnl ----------------------
1719AC_MSG_CHECKING(for SO_BINDANY)
1720AC_TRY_COMPILE([#include <sys/socket.h>], [
1721 int opt = SO_BINDANY;
1722], [
1723 AC_MSG_RESULT(yes)
1724 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1725], [
1726 AC_MSG_RESULT(no)
1727])
1728
1729dnl ----------------------
1730dnl checking for IP_FREEBIND
1731dnl ----------------------
1732AC_MSG_CHECKING(for IP_FREEBIND)
1733AC_TRY_COMPILE([#include <netinet/in.h>], [
1734 int opt = IP_FREEBIND;
1735], [
1736 AC_MSG_RESULT(yes)
1737 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1738], [
1739 AC_MSG_RESULT(no)
1740])
1741
ba0cb3fe
DS
1742dnl --------------------------------------
1743dnl checking for be32dec existence or not
1744dnl --------------------------------------
1745AC_CHECK_DECLS([be32enc, be32dec], [], [],
1746 [#include <sys/endian.h>])
1747
c4376c9d
SH
1748dnl --------------------------------------
1749dnl checking for clock_time monotonic struct and call
1750dnl --------------------------------------
6511cab2
PJ
1751AC_CHECK_DECL(CLOCK_MONOTONIC,
1752 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
9964fcfc 1753 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
8e4da10b 1754], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
c4376c9d 1755
bbf5ffa0
QY
1756dnl --------------------------------------
1757dnl checking for flex and bison
1758dnl --------------------------------------
4a06690f 1759
bbf5ffa0 1760AM_PROG_LEX
4a06690f 1761AC_MSG_CHECKING(version of flex)
1689cf7e
JAG
1762frr_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
1763frr_ac_flex_version="${frr_ac_flex_version##* }"
1764AC_MSG_RESULT([$frr_ac_flex_version])
1765AX_COMPARE_VERSION([$frr_ac_flex_version], [lt], [2.5.20], [
4a06690f
DL
1766 LEX="$SHELL $missing_dir/missing flex"
1767 if test -f "${srcdir}/lib/command_lex.c" -a -f "${srcdir}/lib/command_lex.h"; then
1768 AC_MSG_WARN([using pregenerated flex output files])
1769 else
1770 AC_MSG_ERROR([flex failure and pregenerated files not included (probably a git build)])
1771 fi
1772 AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
1773 AC_SUBST([LEXLIB], [''])
1774])
0d37f9f3 1775
bbf5ffa0 1776AC_PROG_YACC
0d37f9f3
DL
1777dnl thanks GNU bison for this b*llshit...
1778AC_MSG_CHECKING(version of bison)
1689cf7e
JAG
1779frr_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
1780frr_ac_bison_version="${frr_ac_bison_version##* }"
1781frr_ac_bison_missing="false"
1782case "x${frr_ac_bison_version}" in
0d37f9f3
DL
1783 x2.7*)
1784 BISON_OPENBRACE='"'
1785 BISON_CLOSEBRACE='"'
05dbb7df 1786 BISON_VERBOSE=''
1689cf7e 1787 AC_MSG_RESULT([$frr_ac_bison_version - 2.7 or older])
0d37f9f3
DL
1788 ;;
1789 x2.*|x1.*)
1689cf7e 1790 AC_MSG_RESULT([$frr_ac_bison_version])
0d37f9f3 1791 AC_MSG_WARN([installed bison is too old. Please install GNU bison 2.7.x or newer.])
1689cf7e 1792 frr_ac_bison_missing="true"
0d37f9f3
DL
1793 ;;
1794 x)
1795 AC_MSG_RESULT([none])
1796 AC_MSG_WARN([could not determine bison version. Please install GNU bison 2.7.x or newer.])
1689cf7e 1797 frr_ac_bison_missing="true"
0d37f9f3
DL
1798 ;;
1799 *)
1800 BISON_OPENBRACE='{'
1801 BISON_CLOSEBRACE='}'
05dbb7df 1802 BISON_VERBOSE='-Dparse.error=verbose'
1689cf7e 1803 AC_MSG_RESULT([$frr_ac_bison_version - 3.0 or newer])
0d37f9f3
DL
1804 ;;
1805esac
1806AC_SUBST(BISON_OPENBRACE)
1807AC_SUBST(BISON_CLOSEBRACE)
05dbb7df 1808AC_SUBST(BISON_VERBOSE)
0d37f9f3 1809
1689cf7e 1810if $frr_ac_bison_missing; then
0d37f9f3
DL
1811 YACC="$SHELL $missing_dir/missing bison -y"
1812 if test -f "${srcdir}/lib/command_parse.c" -a -f "${srcdir}/lib/command_parse.h"; then
1813 AC_MSG_WARN([using pregenerated bison output files])
1814 else
1815 AC_MSG_ERROR([bison failure and pregenerated files not included (probably a git build)])
1816 fi
1817fi
bbf5ffa0 1818
edd7c245 1819dnl -------------------
1820dnl capabilities checks
1821dnl -------------------
41d3fc96 1822if test "${enable_capabilities}" != "no"; then
1823 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1824 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1825 [AC_MSG_RESULT(yes)
1826 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
8e4da10b 1827 frr_ac_keepcaps="yes"],
41d3fc96 1828 AC_MSG_RESULT(no)
edd7c245 1829 )
8e4da10b 1830 if test x"${frr_ac_keepcaps}" = x"yes"; then
41d3fc96 1831 AC_CHECK_HEADERS(sys/capability.h)
1832 fi
1833 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1834 AC_CHECK_LIB(cap, cap_init,
1835 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1836 LIBCAP="-lcap"
8e4da10b 1837 frr_ac_lcaps="yes"]
41d3fc96 1838 )
ceacedba 1839 else
1840 AC_CHECK_HEADERS(priv.h,
1841 [AC_MSG_CHECKING(Solaris style privileges are available)
1842 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1843 [AC_MSG_RESULT(yes)
1844 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
8e4da10b 1845 frr_ac_scaps="yes"],
ceacedba 1846 AC_MSG_RESULT(no)
1847 )
1848 ]
1849 )
1850 fi
8e4da10b
DL
1851 if test x"${frr_ac_scaps}" = x"yes" \
1852 -o x"${frr_ac_lcaps}" = x"yes"; then
ceacedba 1853 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
41d3fc96 1854 fi
edd7c245 1855fi
1856AC_SUBST(LIBCAP)
1857
fb2d1502 1858dnl ---------------------------
1859dnl check for glibc 'backtrace'
1860dnl ---------------------------
8c99b4c1
DL
1861if test x"${enable_backtrace}" != x"no" ; then
1862 backtrace_ok=no
1863 AC_CHECK_HEADER([execinfo.h], [
1864 AC_SEARCH_LIBS([backtrace], [execinfo], [
1865 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1866 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1867 backtrace_ok=yes
1868 ],, [-lm])
eda3529e 1869 ])
8c99b4c1
DL
1870
1871 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1872 dnl user explicitly requested backtrace but we failed to find support
1873 AC_MSG_FAILURE([failed to find backtrace support])
1874 fi
1875fi
fb2d1502 1876
41be32bf
PJ
1877dnl -----------------------------------------
1878dnl check for malloc mallinfo struct and call
1879dnl this must try and link using LIBS, in
1880dnl order to check no alternative allocator
1881dnl has been specified, which might not provide
1882dnl mallinfo, e.g. such as Umem on Solaris.
1883dnl -----------------------------------------
6f0e3f6e 1884AC_CHECK_HEADER([malloc.h],
41be32bf
PJ
1885 [AC_MSG_CHECKING(whether mallinfo is available)
1886 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1887 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1888 [AC_MSG_RESULT(yes)
1889 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1890 AC_MSG_RESULT(no)
1891 )
8e4da10b 1892 ], [], FRR_INCLUDES)
41be32bf 1893
408ad943 1894dnl ----------
1895dnl configure date
1896dnl ----------
1897CONFDATE=`date '+%Y%m%d'`
1898AC_SUBST(CONFDATE)
1899
7ea487bc 1900dnl ------------------------------
a159ed93 1901dnl set paths for state directory
23bd12c3 1902dnl ------------------------------
e84999d9 1903AC_MSG_CHECKING(directory to use for state file)
23bd12c3 1904if test "${prefix}" = "NONE"; then
b2f36157 1905 frr_statedir_prefix="";
23bd12c3 1906else
b2f36157 1907 frr_statedir_prefix=${prefix}
23bd12c3 1908fi
1909if test "${localstatedir}" = '${prefix}/var'; then
8e4da10b 1910 for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
b2f36157
DL
1911 ${frr_statedir_prefix}/var/adm dnl
1912 ${frr_statedir_prefix}/etc dnl
a159ed93 1913 /var/run dnl
1914 /var/adm dnl
1915 /etc dnl
1916 /dev/null;
23bd12c3 1917 do
8e4da10b 1918 test -d $FRR_STATE_DIR && break
23bd12c3 1919 done
8e4da10b 1920 frr_statedir=$FRR_STATE_DIR
23bd12c3 1921else
b2f36157 1922 frr_statedir=${localstatedir}
a159ed93 1923fi
b2f36157 1924if test $frr_statedir = "/dev/null"; then
a159ed93 1925 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1926fi
b2f36157
DL
1927AC_MSG_RESULT(${frr_statedir})
1928AC_SUBST(frr_statedir)
1929
b2f36157 1930AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
b2f36157 1931AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
b2f36157 1932AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
7ea487bc 1933
95c4aff2
DL
1934dnl autoconf does this, but it does it too late...
1935test "x$prefix" = xNONE && prefix=$ac_default_prefix
1936test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
1937
1938dnl get the full path, recursing through variables...
1939vtysh_bin="$bindir/vtysh"
1940for I in 1 2 3 4 5 6 7 8 9 10; do
1941 eval vtysh_bin="\"$vtysh_bin\""
1942done
1943AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
1944
a07169b1
DL
1945CFG_SYSCONF="$sysconfdir"
1946CFG_SBIN="$sbindir"
1947CFG_STATE="$frr_statedir"
30771d65 1948CFG_MODULE="$moduledir"
a07169b1
DL
1949for I in 1 2 3 4 5 6 7 8 9 10; do
1950 eval CFG_SYSCONF="\"$CFG_SYSCONF\""
1951 eval CFG_SBIN="\"$CFG_SBIN\""
1952 eval CFG_STATE="\"$CFG_STATE\""
30771d65 1953 eval CFG_MODULE="\"$CFG_MODULE\""
a07169b1
DL
1954done
1955AC_SUBST(CFG_SYSCONF)
1956AC_SUBST(CFG_SBIN)
1957AC_SUBST(CFG_STATE)
30771d65
DL
1958AC_SUBST(CFG_MODULE)
1959AC_DEFINE_UNQUOTED(MODULE_PATH, "$CFG_MODULE", path to modules)
a07169b1 1960
7ea487bc 1961dnl ---------------------------
1962dnl Check htonl works correctly
1963dnl ---------------------------
1964AC_MSG_CHECKING(for working htonl)
6f0e3f6e 1965AC_CACHE_VAL(ac_cv_htonl_works,
8e4da10b 1966 [AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
6f0e3f6e
PJ
1967 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1968 ]
1969)
7ea487bc 1970AC_MSG_RESULT($ac_cv_htonl_works)
1971
22ea387f 1972AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
9473e340 1973 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchfrr/Makefile
eac6e3f0 1974 ospf6d/Makefile ldpd/Makefile isisd/Makefile vtysh/Makefile
f281ab97 1975 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
22ea387f 1976 bgpd/rfp-example/rfptest/Makefile bgpd/rfp-example/librfp/Makefile
ca10883e 1977 babeld/Makefile
12e41d03 1978 pimd/Makefile
7f57883e 1979 eigrpd/Makefile
2fb975da 1980 nhrpd/Makefile
f281ab97 1981 redhat/Makefile
1018422a 1982 tools/Makefile
69f1fc22 1983 pkgsrc/Makefile
5578a14d 1984 python/Makefile
93c7bed1 1985 fpm/Makefile
22ea387f 1986 redhat/frr.spec
3ab11ecc
MW
1987 snapcraft/Makefile
1988 snapcraft/snapcraft.yaml
b7a97f82 1989 lib/version.h
8efe88ea 1990 tests/lib/cli/test_cli.refout
14c17fd8 1991 doc/defines.texi
461c7bee
DL
1992 doc/bgpd.8
1993 doc/isisd.8
1994 doc/ospf6d.8
1995 doc/ospfclient.8
1996 doc/ospfd.8
1997 doc/ldpd.8
1998 doc/ripd.8
6c85c081 1999 doc/eigrpd.8
461c7bee
DL
2000 doc/ripngd.8
2001 doc/pimd.8
caba6093 2002 doc/nhrpd.8
461c7bee 2003 doc/vtysh.1
9473e340 2004 doc/watchfrr.8
461c7bee 2005 doc/zebra.8
438f5286 2006 doc/frr.1
cbd04084 2007 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
7f57883e
DS
2008 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh
2009 pkgsrc/eigrpd.sh])
65efcfce 2010
65efcfce 2011
26275b05 2012AC_CONFIG_FILES([solaris/Makefile])
2013
670bbf19 2014AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
65efcfce 2015
1689cf7e 2016## Hack, but working solution to avoid rebuilding of frr.info.
48577196 2017## It's already in CVS until texinfo 4.7 is more common.
14c17fd8 2018AC_OUTPUT
7ea487bc 2019
2020echo "
447a8fe9 2021FRRouting configuration
b2f36157
DL
2022------------------------------
2023FRR version : ${PACKAGE_VERSION}
1080c13f 2024host operating system : ${host_os}
7ea487bc 2025source code location : ${srcdir}
2026compiler : ${CC}
2027compiler flags : ${CFLAGS}
6f0e3f6e 2028make : ${MAKE-make}
6f0e3f6e 2029linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
b2f36157 2030state file directory : ${frr_statedir}
dc7a2bf1 2031config file directory : `eval echo \`echo ${sysconfdir}\``
d6b72f7a 2032example directory : `eval echo \`echo ${exampledir}\``
30771d65 2033module directory : ${CFG_MODULE}
b2f36157
DL
2034user to run as : ${enable_user}
2035group to run as : ${enable_group}
2036group for vty sockets : ${enable_vty_group}
aa593d5e 2037config file mask : ${enable_configfile_mask}
2038log file mask : ${enable_logfile_mask}
dad253b4 2039zebra protobuf enabled : ${have_protobuf:-no}
dc7a2bf1 2040
2041The above user and group must have read/write access to the state file
105b8239 2042directory and to the config files in the config file directory."