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