1 dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
3 define(_CLIENT_VERSION_MAJOR, 0)
4 define(_CLIENT_VERSION_MINOR, 15)
5 define(_CLIENT_VERSION_REVISION, 99)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_IS_RELEASE, false)
8 define(_COPYRIGHT_YEAR, 2017)
9 define(_COPYRIGHT_HOLDERS,[The %s developers])
10 define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Bitcoin Core]])
11 AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/bitcoin/bitcoin/issues],[bitcoin],[https://bitcoincore.org/])
12 AC_CONFIG_SRCDIR([src/validation.cpp])
13 AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
14 AC_CONFIG_AUX_DIR([build-aux])
15 AC_CONFIG_MACRO_DIR([build-aux/m4])
17 BITCOIN_DAEMON_NAME=bitcoind
18 BITCOIN_GUI_NAME=bitcoin-qt
19 BITCOIN_CLI_NAME=bitcoin-cli
20 BITCOIN_TX_NAME=bitcoin-tx
22 dnl Unless the user specified ARFLAGS, force it to be cr
23 AC_ARG_VAR(ARFLAGS, [Flags for the archiver, defaults to <cr> if not set])
24 if test "x${ARFLAGS+set}" != "xset"; then
30 AH_TOP([#ifndef BITCOIN_CONFIG_H])
31 AH_TOP([#define BITCOIN_CONFIG_H])
32 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
34 dnl faketime breaks configure and is only needed for make. Disable it here.
37 dnl Automake init set-up and checks
38 AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
40 dnl faketime messes with timestamps and causes configure to be re-run.
41 dnl --disable-maintainer-mode can be used to bypass this.
42 AM_MAINTAINER_MODE([enable])
44 dnl make the compilation flags quiet unless V=1 is used
45 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
47 dnl Compiler checks (here before libtool).
48 if test "x${CXXFLAGS+set}" = "xset"; then
49 CXXFLAGS_overridden=yes
51 CXXFLAGS_overridden=no
55 dnl By default, libtool for mingw refuses to link static libs into a dll for
56 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
57 dnl we have those under control, re-enable that functionality.
60 lt_cv_deplibs_check_method="pass_all"
63 dnl Require C++11 compiler (no GNU extensions)
64 AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory], [nodefault])
65 dnl Check if -latomic is required for <std::atomic>
68 dnl Unless the user specified OBJCXX, force it to be the same as CXX. This ensures
69 dnl that we get the same -std flags for both.
70 m4_ifdef([AC_PROG_OBJCXX],[
71 if test "x${OBJCXX+set}" = "x"; then
77 dnl Libtool init checks.
80 dnl Check/return PATH for base programs.
82 AC_PATH_TOOL(RANLIB, ranlib)
83 AC_PATH_TOOL(STRIP, strip)
84 AC_PATH_TOOL(GCOV, gcov)
85 AC_PATH_PROG(LCOV, lcov)
86 dnl Python 3.x is supported from 3.4 on (see https://github.com/bitcoin/bitcoin/issues/7893)
87 AC_PATH_PROGS([PYTHON], [python3.6 python3.5 python3.4 python3 python2.7 python2 python])
88 AC_PATH_PROG(GENHTML, genhtml)
89 AC_PATH_PROG([GIT], [git])
90 AC_PATH_PROG(CCACHE,ccache)
91 AC_PATH_PROG(XGETTEXT,xgettext)
92 AC_PATH_PROG(HEXDUMP,hexdump)
93 AC_PATH_TOOL(READELF, readelf)
94 AC_PATH_TOOL(CPPFILT, c++filt)
95 AC_PATH_TOOL(OBJCOPY, objcopy)
97 AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files)
100 AC_ARG_ENABLE([wallet],
101 [AS_HELP_STRING([--disable-wallet],
102 [disable wallet (enabled by default)])],
103 [enable_wallet=$enableval],
106 AC_ARG_WITH([miniupnpc],
107 [AS_HELP_STRING([--with-miniupnpc],
108 [enable UPNP (default is yes if libminiupnpc is found)])],
112 AC_ARG_ENABLE([upnp-default],
113 [AS_HELP_STRING([--enable-upnp-default],
114 [if UPNP is enabled, turn it on at startup (default is no)])],
115 [use_upnp_default=$enableval],
116 [use_upnp_default=no])
119 AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
120 [use_tests=$enableval],
123 AC_ARG_ENABLE(gui-tests,
124 AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)]),
125 [use_gui_tests=$enableval],
126 [use_gui_tests=$use_tests])
129 AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]),
130 [use_bench=$enableval],
133 AC_ARG_ENABLE([extended-functional-tests],
134 AS_HELP_STRING([--enable-extended-functional-tests],[enable expensive functional tests when using lcov (default no)]),
135 [use_extended_functional_tests=$enableval],
136 [use_extended_functional_tests=no])
138 AC_ARG_WITH([qrencode],
139 [AS_HELP_STRING([--with-qrencode],
140 [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
144 AC_ARG_ENABLE([hardening],
145 [AS_HELP_STRING([--disable-hardening],
146 [do not attempt to harden the resulting executables (default is to harden)])],
147 [use_hardening=$enableval],
150 AC_ARG_ENABLE([reduce-exports],
151 [AS_HELP_STRING([--enable-reduce-exports],
152 [attempt to reduce exported symbols in the resulting executables (default is no)])],
153 [use_reduce_exports=$enableval],
154 [use_reduce_exports=no])
156 AC_ARG_ENABLE([ccache],
157 [AS_HELP_STRING([--disable-ccache],
158 [do not use ccache for building (default is to use if found)])],
159 [use_ccache=$enableval],
162 AC_ARG_ENABLE([lcov],
163 [AS_HELP_STRING([--enable-lcov],
164 [enable lcov testing (default is no)])],
165 [use_lcov=$enableval],
168 AC_ARG_ENABLE([lcov-branch-coverage],
169 [AS_HELP_STRING([--enable-lcov-branch-coverage],
170 [enable lcov testing branch coverage (default is no)])],
171 [use_lcov_branch=yes],
172 [use_lcov_branch=no])
174 AC_ARG_ENABLE([glibc-back-compat],
175 [AS_HELP_STRING([--enable-glibc-back-compat],
176 [enable backwards compatibility with glibc])],
177 [use_glibc_compat=$enableval],
178 [use_glibc_compat=no])
181 [AS_HELP_STRING([--enable-asm],
182 [Enable assembly routines (default is yes)])],
183 [use_asm=$enableval],
186 if test "x$use_asm" = xyes; then
187 AC_DEFINE(USE_ASM, 1, [Define this symbol to build in assembly routines])
190 AC_ARG_WITH([system-univalue],
191 [AS_HELP_STRING([--with-system-univalue],
192 [Build with system UniValue (default is no)])],
193 [system_univalue=$withval],
197 [AS_HELP_STRING([--disable-zmq],
198 [disable ZMQ notifications])],
199 [use_zmq=$enableval],
202 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
205 [AS_HELP_STRING([--disable-man],
206 [do not install man pages (default is to install)])],,
208 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
211 AC_ARG_ENABLE([debug],
212 [AS_HELP_STRING([--enable-debug],
213 [use debug compiler flags and macros (default is no)])],
214 [enable_debug=$enableval],
217 # Turn warnings into errors
218 AC_ARG_ENABLE([werror],
219 [AS_HELP_STRING([--enable-werror],
220 [Treat certain compiler warnings as errors (default is no)])],
221 [enable_werror=$enableval],
225 AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
227 if test "x$enable_debug" = xyes; then
228 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
229 if test "x$GCC" = xyes; then
230 CFLAGS="$CFLAGS -g3 -O0"
233 if test "x$GXX" = xyes; then
234 CXXFLAGS="$CXXFLAGS -g3 -O0"
239 if test "x$enable_werror" = "xyes"; then
240 if test "x$CXXFLAG_WERROR" = "x"; then
241 AC_MSG_ERROR("enable-werror set but -Werror is not usable")
243 AX_CHECK_COMPILE_FLAG([-Werror=vla],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=vla"],,[[$CXXFLAG_WERROR]])
244 AX_CHECK_COMPILE_FLAG([-Werror=thread-safety-analysis],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=thread-safety-analysis"],,[[$CXXFLAG_WERROR]])
247 if test "x$CXXFLAGS_overridden" = "xno"; then
248 AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
249 AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
250 AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
251 AX_CHECK_COMPILE_FLAG([-Wvla],[CXXFLAGS="$CXXFLAGS -Wvla"],,[[$CXXFLAG_WERROR]])
252 AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
253 AX_CHECK_COMPILE_FLAG([-Wthread-safety-analysis],[CXXFLAGS="$CXXFLAGS -Wthread-safety-analysis"],,[[$CXXFLAG_WERROR]])
255 ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
256 ## unknown options if any other warning is produced. Test the -Wfoo case, and
257 ## set the -Wno-foo case if it works.
258 AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
259 AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
260 AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
261 AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
262 AX_CHECK_COMPILE_FLAG([-Wimplicit-fallthrough],[CXXFLAGS="$CXXFLAGS -Wno-implicit-fallthrough"],,[[$CXXFLAG_WERROR]])
265 # Check for optional instruction set support. Enabling these does _not_ imply that all code will
266 # be compiled with them, rather that specific objects/libs may use them after checking for runtime
268 AX_CHECK_COMPILE_FLAG([-msse4.2],[[SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]])
270 TEMP_CXXFLAGS="$CXXFLAGS"
271 CXXFLAGS="$CXXFLAGS $SSE42_CXXFLAGS"
272 AC_MSG_CHECKING(for assembler crc32 support)
273 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
275 #if defined(_MSC_VER)
277 #elif defined(__GNUC__) && defined(__SSE4_2__)
278 #include <nmmintrin.h>
282 l = _mm_crc32_u8(l, 0);
283 l = _mm_crc32_u32(l, 0);
284 l = _mm_crc32_u64(l, 0);
287 [ AC_MSG_RESULT(yes); enable_hwcrc32=yes],
290 CXXFLAGS="$TEMP_CXXFLAGS"
292 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
295 [AS_HELP_STRING([--with-utils],
296 [build bitcoin-cli bitcoin-tx (default=yes)])],
297 [build_bitcoin_utils=$withval],
298 [build_bitcoin_utils=yes])
301 [AS_HELP_STRING([--with-libs],
302 [build libraries (default=yes)])],
303 [build_bitcoin_libs=$withval],
304 [build_bitcoin_libs=yes])
306 AC_ARG_WITH([daemon],
307 [AS_HELP_STRING([--with-daemon],
308 [build bitcoind daemon (default=yes)])],
309 [build_bitcoind=$withval],
310 [build_bitcoind=yes])
316 #pkgconfig does more harm than good with MinGW
320 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
321 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
322 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
323 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
324 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
325 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
326 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
327 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
328 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
329 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
330 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
331 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
332 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
333 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
334 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
335 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
336 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
337 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
338 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
340 # -static is interpreted by libtool, where it has a different meaning.
341 # In libtool-speak, it's -all-static.
342 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
344 AC_PATH_PROG([MAKENSIS], [makensis], none)
345 if test x$MAKENSIS = xnone; then
346 AC_MSG_WARN("makensis not found. Cannot create installer.")
349 AC_PATH_TOOL(WINDRES, windres, none)
350 if test x$WINDRES = xnone; then
351 AC_MSG_ERROR("windres not found")
354 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
355 LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
356 if test "x$CXXFLAGS_overridden" = "xno"; then
357 CXXFLAGS="$CXXFLAGS -w"
360 i?86-*) WINDOWS_BITS=32 ;;
361 x86_64-*) WINDOWS_BITS=64 ;;
362 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
364 AC_SUBST(WINDOWS_BITS)
366 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
367 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
368 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
369 dnl also overridden to prevent their insertion later.
370 dnl This should only affect dll's.
371 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
377 LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
378 if test x$cross_compiling != xyes; then
380 AC_CHECK_PROG([PORT],port, port)
381 if test x$PORT = xport; then
382 dnl add default macports paths
383 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
384 LIBS="$LIBS -L/opt/local/lib"
385 if test -d /opt/local/include/db48; then
386 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
387 LIBS="$LIBS -L/opt/local/lib/db48"
391 AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
392 AC_CHECK_PROG([BREW],brew, brew)
393 if test x$BREW = xbrew; then
394 dnl These Homebrew packages may be keg-only, meaning that they won't be found
395 dnl in expected paths because they may conflict with system files. Ask
396 dnl Homebrew where each one is located, then adjust paths accordingly.
397 dnl It's safe to add these paths even if the functionality is disabled by
398 dnl the user (--without-wallet or --without-gui for example).
400 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
401 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
402 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
403 if test x$openssl_prefix != x; then
404 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
405 export PKG_CONFIG_PATH
407 if test x$bdb_prefix != x; then
408 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
409 LIBS="$LIBS -L$bdb_prefix/lib"
411 if test x$qt5_prefix != x; then
412 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
413 export PKG_CONFIG_PATH
422 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
423 AC_PATH_TOOL([OTOOL], [otool], otool)
424 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
425 AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
426 AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
427 AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
429 dnl libtool will try to strip the static lib, which is a problem for
430 dnl cross-builds because strip attempts to call a hard-coded ld,
431 dnl which may not exist in the path. Stripping the .a is not
432 dnl necessary, so just disable it.
438 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
439 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
440 OBJCXXFLAGS="$CXXFLAGS"
444 LEVELDB_TARGET_FLAGS="-DOS_LINUX"
447 LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
450 LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
453 OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
454 AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
455 LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
459 if test x$use_pkgconfig = xyes; then
460 m4_ifndef([PKG_PROG_PKG_CONFIG], [AC_MSG_ERROR(PKG_PROG_PKG_CONFIG macro not found. Please install pkg-config and re-run autogen.sh.)])
461 m4_ifdef([PKG_PROG_PKG_CONFIG], [
463 if test x"$PKG_CONFIG" = "x"; then
464 AC_MSG_ERROR(pkg-config not found.)
469 if test x$use_extended_functional_tests != xno; then
470 AC_SUBST(EXTENDED_FUNCTIONAL_TESTS, --extended)
473 if test x$use_lcov = xyes; then
474 if test x$LCOV = x; then
475 AC_MSG_ERROR("lcov testing requested but lcov not found")
477 if test x$GCOV = x; then
478 AC_MSG_ERROR("lcov testing requested but gcov not found")
480 if test x$PYTHON = x; then
481 AC_MSG_ERROR("lcov testing requested but python not found")
483 if test x$GENHTML = x; then
484 AC_MSG_ERROR("lcov testing requested but genhtml not found")
486 LCOV="$LCOV --gcov-tool=$GCOV"
487 AX_CHECK_LINK_FLAG([[--coverage]], [LDFLAGS="$LDFLAGS --coverage"],
488 [AC_MSG_ERROR("lcov testing requested but --coverage linker flag does not work")])
489 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
490 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
491 AC_DEFINE(USE_COVERAGE, 1, [Define this symbol if coverage is enabled])
492 CXXFLAGS="$CXXFLAGS -Og"
495 if test x$use_lcov_branch != xno; then
496 AC_SUBST(LCOV_OPTS, "$LCOV_OPTS --rc lcov_branch_coverage=1")
499 dnl Check for endianness
502 dnl Check for pthread compile/link requirements
505 # The following macro will add the necessary defines to bitcoin-config.h, but
506 # they also need to be passed down to any subprojects. Pull the results out of
507 # the cache and add them to CPPFLAGS.
509 # detect POSIX or GNU variant of strerror_r
512 if test x$ac_cv_sys_file_offset_bits != x &&
513 test x$ac_cv_sys_file_offset_bits != xno &&
514 test x$ac_cv_sys_file_offset_bits != xunknown; then
515 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
518 if test x$ac_cv_sys_large_files != x &&
519 test x$ac_cv_sys_large_files != xno &&
520 test x$ac_cv_sys_large_files != xunknown; then
521 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
524 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
526 AX_GCC_FUNC_ATTRIBUTE([visibility])
527 AX_GCC_FUNC_ATTRIBUTE([dllexport])
528 AX_GCC_FUNC_ATTRIBUTE([dllimport])
530 if test x$use_glibc_compat != xno; then
532 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
533 #in anyway for back-compat.
534 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
536 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
537 # See which one is present here.
538 AC_MSG_CHECKING(__fdelt_chk type)
539 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
540 #undef _FORTIFY_SOURCE
542 #define _FORTIFY_SOURCE 2
543 #include <sys/select.h>
544 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
545 [ fdelt_type="long unsigned int"],
546 [ fdelt_type="long int"])
547 AC_MSG_RESULT($fdelt_type)
548 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
550 AC_SEARCH_LIBS([clock_gettime],[rt])
553 if test x$TARGET_OS != xwindows; then
554 # All windows code is PIC, forcing it on just adds useless compile warnings
555 AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
558 if test x$use_hardening != xno; then
559 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
560 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
562 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
563 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
564 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
566 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
569 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
570 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
571 AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"])
572 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
573 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
575 if test x$TARGET_OS != xwindows; then
576 AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
577 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
582 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
587 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
588 if test x$TARGET_OS = xdarwin; then
589 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
592 AC_CHECK_HEADERS([endian.h sys/endian.h byteswap.h stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h sys/select.h sys/prctl.h])
594 AC_CHECK_DECLS([strnlen])
596 # Check for daemon(3), unrelated to --with-daemon (although used by it)
597 AC_CHECK_DECLS([daemon])
599 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
602 #elif HAVE_SYS_ENDIAN_H
603 #include <sys/endian.h>
606 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
608 #include <byteswap.h>
611 AC_CHECK_DECLS([__builtin_clz, __builtin_clzl, __builtin_clzll])
613 dnl Check for MSG_NOSIGNAL
614 AC_MSG_CHECKING(for MSG_NOSIGNAL)
615 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
616 [[ int f = MSG_NOSIGNAL; ]])],
617 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
621 dnl Check for MSG_DONTWAIT
622 AC_MSG_CHECKING(for MSG_DONTWAIT)
623 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
624 [[ int f = MSG_DONTWAIT; ]])],
625 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_DONTWAIT, 1,[Define this symbol if you have MSG_DONTWAIT]) ],
629 dnl Check for malloc_info (for memory statistics information in getmemoryinfo)
630 AC_MSG_CHECKING(for getmemoryinfo)
631 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
632 [[ int f = malloc_info(0, NULL); ]])],
633 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOC_INFO, 1,[Define this symbol if you have malloc_info]) ],
637 dnl Check for mallopt(M_ARENA_MAX) (to set glibc arenas)
638 AC_MSG_CHECKING(for mallopt M_ARENA_MAX)
639 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
640 [[ mallopt(M_ARENA_MAX, 1); ]])],
641 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOPT_ARENA_MAX, 1,[Define this symbol if you have mallopt with M_ARENA_MAX]) ],
645 AC_MSG_CHECKING([for visibility attribute])
646 AC_LINK_IFELSE([AC_LANG_SOURCE([
647 int foo_def( void ) __attribute__((visibility("default")));
651 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
656 if test x$use_reduce_exports = xyes; then
657 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
662 TEMP_LDFLAGS="$LDFLAGS"
663 LDFLAGS="$TEMP_LDFLAGS $PTHREAD_CFLAGS"
664 AC_MSG_CHECKING([for thread_local support])
665 AC_LINK_IFELSE([AC_LANG_SOURCE([
667 static thread_local int foo = 0;
668 static void run_thread() { foo++;}
670 for(int i = 0; i < 10; i++) { std::thread(run_thread).detach();}
675 AC_DEFINE(HAVE_THREAD_LOCAL,1,[Define if thread_local is supported.])
682 LDFLAGS="$TEMP_LDFLAGS"
684 # Check for different ways of gathering OS randomness
685 AC_MSG_CHECKING(for Linux getrandom syscall)
686 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
687 #include <sys/syscall.h>
688 #include <linux/random.h>]],
689 [[ syscall(SYS_getrandom, nullptr, 32, 0); ]])],
690 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_GETRANDOM, 1,[Define this symbol if the Linux getrandom system call is available]) ],
694 AC_MSG_CHECKING(for getentropy)
695 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
696 [[ getentropy(nullptr, 32) ]])],
697 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_GETENTROPY, 1,[Define this symbol if the BSD getentropy system call is available]) ],
701 AC_MSG_CHECKING(for getentropy via random.h)
702 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
703 #include <sys/random.h>]],
704 [[ getentropy(nullptr, 32) ]])],
705 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_GETENTROPY_RAND, 1,[Define this symbol if the BSD getentropy system call is available with sys/random.h]) ],
709 AC_MSG_CHECKING(for sysctl KERN_ARND)
710 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
711 #include <sys/sysctl.h>]],
712 [[ static const int name[2] = {CTL_KERN, KERN_ARND};
713 sysctl(name, 2, nullptr, nullptr, nullptr, 0); ]])],
714 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL_ARND, 1,[Define this symbol if the BSD sysctl(KERN_ARND) is available]) ],
718 # Check for reduced exports
719 if test x$use_reduce_exports = xyes; then
720 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
721 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
727 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
728 AC_SUBST(LEVELDB_CPPFLAGS)
732 if test x$enable_wallet != xno; then
733 dnl Check for libdb_cxx only if wallet enabled
737 dnl Check for libminiupnpc (optional)
738 if test x$use_upnp != xno; then
740 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
741 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
748 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
749 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
751 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
757 if test x$use_boost = xyes; then
759 dnl Minimum required Boost version
760 define(MINIMUM_REQUIRED_BOOST, 1.47.0)
762 dnl Check for boost libs
763 AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
766 AX_BOOST_PROGRAM_OPTIONS
770 dnl Boost 1.56 through 1.62 allow using std::atomic instead of its own atomic
771 dnl counter implementations. In 1.63 and later the std::atomic approach is default.
772 m4_pattern_allow(DBOOST_AC_USE_STD_ATOMIC) dnl otherwise it's treated like a macro
773 BOOST_CPPFLAGS="-DBOOST_SP_USE_STD_ATOMIC -DBOOST_AC_USE_STD_ATOMIC $BOOST_CPPFLAGS"
775 if test x$use_reduce_exports = xyes; then
776 AC_MSG_CHECKING([for working boost reduced exports])
777 TEMP_CPPFLAGS="$CPPFLAGS"
778 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
779 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
780 @%:@include <boost/version.hpp>
782 #if BOOST_VERSION >= 104900
783 // Everything is okay
785 # error Boost version is too old
790 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
792 CPPFLAGS="$TEMP_CPPFLAGS"
796 if test x$use_reduce_exports = xyes; then
797 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
798 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
801 if test x$use_tests = xyes; then
803 if test x$HEXDUMP = x; then
804 AC_MSG_ERROR(hexdump is required for tests)
808 if test x$use_boost = xyes; then
810 AX_BOOST_UNIT_TEST_FRAMEWORK
812 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
813 AC_MSG_CHECKING([for dynamic linked boost test])
815 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
816 TEMP_CPPFLAGS="$CPPFLAGS"
817 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
818 AC_LINK_IFELSE([AC_LANG_SOURCE([
819 #define BOOST_TEST_DYN_LINK
820 #define BOOST_TEST_MAIN
821 #include <boost/test/unit_test.hpp>
825 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
828 CPPFLAGS="$TEMP_CPPFLAGS"
833 if test x$use_boost = xyes; then
835 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
838 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
839 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
840 dnl the abi. This was fixed in 1.57.
842 dnl When building against that installed version using c++11, the headers pick up
843 dnl on the native c++11 scoped enum support and enable it, however it will fail to
844 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
846 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
849 LIBS="$BOOST_LIBS $LIBS"
850 TEMP_CPPFLAGS="$CPPFLAGS"
851 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
852 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
853 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
854 #include <boost/config.hpp>
855 #include <boost/version.hpp>
856 #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
857 #define BOOST_NO_SCOPED_ENUMS
858 #define BOOST_NO_CXX11_SCOPED_ENUMS
861 #include <boost/filesystem.hpp>
864 boost::filesystem::copy_file("foo", "bar");
869 [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
871 CPPFLAGS="$TEMP_CPPFLAGS"
873 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
874 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
875 dnl a working version is available, else fall back to sleep. sleep was removed
877 dnl If neither is available, abort.
879 LIBS="$BOOST_LIBS $LIBS"
880 TEMP_CPPFLAGS="$CPPFLAGS"
881 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
882 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
883 #include <boost/thread/thread.hpp>
884 #include <boost/version.hpp>
886 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
887 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
893 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
896 CPPFLAGS="$TEMP_CPPFLAGS"
898 if test x$boost_sleep != xyes; then
900 LIBS="$BOOST_LIBS $LIBS"
901 TEMP_CPPFLAGS="$CPPFLAGS"
902 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
903 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
904 #include <boost/version.hpp>
905 #include <boost/thread.hpp>
906 #include <boost/date_time/posix_time/posix_time_types.hpp>
908 #if BOOST_VERSION <= 105600
909 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
914 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
917 CPPFLAGS="$TEMP_CPPFLAGS"
920 if test x$boost_sleep != xyes; then
921 AC_MSG_ERROR(No working boost sleep implementation found.)
926 if test x$use_pkgconfig = xyes; then
931 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
932 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
933 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
934 if test x$use_qr != xno; then
935 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
937 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
938 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
939 if test x$TARGET_OS != xwindows; then
940 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
944 if test "x$use_zmq" = "xyes"; then
945 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
946 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
947 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
948 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
951 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
956 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
957 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
959 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
960 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
962 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
963 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
964 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
965 if test x$TARGET_OS != xwindows; then
966 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
970 if test "x$use_zmq" = "xyes"; then
971 AC_CHECK_HEADER([zmq.h],
972 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
973 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
975 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
976 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
977 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
979 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
981 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
984 if test "x$use_zmq" = "xyes"; then
985 dnl Assume libzmq was built for static linking
988 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
993 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
994 if test x$use_qr != xno; then
995 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
996 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
1000 save_CXXFLAGS="${CXXFLAGS}"
1001 CXXFLAGS="${CXXFLAGS} ${CRYPTO_CFLAGS} ${SSL_CFLAGS}"
1002 AC_CHECK_DECLS([EVP_MD_CTX_new],,,[AC_INCLUDES_DEFAULT
1003 #include <openssl/x509_vfy.h>
1005 CXXFLAGS="${save_CXXFLAGS}"
1009 need_bundled_univalue=yes
1011 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
1012 need_bundled_univalue=no
1015 if test x$system_univalue != xno ; then
1017 if test x$use_pkgconfig = xyes; then
1020 [PKG_CHECK_MODULES],
1022 PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
1026 AC_CHECK_HEADER([univalue.h],[
1027 AC_CHECK_LIB([univalue], [main],[
1028 UNIVALUE_LIBS=-lunivalue
1034 if test x$found_univalue = xyes ; then
1036 need_bundled_univalue=no
1037 elif test x$system_univalue = xyes ; then
1038 AC_MSG_ERROR([univalue not found])
1044 if test x$need_bundled_univalue = xyes ; then
1045 UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
1046 UNIVALUE_LIBS='univalue/libunivalue.la'
1051 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
1052 AC_SUBST(UNIVALUE_CFLAGS)
1053 AC_SUBST(UNIVALUE_LIBS)
1055 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
1057 AC_MSG_CHECKING([whether to build bitcoind])
1058 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
1059 AC_MSG_RESULT($build_bitcoind)
1061 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
1062 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
1063 AC_MSG_RESULT($build_bitcoin_utils)
1065 AC_MSG_CHECKING([whether to build libraries])
1066 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
1067 if test x$build_bitcoin_libs = xyes; then
1068 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
1069 AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
1071 AC_MSG_RESULT($build_bitcoin_libs)
1075 if test "x$use_ccache" != "xno"; then
1076 AC_MSG_CHECKING(if ccache should be used)
1077 if test x$CCACHE = x; then
1078 if test "x$use_ccache" = "xyes"; then
1079 AC_MSG_ERROR([ccache not found.]);
1085 CC="$ac_cv_path_CCACHE $CC"
1086 CXX="$ac_cv_path_CCACHE $CXX"
1088 AC_MSG_RESULT($use_ccache)
1090 if test "x$use_ccache" = "xyes"; then
1091 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
1095 AC_MSG_CHECKING([if wallet should be enabled])
1096 if test x$enable_wallet != xno; then
1098 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
1104 dnl enable upnp support
1105 AC_MSG_CHECKING([whether to build with support for UPnP])
1106 if test x$have_miniupnpc = xno; then
1107 if test x$use_upnp = xyes; then
1108 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
1112 if test x$use_upnp != xno; then
1114 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
1117 if test x$use_upnp_default != xno; then
1118 use_upnp_default=yes
1121 AC_MSG_RESULT($use_upnp_default)
1122 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
1123 if test x$TARGET_OS = xwindows; then
1124 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
1131 dnl these are only used when qt is enabled
1133 if test x$bitcoin_enable_qt != xno; then
1134 dnl enable dbus support
1135 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
1136 if test x$bitcoin_enable_qt_dbus != xno; then
1137 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
1139 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
1141 dnl enable qr support
1142 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
1143 if test x$have_qrencode = xno; then
1144 if test x$use_qr = xyes; then
1145 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
1149 if test x$use_qr != xno; then
1151 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
1158 if test x$XGETTEXT = x; then
1159 AC_MSG_WARN("xgettext is required to update qt translations")
1162 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
1163 if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
1164 AC_MSG_RESULT([yes])
1171 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
1173 AC_MSG_CHECKING([whether to build test_bitcoin])
1174 if test x$use_tests = xyes; then
1175 AC_MSG_RESULT([yes])
1182 AC_MSG_CHECKING([whether to reduce exports])
1183 if test x$use_reduce_exports = xyes; then
1184 AC_MSG_RESULT([yes])
1189 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1190 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1193 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1194 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1195 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1196 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1197 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1198 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1199 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1200 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1201 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1202 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1203 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1204 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1205 AM_CONDITIONAL([ENABLE_HWCRC32],[test x$enable_hwcrc32 = xyes])
1206 AM_CONDITIONAL([USE_ASM],[test x$use_asm = xyes])
1208 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1209 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1210 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1211 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1212 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1213 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1214 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1215 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1216 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1217 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1218 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1219 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1220 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1221 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1222 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1223 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1224 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1225 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1226 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1227 AC_SUBST(BITCOIN_DAEMON_NAME)
1228 AC_SUBST(BITCOIN_GUI_NAME)
1229 AC_SUBST(BITCOIN_CLI_NAME)
1230 AC_SUBST(BITCOIN_TX_NAME)
1233 AC_SUBST(ERROR_CXXFLAGS)
1234 AC_SUBST(HARDENED_CXXFLAGS)
1235 AC_SUBST(HARDENED_CPPFLAGS)
1236 AC_SUBST(HARDENED_LDFLAGS)
1239 AC_SUBST(SSE42_CXXFLAGS)
1240 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1242 AC_SUBST(USE_QRCODE)
1243 AC_SUBST(BOOST_LIBS)
1245 AC_SUBST(LEVELDB_TARGET_FLAGS)
1246 AC_SUBST(MINIUPNPC_CPPFLAGS)
1247 AC_SUBST(MINIUPNPC_LIBS)
1248 AC_SUBST(CRYPTO_LIBS)
1250 AC_SUBST(EVENT_LIBS)
1251 AC_SUBST(EVENT_PTHREADS_LIBS)
1253 AC_SUBST(PROTOBUF_LIBS)
1255 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini])
1256 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1257 AC_CONFIG_FILES([doc/Doxyfile])
1258 AC_CONFIG_LINKS([contrib/filter-lcov.py:contrib/filter-lcov.py])
1259 AC_CONFIG_LINKS([test/functional/test_runner.py:test/functional/test_runner.py])
1260 AC_CONFIG_LINKS([test/util/bitcoin-util-test.py:test/util/bitcoin-util-test.py])
1262 dnl boost's m4 checks do something really nasty: they export these vars. As a
1263 dnl result, they leak into secp256k1's configure and crazy things happen.
1264 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1265 CPPFLAGS_TEMP="$CPPFLAGS"
1267 CPPFLAGS="$CPPFLAGS_TEMP"
1269 LDFLAGS_TEMP="$LDFLAGS"
1271 LDFLAGS="$LDFLAGS_TEMP"
1277 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1278 unset PKG_CONFIG_PATH
1279 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1281 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1282 unset PKG_CONFIG_LIBDIR
1283 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1285 if test x$need_bundled_univalue = xyes; then
1286 AC_CONFIG_SUBDIRS([src/univalue])
1289 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery --disable-jni"
1290 AC_CONFIG_SUBDIRS([src/secp256k1])
1294 dnl Taken from https://wiki.debian.org/RpathIssue
1297 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1298 sed < libtool > libtool-2 \
1299 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1300 mv libtool-2 libtool
1305 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1308 sed 's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/' test/config.ini > test/config-2.ini
1309 mv test/config-2.ini test/config.ini
1314 echo "Options used to compile and link:"
1315 echo " with wallet = $enable_wallet"
1316 echo " with gui / qt = $bitcoin_enable_qt"
1317 if test x$bitcoin_enable_qt != xno; then
1318 echo " qt version = $bitcoin_qt_got_major_vers"
1319 echo " with qr = $use_qr"
1321 echo " with zmq = $use_zmq"
1322 echo " with test = $use_tests"
1323 echo " with bench = $use_bench"
1324 echo " with upnp = $use_upnp"
1325 echo " use asm = $use_asm"
1326 echo " debug enabled = $enable_debug"
1327 echo " werror = $enable_werror"
1329 echo " target os = $TARGET_OS"
1330 echo " build os = $BUILD_OS"
1333 echo " CFLAGS = $CFLAGS"
1334 echo " CPPFLAGS = $CPPFLAGS"
1336 echo " CXXFLAGS = $CXXFLAGS"
1337 echo " LDFLAGS = $LDFLAGS"
1338 echo " ARFLAGS = $ARFLAGS"