1 dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
3 define(_CLIENT_VERSION_MAJOR, 0)
4 define(_CLIENT_VERSION_MINOR, 14)
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)])],
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])
180 AC_ARG_ENABLE([experimental-asm],
181 [AS_HELP_STRING([--enable-experimental-asm],
182 [Enable experimental assembly routines (default is no)])],
183 [experimental_asm=$enableval],
184 [experimental_asm=no])
186 if test "x$experimental_asm" = xyes; then
187 AC_DEFINE(EXPERIMENTAL_ASM, 1, [Define this symbol to build in experimental 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]])
246 if test "x$CXXFLAGS_overridden" = "xno"; then
247 AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
248 AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
249 AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
250 AX_CHECK_COMPILE_FLAG([-Wvla],[CXXFLAGS="$CXXFLAGS -Wvla"],,[[$CXXFLAG_WERROR]])
251 AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
253 ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
254 ## unknown options if any other warning is produced. Test the -Wfoo case, and
255 ## set the -Wno-foo case if it works.
256 AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
257 AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
258 AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
259 AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
260 AX_CHECK_COMPILE_FLAG([-Wimplicit-fallthrough],[CXXFLAGS="$CXXFLAGS -Wno-implicit-fallthrough"],,[[$CXXFLAG_WERROR]])
263 # Check for optional instruction set support. Enabling these does _not_ imply that all code will
264 # be compiled with them, rather that specific objects/libs may use them after checking for runtime
266 AX_CHECK_COMPILE_FLAG([-msse4.2],[[SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]])
268 TEMP_CXXFLAGS="$CXXFLAGS"
269 CXXFLAGS="$CXXFLAGS $SSE42_CXXFLAGS"
270 AC_MSG_CHECKING(for assembler crc32 support)
271 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
273 #if defined(_MSC_VER)
275 #elif defined(__GNUC__) && defined(__SSE4_2__)
276 #include <nmmintrin.h>
280 l = _mm_crc32_u8(l, 0);
281 l = _mm_crc32_u32(l, 0);
282 l = _mm_crc32_u64(l, 0);
285 [ AC_MSG_RESULT(yes); enable_hwcrc32=yes],
288 CXXFLAGS="$TEMP_CXXFLAGS"
290 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
293 [AS_HELP_STRING([--with-utils],
294 [build bitcoin-cli bitcoin-tx (default=yes)])],
295 [build_bitcoin_utils=$withval],
296 [build_bitcoin_utils=yes])
299 [AS_HELP_STRING([--with-libs],
300 [build libraries (default=yes)])],
301 [build_bitcoin_libs=$withval],
302 [build_bitcoin_libs=yes])
304 AC_ARG_WITH([daemon],
305 [AS_HELP_STRING([--with-daemon],
306 [build bitcoind daemon (default=yes)])],
307 [build_bitcoind=$withval],
308 [build_bitcoind=yes])
314 #pkgconfig does more harm than good with MinGW
318 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
319 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
320 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
321 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
322 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
323 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
324 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
325 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
326 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
327 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
328 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
329 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
330 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
331 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
332 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
333 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
334 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
335 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
336 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
338 # -static is interpreted by libtool, where it has a different meaning.
339 # In libtool-speak, it's -all-static.
340 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
342 AC_PATH_PROG([MAKENSIS], [makensis], none)
343 if test x$MAKENSIS = xnone; then
344 AC_MSG_WARN("makensis not found. Cannot create installer.")
347 AC_PATH_TOOL(WINDRES, windres, none)
348 if test x$WINDRES = xnone; then
349 AC_MSG_ERROR("windres not found")
352 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
353 LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
354 if test "x$CXXFLAGS_overridden" = "xno"; then
355 CXXFLAGS="$CXXFLAGS -w"
358 i?86-*) WINDOWS_BITS=32 ;;
359 x86_64-*) WINDOWS_BITS=64 ;;
360 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
362 AC_SUBST(WINDOWS_BITS)
364 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
365 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
366 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
367 dnl also overridden to prevent their insertion later.
368 dnl This should only affect dll's.
369 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
375 LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
376 if test x$cross_compiling != xyes; then
378 AC_CHECK_PROG([PORT],port, port)
379 if test x$PORT = xport; then
380 dnl add default macports paths
381 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
382 LIBS="$LIBS -L/opt/local/lib"
383 if test -d /opt/local/include/db48; then
384 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
385 LIBS="$LIBS -L/opt/local/lib/db48"
389 AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
390 AC_CHECK_PROG([BREW],brew, brew)
391 if test x$BREW = xbrew; then
392 dnl These Homebrew packages may be keg-only, meaning that they won't be found
393 dnl in expected paths because they may conflict with system files. Ask
394 dnl Homebrew where each one is located, then adjust paths accordingly.
395 dnl It's safe to add these paths even if the functionality is disabled by
396 dnl the user (--without-wallet or --without-gui for example).
398 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
399 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
400 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
401 if test x$openssl_prefix != x; then
402 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
403 export PKG_CONFIG_PATH
405 if test x$bdb_prefix != x; then
406 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
407 LIBS="$LIBS -L$bdb_prefix/lib"
409 if test x$qt5_prefix != x; then
410 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
411 export PKG_CONFIG_PATH
420 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
421 AC_PATH_TOOL([OTOOL], [otool], otool)
422 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
423 AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
424 AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
425 AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
427 dnl libtool will try to strip the static lib, which is a problem for
428 dnl cross-builds because strip attempts to call a hard-coded ld,
429 dnl which may not exist in the path. Stripping the .a is not
430 dnl necessary, so just disable it.
436 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
437 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
438 OBJCXXFLAGS="$CXXFLAGS"
442 LEVELDB_TARGET_FLAGS="-DOS_LINUX"
445 LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
448 LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
451 OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
452 AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
453 LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
457 if test x$use_pkgconfig = xyes; then
458 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.)])
459 m4_ifdef([PKG_PROG_PKG_CONFIG], [
461 if test x"$PKG_CONFIG" = "x"; then
462 AC_MSG_ERROR(pkg-config not found.)
467 if test x$use_extended_functional_tests != xno; then
468 AC_SUBST(EXTENDED_FUNCTIONAL_TESTS, --extended)
471 if test x$use_lcov = xyes; then
472 if test x$LCOV = x; then
473 AC_MSG_ERROR("lcov testing requested but lcov not found")
475 if test x$GCOV = x; then
476 AC_MSG_ERROR("lcov testing requested but gcov not found")
478 if test x$PYTHON = x; then
479 AC_MSG_ERROR("lcov testing requested but python not found")
481 if test x$GENHTML = x; then
482 AC_MSG_ERROR("lcov testing requested but genhtml not found")
484 LCOV="$LCOV --gcov-tool=$GCOV"
485 AX_CHECK_LINK_FLAG([[--coverage]], [LDFLAGS="$LDFLAGS --coverage"],
486 [AC_MSG_ERROR("lcov testing requested but --coverage linker flag does not work")])
487 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
488 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
489 AC_DEFINE(USE_COVERAGE, 1, [Define this symbol if coverage is enabled])
490 CXXFLAGS="$CXXFLAGS -Og"
493 if test x$use_lcov_branch != xno; then
494 AC_SUBST(LCOV_OPTS, "$LCOV_OPTS --rc lcov_branch_coverage=1")
497 dnl Check for endianness
500 dnl Check for pthread compile/link requirements
503 # The following macro will add the necessary defines to bitcoin-config.h, but
504 # they also need to be passed down to any subprojects. Pull the results out of
505 # the cache and add them to CPPFLAGS.
507 # detect POSIX or GNU variant of strerror_r
510 if test x$ac_cv_sys_file_offset_bits != x &&
511 test x$ac_cv_sys_file_offset_bits != xno &&
512 test x$ac_cv_sys_file_offset_bits != xunknown; then
513 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
516 if test x$ac_cv_sys_large_files != x &&
517 test x$ac_cv_sys_large_files != xno &&
518 test x$ac_cv_sys_large_files != xunknown; then
519 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
522 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
524 AX_GCC_FUNC_ATTRIBUTE([visibility])
525 AX_GCC_FUNC_ATTRIBUTE([dllexport])
526 AX_GCC_FUNC_ATTRIBUTE([dllimport])
528 if test x$use_glibc_compat != xno; then
530 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
531 #in anyway for back-compat.
532 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
534 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
535 # See which one is present here.
536 AC_MSG_CHECKING(__fdelt_chk type)
537 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
538 #undef _FORTIFY_SOURCE
540 #define _FORTIFY_SOURCE 2
541 #include <sys/select.h>
542 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
543 [ fdelt_type="long unsigned int"],
544 [ fdelt_type="long int"])
545 AC_MSG_RESULT($fdelt_type)
546 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
548 AC_SEARCH_LIBS([clock_gettime],[rt])
551 if test x$TARGET_OS != xwindows; then
552 # All windows code is PIC, forcing it on just adds useless compile warnings
553 AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
556 if test x$use_hardening != xno; then
557 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
558 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
560 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
561 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
562 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
564 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
567 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
568 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
569 AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"])
570 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
571 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
573 if test x$TARGET_OS != xwindows; then
574 AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
575 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
580 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
585 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
586 if test x$TARGET_OS = xdarwin; then
587 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
590 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])
592 AC_CHECK_DECLS([strnlen])
594 # Check for daemon(3), unrelated to --with-daemon (although used by it)
595 AC_CHECK_DECLS([daemon])
597 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
600 #elif HAVE_SYS_ENDIAN_H
601 #include <sys/endian.h>
604 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
606 #include <byteswap.h>
609 AC_CHECK_DECLS([__builtin_clz, __builtin_clzl, __builtin_clzll])
611 dnl Check for MSG_NOSIGNAL
612 AC_MSG_CHECKING(for MSG_NOSIGNAL)
613 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
614 [[ int f = MSG_NOSIGNAL; ]])],
615 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
619 dnl Check for MSG_DONTWAIT
620 AC_MSG_CHECKING(for MSG_DONTWAIT)
621 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
622 [[ int f = MSG_DONTWAIT; ]])],
623 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_DONTWAIT, 1,[Define this symbol if you have MSG_DONTWAIT]) ],
627 dnl Check for malloc_info (for memory statistics information in getmemoryinfo)
628 AC_MSG_CHECKING(for getmemoryinfo)
629 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
630 [[ int f = malloc_info(0, NULL); ]])],
631 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOC_INFO, 1,[Define this symbol if you have malloc_info]) ],
635 dnl Check for mallopt(M_ARENA_MAX) (to set glibc arenas)
636 AC_MSG_CHECKING(for mallopt M_ARENA_MAX)
637 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
638 [[ mallopt(M_ARENA_MAX, 1); ]])],
639 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOPT_ARENA_MAX, 1,[Define this symbol if you have mallopt with M_ARENA_MAX]) ],
643 AC_MSG_CHECKING([for visibility attribute])
644 AC_LINK_IFELSE([AC_LANG_SOURCE([
645 int foo_def( void ) __attribute__((visibility("default")));
649 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
654 if test x$use_reduce_exports = xyes; then
655 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
660 # Check for different ways of gathering OS randomness
661 AC_MSG_CHECKING(for Linux getrandom syscall)
662 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
663 #include <sys/syscall.h>
664 #include <linux/random.h>]],
665 [[ syscall(SYS_getrandom, nullptr, 32, 0); ]])],
666 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_GETRANDOM, 1,[Define this symbol if the Linux getrandom system call is available]) ],
670 AC_MSG_CHECKING(for getentropy)
671 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
672 [[ getentropy(nullptr, 32) ]])],
673 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_GETENTROPY, 1,[Define this symbol if the BSD getentropy system call is available]) ],
677 AC_MSG_CHECKING(for sysctl KERN_ARND)
678 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
679 #include <sys/sysctl.h>]],
680 [[ static const int name[2] = {CTL_KERN, KERN_ARND};
681 sysctl(name, 2, nullptr, nullptr, nullptr, 0); ]])],
682 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL_ARND, 1,[Define this symbol if the BSD sysctl(KERN_ARND) is available]) ],
686 # Check for reduced exports
687 if test x$use_reduce_exports = xyes; then
688 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
689 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
695 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
696 AC_SUBST(LEVELDB_CPPFLAGS)
700 if test x$enable_wallet != xno; then
701 dnl Check for libdb_cxx only if wallet enabled
705 dnl Check for libminiupnpc (optional)
706 if test x$use_upnp != xno; then
708 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
709 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
716 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
717 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
719 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
725 if test x$use_boost = xyes; then
727 dnl Minimum required Boost version
728 define(MINIMUM_REQUIRED_BOOST, 1.47.0)
730 dnl Check for boost libs
731 AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
734 AX_BOOST_PROGRAM_OPTIONS
738 dnl Boost 1.56 through 1.62 allow using std::atomic instead of its own atomic
739 dnl counter implementations. In 1.63 and later the std::atomic approach is default.
740 m4_pattern_allow(DBOOST_AC_USE_STD_ATOMIC) dnl otherwise it's treated like a macro
741 BOOST_CPPFLAGS="-DBOOST_SP_USE_STD_ATOMIC -DBOOST_AC_USE_STD_ATOMIC $BOOST_CPPFLAGS"
743 if test x$use_reduce_exports = xyes; then
744 AC_MSG_CHECKING([for working boost reduced exports])
745 TEMP_CPPFLAGS="$CPPFLAGS"
746 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
747 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
748 @%:@include <boost/version.hpp>
750 #if BOOST_VERSION >= 104900
751 // Everything is okay
753 # error Boost version is too old
758 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
760 CPPFLAGS="$TEMP_CPPFLAGS"
764 if test x$use_reduce_exports = xyes; then
765 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
766 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
769 if test x$use_tests = xyes; then
771 if test x$HEXDUMP = x; then
772 AC_MSG_ERROR(hexdump is required for tests)
776 if test x$use_boost = xyes; then
778 AX_BOOST_UNIT_TEST_FRAMEWORK
780 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
781 AC_MSG_CHECKING([for dynamic linked boost test])
783 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
784 TEMP_CPPFLAGS="$CPPFLAGS"
785 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
786 AC_LINK_IFELSE([AC_LANG_SOURCE([
787 #define BOOST_TEST_DYN_LINK
788 #define BOOST_TEST_MAIN
789 #include <boost/test/unit_test.hpp>
793 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
796 CPPFLAGS="$TEMP_CPPFLAGS"
801 if test x$use_boost = xyes; then
803 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
806 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
807 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
808 dnl the abi. This was fixed in 1.57.
810 dnl When building against that installed version using c++11, the headers pick up
811 dnl on the native c++11 scoped enum support and enable it, however it will fail to
812 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
814 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
817 LIBS="$BOOST_LIBS $LIBS"
818 TEMP_CPPFLAGS="$CPPFLAGS"
819 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
820 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
821 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
822 #include "boost/config.hpp"
823 #include "boost/version.hpp"
824 #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
825 #define BOOST_NO_SCOPED_ENUMS
826 #define BOOST_NO_CXX11_SCOPED_ENUMS
829 #include "boost/filesystem.hpp"
832 boost::filesystem::copy_file("foo", "bar");
837 [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
839 CPPFLAGS="$TEMP_CPPFLAGS"
841 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
842 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
843 dnl a working version is available, else fall back to sleep. sleep was removed
845 dnl If neither is available, abort.
847 LIBS="$BOOST_LIBS $LIBS"
848 TEMP_CPPFLAGS="$CPPFLAGS"
849 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
850 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
851 #include <boost/thread/thread.hpp>
852 #include <boost/version.hpp>
854 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
855 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
861 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
864 CPPFLAGS="$TEMP_CPPFLAGS"
866 if test x$boost_sleep != xyes; then
868 LIBS="$BOOST_LIBS $LIBS"
869 TEMP_CPPFLAGS="$CPPFLAGS"
870 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
871 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
872 #include <boost/version.hpp>
873 #include <boost/thread.hpp>
874 #include <boost/date_time/posix_time/posix_time_types.hpp>
876 #if BOOST_VERSION <= 105600
877 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
882 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
885 CPPFLAGS="$TEMP_CPPFLAGS"
888 if test x$boost_sleep != xyes; then
889 AC_MSG_ERROR(No working boost sleep implementation found.)
894 if test x$use_pkgconfig = xyes; then
899 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
900 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
901 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
902 if test x$use_qr != xno; then
903 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
905 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
906 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
907 if test x$TARGET_OS != xwindows; then
908 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
912 if test "x$use_zmq" = "xyes"; then
913 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
914 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
915 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
916 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
919 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
924 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
925 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
927 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
928 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
930 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
931 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
932 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
933 if test x$TARGET_OS != xwindows; then
934 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
938 if test "x$use_zmq" = "xyes"; then
939 AC_CHECK_HEADER([zmq.h],
940 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
941 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
943 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
944 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
945 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
947 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
949 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
952 if test "x$use_zmq" = "xyes"; then
953 dnl Assume libzmq was built for static linking
956 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
961 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
962 if test x$use_qr != xno; then
963 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
964 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
968 save_CXXFLAGS="${CXXFLAGS}"
969 CXXFLAGS="${CXXFLAGS} ${CRYPTO_CFLAGS} ${SSL_CFLAGS}"
970 AC_CHECK_DECLS([EVP_MD_CTX_new],,,[AC_INCLUDES_DEFAULT
971 #include <openssl/x509_vfy.h>
973 CXXFLAGS="${save_CXXFLAGS}"
977 need_bundled_univalue=yes
979 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
980 need_bundled_univalue=no
983 if test x$system_univalue != xno ; then
985 if test x$use_pkgconfig = xyes; then
990 PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
994 AC_CHECK_HEADER([univalue.h],[
995 AC_CHECK_LIB([univalue], [main],[
996 UNIVALUE_LIBS=-lunivalue
1002 if test x$found_univalue = xyes ; then
1004 need_bundled_univalue=no
1005 elif test x$system_univalue = xyes ; then
1006 AC_MSG_ERROR([univalue not found])
1012 if test x$need_bundled_univalue = xyes ; then
1013 UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
1014 UNIVALUE_LIBS='univalue/libunivalue.la'
1019 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
1020 AC_SUBST(UNIVALUE_CFLAGS)
1021 AC_SUBST(UNIVALUE_LIBS)
1023 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
1025 AC_MSG_CHECKING([whether to build bitcoind])
1026 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
1027 AC_MSG_RESULT($build_bitcoind)
1029 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
1030 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
1031 AC_MSG_RESULT($build_bitcoin_utils)
1033 AC_MSG_CHECKING([whether to build libraries])
1034 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
1035 if test x$build_bitcoin_libs = xyes; then
1036 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
1037 AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
1039 AC_MSG_RESULT($build_bitcoin_libs)
1043 if test "x$use_ccache" != "xno"; then
1044 AC_MSG_CHECKING(if ccache should be used)
1045 if test x$CCACHE = x; then
1046 if test "x$use_ccache" = "xyes"; then
1047 AC_MSG_ERROR([ccache not found.]);
1053 CC="$ac_cv_path_CCACHE $CC"
1054 CXX="$ac_cv_path_CCACHE $CXX"
1056 AC_MSG_RESULT($use_ccache)
1058 if test "x$use_ccache" = "xyes"; then
1059 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
1063 AC_MSG_CHECKING([if wallet should be enabled])
1064 if test x$enable_wallet != xno; then
1066 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
1072 dnl enable upnp support
1073 AC_MSG_CHECKING([whether to build with support for UPnP])
1074 if test x$have_miniupnpc = xno; then
1075 if test x$use_upnp = xyes; then
1076 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
1080 if test x$use_upnp != xno; then
1082 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
1085 if test x$use_upnp_default != xno; then
1086 use_upnp_default=yes
1089 AC_MSG_RESULT($use_upnp_default)
1090 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
1091 if test x$TARGET_OS = xwindows; then
1092 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
1099 dnl these are only used when qt is enabled
1101 if test x$bitcoin_enable_qt != xno; then
1102 dnl enable dbus support
1103 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
1104 if test x$bitcoin_enable_qt_dbus != xno; then
1105 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
1107 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
1109 dnl enable qr support
1110 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
1111 if test x$have_qrencode = xno; then
1112 if test x$use_qr = xyes; then
1113 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
1117 if test x$use_qr != xno; then
1119 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
1126 if test x$XGETTEXT = x; then
1127 AC_MSG_WARN("xgettext is required to update qt translations")
1130 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
1131 if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
1132 AC_MSG_RESULT([yes])
1139 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
1141 AC_MSG_CHECKING([whether to build test_bitcoin])
1142 if test x$use_tests = xyes; then
1143 AC_MSG_RESULT([yes])
1150 AC_MSG_CHECKING([whether to reduce exports])
1151 if test x$use_reduce_exports = xyes; then
1152 AC_MSG_RESULT([yes])
1157 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1158 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1161 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1162 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1163 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1164 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1165 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1166 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1167 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1168 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1169 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1170 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1171 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1172 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1173 AM_CONDITIONAL([ENABLE_HWCRC32],[test x$enable_hwcrc32 = xyes])
1174 AM_CONDITIONAL([EXPERIMENTAL_ASM],[test x$experimental_asm = xyes])
1176 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1177 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1178 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1179 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1180 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1181 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1182 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1183 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1184 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1185 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1186 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1187 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1188 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1189 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1190 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1191 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1192 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1193 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1194 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1195 AC_SUBST(BITCOIN_DAEMON_NAME)
1196 AC_SUBST(BITCOIN_GUI_NAME)
1197 AC_SUBST(BITCOIN_CLI_NAME)
1198 AC_SUBST(BITCOIN_TX_NAME)
1201 AC_SUBST(ERROR_CXXFLAGS)
1202 AC_SUBST(HARDENED_CXXFLAGS)
1203 AC_SUBST(HARDENED_CPPFLAGS)
1204 AC_SUBST(HARDENED_LDFLAGS)
1207 AC_SUBST(SSE42_CXXFLAGS)
1208 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1210 AC_SUBST(USE_QRCODE)
1211 AC_SUBST(BOOST_LIBS)
1213 AC_SUBST(LEVELDB_TARGET_FLAGS)
1214 AC_SUBST(MINIUPNPC_CPPFLAGS)
1215 AC_SUBST(MINIUPNPC_LIBS)
1216 AC_SUBST(CRYPTO_LIBS)
1218 AC_SUBST(EVENT_LIBS)
1219 AC_SUBST(EVENT_PTHREADS_LIBS)
1221 AC_SUBST(PROTOBUF_LIBS)
1223 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini])
1224 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1225 AC_CONFIG_FILES([doc/Doxyfile])
1226 AC_CONFIG_LINKS([test/functional/test_runner.py:test/functional/test_runner.py])
1227 AC_CONFIG_LINKS([test/util/bitcoin-util-test.py:test/util/bitcoin-util-test.py])
1229 dnl boost's m4 checks do something really nasty: they export these vars. As a
1230 dnl result, they leak into secp256k1's configure and crazy things happen.
1231 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1232 CPPFLAGS_TEMP="$CPPFLAGS"
1234 CPPFLAGS="$CPPFLAGS_TEMP"
1236 LDFLAGS_TEMP="$LDFLAGS"
1238 LDFLAGS="$LDFLAGS_TEMP"
1244 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1245 unset PKG_CONFIG_PATH
1246 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1248 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1249 unset PKG_CONFIG_LIBDIR
1250 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1252 if test x$need_bundled_univalue = xyes; then
1253 AC_CONFIG_SUBDIRS([src/univalue])
1256 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1257 AC_CONFIG_SUBDIRS([src/secp256k1])
1261 dnl Taken from https://wiki.debian.org/RpathIssue
1264 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1265 sed < libtool > libtool-2 \
1266 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1267 mv libtool-2 libtool
1272 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1275 sed 's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/' test/config.ini > test/config-2.ini
1276 mv test/config-2.ini test/config.ini
1281 echo "Options used to compile and link:"
1282 echo " with wallet = $enable_wallet"
1283 echo " with gui / qt = $bitcoin_enable_qt"
1284 if test x$bitcoin_enable_qt != xno; then
1285 echo " qt version = $bitcoin_qt_got_major_vers"
1286 echo " with qr = $use_qr"
1288 echo " with zmq = $use_zmq"
1289 echo " with test = $use_tests"
1290 echo " with bench = $use_bench"
1291 echo " with upnp = $use_upnp"
1292 echo " debug enabled = $enable_debug"
1293 echo " werror = $enable_werror"
1295 echo " target os = $TARGET_OS"
1296 echo " build os = $BUILD_OS"
1299 echo " CFLAGS = $CFLAGS"
1300 echo " CPPFLAGS = $CPPFLAGS"
1302 echo " CXXFLAGS = $CXXFLAGS"
1303 echo " LDFLAGS = $LDFLAGS"
1304 echo " ARFLAGS = $ARFLAGS"