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