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