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