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