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]])
262 # Check for optional instruction set support. Enabling these does _not_ imply that all code will
263 # be compiled with them, rather that specific objects/libs may use them after checking for runtime
265 AX_CHECK_COMPILE_FLAG([-msse4.2],[[SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]])
269 TEMP_CXXFLAGS="$CXXFLAGS"
270 CXXFLAGS="$CXXFLAGS $SSE42_CXXFLAGS"
271 AC_MSG_CHECKING(for assembler crc32 support)
272 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
274 #if defined(_MSC_VER)
276 #elif defined(__GNUC__) && defined(__SSE4_2__)
277 #include <nmmintrin.h>
281 l = _mm_crc32_u8(l, 0);
282 l = _mm_crc32_u32(l, 0);
283 l = _mm_crc32_u64(l, 0);
286 [ AC_MSG_RESULT(yes); enable_hwcrc32=yes],
289 CXXFLAGS="$TEMP_CXXFLAGS"
291 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
294 [AS_HELP_STRING([--with-utils],
295 [build bitcoin-cli bitcoin-tx (default=yes)])],
296 [build_bitcoin_utils=$withval],
297 [build_bitcoin_utils=yes])
300 [AS_HELP_STRING([--with-libs],
301 [build libraries (default=yes)])],
302 [build_bitcoin_libs=$withval],
303 [build_bitcoin_libs=yes])
305 AC_ARG_WITH([daemon],
306 [AS_HELP_STRING([--with-daemon],
307 [build bitcoind daemon (default=yes)])],
308 [build_bitcoind=$withval],
309 [build_bitcoind=yes])
315 #pkgconfig does more harm than good with MinGW
319 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
320 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
321 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
322 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
323 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
324 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
325 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
326 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
327 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
328 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
329 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
330 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
331 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
332 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
333 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
334 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
335 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
336 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
337 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
339 # -static is interpreted by libtool, where it has a different meaning.
340 # In libtool-speak, it's -all-static.
341 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
343 AC_PATH_PROG([MAKENSIS], [makensis], none)
344 if test x$MAKENSIS = xnone; then
345 AC_MSG_WARN("makensis not found. Cannot create installer.")
348 AC_PATH_TOOL(WINDRES, windres, none)
349 if test x$WINDRES = xnone; then
350 AC_MSG_ERROR("windres not found")
353 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
354 LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
355 if test "x$CXXFLAGS_overridden" = "xno"; then
356 CXXFLAGS="$CXXFLAGS -w"
359 i?86-*) WINDOWS_BITS=32 ;;
360 x86_64-*) WINDOWS_BITS=64 ;;
361 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
363 AC_SUBST(WINDOWS_BITS)
365 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
366 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
367 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
368 dnl also overridden to prevent their insertion later.
369 dnl This should only affect dll's.
370 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
376 LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
377 if test x$cross_compiling != xyes; then
379 AC_CHECK_PROG([PORT],port, port)
380 if test x$PORT = xport; then
381 dnl add default macports paths
382 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
383 LIBS="$LIBS -L/opt/local/lib"
384 if test -d /opt/local/include/db48; then
385 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
386 LIBS="$LIBS -L/opt/local/lib/db48"
390 AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
391 AC_CHECK_PROG([BREW],brew, brew)
392 if test x$BREW = xbrew; then
393 dnl These Homebrew packages may be keg-only, meaning that they won't be found
394 dnl in expected paths because they may conflict with system files. Ask
395 dnl Homebrew where each one is located, then adjust paths accordingly.
396 dnl It's safe to add these paths even if the functionality is disabled by
397 dnl the user (--without-wallet or --without-gui for example).
399 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
400 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
401 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
402 if test x$openssl_prefix != x; then
403 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
404 export PKG_CONFIG_PATH
406 if test x$bdb_prefix != x; then
407 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
408 LIBS="$LIBS -L$bdb_prefix/lib"
410 if test x$qt5_prefix != x; then
411 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
412 export PKG_CONFIG_PATH
421 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
422 AC_PATH_TOOL([OTOOL], [otool], otool)
423 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
424 AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
425 AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
426 AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
428 dnl libtool will try to strip the static lib, which is a problem for
429 dnl cross-builds because strip attempts to call a hard-coded ld,
430 dnl which may not exist in the path. Stripping the .a is not
431 dnl necessary, so just disable it.
437 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
438 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
439 OBJCXXFLAGS="$CXXFLAGS"
443 LEVELDB_TARGET_FLAGS="-DOS_LINUX"
446 LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
449 LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
452 OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'`
453 AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.])
454 LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}"
458 if test x$use_pkgconfig = xyes; then
459 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.)])
460 m4_ifdef([PKG_PROG_PKG_CONFIG], [
462 if test x"$PKG_CONFIG" = "x"; then
463 AC_MSG_ERROR(pkg-config not found.)
468 if test x$use_extended_functional_tests != xno; then
469 AC_SUBST(EXTENDED_FUNCTIONAL_TESTS, --extended)
472 if test x$use_lcov = xyes; then
473 if test x$LCOV = x; then
474 AC_MSG_ERROR("lcov testing requested but lcov not found")
476 if test x$GCOV = x; then
477 AC_MSG_ERROR("lcov testing requested but gcov not found")
479 if test x$PYTHON = x; then
480 AC_MSG_ERROR("lcov testing requested but python not found")
482 if test x$GENHTML = x; then
483 AC_MSG_ERROR("lcov testing requested but genhtml not found")
485 LCOV="$LCOV --gcov-tool=$GCOV"
486 AX_CHECK_LINK_FLAG([[--coverage]], [LDFLAGS="$LDFLAGS --coverage"],
487 [AC_MSG_ERROR("lcov testing requested but --coverage linker flag does not work")])
488 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
489 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
490 AC_DEFINE(USE_COVERAGE, 1, [Define this symbol if coverage is enabled])
491 CXXFLAGS="$CXXFLAGS -Og"
494 if test x$use_lcov_branch != xno; then
495 AC_SUBST(LCOV_OPTS, "$LCOV_OPTS --rc lcov_branch_coverage=1")
498 dnl Check for endianness
501 dnl Check for pthread compile/link requirements
504 # The following macro will add the necessary defines to bitcoin-config.h, but
505 # they also need to be passed down to any subprojects. Pull the results out of
506 # the cache and add them to CPPFLAGS.
508 # detect POSIX or GNU variant of strerror_r
511 if test x$ac_cv_sys_file_offset_bits != x &&
512 test x$ac_cv_sys_file_offset_bits != xno &&
513 test x$ac_cv_sys_file_offset_bits != xunknown; then
514 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
517 if test x$ac_cv_sys_large_files != x &&
518 test x$ac_cv_sys_large_files != xno &&
519 test x$ac_cv_sys_large_files != xunknown; then
520 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
523 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
525 AX_GCC_FUNC_ATTRIBUTE([visibility])
526 AX_GCC_FUNC_ATTRIBUTE([dllexport])
527 AX_GCC_FUNC_ATTRIBUTE([dllimport])
529 if test x$use_glibc_compat != xno; then
531 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
532 #in anyway for back-compat.
533 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
535 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
536 # See which one is present here.
537 AC_MSG_CHECKING(__fdelt_chk type)
538 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
539 #undef _FORTIFY_SOURCE
541 #define _FORTIFY_SOURCE 2
542 #include <sys/select.h>
543 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
544 [ fdelt_type="long unsigned int"],
545 [ fdelt_type="long int"])
546 AC_MSG_RESULT($fdelt_type)
547 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
549 AC_SEARCH_LIBS([clock_gettime],[rt])
552 if test x$TARGET_OS != xwindows; then
553 # All windows code is PIC, forcing it on just adds useless compile warnings
554 AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
557 if test x$use_hardening != xno; then
558 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
559 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
561 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
562 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
563 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
565 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
568 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
569 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
570 AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"])
571 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
572 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
574 if test x$TARGET_OS != xwindows; then
575 AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
576 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
581 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
586 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
587 if test x$TARGET_OS = xdarwin; then
588 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
591 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])
593 AC_CHECK_DECLS([strnlen])
595 # Check for daemon(3), unrelated to --with-daemon (although used by it)
596 AC_CHECK_DECLS([daemon])
598 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
601 #elif HAVE_SYS_ENDIAN_H
602 #include <sys/endian.h>
605 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
607 #include <byteswap.h>
610 AC_CHECK_DECLS([__builtin_clz, __builtin_clzl, __builtin_clzll])
612 dnl Check for MSG_NOSIGNAL
613 AC_MSG_CHECKING(for MSG_NOSIGNAL)
614 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
615 [[ int f = MSG_NOSIGNAL; ]])],
616 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
620 dnl Check for MSG_DONTWAIT
621 AC_MSG_CHECKING(for MSG_DONTWAIT)
622 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
623 [[ int f = MSG_DONTWAIT; ]])],
624 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_DONTWAIT, 1,[Define this symbol if you have MSG_DONTWAIT]) ],
628 dnl Check for malloc_info (for memory statistics information in getmemoryinfo)
629 AC_MSG_CHECKING(for getmemoryinfo)
630 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
631 [[ int f = malloc_info(0, NULL); ]])],
632 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOC_INFO, 1,[Define this symbol if you have malloc_info]) ],
636 dnl Check for mallopt(M_ARENA_MAX) (to set glibc arenas)
637 AC_MSG_CHECKING(for mallopt M_ARENA_MAX)
638 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
639 [[ mallopt(M_ARENA_MAX, 1); ]])],
640 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOPT_ARENA_MAX, 1,[Define this symbol if you have mallopt with M_ARENA_MAX]) ],
644 AC_MSG_CHECKING([for visibility attribute])
645 AC_LINK_IFELSE([AC_LANG_SOURCE([
646 int foo_def( void ) __attribute__((visibility("default")));
650 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
655 if test x$use_reduce_exports = xyes; then
656 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
661 # Check for different ways of gathering OS randomness
662 AC_MSG_CHECKING(for Linux getrandom syscall)
663 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
664 #include <sys/syscall.h>
665 #include <linux/random.h>]],
666 [[ syscall(SYS_getrandom, nullptr, 32, 0); ]])],
667 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_GETRANDOM, 1,[Define this symbol if the Linux getrandom system call is available]) ],
671 AC_MSG_CHECKING(for getentropy)
672 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
673 [[ getentropy(nullptr, 32) ]])],
674 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_GETENTROPY, 1,[Define this symbol if the BSD getentropy system call is available]) ],
678 AC_MSG_CHECKING(for sysctl KERN_ARND)
679 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
680 #include <sys/sysctl.h>]],
681 [[ static const int name[2] = {CTL_KERN, KERN_ARND};
682 sysctl(name, 2, nullptr, nullptr, nullptr, 0); ]])],
683 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL_ARND, 1,[Define this symbol if the BSD sysctl(KERN_ARND) is available]) ],
687 # Check for reduced exports
688 if test x$use_reduce_exports = xyes; then
689 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
690 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
696 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
697 AC_SUBST(LEVELDB_CPPFLAGS)
701 if test x$enable_wallet != xno; then
702 dnl Check for libdb_cxx only if wallet enabled
706 dnl Check for libminiupnpc (optional)
707 if test x$use_upnp != xno; then
709 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
710 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
717 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
718 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
720 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
726 if test x$use_boost = xyes; then
728 dnl Minimum required Boost version
729 define(MINIMUM_REQUIRED_BOOST, 1.47.0)
731 dnl Check for boost libs
732 AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST])
735 AX_BOOST_PROGRAM_OPTIONS
739 dnl Boost 1.56 through 1.62 allow using std::atomic instead of its own atomic
740 dnl counter implementations. In 1.63 and later the std::atomic approach is default.
741 m4_pattern_allow(DBOOST_AC_USE_STD_ATOMIC) dnl otherwise it's treated like a macro
742 BOOST_CPPFLAGS="-DBOOST_SP_USE_STD_ATOMIC -DBOOST_AC_USE_STD_ATOMIC $BOOST_CPPFLAGS"
744 if test x$use_reduce_exports = xyes; then
745 AC_MSG_CHECKING([for working boost reduced exports])
746 TEMP_CPPFLAGS="$CPPFLAGS"
747 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
748 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
749 @%:@include <boost/version.hpp>
751 #if BOOST_VERSION >= 104900
752 // Everything is okay
754 # error Boost version is too old
759 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
761 CPPFLAGS="$TEMP_CPPFLAGS"
765 if test x$use_reduce_exports = xyes; then
766 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
767 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
770 if test x$use_tests = xyes; then
772 if test x$HEXDUMP = x; then
773 AC_MSG_ERROR(hexdump is required for tests)
777 if test x$use_boost = xyes; then
779 AX_BOOST_UNIT_TEST_FRAMEWORK
781 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
782 AC_MSG_CHECKING([for dynamic linked boost test])
784 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
785 TEMP_CPPFLAGS="$CPPFLAGS"
786 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
787 AC_LINK_IFELSE([AC_LANG_SOURCE([
788 #define BOOST_TEST_DYN_LINK
789 #define BOOST_TEST_MAIN
790 #include <boost/test/unit_test.hpp>
794 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
797 CPPFLAGS="$TEMP_CPPFLAGS"
802 if test x$use_boost = xyes; then
804 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
807 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
808 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
809 dnl the abi. This was fixed in 1.57.
811 dnl When building against that installed version using c++11, the headers pick up
812 dnl on the native c++11 scoped enum support and enable it, however it will fail to
813 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
815 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
818 LIBS="$BOOST_LIBS $LIBS"
819 TEMP_CPPFLAGS="$CPPFLAGS"
820 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
821 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
822 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
823 #include "boost/config.hpp"
824 #include "boost/version.hpp"
825 #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
826 #define BOOST_NO_SCOPED_ENUMS
827 #define BOOST_NO_CXX11_SCOPED_ENUMS
830 #include "boost/filesystem.hpp"
833 boost::filesystem::copy_file("foo", "bar");
838 [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
840 CPPFLAGS="$TEMP_CPPFLAGS"
842 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
843 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
844 dnl a working version is available, else fall back to sleep. sleep was removed
846 dnl If neither is available, abort.
848 LIBS="$BOOST_LIBS $LIBS"
849 TEMP_CPPFLAGS="$CPPFLAGS"
850 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
851 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
852 #include <boost/thread/thread.hpp>
853 #include <boost/version.hpp>
855 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
856 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
862 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
865 CPPFLAGS="$TEMP_CPPFLAGS"
867 if test x$boost_sleep != xyes; then
869 LIBS="$BOOST_LIBS $LIBS"
870 TEMP_CPPFLAGS="$CPPFLAGS"
871 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
872 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
873 #include <boost/version.hpp>
874 #include <boost/thread.hpp>
875 #include <boost/date_time/posix_time/posix_time_types.hpp>
877 #if BOOST_VERSION <= 105600
878 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
883 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
886 CPPFLAGS="$TEMP_CPPFLAGS"
889 if test x$boost_sleep != xyes; then
890 AC_MSG_ERROR(No working boost sleep implementation found.)
895 if test x$use_pkgconfig = xyes; then
900 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
901 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
902 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
903 if test x$use_qr != xno; then
904 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
906 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
907 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
908 if test x$TARGET_OS != xwindows; then
909 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
913 if test "x$use_zmq" = "xyes"; then
914 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
915 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
916 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
917 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
920 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
925 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
926 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
928 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
929 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
931 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
932 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
933 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
934 if test x$TARGET_OS != xwindows; then
935 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
939 if test "x$use_zmq" = "xyes"; then
940 AC_CHECK_HEADER([zmq.h],
941 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
942 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
944 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
945 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
946 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
948 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
950 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
953 if test "x$use_zmq" = "xyes"; then
954 dnl Assume libzmq was built for static linking
957 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
962 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
963 if test x$use_qr != xno; then
964 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
965 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
969 save_CXXFLAGS="${CXXFLAGS}"
970 CXXFLAGS="${CXXFLAGS} ${CRYPTO_CFLAGS} ${SSL_CFLAGS}"
971 AC_CHECK_DECLS([EVP_MD_CTX_new],,,[AC_INCLUDES_DEFAULT
972 #include <openssl/x509_vfy.h>
974 CXXFLAGS="${save_CXXFLAGS}"
978 need_bundled_univalue=yes
980 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then
981 need_bundled_univalue=no
984 if test x$system_univalue != xno ; then
986 if test x$use_pkgconfig = xyes; then
991 PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
995 AC_CHECK_HEADER([univalue.h],[
996 AC_CHECK_LIB([univalue], [main],[
997 UNIVALUE_LIBS=-lunivalue
1003 if test x$found_univalue = xyes ; then
1005 need_bundled_univalue=no
1006 elif test x$system_univalue = xyes ; then
1007 AC_MSG_ERROR([univalue not found])
1013 if test x$need_bundled_univalue = xyes ; then
1014 UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
1015 UNIVALUE_LIBS='univalue/libunivalue.la'
1020 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
1021 AC_SUBST(UNIVALUE_CFLAGS)
1022 AC_SUBST(UNIVALUE_LIBS)
1024 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
1026 AC_MSG_CHECKING([whether to build bitcoind])
1027 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
1028 AC_MSG_RESULT($build_bitcoind)
1030 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
1031 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
1032 AC_MSG_RESULT($build_bitcoin_utils)
1034 AC_MSG_CHECKING([whether to build libraries])
1035 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
1036 if test x$build_bitcoin_libs = xyes; then
1037 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
1038 AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
1040 AC_MSG_RESULT($build_bitcoin_libs)
1044 if test "x$use_ccache" != "xno"; then
1045 AC_MSG_CHECKING(if ccache should be used)
1046 if test x$CCACHE = x; then
1047 if test "x$use_ccache" = "xyes"; then
1048 AC_MSG_ERROR([ccache not found.]);
1054 CC="$ac_cv_path_CCACHE $CC"
1055 CXX="$ac_cv_path_CCACHE $CXX"
1057 AC_MSG_RESULT($use_ccache)
1059 if test "x$use_ccache" = "xyes"; then
1060 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
1064 AC_MSG_CHECKING([if wallet should be enabled])
1065 if test x$enable_wallet != xno; then
1067 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
1073 dnl enable upnp support
1074 AC_MSG_CHECKING([whether to build with support for UPnP])
1075 if test x$have_miniupnpc = xno; then
1076 if test x$use_upnp = xyes; then
1077 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
1081 if test x$use_upnp != xno; then
1083 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
1086 if test x$use_upnp_default != xno; then
1087 use_upnp_default=yes
1090 AC_MSG_RESULT($use_upnp_default)
1091 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
1092 if test x$TARGET_OS = xwindows; then
1093 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
1100 dnl these are only used when qt is enabled
1102 if test x$bitcoin_enable_qt != xno; then
1103 dnl enable dbus support
1104 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
1105 if test x$bitcoin_enable_qt_dbus != xno; then
1106 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
1108 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
1110 dnl enable qr support
1111 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
1112 if test x$have_qrencode = xno; then
1113 if test x$use_qr = xyes; then
1114 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
1118 if test x$use_qr != xno; then
1120 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
1127 if test x$XGETTEXT = x; then
1128 AC_MSG_WARN("xgettext is required to update qt translations")
1131 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
1132 if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
1133 AC_MSG_RESULT([yes])
1140 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
1142 AC_MSG_CHECKING([whether to build test_bitcoin])
1143 if test x$use_tests = xyes; then
1144 AC_MSG_RESULT([yes])
1151 AC_MSG_CHECKING([whether to reduce exports])
1152 if test x$use_reduce_exports = xyes; then
1153 AC_MSG_RESULT([yes])
1158 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then
1159 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests])
1162 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
1163 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
1164 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
1165 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
1166 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
1167 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
1168 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
1169 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
1170 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
1171 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
1172 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1173 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1174 AM_CONDITIONAL([ENABLE_HWCRC32],[test x$enable_hwcrc32 = xyes])
1175 AM_CONDITIONAL([EXPERIMENTAL_ASM],[test x$experimental_asm = xyes])
1177 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1178 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1179 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1180 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1181 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1182 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1183 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1184 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1185 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1186 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1187 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1188 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1189 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1190 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1191 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1192 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1193 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1194 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1195 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1196 AC_SUBST(BITCOIN_DAEMON_NAME)
1197 AC_SUBST(BITCOIN_GUI_NAME)
1198 AC_SUBST(BITCOIN_CLI_NAME)
1199 AC_SUBST(BITCOIN_TX_NAME)
1202 AC_SUBST(ERROR_CXXFLAGS)
1203 AC_SUBST(HARDENED_CXXFLAGS)
1204 AC_SUBST(HARDENED_CPPFLAGS)
1205 AC_SUBST(HARDENED_LDFLAGS)
1208 AC_SUBST(SSE42_CXXFLAGS)
1209 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1211 AC_SUBST(USE_QRCODE)
1212 AC_SUBST(BOOST_LIBS)
1214 AC_SUBST(LEVELDB_TARGET_FLAGS)
1215 AC_SUBST(MINIUPNPC_CPPFLAGS)
1216 AC_SUBST(MINIUPNPC_LIBS)
1217 AC_SUBST(CRYPTO_LIBS)
1219 AC_SUBST(EVENT_LIBS)
1220 AC_SUBST(EVENT_PTHREADS_LIBS)
1222 AC_SUBST(PROTOBUF_LIBS)
1224 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini])
1225 AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
1226 AC_CONFIG_FILES([doc/Doxyfile])
1227 AC_CONFIG_LINKS([test/functional/test_runner.py:test/functional/test_runner.py])
1228 AC_CONFIG_LINKS([test/util/bitcoin-util-test.py:test/util/bitcoin-util-test.py])
1230 dnl boost's m4 checks do something really nasty: they export these vars. As a
1231 dnl result, they leak into secp256k1's configure and crazy things happen.
1232 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1233 CPPFLAGS_TEMP="$CPPFLAGS"
1235 CPPFLAGS="$CPPFLAGS_TEMP"
1237 LDFLAGS_TEMP="$LDFLAGS"
1239 LDFLAGS="$LDFLAGS_TEMP"
1245 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1246 unset PKG_CONFIG_PATH
1247 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1249 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1250 unset PKG_CONFIG_LIBDIR
1251 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1253 if test x$need_bundled_univalue = xyes; then
1254 AC_CONFIG_SUBDIRS([src/univalue])
1257 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1258 AC_CONFIG_SUBDIRS([src/secp256k1])
1262 dnl Taken from https://wiki.debian.org/RpathIssue
1265 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1266 sed < libtool > libtool-2 \
1267 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1268 mv libtool-2 libtool
1273 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1276 sed 's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/' test/config.ini > test/config-2.ini
1277 mv test/config-2.ini test/config.ini
1282 echo "Options used to compile and link:"
1283 echo " with wallet = $enable_wallet"
1284 echo " with gui / qt = $bitcoin_enable_qt"
1285 if test x$bitcoin_enable_qt != xno; then
1286 echo " qt version = $bitcoin_qt_got_major_vers"
1287 echo " with qr = $use_qr"
1289 echo " with zmq = $use_zmq"
1290 echo " with test = $use_tests"
1291 echo " with bench = $use_bench"
1292 echo " with upnp = $use_upnp"
1293 echo " debug enabled = $enable_debug"
1294 echo " werror = $enable_werror"
1296 echo " target os = $TARGET_OS"
1297 echo " build os = $BUILD_OS"
1300 echo " CFLAGS = $CFLAGS"
1301 echo " CPPFLAGS = $CPPFLAGS"
1303 echo " CXXFLAGS = $CXXFLAGS"
1304 echo " LDFLAGS = $LDFLAGS"
1305 echo " ARFLAGS = $ARFLAGS"