]> git.proxmox.com Git - mirror_frr.git/blame - configure.ac
watchfrr: Rename watchquagga -> watchfrr
[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
b2f36157
DL
10AC_INIT(frr, 2.0-rc0, [https://bugzilla.quagga.net])
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}"
486 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
1080c13f
JN
487fi
488
a16dcf7c
DL
489if test "x$with_pkg_git_version" = "xyes"; then
490 if test -d "${srcdir}/.git"; then
491 AC_DEFINE(GIT_VERSION, [1], [include git version info])
492 else with_pkg_git_version="no"
493 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
494 fi
495fi
496AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
0be793e6 497
6f0e3f6e
PJ
498dnl ------------------------------------
499dnl Check C keywords and standard types
500dnl ------------------------------------
501AC_C_CONST
502AC_C_INLINE
6f0e3f6e 503AC_C_VOLATILE
dc7a2bf1 504AC_HEADER_STDC
6f0e3f6e
PJ
505dnl AC_TYPE_PID_T
506AC_TYPE_UID_T
507AC_TYPE_MODE_T
508AC_TYPE_SIZE_T
6f0e3f6e 509AC_STRUCT_TM
dc7a2bf1 510
6f0e3f6e
PJ
511dnl -------------------------
512dnl Check other header files.
513dnl -------------------------
24f5e2fc
DL
514AC_CHECK_HEADERS([stropts.h sys/ksym.h \
515 linux/version.h asm/types.h \
516 sys/cdefs.h])
6f0e3f6e
PJ
517
518dnl Utility macro to avoid retyping includes all the time
8e4da10b 519m4_define([FRR_INCLUDES],
6f0e3f6e
PJ
520[#ifdef SUNOS_5
521#define _XPG4_2
522#define __EXTENSIONS__
523#endif
524#include <stdio.h>
24f5e2fc
DL
525#include <stdlib.h>
526#include <stddef.h>
527#include <sys/types.h>
6f0e3f6e 528/* sys/conf.h depends on param.h on FBSD at least */
24f5e2fc 529#include <sys/param.h>
6f0e3f6e 530/* Required for MAXSIG */
24f5e2fc
DL
531#include <signal.h>
532#include <sys/socket.h>
ea057677
HT
533#ifdef __APPLE__
534# define __APPLE_USE_RFC_3542
535#endif
24f5e2fc
DL
536#include <netinet/in.h>
537#include <sys/time.h>
538#include <time.h>
539#include <net/if.h>
2b43bf23
DO
540])dnl
541
542dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
543dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
544dnl an additional round for it.
545
8e4da10b 546AC_CHECK_HEADERS([net/if_var.h], [], [], FRR_INCLUDES)
2b43bf23 547
8e4da10b
DL
548m4_define([FRR_INCLUDES],
549FRR_INCLUDES
2b43bf23
DO
550[#if HAVE_NET_IF_VAR_H
551# include <net/if_var.h>
552#endif
553])dnl
554
24f5e2fc
DL
555AC_CHECK_HEADERS([netinet/in_var.h \
556 net/if_dl.h net/netopt.h \
557 inet/nd.h netinet/ip_icmp.h \
6f0e3f6e 558 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
8e4da10b 559 [], [], FRR_INCLUDES)
6f0e3f6e
PJ
560
561AC_CHECK_HEADERS([ucontext.h], [], [],
562[#ifndef __USE_GNU
563#define __USE_GNU
564#endif /* __USE_GNU */
8e4da10b 565FRR_INCLUDES
6f0e3f6e
PJ
566])
567
bccbd141
JT
568m4_define([UCONTEXT_INCLUDES],
569[#include <ucontext.h>])dnl
570
571AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
572 [], [], [UCONTEXT_INCLUDES])
573AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
574 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
575 [], [], [UCONTEXT_INCLUDES])],
576 [], [UCONTEXT_INCLUDES])
577AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
578 [], [], [UCONTEXT_INCLUDES])
579
8e4da10b
DL
580m4_define([FRR_INCLUDES],
581FRR_INCLUDES
24f5e2fc
DL
582[
583#include <sys/un.h>
584#include <netinet/in_systm.h>
6f0e3f6e
PJ
585#if HAVE_NETINET_IN_VAR_H
586# include <netinet/in_var.h>
587#endif
588#if HAVE_NET_IF_DL_H
589# include <net/if_dl.h>
590#endif
6f0e3f6e
PJ
591#if HAVE_NET_NETOPT_H
592# include <net/netopt.h>
593#endif
24f5e2fc 594#include <net/route.h>
6f0e3f6e
PJ
595#if HAVE_INET_ND_H
596# include <inet/nd.h>
597#endif
24f5e2fc 598#include <arpa/inet.h>
11770e10
PJ
599/* Required for IDRP */
600#if HAVE_NETINET_IP_ICMP_H
601# include <netinet/ip_icmp.h>
602#endif
6f0e3f6e 603])dnl
dc7a2bf1 604
fa3232e1 605dnl V6 headers are checked below, after we check for v6
7ea487bc 606
7ea487bc 607dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
608case "$host" in
afd8a129 609 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
7ea487bc 610 opsys=sol2-6
afd8a129 611 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
19877dd2 612 AC_DEFINE(SUNOS_5, 1, SunOS 5)
7ea487bc 613 AC_CHECK_LIB(xnet, main)
614 CURSES=-lcurses
a77d2023 615 SOLARIS="solaris"
7ea487bc 616 ;;
1b73de8b 617 [*-sunos5.[8-9]] \
618 | [*-sunos5.1[0-9]] \
619 | [*-sunos5.1[0-9].[0-9]] \
620 | [*-solaris2.[8-9]] \
621 | [*-solaris2.1[0-9]] \
622 | [*-solaris2.1[0-9].[0-9]])
afd8a129 623 opsys=sol8
fb66b29c
PJ
624 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
625 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
19877dd2 626 AC_CHECK_LIB(socket, main)
627 AC_CHECK_LIB(nsl, main)
1b73de8b 628 AC_CHECK_LIB(umem, main)
fb66b29c
PJ
629 AC_CHECK_FUNCS([printstack],
630 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
631 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
632 ])
19877dd2 633 CURSES=-lcurses
a77d2023 634 SOLARIS="solaris"
19877dd2 635 ;;
7ea487bc 636 *-sunos5* | *-solaris2*)
19877dd2 637 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
7ea487bc 638 AC_CHECK_LIB(socket, main)
639 AC_CHECK_LIB(nsl, main)
640 CURSES=-lcurses
a77d2023 641 SOLARIS="solaris"
7ea487bc 642 ;;
c45eb839 643 *-linux*)
7ea487bc 644 opsys=gnu-linux
645 AC_DEFINE(GNU_LINUX,,GNU Linux)
646 ;;
7ea487bc 647 *-openbsd*)
648 opsys=openbsd
649 AC_DEFINE(OPEN_BSD,,OpenBSD)
650 ;;
7ea487bc 651esac
652
62c9f504
PJ
653AC_SYS_LARGEFILE
654
7ea487bc 655dnl ---------------------
656dnl Integrated VTY option
657dnl ---------------------
658case "${enable_vtysh}" in
f0646db0
DS
659 "no") VTYSH="";;
660 *) VTYSH="vtysh";
7ea487bc 661 AC_DEFINE(VTYSH,,VTY shell)
fc9d0745 662dnl Vtysh uses libreadline, which looks for termcap functions at
6f0e3f6e 663dnl configure time. We follow readlines search order.
fc9d0745 664dnl The required procedures are in libtermcap on NetBSD, in
665dnl [TODO] on Linux, and in [TODO] on Solaris.
c0689394 666 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
a969459c 667 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
668 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
669 [AC_CHECK_LIB(ncurses, tputs,
670 LIBREADLINE="$LIBREADLINE -lncurses")]
671 )]
672 )]
673 )
4c2f8e95 674 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
a969459c 675 "$LIBREADLINE")
7ea487bc 676 if test $ac_cv_lib_readline_main = no; then
fc9d0745 677 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
7ea487bc 678 fi
679 AC_CHECK_HEADER(readline/history.h)
680 if test $ac_cv_header_readline_history_h = no;then
681 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
682 fi
a969459c 683 AC_CHECK_LIB(readline, rl_completion_matches,
684 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
3d3de8c4 685 if test $ac_cv_lib_readline_rl_completion_matches = no; then
686 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
687 fi
688 ;;
7ea487bc 689esac
c0689394 690AC_SUBST(LIBREADLINE)
f027d331 691AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
7ea487bc 692
693dnl ----------
694dnl PAM module
6159928d
DO
695dnl
696dnl Quagga detects the PAM library it is built against by checking for a
697dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
698dnl is known to #include pam_appl.h, the standard header of a PAM library, and
699dnl openpam.h doesn't do that, although depends on the header too. Hence a
700dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
701dnl of OpenPAM.
7ea487bc 702dnl ----------
24cd435b 703if test "$with_libpam" = "yes"; then
6f0e3f6e
PJ
704 AC_CHECK_HEADER([security/pam_misc.h],
705 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
706 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
707 pam_conv_func="misc_conv"
708 ],
8e4da10b 709 [], FRR_INCLUDES)
6f0e3f6e
PJ
710 AC_CHECK_HEADER([security/openpam.h],
711 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
712 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
713 pam_conv_func="openpam_ttyconv"
714 ],
8e4da10b 715 [], FRR_INCLUDES[#include <security/pam_appl.h>])
24cd435b 716 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
717 AC_MSG_WARN([*** pam support will not be built ***])
718 with_libpam="no"
719 fi
720fi
721
7ea487bc 722if test "$with_libpam" = "yes"; then
6f0e3f6e 723dnl took this test from proftpds configure.in and suited to our needs
7ea487bc 724dnl -------------------------------------------------------------------------
725dnl
726dnl This next check looks funky due to a linker problem with some versions
727dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
728dnl omitted requiring libdl linking information. PAM-0.72 or better ships
729dnl with RedHat 6.2 and Debian 2.2 or better.
730AC_CHECK_LIB(pam, pam_start,
24cd435b 731 [AC_CHECK_LIB(pam, $pam_conv_func,
7ea487bc 732 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
733 LIBPAM="-lpam"],
734 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
735 LIBPAM="-lpam -lpam_misc"]
736 )
737 ],
738
739 [AC_CHECK_LIB(pam, pam_end,
24cd435b 740 [AC_CHECK_LIB(pam, $pam_conv_func,
a159ed93 741 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
7ea487bc 742 LIBPAM="-lpam -ldl"],
a159ed93 743 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
7ea487bc 744 LIBPAM="-lpam -ldl -lpam_misc"]
745 )
746 ],AC_MSG_WARN([*** pam support will not be built ***]),
747 [-ldl])
748 ]
749)
750fi
751AC_SUBST(LIBPAM)
752
753dnl -------------------------------
754dnl Endian-ness check
755dnl -------------------------------
756AC_WORDS_BIGENDIAN
757
758dnl -------------------------------
759dnl check the size in byte of the C
760dnl -------------------------------
761dnl AC_CHECK_SIZEOF(char)
762dnl AC_CHECK_SIZEOF(int)
763dnl AC_CHECK_SIZEOF(short)
764dnl AC_CHECK_SIZEOF(long)
765
766dnl ----------------------------
767dnl check existance of functions
768dnl ----------------------------
6f0e3f6e
PJ
769AC_FUNC_FNMATCH
770AC_FUNC_FORK
6f0e3f6e 771AC_FUNC_MKTIME
6f0e3f6e 772AC_FUNC_STAT
6f0e3f6e
PJ
773
774dnl -------------------------------
775dnl bgpd needs pow() and hence libm
776dnl -------------------------------
777TMPLIBS="$LIBS"
778AC_CHECK_HEADER([math.h],
779 [AC_CHECK_LIB([m], [pow],
780 [LIBM="-lm"
781 LIBS="$LIBS $LIBM"
782 AC_DEFINE(HAVE_LIBM,, Have libm)
783 AC_CHECK_FUNCS(pow,[],[LIBM=""])
784 ])
785])
786if test x"$LIBM" = x ; then
787 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
788fi
789LIBS="$TMPLIBS"
790AC_SUBST(LIBM)
791
792dnl ---------------
793dnl other functions
794dnl ---------------
24f5e2fc
DL
795AC_CHECK_FUNCS([ \
796 strlcat strlcpy \
797 getgrouplist \
798 pledge])
6f0e3f6e 799
13460c44
FL
800AC_CHECK_HEADER([asm-generic/unistd.h],
801 [AC_CHECK_DECL(__NR_setns,
802 AC_DEFINE(HAVE_NETNS,, Have netns),,
8e4da10b 803 FRR_INCLUDES [#include <asm-generic/unistd.h>
13460c44 804 ])
428cd73f 805 AC_CHECK_FUNCS(setns)]
13460c44
FL
806 )
807
7ea487bc 808dnl ------------------------------------
809dnl Determine routing get and set method
810dnl ------------------------------------
811AC_MSG_CHECKING(zebra between kernel interface method)
812if test x"$opsys" = x"gnu-linux"; then
35c4bf71
DL
813 AC_MSG_RESULT(netlink)
814 RT_METHOD=rt_netlink.o
1fdc9eae 815 KERNEL_METHOD=kernel_netlink.o
35c4bf71
DL
816 AC_DEFINE(HAVE_NETLINK,,netlink)
817 netlink=yes
818 AC_CHECK_DECLS([IFLA_INFO_SLAVE_KIND], [], [], [#include <linux/if_link.h>])
865730ab 819else
19877dd2 820 AC_MSG_RESULT(Route socket)
821 KERNEL_METHOD="kernel_socket.o"
822 RT_METHOD="rt_socket.o"
7ea487bc 823fi
824AC_SUBST(RT_METHOD)
825AC_SUBST(KERNEL_METHOD)
5adc2528 826AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
7ea487bc 827
238497fc
PJ
828dnl --------------------------
829dnl Determine IS-IS I/O method
830dnl --------------------------
745bf05f
DL
831AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
832AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
833AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
238497fc
PJ
834AC_CHECK_HEADER(net/bpf.h)
835AC_CHECK_HEADER(sys/dlpi.h)
836AC_MSG_CHECKING(zebra IS-IS I/O method)
837if test x"$opsys" = x"gnu-linux"; then
838 AC_MSG_RESULT(pfpacket)
745bf05f 839 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
238497fc
PJ
840elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
841 AC_MSG_RESULT(DLPI)
745bf05f 842 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
238497fc
PJ
843else
844 if test $ac_cv_header_net_bpf_h = no; then
845 if test $ac_cv_header_sys_dlpi_h = no; then
846 AC_MSG_RESULT(none)
847 AC_MSG_WARN([*** IS-IS support will not be built ***])
848 ISISD=""
849 else
850 AC_MSG_RESULT(DLPI)
851 fi
745bf05f 852 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
238497fc
PJ
853 else
854 AC_MSG_RESULT(BPF)
745bf05f 855 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
238497fc
PJ
856 fi
857fi
745bf05f 858AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
238497fc 859
b99760ab 860dnl ------------------------------------
861dnl check for broken CMSG_FIRSTHDR macro
862dnl ------------------------------------
6c20046f 863AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
5b087528 864AC_RUN_IFELSE([AC_LANG_SOURCE([[
b99760ab 865#ifdef SUNOS_5
866#define _XPG4_2
867#define __EXTENSIONS__
868#endif
24f5e2fc 869#include <stdlib.h>
b99760ab 870#include <sys/types.h>
871#include <sys/socket.h>
872
873main()
874{
875 struct msghdr msg;
876 char buf[4];
877
878 msg.msg_control = buf;
879 msg.msg_controllen = 0;
880
881 if (CMSG_FIRSTHDR(&msg) != NULL)
882 exit(0);
883 exit (1);
5b087528 884}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
d33e8d7b 885[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
b99760ab 886
7ea487bc 887dnl ------------------------------
888dnl check kernel route read method
889dnl ------------------------------
b2f36157 890AC_CACHE_CHECK([route read method], [frr_cv_rtread_method],
5589ffa7 891[if test "x$netlink" = xyes; then
b2f36157 892 frr_cv_rtread_method="netlink"
7ea487bc 893else
b2f36157 894for frr_cv_rtread_method in /dev/ip /dev/null;
7ea487bc 895do
b2f36157 896 test x`ls $frr_cv_rtread_method 2>/dev/null` = x"$frr_cv_rtread_method" && break
7ea487bc 897done
b2f36157 898case $frr_cv_rtread_method in
9c30ab6b 899 "/dev/ip")
900 case "$host" in
b2f36157
DL
901 *-freebsd*) frr_cv_rtread_method="sysctl";;
902 *) frr_cv_rtread_method="getmsg";;
9c30ab6b 903 esac;;
5589ffa7 904 *)
b2f36157 905 frr_cv_rtread_method="sysctl";;
7ea487bc 906esac
907fi])
b2f36157 908RTREAD_METHOD=rtread_${frr_cv_rtread_method}.o
7ea487bc 909AC_SUBST(RTREAD_METHOD)
910
911dnl -----------------------------
912dnl check interface lookup method
913dnl -----------------------------
19877dd2 914IOCTL_METHOD=ioctl.o
7ea487bc 915AC_MSG_CHECKING(interface looking up method)
916if test "$netlink" = yes; then
917 AC_MSG_RESULT(netlink)
918 IF_METHOD=if_netlink.o
19877dd2 919elif test "$opsys" = "sol2-6";then
920 AC_MSG_RESULT(Solaris GIF)
921 IF_METHOD=if_ioctl.o
afd8a129 922elif test "$opsys" = "sol8";then
19877dd2 923 AC_MSG_RESULT(Solaris GLIF)
924 IF_METHOD=if_ioctl_solaris.o
925 IOCTL_METHOD=ioctl_solaris.o
19877dd2 926elif test "$opsys" = "openbsd";then
927 AC_MSG_RESULT(openbsd)
928 IF_METHOD=if_ioctl.o
929elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
930 AC_MSG_RESULT(sysctl)
7ea487bc 931 IF_METHOD=if_sysctl.o
932 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
19877dd2 933else
7ea487bc 934 AC_MSG_RESULT(ioctl)
935 IF_METHOD=if_ioctl.o
7ea487bc 936fi
937AC_SUBST(IF_METHOD)
19877dd2 938AC_SUBST(IOCTL_METHOD)
7ea487bc 939
42c98199 940dnl ---------------------------------------------------------------
941dnl figure out how to specify an interface in multicast sockets API
942dnl ---------------------------------------------------------------
8e4da10b 943AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
42c98199 944
b3f2bf7c 945AC_CHECK_HEADERS([linux/mroute.h], [], [],[
24f5e2fc
DL
946 #include <sys/socket.h>
947 #include <netinet/in.h>
b3f2bf7c
RW
948 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
949 #include <linux/types.h>
950])
951
8e4da10b
DL
952m4_define([FRR_INCLUDES],
953FRR_INCLUDES
b3f2bf7c
RW
954[#if HAVE_LINUX_MROUTE_H
955# include <linux/mroute.h>
956#endif
957])dnl
958
959AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
24f5e2fc
DL
960 #include <sys/socket.h>
961 #include <sys/types.h>
962 #include <netinet/in.h>
963 #include <net/route.h>
b3f2bf7c
RW
964])
965
8e4da10b
DL
966m4_define([FRR_INCLUDES],
967FRR_INCLUDES
b3f2bf7c
RW
968[#if HAVE_NETINET_IP_MROUTE_H
969# include <netinet/ip_mroute.h>
970#endif
971])dnl
972
42c98199 973AC_MSG_CHECKING([for BSD struct ip_mreq hack])
24f5e2fc
DL
974AC_TRY_COMPILE([#include <sys/param.h>],
975[#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 976 return (0);
977#else
978 #error No support for BSD struct ip_mreq hack detected
979#endif],[AC_MSG_RESULT(yes)
980AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
981AC_MSG_RESULT(no))
982
10d04cdb
DT
983AC_MSG_CHECKING([for RFC3678 protocol-independed API])
984AC_TRY_COMPILE([
985#include <sys/types.h>
986#include <netinet/in.h>
987], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
988], [AC_MSG_RESULT(yes)
989AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
990AC_MSG_RESULT(no))
991
c543a173
AS
992dnl ---------------------------------------------------------------
993dnl figure out how to check link-state
994dnl ---------------------------------------------------------------
24f5e2fc
DL
995AC_CHECK_HEADER( [net/if_media.h],
996 [m4_define([LINK_DETECT_INCLUDES],
8e4da10b 997 FRR_INCLUDES
24f5e2fc
DL
998 [#include <net/if_media.h>
999 ])
1000 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1001 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1002 [], LINK_DETECT_INCLUDES)],
1003 [],
8e4da10b 1004 FRR_INCLUDES)
c543a173 1005
9234b382
DV
1006dnl ---------------------------------------------------------------
1007dnl Additional, newer way to check link-state using ifi_link_state.
1008dnl Not available in all BSD's when ifmediareq available
1009dnl ---------------------------------------------------------------
24f5e2fc
DL
1010AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1011 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
8e4da10b 1012 [], FRR_INCLUDES)
9234b382 1013
0df7c91f
PJ
1014dnl ------------------------
1015dnl TCP_MD5SIG socket option
1016dnl ------------------------
1017
1018AC_CHECK_HEADER([netinet/tcp.h],
1019 [m4_define([MD5_INCLUDES],
8e4da10b 1020 FRR_INCLUDES
0df7c91f
PJ
1021 [#include <netinet/tcp.h>
1022 ])
1023 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1024 [],
8e4da10b 1025 FRR_INCLUDES)
0df7c91f
PJ
1026if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1027 AC_CHECK_HEADER([linux/tcp.h],
1028 [m4_define([MD5_INCLUDES],
8e4da10b 1029 FRR_INCLUDES
0df7c91f
PJ
1030 [#include <linux/tcp.h>
1031 ])
1032 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1033fi
1034
7ea487bc 1035dnl -----------------------------
1036dnl check ipforward detect method
1037dnl -----------------------------
b2f36157 1038AC_CACHE_CHECK([ipforward method], [frr_cv_ipforward_method],
ca9f342c
DL
1039[if test x$cross_compiling = xyes; then
1040 if test x"$opsys" = x"gnu-linux"; then
b2f36157 1041 frr_cv_ipforward_method=/proc/net/snmp
ca9f342c 1042 else
b2f36157 1043 frr_cv_ipforward_method=/dev/ip
ca9f342c
DL
1044 fi
1045else
b2f36157 1046 for frr_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
ca9f342c 1047 do
b2f36157 1048 test x`ls $frr_cv_ipforward_method 2>/dev/null` = x"$frr_cv_ipforward_method" && break
ca9f342c
DL
1049 done
1050fi
b2f36157
DL
1051case $frr_cv_ipforward_method in
1052 "/proc/net/snmp") frr_cv_ipforward_method="proc";;
7ea487bc 1053 "/dev/ip")
1054 case "$host" in
b2f36157
DL
1055 *-freebsd*) frr_cv_ipforward_method="sysctl";;
1056 *) frr_cv_ipforward_method="solaris";;
7ea487bc 1057 esac;;
b2f36157 1058 *) frr_cv_ipforward_method="sysctl";;
7ea487bc 1059esac])
b2f36157 1060IPFORWARD=ipforward_${frr_cv_ipforward_method}.o
7ea487bc 1061AC_SUBST(IPFORWARD)
1062
60060acc
RW
1063dnl ----------------------------------------------------------------------------
1064dnl figure out if domainname is available in the utsname struct (GNU extension).
1065dnl ----------------------------------------------------------------------------
1066AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1067
7ea487bc 1068dnl ----------
1069dnl IPv6 check
1070dnl ----------
1071AC_MSG_CHECKING(whether does this OS have IPv6 stack)
7ea487bc 1072dnl ---------
1073dnl KAME IPv6
1074dnl ---------
1cbb5dfc 1075 if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
a159ed93 1076 AC_DEFINE(KAME,1,KAME IPv6)
a159ed93 1077 AC_MSG_RESULT(KAME)
19877dd2 1078dnl ------------------------------------
1079dnl Solaris 9, 10 and potentially higher
1080dnl ------------------------------------
afd8a129 1081 elif test x"$opsys" = x"sol8"; then
19877dd2 1082 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
19877dd2 1083 AC_MSG_RESULT(Solaris IPv6)
7ea487bc 1084dnl ----------
1085dnl Linux IPv6
1086dnl ----------
42bb3dfd 1087 elif test x"$opsys" = x"gnu-linux"; then
3ef0b877 1088 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
d8dc5257
DS
1089 dnl Linux has a compilation problem with mixing
1090 dnl netinet/in.h and linux/in6.h they are not
1091 dnl compatible. There has been discussion on
1092 dnl how to fix it but no real progress on implementation
1093 dnl when they fix it, remove this
1094 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
42bb3dfd
DL
1095 AC_MSG_RESULT(Linux IPv6)
1096 else
80ec006d 1097 AC_MSG_ERROR([Failed to detect IPv6 stack])
a159ed93 1098 fi
7ea487bc 1099
80ec006d
DL
1100dnl this is unconditial, for compatibility
1101AC_DEFINE(HAVE_IPV6,1,IPv6)
7ea487bc 1102
fa3232e1 1103dnl ------------------
1104dnl IPv6 header checks
1105dnl ------------------
24f5e2fc 1106AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
6f0e3f6e 1107 netinet6/in6_var.h netinet6/nd6.h], [], [],
8e4da10b 1108 FRR_INCLUDES)
fa3232e1 1109
8e4da10b
DL
1110m4_define([FRR_INCLUDES],dnl
1111FRR_INCLUDES
6f0e3f6e
PJ
1112[#if HAVE_NETINET6_IN6_H
1113#include <netinet6/in6.h>
1114#endif
1115#if HAVE_NETINET_IN6_VAR_H
1116#include <netinet/in6_var.h>
1117#endif
24f5e2fc 1118#include <netinet/icmp6.h>
6f0e3f6e
PJ
1119#if HAVE_NETINET6_IN6_VAR_H
1120# include <netinet6/in6_var.h>
1121#endif
1122#if HAVE_NETINET6_ND6_H
fbf24544 1123# include <netinet6/nd6.h>
6f0e3f6e
PJ
1124#endif
1125])dnl
1126
cbcd9bfc
JT
1127dnl disable doc check
1128if test "${enable_doc}" = "no";then
1129 DOC=""
1130else
1131 DOC="doc"
1132fi
1133
7ea487bc 1134dnl --------------------
1135dnl Daemon disable check
1136dnl --------------------
1137if test "${enable_zebra}" = "no";then
1138 ZEBRA=""
1139else
1140 ZEBRA="zebra"
1141fi
f027d331 1142AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
7ea487bc 1143
1144if test "${enable_bgpd}" = "no";then
1145 BGPD=""
1146else
1147 BGPD="bgpd"
1148fi
f027d331 1149AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
7ea487bc 1150
1151if test "${enable_ripd}" = "no";then
1152 RIPD=""
1153else
1154 RIPD="ripd"
1155fi
f027d331 1156AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
7ea487bc 1157
1158if test "${enable_ospfd}" = "no";then
1159 OSPFD=""
1160else
1161 OSPFD="ospfd"
1162fi
f027d331 1163AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
7ea487bc 1164
eac6e3f0
RW
1165if test "${enable_ldpd}" = "yes";then
1166 LDPD="ldpd"
87ab4aec 1167 AC_DEFINE(HAVE_LDPD, 1, ldpd)
eac6e3f0
RW
1168else
1169 LDPD=""
1170fi
1171AM_CONDITIONAL(LDPD, test "x$LDPD" = "xldpd")
1172
9473e340
DS
1173if test "${enable_watchfrr}" = "no";then
1174 WATCHFRR=""
d0199430 1175else
9473e340 1176 WATCHFRR="watchfrr"
d0199430 1177fi
9473e340 1178AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
d0199430 1179
1ef74ef7 1180OSPFCLIENT=""
cd66cd4c 1181if test "${enable_ospfapi}" != "no";then
9a569848 1182 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1ef74ef7 1183
cd66cd4c 1184 if test "${enable_ospfclient}" != "no";then
1ef74ef7 1185 OSPFCLIENT="ospfclient"
1ef74ef7 1186 fi
7ea487bc 1187fi
cd66cd4c 1188
f027d331 1189AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
7ea487bc 1190
1191case "${enable_ripngd}" in
7ea487bc 1192 "no" ) RIPNGD="";;
80ec006d 1193 * ) RIPNGD="ripngd";;
7ea487bc 1194esac
f027d331 1195AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
7ea487bc 1196
1197case "${enable_ospf6d}" in
7ea487bc 1198 "no" ) OSPF6D="";;
80ec006d 1199 * ) OSPF6D="ospf6d";;
7ea487bc 1200esac
f027d331 1201AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
7ea487bc 1202
9e867fe6 1203case "${enable_isisd}" in
9e867fe6 1204 "no" ) ISISD="";;
c3a9461e 1205 * ) ISISD="isisd";;
9e867fe6 1206esac
f027d331 1207AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
9e867fe6 1208
12e41d03 1209case "${enable_pimd}" in
12e41d03 1210 "no" ) PIMD="";;
f0646db0 1211 * ) PIMD="pimd";;
12e41d03
DL
1212esac
1213AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
1214
7ea487bc 1215if test "${enable_bgp_announce}" = "no";then
750e8146
PJ
1216 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1217else
1218 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
7ea487bc 1219fi
1220
65efcfce
LB
1221if test "${with_rfp_path}" = "yes" || test x"${with_rfp_path}" = x""; then
1222 with_rfp_path="bgpd/rfp-example"
1223fi
1224if test "${with_rfp_path}" != "no"; then
1225 VNC_RFP_PATH="${with_rfp_path}"
1226 AC_SUBST(VNC_RFP_PATH)
1227fi
1228
f95f2ad9 1229if test "${enable_bgp_vnc}" != "no";then
65efcfce
LB
1230 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
1231 RFPTEST="${with_rfp_path}/rfptest"
1232 LIBRFP="${with_rfp_path}/librfp"
1233 RFPINC="${with_rfp_path}/librfp"
1234else
1235 RFPTEST=
1236 LIBRFP=
1237 RFPINC="bgpd/rfp-example/librfp"
1238fi
1239# set
f95f2ad9 1240AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
65efcfce 1241
cbcd9bfc 1242AC_SUBST(DOC)
7ea487bc 1243AC_SUBST(ZEBRA)
65efcfce
LB
1244AC_SUBST(RFPTEST)
1245AC_SUBST(LIBRFP)
1246AC_SUBST(RFPINC)
7ea487bc 1247AC_SUBST(BGPD)
1248AC_SUBST(RIPD)
1249AC_SUBST(RIPNGD)
1250AC_SUBST(OSPFD)
1251AC_SUBST(OSPF6D)
eac6e3f0 1252AC_SUBST(LDPD)
9473e340 1253AC_SUBST(WATCHFRR)
9e867fe6 1254AC_SUBST(ISISD)
12e41d03 1255AC_SUBST(PIMD)
97cee877 1256AC_SUBST(SOLARIS)
7ea487bc 1257AC_SUBST(VTYSH)
7ea487bc 1258AC_SUBST(CURSES)
1259AC_SUBST(OSPFCLIENT)
1ef74ef7 1260AC_SUBST(OSPFAPI)
7ea487bc 1261AC_CHECK_LIB(crypt, crypt)
1262AC_CHECK_LIB(resolv, res_init)
7ea487bc 1263
25f45887
JJ
1264dnl ---------------------------
1265dnl check system has PCRE regexp
1266dnl ---------------------------
1267if test "x$enable_pcreposix" = "xyes"; then
1268 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1269 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1270fi
25f45887 1271AC_SUBST(HAVE_LIBPCREPOSIX)
7ea487bc 1272
1273dnl ------------------
b1fc9acb 1274dnl check Net-SNMP library
7ea487bc 1275dnl ------------------
d6be5fb9 1276if test "${enable_snmp}" != ""; then
08d7f653
VB
1277 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1278 if test x"$NETSNMP_CONFIG" = x"no"; then
1279 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1280 fi
1281 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1282 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1283 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1284 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1285int main(void);
1286],
1287[
1288{
1289 return 0;
1290}
1291])],[AC_MSG_RESULT(yes)],[
1292 AC_MSG_RESULT(no)
1293 AC_MSG_ERROR([--enable-snmp given but not usable])])
1294 AC_DEFINE(HAVE_SNMP,,SNMP)
d6be5fb9
VB
1295 case "${enable_snmp}" in
1296 yes)
1297 SNMP_METHOD=agentx
1298 ;;
1299 smux|agentx)
1300 SNMP_METHOD="${enable_snmp}"
1301 ;;
1302 *)
1303 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1304 ;;
1305 esac
1306 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1307 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1308 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
6cf9df08 1309fi
1310
7ea487bc 1311dnl ---------------------------
6f0e3f6e 1312dnl sockaddr and netinet checks
7ea487bc 1313dnl ---------------------------
24f5e2fc
DL
1314AC_CHECK_TYPES([
1315 struct sockaddr_dl,
1316 struct vifctl, struct mfcctl, struct sioc_sg_req,
12e41d03 1317 vifi_t, struct sioc_vif_req, struct igmpmsg,
6f0e3f6e
PJ
1318 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1319 struct nd_opt_adv_interval, struct rt_addrinfo,
11770e10 1320 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
8e4da10b 1321 [], [], FRR_INCLUDES)
6f0e3f6e
PJ
1322
1323AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1324 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
ca3ccd87 1325 struct sockaddr_dl.sdl_len,
6f0e3f6e
PJ
1326 struct if6_aliasreq.ifra_lifetime,
1327 struct nd_opt_adv_interval.nd_opt_ai_type],
8e4da10b 1328 [], [], FRR_INCLUDES)
29c4c9bd 1329
6f0e3f6e 1330dnl ---------------------------
11770e10 1331dnl IRDP/pktinfo/icmphdr checks
6f0e3f6e
PJ
1332dnl ---------------------------
1333AC_CHECK_TYPES([struct in_pktinfo],
11770e10
PJ
1334 [AC_CHECK_TYPES([struct icmphdr],
1335 [if test "${enable_irdp}" != "no"; then
1336 AC_DEFINE(HAVE_IRDP,, IRDP)
1337 fi],
1338 [if test "${enable_irdp}" = "yes"; then
1339 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
8e4da10b 1340 fi], [FRR_INCLUDES])],
6f0e3f6e
PJ
1341 [if test "${enable_irdp}" = "yes"; then
1342 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
8e4da10b 1343 fi], [FRR_INCLUDES])
29c4c9bd 1344
12e41d03
DL
1345dnl -----------------------
1346dnl checking for IP_PKTINFO
1347dnl -----------------------
1348AC_MSG_CHECKING(for IP_PKTINFO)
1349AC_TRY_COMPILE([#include <netdb.h>], [
1350 int opt = IP_PKTINFO;
1351], [
1352 AC_MSG_RESULT(yes)
1353 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1354], [
1355 AC_MSG_RESULT(no)
1356])
1357
1358dnl ---------------------------
1359dnl checking for IP_RECVDSTADDR
1360dnl ---------------------------
1361AC_MSG_CHECKING(for IP_RECVDSTADDR)
1362AC_TRY_COMPILE([#include <netinet/in.h>], [
1363 int opt = IP_RECVDSTADDR;
1364], [
1365 AC_MSG_RESULT(yes)
1366 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1367], [
1368 AC_MSG_RESULT(no)
1369])
1370
1371dnl ----------------------
1372dnl checking for IP_RECVIF
1373dnl ----------------------
1374AC_MSG_CHECKING(for IP_RECVIF)
1375AC_TRY_COMPILE([#include <netinet/in.h>], [
1376 int opt = IP_RECVIF;
1377], [
1378 AC_MSG_RESULT(yes)
1379 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1380], [
1381 AC_MSG_RESULT(no)
1382])
1383
eac6e3f0
RW
1384dnl ----------------------
1385dnl checking for SO_BINDANY
1386dnl ----------------------
1387AC_MSG_CHECKING(for SO_BINDANY)
1388AC_TRY_COMPILE([#include <sys/socket.h>], [
1389 int opt = SO_BINDANY;
1390], [
1391 AC_MSG_RESULT(yes)
1392 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1393], [
1394 AC_MSG_RESULT(no)
1395])
1396
1397dnl ----------------------
1398dnl checking for IP_FREEBIND
1399dnl ----------------------
1400AC_MSG_CHECKING(for IP_FREEBIND)
1401AC_TRY_COMPILE([#include <netinet/in.h>], [
1402 int opt = IP_FREEBIND;
1403], [
1404 AC_MSG_RESULT(yes)
1405 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1406], [
1407 AC_MSG_RESULT(no)
1408])
1409
c4376c9d
SH
1410dnl --------------------------------------
1411dnl checking for clock_time monotonic struct and call
1412dnl --------------------------------------
6511cab2
PJ
1413AC_CHECK_DECL(CLOCK_MONOTONIC,
1414 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
9964fcfc 1415 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
8e4da10b 1416], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
c4376c9d 1417
edd7c245 1418dnl -------------------
1419dnl capabilities checks
1420dnl -------------------
41d3fc96 1421if test "${enable_capabilities}" != "no"; then
1422 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1423 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1424 [AC_MSG_RESULT(yes)
1425 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
8e4da10b 1426 frr_ac_keepcaps="yes"],
41d3fc96 1427 AC_MSG_RESULT(no)
edd7c245 1428 )
8e4da10b 1429 if test x"${frr_ac_keepcaps}" = x"yes"; then
41d3fc96 1430 AC_CHECK_HEADERS(sys/capability.h)
1431 fi
1432 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1433 AC_CHECK_LIB(cap, cap_init,
1434 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1435 LIBCAP="-lcap"
8e4da10b 1436 frr_ac_lcaps="yes"]
41d3fc96 1437 )
ceacedba 1438 else
1439 AC_CHECK_HEADERS(priv.h,
1440 [AC_MSG_CHECKING(Solaris style privileges are available)
1441 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1442 [AC_MSG_RESULT(yes)
1443 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
8e4da10b 1444 frr_ac_scaps="yes"],
ceacedba 1445 AC_MSG_RESULT(no)
1446 )
1447 ]
1448 )
1449 fi
8e4da10b
DL
1450 if test x"${frr_ac_scaps}" = x"yes" \
1451 -o x"${frr_ac_lcaps}" = x"yes"; then
ceacedba 1452 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
41d3fc96 1453 fi
edd7c245 1454fi
1455AC_SUBST(LIBCAP)
1456
fb2d1502 1457dnl ---------------------------
1458dnl check for glibc 'backtrace'
1459dnl ---------------------------
8c99b4c1
DL
1460if test x"${enable_backtrace}" != x"no" ; then
1461 backtrace_ok=no
1462 AC_CHECK_HEADER([execinfo.h], [
1463 AC_SEARCH_LIBS([backtrace], [execinfo], [
1464 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1465 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1466 backtrace_ok=yes
1467 ],, [-lm])
eda3529e 1468 ])
8c99b4c1
DL
1469
1470 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1471 dnl user explicitly requested backtrace but we failed to find support
1472 AC_MSG_FAILURE([failed to find backtrace support])
1473 fi
1474fi
fb2d1502 1475
41be32bf
PJ
1476dnl -----------------------------------------
1477dnl check for malloc mallinfo struct and call
1478dnl this must try and link using LIBS, in
1479dnl order to check no alternative allocator
1480dnl has been specified, which might not provide
1481dnl mallinfo, e.g. such as Umem on Solaris.
1482dnl -----------------------------------------
6f0e3f6e 1483AC_CHECK_HEADER([malloc.h],
41be32bf
PJ
1484 [AC_MSG_CHECKING(whether mallinfo is available)
1485 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1486 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1487 [AC_MSG_RESULT(yes)
1488 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1489 AC_MSG_RESULT(no)
1490 )
8e4da10b 1491 ], [], FRR_INCLUDES)
41be32bf 1492
408ad943 1493dnl ----------
1494dnl configure date
1495dnl ----------
1496CONFDATE=`date '+%Y%m%d'`
1497AC_SUBST(CONFDATE)
1498
f281ab97
DL
1499dnl -------
1500dnl DejaGNU
1501dnl -------
1502if test x"$DEJAGNU" = x
1503then
1504 DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
1505fi
1506RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
1507
1508AC_SUBST(DEJAGNU)
1509AC_SUBST(RUNTESTDEFAULTFLAGS)
1510
7ea487bc 1511dnl ------------------------------
a159ed93 1512dnl set paths for state directory
23bd12c3 1513dnl ------------------------------
e84999d9 1514AC_MSG_CHECKING(directory to use for state file)
23bd12c3 1515if test "${prefix}" = "NONE"; then
b2f36157 1516 frr_statedir_prefix="";
23bd12c3 1517else
b2f36157 1518 frr_statedir_prefix=${prefix}
23bd12c3 1519fi
1520if test "${localstatedir}" = '${prefix}/var'; then
8e4da10b 1521 for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
b2f36157
DL
1522 ${frr_statedir_prefix}/var/adm dnl
1523 ${frr_statedir_prefix}/etc dnl
a159ed93 1524 /var/run dnl
1525 /var/adm dnl
1526 /etc dnl
1527 /dev/null;
23bd12c3 1528 do
8e4da10b 1529 test -d $FRR_STATE_DIR && break
23bd12c3 1530 done
8e4da10b 1531 frr_statedir=$FRR_STATE_DIR
23bd12c3 1532else
b2f36157 1533 frr_statedir=${localstatedir}
a159ed93 1534fi
b2f36157 1535if test $frr_statedir = "/dev/null"; then
a159ed93 1536 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1537fi
b2f36157
DL
1538AC_MSG_RESULT(${frr_statedir})
1539AC_SUBST(frr_statedir)
1540
1541AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$frr_statedir/zebra.pid",zebra PID)
1542AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$frr_statedir/ripd.pid",ripd PID)
1543AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$frr_statedir/ripngd.pid",ripngd PID)
1544AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$frr_statedir/bgpd.pid",bgpd PID)
1545AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$frr_statedir/ospfd.pid",ospfd PID)
1546AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$frr_statedir/ospf6d.pid",ospf6d PID)
1547AC_DEFINE_UNQUOTED(PATH_LDPD_PID, "$frr_statedir/ldpd.pid",ldpd PID)
1548AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
1549AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$frr_statedir/isisd.pid",isisd PID)
1550AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$frr_statedir/pimd.pid",pimd PID)
9473e340 1551AC_DEFINE_UNQUOTED(PATH_WATCHFRR_PID, "$frr_statedir/watchfrr.pid",watchfrr PID)
b2f36157
DL
1552AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
1553AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$frr_statedir/zebra.vty",zebra vty socket)
1554AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$frr_statedir/ripd.vty",rip vty socket)
1555AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$frr_statedir/ripngd.vty",ripng vty socket)
1556AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$frr_statedir/bgpd.vty",bgpd vty socket)
1557AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$frr_statedir/ospfd.vty",ospfd vty socket)
1558AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$frr_statedir/ospf6d.vty",ospf6d vty socket)
1559AC_DEFINE_UNQUOTED(LDP_VTYSH_PATH, "$frr_statedir/ldpd.vty",ldpd vty socket)
1560AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$frr_statedir/isisd.vty",isisd vty socket)
1561AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$frr_statedir/pimd.vty",pimd vty socket)
9473e340 1562AC_DEFINE_UNQUOTED(WATCHFRR_VTYSH_PATH, "$frr_statedir/watchfrr.vty",watchfrr vty socket)
b2f36157 1563AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
7ea487bc 1564
95c4aff2
DL
1565dnl autoconf does this, but it does it too late...
1566test "x$prefix" = xNONE && prefix=$ac_default_prefix
1567test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
1568
1569dnl get the full path, recursing through variables...
1570vtysh_bin="$bindir/vtysh"
1571for I in 1 2 3 4 5 6 7 8 9 10; do
1572 eval vtysh_bin="\"$vtysh_bin\""
1573done
1574AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
1575
a07169b1
DL
1576CFG_SYSCONF="$sysconfdir"
1577CFG_SBIN="$sbindir"
1578CFG_STATE="$frr_statedir"
1579for I in 1 2 3 4 5 6 7 8 9 10; do
1580 eval CFG_SYSCONF="\"$CFG_SYSCONF\""
1581 eval CFG_SBIN="\"$CFG_SBIN\""
1582 eval CFG_STATE="\"$CFG_STATE\""
1583done
1584AC_SUBST(CFG_SYSCONF)
1585AC_SUBST(CFG_SBIN)
1586AC_SUBST(CFG_STATE)
1587
1eb8ef25 1588dnl -------------------------------
1589dnl Quagga sources should always be
1590dnl current wrt interfaces. Dont
1591dnl allow deprecated interfaces to
1592dnl be exposed.
1593dnl -------------------------------
1594AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1595
7ea487bc 1596dnl ---------------------------
1597dnl Check htonl works correctly
1598dnl ---------------------------
1599AC_MSG_CHECKING(for working htonl)
6f0e3f6e 1600AC_CACHE_VAL(ac_cv_htonl_works,
8e4da10b 1601 [AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
6f0e3f6e
PJ
1602 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1603 ]
1604)
7ea487bc 1605AC_MSG_RESULT($ac_cv_htonl_works)
1606
dad253b4 1607AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
9473e340 1608 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchfrr/Makefile
eac6e3f0 1609 ospf6d/Makefile ldpd/Makefile isisd/Makefile vtysh/Makefile
f281ab97 1610 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
12e41d03 1611 pimd/Makefile
5bb7e4d1 1612 tests/bgpd.tests/Makefile
c69905b6 1613 tests/libzebra.tests/Makefile
f281ab97 1614 redhat/Makefile
1018422a
DS
1615 tools/Makefile
1616 cumulus/Makefile
69f1fc22 1617 pkgsrc/Makefile
93c7bed1 1618 fpm/Makefile
670bbf19 1619 redhat/quagga.spec
b7a97f82 1620 lib/version.h
14c17fd8 1621 doc/defines.texi
461c7bee
DL
1622 doc/bgpd.8
1623 doc/isisd.8
1624 doc/ospf6d.8
1625 doc/ospfclient.8
1626 doc/ospfd.8
1627 doc/ldpd.8
1628 doc/ripd.8
1629 doc/ripngd.8
1630 doc/pimd.8
1631 doc/vtysh.1
9473e340 1632 doc/watchfrr.8
461c7bee
DL
1633 doc/zebra.8
1634 doc/quagga.1
cbd04084 1635 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
f31293af 1636 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
65efcfce 1637
f95f2ad9 1638if test "${enable_bgp_vnc}" != "no"; then
65efcfce
LB
1639 if test "${with_rfp_path}" = "bgpd/rfp-example" ; then
1640 AC_CONFIG_FILES([bgpd/rfp-example/rfptest/Makefile bgpd/rfp-example/librfp/Makefile])
1641 else
1642 AC_CONFIG_FILES([${with_rfp_path}/rfptest/Makefile ${with_rfp_path}/librfp/Makefile])
1643 fi
1644fi
1645
26275b05 1646AC_CONFIG_FILES([solaris/Makefile])
1647
670bbf19 1648AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
65efcfce 1649
48577196 1650## Hack, but working solution to avoid rebuilding of quagga.info.
1651## It's already in CVS until texinfo 4.7 is more common.
14c17fd8 1652AC_OUTPUT
7ea487bc 1653
1654echo "
b2f36157
DL
1655FreeRangeRouting configuration
1656------------------------------
1657FRR version : ${PACKAGE_VERSION}
1080c13f 1658host operating system : ${host_os}
7ea487bc 1659source code location : ${srcdir}
1660compiler : ${CC}
1661compiler flags : ${CFLAGS}
6f0e3f6e 1662make : ${MAKE-make}
6f0e3f6e 1663linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
b2f36157 1664state file directory : ${frr_statedir}
dc7a2bf1 1665config file directory : `eval echo \`echo ${sysconfdir}\``
d6b72f7a 1666example directory : `eval echo \`echo ${exampledir}\``
b2f36157
DL
1667user to run as : ${enable_user}
1668group to run as : ${enable_group}
1669group for vty sockets : ${enable_vty_group}
aa593d5e 1670config file mask : ${enable_configfile_mask}
1671log file mask : ${enable_logfile_mask}
dad253b4 1672zebra protobuf enabled : ${have_protobuf:-no}
dc7a2bf1 1673
1674The above user and group must have read/write access to the state file
105b8239 1675directory and to the config files in the config file directory."