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