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