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