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