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