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