1 dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
3 define(_CLIENT_VERSION_MAJOR, 0)
4 define(_CLIENT_VERSION_MINOR, 9)
5 define(_CLIENT_VERSION_REVISION, 99)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_IS_RELEASE, false)
8 define(_COPYRIGHT_YEAR, 2014)
9 AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[
[email protected]],[bitcoin])
10 AC_CONFIG_SRCDIR([src/main.cpp])
11 AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
12 AC_CONFIG_AUX_DIR([build-aux])
13 AC_CONFIG_MACRO_DIR([build-aux/m4])
17 AH_TOP([#ifndef BITCOIN_CONFIG_H])
18 AH_TOP([#define BITCOIN_CONFIG_H])
19 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
21 dnl faketime breaks configure and is only needed for make. Disable it here.
24 dnl Automake init set-up and checks
25 AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
27 dnl faketime messes with timestamps and causes configure to be re-run.
28 dnl --disable-maintainer-mode can be used to bypass this.
29 AM_MAINTAINER_MODE([enable])
31 dnl make the compilation flags quiet unless V=1 is used
32 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
34 dnl Compiler checks (here before libtool).
35 if test "x${CXXFLAGS+set}" = "xset"; then
36 CXXFLAGS_overridden=yes
38 CXXFLAGS_overridden=no
41 m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
43 dnl By default, libtool for mingw refuses to link static libs into a dll for
44 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
45 dnl we have those under control, re-enable that functionality.
48 lt_cv_deplibs_check_method="pass_all"
51 dnl Libtool init checks.
52 LT_INIT([disable-shared])
54 dnl Check/return PATH for base programs.
56 AC_PATH_TOOL(RANLIB, ranlib)
57 AC_PATH_TOOL(STRIP, strip)
58 AC_PATH_TOOL(GCOV, gcov)
59 AC_PATH_PROG(LCOV, lcov)
60 AC_PATH_PROG(JAVA, java)
61 AC_PATH_PROG(GENHTML, genhtml)
62 AC_PATH_PROG([GIT], [git])
63 AC_PATH_PROG(CCACHE,ccache)
64 AC_PATH_PROG(XGETTEXT,xgettext)
65 AC_PATH_PROG(HEXDUMP,hexdump)
67 # This m4 will only be used if a system copy cannot be found. This is helpful
68 # on systems where autotools are installed but the pkg-config macros are not in
69 # a default location. It is currently used for building on OSX where autotools
70 # are preinstalled but pkg-config comes from macports or homebrew. It should
71 # probably be removed when building on <= 10.6 is no longer supported.
78 AC_ARG_ENABLE([wallet],
79 [AS_HELP_STRING([--enable-wallet],
80 [enable wallet (default is yes)])],
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([--enable-tests],[compile tests (default is yes)]),
98 [use_tests=$enableval],
101 AC_ARG_WITH([comparison-tool],
102 AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
103 [use_comparison_tool=$withval],
104 [use_comparison_tool=no])
106 AC_ARG_ENABLE([comparison-tool-reorg-tests],
107 AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
108 [use_comparison_tool_reorg_tests=$enableval],
109 [use_comparison_tool_reorg_tests=no])
111 AC_ARG_WITH([qrencode],
112 [AS_HELP_STRING([--with-qrencode],
113 [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
117 AC_ARG_ENABLE([hardening],
118 [AS_HELP_STRING([--enable-hardening],
119 [attempt to harden the resulting executables (default is yes)])],
120 [use_hardening=$enableval],
123 AC_ARG_ENABLE([reduce-exports],
124 [AS_HELP_STRING([--enable-reduce-exports],
125 [attempt to reduce exported symbols in the resulting executables (default is yes)])],
126 [use_reduce_exports=$enableval],
127 [use_reduce_exports=auto])
129 AC_ARG_ENABLE([ccache],
130 [AS_HELP_STRING([--enable-ccache],
131 [use ccache for building (default is yes if ccache is found)])],
132 [use_ccache=$enableval],
135 AC_ARG_ENABLE([lcov],
136 [AS_HELP_STRING([--enable-lcov],
137 [enable lcov testing (default is no)])],
141 AC_ARG_ENABLE([glibc-back-compat],
142 [AS_HELP_STRING([--enable-glibc-back-compat],
143 [enable backwards compatibility with glibc and libstdc++])],
144 [use_glibc_compat=$enableval],
145 [use_glibc_compat=no])
147 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
150 AC_ARG_ENABLE([debug],
151 [AS_HELP_STRING([--enable-debug],
152 [use debug compiler flags and macros (default is no)])],
153 [enable_debug=$enableval],
156 if test "x$enable_debug" = xyes; then
157 if test "x$GCC" = xyes; then
158 CFLAGS="-g3 -O0 -DDEBUG"
161 if test "x$GXX" = xyes; then
162 CXXFLAGS="-g3 -O0 -DDEBUG"
166 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
167 ## compatibility with the legacy buildsystem.
169 if test "x$CXXFLAGS_overridden" = "xno"; then
170 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter"
172 CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
180 #pkgconfig does more harm than good with MinGW
184 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
185 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
186 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
187 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
188 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
189 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
190 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
191 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
192 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
193 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
194 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
195 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
196 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
197 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
198 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
199 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
200 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
201 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
202 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
204 AX_CHECK_LINK_FLAG([[-static-libgcc]],[LDFLAGS="$LDFLAGS -static-libgcc"])
205 AX_CHECK_LINK_FLAG([[-static-libstdc++]],[LDFLAGS="$LDFLAGS -static-libstdc++"])
207 # -static is interpreted by libtool, where it has a different meaning.
208 # In libtool-speak, it's -all-static.
209 AX_CHECK_LINK_FLAG([[-static]],[LDFLAGS="$LDFLAGS -static"; LIBTOOL_LDFLAGS="$LIBTOOL_LDFLAGS -all-static"])
211 AC_PATH_PROG([MAKENSIS], [makensis], none)
212 if test x$MAKENSIS = xnone; then
213 AC_MSG_WARN("makensis not found. Cannot create installer.")
216 AC_PATH_TOOL(WINDRES, windres, none)
217 if test x$WINDRES = xnone; then
218 AC_MSG_ERROR("windres not found")
221 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
222 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
223 if test "x$CXXFLAGS_overridden" = "xno"; then
224 CXXFLAGS="$CXXFLAGS -w"
227 i?86-*) WINDOWS_BITS=32 ;;
228 x86_64-*) WINDOWS_BITS=64 ;;
229 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
231 AC_SUBST(WINDOWS_BITS)
235 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
236 if test x$cross_compiling != xyes; then
238 AC_CHECK_PROG([PORT],port, port)
239 if test x$PORT = xport; then
240 dnl add default macports paths
241 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include -I/opt/local/include/db48"
242 LIBS="$LIBS -L/opt/local/lib -L/opt/local/lib/db48"
245 AC_CHECK_PROG([BREW],brew, brew)
246 if test x$BREW = xbrew; then
247 dnl These Homebrew packages may be keg-only, meaning that they won't be found
248 dnl in expected paths because they may conflict with system files. Ask
249 dnl Homebrew where each one is located, then adjust paths accordingly.
250 dnl It's safe to add these paths even if the functionality is disabled by
251 dnl the user (--without-wallet or --without-gui for example).
253 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
254 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
255 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
256 if test x$openssl_prefix != x; then
257 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
258 export PKG_CONFIG_PATH
260 if test x$bdb_prefix != x; then
261 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
262 LIBS="$LIBS -L$bdb_prefix/lib"
264 if test x$qt5_prefix != x; then
265 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
266 export PKG_CONFIG_PATH
275 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
276 AC_PATH_TOOL([OTOOL], [otool], otool)
277 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
282 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
291 if test x$use_comparison_tool != xno; then
292 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
295 if test x$use_comparison_tool_reorg_tests != xno; then
296 if test x$use_comparison_tool = x; then
297 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
299 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
301 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
304 if test x$use_lcov = xyes; then
305 if test x$LCOV = x; then
306 AC_MSG_ERROR("lcov testing requested but lcov not found")
308 if test x$GCOV = x; then
309 AC_MSG_ERROR("lcov testing requested but gcov not found")
311 if test x$JAVA = x; then
312 AC_MSG_ERROR("lcov testing requested but java not found")
314 if test x$GENHTML = x; then
315 AC_MSG_ERROR("lcov testing requested but genhtml not found")
317 if test x$use_comparison_tool = x; then
318 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
320 LCOV="$LCOV --gcov-tool=$GCOV"
321 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
322 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
325 dnl Require little endian
326 AC_C_BIGENDIAN([AC_MSG_ERROR("Big Endian not supported")])
328 dnl Check for pthread compile/link requirements
331 # The following macro will add the necessary defines to bitcoin-config.h, but
332 # they also need to be passed down to any subprojects. Pull the results out of
333 # the cache and add them to CPPFLAGS.
335 # detect POSIX or GNU variant of strerror_r
338 if test x$ac_cv_sys_file_offset_bits != x &&
339 test x$ac_cv_sys_file_offset_bits != xno &&
340 test x$ac_cv_sys_file_offset_bits != xunknown; then
341 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
344 if test x$ac_cv_sys_large_files != x &&
345 test x$ac_cv_sys_large_files != xno &&
346 test x$ac_cv_sys_large_files != xunknown; then
347 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
350 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
352 if test x$use_glibc_compat != xno; then
354 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
355 # See which one is present here.
356 AC_MSG_CHECKING(__fdelt_chk type)
357 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
358 #undef _FORTIFY_SOURCE
360 #define _FORTIFY_SOURCE 2
361 #include <sys/select.h>
362 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
363 [ fdelt_type="long unsigned int"],
364 [ fdelt_type="long int"])
365 AC_MSG_RESULT($fdelt_type)
366 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
370 if test x$use_hardening != xno; then
371 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
372 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
374 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
375 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
376 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
378 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
381 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
382 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
383 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
384 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
386 if test x$TARGET_OS != xwindows; then
387 # All windows code is PIC, forcing it on just adds useless compile warnings
388 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
389 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
392 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
393 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
394 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
395 OBJCXXFLAGS="$CXXFLAGS"
398 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
399 if test x$TARGET_OS = xdarwin; then
400 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
403 AC_CHECK_HEADERS([endian.h stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h sys/select.h sys/prctl.h])
404 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
405 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
407 AC_CHECK_DECLS([le32toh, le64toh, htole32, htole64, be32toh, be64toh, htobe32, htobe64],,,
412 dnl Check for MSG_NOSIGNAL
413 AC_MSG_CHECKING(for MSG_NOSIGNAL)
414 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
415 [[ int f = MSG_NOSIGNAL; ]])],
416 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
420 AC_SEARCH_LIBS([clock_gettime],[rt])
422 AC_MSG_CHECKING([for visibility attribute])
423 AC_LINK_IFELSE([AC_LANG_SOURCE([
424 int foo_def( void ) __attribute__((visibility("default")));
428 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
433 if test x$use_reduce_exports = xyes; then
434 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduced-exports.])
436 AC_MSG_WARN([Cannot find a working visibility attribute. Disabling reduced exports.])
437 use_reduce_exports=no
441 if test x$use_reduce_exports != xno; then
442 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
444 if test x$use_reduce_exports = xyes; then
445 AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduced-exports.])
447 AC_MSG_WARN([Cannot set default symbol visibility. Disabling reduced exports.])
448 use_reduce_exports=no
455 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
456 AC_SUBST(LEVELDB_CPPFLAGS)
460 if test x$enable_wallet != xno; then
461 dnl Check for libdb_cxx only if wallet enabled
465 dnl Check for libminiupnpc (optional)
466 if test x$use_upnp != xno; then
468 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
469 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
474 dnl Check for boost libs
478 AX_BOOST_PROGRAM_OPTIONS
483 if test x$use_reduce_exports != xno; then
484 AC_MSG_CHECKING([for working boost reduced exports])
485 TEMP_CPPFLAGS="$CPPFLAGS"
486 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
487 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
488 @%:@include <boost/version.hpp>
490 #if BOOST_VERSION >= 104900
491 // Everything is okay
493 # error Boost version is too old
498 if test x$use_reduce_exports = xauto; then
499 use_reduce_exports=no
501 if test x$use_reduce_exports = xyes; then
502 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduced-exports.])
506 AC_MSG_WARN([boost versions < 1.49 are known to have symbol visibility issues. Disabling reduced exports.])
508 CPPFLAGS="$TEMP_CPPFLAGS"
511 if test x$use_reduce_exports != xno; then
512 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
513 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
516 if test x$use_tests = xyes; then
518 if test x$HEXDUMP = x; then
519 AC_MSG_ERROR(hexdump is required for tests)
523 AX_BOOST_UNIT_TEST_FRAMEWORK
525 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
526 AC_MSG_CHECKING([for dynamic linked boost test])
528 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
529 TEMP_CPPFLAGS="$CPPFLAGS"
530 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
531 AC_LINK_IFELSE([AC_LANG_SOURCE([
532 #define BOOST_TEST_DYN_LINK
533 #define BOOST_TEST_MAIN
534 #include <boost/test/unit_test.hpp>
538 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
541 CPPFLAGS="$TEMP_CPPFLAGS"
544 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB"
546 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
547 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
548 dnl a working version is available, else fall back to sleep. sleep was removed
550 dnl If neither is available, abort.
551 dnl If sleep_for is used, boost_chrono becomes a requirement.
552 if test x$ax_cv_boost_chrono = xyes; then
554 LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB $LIBS"
555 TEMP_CPPFLAGS="$CPPFLAGS"
556 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
557 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
558 #include <boost/thread/thread.hpp>
559 #include <boost/version.hpp>
561 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
562 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
567 [boost_sleep=yes; BOOST_LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB";
568 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
571 CPPFLAGS="$TEMP_CPPFLAGS"
574 if test x$boost_sleep != xyes; then
576 LIBS="$BOOST_LIBS $LIBS"
577 TEMP_CPPFLAGS="$CPPFLAGS"
578 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
579 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
580 #include <boost/version.hpp>
581 #include <boost/thread.hpp>
582 #include <boost/date_time/posix_time/posix_time_types.hpp>
584 #if BOOST_VERSION <= 105600
585 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
590 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
593 CPPFLAGS="$TEMP_CPPFLAGS"
596 if test x$boost_sleep != xyes; then
597 AC_MSG_ERROR(No working boost sleep implementation found.)
601 [AS_HELP_STRING([--with-utils],
602 [build bitcoin-cli bitcoin-tx (default=yes)])],
603 [build_bitcoin_utils=$withval],
604 [build_bitcoin_utils=yes])
606 AC_ARG_WITH([daemon],
607 [AS_HELP_STRING([--with-daemon],
608 [build bitcoind daemon (default=yes)])],
609 [build_bitcoind=$withval],
610 [build_bitcoind=yes])
614 if test x$use_pkgconfig = xyes; then
616 if test x"$PKG_CONFIG" = "x"; then
617 AC_MSG_ERROR(pkg-config not found.)
624 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
625 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
626 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
627 if test x$use_qr != xno; then
628 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
633 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
634 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
636 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
637 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
639 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
640 if test x$use_qr != xno; then
641 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
642 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
646 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
648 AC_MSG_CHECKING([whether to build bitcoind])
649 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
650 AC_MSG_RESULT($build_bitcoind)
652 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
653 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
654 AC_MSG_RESULT($build_bitcoin_utils)
656 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
657 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
661 if test "x$use_ccache" != "xno"; then
662 AC_MSG_CHECKING(if ccache should be used)
663 if test x$CCACHE = x; then
664 if test "x$use_ccache" = "xyes"; then
665 AC_MSG_ERROR([ccache not found.]);
671 CC="$ac_cv_path_CCACHE $CC"
672 CXX="$ac_cv_path_CCACHE $CXX"
674 AC_MSG_RESULT($use_ccache)
676 if test "x$use_ccache" = "xyes"; then
677 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
681 AC_MSG_CHECKING([if wallet should be enabled])
682 if test x$enable_wallet != xno; then
684 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
690 dnl enable upnp support
691 AC_MSG_CHECKING([whether to build with support for UPnP])
692 if test x$have_miniupnpc = xno; then
693 if test x$use_upnp = xyes; then
694 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
698 if test x$use_upnp != xno; then
700 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
703 if test x$use_upnp_default != xno; then
707 AC_MSG_RESULT($use_upnp_default)
708 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
709 if test x$TARGET_OS = xwindows; then
710 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
717 dnl these are only used when qt is enabled
718 if test x$bitcoin_enable_qt != xno; then
720 dnl enable dbus support
721 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
722 if test x$bitcoin_enable_qt_dbus != xno; then
723 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
725 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
727 dnl enable qr support
728 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
729 if test x$have_qrencode = xno; then
730 if test x$use_qr = xyes; then
731 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
735 if test x$use_qr != xno; then
737 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
744 if test x$XGETTEXT = x; then
745 AC_MSG_WARN("xgettext is required to update qt translations")
748 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
749 if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
757 AC_MSG_CHECKING([whether to build test_bitcoin])
758 if test x$use_tests = xyes; then
765 AC_MSG_CHECKING([whether to reduce exports])
766 if test x$use_reduce_exports != xno; then
772 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
773 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-daemon --with-gui or --enable-tests])
776 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
777 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
778 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
779 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
780 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
781 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
782 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
783 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
784 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
785 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
786 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
787 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
788 AM_CONDITIONAL([USE_LIBSECP256K1],[test x$use_libsecp256k1 = xyes])
790 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
791 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
792 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
793 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
794 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
795 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
796 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
797 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
798 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
799 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
800 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
801 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
805 AC_SUBST(LIBTOOL_LDFLAGS)
810 AC_SUBST(LEVELDB_TARGET_FLAGS)
813 AC_SUBST(BUILD_TEST_QT)
814 AC_SUBST(MINIUPNPC_CPPFLAGS)
815 AC_SUBST(MINIUPNPC_LIBS)
816 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
817 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
818 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
821 dnl Taken from https://wiki.debian.org/RpathIssue
824 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
825 sed < libtool > libtool-2 \
826 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'