]> git.proxmox.com Git - mirror_frr.git/blob - configure.ac
doc: Update Building Doc for RedHat-style Distro's (CentOS / Fedora)
[mirror_frr.git] / configure.ac
1 ##
2 ## Configure template file for FRRouting.
3 ## autoconf will generate configure script.
4 ##
5 ## Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
6 ## Portions Copyright (c) 2003 Paul Jakma <paul@dishone.st>
7 ##
8 AC_PREREQ(2.60)
9
10 AC_INIT(frr, 3.0-rc0, [https://github.com/frrouting/frr/issues])
11 PACKAGE_URL="https://frrouting.org/"
12 PACKAGE_FULLNAME="FRRouting"
13 AC_SUBST(PACKAGE_FULLNAME)
14
15 CONFIG_ARGS="$ac_configure_args"
16 AC_SUBST(CONFIG_ARGS)
17
18 AC_CONFIG_SRCDIR(lib/zebra.h)
19 AC_CONFIG_MACRO_DIR([m4])
20
21 dnl -----------------------------------
22 dnl Get hostname and other information.
23 dnl -----------------------------------
24 AC_CANONICAL_BUILD()
25 AC_CANONICAL_HOST()
26 AC_CANONICAL_TARGET()
27
28 # Disable portability warnings -- our automake code (in particular
29 # common.am) uses some constructs specific to gmake.
30 AM_INIT_AUTOMAKE([1.12 -Wno-portability])
31 m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
32 AM_SILENT_RULES([yes])
33 AC_CONFIG_HEADERS(config.h)
34
35 AC_PATH_PROG(PERL, perl)
36 PKG_PROG_PKG_CONFIG
37
38 dnl default is to match previous behavior
39 exampledir=${sysconfdir}
40 AC_ARG_ENABLE([exampledir],
41 AS_HELP_STRING([--enable-exampledir],
42 [specify alternate directory for examples]),
43 exampledir="$enableval",)
44 dnl XXX add --exampledir to autoconf standard directory list somehow
45 AC_SUBST(exampledir)
46
47 dnl default is to match previous behavior
48 pkgsrcrcdir=""
49 pkgsrcdir=""
50 AC_ARG_ENABLE([pkgsrcrcdir],
51 AS_HELP_STRING([--enable-pkgsrcrcdir],
52 [specify directory for rc.d scripts]),
53 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
54 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
55 AC_SUBST(pkgsrcdir)
56 AC_SUBST(pkgsrcrcdir)
57
58 AC_ARG_WITH([moduledir], [AS_HELP_STRING([--with-moduledir=DIR], [module directory (${libdir}/frr/modules)])], [
59 moduledir="$withval"
60 ], [
61 moduledir="\${libdir}/frr/modules"
62 ])
63 AC_SUBST([moduledir], [$moduledir])
64
65 AC_ARG_ENABLE(tcmalloc,
66 AS_HELP_STRING([--enable-tcmalloc], [Turn on tcmalloc]),
67 [case "${enableval}" in
68 yes) tcmalloc_enabled=true
69 LIBS="$LIBS -ltcmalloc_minimal"
70 ;;
71 no) tcmalloc_enabled=false ;;
72 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
73 esac],[tcmalloc_enabled=false])
74
75
76 dnl --------------------
77 dnl Check CC and friends
78 dnl --------------------
79 dnl note orig_cflags is also used further down
80 orig_cflags="$CFLAGS"
81 AC_LANG([C])
82 AC_PROG_CC
83 AC_PROG_CPP
84 AM_PROG_CC_C_O
85 dnl remove autoconf default "-g -O2"
86 CFLAGS="$orig_cflags"
87 AC_PROG_CC_C99
88
89 AC_PROG_EGREP
90 PKG_PROG_PKG_CONFIG
91
92 dnl autoconf 2.59 appears not to support AC_PROG_SED
93 dnl AC_PROG_SED
94 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
95
96 dnl try and enable CFLAGS that are useful for Quagga
97 dnl - specifically, options to control warnings
98
99 AC_USE_SYSTEM_EXTENSIONS()
100 AC_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
121 dnl ICC won't bail on unknown options without -diag-error 10006
122 dnl need to do this first so we get useful results for the other options
123 AC_C_FLAG([-diag-error 10006])
124
125 dnl if the user specified any CFLAGS, we don't add "-g -Os/-O2" here
126 if test "z$orig_cflags" = "z"; then
127 AC_C_FLAG([-g])
128 AC_C_FLAG([-Os], [
129 AC_C_FLAG([-O2])
130 ])
131 fi
132
133 dnl always want these CFLAGS
134 AC_C_FLAG([-fno-omit-frame-pointer])
135 AC_C_FLAG([-Wall])
136 AC_C_FLAG([-Wextra])
137 AC_C_FLAG([-Wmissing-prototypes])
138 AC_C_FLAG([-Wmissing-declarations])
139 AC_C_FLAG([-Wpointer-arith])
140 AC_C_FLAG([-Wbad-function-cast])
141 AC_C_FLAG([-Wwrite-strings])
142 if 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])
150 else
151 AC_C_FLAG([-Wno-unused-result])
152 fi
153 AC_C_FLAG([-Wno-unused-parameter])
154 AC_C_FLAG([-Wno-missing-field-initializers])
155
156 dnl ICC emits a broken warning for const char *x = a ? "b" : "c";
157 dnl for some reason the string consts get 'promoted' to char *,
158 dnl triggering a const to non-const conversion warning.
159 AC_C_FLAG([-diag-disable 3179])
160
161 if test x"${enable_werror}" = x"yes" ; then
162 WERROR="-Werror"
163 fi
164 AC_SUBST(WERROR)
165
166 dnl need link on this one, not compile
167 AC_LANG_PUSH(C)
168 ac_ld_flag_save="$LDFLAGS"
169 LDFLAGS="$LDFLAGS -rdynamic"
170 AC_MSG_CHECKING([[whether linker supports -rdynamic]])
171 AC_LINK_IFELSE(
172 [AC_LANG_PROGRAM([[]])],
173 [AC_MSG_RESULT([yes])],
174 [
175 LDFLAGS="$ac_ld_flag_save"
176 AC_MSG_RESULT([no])
177 ])
178 AC_LANG_POP(C)
179
180 dnl --------------
181 dnl Check programs
182 dnl --------------
183 AC_PROG_INSTALL
184 AC_PROG_LN_S
185 AC_PROG_MAKE_SET
186 AC_CHECK_TOOL(AR, ar)
187
188 dnl -----------------
189 dnl System extensions
190 dnl -----------------
191 AC_GNU_SOURCE
192
193 dnl -------
194 dnl libtool
195 dnl -------
196 LT_INIT
197
198 dnl ----------------------
199 dnl Packages configuration
200 dnl ----------------------
201 AC_ARG_WITH(pkg-extra-version,
202 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
203 [EXTRAVERSION=$withval],)
204 AC_ARG_WITH(pkg-git-version,
205 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
206 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
207 AC_ARG_ENABLE(vtysh,
208 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for Quagga]))
209 AC_ARG_ENABLE(doc,
210 AS_HELP_STRING([--disable-doc], [do not build docs]))
211 AC_ARG_ENABLE(zebra,
212 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
213 AC_ARG_ENABLE(bgpd,
214 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
215 AC_ARG_ENABLE(ripd,
216 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
217 AC_ARG_ENABLE(ripngd,
218 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
219 AC_ARG_ENABLE(ospfd,
220 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
221 AC_ARG_ENABLE(ospf6d,
222 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
223 AC_ARG_ENABLE(ldpd,
224 AS_HELP_STRING([--enable-ldpd], [build ldpd]))
225 AC_ARG_ENABLE(nhrpd,
226 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
227 AC_ARG_ENABLE(watchfrr,
228 AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
229 AC_ARG_ENABLE(isisd,
230 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
231 AC_ARG_ENABLE(pimd,
232 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
233 AC_ARG_ENABLE(bgp-announce,
234 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
235 AC_ARG_ENABLE(bgp-vnc,
236 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
237 AC_ARG_WITH(rfp-path,
238 AS_HELP_STRING([--with-rfp-path[=DIR]],[path to replaced stub RFP used with BGP VNC]))
239 AC_ARG_ENABLE(snmp,
240 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
241 AC_ARG_WITH(libpam,
242 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
243 AC_ARG_ENABLE(tcp-zebra,
244 AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
245 AC_ARG_ENABLE(ospfapi,
246 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
247 AC_ARG_ENABLE(ospfclient,
248 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
249 (this is the default if --disable-ospfapi is set)]))
250 AC_ARG_ENABLE(multipath,
251 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
252 AC_ARG_ENABLE(user,
253 AS_HELP_STRING([--enable-user=USER], [user to run FRR suite as (default frr)]))
254 AC_ARG_ENABLE(group,
255 AS_HELP_STRING([--enable-group=GROUP], [group to run FRR suite as (default frr)]))
256 AC_ARG_ENABLE(vty_group,
257 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
258 AC_ARG_ENABLE(configfile_mask,
259 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
260 AC_ARG_ENABLE(logfile_mask,
261 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
262 AC_ARG_ENABLE(shell_access,
263 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
264 AC_ARG_ENABLE(rtadv,
265 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
266 AC_ARG_ENABLE(irdp,
267 AS_HELP_STRING([--enable-irdp], [enable IRDP server support in zebra]))
268 AC_ARG_ENABLE(capabilities,
269 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
270 AC_ARG_ENABLE(rusage,
271 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
272 AC_ARG_ENABLE(gcc_ultra_verbose,
273 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
274 AC_ARG_ENABLE(linux24_tcp_md5,
275 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
276 AC_ARG_ENABLE(backtrace,
277 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
278 AC_ARG_ENABLE(time-check,
279 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
280 AC_ARG_ENABLE(pcreposix,
281 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
282 AC_ARG_ENABLE(fpm,
283 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
284 AC_ARG_ENABLE(systemd,
285 AS_HELP_STRING([--enable-systemd], [enable Systemd support]))
286 AC_ARG_ENABLE(poll,
287 AS_HELP_STRING([--enable-poll], [enable usage of Poll instead of select]))
288 AC_ARG_ENABLE(werror,
289 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
290 AC_ARG_ENABLE(cumulus,
291 AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions]))
292 AC_ARG_ENABLE(rr-semantics,
293 AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics]))
294 AC_ARG_ENABLE([protobuf],
295 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
296 AC_ARG_ENABLE([oldvpn_commands],
297 AS_HELP_STRING([--enable-oldvpn-commands], [Keep old vpn commands]))
298
299 AC_CHECK_HEADERS(json-c/json.h)
300 AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c")
301 if test $ac_cv_lib_json_c_json_object_get = no; then
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
306 fi
307
308 AC_ARG_ENABLE([dev_build],
309 AS_HELP_STRING([--enable-dev-build], [build for development]))
310
311 if 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
317 fi
318
319 case "${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])
325 else
326 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
327 fi
328 ;;
329 "*") ;;
330 esac
331
332 if test "${enable_rr_semantics}" != "no" ; then
333 AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics)
334 fi
335
336 if test "${enable_poll}" = "yes" ; then
337 AC_DEFINE(HAVE_POLL_CALL,,Compile systemd support in)
338 fi
339
340 dnl ----------
341 dnl MPLS check
342 dnl ----------
343 AC_MSG_CHECKING(whether this OS has MPLS stack)
344 case "$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 ;;
357 esac
358 AC_SUBST(MPLS_METHOD)
359
360 if test "${enable_cumulus}" = "yes" ; then
361 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
362 DFLT_NAME="datacenter"
363 else
364 DFLT_NAME="traditional"
365 fi
366 AC_SUBST(DFLT_NAME)
367 AC_DEFINE_UNQUOTED(DFLT_NAME,["$DFLT_NAME"], Name of the configuration default set)
368
369 if test "${enable_shell_access}" = "yes"; then
370 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
371 fi
372
373 AM_CONDITIONAL([FPM], [test "x$enable_fpm" = "xyes"])
374
375 if test "x${enable_dev_build}" = "xyes"; then
376 AC_DEFINE(DEV_BUILD,,Build for development)
377 fi
378 AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
379
380 #
381 # Logic for protobuf support.
382 #
383 if 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
404 fi
405
406 #
407 # Logic for old vpn commans support.
408 #
409 if test "$enable_oldvpn_commands" = "yes"; then
410 AC_DEFINE(KEEP_OLD_VPN_COMMANDS,, [Define for compiling with old vpn commands])
411 fi
412
413 # Fail if the user explicity enabled protobuf support and we couldn't
414 # find the compiler or libraries.
415 if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
416 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
417 fi
418
419 if test "x$have_protobuf" = "xyes"; then
420 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
421 fi
422
423 AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
424
425 #
426 # End of logic for protobuf support.
427 #
428
429 if test "${enable_tcp_zebra}" = "yes"; then
430 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
431 fi
432
433 if test "${enable_linux24_tcp_md5}" = "yes"; then
434 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
435 fi
436
437 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
438 if test "${enable_rtadv}" != "no"; then
439 AC_MSG_RESULT(yes)
440 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
441 else
442 AC_MSG_RESULT(no)
443 fi
444
445 if test "${enable_irdp}" = "yes"; then
446 AC_DEFINE(HAVE_IRDP,, IRDP )
447 fi
448
449 if test x"${enable_user}" = x"no"; then
450 enable_user=""
451 else
452 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
453 enable_user="frr"
454 fi
455 AC_DEFINE_UNQUOTED(FRR_USER, "${enable_user}", frr User)
456 fi
457
458 if test x"${enable_group}" = x"no"; then
459 enable_group=""
460 else
461 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
462 enable_group="frr"
463 fi
464 AC_DEFINE_UNQUOTED(FRR_GROUP, "${enable_group}", frr Group)
465 fi
466
467 if test x"${enable_vty_group}" = x"yes" ; then
468 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
469 elif test x"${enable_vty_group}" != x""; then
470 if test x"${enable_vty_group}" != x"no"; then
471 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
472 fi
473 fi
474 AC_SUBST([enable_user])
475 AC_SUBST([enable_group])
476 AC_SUBST([enable_vty_group])
477
478 enable_configfile_mask=${enable_configfile_mask:-0600}
479 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
480
481 enable_logfile_mask=${enable_logfile_mask:-0600}
482 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
483
484 MPATH_NUM=1
485
486 case "${enable_multipath}" in
487 0)
488 MPATH_NUM=64
489 ;;
490 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
491 MPATH_NUM="${enable_multipath}"
492 ;;
493 "")
494 ;;
495 *)
496 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
497 ;;
498 esac
499
500 AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
501
502 dnl -----------------------------------
503 dnl Add extra version string to package
504 dnl name, string and version fields.
505 dnl -----------------------------------
506 if test "x${EXTRAVERSION}" != "x" ; then
507 VERSION="${VERSION}${EXTRAVERSION}"
508 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
509 AC_SUBST(PACKAGE_EXTRAVERSION, ["${EXTRAVERSION}"])
510 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
511 fi
512
513 if 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
519 fi
520 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
521
522 dnl ------------------------------------
523 dnl Check C keywords and standard types
524 dnl ------------------------------------
525 AC_C_CONST
526 AC_C_INLINE
527 AC_C_VOLATILE
528 AC_HEADER_STDC
529 dnl AC_TYPE_PID_T
530 AC_TYPE_UID_T
531 AC_TYPE_MODE_T
532 AC_TYPE_SIZE_T
533 AC_STRUCT_TM
534
535 dnl -------------------------
536 dnl Check other header files.
537 dnl -------------------------
538 AC_CHECK_HEADERS([stropts.h sys/ksym.h \
539 linux/version.h asm/types.h \
540 sys/cdefs.h])
541
542 dnl Utility macro to avoid retyping includes all the time
543 m4_define([FRR_INCLUDES],
544 [#ifdef SUNOS_5
545 #define _XPG4_2
546 #define __EXTENSIONS__
547 #endif
548 #include <stdio.h>
549 #include <stdlib.h>
550 #include <stddef.h>
551 #include <sys/types.h>
552 /* sys/conf.h depends on param.h on FBSD at least */
553 #include <sys/param.h>
554 /* Required for MAXSIG */
555 #include <signal.h>
556 #include <sys/socket.h>
557 #ifdef __APPLE__
558 # define __APPLE_USE_RFC_3542
559 #endif
560 #include <netinet/in.h>
561 #include <sys/time.h>
562 #include <time.h>
563 #include <net/if.h>
564 ])dnl
565
566 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
567 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
568 dnl an additional round for it.
569
570 AC_CHECK_HEADERS([net/if_var.h], [], [], FRR_INCLUDES)
571
572 m4_define([FRR_INCLUDES],
573 FRR_INCLUDES
574 [#if HAVE_NET_IF_VAR_H
575 # include <net/if_var.h>
576 #endif
577 ])dnl
578
579 AC_CHECK_HEADERS([netinet/in_var.h \
580 net/if_dl.h net/netopt.h \
581 inet/nd.h netinet/ip_icmp.h \
582 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
583 [], [], FRR_INCLUDES)
584
585 AC_CHECK_HEADERS([ucontext.h], [], [],
586 [#ifndef __USE_GNU
587 #define __USE_GNU
588 #endif /* __USE_GNU */
589 FRR_INCLUDES
590 ])
591
592 m4_define([UCONTEXT_INCLUDES],
593 [#include <ucontext.h>])dnl
594
595 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
596 [], [], [UCONTEXT_INCLUDES])
597 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
598 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
599 [], [], [UCONTEXT_INCLUDES])],
600 [], [UCONTEXT_INCLUDES])
601 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
602 [], [], [UCONTEXT_INCLUDES])
603
604 m4_define([FRR_INCLUDES],
605 FRR_INCLUDES
606 [
607 #include <sys/un.h>
608 #include <netinet/in_systm.h>
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
615 #if HAVE_NET_NETOPT_H
616 # include <net/netopt.h>
617 #endif
618 #include <net/route.h>
619 #if HAVE_INET_ND_H
620 # include <inet/nd.h>
621 #endif
622 #include <arpa/inet.h>
623 /* Required for IDRP */
624 #if HAVE_NETINET_IP_ICMP_H
625 # include <netinet/ip_icmp.h>
626 #endif
627 ])dnl
628
629 dnl V6 headers are checked below, after we check for v6
630
631 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
632 case "$host" in
633 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
634 opsys=sol2-6
635 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
636 AC_DEFINE(SUNOS_5, 1, SunOS 5)
637 AC_CHECK_LIB(xnet, main)
638 CURSES=-lcurses
639 SOLARIS="solaris"
640 ;;
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]])
647 opsys=sol8
648 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
649 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
650 AC_CHECK_LIB(socket, main)
651 AC_CHECK_LIB(nsl, main)
652 AC_CHECK_LIB(umem, main)
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 ])
657 CURSES=-lcurses
658 SOLARIS="solaris"
659 ;;
660 *-sunos5* | *-solaris2*)
661 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
662 AC_CHECK_LIB(socket, main)
663 AC_CHECK_LIB(nsl, main)
664 CURSES=-lcurses
665 SOLARIS="solaris"
666 ;;
667 *-linux*)
668 opsys=gnu-linux
669 AC_DEFINE(GNU_LINUX,,GNU Linux)
670 ;;
671 *-openbsd*)
672 opsys=openbsd
673 AC_DEFINE(OPEN_BSD,,OpenBSD)
674 ;;
675 esac
676
677 AC_SYS_LARGEFILE
678
679 dnl ---------------------
680 dnl Integrated VTY option
681 dnl ---------------------
682 case "${enable_vtysh}" in
683 "no") VTYSH="";;
684 *) VTYSH="vtysh";
685 AC_DEFINE(VTYSH,,VTY shell)
686 dnl Vtysh uses libreadline, which looks for termcap functions at
687 dnl configure time. We follow readlines search order.
688 dnl The required procedures are in libtermcap on NetBSD, in
689 dnl [TODO] on Linux, and in [TODO] on Solaris.
690 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
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 )
698 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
699 "$LIBREADLINE")
700 if test $ac_cv_lib_readline_main = no; then
701 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
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
707 AC_CHECK_LIB(readline, rl_completion_matches,
708 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
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 ;;
713 esac
714 AC_SUBST(LIBREADLINE)
715 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
716
717 dnl ----------
718 dnl PAM module
719 dnl
720 dnl Quagga detects the PAM library it is built against by checking for a
721 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
722 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
723 dnl openpam.h doesn't do that, although depends on the header too. Hence a
724 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
725 dnl of OpenPAM.
726 dnl ----------
727 if test "$with_libpam" = "yes"; then
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 ],
733 [], FRR_INCLUDES)
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 ],
739 [], FRR_INCLUDES[#include <security/pam_appl.h>])
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
744 fi
745
746 if test "$with_libpam" = "yes"; then
747 dnl took this test from proftpds configure.in and suited to our needs
748 dnl -------------------------------------------------------------------------
749 dnl
750 dnl This next check looks funky due to a linker problem with some versions
751 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
752 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
753 dnl with RedHat 6.2 and Debian 2.2 or better.
754 AC_CHECK_LIB(pam, pam_start,
755 [AC_CHECK_LIB(pam, $pam_conv_func,
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,
764 [AC_CHECK_LIB(pam, $pam_conv_func,
765 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
766 LIBPAM="-lpam -ldl"],
767 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
768 LIBPAM="-lpam -ldl -lpam_misc"]
769 )
770 ],AC_MSG_WARN([*** pam support will not be built ***]),
771 [-ldl])
772 ]
773 )
774 fi
775 AC_SUBST(LIBPAM)
776
777 dnl -------------------------------
778 dnl Endian-ness check
779 dnl -------------------------------
780 AC_WORDS_BIGENDIAN
781
782 dnl -------------------------------
783 dnl check the size in byte of the C
784 dnl -------------------------------
785 dnl AC_CHECK_SIZEOF(char)
786 dnl AC_CHECK_SIZEOF(int)
787 dnl AC_CHECK_SIZEOF(short)
788 dnl AC_CHECK_SIZEOF(long)
789
790 dnl ----------------------------
791 dnl check existance of functions
792 dnl ----------------------------
793 AC_FUNC_FNMATCH
794 AC_FUNC_FORK
795 AC_FUNC_MKTIME
796 AC_FUNC_STAT
797
798 dnl -------------------------------
799 dnl bgpd needs pow() and hence libm
800 dnl -------------------------------
801 TMPLIBS="$LIBS"
802 AC_CHECK_HEADER([math.h],
803 [AC_CHECK_LIB([m], [pow],
804 [LIBM="-lm"
805 LIBS="$LIBS $LIBM"
806 AC_CHECK_FUNCS(pow,[],[LIBM=""])
807 ])
808 ])
809 if test x"$LIBM" = x ; then
810 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
811 fi
812 LIBS="$TMPLIBS"
813 AC_SUBST(LIBM)
814
815 dnl ---------------
816 dnl other functions
817 dnl ---------------
818 AC_CHECK_FUNCS([ \
819 strlcat strlcpy \
820 getgrouplist])
821
822 AC_CHECK_HEADER([asm-generic/unistd.h],
823 [AC_CHECK_DECL(__NR_setns,
824 AC_DEFINE(HAVE_NETNS,, Have netns),,
825 FRR_INCLUDES [#include <asm-generic/unistd.h>
826 ])
827 AC_CHECK_FUNCS(setns)]
828 )
829
830 dnl ------------------------------------
831 dnl Determine routing get and set method
832 dnl ------------------------------------
833 AC_MSG_CHECKING(zebra between kernel interface method)
834 if test x"$opsys" = x"gnu-linux"; then
835 AC_MSG_RESULT(netlink)
836 RT_METHOD=rt_netlink.o
837 KERNEL_METHOD=kernel_netlink.o
838 AC_DEFINE(HAVE_NETLINK,,netlink)
839 netlink=yes
840 AC_CHECK_DECLS([IFLA_INFO_SLAVE_KIND], [], [], [#include <linux/if_link.h>])
841 else
842 AC_MSG_RESULT(Route socket)
843 KERNEL_METHOD="kernel_socket.o"
844 RT_METHOD="rt_socket.o"
845 fi
846 AC_SUBST(RT_METHOD)
847 AC_SUBST(KERNEL_METHOD)
848 AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
849
850 dnl --------------------------
851 dnl Determine IS-IS I/O method
852 dnl --------------------------
853 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
854 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
855 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
856 AC_CHECK_HEADER(net/bpf.h)
857 AC_CHECK_HEADER(sys/dlpi.h)
858 AC_MSG_CHECKING(zebra IS-IS I/O method)
859 if test x"$opsys" = x"gnu-linux"; then
860 AC_MSG_RESULT(pfpacket)
861 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
862 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
863 AC_MSG_RESULT(DLPI)
864 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
865 else
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
874 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
875 else
876 AC_MSG_RESULT(BPF)
877 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
878 fi
879 fi
880 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
881
882 dnl ------------------------------------
883 dnl check for broken CMSG_FIRSTHDR macro
884 dnl ------------------------------------
885 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
886 AC_RUN_IFELSE([AC_LANG_SOURCE([[
887 #ifdef SUNOS_5
888 #define _XPG4_2
889 #define __EXTENSIONS__
890 #endif
891 #include <stdlib.h>
892 #include <sys/types.h>
893 #include <sys/socket.h>
894
895 main()
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);
906 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
907 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
908
909 dnl ------------------------------
910 dnl check kernel route read method
911 dnl ------------------------------
912 AC_CACHE_CHECK([route read method], [frr_cv_rtread_method],
913 [if test "x$netlink" = xyes; then
914 frr_cv_rtread_method="netlink"
915 else
916 for frr_cv_rtread_method in /dev/ip /dev/null;
917 do
918 test x`ls $frr_cv_rtread_method 2>/dev/null` = x"$frr_cv_rtread_method" && break
919 done
920 case $frr_cv_rtread_method in
921 "/dev/ip")
922 case "$host" in
923 *-freebsd*) frr_cv_rtread_method="sysctl";;
924 *) frr_cv_rtread_method="getmsg";;
925 esac;;
926 *)
927 frr_cv_rtread_method="sysctl";;
928 esac
929 fi])
930 RTREAD_METHOD=rtread_${frr_cv_rtread_method}.o
931 AC_SUBST(RTREAD_METHOD)
932
933 dnl -----------------------------
934 dnl check interface lookup method
935 dnl -----------------------------
936 IOCTL_METHOD=ioctl.o
937 AC_MSG_CHECKING(interface looking up method)
938 if test "$netlink" = yes; then
939 AC_MSG_RESULT(netlink)
940 IF_METHOD=if_netlink.o
941 elif test "$opsys" = "sol2-6";then
942 AC_MSG_RESULT(Solaris GIF)
943 IF_METHOD=if_ioctl.o
944 elif test "$opsys" = "sol8";then
945 AC_MSG_RESULT(Solaris GLIF)
946 IF_METHOD=if_ioctl_solaris.o
947 IOCTL_METHOD=ioctl_solaris.o
948 elif test "$opsys" = "openbsd";then
949 AC_MSG_RESULT(openbsd)
950 IF_METHOD=if_ioctl.o
951 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
952 AC_MSG_RESULT(sysctl)
953 IF_METHOD=if_sysctl.o
954 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
955 else
956 AC_MSG_RESULT(ioctl)
957 IF_METHOD=if_ioctl.o
958 fi
959 AC_SUBST(IF_METHOD)
960 AC_SUBST(IOCTL_METHOD)
961
962 dnl ---------------------------------------------------------------
963 dnl figure out how to specify an interface in multicast sockets API
964 dnl ---------------------------------------------------------------
965 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
966
967 AC_CHECK_HEADERS([linux/mroute.h], [], [],[
968 #include <sys/socket.h>
969 #include <netinet/in.h>
970 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
971 #include <linux/types.h>
972 ])
973
974 m4_define([FRR_INCLUDES],
975 FRR_INCLUDES
976 [#if HAVE_LINUX_MROUTE_H
977 # include <linux/mroute.h>
978 #endif
979 ])dnl
980
981 AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
982 #include <sys/socket.h>
983 #include <sys/types.h>
984 #include <netinet/in.h>
985 #include <net/route.h>
986 ])
987
988 m4_define([FRR_INCLUDES],
989 FRR_INCLUDES
990 [#if HAVE_NETINET_IP_MROUTE_H
991 # include <netinet/ip_mroute.h>
992 #endif
993 ])dnl
994
995 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
996 AC_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)
998 return (0);
999 #else
1000 #error No support for BSD struct ip_mreq hack detected
1001 #endif],[AC_MSG_RESULT(yes)
1002 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1003 AC_MSG_RESULT(no))
1004
1005 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1006 AC_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)
1011 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1012 AC_MSG_RESULT(no))
1013
1014 dnl ---------------------------------------------------------------
1015 dnl figure out how to check link-state
1016 dnl ---------------------------------------------------------------
1017 AC_CHECK_HEADER( [net/if_media.h],
1018 [m4_define([LINK_DETECT_INCLUDES],
1019 FRR_INCLUDES
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 [],
1026 FRR_INCLUDES)
1027
1028 dnl ---------------------------------------------------------------
1029 dnl Additional, newer way to check link-state using ifi_link_state.
1030 dnl Not available in all BSD's when ifmediareq available
1031 dnl ---------------------------------------------------------------
1032 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1033 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1034 [], FRR_INCLUDES)
1035
1036 dnl ------------------------
1037 dnl TCP_MD5SIG socket option
1038 dnl ------------------------
1039
1040 AC_CHECK_HEADER([netinet/tcp.h],
1041 [m4_define([MD5_INCLUDES],
1042 FRR_INCLUDES
1043 [#include <netinet/tcp.h>
1044 ])
1045 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1046 [],
1047 FRR_INCLUDES)
1048 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1049 AC_CHECK_HEADER([linux/tcp.h],
1050 [m4_define([MD5_INCLUDES],
1051 FRR_INCLUDES
1052 [#include <linux/tcp.h>
1053 ])
1054 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1055 fi
1056
1057 dnl -----------------------------
1058 dnl check ipforward detect method
1059 dnl -----------------------------
1060 AC_CACHE_CHECK([ipforward method], [frr_cv_ipforward_method],
1061 [if test x$cross_compiling = xyes; then
1062 if test x"$opsys" = x"gnu-linux"; then
1063 frr_cv_ipforward_method=/proc/net/snmp
1064 else
1065 frr_cv_ipforward_method=/dev/ip
1066 fi
1067 else
1068 for frr_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1069 do
1070 test x`ls $frr_cv_ipforward_method 2>/dev/null` = x"$frr_cv_ipforward_method" && break
1071 done
1072 fi
1073 case $frr_cv_ipforward_method in
1074 "/proc/net/snmp") frr_cv_ipforward_method="proc";;
1075 "/dev/ip")
1076 case "$host" in
1077 *-freebsd*) frr_cv_ipforward_method="sysctl";;
1078 *) frr_cv_ipforward_method="solaris";;
1079 esac;;
1080 *) frr_cv_ipforward_method="sysctl";;
1081 esac])
1082 IPFORWARD=ipforward_${frr_cv_ipforward_method}.o
1083 AC_SUBST(IPFORWARD)
1084
1085 dnl ----------------------------------------------------------------------------
1086 dnl figure out if domainname is available in the utsname struct (GNU extension).
1087 dnl ----------------------------------------------------------------------------
1088 AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1089
1090 dnl ----------
1091 dnl IPv6 check
1092 dnl ----------
1093 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1094 dnl ---------
1095 dnl KAME IPv6
1096 dnl ---------
1097 if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1098 AC_DEFINE(KAME,1,KAME IPv6)
1099 AC_MSG_RESULT(KAME)
1100 dnl ------------------------------------
1101 dnl Solaris 9, 10 and potentially higher
1102 dnl ------------------------------------
1103 elif test x"$opsys" = x"sol8"; then
1104 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1105 AC_MSG_RESULT(Solaris IPv6)
1106 dnl ----------
1107 dnl Linux IPv6
1108 dnl ----------
1109 elif test x"$opsys" = x"gnu-linux"; then
1110 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
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)
1117 AC_MSG_RESULT(Linux IPv6)
1118 else
1119 AC_MSG_ERROR([Failed to detect IPv6 stack])
1120 fi
1121
1122 dnl ------------------
1123 dnl IPv6 header checks
1124 dnl ------------------
1125 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
1126 netinet6/in6_var.h netinet6/nd6.h], [], [],
1127 FRR_INCLUDES)
1128
1129 m4_define([FRR_INCLUDES],dnl
1130 FRR_INCLUDES
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
1137 #include <netinet/icmp6.h>
1138 #if HAVE_NETINET6_IN6_VAR_H
1139 # include <netinet6/in6_var.h>
1140 #endif
1141 #if HAVE_NETINET6_ND6_H
1142 # include <netinet6/nd6.h>
1143 #endif
1144 ])dnl
1145
1146 dnl disable doc check
1147 if test "${enable_doc}" = "no";then
1148 DOC=""
1149 else
1150 DOC="doc"
1151 fi
1152
1153 dnl --------------------
1154 dnl Daemon disable check
1155 dnl --------------------
1156 if test "${enable_zebra}" = "no";then
1157 ZEBRA=""
1158 else
1159 ZEBRA="zebra"
1160 fi
1161 AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
1162
1163 if test "${enable_bgpd}" = "no";then
1164 BGPD=""
1165 else
1166 BGPD="bgpd"
1167 fi
1168 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1169
1170 if test "${enable_ripd}" = "no";then
1171 RIPD=""
1172 else
1173 RIPD="ripd"
1174 fi
1175 AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
1176
1177 if test "${enable_ospfd}" = "no";then
1178 OSPFD=""
1179 else
1180 OSPFD="ospfd"
1181 fi
1182 AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
1183
1184 if test "${enable_ldpd}" = "no";then
1185 LDPD=""
1186 else
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
1195 LDPD="ldpd"
1196 AC_DEFINE(HAVE_LDPD, 1, ldpd)
1197 fi
1198 AM_CONDITIONAL(LDPD, test "x$LDPD" = "xldpd")
1199
1200 NHRPD=""
1201 if test "$opsys" = "gnu-linux"; then
1202 if test "${enable_nhrpd}" != "no"; then
1203 NHRPD="nhrpd"
1204 fi
1205 else
1206 if test "${enable_nhrpd}" = "yes"; then
1207 AC_MSG_ERROR([nhrpd requires kernel APIs that are only present on Linux.])
1208 fi
1209 fi
1210 AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1211
1212 if test "${enable_watchfrr}" = "no";then
1213 WATCHFRR=""
1214 else
1215 WATCHFRR="watchfrr"
1216 fi
1217 AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
1218
1219 OSPFCLIENT=""
1220 if test "${enable_ospfapi}" != "no";then
1221 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1222
1223 if test "${enable_ospfclient}" != "no";then
1224 OSPFCLIENT="ospfclient"
1225 fi
1226 fi
1227
1228 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1229
1230 case "${enable_ripngd}" in
1231 "no" ) RIPNGD="";;
1232 * ) RIPNGD="ripngd";;
1233 esac
1234 AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
1235
1236 case "${enable_ospf6d}" in
1237 "no" ) OSPF6D="";;
1238 * ) OSPF6D="ospf6d";;
1239 esac
1240 AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
1241
1242 case "${enable_isisd}" in
1243 "no" ) ISISD="";;
1244 * ) ISISD="isisd";;
1245 esac
1246 AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
1247
1248 case "${enable_pimd}" in
1249 "no" ) PIMD="";;
1250 * ) PIMD="pimd";;
1251 esac
1252 AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
1253
1254 if test "${enable_bgp_announce}" = "no";then
1255 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1256 else
1257 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1258 fi
1259
1260 if test "${with_rfp_path}" = "yes" || test x"${with_rfp_path}" = x""; then
1261 with_rfp_path="bgpd/rfp-example"
1262 fi
1263 if test "${with_rfp_path}" != "no"; then
1264 VNC_RFP_PATH="${with_rfp_path}"
1265 AC_SUBST(VNC_RFP_PATH)
1266 fi
1267
1268 if test "${enable_bgp_vnc}" != "no";then
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"
1273 else
1274 RFPTEST=
1275 LIBRFP=
1276 RFPINC="bgpd/rfp-example/librfp"
1277 fi
1278 # set
1279 AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
1280
1281 AC_SUBST(DOC)
1282 AC_SUBST(ZEBRA)
1283 AC_SUBST(RFPTEST)
1284 AC_SUBST(LIBRFP)
1285 AC_SUBST(RFPINC)
1286 AC_SUBST(BGPD)
1287 AC_SUBST(RIPD)
1288 AC_SUBST(RIPNGD)
1289 AC_SUBST(OSPFD)
1290 AC_SUBST(OSPF6D)
1291 AC_SUBST(LDPD)
1292 AC_SUBST(NHRPD)
1293 AC_SUBST(WATCHFRR)
1294 AC_SUBST(ISISD)
1295 AC_SUBST(PIMD)
1296 AC_SUBST(SOLARIS)
1297 AC_SUBST(VTYSH)
1298 AC_SUBST(CURSES)
1299 AC_SUBST(OSPFCLIENT)
1300 AC_SUBST(OSPFAPI)
1301 AC_CHECK_LIB(crypt, crypt)
1302 AC_CHECK_LIB(resolv, res_init)
1303
1304 dnl ---------------------------
1305 dnl check system has PCRE regexp
1306 dnl ---------------------------
1307 if 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 ***]) ])
1310 fi
1311 AC_SUBST(HAVE_LIBPCREPOSIX)
1312
1313 dnl ------------------
1314 dnl check C-Ares library
1315 dnl ------------------
1316 if test "${NHRPD}" != ""; then
1317 PKG_CHECK_MODULES([CARES], [libcares])
1318 fi
1319
1320
1321 dnl ------------------
1322 dnl check Net-SNMP library
1323 dnl ------------------
1324 if test "${enable_snmp}" != ""; then
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
1329 SNMP_LIBS="`${NETSNMP_CONFIG} --agent-libs`"
1330 SNMP_CFLAGS="`${NETSNMP_CONFIG} --base-cflags`"
1331 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1332 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1333 int 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])])
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)
1356 fi
1357 AM_CONDITIONAL([SNMP], [test "x${SNMP_METHOD}" != "x"])
1358 AC_SUBST(SNMP_LIBS)
1359 AC_SUBST(SNMP_CFLAGS)
1360
1361 dnl ---------------
1362 dnl dlopen & dlinfo
1363 dnl ---------------
1364 AC_SEARCH_LIBS(dlopen, [dl dld], [], [
1365 AC_MSG_ERROR([unable to find the dlopen()])
1366 ])
1367
1368 AC_CHECK_HEADERS([link.h])
1369
1370 AC_MSG_CHECKING([for dlinfo(RTLD_DI_ORIGIN)])
1371 AC_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
1387 AC_MSG_CHECKING([for dlinfo(RTLD_DI_LINKMAP)])
1388 AC_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
1404
1405 dnl ---------------------------
1406 dnl sockaddr and netinet checks
1407 dnl ---------------------------
1408 AC_CHECK_TYPES([
1409 struct sockaddr_dl,
1410 struct vifctl, struct mfcctl, struct sioc_sg_req,
1411 vifi_t, struct sioc_vif_req, struct igmpmsg,
1412 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1413 struct nd_opt_adv_interval, struct rt_addrinfo,
1414 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1415 [], [], FRR_INCLUDES)
1416
1417 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1418 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1419 struct sockaddr_dl.sdl_len,
1420 struct if6_aliasreq.ifra_lifetime,
1421 struct nd_opt_adv_interval.nd_opt_ai_type],
1422 [], [], FRR_INCLUDES)
1423
1424 dnl ---------------------------
1425 dnl IRDP/pktinfo/icmphdr checks
1426 dnl ---------------------------
1427 AC_CHECK_TYPES([struct in_pktinfo],
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!'])
1434 fi], [FRR_INCLUDES])],
1435 [if test "${enable_irdp}" = "yes"; then
1436 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1437 fi], [FRR_INCLUDES])
1438
1439 dnl -----------------------
1440 dnl checking for IP_PKTINFO
1441 dnl -----------------------
1442 AC_MSG_CHECKING(for IP_PKTINFO)
1443 AC_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
1452 dnl ---------------------------
1453 dnl checking for IP_RECVDSTADDR
1454 dnl ---------------------------
1455 AC_MSG_CHECKING(for IP_RECVDSTADDR)
1456 AC_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
1465 dnl ----------------------
1466 dnl checking for IP_RECVIF
1467 dnl ----------------------
1468 AC_MSG_CHECKING(for IP_RECVIF)
1469 AC_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
1478 dnl ----------------------
1479 dnl checking for SO_BINDANY
1480 dnl ----------------------
1481 AC_MSG_CHECKING(for SO_BINDANY)
1482 AC_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
1491 dnl ----------------------
1492 dnl checking for IP_FREEBIND
1493 dnl ----------------------
1494 AC_MSG_CHECKING(for IP_FREEBIND)
1495 AC_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
1504 dnl --------------------------------------
1505 dnl checking for clock_time monotonic struct and call
1506 dnl --------------------------------------
1507 AC_CHECK_DECL(CLOCK_MONOTONIC,
1508 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1509 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1510 ], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
1511
1512 dnl --------------------------------------
1513 dnl checking for flex and bison
1514 dnl --------------------------------------
1515
1516 AM_PROG_LEX
1517 AC_MSG_CHECKING(version of flex)
1518 quagga_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
1519 quagga_ac_flex_version="${quagga_ac_flex_version##* }"
1520 AC_MSG_RESULT([$quagga_ac_flex_version])
1521 AX_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 ])
1531
1532 AC_PROG_YACC
1533 dnl thanks GNU bison for this b*llshit...
1534 AC_MSG_CHECKING(version of bison)
1535 quagga_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
1536 quagga_ac_bison_version="${quagga_ac_bison_version##* }"
1537 quagga_ac_bison_missing="false"
1538 case "x${quagga_ac_bison_version}" in
1539 x2.7*)
1540 BISON_OPENBRACE='"'
1541 BISON_CLOSEBRACE='"'
1542 BISON_VERBOSE=''
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='}'
1558 BISON_VERBOSE='-Dparse.error=verbose'
1559 AC_MSG_RESULT([$quagga_ac_bison_version - 3.0 or newer])
1560 ;;
1561 esac
1562 AC_SUBST(BISON_OPENBRACE)
1563 AC_SUBST(BISON_CLOSEBRACE)
1564 AC_SUBST(BISON_VERBOSE)
1565
1566 if $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
1573 fi
1574
1575 dnl -------------------
1576 dnl capabilities checks
1577 dnl -------------------
1578 if 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)
1583 frr_ac_keepcaps="yes"],
1584 AC_MSG_RESULT(no)
1585 )
1586 if test x"${frr_ac_keepcaps}" = x"yes"; then
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"
1593 frr_ac_lcaps="yes"]
1594 )
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)
1601 frr_ac_scaps="yes"],
1602 AC_MSG_RESULT(no)
1603 )
1604 ]
1605 )
1606 fi
1607 if test x"${frr_ac_scaps}" = x"yes" \
1608 -o x"${frr_ac_lcaps}" = x"yes"; then
1609 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1610 fi
1611 fi
1612 AC_SUBST(LIBCAP)
1613
1614 dnl ---------------------------
1615 dnl check for glibc 'backtrace'
1616 dnl ---------------------------
1617 if 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])
1625 ])
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
1631 fi
1632
1633 dnl -----------------------------------------
1634 dnl check for malloc mallinfo struct and call
1635 dnl this must try and link using LIBS, in
1636 dnl order to check no alternative allocator
1637 dnl has been specified, which might not provide
1638 dnl mallinfo, e.g. such as Umem on Solaris.
1639 dnl -----------------------------------------
1640 AC_CHECK_HEADER([malloc.h],
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 )
1648 ], [], FRR_INCLUDES)
1649
1650 dnl ----------
1651 dnl configure date
1652 dnl ----------
1653 CONFDATE=`date '+%Y%m%d'`
1654 AC_SUBST(CONFDATE)
1655
1656 dnl ------------------------------
1657 dnl set paths for state directory
1658 dnl ------------------------------
1659 AC_MSG_CHECKING(directory to use for state file)
1660 if test "${prefix}" = "NONE"; then
1661 frr_statedir_prefix="";
1662 else
1663 frr_statedir_prefix=${prefix}
1664 fi
1665 if test "${localstatedir}" = '${prefix}/var'; then
1666 for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
1667 ${frr_statedir_prefix}/var/adm dnl
1668 ${frr_statedir_prefix}/etc dnl
1669 /var/run dnl
1670 /var/adm dnl
1671 /etc dnl
1672 /dev/null;
1673 do
1674 test -d $FRR_STATE_DIR && break
1675 done
1676 frr_statedir=$FRR_STATE_DIR
1677 else
1678 frr_statedir=${localstatedir}
1679 fi
1680 if test $frr_statedir = "/dev/null"; then
1681 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1682 fi
1683 AC_MSG_RESULT(${frr_statedir})
1684 AC_SUBST(frr_statedir)
1685
1686 AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
1687 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
1688 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
1689
1690 dnl autoconf does this, but it does it too late...
1691 test "x$prefix" = xNONE && prefix=$ac_default_prefix
1692 test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
1693
1694 dnl get the full path, recursing through variables...
1695 vtysh_bin="$bindir/vtysh"
1696 for I in 1 2 3 4 5 6 7 8 9 10; do
1697 eval vtysh_bin="\"$vtysh_bin\""
1698 done
1699 AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
1700
1701 CFG_SYSCONF="$sysconfdir"
1702 CFG_SBIN="$sbindir"
1703 CFG_STATE="$frr_statedir"
1704 CFG_MODULE="$moduledir"
1705 for 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\""
1709 eval CFG_MODULE="\"$CFG_MODULE\""
1710 done
1711 AC_SUBST(CFG_SYSCONF)
1712 AC_SUBST(CFG_SBIN)
1713 AC_SUBST(CFG_STATE)
1714 AC_SUBST(CFG_MODULE)
1715 AC_DEFINE_UNQUOTED(MODULE_PATH, "$CFG_MODULE", path to modules)
1716
1717 dnl ---------------------------
1718 dnl Check htonl works correctly
1719 dnl ---------------------------
1720 AC_MSG_CHECKING(for working htonl)
1721 AC_CACHE_VAL(ac_cv_htonl_works,
1722 [AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
1723 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1724 ]
1725 )
1726 AC_MSG_RESULT($ac_cv_htonl_works)
1727
1728 AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
1729 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchfrr/Makefile
1730 ospf6d/Makefile ldpd/Makefile isisd/Makefile vtysh/Makefile
1731 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
1732 pimd/Makefile
1733 nhrpd/Makefile
1734 redhat/Makefile
1735 tools/Makefile
1736 cumulus/Makefile
1737 pkgsrc/Makefile
1738 fpm/Makefile
1739 redhat/frr.spec
1740 snapcraft/Makefile
1741 snapcraft/snapcraft.yaml
1742 lib/version.h
1743 tests/lib/cli/test_cli.refout
1744 doc/defines.texi
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
1754 doc/nhrpd.8
1755 doc/vtysh.1
1756 doc/watchfrr.8
1757 doc/zebra.8
1758 doc/frr.1
1759 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1760 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1761
1762 if test "${enable_bgp_vnc}" != "no"; then
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
1768 fi
1769
1770 AC_CONFIG_FILES([solaris/Makefile])
1771
1772 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1773
1774 ## Hack, but working solution to avoid rebuilding of quagga.info.
1775 ## It's already in CVS until texinfo 4.7 is more common.
1776 AC_OUTPUT
1777
1778 echo "
1779 FRRouting configuration
1780 ------------------------------
1781 FRR version : ${PACKAGE_VERSION}
1782 host operating system : ${host_os}
1783 source code location : ${srcdir}
1784 compiler : ${CC}
1785 compiler flags : ${CFLAGS}
1786 make : ${MAKE-make}
1787 linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1788 state file directory : ${frr_statedir}
1789 config file directory : `eval echo \`echo ${sysconfdir}\``
1790 example directory : `eval echo \`echo ${exampledir}\``
1791 module directory : ${CFG_MODULE}
1792 user to run as : ${enable_user}
1793 group to run as : ${enable_group}
1794 group for vty sockets : ${enable_vty_group}
1795 config file mask : ${enable_configfile_mask}
1796 log file mask : ${enable_logfile_mask}
1797 zebra protobuf enabled : ${have_protobuf:-no}
1798
1799 The above user and group must have read/write access to the state file
1800 directory and to the config files in the config file directory."