1 dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
3 define(_CLIENT_VERSION_MAJOR, 0)
4 define(_CLIENT_VERSION_MINOR, 11)
5 define(_CLIENT_VERSION_REVISION, 99)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_IS_RELEASE, false)
8 define(_COPYRIGHT_YEAR, 2015)
9 AC_INIT([Bitcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/bitcoin/bitcoin/issues],[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)
71 AC_ARG_ENABLE([wallet],
72 [AS_HELP_STRING([--disable-wallet],
73 [disable wallet (enabled by default)])],
74 [enable_wallet=$enableval],
77 AC_ARG_WITH([miniupnpc],
78 [AS_HELP_STRING([--with-miniupnpc],
79 [enable UPNP (default is yes if libminiupnpc is found)])],
83 AC_ARG_ENABLE([upnp-default],
84 [AS_HELP_STRING([--enable-upnp-default],
85 [if UPNP is enabled, turn it on at startup (default is no)])],
86 [use_upnp_default=$enableval],
87 [use_upnp_default=no])
90 AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
91 [use_tests=$enableval],
95 AS_HELP_STRING([--enable-bench],[compile benchmarks (default is yes)]),
96 [use_bench=$enableval],
99 AC_ARG_WITH([comparison-tool],
100 AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
101 [use_comparison_tool=$withval],
102 [use_comparison_tool=no])
104 AC_ARG_ENABLE([comparison-tool-reorg-tests],
105 AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
106 [use_comparison_tool_reorg_tests=$enableval],
107 [use_comparison_tool_reorg_tests=no])
109 AC_ARG_WITH([qrencode],
110 [AS_HELP_STRING([--with-qrencode],
111 [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
115 AC_ARG_ENABLE([hardening],
116 [AS_HELP_STRING([--disable-hardening],
117 [do not attempt to harden the resulting executables (default is to harden)])],
118 [use_hardening=$enableval],
121 AC_ARG_ENABLE([reduce-exports],
122 [AS_HELP_STRING([--enable-reduce-exports],
123 [attempt to reduce exported symbols in the resulting executables (default is no)])],
124 [use_reduce_exports=$enableval],
125 [use_reduce_exports=no])
127 AC_ARG_ENABLE([ccache],
128 [AS_HELP_STRING([--disable-ccache],
129 [do not use ccache for building (default is to use if found)])],
130 [use_ccache=$enableval],
133 AC_ARG_ENABLE([lcov],
134 [AS_HELP_STRING([--enable-lcov],
135 [enable lcov testing (default is no)])],
139 AC_ARG_ENABLE([glibc-back-compat],
140 [AS_HELP_STRING([--enable-glibc-back-compat],
141 [enable backwards compatibility with glibc])],
142 [use_glibc_compat=$enableval],
143 [use_glibc_compat=no])
146 [AS_HELP_STRING([--disable-zmq],
147 [disable ZMQ notifications])],
148 [use_zmq=$enableval],
151 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
154 AC_ARG_ENABLE([debug],
155 [AS_HELP_STRING([--enable-debug],
156 [use debug compiler flags and macros (default is no)])],
157 [enable_debug=$enableval],
160 if test "x$enable_debug" = xyes; then
161 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
162 if test "x$GCC" = xyes; then
163 CFLAGS="$CFLAGS -g3 -O0"
166 if test "x$GXX" = xyes; then
167 CXXFLAGS="$CXXFLAGS -g3 -O0"
171 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
172 ## compatibility with the legacy buildsystem.
174 if test "x$CXXFLAGS_overridden" = "xno"; then
175 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
177 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
180 [AS_HELP_STRING([--with-utils],
181 [build bitcoin-cli bitcoin-tx (default=yes)])],
182 [build_bitcoin_utils=$withval],
183 [build_bitcoin_utils=yes])
186 [AS_HELP_STRING([--with-libs],
187 [build libraries (default=yes)])],
188 [build_bitcoin_libs=$withval],
189 [build_bitcoin_libs=yes])
191 AC_ARG_WITH([daemon],
192 [AS_HELP_STRING([--with-daemon],
193 [build bitcoind daemon (default=yes)])],
194 [build_bitcoind=$withval],
195 [build_bitcoind=yes])
203 #pkgconfig does more harm than good with MinGW
207 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
208 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
209 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
210 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
211 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
212 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
213 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
214 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
215 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
216 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
217 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
218 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
219 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
220 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
221 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
222 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
223 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
224 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
225 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
227 # -static is interpreted by libtool, where it has a different meaning.
228 # In libtool-speak, it's -all-static.
229 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
231 AC_PATH_PROG([MAKENSIS], [makensis], none)
232 if test x$MAKENSIS = xnone; then
233 AC_MSG_WARN("makensis not found. Cannot create installer.")
236 AC_PATH_TOOL(WINDRES, windres, none)
237 if test x$WINDRES = xnone; then
238 AC_MSG_ERROR("windres not found")
241 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
242 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
243 if test "x$CXXFLAGS_overridden" = "xno"; then
244 CXXFLAGS="$CXXFLAGS -w"
247 i?86-*) WINDOWS_BITS=32 ;;
248 x86_64-*) WINDOWS_BITS=64 ;;
249 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
251 AC_SUBST(WINDOWS_BITS)
253 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
254 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
255 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
256 dnl also overridden to prevent their insertion later.
257 dnl This should only affect dll's.
258 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
264 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
265 if test x$cross_compiling != xyes; then
267 AC_CHECK_PROG([PORT],port, port)
268 if test x$PORT = xport; then
269 dnl add default macports paths
270 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
271 LIBS="$LIBS -L/opt/local/lib"
272 if test -d /opt/local/include/db48; then
273 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
274 LIBS="$LIBS -L/opt/local/lib/db48"
278 AC_CHECK_PROG([BREW],brew, brew)
279 if test x$BREW = xbrew; then
280 dnl These Homebrew packages may be keg-only, meaning that they won't be found
281 dnl in expected paths because they may conflict with system files. Ask
282 dnl Homebrew where each one is located, then adjust paths accordingly.
283 dnl It's safe to add these paths even if the functionality is disabled by
284 dnl the user (--without-wallet or --without-gui for example).
286 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
287 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
288 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
289 if test x$openssl_prefix != x; then
290 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
291 export PKG_CONFIG_PATH
293 if test x$bdb_prefix != x; then
294 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
295 LIBS="$LIBS -L$bdb_prefix/lib"
297 if test x$qt5_prefix != x; then
298 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
299 export PKG_CONFIG_PATH
308 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
309 AC_PATH_TOOL([OTOOL], [otool], otool)
310 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
312 dnl libtool will try to strip the static lib, which is a problem for
313 dnl cross-builds because strip attempts to call a hard-coded ld,
314 dnl which may not exist in the path. Stripping the .a is not
315 dnl necessary, so just disable it.
321 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
322 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
331 if test x$use_comparison_tool != xno; then
332 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
335 if test x$use_comparison_tool_reorg_tests != xno; then
336 if test x$use_comparison_tool = x; then
337 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
339 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
341 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
344 if test x$use_lcov = xyes; then
345 if test x$LCOV = x; then
346 AC_MSG_ERROR("lcov testing requested but lcov not found")
348 if test x$GCOV = x; then
349 AC_MSG_ERROR("lcov testing requested but gcov not found")
351 if test x$JAVA = x; then
352 AC_MSG_ERROR("lcov testing requested but java not found")
354 if test x$GENHTML = x; then
355 AC_MSG_ERROR("lcov testing requested but genhtml not found")
357 if test x$use_comparison_tool = x; then
358 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
360 LCOV="$LCOV --gcov-tool=$GCOV"
361 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
362 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
365 dnl Check for endianness
368 dnl Check for pthread compile/link requirements
371 # The following macro will add the necessary defines to bitcoin-config.h, but
372 # they also need to be passed down to any subprojects. Pull the results out of
373 # the cache and add them to CPPFLAGS.
375 # detect POSIX or GNU variant of strerror_r
378 if test x$ac_cv_sys_file_offset_bits != x &&
379 test x$ac_cv_sys_file_offset_bits != xno &&
380 test x$ac_cv_sys_file_offset_bits != xunknown; then
381 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
384 if test x$ac_cv_sys_large_files != x &&
385 test x$ac_cv_sys_large_files != xno &&
386 test x$ac_cv_sys_large_files != xunknown; then
387 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
390 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
392 AX_GCC_FUNC_ATTRIBUTE([visibility])
393 AX_GCC_FUNC_ATTRIBUTE([dllexport])
394 AX_GCC_FUNC_ATTRIBUTE([dllimport])
396 if test x$use_glibc_compat != xno; then
398 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
399 # See which one is present here.
400 AC_MSG_CHECKING(__fdelt_chk type)
401 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
402 #undef _FORTIFY_SOURCE
404 #define _FORTIFY_SOURCE 2
405 #include <sys/select.h>
406 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
407 [ fdelt_type="long unsigned int"],
408 [ fdelt_type="long int"])
409 AC_MSG_RESULT($fdelt_type)
410 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
414 if test x$use_hardening != xno; then
415 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
416 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
418 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
419 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
420 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
422 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
425 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
426 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
427 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
428 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
430 if test x$TARGET_OS != xwindows; then
431 # All windows code is PIC, forcing it on just adds useless compile warnings
432 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
433 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
438 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
442 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
443 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
444 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
445 OBJCXXFLAGS="$CXXFLAGS"
448 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
449 if test x$TARGET_OS = xdarwin; then
450 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
453 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])
454 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
455 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
457 AC_CHECK_DECLS([strnlen])
459 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
462 #elif HAVE_SYS_ENDIAN_H
463 #include <sys/endian.h>
466 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
468 #include <byteswap.h>
471 dnl Check for MSG_NOSIGNAL
472 AC_MSG_CHECKING(for MSG_NOSIGNAL)
473 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
474 [[ int f = MSG_NOSIGNAL; ]])],
475 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
479 AC_SEARCH_LIBS([clock_gettime],[rt])
481 AC_MSG_CHECKING([for visibility attribute])
482 AC_LINK_IFELSE([AC_LANG_SOURCE([
483 int foo_def( void ) __attribute__((visibility("default")));
487 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
492 if test x$use_reduce_exports = xyes; then
493 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
498 if test x$use_reduce_exports = xyes; then
499 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
500 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
506 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
507 AC_SUBST(LEVELDB_CPPFLAGS)
511 if test x$enable_wallet != xno; then
512 dnl Check for libdb_cxx only if wallet enabled
516 dnl Check for libminiupnpc (optional)
517 if test x$use_upnp != xno; then
519 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
520 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
527 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
528 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
530 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
536 if test x$use_boost = xyes; then
538 dnl Check for boost libs
542 AX_BOOST_PROGRAM_OPTIONS
547 if test x$use_reduce_exports = xyes; then
548 AC_MSG_CHECKING([for working boost reduced exports])
549 TEMP_CPPFLAGS="$CPPFLAGS"
550 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
551 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
552 @%:@include <boost/version.hpp>
554 #if BOOST_VERSION >= 104900
555 // Everything is okay
557 # error Boost version is too old
562 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
564 CPPFLAGS="$TEMP_CPPFLAGS"
568 if test x$use_reduce_exports = xyes; then
569 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
570 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
573 if test x$use_tests = xyes; then
575 if test x$HEXDUMP = x; then
576 AC_MSG_ERROR(hexdump is required for tests)
580 if test x$use_boost = xyes; then
582 AX_BOOST_UNIT_TEST_FRAMEWORK
584 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
585 AC_MSG_CHECKING([for dynamic linked boost test])
587 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
588 TEMP_CPPFLAGS="$CPPFLAGS"
589 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
590 AC_LINK_IFELSE([AC_LANG_SOURCE([
591 #define BOOST_TEST_DYN_LINK
592 #define BOOST_TEST_MAIN
593 #include <boost/test/unit_test.hpp>
597 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
600 CPPFLAGS="$TEMP_CPPFLAGS"
605 if test x$use_boost = xyes; then
607 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
609 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
610 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
611 dnl a working version is available, else fall back to sleep. sleep was removed
613 dnl If neither is available, abort.
615 LIBS="$BOOST_LIBS $LIBS"
616 TEMP_CPPFLAGS="$CPPFLAGS"
617 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
618 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
619 #include <boost/thread/thread.hpp>
620 #include <boost/version.hpp>
622 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
623 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
629 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
632 CPPFLAGS="$TEMP_CPPFLAGS"
634 if test x$boost_sleep != xyes; then
636 LIBS="$BOOST_LIBS $LIBS"
637 TEMP_CPPFLAGS="$CPPFLAGS"
638 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
639 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
640 #include <boost/version.hpp>
641 #include <boost/thread.hpp>
642 #include <boost/date_time/posix_time/posix_time_types.hpp>
644 #if BOOST_VERSION <= 105600
645 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
650 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
653 CPPFLAGS="$TEMP_CPPFLAGS"
656 if test x$boost_sleep != xyes; then
657 AC_MSG_ERROR(No working boost sleep implementation found.)
662 if test x$use_pkgconfig = xyes; then
664 if test x"$PKG_CONFIG" = "x"; then
665 AC_MSG_ERROR(pkg-config not found.)
672 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
673 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
674 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
675 if test x$use_qr != xno; then
676 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
678 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
679 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
680 if test x$TARGET_OS != xwindows; then
681 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
685 if test "x$use_zmq" = "xyes"; then
686 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
687 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
688 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
689 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
692 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
697 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
698 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
700 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
701 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
703 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
704 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
705 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
706 if test x$TARGET_OS != xwindows; then
707 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
711 if test "x$use_zmq" = "xyes"; then
712 AC_CHECK_HEADER([zmq.h],
713 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
714 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
716 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
717 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
718 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
720 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
722 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
725 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
726 if test x$use_qr != xno; then
727 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
728 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
732 CXXFLAGS_TEMP="$CXXFLAGS"
734 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
735 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
736 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
737 CXXFLAGS="$CXXFLAGS_TEMP"
740 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
742 AC_MSG_CHECKING([whether to build bitcoind])
743 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
744 AC_MSG_RESULT($build_bitcoind)
746 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
747 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
748 AC_MSG_RESULT($build_bitcoin_utils)
750 AC_MSG_CHECKING([whether to build libraries])
751 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
752 if test x$build_bitcoin_libs = xyes; then
753 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
754 AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
756 AC_MSG_RESULT($build_bitcoin_libs)
760 if test "x$use_ccache" != "xno"; then
761 AC_MSG_CHECKING(if ccache should be used)
762 if test x$CCACHE = x; then
763 if test "x$use_ccache" = "xyes"; then
764 AC_MSG_ERROR([ccache not found.]);
770 CC="$ac_cv_path_CCACHE $CC"
771 CXX="$ac_cv_path_CCACHE $CXX"
773 AC_MSG_RESULT($use_ccache)
775 if test "x$use_ccache" = "xyes"; then
776 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
780 AC_MSG_CHECKING([if wallet should be enabled])
781 if test x$enable_wallet != xno; then
783 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
789 dnl enable upnp support
790 AC_MSG_CHECKING([whether to build with support for UPnP])
791 if test x$have_miniupnpc = xno; then
792 if test x$use_upnp = xyes; then
793 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
797 if test x$use_upnp != xno; then
799 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
802 if test x$use_upnp_default != xno; then
806 AC_MSG_RESULT($use_upnp_default)
807 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
808 if test x$TARGET_OS = xwindows; then
809 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
816 dnl these are only used when qt is enabled
817 if test x$bitcoin_enable_qt != xno; then
819 dnl enable dbus support
820 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
821 if test x$bitcoin_enable_qt_dbus != xno; then
822 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
824 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
826 dnl enable qr support
827 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
828 if test x$have_qrencode = xno; then
829 if test x$use_qr = xyes; then
830 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
834 if test x$use_qr != xno; then
836 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
843 if test x$XGETTEXT = x; then
844 AC_MSG_WARN("xgettext is required to update qt translations")
847 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
848 if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
856 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
858 AC_MSG_CHECKING([whether to build test_bitcoin])
859 if test x$use_tests = xyes; then
866 AC_MSG_CHECKING([whether to reduce exports])
867 if test x$use_reduce_exports = xyes; then
873 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
874 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
877 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
878 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
879 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
880 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
881 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
882 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
883 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
884 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
885 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
886 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
887 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
888 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
889 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
891 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
892 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
893 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
894 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
895 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
896 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
897 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
898 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
899 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
900 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
901 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
902 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
905 AC_SUBST(LIBTOOL_APP_LDFLAGS)
910 AC_SUBST(LEVELDB_TARGET_FLAGS)
913 AC_SUBST(BUILD_TEST_QT)
914 AC_SUBST(MINIUPNPC_CPPFLAGS)
915 AC_SUBST(MINIUPNPC_LIBS)
916 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
917 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
918 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
920 dnl boost's m4 checks do something really nasty: they export these vars. As a
921 dnl result, they leak into secp256k1's configure and crazy things happen.
922 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
923 CPPFLAGS_TEMP="$CPPFLAGS"
925 CPPFLAGS="$CPPFLAGS_TEMP"
927 LDFLAGS_TEMP="$LDFLAGS"
929 LDFLAGS="$LDFLAGS_TEMP"
935 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
936 unset PKG_CONFIG_PATH
937 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
939 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
940 unset PKG_CONFIG_LIBDIR
941 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
943 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
944 AC_CONFIG_SUBDIRS([src/secp256k1 src/univalue])
948 dnl Taken from https://wiki.debian.org/RpathIssue
951 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
952 sed < libtool > libtool-2 \
953 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
959 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
962 sed 's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/' qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
963 mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py