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