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