]> git.proxmox.com Git - mirror_frr.git/blob - configure.ac
Merge pull request #3286 from donaldsharp/late_registration
[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, 6.1-dev, [https://github.com/frrouting/frr/issues])
11 PACKAGE_URL="https://frrouting.org/"
12 AC_SUBST(PACKAGE_URL)
13 PACKAGE_FULLNAME="FRRouting"
14 AC_SUBST(PACKAGE_FULLNAME)
15
16 CONFIG_ARGS="$ac_configure_args"
17 AC_SUBST(CONFIG_ARGS)
18
19 AC_CONFIG_SRCDIR(lib/zebra.h)
20 AC_CONFIG_MACRO_DIR([m4])
21
22 dnl -----------------------------------
23 dnl Get hostname and other information.
24 dnl -----------------------------------
25 AC_CANONICAL_BUILD()
26 AC_CANONICAL_HOST()
27
28 AS_IF([test "$host" != "$build"], [
29 if test "$srcdir" = "."; then
30 AC_MSG_ERROR([cross-compilation is only possible with builddir separate from srcdir. create a separate directory and run as .../path-to-frr/configure.])
31 fi
32 test -d hosttools || mkdir hosttools
33 abssrc="`cd \"${srcdir}\"; pwd`"
34
35 AC_MSG_NOTICE([...])
36 AC_MSG_NOTICE([... cross-compilation: creating hosttools directory and self-configuring for build platform tools])
37 AC_MSG_NOTICE([... use HOST_CPPFLAGS / HOST_CFLAGS / HOST_LDFLAGS if neccessary])
38 AC_MSG_NOTICE([...])
39
40 ( CPPFLAGS="$HOST_CPPFLAGS"; \
41 CFLAGS="$HOST_CFLAGS"; \
42 LDFLAGS="$HOST_LDFLAGS"; \
43 cd hosttools; "${abssrc}/configure" "--host=$build" "--build=$build" "--enable-clippy-only" "--disable-nhrpd" "--disable-vtysh"; )
44
45 AC_MSG_NOTICE([...])
46 AC_MSG_NOTICE([... cross-compilation: finished self-configuring for build platform tools])
47 AC_MSG_NOTICE([...])
48
49 build_clippy="false"
50 HOSTTOOLS="hosttools/"
51 ], [
52 build_clippy="true"
53 HOSTTOOLS=""
54 ])
55 AC_SUBST(HOSTTOOLS)
56 AM_CONDITIONAL([BUILD_CLIPPY], [$build_clippy])
57
58 # Disable portability warnings -- our automake code (in particular
59 # common.am) uses some constructs specific to gmake.
60 AM_INIT_AUTOMAKE([1.12 -Wno-portability foreign])
61 m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
62 AM_SILENT_RULES([yes])
63 AC_CONFIG_HEADERS(config.h)
64
65 AC_PATH_PROG(PERL, perl)
66 PKG_PROG_PKG_CONFIG
67
68 dnl default is to match previous behavior
69 exampledir=${sysconfdir}
70 AC_ARG_ENABLE([exampledir],
71 AS_HELP_STRING([--enable-exampledir],
72 [specify alternate directory for examples]),
73 exampledir="$enableval",)
74 dnl XXX add --exampledir to autoconf standard directory list somehow
75 AC_SUBST(exampledir)
76
77 dnl default is to match previous behavior
78 pkgsrcrcdir=""
79 AC_ARG_ENABLE([pkgsrcrcdir],
80 AS_HELP_STRING([--enable-pkgsrcrcdir],
81 [specify directory for rc.d scripts]),
82 pkgsrcrcdir="$enableval",)
83 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
84 AC_SUBST(pkgsrcrcdir)
85 AM_CONDITIONAL([PKGSRC], [test "x$pkgsrcrcdir" != "x"])
86
87 AC_ARG_WITH([moduledir], [AS_HELP_STRING([--with-moduledir=DIR], [module directory (${libdir}/frr/modules)])], [
88 moduledir="$withval"
89 ], [
90 moduledir="\${libdir}/frr/modules"
91 ])
92 AC_SUBST([moduledir], [$moduledir])
93
94
95 AC_ARG_WITH([yangmodelsdir], [AS_HELP_STRING([--with-yangmodelsdir=DIR], [yang models directory (${datarootdir}/yang)])], [
96 yangmodelsdir="$withval"
97 ], [
98 yangmodelsdir="\${datarootdir}/yang"
99 ])
100 AC_SUBST(yangmodelsdir)
101
102 AC_ARG_WITH([libyang_pluginsdir], [AS_HELP_STRING([--with-libyang-pluginsdir=DIR], [yangmodule plugins directory (${libdir}/frr/libyang_plugins)])], [
103 libyang_pluginsdir="$withval"
104 ], [
105 libyang_pluginsdir="\${libdir}/frr/libyang_plugins"
106 ])
107 AC_SUBST(libyang_pluginsdir)
108
109 AC_ARG_ENABLE(tcmalloc,
110 AS_HELP_STRING([--enable-tcmalloc], [Turn on tcmalloc]),
111 [case "${enableval}" in
112 yes) tcmalloc_enabled=true
113 LIBS="$LIBS -ltcmalloc_minimal"
114 ;;
115 no) tcmalloc_enabled=false ;;
116 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
117 esac],[tcmalloc_enabled=false])
118
119
120 dnl Thanks autoconf, but we don't want a default -g -O2. We have our own
121 dnl flag determination logic.
122 CFLAGS="${CFLAGS:-}"
123
124 dnl --------------------
125 dnl Check CC and friends
126 dnl --------------------
127 dnl note orig_cflags is also used further down
128 orig_cflags="$CFLAGS"
129 AC_LANG([C])
130 AC_PROG_CC
131 AC_PROG_CPP
132 AM_PROG_CC_C_O
133 dnl remove autoconf default "-g -O2"
134 CFLAGS="$orig_cflags"
135 AC_PROG_CC_C99
136 dnl NB: see C11 below
137
138 AC_PROG_EGREP
139 PKG_PROG_PKG_CONFIG
140
141 dnl autoconf 2.59 appears not to support AC_PROG_SED
142 dnl AC_PROG_SED
143 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
144
145 dnl try and enable CFLAGS that are useful for FRR
146 dnl - specifically, options to control warnings
147
148 AC_USE_SYSTEM_EXTENSIONS
149 AC_DEFUN([AC_C_FLAG], [{
150 m4_pushdef([cachename],[m4_translit([frr_cv_$1],[ =-],[___])])
151 AC_CACHE_CHECK([[whether $CC supports $1]], cachename, [
152 AC_LANG_PUSH(C)
153 ac_c_flag_save="$CFLAGS"
154 CFLAGS="$CFLAGS $1"
155 AC_COMPILE_IFELSE(
156 [AC_LANG_PROGRAM([[]])],
157 [
158 cachename=yes
159 ], [
160 cachename=no
161 ])
162 CFLAGS="$ac_c_flag_save"
163 AC_LANG_POP(C)
164 ])
165 if test "${cachename}" = yes; then
166 m4_if([$3], [], [CFLAGS="$CFLAGS $1"], [$3])
167 else
168 :
169 $2
170 fi
171 m4_popdef([cachename])
172 }])
173
174 AC_DEFUN([AC_LINK_IFELSE_FLAGS], [{
175 AC_LANG_PUSH(C)
176 ac_cflags_save="$CFLAGS"
177 ac_libs_save="$LIBS"
178 CFLAGS="$CFLAGS $1"
179 LIBS="$LIBS $2"
180 AC_LINK_IFELSE(
181 [$3],
182 [
183 AC_MSG_RESULT([yes])
184 CFLAGS="$ac_cflags_save"
185 LIBS="$ac_libs_save"
186 $5
187 ], [
188 AC_MSG_RESULT([no])
189 CFLAGS="$ac_cflags_save"
190 LIBS="$ac_libs_save"
191 $4
192 ])
193 AC_LANG_POP(C)
194 }])
195
196 dnl ICC won't bail on unknown options without -diag-error 10006
197 dnl need to do this first so we get useful results for the other options
198 AC_C_FLAG([-diag-error 10006])
199
200 dnl AC_PROG_CC_C99 may change CC to include -std=gnu99 or something
201 ac_cc="$CC"
202 CC="${CC% -std=gnu99}"
203 CC="${CC% -std=c99}"
204
205 AC_C_FLAG([-std=gnu11], [CC="$ac_cc"], [CC="$CC -std=gnu11"])
206
207 dnl if the user has specified any CFLAGS, override our settings
208 if test "x${enable_gcov}" = "xyes"; then
209 if test "z$orig_cflags" = "z"; then
210 AC_C_FLAG([-coverage])
211 AC_C_FLAG([-O0])
212 fi
213
214 LDFLAGS="${LDFLAGS} -lgcov"
215 elif test "x${enable_dev_build}" = "xyes"; then
216 AC_DEFINE(DEV_BUILD,,Build for development)
217 if test "z$orig_cflags" = "z"; then
218 AC_C_FLAG([-g3])
219 AC_C_FLAG([-O0])
220 fi
221 if test "x${enable_lua}" = "xyes"; then
222 AC_CHECK_LIB([lua], [lua_newstate],
223 [LIBS="$LIBS -llua"])
224 AC_DEFINE(HAVE_LUA,,Lua enabled for development)
225 fi
226 else
227 if test "x${enable_lua}" = "xyes"; then
228 AC_MSG_ERROR([Lua is not meant to be built/used outside of development at this time])
229 fi
230 if test "z$orig_cflags" = "z"; then
231 AC_C_FLAG([-g])
232 AC_C_FLAG([-Os], [
233 AC_C_FLAG([-O2])
234 ])
235 fi
236 fi
237 AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
238
239 dnl always want these CFLAGS
240 AC_C_FLAG([-fno-omit-frame-pointer])
241 AC_C_FLAG([-funwind-tables])
242 AC_C_FLAG([-Wall])
243 AC_C_FLAG([-Wextra])
244 AC_C_FLAG([-Wmissing-prototypes])
245 AC_C_FLAG([-Wmissing-declarations])
246 AC_C_FLAG([-Wpointer-arith])
247 AC_C_FLAG([-Wbad-function-cast])
248 AC_C_FLAG([-Wwrite-strings])
249 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
250 AC_C_FLAG([-Wcast-qual])
251 AC_C_FLAG([-Wstrict-prototypes])
252 AC_C_FLAG([-Wmissing-noreturn])
253 AC_C_FLAG([-Wmissing-format-attribute])
254 AC_C_FLAG([-Wunreachable-code])
255 AC_C_FLAG([-Wpacked])
256 AC_C_FLAG([-Wpadded])
257 AC_C_FLAG([-Wshadow])
258 else
259 AC_C_FLAG([-Wno-unused-result])
260 fi
261 AC_C_FLAG([-Wno-unused-parameter])
262 AC_C_FLAG([-Wno-missing-field-initializers])
263
264 dnl ICC emits a broken warning for const char *x = a ? "b" : "c";
265 dnl for some reason the string consts get 'promoted' to char *,
266 dnl triggering a const to non-const conversion warning.
267 AC_C_FLAG([-diag-disable 3179])
268
269 if test x"${enable_werror}" = x"yes" ; then
270 WERROR="-Werror"
271 fi
272 AC_SUBST(WERROR)
273
274 SAN_FLAGS=""
275 if test "$enable_address_sanitizer" = "yes"; then
276 AC_C_FLAG([-fsanitize=address], [
277 AC_MSG_ERROR([$CC does not support Address Sanitizer.])
278 ], [
279 SAN_FLAGS="$SAN_FLAGS -fsanitize=address"
280 ])
281 fi
282 if test "$enable_thread_sanitizer" = "yes"; then
283 AC_C_FLAG([-fsanitize=thread], [
284 AC_MSG_ERROR([$CC does not support Thread Sanitizer.])
285 ], [
286 SAN_FLAGS="$SAN_FLAGS -fsanitize=thread"
287 ])
288 fi
289 if test "$enable_memory_sanitizer" = "yes"; then
290 AC_C_FLAG([-fsanitize=thread -fPIE -pie], [
291 AC_MSG_ERROR([$CC does not support Thread Sanitizer.])
292 ], [
293 SAN_FLAGS="-fsanitize=memory -fPIE -pie"
294 ])
295 fi
296 AC_SUBST([SAN_FLAGS])
297
298 dnl ----------
299 dnl Essentials
300 dnl ----------
301
302 AX_PTHREAD([
303 CC="$PTHREAD_CC"
304 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
305 LIBS="$PTHREAD_LIBS $LIBS"
306 ], [
307 AC_MSG_FAILURE([This FRR version needs pthreads])
308 ])
309
310 AC_SEARCH_LIBS([pthread_condattr_setclock], [],
311 [frr_cv_pthread_condattr_setclock=yes],
312 [frr_cv_pthread_condattr_setclock=no])
313 if test "$frr_cv_pthread_condattr_setclock" = yes; then
314 AC_DEFINE(HAVE_PTHREAD_CONDATTR_SETCLOCK, 1, [Have pthread.h pthread_condattr_setclock])
315 fi
316
317 dnl --------------
318 dnl Check programs
319 dnl --------------
320 AC_PROG_INSTALL
321 AC_PROG_LN_S
322 AC_PROG_MAKE_SET
323 AC_CHECK_TOOL(AR, ar)
324
325 dnl -------
326 dnl libtool
327 dnl -------
328 AC_ARG_ENABLE(static-bin,
329 AS_HELP_STRING([--enable-static-bin], [link binaries statically]))
330 LT_INIT
331 _LT_CONFIG_LIBTOOL([
332 patch -N -i "${srcdir}/m4/libtool-whole-archive.patch" libtool >&AS_MESSAGE_LOG_FD || \
333 AC_MSG_WARN([Could not patch libtool for static linking support. Loading modules into a statically linked daemon will fail.])
334 ])
335 if test "$enable_static_bin" = "yes"; then
336 AC_LDFLAGS="-static"
337 fi
338 AC_SUBST(AC_LDFLAGS)
339 AM_CONDITIONAL([STATIC_BIN], [test "x$enable_static_bin" = "xyes"])
340
341 dnl $AR and $RANLIB are set by LT_INIT above
342 AC_MSG_CHECKING([whether $AR supports D option])
343 if $AR crD conftest.a; then
344 AC_MSG_RESULT([yes])
345 dnl ARFLAGS is for automake, AR_FLAGS for libtool m-(
346 ARFLAGS="crD"
347 AR_FLAGS="crD"
348 else
349 AC_MSG_RESULT([no])
350 ARFLAGS="cru"
351 AR_FLAGS="cru"
352 fi
353 AC_SUBST(ARFLAGS)
354 AC_SUBST(AR_FLAGS)
355
356 AC_MSG_CHECKING([whether $RANLIB supports D option])
357 if $RANLIB -D conftest.a; then
358 AC_MSG_RESULT([yes])
359 RANLIB="$RANLIB -D"
360 else
361 AC_MSG_RESULT([no])
362 fi
363 AC_SUBST(RANLIB)
364
365 test -f conftest.a && rm conftest.a
366
367 dnl ----------------------
368 dnl Packages configuration
369 dnl ----------------------
370 if test -f config.version; then
371 . ./config.version
372 elif test -f "${srcdir}/config.version"; then
373 . "${srcdir}/config.version"
374 fi
375 AC_ARG_WITH(pkg-extra-version,
376 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]), [
377 if test "$withval" = "no"; then
378 EXTRAVERSION=
379 else
380 EXTRAVERSION=$withval
381 fi
382 ], [])
383 AC_ARG_WITH(pkg-git-version,
384 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
385 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
386 AC_ARG_WITH(vtysh_pager,
387 AS_HELP_STRING([--with-vtysh-pager=PAGER], [control what pager is compiled in as default]),
388 VTYSH_PAGER=$withval, VTYSH_PAGER="more")
389 AC_ARG_ENABLE(vtysh,
390 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for FRR]))
391 AC_ARG_ENABLE(doc,
392 AS_HELP_STRING([--disable-doc], [do not build docs]))
393 AC_ARG_ENABLE(doc-html,
394 AS_HELP_STRING([--enable-doc-html], [build HTML docs]))
395 AC_ARG_ENABLE(zebra,
396 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
397 AC_ARG_ENABLE(bgpd,
398 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
399 AC_ARG_ENABLE(ripd,
400 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
401 AC_ARG_ENABLE(ripngd,
402 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
403 AC_ARG_ENABLE(ospfd,
404 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
405 AC_ARG_ENABLE(ospf6d,
406 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
407 AC_ARG_ENABLE(ldpd,
408 AS_HELP_STRING([--disable-ldpd], [do not build ldpd]))
409 AC_ARG_ENABLE(nhrpd,
410 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
411 AC_ARG_ENABLE(eigrpd,
412 AS_HELP_STRING([--disable-eigrpd], [do not build eigrpd]))
413 AC_ARG_ENABLE(babeld,
414 AS_HELP_STRING([--disable-babeld], [do not build babeld]))
415 AC_ARG_ENABLE(watchfrr,
416 AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
417 AC_ARG_ENABLE(isisd,
418 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
419 AC_ARG_ENABLE(pimd,
420 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
421 AC_ARG_ENABLE(pbrd,
422 AS_HELP_STRING([--disable-pbrd], [do not build pbrd]))
423 AC_ARG_ENABLE(sharpd,
424 AS_HELP_STRING([--enable-sharpd], [build sharpd]))
425 AC_ARG_ENABLE(staticd,
426 AS_HELP_STRING([--disable-staticd], [do not build staticd]))
427 AC_ARG_ENABLE(fabricd,
428 AS_HELP_STRING([--disable-fabricd], [do not build fabricd]))
429 AC_ARG_ENABLE(bgp-announce,
430 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
431 AC_ARG_ENABLE(bgp-vnc,
432 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
433 AC_ARG_ENABLE(snmp,
434 AS_HELP_STRING([--enable-snmp], [enable SNMP support for agentx]))
435 AC_ARG_ENABLE(config_rollbacks,
436 AS_HELP_STRING([--enable-config-rollbacks], [enable configuration rollbacks (requires sqlite3)]))
437 AC_ARG_ENABLE(confd,
438 AS_HELP_STRING([--enable-confd=ARG], [enable confd integration]))
439 AC_ARG_ENABLE(sysrepo,
440 AS_HELP_STRING([--enable-sysrepo], [enable sysrepo integration]))
441 AC_ARG_ENABLE(zeromq,
442 AS_HELP_STRING([--enable-zeromq], [enable ZeroMQ handler (libfrrzmq)]))
443 AC_ARG_WITH(libpam,
444 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
445 AC_ARG_ENABLE(ospfapi,
446 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
447 AC_ARG_ENABLE(ospfclient,
448 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
449 (this is the default if --disable-ospfapi is set)]))
450 AC_ARG_ENABLE(multipath,
451 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
452 AC_ARG_ENABLE(user,
453 AS_HELP_STRING([--enable-user=USER], [user to run FRR suite as (default frr)]))
454 AC_ARG_ENABLE(group,
455 AS_HELP_STRING([--enable-group=GROUP], [group to run FRR suite as (default frr)]))
456 AC_ARG_ENABLE(vty_group,
457 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
458 AC_ARG_ENABLE(configfile_mask,
459 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
460 AC_ARG_ENABLE(logfile_mask,
461 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
462 AC_ARG_ENABLE(shell_access,
463 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
464 AC_ARG_ENABLE(realms,
465 AS_HELP_STRING([--enable-realms], [enable REALMS support under Linux]))
466 AC_ARG_ENABLE(rtadv,
467 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
468 AC_ARG_ENABLE(irdp,
469 AS_HELP_STRING([--disable-irdp], [enable IRDP server support in zebra (default if supported)]))
470 AC_ARG_ENABLE(capabilities,
471 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
472 AC_ARG_ENABLE(rusage,
473 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
474 AC_ARG_ENABLE(gcc_ultra_verbose,
475 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
476 AC_ARG_ENABLE(backtrace,
477 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
478 AC_ARG_ENABLE(time-check,
479 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
480 AC_ARG_ENABLE(pcreposix,
481 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
482 AC_ARG_ENABLE(fpm,
483 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
484 AC_ARG_ENABLE(systemd,
485 AS_HELP_STRING([--enable-systemd], [enable Systemd support]))
486 AC_ARG_ENABLE(werror,
487 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
488 AC_ARG_ENABLE(cumulus,
489 AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions]))
490 AC_ARG_ENABLE(datacenter,
491 AS_HELP_STRING([--enable-datacenter], [enable Compilation for Data Center Extensions]))
492 AC_ARG_ENABLE(fuzzing,
493 AS_HELP_STRING([--enable-fuzzing], [enable ability to fuzz various parts of FRR]))
494 AC_ARG_ENABLE(netlink_fuzzing,
495 AS_HELP_STRING([--enable-netlink-fuzzing], [enable ability to fuzz netlink listening socket in zebra]))
496 AC_ARG_ENABLE(rr-semantics,
497 AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics]))
498 AC_ARG_ENABLE([protobuf],
499 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
500 AC_ARG_ENABLE([oldvpn_commands],
501 AS_HELP_STRING([--enable-oldvpn-commands], [Keep old vpn commands]))
502 AC_ARG_ENABLE(rpki,
503 AS_HELP_STRING([--enable-rpki], [enable RPKI prefix validation support]))
504 AC_ARG_ENABLE([clippy-only],
505 AS_HELP_STRING([--enable-clippy-only], [Only build clippy]))
506 AC_ARG_ENABLE([numeric_version],
507 AS_HELP_STRING([--enable-numeric-version], [Only numeric digits allowed in version (for Alpine)]))
508 AC_ARG_ENABLE([gcov],
509 AS_HELP_STRING([--enable-gcov], [Add code coverage information]))
510 AC_ARG_ENABLE(bfdd,
511 AS_HELP_STRING([--disable-bfdd], [do not build bfdd]))
512 AC_ARG_ENABLE([address-sanitizer],
513 AS_HELP_STRING([--enable-address-sanitizer], [enable AddressSanitizer support for detecting a wide variety of memory allocation and deallocation errors]))
514 AC_ARG_ENABLE([thread-sanitizer],
515 AS_HELP_STRING([--enable-thread-sanitizer], [enable ThreadSanitizer support for detecting data races]))
516 AC_ARG_ENABLE([memory-sanitizer],
517 AS_HELP_STRING([--enable-memory-sanitizer], [enable MemorySanitizer support for detecting uninitialized memory reads]))
518
519 AS_IF([test "${enable_clippy_only}" != "yes"], [
520 AC_CHECK_HEADERS(json-c/json.h)
521 AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c", [], [-lm])
522 if test "$ac_cv_lib_json_c_json_object_get" = no; then
523 AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
524 if test "$ac_cv_lib_json_json_object_get" = no; then
525 AC_MSG_ERROR([libjson is needed to compile])
526 fi
527 fi
528 ])
529
530 AC_ARG_ENABLE([dev_build],
531 AS_HELP_STRING([--enable-dev-build], [build for development]))
532
533 AC_ARG_ENABLE([lua],
534 AS_HELP_STRING([--enable-lua], [Build Lua scripting]))
535
536 if test x"${enable_time_check}" != x"no" ; then
537 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
538 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
539 else
540 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
541 fi
542 fi
543
544 case "${enable_systemd}" in
545 "no") ;;
546 "yes")
547 AC_CHECK_LIB(systemd, sd_notify, LIBS="$LIBS -lsystemd")
548 if test $ac_cv_lib_systemd_sd_notify = no; then
549 AC_MSG_ERROR([enable systemd has been specified but systemd development env not found on your system])
550 else
551 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
552 fi
553 ;;
554 "*") ;;
555 esac
556
557 if test "${enable_rr_semantics}" != "no" ; then
558 AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics)
559 fi
560
561 if test "${enable_datacenter}" = "yes" ; then
562 AC_DEFINE(HAVE_DATACENTER,,Compile extensions for a DataCenter)
563 DFLT_NAME="datacenter"
564 else
565 DFLT_NAME="traditional"
566 fi
567
568 if test "${enable_fuzzing}" = "yes" ; then
569 AC_DEFINE(HANDLE_ZAPI_FUZZING,,Compile extensions to use with a fuzzer)
570 fi
571
572 if test "${enable_netlink_fuzzing}" = "yes" ; then
573 AC_DEFINE(HANDLE_NETLINK_FUZZING,,Compile extensions to use with a fuzzer for netlink)
574 fi
575
576 if test "${enable_cumulus}" = "yes" ; then
577 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
578 fi
579
580 AC_SUBST(DFLT_NAME)
581 AC_DEFINE_UNQUOTED(DFLT_NAME,["$DFLT_NAME"], Name of the configuration default set)
582
583 if test "${enable_shell_access}" = "yes"; then
584 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
585 fi
586
587 AM_CONDITIONAL([FPM], [test "x$enable_fpm" = "xyes"])
588
589 #
590 # Python for clippy
591 #
592
593 AC_DEFUN([FRR_PYTHON_CHECK_WORKING], [
594 AC_MSG_CHECKING([whether we found a working Python version])
595 AC_LINK_IFELSE_FLAGS([$PYTHON_CFLAGS], [$PYTHON_LIBS], [AC_LANG_PROGRAM([
596 #include <Python.h>
597 #if PY_VERSION_HEX < 0x02070000
598 #error python too old
599 #endif
600 int main(void);
601 ],
602 [
603 {
604 Py_Initialize();
605 return 0;
606 }
607 ])], [
608 # some python installs are missing the zlib dependency...
609 PYTHON_LIBS="${PYTHON_LIBS} -lz"
610 AC_LINK_IFELSE_FLAGS([$PYTHON_CFLAGS], [$PYTHON_LIBS], [AC_LANG_PROGRAM([
611 #include <Python.h>
612 #if PY_VERSION_HEX < 0x02070000
613 #error python too old
614 #endif
615 int main(void);
616 ],
617 [
618 {
619 Py_Initialize();
620 return 0;
621 }
622 ])], [
623 m4_if([$1], [], [
624 PYTHONCONFIG=""
625 unset PYTHON_LIBS
626 unset PYTHON_CFLAGS
627 ], [$1])
628 ])
629 ])
630 ])
631
632 AS_IF([test "$host" = "$build"], [
633 PYTHONCONFIG=""
634
635 # ordering:
636 # 1. try python3, but respect the user's preference on which minor ver
637 # 2. try python, which might be py3 or py2 again on the user's preference
638 # 3. try python2 (can really only be 2.7 but eh)
639 # 4. try 3.6 > 3.5 > 3.4 > 3.3 > 3.2 > 2.7 through pkg-config (no user pref)
640 #
641 # (AX_PYTHON_DEVEL has no clue about py3 vs py2)
642 # (AX_PYTHON does not do what we need)
643
644 AC_CHECK_TOOLS([PYTHONCONFIG], [ \
645 python3-config \
646 python-config \
647 python2-config \
648 python3.6-config \
649 python3.5-config \
650 python3.4-config \
651 python3.3-config \
652 python3.2-config \
653 python2.7-config ])
654 if test -n "$PYTHONCONFIG"; then
655 PYTHON_CFLAGS="`\"${PYTHONCONFIG}\" --includes`"
656 PYTHON_LIBS="`\"${PYTHONCONFIG}\" --ldflags`"
657
658 FRR_PYTHON_CHECK_WORKING([])
659 fi
660
661 if test -z "$PYTHONCONFIG"; then
662 PKG_CHECK_MODULES([PYTHON], python-3.6, [], [
663 PKG_CHECK_MODULES([PYTHON], python-3.5, [], [
664 PKG_CHECK_MODULES([PYTHON], python-3.4, [], [
665 PKG_CHECK_MODULES([PYTHON], python-3.3, [], [
666 PKG_CHECK_MODULES([PYTHON], python-3.2, [], [
667 PKG_CHECK_MODULES([PYTHON], python-2.7, [], [
668 AC_MSG_FAILURE([could not find python-config or pkg-config python, please install Python development files from libpython-dev or similar])
669 ])])])])])])
670
671
672 FRR_PYTHON_CHECK_WORKING([
673 AC_MSG_FAILURE([could not find python-config or pkg-config python, please install Python development files from libpython-dev or similar])
674 ])
675 fi
676 ])
677 AC_SUBST(PYTHON_CFLAGS)
678 AC_SUBST(PYTHON_LIBS)
679
680 #
681 # Logic for protobuf support.
682 #
683 if test "$enable_protobuf" = "yes"; then
684 # Check for protoc & protoc-c
685
686 # protoc is not required, it's only for a "be nice" helper target
687 AC_CHECK_PROGS([PROTOC], [protoc], [/bin/false])
688
689 AC_CHECK_PROGS([PROTOC_C], [protoc-c], [/bin/false])
690 if test "$PROTOC_C" = "/bin/false"; then
691 AC_MSG_FAILURE([protobuf requested but protoc-c not found. Install protobuf-c.])
692 fi
693
694 PKG_CHECK_MODULES([PROTOBUF_C], [libprotobuf-c >= 0.14],, [
695 AC_MSG_FAILURE([protobuf requested but libprotobuf-c not found. Install protobuf-c.])
696 ])
697 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [], [
698 AC_MSG_FAILURE([protobuf requested but protobuf-c.h not found. Install protobuf-c.])
699 ])
700
701 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
702 fi
703 AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$enable_protobuf" = "xyes"])
704
705 #
706 # Logic for old vpn commans support.
707 #
708 if test "$enable_oldvpn_commands" = "yes"; then
709 AC_DEFINE(KEEP_OLD_VPN_COMMANDS,, [Define for compiling with old vpn commands])
710 fi
711
712 #
713 # End of logic for protobuf support.
714 #
715
716 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
717 if test "${enable_rtadv}" != "no"; then
718 AC_MSG_RESULT(yes)
719 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
720 else
721 AC_MSG_RESULT(no)
722 fi
723
724 if test x"${enable_user}" = x"no"; then
725 enable_user=""
726 else
727 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
728 enable_user="frr"
729 fi
730 AC_DEFINE_UNQUOTED(FRR_USER, "${enable_user}", frr User)
731 fi
732
733 if test x"${enable_group}" = x"no"; then
734 enable_group=""
735 else
736 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
737 enable_group="frr"
738 fi
739 AC_DEFINE_UNQUOTED(FRR_GROUP, "${enable_group}", frr Group)
740 fi
741
742 if test x"${enable_vty_group}" = x"yes" ; then
743 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
744 elif test x"${enable_vty_group}" != x""; then
745 if test x"${enable_vty_group}" != x"no"; then
746 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
747 fi
748 fi
749 AC_SUBST([enable_user])
750 AC_SUBST([enable_group])
751 AC_SUBST([enable_vty_group])
752
753 enable_configfile_mask=${enable_configfile_mask:-0600}
754 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
755
756 enable_logfile_mask=${enable_logfile_mask:-0600}
757 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
758
759 MPATH_NUM=1
760
761 case "${enable_multipath}" in
762 0)
763 MPATH_NUM=64
764 ;;
765 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
766 MPATH_NUM="${enable_multipath}"
767 ;;
768 "")
769 ;;
770 *)
771 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
772 ;;
773 esac
774
775 AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
776
777 AC_DEFINE_UNQUOTED(VTYSH_PAGER, "$VTYSH_PAGER", [What pager to use])
778
779 dnl --------------------
780 dnl Enable code coverage
781 dnl --------------------
782 AM_CONDITIONAL([HAVE_GCOV],[test '!' "$enable_gcov" = no])
783
784 dnl ------------------------------------
785 dnl Alpine only accepts numeric versions
786 dnl ------------------------------------
787 if test "x${enable_numeric_version}" != "x" ; then
788 VERSION="`echo ${VERSION} | tr -c -d '[[.0-9]]'`"
789 PACKAGE_VERSION="`echo ${PACKAGE_VERSION} | tr -c -d '[[.0-9]]'`"
790 fi
791
792 dnl -----------------------------------
793 dnl Add extra version string to package
794 dnl name, string and version fields.
795 dnl -----------------------------------
796 if test "x${EXTRAVERSION}" != "x" ; then
797 VERSION="${VERSION}${EXTRAVERSION}"
798 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
799 AC_SUBST(PACKAGE_EXTRAVERSION, ["${EXTRAVERSION}"])
800 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
801 fi
802 AC_SUBST(EXTRAVERSION)
803
804 if test "x$with_pkg_git_version" = "xyes"; then
805 if test -d "${srcdir}/.git"; then
806 AC_DEFINE(GIT_VERSION, [1], [include git version info])
807 else with_pkg_git_version="no"
808 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
809 fi
810 fi
811 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
812
813 AC_CHECK_TOOL([OBJCOPY], [objcopy], [:])
814 AC_CACHE_CHECK([for .interp value to use], [frr_cv_interp], [
815 frr_cv_interp=""
816 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])], [
817 if $OBJCOPY -j.interp -Obinary conftest conftest.interp; then
818 frr_cv_interp="`xargs -0 echo < conftest.interp`"
819 fi
820 test -f conftest.interp && rm conftest.interp
821 ])
822 ])
823 if test -n "$frr_cv_interp"; then
824 AC_DEFINE_UNQUOTED(INTERP, ["$frr_cv_interp"], [.interp value])
825 fi
826
827 dnl ------------------------------------
828 dnl Check C keywords and standard types
829 dnl ------------------------------------
830 AC_C_CONST
831 AC_C_INLINE
832 AC_C_VOLATILE
833 AC_HEADER_STDC
834 dnl AC_TYPE_PID_T
835 AC_TYPE_UID_T
836 AC_TYPE_MODE_T
837 AC_TYPE_SIZE_T
838 AC_STRUCT_TM
839
840 dnl -------------------------
841 dnl Check other header files.
842 dnl -------------------------
843 AC_CHECK_HEADERS([stropts.h sys/ksym.h \
844 linux/version.h asm/types.h \
845 sys/cdefs.h])
846
847 ac_stdatomic_ok=false
848 AC_DEFINE(FRR_AUTOCONF_ATOMIC, 1, [did autoconf checks for atomic funcs])
849 AC_CHECK_HEADER([stdatomic.h],[
850
851 AC_MSG_CHECKING([whether _Atomic qualifier works])
852 AC_LINK_IFELSE([AC_LANG_SOURCE([[
853 #include <stdatomic.h>
854 int main(int argc, char **argv) {
855 _Atomic int i = 0;
856 return i;
857 }
858 ]])], [
859 AC_DEFINE(HAVE_STDATOMIC_H, 1, [found stdatomic.h])
860 AC_MSG_RESULT([yes])
861 ac_stdatomic_ok=true
862 ], [
863 AC_MSG_RESULT([no])
864 ])
865 ])
866
867 AS_IF([$ac_stdatomic_ok], [true], [
868 AC_MSG_CHECKING([for __atomic_* builtins])
869 AC_LINK_IFELSE([AC_LANG_SOURCE([[
870 int main(int argc, char **argv) {
871 volatile int i = 1;
872 __atomic_store_n (&i, 0, __ATOMIC_RELEASE);
873 return __atomic_load_n (&i, __ATOMIC_ACQUIRE);
874 }
875 ]])], [
876 AC_DEFINE(HAVE___ATOMIC, 1, [found __atomic builtins])
877 AC_MSG_RESULT([yes])
878 ], [
879 AC_MSG_RESULT([no])
880
881 dnl FreeBSD 9 has a broken stdatomic.h where _Atomic doesn't work
882 AC_MSG_CHECKING([for __sync_* builtins])
883 AC_LINK_IFELSE([AC_LANG_SOURCE([[
884 int main(int argc, char **argv) {
885 volatile int i = 1;
886 __sync_fetch_and_sub (&i, 1);
887 return __sync_val_compare_and_swap (&i, 0, 1);
888 }
889 ]])], [
890 AC_DEFINE(HAVE___SYNC, 1, [found __sync builtins])
891 AC_MSG_RESULT([yes])
892
893 AC_MSG_CHECKING([for __sync_swap builtin])
894 AC_LINK_IFELSE([AC_LANG_SOURCE([[
895 int main(int argc, char **argv) {
896 volatile int i = 1;
897 return __sync_swap (&i, 2);
898 }
899 ]])], [
900 AC_DEFINE(HAVE___SYNC_SWAP, 1, [found __sync_swap builtin])
901 AC_MSG_RESULT([yes])
902 ], [
903 AC_MSG_RESULT([no])
904 ])
905
906 ], [
907 AC_MSG_RESULT([no])
908 AC_MSG_FAILURE([stdatomic.h unavailable and $CC has neither __atomic nor __sync builtins])
909 ])
910 ])
911 ])
912
913 AC_CHECK_HEADERS([pthread_np.h],,, [
914 #include <pthread.h>
915 ])
916 AC_CHECK_FUNCS([pthread_setname_np pthread_set_name_np])
917
918 dnl Utility macro to avoid retyping includes all the time
919 m4_define([FRR_INCLUDES],
920 [#ifdef SUNOS_5
921 #define _POSIX_C_SOURCE 200809L
922 #define __EXTENSIONS__
923 #endif
924 #include <stdio.h>
925 #include <stdlib.h>
926 #include <stddef.h>
927 #include <sys/types.h>
928 /* sys/conf.h depends on param.h on FBSD at least */
929 #include <sys/param.h>
930 /* Required for MAXSIG */
931 #include <signal.h>
932 #include <sys/socket.h>
933 #ifdef __APPLE__
934 # define __APPLE_USE_RFC_3542
935 #endif
936 #include <netinet/in.h>
937 #include <sys/time.h>
938 #include <time.h>
939 #include <net/if.h>
940 ])dnl
941
942 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
943 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
944 dnl an additional round for it.
945
946 AC_CHECK_HEADERS([net/if_var.h], [], [], FRR_INCLUDES)
947
948 m4_define([FRR_INCLUDES],
949 FRR_INCLUDES
950 [#if HAVE_NET_IF_VAR_H
951 # include <net/if_var.h>
952 #endif
953 ])dnl
954
955 AC_CHECK_HEADERS([netinet/in_var.h \
956 net/if_dl.h net/netopt.h \
957 inet/nd.h netinet/ip_icmp.h \
958 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
959 [], [], FRR_INCLUDES)
960
961 AC_CHECK_HEADERS([ucontext.h], [], [],
962 [#ifndef __USE_GNU
963 #define __USE_GNU
964 #endif /* __USE_GNU */
965 FRR_INCLUDES
966 ])
967
968 m4_define([UCONTEXT_INCLUDES],
969 [#include <ucontext.h>])dnl
970
971 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
972 [], [], [UCONTEXT_INCLUDES])
973 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
974 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
975 [], [], [UCONTEXT_INCLUDES])],
976 [], [UCONTEXT_INCLUDES])
977 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
978 [], [], [UCONTEXT_INCLUDES])
979
980 m4_define([FRR_INCLUDES],
981 FRR_INCLUDES
982 [
983 #include <sys/un.h>
984 #include <netinet/in_systm.h>
985 #if HAVE_NETINET_IN_VAR_H
986 # include <netinet/in_var.h>
987 #endif
988 #if HAVE_NET_IF_DL_H
989 # include <net/if_dl.h>
990 #endif
991 #if HAVE_NET_NETOPT_H
992 # include <net/netopt.h>
993 #endif
994 #include <net/route.h>
995 #if HAVE_INET_ND_H
996 # include <inet/nd.h>
997 #endif
998 #include <arpa/inet.h>
999 /* Required for IDRP */
1000 #if HAVE_NETINET_IP_ICMP_H
1001 # include <netinet/ip_icmp.h>
1002 #endif
1003 ])dnl
1004
1005 dnl V6 headers are checked below, after we check for v6
1006
1007 AC_MSG_CHECKING([which operating system interface to use])
1008 case "$host_os" in
1009 sunos* | solaris2*)
1010 AC_MSG_RESULT([Solaris])
1011
1012 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
1013 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1014 AC_DEFINE(_POSIX_C_SOURCE, 200809L, [enable POSIX.1-2008 and XPG7/SUSv4])
1015
1016 AC_CHECK_LIB(socket, main)
1017 AC_CHECK_LIB(nsl, main)
1018 AC_CHECK_LIB(umem, main)
1019 SOLARIS="solaris"
1020 ;;
1021 linux*)
1022 AC_MSG_RESULT([Linux])
1023
1024 AC_DEFINE(GNU_LINUX,,GNU Linux)
1025 AC_DEFINE(HAVE_NETLINK,,netlink)
1026 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1027
1028 dnl Linux has a compilation problem with mixing
1029 dnl netinet/in.h and linux/in6.h they are not
1030 dnl compatible. There has been discussion on
1031 dnl how to fix it but no real progress on implementation
1032 dnl when they fix it, remove this
1033 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
1034 ;;
1035 openbsd*)
1036 AC_MSG_RESULT([OpenBSD])
1037
1038 AC_DEFINE(OPEN_BSD,,OpenBSD)
1039 AC_DEFINE(KAME,1,KAME IPv6)
1040 AC_DEFINE(BSD_V6_SYSCTL,1,BSD v6 sysctl to turn on and off forwarding)
1041
1042 if test "x${enable_pimd}" != "xno"; then
1043 case "$host_os" in
1044 openbsd6.0)
1045 ;;
1046 openbsd[6-9]*)
1047 AC_MSG_FAILURE([pimd cannot be enabled as PIM support has been removed from OpenBSD 6.1])
1048 ;;
1049 esac
1050 fi
1051 ;;
1052 *)
1053 AC_MSG_RESULT([BSD])
1054
1055 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
1056 AC_DEFINE(KAME,1,KAME IPv6)
1057 AC_DEFINE(BSD_V6_SYSCTL,1,BSD v6 sysctl to turn on and off forwarding)
1058 ;;
1059 esac
1060 AM_CONDITIONAL(SOLARIS, test "${SOLARIS}" = "solaris")
1061
1062 AC_SYS_LARGEFILE
1063
1064 dnl ------------------------
1065 dnl Integrated REALMS option
1066 dnl ------------------------
1067 if test "${enable_realms}" = "yes"; then
1068 case "$host_os" in
1069 linux*)
1070 AC_DEFINE(SUPPORT_REALMS,, Realms support)
1071 ;;
1072 *)
1073 echo "Sorry, only Linux has REALMS support"
1074 exit 1
1075 ;;
1076 esac
1077 fi
1078 AM_CONDITIONAL([SUPPORT_REALMS], [test "${enable_realms}" = "yes"])
1079
1080 dnl ---------------------
1081 dnl Integrated VTY option
1082 dnl ---------------------
1083 case "${enable_vtysh}" in
1084 "no")
1085 VTYSH="";;
1086 *)
1087 VTYSH="vtysh";
1088 AC_DEFINE(VTYSH,,VTY shell)
1089
1090 prev_libs="$LIBS"
1091 AC_CHECK_LIB(readline, main, [
1092 LIBREADLINE="-lreadline"
1093 ], [
1094 dnl readline failed - it might be incorrectly linked and missing its
1095 dnl termcap/tinfo/curses dependency. see if we can fix that...
1096 AC_SEARCH_LIBS(tputs, [termcap tinfo curses ncurses], [
1097 LIBREADLINE="$ac_cv_search_tputs"
1098 ], [
1099 AC_MSG_ERROR([libreadline (needed for vtysh) not found and/or missing dependencies])
1100 ])
1101
1102 dnl re-try with the lib we found above
1103 unset ac_cv_lib_readline_main
1104 AC_CHECK_LIB(readline, main, [
1105 LIBREADLINE="-lreadline $LIBREADLINE"
1106 ], [
1107 AC_MSG_ERROR([libreadline (needed for vtysh) not found and/or missing dependencies])
1108 ], [$LIBREADLINE])
1109 ], [])
1110 LIBS="$prev_libs"
1111
1112 AC_CHECK_HEADER(readline/history.h)
1113 if test $ac_cv_header_readline_history_h = no;then
1114 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
1115 fi
1116 AC_CHECK_LIB(readline, rl_completion_matches, [true], [], [$LIBREADLINE])
1117 if test $ac_cv_lib_readline_rl_completion_matches = no; then
1118 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
1119 fi
1120 AC_CHECK_LIB(readline, [append_history], [frr_cv_append_history=yes], [frr_cv_append_history=no], [$LIBREADLINE])
1121 if test "$frr_cv_append_history" = yes; then
1122 AC_DEFINE(HAVE_APPEND_HISTORY, 1, [Have history.h append_history])
1123 fi
1124 ;;
1125 esac
1126 AC_SUBST(LIBREADLINE)
1127 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
1128
1129 dnl ----------
1130 dnl PAM module
1131 dnl
1132 dnl FRR detects the PAM library it is built against by checking for a
1133 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
1134 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
1135 dnl openpam.h doesn't do that, although depends on the header too. Hence a
1136 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
1137 dnl of OpenPAM.
1138 dnl ----------
1139 if test "$with_libpam" = "yes"; then
1140 AC_CHECK_HEADER([security/pam_misc.h],
1141 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
1142 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
1143 pam_conv_func="misc_conv"
1144 ],
1145 [], FRR_INCLUDES)
1146 AC_CHECK_HEADER([security/openpam.h],
1147 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
1148 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
1149 pam_conv_func="openpam_ttyconv"
1150 ],
1151 [], FRR_INCLUDES[#include <security/pam_appl.h>])
1152 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
1153 AC_MSG_WARN([*** pam support will not be built ***])
1154 with_libpam="no"
1155 fi
1156 fi
1157
1158 if test "$with_libpam" = "yes"; then
1159 dnl took this test from proftpds configure.in and suited to our needs
1160 dnl -------------------------------------------------------------------------
1161 dnl
1162 dnl This next check looks funky due to a linker problem with some versions
1163 dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
1164 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
1165 dnl with RedHat 6.2 and Debian 2.2 or better.
1166 AC_CHECK_LIB(pam, pam_start,
1167 [AC_CHECK_LIB(pam, $pam_conv_func,
1168 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1169 LIBPAM="-lpam"],
1170 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1171 LIBPAM="-lpam -lpam_misc"]
1172 )
1173 ],
1174
1175 [AC_CHECK_LIB(pam, pam_end,
1176 [AC_CHECK_LIB(pam, $pam_conv_func,
1177 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1178 LIBPAM="-lpam -ldl"],
1179 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
1180 LIBPAM="-lpam -ldl -lpam_misc"]
1181 )
1182 ],AC_MSG_WARN([*** pam support will not be built ***]),
1183 [-ldl])
1184 ]
1185 )
1186 fi
1187 AC_SUBST(LIBPAM)
1188
1189 dnl -------------------------------
1190 dnl Endian-ness check
1191 dnl -------------------------------
1192 AC_WORDS_BIGENDIAN
1193
1194 dnl -------------------------------
1195 dnl check the size in byte of the C
1196 dnl -------------------------------
1197 dnl AC_CHECK_SIZEOF(char)
1198 dnl AC_CHECK_SIZEOF(int)
1199 dnl AC_CHECK_SIZEOF(short)
1200 dnl AC_CHECK_SIZEOF(long)
1201
1202 dnl ----------------------------
1203 dnl check existance of functions
1204 dnl ----------------------------
1205 AC_FUNC_FNMATCH
1206 AC_FUNC_FORK
1207 AC_FUNC_MKTIME
1208 AC_FUNC_STAT
1209
1210 dnl -------------------------------
1211 dnl bgpd needs pow() and hence libm
1212 dnl -------------------------------
1213 TMPLIBS="$LIBS"
1214 AC_CHECK_HEADER([math.h],
1215 [AC_CHECK_LIB([m], [pow],
1216 [LIBM="-lm"
1217 LIBS="$LIBS $LIBM"
1218 AC_CHECK_FUNCS(pow,[],[LIBM=""])
1219 ])
1220 ])
1221 if test x"$LIBM" = x ; then
1222 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
1223 fi
1224 LIBS="$TMPLIBS"
1225
1226 AC_SUBST(LIBM)
1227
1228 AC_CHECK_FUNCS([ppoll], [
1229 AC_DEFINE([HAVE_PPOLL], 1, [have Linux/BSD ppoll()])
1230 ])
1231 AC_CHECK_FUNCS([pollts], [
1232 AC_DEFINE([HAVE_POLLTS], 1, [have NetBSD pollts()])
1233 ])
1234
1235 dnl ---------------
1236 dnl other functions
1237 dnl ---------------
1238 AC_CHECK_FUNCS([ \
1239 strlcat strlcpy \
1240 getgrouplist])
1241
1242 AC_CHECK_HEADER([asm-generic/unistd.h],
1243 [AC_CHECK_DECL(__NR_setns,
1244 AC_DEFINE(HAVE_NETNS,, Have netns),,
1245 FRR_INCLUDES [#include <asm-generic/unistd.h>
1246 ])
1247 AC_CHECK_FUNCS(setns)]
1248 )
1249
1250 dnl --------------------------
1251 dnl Determine IS-IS I/O method
1252 dnl --------------------------
1253 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
1254 AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
1255 AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
1256 AC_CHECK_HEADER(net/bpf.h)
1257 AC_CHECK_HEADER(sys/dlpi.h)
1258 AC_MSG_CHECKING(zebra IS-IS I/O method)
1259
1260 case "$host_os" in
1261 linux*)
1262 AC_MSG_RESULT(pfpacket)
1263 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
1264 ;;
1265 solaris* | sunos*)
1266 AC_MSG_RESULT(DLPI)
1267 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
1268 ;;
1269 *)
1270 if test $ac_cv_header_net_bpf_h = no; then
1271 if test $ac_cv_header_sys_dlpi_h = no; then
1272 AC_MSG_RESULT(none)
1273 if test "${enable_isisd}" = yes -o "${enable_fabricd}" = yes; then
1274 AC_MSG_FAILURE([IS-IS support requested but no packet backend found])
1275 fi
1276 AC_MSG_WARN([*** IS-IS support will not be built ***])
1277 enable_isisd="no"
1278 enable_fabricd="no"
1279 else
1280 AC_MSG_RESULT(DLPI)
1281 fi
1282 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
1283 else
1284 AC_MSG_RESULT(BPF)
1285 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
1286 fi
1287 ;;
1288 esac
1289 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
1290
1291 dnl ---------------------------------------------------------------
1292 dnl figure out how to specify an interface in multicast sockets API
1293 dnl ---------------------------------------------------------------
1294 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
1295
1296 AC_CHECK_HEADERS([linux/mroute.h], [], [],[
1297 #include <sys/socket.h>
1298 #include <netinet/in.h>
1299 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
1300 #include <linux/types.h>
1301 ])
1302
1303 m4_define([FRR_INCLUDES],
1304 FRR_INCLUDES
1305 [#if HAVE_LINUX_MROUTE_H
1306 # include <linux/mroute.h>
1307 #endif
1308 ])dnl
1309
1310 AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
1311 #include <sys/socket.h>
1312 #include <sys/types.h>
1313 #include <netinet/in.h>
1314 #include <net/route.h>
1315 ])
1316
1317 m4_define([FRR_INCLUDES],
1318 FRR_INCLUDES
1319 [#if HAVE_NETINET_IP_MROUTE_H
1320 # include <netinet/ip_mroute.h>
1321 #endif
1322 ])dnl
1323
1324 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
1325 AC_TRY_COMPILE([#include <sys/param.h>],
1326 [#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)
1327 return (0);
1328 #else
1329 #error No support for BSD struct ip_mreq hack detected
1330 #endif],[AC_MSG_RESULT(yes)
1331 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1332 AC_MSG_RESULT(no))
1333
1334 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1335 AC_TRY_COMPILE([
1336 #include <sys/types.h>
1337 #include <netinet/in.h>
1338 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1339 ], [AC_MSG_RESULT(yes)
1340 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1341 AC_MSG_RESULT(no))
1342
1343 dnl ---------------------------------------------------------------
1344 dnl figure out how to check link-state
1345 dnl ---------------------------------------------------------------
1346 AC_CHECK_HEADER( [net/if_media.h],
1347 [m4_define([LINK_DETECT_INCLUDES],
1348 FRR_INCLUDES
1349 [#include <net/if_media.h>
1350 ])
1351 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1352 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1353 [], LINK_DETECT_INCLUDES)],
1354 [],
1355 FRR_INCLUDES)
1356
1357 dnl ---------------------------------------------------------------
1358 dnl Additional, newer way to check link-state using ifi_link_state.
1359 dnl Not available in all BSD's when ifmediareq available
1360 dnl ---------------------------------------------------------------
1361 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1362 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1363 [], FRR_INCLUDES)
1364
1365 dnl ------------------------
1366 dnl TCP_MD5SIG socket option
1367 dnl ------------------------
1368
1369 AC_CHECK_HEADER([netinet/tcp.h],
1370 [m4_define([MD5_INCLUDES],
1371 FRR_INCLUDES
1372 [#include <netinet/tcp.h>
1373 ])
1374 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1375 [],
1376 FRR_INCLUDES)
1377 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1378 AC_CHECK_HEADER([linux/tcp.h],
1379 [m4_define([MD5_INCLUDES],
1380 FRR_INCLUDES
1381 [#include <linux/tcp.h>
1382 ])
1383 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1384 fi
1385
1386 dnl ----------------------------------------------------------------------------
1387 dnl figure out if domainname is available in the utsname struct (GNU extension).
1388 dnl ----------------------------------------------------------------------------
1389 AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1390
1391 dnl ------------------
1392 dnl IPv6 header checks
1393 dnl ------------------
1394 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
1395 netinet6/in6_var.h netinet6/nd6.h], [], [],
1396 FRR_INCLUDES)
1397
1398 m4_define([FRR_INCLUDES],dnl
1399 FRR_INCLUDES
1400 [#if HAVE_NETINET6_IN6_H
1401 #include <netinet6/in6.h>
1402 #endif
1403 #if HAVE_NETINET_IN6_VAR_H
1404 #include <netinet/in6_var.h>
1405 #endif
1406 #include <netinet/icmp6.h>
1407 #if HAVE_NETINET6_IN6_VAR_H
1408 # include <netinet6/in6_var.h>
1409 #endif
1410 #if HAVE_NETINET6_ND6_H
1411 # include <netinet6/nd6.h>
1412 #endif
1413 ])dnl
1414
1415 dnl disable doc check
1416 AC_CHECK_PROGS([SPHINXBUILD], [sphinx-build sphinx-build3 sphinx-build2], [/bin/false])
1417 if test "$SPHINXBUILD" = "/bin/false"; then
1418 if test "${enable_doc}" = "yes"; then
1419 AC_MSG_ERROR([Documentation was explicitly requested with --enable-doc but sphinx-build is not available. Please disable docs or install sphinx.])
1420 fi
1421 fi
1422 AM_CONDITIONAL(DOC, test "${enable_doc}" != "no" -a "$SPHINXBUILD" != "/bin/false")
1423 AM_CONDITIONAL(DOC_HTML, test "${enable_doc_html}" = "yes")
1424
1425 dnl --------------------
1426 dnl Daemon disable check
1427 dnl --------------------
1428 AM_CONDITIONAL(ZEBRA, test "${enable_zebra}" != "no")
1429
1430 if test "${enable_bgpd}" = "no";then
1431 BGPD=""
1432 else
1433 BGPD="bgpd"
1434 fi
1435 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1436
1437 AM_CONDITIONAL(RIPD, test "${enable_ripd}" != "no")
1438 AM_CONDITIONAL(OSPFD, test "${enable_ospfd}" != "no")
1439 AM_CONDITIONAL(LDPD, test "${enable_ldpd}" != "no")
1440
1441 AS_IF([test "${enable_ldpd}" != "no"], [
1442 AC_DEFINE(HAVE_LDPD, 1, ldpd)
1443 ])
1444
1445 if test "$enable_bfdd" = "no"; then
1446 AC_DEFINE(HAVE_BFDD, 0, bfdd)
1447 BFDD=""
1448 else
1449 AC_DEFINE(HAVE_BFDD, 1, bfdd)
1450 BFDD="bfdd"
1451
1452 case $host_os in
1453 linux*)
1454 AC_DEFINE(BFD_LINUX, 1, bfdd)
1455 ;;
1456
1457 *)
1458 AC_DEFINE(BFD_BSD, 1, bfdd)
1459 ;;
1460 esac
1461 fi
1462
1463 AM_CONDITIONAL(BFDD, [test "x$BFDD" = "xbfdd"])
1464
1465 if test "$ac_cv_lib_json_c_json_object_get" = no -a "x$BFDD" = "xbfdd"; then
1466 AC_MSG_ERROR(["you must use json-c library to use bfdd"])
1467 fi
1468
1469 NHRPD=""
1470 case "$host_os" in
1471 linux*)
1472 if test "${enable_nhrpd}" != "no"; then
1473 NHRPD="nhrpd"
1474 fi
1475 ;;
1476 *)
1477 if test "${enable_nhrpd}" = "yes"; then
1478 AC_MSG_ERROR([nhrpd requires kernel APIs that are only present on Linux.])
1479 fi
1480 ;;
1481 esac
1482 AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1483
1484 AM_CONDITIONAL(EIGRPD, test "${enable_eigrpd}" != "no")
1485
1486 if test "${enable_watchfrr}" = "no";then
1487 WATCHFRR=""
1488 else
1489 WATCHFRR="watchfrr"
1490 fi
1491 AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
1492
1493 OSPFCLIENT=""
1494 if test "${enable_ospfapi}" != "no";then
1495 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1496
1497 if test "${enable_ospfclient}" != "no";then
1498 OSPFCLIENT="ospfclient"
1499 fi
1500 fi
1501
1502 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1503 AM_CONDITIONAL(RIPNGD, test "${enable_ripngd}" != "no")
1504 AM_CONDITIONAL(BABELD, test "${enable_babeld}" != "no")
1505 AM_CONDITIONAL(OSPF6D, test "${enable_ospf6d}" != "no")
1506 AM_CONDITIONAL(ISISD, test "${enable_isisd}" != "no")
1507 AM_CONDITIONAL(PIMD, test "${enable_pimd}" != "no")
1508 AM_CONDITIONAL(PBRD, test "${enable_pbrd}" != "no")
1509 AM_CONDITIONAL(SHARPD, test "${enable_sharpd}" = "yes")
1510 AM_CONDITIONAL(STATICD, test "${enable_staticd}" != "no")
1511 AM_CONDITIONAL(FABRICD, test "${enable_fabricd}" != "no")
1512
1513 if test "${enable_bgp_announce}" = "no";then
1514 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1515 else
1516 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1517 fi
1518
1519 if test "${enable_bgp_vnc}" != "no";then
1520 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
1521 fi
1522 AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
1523
1524 AC_SUBST(SOLARIS)
1525 AC_CHECK_LIB(crypt, crypt, [],
1526 [AC_CHECK_LIB(crypto, DES_crypt)])
1527 AC_CHECK_LIB(resolv, res_init)
1528
1529 dnl ---------------------------
1530 dnl check system has PCRE regexp
1531 dnl ---------------------------
1532 if test "x$enable_pcreposix" = "xyes"; then
1533 AC_CHECK_LIB(pcreposix, regexec, [], [
1534 AC_MSG_ERROR([--enable-pcreposix given but unable to find libpcreposix])
1535 ])
1536 fi
1537 AC_SUBST(HAVE_LIBPCREPOSIX)
1538
1539 dnl ------------------
1540 dnl check C-Ares library
1541 dnl ------------------
1542 if test "${NHRPD}" != ""; then
1543 PKG_CHECK_MODULES([CARES], [libcares], , [
1544 AC_MSG_ERROR([trying to build nhrpd, but libcares not found. install c-ares and its -dev headers.])
1545 ])
1546 fi
1547
1548
1549 dnl ------------------
1550 dnl check Net-SNMP library
1551 dnl ------------------
1552 if test "${enable_snmp}" != "" -a "${enable_snmp}" != "no"; then
1553 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1554 if test x"$NETSNMP_CONFIG" = x"no"; then
1555 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1556 fi
1557 SNMP_LIBS="`${NETSNMP_CONFIG} --agent-libs`"
1558 SNMP_CFLAGS="`${NETSNMP_CONFIG} --base-cflags`"
1559 # net-snmp lists all of its own dependencies. we absolutely do not want that
1560 # among other things we avoid a GPL vs. OpenSSL license conflict here
1561 for removelib in crypto ssl sensors pci wrap; do
1562 SNMP_LIBS="`echo $SNMP_LIBS | sed -e 's/\(^\|\s\)-l'$removelib'\b/ /g' -e 's/\(^\|\s\)\([^\s]*\/\)\?lib'$removelib'\.[^\s]\+\b/ /g'`"
1563 done
1564 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1565 AC_LINK_IFELSE_FLAGS([$SNMP_CFLAGS], [$SNMP_LIBS], [AC_LANG_PROGRAM([
1566 int main(void);
1567 ],
1568 [
1569 {
1570 return 0;
1571 }
1572 ])], [
1573 AC_MSG_ERROR([--enable-snmp given but not usable])])
1574 case "${enable_snmp}" in
1575 yes)
1576 SNMP_METHOD=agentx
1577 ;;
1578 agentx)
1579 SNMP_METHOD="${enable_snmp}"
1580 ;;
1581 *)
1582 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use yes or agentx])
1583 ;;
1584 esac
1585 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1586 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1587 fi
1588 AM_CONDITIONAL([SNMP], [test "x${SNMP_METHOD}" != "x"])
1589 AC_SUBST(SNMP_LIBS)
1590 AC_SUBST(SNMP_CFLAGS)
1591
1592 dnl ---------------
1593 dnl libyang
1594 dnl ---------------
1595 PKG_CHECK_MODULES(libyang, [libyang >= 0.16.7], , [
1596 AC_MSG_ERROR([libyang (>= 0.16.7) was not found on your system.])
1597 ])
1598 AC_CHECK_MEMBER([struct lyd_node.priv], [], [
1599 AC_MSG_ERROR([m4_normalize([
1600 libyang needs to be compiled with ENABLE_LYD_PRIV=ON.
1601 See http://docs.frrouting.org/projects/dev-guide/en/latest/building-libyang.html for details.])
1602 ])
1603 ], [[#include <libyang/libyang.h>]])
1604
1605 dnl ---------------
1606 dnl configuration rollbacks
1607 dnl ---------------
1608 SQLITE3=false
1609 if test "$enable_config_rollbacks" = "yes"; then
1610 PKG_CHECK_MODULES(sqlite3,[sqlite3], [
1611 AC_DEFINE(HAVE_CONFIG_ROLLBACKS,1,Enable configuration rollbacks)
1612 AC_DEFINE(HAVE_SQLITE3,1,Enable sqlite3 database)
1613 SQLITE3=true
1614 ], [
1615 AC_MSG_ERROR([--enable-config-rollbacks given but sqlite3 was not found on your system.])
1616 ])
1617 fi
1618 AM_CONDITIONAL(SQLITE3, $SQLITE3)
1619
1620 dnl ---------------
1621 dnl confd
1622 dnl ---------------
1623 if test "$enable_confd" != "" -a "$enable_confd" != "no"; then
1624 AC_CHECK_PROG([CONFD], [confd], [confd], [/bin/false])
1625 if test "x$CONFD" = "x/bin/false"; then
1626 AC_MSG_ERROR([confd was not found on your system.])]
1627 fi
1628 CONFD_CFLAGS="-I${enable_confd}/include -L${enable_confd}/lib"
1629 AC_SUBST(CONFD_CFLAGS)
1630 AC_DEFINE(HAVE_CONFD,1,Enable confd integration)
1631 fi
1632 AM_CONDITIONAL([CONFD], [test "x$enable_confd" != "x"])
1633
1634 dnl ---------------
1635 dnl sysrepo
1636 dnl ---------------
1637 if test "$enable_sysrepo" = "yes"; then
1638 PKG_CHECK_MODULES(sysrepo,[libsysrepo],
1639 [AC_DEFINE(HAVE_SYSREPO,1,Enable sysrepo integration)
1640 SYSREPO=true],
1641 [SYSREPO=false
1642 AC_MSG_ERROR([sysrepo was not found on your system.])]
1643 )
1644 fi
1645 AM_CONDITIONAL([SYSREPO], [test "x$enable_sysrepo" = "xyes"])
1646
1647 dnl ---------------
1648 dnl math
1649 dnl ---------------
1650 AC_SEARCH_LIBS([sqrt], [m])
1651
1652 dnl ---------------
1653 dnl dlopen & dlinfo
1654 dnl ---------------
1655 AC_SEARCH_LIBS(dlopen, [dl dld], [], [
1656 AC_MSG_ERROR([unable to find the dlopen()])
1657 ])
1658
1659 AC_CHECK_HEADERS([link.h])
1660
1661 AC_CACHE_CHECK([for dlinfo(RTLD_DI_ORIGIN)], [frr_cv_rtld_di_origin], [
1662 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1663 #include <stdlib.h>
1664 #ifdef HAVE_LINK_H
1665 #include <link.h>
1666 #endif
1667 #include <dlfcn.h>
1668 ]], [[
1669 char origin[1];
1670 dlinfo (NULL, RTLD_DI_ORIGIN, &origin);
1671 ]])], [
1672 frr_cv_rtld_di_origin=yes
1673 ], [
1674 frr_cv_rtld_di_origin=no
1675 ])
1676 ])
1677 if test "$frr_cv_rtld_di_origin" = yes; then
1678 AC_DEFINE(HAVE_DLINFO_ORIGIN, 1, [Have dlinfo RTLD_DI_ORIGIN])
1679 fi
1680
1681 AC_CACHE_CHECK([for dlinfo(RTLD_DI_LINKMAP)], [frr_cv_rtld_di_linkmap], [
1682 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1683 #include <stdlib.h>
1684 #ifdef HAVE_LINK_H
1685 #include <link.h>
1686 #endif
1687 #include <dlfcn.h>
1688 ]], [[
1689 struct link_map *lm = NULL;
1690 dlinfo (NULL, RTLD_DI_LINKMAP, &lm);
1691 ]])], [
1692 frr_cv_rtld_di_linkmap=yes
1693 ], [
1694 frr_cv_rtld_di_linkmap=no
1695 ])
1696 ])
1697 if test "$frr_cv_rtld_di_linkmap" = yes; then
1698 AC_DEFINE(HAVE_DLINFO_LINKMAP, 1, [Have dlinfo RTLD_DI_LINKMAP])
1699 fi
1700
1701 AM_CONDITIONAL(SNMP, test "x$SNMP_METHOD" = "xagentx")
1702
1703 dnl ---------------------------
1704 dnl sockaddr and netinet checks
1705 dnl ---------------------------
1706 AC_CHECK_TYPES([
1707 struct sockaddr_dl,
1708 struct vifctl, struct mfcctl, struct sioc_sg_req,
1709 vifi_t, struct sioc_vif_req, struct igmpmsg,
1710 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1711 struct nd_opt_adv_interval, struct rt_addrinfo,
1712 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1713 [], [], FRR_INCLUDES)
1714
1715 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1716 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1717 struct sockaddr_dl.sdl_len,
1718 struct if6_aliasreq.ifra_lifetime,
1719 struct nd_opt_adv_interval.nd_opt_ai_type],
1720 [], [], FRR_INCLUDES)
1721
1722 dnl ---------------------------
1723 dnl IRDP/pktinfo/icmphdr checks
1724 dnl ---------------------------
1725
1726 AC_CHECK_TYPES([struct in_pktinfo], [
1727 AC_CHECK_TYPES([struct icmphdr], [
1728 IRDP=true
1729 ], [
1730 IRDP=false
1731 ], [FRR_INCLUDES])
1732 ], [
1733 IRDP=false
1734 ], [FRR_INCLUDES])
1735
1736 case "${enable_irdp}" in
1737 yes)
1738 $IRDP || AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1739 ;;
1740 no)
1741 IRDP=false
1742 ;;
1743 esac
1744
1745 AM_CONDITIONAL(IRDP, $IRDP)
1746
1747 dnl -----------------------
1748 dnl checking for IP_PKTINFO
1749 dnl -----------------------
1750 AC_MSG_CHECKING(for IP_PKTINFO)
1751 AC_TRY_COMPILE([#include <netdb.h>], [
1752 int opt = IP_PKTINFO;
1753 ], [
1754 AC_MSG_RESULT(yes)
1755 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1756 ], [
1757 AC_MSG_RESULT(no)
1758 ])
1759
1760 dnl ---------------------------
1761 dnl checking for IP_RECVDSTADDR
1762 dnl ---------------------------
1763 AC_MSG_CHECKING(for IP_RECVDSTADDR)
1764 AC_TRY_COMPILE([#include <netinet/in.h>], [
1765 int opt = IP_RECVDSTADDR;
1766 ], [
1767 AC_MSG_RESULT(yes)
1768 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1769 ], [
1770 AC_MSG_RESULT(no)
1771 ])
1772
1773 dnl ----------------------
1774 dnl checking for IP_RECVIF
1775 dnl ----------------------
1776 AC_MSG_CHECKING(for IP_RECVIF)
1777 AC_TRY_COMPILE([#include <netinet/in.h>], [
1778 int opt = IP_RECVIF;
1779 ], [
1780 AC_MSG_RESULT(yes)
1781 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1782 ], [
1783 AC_MSG_RESULT(no)
1784 ])
1785
1786 dnl ----------------------
1787 dnl checking for SO_BINDANY
1788 dnl ----------------------
1789 AC_MSG_CHECKING(for SO_BINDANY)
1790 AC_TRY_COMPILE([#include <sys/socket.h>], [
1791 int opt = SO_BINDANY;
1792 ], [
1793 AC_MSG_RESULT(yes)
1794 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1795 ], [
1796 AC_MSG_RESULT(no)
1797 ])
1798
1799 dnl ----------------------
1800 dnl checking for IP_FREEBIND
1801 dnl ----------------------
1802 AC_MSG_CHECKING(for IP_FREEBIND)
1803 AC_TRY_COMPILE([#include <netinet/in.h>], [
1804 int opt = IP_FREEBIND;
1805 ], [
1806 AC_MSG_RESULT(yes)
1807 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1808 ], [
1809 AC_MSG_RESULT(no)
1810 ])
1811
1812 dnl --------------------------------------
1813 dnl checking for be32dec existence or not
1814 dnl --------------------------------------
1815 AC_CHECK_DECLS([be32enc, be32dec], [], [],
1816 [#include <sys/endian.h>])
1817
1818 dnl --------------------------------------
1819 dnl checking for clock_time monotonic struct and call
1820 dnl --------------------------------------
1821 AC_CHECK_DECL(CLOCK_MONOTONIC,
1822 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1823 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1824 ], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
1825
1826 dnl --------------------------------------
1827 dnl checking for flex and bison
1828 dnl --------------------------------------
1829
1830 AM_PROG_LEX
1831 AC_MSG_CHECKING(version of flex)
1832 frr_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
1833 frr_ac_flex_version="${frr_ac_flex_version##* }"
1834 AC_MSG_RESULT([$frr_ac_flex_version])
1835 AX_COMPARE_VERSION([$frr_ac_flex_version], [lt], [2.5.20], [
1836 LEX="$SHELL $missing_dir/missing flex"
1837 if test -f "${srcdir}/lib/command_lex.c" -a -f "${srcdir}/lib/command_lex.h"; then
1838 AC_MSG_WARN([using pregenerated flex output files])
1839 else
1840 AC_MSG_ERROR([flex failure and pregenerated files not included (probably a git build)])
1841 fi
1842 AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
1843 AC_SUBST([LEXLIB], [''])
1844 ])
1845
1846 AC_PROG_YACC
1847 dnl thanks GNU bison for this b*llshit...
1848 AC_MSG_CHECKING(version of bison)
1849 frr_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
1850 frr_ac_bison_version="${frr_ac_bison_version##* }"
1851 frr_ac_bison_missing="false"
1852 case "x${frr_ac_bison_version}" in
1853 x2.7*)
1854 BISON_OPENBRACE='"'
1855 BISON_CLOSEBRACE='"'
1856 BISON_VERBOSE=''
1857 AC_MSG_RESULT([$frr_ac_bison_version - 2.7 or older])
1858 ;;
1859 x2.*|x1.*)
1860 AC_MSG_RESULT([$frr_ac_bison_version])
1861 AC_MSG_WARN([installed bison is too old. Please install GNU bison 2.7.x or newer.])
1862 frr_ac_bison_missing="true"
1863 ;;
1864 x)
1865 AC_MSG_RESULT([none])
1866 AC_MSG_WARN([could not determine bison version. Please install GNU bison 2.7.x or newer.])
1867 frr_ac_bison_missing="true"
1868 ;;
1869 *)
1870 BISON_OPENBRACE='{'
1871 BISON_CLOSEBRACE='}'
1872 BISON_VERBOSE='-Dparse.error=verbose'
1873 AC_MSG_RESULT([$frr_ac_bison_version - 3.0 or newer])
1874 ;;
1875 esac
1876 AC_SUBST(BISON_OPENBRACE)
1877 AC_SUBST(BISON_CLOSEBRACE)
1878 AC_SUBST(BISON_VERBOSE)
1879
1880 if $frr_ac_bison_missing; then
1881 YACC="$SHELL $missing_dir/missing bison -y"
1882 if test -f "${srcdir}/lib/command_parse.c" -a -f "${srcdir}/lib/command_parse.h"; then
1883 AC_MSG_WARN([using pregenerated bison output files])
1884 else
1885 AC_MSG_ERROR([bison failure and pregenerated files not included (probably a git build)])
1886 fi
1887 fi
1888
1889 dnl -------------------
1890 dnl capabilities checks
1891 dnl -------------------
1892 if test "${enable_capabilities}" != "no"; then
1893 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1894 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1895 [AC_MSG_RESULT(yes)
1896 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1897 frr_ac_keepcaps="yes"],
1898 AC_MSG_RESULT(no)
1899 )
1900 if test x"${frr_ac_keepcaps}" = x"yes"; then
1901 AC_CHECK_HEADERS(sys/capability.h)
1902 fi
1903 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1904 AC_CHECK_LIB(cap, cap_init,
1905 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1906 LIBCAP="-lcap"
1907 frr_ac_lcaps="yes"]
1908 )
1909 else
1910 AC_CHECK_HEADERS(priv.h,
1911 [AC_MSG_CHECKING(Solaris style privileges are available)
1912 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1913 [AC_MSG_RESULT(yes)
1914 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1915 frr_ac_scaps="yes"],
1916 AC_MSG_RESULT(no)
1917 )
1918 ]
1919 )
1920 fi
1921 if test x"${frr_ac_scaps}" = x"yes" \
1922 -o x"${frr_ac_lcaps}" = x"yes"; then
1923 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1924 fi
1925 fi
1926 AC_SUBST(LIBCAP)
1927
1928 dnl ---------------------------
1929 dnl check for glibc 'backtrace'
1930 dnl ---------------------------
1931 if test x"${enable_backtrace}" != x"no" ; then
1932 backtrace_ok=no
1933 PKG_CHECK_MODULES([UNWIND], [libunwind], [
1934 AC_DEFINE(HAVE_LIBUNWIND, 1, [libunwind])
1935 backtrace_ok=yes
1936 ], [
1937 case "$host_os" in
1938 sunos* | solaris2*)
1939 AC_CHECK_FUNCS([printstack], [
1940 AC_DEFINE([HAVE_PRINTSTACK], 1, [Solaris printstack])
1941 backtrace_ok=yes
1942 ])
1943 ;;
1944 esac
1945 if test "$backtrace_ok" = no; then
1946 AC_CHECK_HEADER([execinfo.h], [
1947 AC_SEARCH_LIBS([backtrace], [execinfo], [
1948 AC_DEFINE(HAVE_GLIBC_BACKTRACE, 1, [Glibc backtrace])
1949 backtrace_ok=yes
1950 ],, [-lm])
1951 ])
1952 fi
1953 ])
1954
1955 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1956 dnl user explicitly requested backtrace but we failed to find support
1957 AC_MSG_FAILURE([failed to find backtrace or libunwind support])
1958 fi
1959 fi
1960
1961 dnl -----------------------------------------
1962 dnl check for malloc mallinfo struct and call
1963 dnl this must try and link using LIBS, in
1964 dnl order to check no alternative allocator
1965 dnl has been specified, which might not provide
1966 dnl mallinfo, e.g. such as Umem on Solaris.
1967 dnl -----------------------------------------
1968 AC_CHECK_HEADERS([malloc.h malloc_np.h malloc/malloc.h],,, [FRR_INCLUDES])
1969
1970 AC_CACHE_CHECK([whether mallinfo is available], [frr_cv_mallinfo], [
1971 AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES [
1972 #ifdef HAVE_MALLOC_H
1973 #include <malloc.h>
1974 #endif
1975 #ifdef HAVE_MALLOC_NP_H
1976 #include <malloc_np.h>
1977 #endif
1978 #ifdef HAVE_MALLOC_MALLOC_H
1979 #include <malloc/malloc.h>
1980 #endif
1981 ]], [[
1982 struct mallinfo ac_x; ac_x = mallinfo ();
1983 ]])], [
1984 frr_cv_mallinfo=yes
1985 ], [
1986 frr_cv_mallinfo=no
1987 ])
1988 ])
1989 if test "$frr_cv_mallinfo" = yes; then
1990 AC_DEFINE(HAVE_MALLINFO,,mallinfo)
1991 fi
1992
1993 AC_MSG_CHECKING(whether malloc_usable_size is available)
1994 AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES [
1995 #ifdef HAVE_MALLOC_H
1996 #include <malloc.h>
1997 #endif
1998 #ifdef HAVE_MALLOC_MALLOC_H
1999 #include <malloc/malloc.h>
2000 #endif
2001 ]], [[
2002 size_t ac_x; ac_x = malloc_usable_size(NULL);
2003 ]])], [
2004 AC_MSG_RESULT(yes)
2005 AC_DEFINE(HAVE_MALLOC_USABLE_SIZE,,malloc_usable_size)
2006 ], [
2007 AC_MSG_RESULT(no)
2008
2009 AC_MSG_CHECKING(whether malloc_size is available)
2010 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
2011 #ifdef HAVE_MALLOC_H
2012 #include <malloc.h>
2013 #endif
2014 #ifdef HAVE_MALLOC_MALLOC_H
2015 #include <malloc/malloc.h>
2016 #endif
2017 ]], [[
2018 size_t ac_x; ac_x = malloc_size(NULL);
2019 ]])], [
2020 AC_MSG_RESULT(yes)
2021 AC_DEFINE(HAVE_MALLOC_SIZE,,malloc_size)
2022 ], [
2023 AC_MSG_RESULT(no)
2024 ])
2025 ])
2026
2027 dnl ------
2028 dnl ZeroMQ
2029 dnl ------
2030 if test "x$enable_zeromq" != "xno"; then
2031 PKG_CHECK_MODULES(ZEROMQ, [libzmq >= 4.0.0], [
2032 AC_DEFINE(HAVE_ZEROMQ, 1, [Enable ZeroMQ support])
2033 ZEROMQ=true
2034 ], [
2035 if test "x$enable_zeromq" = "xyes"; then
2036 AC_MSG_ERROR([configuration specifies --enable-zeromq but libzmq was not found])
2037 fi
2038 ])
2039 fi
2040 AM_CONDITIONAL([ZEROMQ], test "x$ZEROMQ" = "xtrue")
2041
2042 dnl ----------
2043 dnl configure date
2044 dnl ----------
2045 dev_version=`echo $VERSION | grep dev`
2046 #don't expire deprecated code in non 'dev' branch
2047 if test "${dev_version}" = ""; then
2048 CONFDATE=0
2049 else
2050 CONFDATE=`date '+%Y%m%d'`
2051 fi
2052 AC_SUBST(CONFDATE)
2053
2054 dnl ------------------------------
2055 dnl set paths for state directory
2056 dnl ------------------------------
2057 AC_MSG_CHECKING(directory to use for state file)
2058 if test "${prefix}" = "NONE"; then
2059 frr_statedir_prefix="";
2060 else
2061 frr_statedir_prefix=${prefix}
2062 fi
2063 if test "${localstatedir}" = '${prefix}/var'; then
2064 for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
2065 ${frr_statedir_prefix}/var/adm dnl
2066 ${frr_statedir_prefix}/etc dnl
2067 /var/run dnl
2068 /var/adm dnl
2069 /etc dnl
2070 /dev/null;
2071 do
2072 test -d $FRR_STATE_DIR && break
2073 done
2074 frr_statedir=$FRR_STATE_DIR
2075 else
2076 frr_statedir=${localstatedir}
2077 fi
2078 if test $frr_statedir = "/dev/null"; then
2079 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
2080 fi
2081 AC_MSG_RESULT(${frr_statedir})
2082 AC_SUBST(frr_statedir)
2083
2084 AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
2085 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
2086 AC_DEFINE_UNQUOTED(BFDD_CONTROL_SOCKET, "$frr_statedir/bfdd.sock", bfdd control socket)
2087 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
2088 AC_DEFINE_UNQUOTED(DAEMON_DB_DIR, "$frr_statedir",daemon database directory)
2089
2090 dnl autoconf does this, but it does it too late...
2091 test "x$prefix" = xNONE && prefix=$ac_default_prefix
2092 test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
2093
2094 dnl get the full path, recursing through variables...
2095 vtysh_bin="$bindir/vtysh"
2096 for I in 1 2 3 4 5 6 7 8 9 10; do
2097 eval vtysh_bin="\"$vtysh_bin\""
2098 done
2099 AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
2100 AC_SUBST(vtysh_bin)
2101
2102 CFG_SYSCONF="$sysconfdir"
2103 CFG_SBIN="$sbindir"
2104 CFG_STATE="$frr_statedir"
2105 CFG_MODULE="$moduledir"
2106 CFG_YANGMODELS="$yangmodelsdir"
2107 CFG_LIBYANG_PLUGINS="$libyang_pluginsdir"
2108 for I in 1 2 3 4 5 6 7 8 9 10; do
2109 eval CFG_SYSCONF="\"$CFG_SYSCONF\""
2110 eval CFG_SBIN="\"$CFG_SBIN\""
2111 eval CFG_STATE="\"$CFG_STATE\""
2112 eval CFG_MODULE="\"$CFG_MODULE\""
2113 eval CFG_YANGMODELS="\"$CFG_YANGMODELS\""
2114 eval CFG_LIBYANG_PLUGINS="\"$CFG_LIBYANG_PLUGINS\""
2115 done
2116 AC_SUBST(CFG_SYSCONF)
2117 AC_SUBST(CFG_SBIN)
2118 AC_SUBST(CFG_STATE)
2119 AC_SUBST(CFG_MODULE)
2120 AC_SUBST(CFG_YANGMODELS)
2121 AC_SUBST(CFG_LIBYANG_PLUGINS)
2122 AC_DEFINE_UNQUOTED(MODULE_PATH, "$CFG_MODULE", path to modules)
2123 AC_DEFINE_UNQUOTED(YANG_MODELS_PATH, "$CFG_YANGMODELS", path to YANG data models)
2124 AC_DEFINE_UNQUOTED(LIBYANG_PLUGINS_PATH, "$CFG_LIBYANG_PLUGINS", path to libyang plugins)
2125
2126 dnl ------------------------------------
2127 dnl Enable RPKI and add librtr to libs
2128 dnl ------------------------------------
2129 if test "${enable_rpki}" = "yes"; then
2130 PKG_CHECK_MODULES(RTRLIB,[rtrlib >= 0.5.0],
2131 [RPKI=true],
2132 [RPKI=false
2133 AC_MSG_ERROR([rtrlib was not found on your system or is too old.])]
2134 )
2135 fi
2136 AM_CONDITIONAL([RPKI], test "x$RPKI" = "xtrue")
2137
2138 dnl ------------------------------------------
2139 dnl Check whether rtrlib was build with ssh support
2140 dnl ------------------------------------------
2141 AC_MSG_CHECKING([whether the RTR Library is compiled with SSH])
2142 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "rtrlib/rtrlib.h"]],
2143 [[struct tr_ssh_config config;]])],
2144 [AC_MSG_RESULT(yes)
2145 AC_DEFINE(FOUND_SSH,,found_ssh)],
2146 AC_MSG_RESULT(no)
2147 )
2148
2149 dnl ---------------------------
2150 dnl Check htonl works correctly
2151 dnl ---------------------------
2152 AC_MSG_CHECKING(for working htonl)
2153 AC_CACHE_VAL(ac_cv_htonl_works,
2154 [AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
2155 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
2156 ]
2157 )
2158 AC_MSG_RESULT($ac_cv_htonl_works)
2159
2160 AC_CONFIG_FILES([Makefile],[sed -e 's/^#AUTODERP# //' -i Makefile])
2161
2162 AC_CONFIG_FILES([
2163 config.version
2164 redhat/frr.spec
2165 solaris/Makefile
2166 debianpkg/changelog
2167 alpine/APKBUILD
2168 snapcraft/snapcraft.yaml
2169 lib/version.h
2170 tests/lib/cli/test_cli.refout
2171 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
2172 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh
2173 pkgsrc/eigrpd.sh])
2174
2175 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
2176 AC_CONFIG_FILES([tools/frr],[chmod +x tools/frr])
2177
2178 AC_CONFIG_COMMANDS([lib/route_types.h], [
2179 dst="${ac_abs_top_builddir}/lib/route_types.h"
2180 ${PERL} "${ac_abs_top_srcdir}/lib/route_types.pl" \
2181 < "${ac_abs_top_srcdir}/lib/route_types.txt" \
2182 > "${dst}.tmp"
2183 test -f "${dst}" \
2184 && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
2185 && rm "${dst}.tmp" \
2186 || mv "${dst}.tmp" "${dst}"
2187 ], [
2188 PERL="$PERL"
2189 ])
2190
2191 AS_IF([test "x$with_pkg_git_version" = "xyes"], [
2192 AC_CONFIG_COMMANDS([lib/gitversion.h], [
2193 dst="${ac_abs_top_builddir}/lib/gitversion.h"
2194 ${PERL} "${ac_abs_top_srcdir}/lib/gitversion.pl" \
2195 "${ac_abs_top_srcdir}" \
2196 > "${dst}.tmp"
2197 test -f "${dst}" \
2198 && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
2199 && rm "${dst}.tmp" \
2200 || mv "${dst}.tmp" "${dst}"
2201 ], [
2202 PERL="$PERL"
2203 ])
2204 ])
2205
2206 ## Hack, but working solution to avoid rebuilding of frr.info.
2207 ## It's already in CVS until texinfo 4.7 is more common.
2208 AC_OUTPUT
2209
2210 echo "
2211 FRRouting configuration
2212 ------------------------------
2213 FRR version : ${PACKAGE_VERSION}
2214 host operating system : ${host_os}
2215 source code location : ${srcdir}
2216 compiler : ${CC}
2217 compiler flags : ${CFLAGS} ${SAN_FLAGS}
2218 make : ${MAKE-make}
2219 linker flags : ${LDFLAGS} ${SAN_FLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
2220 state file directory : ${frr_statedir}
2221 config file directory : `eval echo \`echo ${sysconfdir}\``
2222 example directory : `eval echo \`echo ${exampledir}\``
2223 module directory : ${CFG_MODULE}
2224 user to run as : ${enable_user}
2225 group to run as : ${enable_group}
2226 group for vty sockets : ${enable_vty_group}
2227 config file mask : ${enable_configfile_mask}
2228 log file mask : ${enable_logfile_mask}
2229 zebra protobuf enabled : ${enable_protobuf:-no}
2230
2231 The above user and group must have read/write access to the state file
2232 directory and to the config files in the config file directory."
2233
2234 if test "${enable_doc}" != "no";then
2235 AS_IF([test "$SPHINXBUILD" = /bin/false],
2236 AC_MSG_WARN(sphinx-build is missing but required to build documentation))
2237 fi