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])
14 LT_INIT([disable-shared])
16 AH_TOP([#ifndef BITCOIN_CONFIG_H])
17 AH_TOP([#define BITCOIN_CONFIG_H])
18 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
20 # This m4 will only be used if a system copy cannot be found. This is helpful
21 # on systems where autotools are installed but the pkg-config macros are not in
22 # a default location. It is currently used for building on OSX where autotools
23 # are preinstalled but pkg-config comes from macports or homebrew. It should
24 # probably be removed when building on <= 10.6 is no longer supported.
27 dnl faketime breaks configure and is only needed for make. Disable it here.
30 if test "x${CXXFLAGS+set}" = "xset"; then
31 CXXFLAGS_overridden=yes
33 CXXFLAGS_overridden=no
36 dnl ==============================================================
37 dnl Setup for automake
38 dnl ==============================================================
40 AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
42 dnl faketime messes with timestamps and causes configure to be re-run.
43 dnl --disable-maintainer-mode can be used to bypass this.
44 AM_MAINTAINER_MODE([enable])
46 dnl make the compilation flags quiet unless V=1 is used
47 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
49 dnl Checks for programs.
57 m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
61 AC_PATH_TOOL(RANLIB, ranlib)
62 AC_PATH_TOOL(STRIP, strip)
63 AC_PATH_TOOL(GCOV, gcov)
64 AC_PATH_PROG(LCOV, lcov)
65 AC_PATH_PROG(JAVA, java)
66 AC_PATH_PROG(GENHTML, genhtml)
67 AC_PATH_PROG([GIT], [git])
68 AC_PATH_PROG(CCACHE,ccache)
69 AC_PATH_PROG(XGETTEXT,xgettext)
70 AC_PATH_PROG(HEXDUMP,hexdump)
74 AC_ARG_ENABLE([wallet],
75 [AS_HELP_STRING([--enable-wallet],
76 [enable wallet (default is yes)])],
77 [enable_wallet=$enableval],
80 AC_ARG_WITH([miniupnpc],
81 [AS_HELP_STRING([--with-miniupnpc],
82 [enable UPNP (default is yes if libminiupnpc is found)])],
86 AC_ARG_ENABLE([upnp-default],
87 [AS_HELP_STRING([--enable-upnp-default],
88 [if UPNP is enabled, turn it on at startup (default is no)])],
89 [use_upnp_default=$enableval],
90 [use_upnp_default=no])
93 AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
94 [use_tests=$enableval],
97 AC_ARG_WITH([comparison-tool],
98 AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
99 [use_comparison_tool=$withval],
100 [use_comparison_tool=no])
102 AC_ARG_ENABLE([comparison-tool-reorg-tests],
103 AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
104 [use_comparison_tool_reorg_tests=$enableval],
105 [use_comparison_tool_reorg_tests=no])
107 AC_ARG_WITH([qrencode],
108 [AS_HELP_STRING([--with-qrencode],
109 [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
113 AC_ARG_ENABLE([hardening],
114 [AS_HELP_STRING([--enable-hardening],
115 [attempt to harden the resulting executables (default is yes)])],
116 [use_hardening=$enableval],
119 AC_ARG_ENABLE([reduce-exports],
120 [AS_HELP_STRING([--enable-reduce-exports],
121 [attempt to reduce exported symbols in the resulting executables (default is yes)])],
122 [use_reduce_exports=$enableval],
123 [use_reduce_exports=auto])
125 AC_ARG_ENABLE([ccache],
126 [AS_HELP_STRING([--enable-ccache],
127 [use ccache for building (default is yes if ccache is found)])],
128 [use_ccache=$enableval],
131 AC_ARG_ENABLE([lcov],
132 [AS_HELP_STRING([--enable-lcov],
133 [enable lcov testing (default is no)])],
137 AC_ARG_ENABLE([glibc-back-compat],
138 [AS_HELP_STRING([--enable-glibc-back-compat],
139 [enable backwards compatibility with glibc and libstdc++])],
140 [use_glibc_compat=$enableval],
141 [use_glibc_compat=no])
143 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
146 AC_ARG_ENABLE([debug],
147 [AS_HELP_STRING([--enable-debug],
148 [use debug compiler flags and macros (default is no)])],
149 [enable_debug=$enableval],
152 if test "x$enable_debug" = xyes; then
153 if test "x$GCC" = xyes; then
154 CFLAGS="-g3 -O0 -DDEBUG"
157 if test "x$GXX" = xyes; then
158 CXXFLAGS="-g3 -O0 -DDEBUG"
162 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
163 ## compatibility with the legacy buildsystem.
165 if test "x$CXXFLAGS_overridden" = "xno"; then
166 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter"
168 CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
176 #pkgconfig does more harm than good with MinGW
180 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
181 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
182 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
183 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
184 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
185 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
186 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
187 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
188 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
189 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
190 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
191 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
192 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
193 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
194 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
195 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
196 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
197 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
198 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
200 AX_CHECK_LINK_FLAG([[-static-libgcc]],[LDFLAGS="$LDFLAGS -static-libgcc"])
201 AX_CHECK_LINK_FLAG([[-static-libstdc++]],[LDFLAGS="$LDFLAGS -static-libstdc++"])
203 # -static is interpreted by libtool, where it has a different meaning.
204 # In libtool-speak, it's -all-static.
205 AX_CHECK_LINK_FLAG([[-static]],[LDFLAGS="$LDFLAGS -static"; LIBTOOL_LDFLAGS="$LIBTOOL_LDFLAGS -all-static"])
207 AC_PATH_PROG([MAKENSIS], [makensis], none)
208 if test x$MAKENSIS = xnone; then
209 AC_MSG_WARN("makensis not found. Cannot create installer.")
212 AC_PATH_TOOL(WINDRES, windres, none)
213 if test x$WINDRES = xnone; then
214 AC_MSG_ERROR("windres not found")
217 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
218 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
219 if test "x$CXXFLAGS_overridden" = "xno"; then
220 CXXFLAGS="$CXXFLAGS -w"
223 i?86-*) WINDOWS_BITS=32 ;;
224 x86_64-*) WINDOWS_BITS=64 ;;
225 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
227 AC_SUBST(WINDOWS_BITS)
231 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
232 if test x$cross_compiling != xyes; then
234 AC_CHECK_PROG([PORT],port, port)
235 if test x$PORT = xport; then
236 dnl add default macports paths
237 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include -I/opt/local/include/db48"
238 LIBS="$LIBS -L/opt/local/lib -L/opt/local/lib/db48"
241 AC_CHECK_PROG([BREW],brew, brew)
242 if test x$BREW = xbrew; then
243 dnl These Homebrew packages may be keg-only, meaning that they won't be found
244 dnl in expected paths because they may conflict with system files. Ask
245 dnl Homebrew where each one is located, then adjust paths accordingly.
246 dnl It's safe to add these paths even if the functionality is disabled by
247 dnl the user (--without-wallet or --without-gui for example).
249 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
250 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
251 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
252 if test x$openssl_prefix != x; then
253 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
254 export PKG_CONFIG_PATH
256 if test x$bdb_prefix != x; then
257 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
258 LIBS="$LIBS -L$bdb_prefix/lib"
260 if test x$qt5_prefix != x; then
261 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
262 export PKG_CONFIG_PATH
271 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
272 AC_PATH_TOOL([OTOOL], [otool], otool)
273 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
278 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
287 if test x$use_comparison_tool != xno; then
288 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
291 if test x$use_comparison_tool_reorg_tests != xno; then
292 if test x$use_comparison_tool = x; then
293 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
295 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
297 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
300 if test x$use_lcov = xyes; then
301 if test x$LCOV = x; then
302 AC_MSG_ERROR("lcov testing requested but lcov not found")
304 if test x$GCOV = x; then
305 AC_MSG_ERROR("lcov testing requested but gcov not found")
307 if test x$JAVA = x; then
308 AC_MSG_ERROR("lcov testing requested but java not found")
310 if test x$GENHTML = x; then
311 AC_MSG_ERROR("lcov testing requested but genhtml not found")
313 if test x$use_comparison_tool = x; then
314 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
316 LCOV="$LCOV --gcov-tool=$GCOV"
317 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
318 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
321 dnl Require little endian
322 AC_C_BIGENDIAN([AC_MSG_ERROR("Big Endian not supported")])
324 dnl Check for pthread compile/link requirements
327 # The following macro will add the necessary defines to bitcoin-config.h, but
328 # they also need to be passed down to any subprojects. Pull the results out of
329 # the cache and add them to CPPFLAGS.
331 # detect POSIX or GNU variant of strerror_r
334 if test x$ac_cv_sys_file_offset_bits != x &&
335 test x$ac_cv_sys_file_offset_bits != xno &&
336 test x$ac_cv_sys_file_offset_bits != xunknown; then
337 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
340 if test x$ac_cv_sys_large_files != x &&
341 test x$ac_cv_sys_large_files != xno &&
342 test x$ac_cv_sys_large_files != xunknown; then
343 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
346 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
348 if test x$use_glibc_compat != xno; then
350 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
351 # See which one is present here.
352 AC_MSG_CHECKING(__fdelt_chk type)
353 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
354 #undef _FORTIFY_SOURCE
356 #define _FORTIFY_SOURCE 2
357 #include <sys/select.h>
358 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
359 [ fdelt_type="long unsigned int"],
360 [ fdelt_type="long int"])
361 AC_MSG_RESULT($fdelt_type)
362 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
366 if test x$use_hardening != xno; then
367 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
368 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
370 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
371 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
372 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
374 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
377 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
378 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
379 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
380 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
382 if test x$TARGET_OS != xwindows; then
383 # All windows code is PIC, forcing it on just adds useless compile warnings
384 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
385 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
388 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
389 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
390 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
391 OBJCXXFLAGS="$CXXFLAGS"
394 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
395 if test x$TARGET_OS = xdarwin; then
396 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
399 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])
400 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
401 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
403 AC_CHECK_DECLS([le32toh, le64toh, htole32, htole64, be32toh, be64toh, htobe32, htobe64],,,
408 dnl Check for MSG_NOSIGNAL
409 AC_MSG_CHECKING(for MSG_NOSIGNAL)
410 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
411 [[ int f = MSG_NOSIGNAL; ]])],
412 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
416 AC_SEARCH_LIBS([clock_gettime],[rt])
418 AC_MSG_CHECKING([for visibility attribute])
419 AC_LINK_IFELSE([AC_LANG_SOURCE([
420 int foo_def( void ) __attribute__((visibility("default")));
424 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
429 if test x$use_reduce_exports = xyes; then
430 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduced-exports.])
432 AC_MSG_WARN([Cannot find a working visibility attribute. Disabling reduced exports.])
433 use_reduce_exports=no
437 if test x$use_reduce_exports != xno; then
438 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
440 if test x$use_reduce_exports = xyes; then
441 AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduced-exports.])
443 AC_MSG_WARN([Cannot set default symbol visibility. Disabling reduced exports.])
444 use_reduce_exports=no
451 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
452 AC_SUBST(LEVELDB_CPPFLAGS)
456 if test x$enable_wallet != xno; then
457 dnl Check for libdb_cxx only if wallet enabled
461 dnl Check for libminiupnpc (optional)
462 if test x$use_upnp != xno; then
464 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
465 [AC_CHECK_LIB([miniupnpc], [main],, [have_miniupnpc=no])],
470 dnl Check for boost libs
474 AX_BOOST_PROGRAM_OPTIONS
479 if test x$use_reduce_exports != xno; then
480 AC_MSG_CHECKING([for working boost reduced exports])
481 TEMP_CPPFLAGS="$CPPFLAGS"
482 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
483 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
484 @%:@include <boost/version.hpp>
486 #if BOOST_VERSION >= 104900
487 // Everything is okay
489 # error Boost version is too old
494 if test x$use_reduce_exports = xauto; then
495 use_reduce_exports=no
497 if test x$use_reduce_exports = xyes; then
498 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduced-exports.])
502 AC_MSG_WARN([boost versions < 1.49 are known to have symbol visibility issues. Disabling reduced exports.])
504 CPPFLAGS="$TEMP_CPPFLAGS"
507 if test x$use_reduce_exports != xno; then
508 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
509 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
512 if test x$use_tests = xyes; then
514 if test x$HEXDUMP = x; then
515 AC_MSG_ERROR(hexdump is required for tests)
519 AX_BOOST_UNIT_TEST_FRAMEWORK
521 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
522 AC_MSG_CHECKING([for dynamic linked boost test])
524 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
525 TEMP_CPPFLAGS="$CPPFLAGS"
526 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
527 AC_LINK_IFELSE([AC_LANG_SOURCE([
528 #define BOOST_TEST_DYN_LINK
529 #define BOOST_TEST_MAIN
530 #include <boost/test/unit_test.hpp>
534 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
537 CPPFLAGS="$TEMP_CPPFLAGS"
540 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB"
542 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
543 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
544 dnl a working version is available, else fall back to sleep. sleep was removed
546 dnl If neither is available, abort.
547 dnl If sleep_for is used, boost_chrono becomes a requirement.
548 if test x$ax_cv_boost_chrono = xyes; then
550 LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB $LIBS"
551 TEMP_CPPFLAGS="$CPPFLAGS"
552 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
553 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
554 #include <boost/thread/thread.hpp>
555 #include <boost/version.hpp>
557 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
558 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
563 [boost_sleep=yes; BOOST_LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB";
564 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
567 CPPFLAGS="$TEMP_CPPFLAGS"
570 if test x$boost_sleep != xyes; then
572 LIBS="$BOOST_LIBS $LIBS"
573 TEMP_CPPFLAGS="$CPPFLAGS"
574 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
575 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
576 #include <boost/version.hpp>
577 #include <boost/thread.hpp>
578 #include <boost/date_time/posix_time/posix_time_types.hpp>
580 #if BOOST_VERSION <= 105600
581 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
586 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
589 CPPFLAGS="$TEMP_CPPFLAGS"
592 if test x$boost_sleep != xyes; then
593 AC_MSG_ERROR(No working boost sleep implementation found.)
597 [AS_HELP_STRING([--with-utils],
598 [build bitcoin-cli bitcoin-tx (default=yes)])],
599 [build_bitcoin_utils=$withval],
600 [build_bitcoin_utils=yes])
602 AC_ARG_WITH([daemon],
603 [AS_HELP_STRING([--with-daemon],
604 [build bitcoind daemon (default=yes)])],
605 [build_bitcoind=$withval],
606 [build_bitcoind=yes])
610 if test x$use_pkgconfig = xyes; then
612 if test x"$PKG_CONFIG" = "x"; then
613 AC_MSG_ERROR(pkg-config not found.)
620 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
621 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
622 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
623 if test x$use_qr != xno; then
624 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
629 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
630 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
632 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
633 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
635 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],,BITCOIN_QT_FAIL(libprotobuf not found)))
636 if test x$use_qr != xno; then
637 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],, [have_qrencode=no])])
638 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
642 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
644 AC_MSG_CHECKING([whether to build bitcoind])
645 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
646 AC_MSG_RESULT($build_bitcoind)
648 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
649 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
650 AC_MSG_RESULT($build_bitcoin_utils)
652 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
653 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
657 if test "x$use_ccache" != "xno"; then
658 AC_MSG_CHECKING(if ccache should be used)
659 if test x$CCACHE = x; then
660 if test "x$use_ccache" = "xyes"; then
661 AC_MSG_ERROR([ccache not found.]);
667 CC="$ac_cv_path_CCACHE $CC"
668 CXX="$ac_cv_path_CCACHE $CXX"
670 AC_MSG_RESULT($use_ccache)
672 if test "x$use_ccache" = "xyes"; then
673 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
677 AC_MSG_CHECKING([if wallet should be enabled])
678 if test x$enable_wallet != xno; then
680 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
686 dnl enable upnp support
687 AC_MSG_CHECKING([whether to build with support for UPnP])
688 if test x$have_miniupnpc = xno; then
689 if test x$use_upnp = xyes; then
690 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
694 if test x$use_upnp != xno; then
696 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
699 if test x$use_upnp_default != xno; then
703 AC_MSG_RESULT($use_upnp_default)
704 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
705 if test x$TARGET_OS = xwindows; then
706 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
713 dnl these are only used when qt is enabled
714 if test x$bitcoin_enable_qt != xno; then
716 dnl enable dbus support
717 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
718 if test x$bitcoin_enable_qt_dbus != xno; then
719 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
721 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
723 dnl enable qr support
724 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
725 if test x$have_qrencode = xno; then
726 if test x$use_qr = xyes; then
727 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
731 if test x$use_qr != xno; then
733 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
740 if test x$XGETTEXT = x; then
741 AC_MSG_WARN("xgettext is required to update qt translations")
744 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
745 if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
753 AC_MSG_CHECKING([whether to build test_bitcoin])
754 if test x$use_tests = xyes; then
761 AC_MSG_CHECKING([whether to reduce exports])
762 if test x$use_reduce_exports != xno; then
768 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
769 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-daemon --with-gui or --enable-tests])
772 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
773 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
774 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
775 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
776 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
777 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
778 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
779 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
780 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
781 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
782 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
783 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
784 AM_CONDITIONAL([USE_LIBSECP256K1],[test x$use_libsecp256k1 = xyes])
786 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
787 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
788 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
789 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
790 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
791 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
792 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
793 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
794 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
795 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
796 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
797 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
801 AC_SUBST(LIBTOOL_LDFLAGS)
806 AC_SUBST(LEVELDB_TARGET_FLAGS)
809 AC_SUBST(BUILD_TEST_QT)
810 AC_SUBST(MINIUPNPC_CPPFLAGS)
811 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
812 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
813 AC_CONFIG_FILES([qa/pull-tester/build-tests.sh],[chmod +x qa/pull-tester/build-tests.sh])
816 dnl Taken from https://wiki.debian.org/RpathIssue
819 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
820 sed < libtool > libtool-2 \
821 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'