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