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_PROG(PYTHON, 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],
102 AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]),
103 [use_bench=$enableval],
106 AC_ARG_WITH([comparison-tool],
107 AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
108 [use_comparison_tool=$withval],
109 [use_comparison_tool=no])
111 AC_ARG_ENABLE([comparison-tool-reorg-tests],
112 AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
113 [use_comparison_tool_reorg_tests=$enableval],
114 [use_comparison_tool_reorg_tests=no])
116 AC_ARG_ENABLE([extended-rpc-tests],
117 AS_HELP_STRING([--enable-extended-rpc-tests],[enable expensive RPC tests when using lcov (default no)]),
118 [use_extended_rpc_tests=$enableval],
119 [use_extended_rpc_tests=no])
121 AC_ARG_WITH([qrencode],
122 [AS_HELP_STRING([--with-qrencode],
123 [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
127 AC_ARG_ENABLE([hardening],
128 [AS_HELP_STRING([--disable-hardening],
129 [do not attempt to harden the resulting executables (default is to harden)])],
130 [use_hardening=$enableval],
133 AC_ARG_ENABLE([reduce-exports],
134 [AS_HELP_STRING([--enable-reduce-exports],
135 [attempt to reduce exported symbols in the resulting executables (default is no)])],
136 [use_reduce_exports=$enableval],
137 [use_reduce_exports=no])
139 AC_ARG_ENABLE([ccache],
140 [AS_HELP_STRING([--disable-ccache],
141 [do not use ccache for building (default is to use if found)])],
142 [use_ccache=$enableval],
145 AC_ARG_ENABLE([lcov],
146 [AS_HELP_STRING([--enable-lcov],
147 [enable lcov testing (default is no)])],
151 AC_ARG_ENABLE([glibc-back-compat],
152 [AS_HELP_STRING([--enable-glibc-back-compat],
153 [enable backwards compatibility with glibc])],
154 [use_glibc_compat=$enableval],
155 [use_glibc_compat=no])
157 AC_ARG_WITH([system-univalue],
158 [AS_HELP_STRING([--with-system-univalue],
159 [Build with system UniValue (default is no)])],
160 [system_univalue=$withval],
164 [AS_HELP_STRING([--disable-zmq],
165 [disable ZMQ notifications])],
166 [use_zmq=$enableval],
169 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
172 AC_ARG_ENABLE([debug],
173 [AS_HELP_STRING([--enable-debug],
174 [use debug compiler flags and macros (default is no)])],
175 [enable_debug=$enableval],
178 if test "x$enable_debug" = xyes; then
179 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
180 if test "x$GCC" = xyes; then
181 CFLAGS="$CFLAGS -g3 -O0"
184 if test "x$GXX" = xyes; then
185 CXXFLAGS="$CXXFLAGS -g3 -O0"
189 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
190 ## compatibility with the legacy buildsystem.
192 if test "x$CXXFLAGS_overridden" = "xno"; then
193 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
195 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
198 [AS_HELP_STRING([--with-utils],
199 [build bitcoin-cli bitcoin-tx (default=yes)])],
200 [build_bitcoin_utils=$withval],
201 [build_bitcoin_utils=yes])
204 [AS_HELP_STRING([--with-libs],
205 [build libraries (default=yes)])],
206 [build_bitcoin_libs=$withval],
207 [build_bitcoin_libs=yes])
209 AC_ARG_WITH([daemon],
210 [AS_HELP_STRING([--with-daemon],
211 [build bitcoind daemon (default=yes)])],
212 [build_bitcoind=$withval],
213 [build_bitcoind=yes])
221 #pkgconfig does more harm than good with MinGW
225 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
226 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
227 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
228 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
229 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
230 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
231 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
232 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
233 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
234 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
235 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
236 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
237 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
238 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
239 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
240 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
241 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
242 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
243 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
245 # -static is interpreted by libtool, where it has a different meaning.
246 # In libtool-speak, it's -all-static.
247 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
249 AC_PATH_PROG([MAKENSIS], [makensis], none)
250 if test x$MAKENSIS = xnone; then
251 AC_MSG_WARN("makensis not found. Cannot create installer.")
254 AC_PATH_TOOL(WINDRES, windres, none)
255 if test x$WINDRES = xnone; then
256 AC_MSG_ERROR("windres not found")
259 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
260 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
261 if test "x$CXXFLAGS_overridden" = "xno"; then
262 CXXFLAGS="$CXXFLAGS -w"
265 i?86-*) WINDOWS_BITS=32 ;;
266 x86_64-*) WINDOWS_BITS=64 ;;
267 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
269 AC_SUBST(WINDOWS_BITS)
271 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
272 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
273 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
274 dnl also overridden to prevent their insertion later.
275 dnl This should only affect dll's.
276 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
282 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
283 if test x$cross_compiling != xyes; then
285 AC_CHECK_PROG([PORT],port, port)
286 if test x$PORT = xport; then
287 dnl add default macports paths
288 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
289 LIBS="$LIBS -L/opt/local/lib"
290 if test -d /opt/local/include/db48; then
291 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
292 LIBS="$LIBS -L/opt/local/lib/db48"
296 AC_CHECK_PROG([BREW],brew, brew)
297 if test x$BREW = xbrew; then
298 dnl These Homebrew packages may be keg-only, meaning that they won't be found
299 dnl in expected paths because they may conflict with system files. Ask
300 dnl Homebrew where each one is located, then adjust paths accordingly.
301 dnl It's safe to add these paths even if the functionality is disabled by
302 dnl the user (--without-wallet or --without-gui for example).
304 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
305 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
306 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
307 if test x$openssl_prefix != x; then
308 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
309 export PKG_CONFIG_PATH
311 if test x$bdb_prefix != x; then
312 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
313 LIBS="$LIBS -L$bdb_prefix/lib"
315 if test x$qt5_prefix != x; then
316 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
317 export PKG_CONFIG_PATH
326 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
327 AC_PATH_TOOL([OTOOL], [otool], otool)
328 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
329 AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
330 AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert)
331 AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp)
333 dnl libtool will try to strip the static lib, which is a problem for
334 dnl cross-builds because strip attempts to call a hard-coded ld,
335 dnl which may not exist in the path. Stripping the .a is not
336 dnl necessary, so just disable it.
342 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
343 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
344 OBJCXXFLAGS="$CXXFLAGS"
353 if test x$use_comparison_tool != xno; then
354 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
357 if test x$use_comparison_tool_reorg_tests != xno; then
358 if test x$use_comparison_tool = x; then
359 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
361 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
363 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
366 if test x$use_extended_rpc_tests != xno; then
367 AC_SUBST(EXTENDED_RPC_TESTS, -extended)
370 if test x$use_lcov = xyes; then
371 if test x$LCOV = x; then
372 AC_MSG_ERROR("lcov testing requested but lcov not found")
374 if test x$GCOV = x; then
375 AC_MSG_ERROR("lcov testing requested but gcov not found")
377 if test x$JAVA = x; then
378 AC_MSG_ERROR("lcov testing requested but java not found")
380 if test x$PYTHON = x; then
381 AC_MSG_ERROR("lcov testing requested but python not found")
383 if test x$GENHTML = x; then
384 AC_MSG_ERROR("lcov testing requested but genhtml not found")
386 if test x$use_comparison_tool = x; then
387 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
389 LCOV="$LCOV --gcov-tool=$GCOV"
390 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
391 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
394 dnl Check for endianness
397 dnl Check for pthread compile/link requirements
400 # The following macro will add the necessary defines to bitcoin-config.h, but
401 # they also need to be passed down to any subprojects. Pull the results out of
402 # the cache and add them to CPPFLAGS.
404 # detect POSIX or GNU variant of strerror_r
407 if test x$ac_cv_sys_file_offset_bits != x &&
408 test x$ac_cv_sys_file_offset_bits != xno &&
409 test x$ac_cv_sys_file_offset_bits != xunknown; then
410 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
413 if test x$ac_cv_sys_large_files != x &&
414 test x$ac_cv_sys_large_files != xno &&
415 test x$ac_cv_sys_large_files != xunknown; then
416 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
419 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
421 AX_GCC_FUNC_ATTRIBUTE([visibility])
422 AX_GCC_FUNC_ATTRIBUTE([dllexport])
423 AX_GCC_FUNC_ATTRIBUTE([dllimport])
425 if test x$use_glibc_compat != xno; then
427 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
428 #in anyway for back-compat.
429 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
431 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
432 # See which one is present here.
433 AC_MSG_CHECKING(__fdelt_chk type)
434 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
435 #undef _FORTIFY_SOURCE
437 #define _FORTIFY_SOURCE 2
438 #include <sys/select.h>
439 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
440 [ fdelt_type="long unsigned int"],
441 [ fdelt_type="long int"])
442 AC_MSG_RESULT($fdelt_type)
443 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
445 AC_SEARCH_LIBS([clock_gettime],[rt])
448 if test x$TARGET_OS != xwindows; then
449 # All windows code is PIC, forcing it on just adds useless compile warnings
450 AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
453 if test x$use_hardening != xno; then
454 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
455 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
457 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
458 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
459 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
461 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
464 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
465 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
466 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
467 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
469 if test x$TARGET_OS != xwindows; then
470 AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
471 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
476 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
481 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
482 if test x$TARGET_OS = xdarwin; then
483 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
486 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])
487 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
488 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
490 AC_CHECK_DECLS([strnlen])
492 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
495 #elif HAVE_SYS_ENDIAN_H
496 #include <sys/endian.h>
499 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
501 #include <byteswap.h>
504 dnl Check for MSG_NOSIGNAL
505 AC_MSG_CHECKING(for MSG_NOSIGNAL)
506 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
507 [[ int f = MSG_NOSIGNAL; ]])],
508 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
512 AC_MSG_CHECKING([for visibility attribute])
513 AC_LINK_IFELSE([AC_LANG_SOURCE([
514 int foo_def( void ) __attribute__((visibility("default")));
518 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
523 if test x$use_reduce_exports = xyes; then
524 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
529 if test x$use_reduce_exports = xyes; then
530 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
531 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
537 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
538 AC_SUBST(LEVELDB_CPPFLAGS)
542 if test x$enable_wallet != xno; then
543 dnl Check for libdb_cxx only if wallet enabled
547 dnl Check for libminiupnpc (optional)
548 if test x$use_upnp != xno; then
550 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
551 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
558 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
559 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
561 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
567 if test x$use_boost = xyes; then
569 dnl Check for boost libs
573 AX_BOOST_PROGRAM_OPTIONS
578 if test x$use_reduce_exports = xyes; then
579 AC_MSG_CHECKING([for working boost reduced exports])
580 TEMP_CPPFLAGS="$CPPFLAGS"
581 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
582 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
583 @%:@include <boost/version.hpp>
585 #if BOOST_VERSION >= 104900
586 // Everything is okay
588 # error Boost version is too old
593 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
595 CPPFLAGS="$TEMP_CPPFLAGS"
599 if test x$use_reduce_exports = xyes; then
600 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
601 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
604 if test x$use_tests = xyes; then
606 if test x$HEXDUMP = x; then
607 AC_MSG_ERROR(hexdump is required for tests)
611 if test x$use_boost = xyes; then
613 AX_BOOST_UNIT_TEST_FRAMEWORK
615 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
616 AC_MSG_CHECKING([for dynamic linked boost test])
618 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
619 TEMP_CPPFLAGS="$CPPFLAGS"
620 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
621 AC_LINK_IFELSE([AC_LANG_SOURCE([
622 #define BOOST_TEST_DYN_LINK
623 #define BOOST_TEST_MAIN
624 #include <boost/test/unit_test.hpp>
628 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
631 CPPFLAGS="$TEMP_CPPFLAGS"
636 if test x$use_boost = xyes; then
638 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
641 dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
642 dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
643 dnl the abi. This was fixed in 1.57.
645 dnl When building against that installed version using c++11, the headers pick up
646 dnl on the native c++11 scoped enum support and enable it, however it will fail to
647 dnl link. This can be worked around by disabling c++11 scoped enums if linking will
649 dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
652 LIBS="$BOOST_LIBS $LIBS"
653 TEMP_CPPFLAGS="$CPPFLAGS"
654 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
655 AC_MSG_CHECKING([for mismatched boost c++11 scoped enums])
656 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
657 #include "boost/config.hpp"
658 #include "boost/version.hpp"
659 #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700
660 #define BOOST_NO_SCOPED_ENUMS
661 #define BOOST_NO_CXX11_SCOPED_ENUMS
664 #include "boost/filesystem.hpp"
667 boost::filesystem::copy_file("foo", "bar");
672 [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
674 CPPFLAGS="$TEMP_CPPFLAGS"
676 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
677 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
678 dnl a working version is available, else fall back to sleep. sleep was removed
680 dnl If neither is available, abort.
682 LIBS="$BOOST_LIBS $LIBS"
683 TEMP_CPPFLAGS="$CPPFLAGS"
684 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
685 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
686 #include <boost/thread/thread.hpp>
687 #include <boost/version.hpp>
689 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
690 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
696 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
699 CPPFLAGS="$TEMP_CPPFLAGS"
701 if test x$boost_sleep != xyes; then
703 LIBS="$BOOST_LIBS $LIBS"
704 TEMP_CPPFLAGS="$CPPFLAGS"
705 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
706 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
707 #include <boost/version.hpp>
708 #include <boost/thread.hpp>
709 #include <boost/date_time/posix_time/posix_time_types.hpp>
711 #if BOOST_VERSION <= 105600
712 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
717 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
720 CPPFLAGS="$TEMP_CPPFLAGS"
723 if test x$boost_sleep != xyes; then
724 AC_MSG_ERROR(No working boost sleep implementation found.)
729 if test x$use_pkgconfig = xyes; then
731 if test x"$PKG_CONFIG" = "x"; then
732 AC_MSG_ERROR(pkg-config not found.)
739 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
740 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
741 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
742 if test x$use_qr != xno; then
743 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
745 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
746 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
747 if test x$TARGET_OS != xwindows; then
748 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
752 if test "x$use_zmq" = "xyes"; then
753 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
754 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
755 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
756 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
759 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
764 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
765 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
767 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
768 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
770 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
771 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
772 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
773 if test x$TARGET_OS != xwindows; then
774 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
778 if test "x$use_zmq" = "xyes"; then
779 AC_CHECK_HEADER([zmq.h],
780 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
781 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
783 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
784 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
785 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
787 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
789 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
792 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
793 if test x$use_qr != xno; then
794 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
795 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
801 if test x$system_univalue != xno ; then
803 if test x$use_pkgconfig = xyes; then
808 PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true])
812 AC_CHECK_HEADER([univalue.h],[
813 AC_CHECK_LIB([univalue], [main],[
814 UNIVALUE_LIBS=-lunivalue
820 if test x$found_univalue = xyes ; then
822 elif test x$system_univalue = xyes ; then
823 AC_MSG_ERROR([univalue not found])
829 if test x$system_univalue = xno ; then
830 UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
831 UNIVALUE_LIBS='univalue/libunivalue.la'
833 AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$system_univalue = xno])
834 AC_SUBST(UNIVALUE_CFLAGS)
835 AC_SUBST(UNIVALUE_LIBS)
837 CXXFLAGS_TEMP="$CXXFLAGS"
839 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
840 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
841 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
842 CXXFLAGS="$CXXFLAGS_TEMP"
845 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
847 AC_MSG_CHECKING([whether to build bitcoind])
848 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
849 AC_MSG_RESULT($build_bitcoind)
851 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
852 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
853 AC_MSG_RESULT($build_bitcoin_utils)
855 AC_MSG_CHECKING([whether to build libraries])
856 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
857 if test x$build_bitcoin_libs = xyes; then
858 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
859 AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
861 AC_MSG_RESULT($build_bitcoin_libs)
865 if test "x$use_ccache" != "xno"; then
866 AC_MSG_CHECKING(if ccache should be used)
867 if test x$CCACHE = x; then
868 if test "x$use_ccache" = "xyes"; then
869 AC_MSG_ERROR([ccache not found.]);
875 CC="$ac_cv_path_CCACHE $CC"
876 CXX="$ac_cv_path_CCACHE $CXX"
878 AC_MSG_RESULT($use_ccache)
880 if test "x$use_ccache" = "xyes"; then
881 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
885 AC_MSG_CHECKING([if wallet should be enabled])
886 if test x$enable_wallet != xno; then
888 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
894 dnl enable upnp support
895 AC_MSG_CHECKING([whether to build with support for UPnP])
896 if test x$have_miniupnpc = xno; then
897 if test x$use_upnp = xyes; then
898 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
902 if test x$use_upnp != xno; then
904 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
907 if test x$use_upnp_default != xno; then
911 AC_MSG_RESULT($use_upnp_default)
912 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
913 if test x$TARGET_OS = xwindows; then
914 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
921 dnl these are only used when qt is enabled
922 if test x$bitcoin_enable_qt != xno; then
924 dnl enable dbus support
925 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
926 if test x$bitcoin_enable_qt_dbus != xno; then
927 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
929 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
931 dnl enable qr support
932 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
933 if test x$have_qrencode = xno; then
934 if test x$use_qr = xyes; then
935 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
939 if test x$use_qr != xno; then
941 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
948 if test x$XGETTEXT = x; then
949 AC_MSG_WARN("xgettext is required to update qt translations")
952 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
953 if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
961 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
963 AC_MSG_CHECKING([whether to build test_bitcoin])
964 if test x$use_tests = xyes; then
971 AC_MSG_CHECKING([whether to reduce exports])
972 if test x$use_reduce_exports = xyes; then
978 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
979 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
982 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
983 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
984 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
985 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
986 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
987 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
988 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
989 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
990 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
991 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
992 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
993 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
994 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
995 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
997 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
998 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
999 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
1000 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
1001 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
1002 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
1003 AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement])
1004 AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string])
1005 define(_COPYRIGHT_HOLDERS_FINAL, patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION]))
1006 AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)])
1007 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
1008 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
1009 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
1010 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
1011 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
1012 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
1013 AC_SUBST(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS")
1014 AC_SUBST(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION")
1015 AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL")
1018 AC_SUBST(HARDENED_CXXFLAGS)
1019 AC_SUBST(HARDENED_CPPFLAGS)
1020 AC_SUBST(HARDENED_LDFLAGS)
1023 AC_SUBST(LIBTOOL_APP_LDFLAGS)
1025 AC_SUBST(USE_QRCODE)
1026 AC_SUBST(BOOST_LIBS)
1028 AC_SUBST(LEVELDB_TARGET_FLAGS)
1029 AC_SUBST(BUILD_TEST)
1031 AC_SUBST(BUILD_TEST_QT)
1032 AC_SUBST(MINIUPNPC_CPPFLAGS)
1033 AC_SUBST(MINIUPNPC_LIBS)
1034 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
1035 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
1036 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
1038 dnl boost's m4 checks do something really nasty: they export these vars. As a
1039 dnl result, they leak into secp256k1's configure and crazy things happen.
1040 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
1041 CPPFLAGS_TEMP="$CPPFLAGS"
1043 CPPFLAGS="$CPPFLAGS_TEMP"
1045 LDFLAGS_TEMP="$LDFLAGS"
1047 LDFLAGS="$LDFLAGS_TEMP"
1053 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1054 unset PKG_CONFIG_PATH
1055 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1057 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1058 unset PKG_CONFIG_LIBDIR
1059 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1061 if test x$system_univalue = xno; then
1062 AC_CONFIG_SUBDIRS([src/univalue])
1065 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
1066 AC_CONFIG_SUBDIRS([src/secp256k1])
1070 dnl Taken from https://wiki.debian.org/RpathIssue
1073 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1074 sed < libtool > libtool-2 \
1075 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1076 mv libtool-2 libtool
1081 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
1084 sed 's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/' qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
1085 mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py