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],[info@bitcoin.org],[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.
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 # -static is interpreted by libtool, where it has a different meaning.
205 # In libtool-speak, it's -all-static.
206 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
208 AC_PATH_PROG([MAKENSIS], [makensis], none)
209 if test x$MAKENSIS = xnone; then
210 AC_MSG_WARN("makensis not found. Cannot create installer.")
213 AC_PATH_TOOL(WINDRES, windres, none)
214 if test x$WINDRES = xnone; then
215 AC_MSG_ERROR("windres not found")
218 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
219 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
220 if test "x$CXXFLAGS_overridden" = "xno"; then
221 CXXFLAGS="$CXXFLAGS -w"
224 i?86-*) WINDOWS_BITS=32 ;;
225 x86_64-*) WINDOWS_BITS=64 ;;
226 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
228 AC_SUBST(WINDOWS_BITS)
230 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
231 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
232 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
233 dnl also overridden to prevent their insertion later.
234 dnl This should only affect dll's.
235 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
241 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
242 if test x$cross_compiling != xyes; then
244 AC_CHECK_PROG([PORT],port, port)
245 if test x$PORT = xport; then
246 dnl add default macports paths
247 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
248 LIBS="$LIBS -L/opt/local/lib"
249 if test -d /opt/local/include/db48; then
250 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
251 LIBS="$LIBS -L/opt/local/lib/db48"
255 AC_CHECK_PROG([BREW],brew, brew)
256 if test x$BREW = xbrew; then
257 dnl These Homebrew packages may be keg-only, meaning that they won't be found
258 dnl in expected paths because they may conflict with system files. Ask
259 dnl Homebrew where each one is located, then adjust paths accordingly.
260 dnl It's safe to add these paths even if the functionality is disabled by
261 dnl the user (--without-wallet or --without-gui for example).
263 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
264 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
265 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
266 if test x$openssl_prefix != x; then
267 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
268 export PKG_CONFIG_PATH
270 if test x$bdb_prefix != x; then
271 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
272 LIBS="$LIBS -L$bdb_prefix/lib"
274 if test x$qt5_prefix != x; then
275 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
276 export PKG_CONFIG_PATH
285 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
286 AC_PATH_TOOL([OTOOL], [otool], otool)
287 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
289 dnl libtool will try to strip the static lib, which is a problem for
290 dnl cross-builds because strip attempts to call a hard-coded ld,
291 dnl which may not exist in the path. Stripping the .a is not
292 dnl necessary, so just disable it.
298 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
299 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
308 if test x$use_comparison_tool != xno; then
309 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
312 if test x$use_comparison_tool_reorg_tests != xno; then
313 if test x$use_comparison_tool = x; then
314 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
316 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
318 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
321 if test x$use_lcov = xyes; then
322 if test x$LCOV = x; then
323 AC_MSG_ERROR("lcov testing requested but lcov not found")
325 if test x$GCOV = x; then
326 AC_MSG_ERROR("lcov testing requested but gcov not found")
328 if test x$JAVA = x; then
329 AC_MSG_ERROR("lcov testing requested but java not found")
331 if test x$GENHTML = x; then
332 AC_MSG_ERROR("lcov testing requested but genhtml not found")
334 if test x$use_comparison_tool = x; then
335 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
337 LCOV="$LCOV --gcov-tool=$GCOV"
338 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
339 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
342 dnl Require little endian
343 AC_C_BIGENDIAN([AC_MSG_ERROR("Big Endian not supported")])
345 dnl Check for pthread compile/link requirements
348 # The following macro will add the necessary defines to bitcoin-config.h, but
349 # they also need to be passed down to any subprojects. Pull the results out of
350 # the cache and add them to CPPFLAGS.
352 # detect POSIX or GNU variant of strerror_r
355 if test x$ac_cv_sys_file_offset_bits != x &&
356 test x$ac_cv_sys_file_offset_bits != xno &&
357 test x$ac_cv_sys_file_offset_bits != xunknown; then
358 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
361 if test x$ac_cv_sys_large_files != x &&
362 test x$ac_cv_sys_large_files != xno &&
363 test x$ac_cv_sys_large_files != xunknown; then
364 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
367 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
369 AX_GCC_FUNC_ATTRIBUTE([visibility])
370 AX_GCC_FUNC_ATTRIBUTE([dllexport])
371 AX_GCC_FUNC_ATTRIBUTE([dllimport])
373 if test x$use_glibc_compat != xno; then
375 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
376 # See which one is present here.
377 AC_MSG_CHECKING(__fdelt_chk type)
378 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
379 #undef _FORTIFY_SOURCE
381 #define _FORTIFY_SOURCE 2
382 #include <sys/select.h>
383 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
384 [ fdelt_type="long unsigned int"],
385 [ fdelt_type="long int"])
386 AC_MSG_RESULT($fdelt_type)
387 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
391 if test x$use_hardening != xno; then
392 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
393 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
395 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
396 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
397 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
399 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
402 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
403 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
404 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
405 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
407 if test x$TARGET_OS != xwindows; then
408 # All windows code is PIC, forcing it on just adds useless compile warnings
409 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
410 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
415 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
419 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
420 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
421 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
422 OBJCXXFLAGS="$CXXFLAGS"
425 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
426 if test x$TARGET_OS = xdarwin; then
427 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
430 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])
431 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
432 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
434 AC_CHECK_DECLS([strnlen])
436 AC_CHECK_DECLS([le32toh, le64toh, htole32, htole64, be32toh, be64toh, htobe32, htobe64],,,
441 dnl Check for MSG_NOSIGNAL
442 AC_MSG_CHECKING(for MSG_NOSIGNAL)
443 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
444 [[ int f = MSG_NOSIGNAL; ]])],
445 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
449 AC_SEARCH_LIBS([clock_gettime],[rt])
451 AC_MSG_CHECKING([for visibility attribute])
452 AC_LINK_IFELSE([AC_LANG_SOURCE([
453 int foo_def( void ) __attribute__((visibility("default")));
457 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
462 if test x$use_reduce_exports = xyes; then
463 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduced-exports.])
465 AC_MSG_WARN([Cannot find a working visibility attribute. Disabling reduced exports.])
466 use_reduce_exports=no
470 if test x$use_reduce_exports != xno; then
471 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
473 if test x$use_reduce_exports = xyes; then
474 AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduced-exports.])
476 AC_MSG_WARN([Cannot set default symbol visibility. Disabling reduced exports.])
477 use_reduce_exports=no
484 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
485 AC_SUBST(LEVELDB_CPPFLAGS)
489 if test x$enable_wallet != xno; then
490 dnl Check for libdb_cxx only if wallet enabled
494 dnl Check for libminiupnpc (optional)
495 if test x$use_upnp != xno; then
497 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
498 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
503 dnl Check for boost libs
507 AX_BOOST_PROGRAM_OPTIONS
512 if test x$use_reduce_exports != xno; then
513 AC_MSG_CHECKING([for working boost reduced exports])
514 TEMP_CPPFLAGS="$CPPFLAGS"
515 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
516 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
517 @%:@include <boost/version.hpp>
519 #if BOOST_VERSION >= 104900
520 // Everything is okay
522 # error Boost version is too old
527 if test x$use_reduce_exports = xauto; then
528 use_reduce_exports=no
530 if test x$use_reduce_exports = xyes; then
531 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduced-exports.])
535 AC_MSG_WARN([boost versions < 1.49 are known to have symbol visibility issues. Disabling reduced exports.])
537 CPPFLAGS="$TEMP_CPPFLAGS"
540 if test x$use_reduce_exports != xno; then
541 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
542 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
545 if test x$use_tests = xyes; then
547 if test x$HEXDUMP = x; then
548 AC_MSG_ERROR(hexdump is required for tests)
552 AX_BOOST_UNIT_TEST_FRAMEWORK
554 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
555 AC_MSG_CHECKING([for dynamic linked boost test])
557 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
558 TEMP_CPPFLAGS="$CPPFLAGS"
559 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
560 AC_LINK_IFELSE([AC_LANG_SOURCE([
561 #define BOOST_TEST_DYN_LINK
562 #define BOOST_TEST_MAIN
563 #include <boost/test/unit_test.hpp>
567 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
570 CPPFLAGS="$TEMP_CPPFLAGS"
573 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB"
575 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
576 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
577 dnl a working version is available, else fall back to sleep. sleep was removed
579 dnl If neither is available, abort.
580 dnl If sleep_for is used, boost_chrono becomes a requirement.
581 if test x$ax_cv_boost_chrono = xyes; then
583 LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB $LIBS"
584 TEMP_CPPFLAGS="$CPPFLAGS"
585 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
586 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
587 #include <boost/thread/thread.hpp>
588 #include <boost/version.hpp>
590 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
591 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
596 [boost_sleep=yes; BOOST_LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB";
597 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
600 CPPFLAGS="$TEMP_CPPFLAGS"
603 if test x$boost_sleep != xyes; then
605 LIBS="$BOOST_LIBS $LIBS"
606 TEMP_CPPFLAGS="$CPPFLAGS"
607 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
608 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
609 #include <boost/version.hpp>
610 #include <boost/thread.hpp>
611 #include <boost/date_time/posix_time/posix_time_types.hpp>
613 #if BOOST_VERSION <= 105600
614 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
619 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
622 CPPFLAGS="$TEMP_CPPFLAGS"
625 if test x$boost_sleep != xyes; then
626 AC_MSG_ERROR(No working boost sleep implementation found.)
630 [AS_HELP_STRING([--with-utils],
631 [build bitcoin-cli bitcoin-tx (default=yes)])],
632 [build_bitcoin_utils=$withval],
633 [build_bitcoin_utils=yes])
636 [AS_HELP_STRING([--with-libs],
637 [build libraries (default=yes)])],
638 [build_bitcoin_libs=$withval],
639 [build_bitcoin_libs=yes])
641 AC_ARG_WITH([daemon],
642 [AS_HELP_STRING([--with-daemon],
643 [build bitcoind daemon (default=yes)])],
644 [build_bitcoind=$withval],
645 [build_bitcoind=yes])
649 if test x$use_pkgconfig = xyes; then
651 if test x"$PKG_CONFIG" = "x"; then
652 AC_MSG_ERROR(pkg-config not found.)
659 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
660 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
661 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
662 if test x$use_qr != xno; then
663 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
668 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
669 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
671 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
672 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
674 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
675 if test x$use_qr != xno; then
676 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
677 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
681 CFLAGS_TEMP="$CFLAGS"
683 CFLAGS="$CFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
684 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
685 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
686 CFLAGS="$CFLAGS_TEMP"
689 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
691 AC_MSG_CHECKING([whether to build bitcoind])
692 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
693 AC_MSG_RESULT($build_bitcoind)
695 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
696 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
697 AC_MSG_RESULT($build_bitcoin_utils)
699 AC_MSG_CHECKING([whether to build libraries])
700 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
701 if test x$build_bitcoin_libs = xyes; then
702 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
704 AC_MSG_RESULT($build_bitcoin_libs)
706 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
707 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
711 if test "x$use_ccache" != "xno"; then
712 AC_MSG_CHECKING(if ccache should be used)
713 if test x$CCACHE = x; then
714 if test "x$use_ccache" = "xyes"; then
715 AC_MSG_ERROR([ccache not found.]);
721 CC="$ac_cv_path_CCACHE $CC"
722 CXX="$ac_cv_path_CCACHE $CXX"
724 AC_MSG_RESULT($use_ccache)
726 if test "x$use_ccache" = "xyes"; then
727 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
731 AC_MSG_CHECKING([if wallet should be enabled])
732 if test x$enable_wallet != xno; then
734 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
740 dnl enable upnp support
741 AC_MSG_CHECKING([whether to build with support for UPnP])
742 if test x$have_miniupnpc = xno; then
743 if test x$use_upnp = xyes; then
744 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
748 if test x$use_upnp != xno; then
750 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
753 if test x$use_upnp_default != xno; then
757 AC_MSG_RESULT($use_upnp_default)
758 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
759 if test x$TARGET_OS = xwindows; then
760 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
767 dnl these are only used when qt is enabled
768 if test x$bitcoin_enable_qt != xno; then
770 dnl enable dbus support
771 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
772 if test x$bitcoin_enable_qt_dbus != xno; then
773 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
775 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
777 dnl enable qr support
778 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
779 if test x$have_qrencode = xno; then
780 if test x$use_qr = xyes; then
781 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
785 if test x$use_qr != xno; then
787 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
794 if test x$XGETTEXT = x; then
795 AC_MSG_WARN("xgettext is required to update qt translations")
798 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
799 if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
807 AC_MSG_CHECKING([whether to build test_bitcoin])
808 if test x$use_tests = xyes; then
815 AC_MSG_CHECKING([whether to reduce exports])
816 if test x$use_reduce_exports != xno; then
822 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
823 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
826 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
827 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
828 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
829 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
830 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
831 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
832 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
833 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
834 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
835 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
836 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
837 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
838 AM_CONDITIONAL([USE_LIBSECP256K1],[test x$use_libsecp256k1 = xyes])
840 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
841 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
842 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
843 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
844 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
845 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
846 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
847 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
848 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
849 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
850 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
851 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
854 AC_SUBST(LIBTOOL_APP_LDFLAGS)
859 AC_SUBST(LEVELDB_TARGET_FLAGS)
862 AC_SUBST(BUILD_TEST_QT)
863 AC_SUBST(MINIUPNPC_CPPFLAGS)
864 AC_SUBST(MINIUPNPC_LIBS)
865 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
866 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
867 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
869 dnl boost's m4 checks do something really nasty: they export these vars. As a
870 dnl result, they leak into secp256k1's configure and crazy things happen.
871 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
872 CPPFLAGS_TEMP="$CPPFLAGS"
874 CPPFLAGS="$CPPFLAGS_TEMP"
876 LDFLAGS_TEMP="$LDFLAGS"
878 LDFLAGS="$LDFLAGS_TEMP"
884 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
885 unset PKG_CONFIG_PATH
886 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
888 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
889 unset PKG_CONFIG_LIBDIR
890 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
892 ac_configure_args="${ac_configure_args} --disable-shared --with-pic"
893 AC_CONFIG_SUBDIRS([src/secp256k1])
897 dnl Taken from https://wiki.debian.org/RpathIssue
900 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
901 sed < libtool > libtool-2 \
902 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'