1 dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
3 define(_CLIENT_VERSION_MAJOR, 0)
4 define(_CLIENT_VERSION_MINOR, 12)
5 define(_CLIENT_VERSION_REVISION, 99)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_IS_RELEASE, false)
8 define(_COPYRIGHT_YEAR, 2016)
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/main.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])
19 AH_TOP([#ifndef BITCOIN_CONFIG_H])
20 AH_TOP([#define BITCOIN_CONFIG_H])
21 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
23 dnl faketime breaks configure and is only needed for make. Disable it here.
26 dnl Automake init set-up and checks
27 AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
29 dnl faketime messes with timestamps and causes configure to be re-run.
30 dnl --disable-maintainer-mode can be used to bypass this.
31 AM_MAINTAINER_MODE([enable])
33 dnl make the compilation flags quiet unless V=1 is used
34 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
36 dnl Compiler checks (here before libtool).
37 if test "x${CXXFLAGS+set}" = "xset"; then
38 CXXFLAGS_overridden=yes
40 CXXFLAGS_overridden=no
43 m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
45 dnl By default, libtool for mingw refuses to link static libs into a dll for
46 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
47 dnl we have those under control, re-enable that functionality.
50 lt_cv_deplibs_check_method="pass_all"
53 dnl Libtool init checks.
56 dnl Check/return PATH for base programs.
58 AC_PATH_TOOL(RANLIB, ranlib)
59 AC_PATH_TOOL(STRIP, strip)
60 AC_PATH_TOOL(GCOV, gcov)
61 AC_PATH_PROG(LCOV, lcov)
62 AC_PATH_PROG(JAVA, java)
63 AC_PATH_PROGS([PYTHON], [python3 python2.7 python2 python])
64 AC_PATH_PROG(GENHTML, genhtml)
65 AC_PATH_PROG([GIT], [git])
66 AC_PATH_PROG(CCACHE,ccache)
67 AC_PATH_PROG(XGETTEXT,xgettext)
68 AC_PATH_PROG(HEXDUMP,hexdump)
69 AC_PATH_TOOL(READELF, readelf)
70 AC_PATH_TOOL(CPPFILT, c++filt)
72 AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files)
78 AC_ARG_ENABLE([wallet],
79 [AS_HELP_STRING([--disable-wallet],
80 [disable wallet (enabled by default)])],
81 [enable_wallet=$enableval],
84 AC_ARG_WITH([miniupnpc],
85 [AS_HELP_STRING([--with-miniupnpc],
86 [enable UPNP (default is yes if libminiupnpc is found)])],
90 AC_ARG_ENABLE([upnp-default],
91 [AS_HELP_STRING([--enable-upnp-default],
92 [if UPNP is enabled, turn it on at startup (default is no)])],
93 [use_upnp_default=$enableval],
94 [use_upnp_default=no])
97 AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
98 [use_tests=$enableval],
101 AC_ARG_ENABLE(gui-tests,
102 AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)]),
103 [use_gui_tests=$enableval],
104 [use_gui_tests=$use_tests])
107 AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]),
108 [use_bench=$enableval],
111 AC_ARG_WITH([comparison-tool],
112 AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
113 [use_comparison_tool=$withval],
114 [use_comparison_tool=no])
116 AC_ARG_ENABLE([comparison-tool-reorg-tests],
117 AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
118 [use_comparison_tool_reorg_tests=$enableval],
119 [use_comparison_tool_reorg_tests=no])
121 AC_ARG_ENABLE([extended-rpc-tests],
122 AS_HELP_STRING([--enable-extended-rpc-tests],[enable expensive RPC tests when using lcov (default no)]),
123 [use_extended_rpc_tests=$enableval],
124 [use_extended_rpc_tests=no])
126 AC_ARG_WITH([qrencode],
127 [AS_HELP_STRING([--with-qrencode],
128 [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
132 AC_ARG_ENABLE([hardening],
133 [AS_HELP_STRING([--disable-hardening],
134 [do not attempt to harden the resulting executables (default is to harden)])],
135 [use_hardening=$enableval],
138 AC_ARG_ENABLE([reduce-exports],
139 [AS_HELP_STRING([--enable-reduce-exports],
140 [attempt to reduce exported symbols in the resulting executables (default is no)])],
141 [use_reduce_exports=$enableval],
142 [use_reduce_exports=no])
144 AC_ARG_ENABLE([ccache],
145 [AS_HELP_STRING([--disable-ccache],
146 [do not use ccache for building (default is to use if found)])],
147 [use_ccache=$enableval],
150 AC_ARG_ENABLE([lcov],
151 [AS_HELP_STRING([--enable-lcov],
152 [enable lcov testing (default is no)])],
156 AC_ARG_ENABLE([glibc-back-compat],
157 [AS_HELP_STRING([--enable-glibc-back-compat],
158 [enable backwards compatibility with glibc])],
159 [use_glibc_compat=$enableval],
160 [use_glibc_compat=no])
162 AC_ARG_WITH([system-univalue],
163 [AS_HELP_STRING([--with-system-univalue],
164 [Build with system UniValue (default is no)])],
165 [system_univalue=$withval],
169 [AS_HELP_STRING([--disable-zmq],
170 [disable ZMQ notifications])],
171 [use_zmq=$enableval],
174 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
177 AC_ARG_ENABLE([debug],
178 [AS_HELP_STRING([--enable-debug],
179 [use debug compiler flags and macros (default is no)])],
180 [enable_debug=$enableval],
183 if test "x$enable_debug" = xyes; then
184 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
185 if test "x$GCC" = xyes; then
186 CFLAGS="$CFLAGS -g3 -O0"
189 if test "x$GXX" = xyes; then
190 CXXFLAGS="$CXXFLAGS -g3 -O0"
194 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
195 ## compatibility with the legacy buildsystem.
197 if test "x$CXXFLAGS_overridden" = "xno"; then
198 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
200 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
203 [AS_HELP_STRING([--with-utils],
204 [build bitcoin-cli bitcoin-tx (default=yes)])],
205 [build_bitcoin_utils=$withval],
206 [build_bitcoin_utils=yes])
209 [AS_HELP_STRING([--with-libs],
210 [build libraries (default=yes)])],
211 [build_bitcoin_libs=$withval],
212 [build_bitcoin_libs=yes])
214 AC_ARG_WITH([daemon],
215 [AS_HELP_STRING([--with-daemon],
216 [build bitcoind daemon (default=yes)])],
217 [build_bitcoind=$withval],
218 [build_bitcoind=yes])
226 #pkgconfig does more harm than good with MinGW
230 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
231 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
232 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
233 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
234 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
235 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
236 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
237 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
238 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
239 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
240 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
241 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
242 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
243 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
244 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
245 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
246 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
247 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
248 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
250 # -static is interpreted by libtool, where it has a different meaning.
251 # In libtool-speak, it's -all-static.
252 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
254 AC_PATH_PROG([MAKENSIS], [makensis], none)
255 if test x$MAKENSIS = xnone; then
256 AC_MSG_WARN("makensis not found. Cannot create installer.")
259 AC_PATH_TOOL(WINDRES, windres, none)
260 if test x$WINDRES = xnone; then
261 AC_MSG_ERROR("windres not found")
264 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
265 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
266 if test "x$CXXFLAGS_overridden" = "xno"; then
267 CXXFLAGS="$CXXFLAGS -w"
270 i?86-*) WINDOWS_BITS=32 ;;
271 x86_64-*) WINDOWS_BITS=64 ;;
272 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
274 AC_SUBST(WINDOWS_BITS)
276 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
277 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
278 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
279 dnl also overridden to prevent their insertion later.
280 dnl This should only affect dll's.
281 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
287 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
288 if test x$cross_compiling != xyes; then
290 AC_CHECK_PROG([PORT],port, port)
291 if test x$PORT = xport; then
292 dnl add default macports paths
293 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
294 LIBS="$LIBS -L/opt/local/lib"
295 if test -d /opt/local/include/db48; then
296 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
297 LIBS="$LIBS -L/opt/local/lib/db48"
301 AC_CHECK_PROG([BREW],brew, brew)
302 if test x$BREW = xbrew; then
303 dnl These Homebrew packages may be keg-only, meaning that they won't be found
304 dnl in expected paths because they may conflict with system files. Ask
305 dnl Homebrew where each one is located, then adjust paths accordingly.
306 dnl It's safe to add these paths even if the functionality is disabled by
307 dnl the user (--without-wallet or --without-gui for example).
309 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
310 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
311 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
312 if test x$openssl_prefix != x; then
313 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
314 export PKG_CONFIG_PATH
316 if test x$bdb_prefix != x; then
317 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
318 LIBS="$LIBS -L$bdb_prefix/lib"
320 if test x$qt5_prefix != x; then
321 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
322 export PKG_CONFIG_PATH
331 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
332 AC_PATH_TOOL([OTOOL], [otool], otool)
333 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
334 AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
335 AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
336 AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
338 dnl libtool will try to strip the static lib, which is a problem for
339 dnl cross-builds because strip attempts to call a hard-coded ld,
340 dnl which may not exist in the path. Stripping the .a is not
341 dnl necessary, so just disable it.
347 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
348 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
349 OBJCXXFLAGS="$CXXFLAGS"
358 if test x$use_comparison_tool != xno; then
359 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
362 if test x$use_comparison_tool_reorg_tests != xno; then
363 if test x$use_comparison_tool = x; then
364 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
366 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
368 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
371 if test x$use_extended_rpc_tests != xno; then
372 AC_SUBST(EXTENDED_RPC_TESTS, -extended)
375 if test x$use_lcov = xyes; then
376 if test x$LCOV = x; then
377 AC_MSG_ERROR("lcov testing requested but lcov not found")
379 if test x$GCOV = x; then
380 AC_MSG_ERROR("lcov testing requested but gcov not found")
382 if test x$JAVA = x; then
383 AC_MSG_ERROR("lcov testing requested but java not found")
385 if test x$PYTHON = x; then
386 AC_MSG_ERROR("lcov testing requested but python not found")
388 if test x$GENHTML = x; then
389 AC_MSG_ERROR("lcov testing requested but genhtml not found")
391 if test x$use_comparison_tool = x; then
392 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
394 LCOV="$LCOV --gcov-tool=$GCOV"
395 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
396 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
399 dnl Check for endianness
402 dnl Check for pthread compile/link requirements
405 # The following macro will add the necessary defines to bitcoin-config.h, but
406 # they also need to be passed down to any subprojects. Pull the results out of
407 # the cache and add them to CPPFLAGS.
409 # detect POSIX or GNU variant of strerror_r
412 if test x$ac_cv_sys_file_offset_bits != x &&
413 test x$ac_cv_sys_file_offset_bits != xno &&
414 test x$ac_cv_sys_file_offset_bits != xunknown; then
415 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
418 if test x$ac_cv_sys_large_files != x &&
419 test x$ac_cv_sys_large_files != xno &&
420 test x$ac_cv_sys_large_files != xunknown; then
421 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
424 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
426 AX_GCC_FUNC_ATTRIBUTE([visibility])
427 AX_GCC_FUNC_ATTRIBUTE([dllexport])
428 AX_GCC_FUNC_ATTRIBUTE([dllimport])
430 if test x$use_glibc_compat != xno; then
432 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
433 #in anyway for back-compat.
434 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
436 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
437 # See which one is present here.
438 AC_MSG_CHECKING(__fdelt_chk type)
439 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
440 #undef _FORTIFY_SOURCE
442 #define _FORTIFY_SOURCE 2
443 #include <sys/select.h>
444 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
445 [ fdelt_type="long unsigned int"],
446 [ fdelt_type="long int"])
447 AC_MSG_RESULT($fdelt_type)
448 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
450 AC_SEARCH_LIBS([clock_gettime],[rt])
453 if test x$TARGET_OS != xwindows; then
454 # All windows code is PIC, forcing it on just adds useless compile warnings
455 AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
458 if test x$use_hardening != xno; then
459 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
460 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
462 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
463 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
464 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
466 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
469 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
470 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
471 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
472 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
474 if test x$TARGET_OS != xwindows; then
475 AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
476 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
481 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
486 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
487 if test x$TARGET_OS = xdarwin; then
488 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
491 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])
492 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
493 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
495 AC_CHECK_DECLS([strnlen])
497 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
500 #elif HAVE_SYS_ENDIAN_H
501 #include <sys/endian.h>
504 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
506 #include <byteswap.h>
509 dnl Check for MSG_NOSIGNAL
510 AC_MSG_CHECKING(for MSG_NOSIGNAL)
511 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
512 [[ int f = MSG_NOSIGNAL; ]])],
513 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
517 AC_MSG_CHECKING([for visibility attribute])
518 AC_LINK_IFELSE([AC_LANG_SOURCE([
519 int foo_def( void ) __attribute__((visibility("default")));
523 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
528 if test x$use_reduce_exports = xyes; then
529 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
534 if test x$use_reduce_exports = xyes; then
535 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
536 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
542 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
543 AC_SUBST(LEVELDB_CPPFLAGS)
547 if test x$enable_wallet != xno; then
548 dnl Check for libdb_cxx only if wallet enabled
552 dnl Check for libminiupnpc (optional)
553 if test x$use_upnp != xno; then
555 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
556 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
563 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
564 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
566 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
572 if test x$use_boost = xyes; then
574 dnl Check for boost libs
578 AX_BOOST_PROGRAM_OPTIONS
583 if test x$use_reduce_exports = xyes; then
584 AC_MSG_CHECKING([for working boost reduced exports])
585 TEMP_CPPFLAGS="$CPPFLAGS"
586 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
587 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
588 @%:@include <boost/version.hpp>
590 #if BOOST_VERSION >= 104900
591 // Everything is okay
593 # error Boost version is too old
598 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
600 CPPFLAGS="$TEMP_CPPFLAGS"
604 if test x$use_reduce_exports = xyes; then
605 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
606 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
609 if test x$use_tests = xyes; then
611 if test x$HEXDUMP = x; then
612 AC_MSG_ERROR(hexdump is required for tests)
616 if test x$use_boost = xyes; then
618 AX_BOOST_UNIT_TEST_FRAMEWORK
620 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
621 AC_MSG_CHECKING([for dynamic linked boost test])
623 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
624 TEMP_CPPFLAGS="$CPPFLAGS"
625 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
626 AC_LINK_IFELSE([AC_LANG_SOURCE([
627 #define BOOST_TEST_DYN_LINK
628 #define BOOST_TEST_MAIN
629 #include <boost/test/unit_test.hpp>
633 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
636 CPPFLAGS="$TEMP_CPPFLAGS"
641 if test x$use_boost = xyes; then
643 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
646 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
647 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
648 dnl the abi. This was fixed in 1.57.
650 dnl When building against that installed version using c++11, the headers pick up
651 dnl on the native c++11 scoped enum support and enable it, however it will fail to
652 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
654 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
657 LIBS="$BOOST_LIBS $LIBS"
658 TEMP_CPPFLAGS="$CPPFLAGS"
659 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
660 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
661 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
662 #include "boost/config.hpp"
663 #include "boost/version.hpp"
664 #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
665 #define BOOST_NO_SCOPED_ENUMS
666 #define BOOST_NO_CXX11_SCOPED_ENUMS
669 #include "boost/filesystem.hpp"
672 boost::filesystem::copy_file("foo", "bar");
677 [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
679 CPPFLAGS="$TEMP_CPPFLAGS"
681 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
682 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
683 dnl a working version is available, else fall back to sleep. sleep was removed
685 dnl If neither is available, abort.
687 LIBS="$BOOST_LIBS $LIBS"
688 TEMP_CPPFLAGS="$CPPFLAGS"
689 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
690 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
691 #include <boost/thread/thread.hpp>
692 #include <boost/version.hpp>
694 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
695 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
701 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
704 CPPFLAGS="$TEMP_CPPFLAGS"
706 if test x$boost_sleep != xyes; then
708 LIBS="$BOOST_LIBS $LIBS"
709 TEMP_CPPFLAGS="$CPPFLAGS"
710 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
711 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
712 #include <boost/version.hpp>
713 #include <boost/thread.hpp>
714 #include <boost/date_time/posix_time/posix_time_types.hpp>
716 #if BOOST_VERSION <= 105600
717 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
722 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
725 CPPFLAGS="$TEMP_CPPFLAGS"
728 if test x$boost_sleep != xyes; then
729 AC_MSG_ERROR(No working boost sleep implementation found.)
734 if test x$use_pkgconfig = xyes; then
736 if test x"$PKG_CONFIG" = "x"; then
737 AC_MSG_ERROR(pkg-config not found.)
744 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
745 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
746 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
747 if test x$use_qr != xno; then
748 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
750 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
751 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
752 if test x$TARGET_OS != xwindows; then
753 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
757 if test "x$use_zmq" = "xyes"; then
758 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
759 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
760 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
761 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
764 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
769 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
770 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
772 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
773 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
775 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
776 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
777 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
778 if test x$TARGET_OS != xwindows; then
779 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
783 if test "x$use_zmq" = "xyes"; then
784 AC_CHECK_HEADER([zmq.h],
785 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
786 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
788 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
789 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
790 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
792 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
794 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
797 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
798 if test x$use_qr != xno; then
799 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
800 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
806 if test x$system_univalue != xno ; then
808 if test x$use_pkgconfig = xyes; then
813 PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
817 AC_CHECK_HEADER([univalue.h],[
818 AC_CHECK_LIB([univalue], [main],[
819 UNIVALUE_LIBS=-lunivalue
825 if test x$found_univalue = xyes ; then
827 elif test x$system_univalue = xyes ; then
828 AC_MSG_ERROR([univalue not found])
834 if test x$system_univalue = xno ; then
835 UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
836 UNIVALUE_LIBS='univalue/libunivalue.la'
838 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$system_univalue = xno])
839 AC_SUBST(UNIVALUE_CFLAGS)
840 AC_SUBST(UNIVALUE_LIBS)
842 CXXFLAGS_TEMP="$CXXFLAGS"
844 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
845 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
846 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
847 CXXFLAGS="$CXXFLAGS_TEMP"
850 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
852 AC_MSG_CHECKING([whether to build bitcoind])
853 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
854 AC_MSG_RESULT($build_bitcoind)
856 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
857 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
858 AC_MSG_RESULT($build_bitcoin_utils)
860 AC_MSG_CHECKING([whether to build libraries])
861 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
862 if test x$build_bitcoin_libs = xyes; then
863 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
864 AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
866 AC_MSG_RESULT($build_bitcoin_libs)
870 if test "x$use_ccache" != "xno"; then
871 AC_MSG_CHECKING(if ccache should be used)
872 if test x$CCACHE = x; then
873 if test "x$use_ccache" = "xyes"; then
874 AC_MSG_ERROR([ccache not found.]);
880 CC="$ac_cv_path_CCACHE $CC"
881 CXX="$ac_cv_path_CCACHE $CXX"
883 AC_MSG_RESULT($use_ccache)
885 if test "x$use_ccache" = "xyes"; then
886 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
890 AC_MSG_CHECKING([if wallet should be enabled])
891 if test x$enable_wallet != xno; then
893 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
899 dnl enable upnp support
900 AC_MSG_CHECKING([whether to build with support for UPnP])
901 if test x$have_miniupnpc = xno; then
902 if test x$use_upnp = xyes; then
903 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
907 if test x$use_upnp != xno; then
909 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
912 if test x$use_upnp_default != xno; then
916 AC_MSG_RESULT($use_upnp_default)
917 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
918 if test x$TARGET_OS = xwindows; then
919 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
926 dnl these are only used when qt is enabled
928 if test x$bitcoin_enable_qt != xno; then
929 dnl enable dbus support
930 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
931 if test x$bitcoin_enable_qt_dbus != xno; then
932 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
934 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
936 dnl enable qr support
937 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
938 if test x$have_qrencode = xno; then
939 if test x$use_qr = xyes; then
940 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
944 if test x$use_qr != xno; then
946 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
953 if test x$XGETTEXT = x; then
954 AC_MSG_WARN("xgettext is required to update qt translations")
957 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
958 if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
966 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
968 AC_MSG_CHECKING([whether to build test_bitcoin])
969 if test x$use_tests = xyes; then
977 AC_MSG_CHECKING([whether to reduce exports])
978 if test x$use_reduce_exports = xyes; then
984 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
985 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
988 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
989 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
990 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
991 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
992 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
993 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
994 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
995 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
996 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
997 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
998 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
999 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
1000 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
1001 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1003 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
1004 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
1005 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1006 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1007 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1008 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year])
1009 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1010 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1011 define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])])
1012 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1013 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1014 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1015 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1016 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1017 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1018 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1019 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1020 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1021 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1024 AC_SUBST(HARDENED_CXXFLAGS)
1025 AC_SUBST(HARDENED_CPPFLAGS)
1026 AC_SUBST(HARDENED_LDFLAGS)
1029 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1031 AC_SUBST(USE_QRCODE)
1032 AC_SUBST(BOOST_LIBS)
1034 AC_SUBST(LEVELDB_TARGET_FLAGS)
1035 AC_SUBST(MINIUPNPC_CPPFLAGS)
1036 AC_SUBST(MINIUPNPC_LIBS)
1037 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
1038 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
1039 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
1041 dnl boost's m4 checks do something really nasty: they export these vars. As a
1042 dnl result, they leak into secp256k1's configure and crazy things happen.
1043 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1044 CPPFLAGS_TEMP="$CPPFLAGS"
1046 CPPFLAGS="$CPPFLAGS_TEMP"
1048 LDFLAGS_TEMP="$LDFLAGS"
1050 LDFLAGS="$LDFLAGS_TEMP"
1056 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1057 unset PKG_CONFIG_PATH
1058 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1060 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1061 unset PKG_CONFIG_LIBDIR
1062 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1064 if test x$system_univalue = xno; then
1065 AC_CONFIG_SUBDIRS([src/univalue])
1068 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1069 AC_CONFIG_SUBDIRS([src/secp256k1])
1073 dnl Taken from https://wiki.debian.org/RpathIssue
1076 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1077 sed < libtool > libtool-2 \
1078 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1079 mv libtool-2 libtool
1084 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1087 sed 's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/' qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
1088 mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py