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