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