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([--enable-wallet],
73 [enable wallet (default is yes)])],
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([--enable-tests],[compile tests (default is yes)]),
91 [use_tests=$enableval],
94 AC_ARG_WITH([comparison-tool],
95 AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
96 [use_comparison_tool=$withval],
97 [use_comparison_tool=no])
99 AC_ARG_ENABLE([comparison-tool-reorg-tests],
100 AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
101 [use_comparison_tool_reorg_tests=$enableval],
102 [use_comparison_tool_reorg_tests=no])
104 AC_ARG_WITH([qrencode],
105 [AS_HELP_STRING([--with-qrencode],
106 [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
110 AC_ARG_ENABLE([hardening],
111 [AS_HELP_STRING([--enable-hardening],
112 [attempt to harden the resulting executables (default is yes)])],
113 [use_hardening=$enableval],
116 AC_ARG_ENABLE([reduce-exports],
117 [AS_HELP_STRING([--enable-reduce-exports],
118 [attempt to reduce exported symbols in the resulting executables (default is no)])],
119 [use_reduce_exports=$enableval],
120 [use_reduce_exports=no])
122 AC_ARG_ENABLE([ccache],
123 [AS_HELP_STRING([--enable-ccache],
124 [use ccache for building (default is yes if ccache is found)])],
125 [use_ccache=$enableval],
128 AC_ARG_ENABLE([lcov],
129 [AS_HELP_STRING([--enable-lcov],
130 [enable lcov testing (default is no)])],
134 AC_ARG_ENABLE([glibc-back-compat],
135 [AS_HELP_STRING([--enable-glibc-back-compat],
136 [enable backwards compatibility with glibc])],
137 [use_glibc_compat=$enableval],
138 [use_glibc_compat=no])
141 [AS_HELP_STRING([--disable-zmq],
142 [disable ZMQ notifications])],
143 [use_zmq=$enableval],
146 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
149 AC_ARG_ENABLE([debug],
150 [AS_HELP_STRING([--enable-debug],
151 [use debug compiler flags and macros (default is no)])],
152 [enable_debug=$enableval],
155 if test "x$enable_debug" = xyes; then
156 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
157 if test "x$GCC" = xyes; then
158 CFLAGS="$CFLAGS -g3 -O0"
161 if test "x$GXX" = xyes; then
162 CXXFLAGS="$CXXFLAGS -g3 -O0"
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 -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
175 [AS_HELP_STRING([--with-utils],
176 [build bitcoin-cli bitcoin-tx (default=yes)])],
177 [build_bitcoin_utils=$withval],
178 [build_bitcoin_utils=yes])
181 [AS_HELP_STRING([--with-libs],
182 [build libraries (default=yes)])],
183 [build_bitcoin_libs=$withval],
184 [build_bitcoin_libs=yes])
186 AC_ARG_WITH([daemon],
187 [AS_HELP_STRING([--with-daemon],
188 [build bitcoind daemon (default=yes)])],
189 [build_bitcoind=$withval],
190 [build_bitcoind=yes])
198 #pkgconfig does more harm than good with MinGW
202 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
203 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
204 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
205 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
206 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
207 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
208 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
209 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
210 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
211 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
212 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
213 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
214 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
215 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
216 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
217 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
218 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
219 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
220 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
222 # -static is interpreted by libtool, where it has a different meaning.
223 # In libtool-speak, it's -all-static.
224 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
226 AC_PATH_PROG([MAKENSIS], [makensis], none)
227 if test x$MAKENSIS = xnone; then
228 AC_MSG_WARN("makensis not found. Cannot create installer.")
231 AC_PATH_TOOL(WINDRES, windres, none)
232 if test x$WINDRES = xnone; then
233 AC_MSG_ERROR("windres not found")
236 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
237 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
238 if test "x$CXXFLAGS_overridden" = "xno"; then
239 CXXFLAGS="$CXXFLAGS -w"
242 i?86-*) WINDOWS_BITS=32 ;;
243 x86_64-*) WINDOWS_BITS=64 ;;
244 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
246 AC_SUBST(WINDOWS_BITS)
248 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
249 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
250 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
251 dnl also overridden to prevent their insertion later.
252 dnl This should only affect dll's.
253 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
259 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
260 if test x$cross_compiling != xyes; then
262 AC_CHECK_PROG([PORT],port, port)
263 if test x$PORT = xport; then
264 dnl add default macports paths
265 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
266 LIBS="$LIBS -L/opt/local/lib"
267 if test -d /opt/local/include/db48; then
268 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
269 LIBS="$LIBS -L/opt/local/lib/db48"
273 AC_CHECK_PROG([BREW],brew, brew)
274 if test x$BREW = xbrew; then
275 dnl These Homebrew packages may be keg-only, meaning that they won't be found
276 dnl in expected paths because they may conflict with system files. Ask
277 dnl Homebrew where each one is located, then adjust paths accordingly.
278 dnl It's safe to add these paths even if the functionality is disabled by
279 dnl the user (--without-wallet or --without-gui for example).
281 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
282 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
283 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
284 if test x$openssl_prefix != x; then
285 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
286 export PKG_CONFIG_PATH
288 if test x$bdb_prefix != x; then
289 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
290 LIBS="$LIBS -L$bdb_prefix/lib"
292 if test x$qt5_prefix != x; then
293 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
294 export PKG_CONFIG_PATH
303 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
304 AC_PATH_TOOL([OTOOL], [otool], otool)
305 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
307 dnl libtool will try to strip the static lib, which is a problem for
308 dnl cross-builds because strip attempts to call a hard-coded ld,
309 dnl which may not exist in the path. Stripping the .a is not
310 dnl necessary, so just disable it.
316 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
317 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
326 if test x$use_comparison_tool != xno; then
327 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
330 if test x$use_comparison_tool_reorg_tests != xno; then
331 if test x$use_comparison_tool = x; then
332 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
334 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
336 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
339 if test x$use_lcov = xyes; then
340 if test x$LCOV = x; then
341 AC_MSG_ERROR("lcov testing requested but lcov not found")
343 if test x$GCOV = x; then
344 AC_MSG_ERROR("lcov testing requested but gcov not found")
346 if test x$JAVA = x; then
347 AC_MSG_ERROR("lcov testing requested but java not found")
349 if test x$GENHTML = x; then
350 AC_MSG_ERROR("lcov testing requested but genhtml not found")
352 if test x$use_comparison_tool = x; then
353 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
355 LCOV="$LCOV --gcov-tool=$GCOV"
356 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
357 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
360 dnl Check for endianness
363 dnl Check for pthread compile/link requirements
366 # The following macro will add the necessary defines to bitcoin-config.h, but
367 # they also need to be passed down to any subprojects. Pull the results out of
368 # the cache and add them to CPPFLAGS.
370 # detect POSIX or GNU variant of strerror_r
373 if test x$ac_cv_sys_file_offset_bits != x &&
374 test x$ac_cv_sys_file_offset_bits != xno &&
375 test x$ac_cv_sys_file_offset_bits != xunknown; then
376 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
379 if test x$ac_cv_sys_large_files != x &&
380 test x$ac_cv_sys_large_files != xno &&
381 test x$ac_cv_sys_large_files != xunknown; then
382 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
385 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
387 AX_GCC_FUNC_ATTRIBUTE([visibility])
388 AX_GCC_FUNC_ATTRIBUTE([dllexport])
389 AX_GCC_FUNC_ATTRIBUTE([dllimport])
391 if test x$use_glibc_compat != xno; then
393 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
394 # See which one is present here.
395 AC_MSG_CHECKING(__fdelt_chk type)
396 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
397 #undef _FORTIFY_SOURCE
399 #define _FORTIFY_SOURCE 2
400 #include <sys/select.h>
401 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
402 [ fdelt_type="long unsigned int"],
403 [ fdelt_type="long int"])
404 AC_MSG_RESULT($fdelt_type)
405 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
409 if test x$use_hardening != xno; then
410 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
411 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
413 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
414 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
415 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
417 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
420 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
421 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
422 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
423 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
425 if test x$TARGET_OS != xwindows; then
426 # All windows code is PIC, forcing it on just adds useless compile warnings
427 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
428 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
433 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
437 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
438 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
439 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
440 OBJCXXFLAGS="$CXXFLAGS"
443 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
444 if test x$TARGET_OS = xdarwin; then
445 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
448 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])
449 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
450 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
452 AC_CHECK_DECLS([strnlen])
454 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
457 #elif HAVE_SYS_ENDIAN_H
458 #include <sys/endian.h>
461 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
463 #include <byteswap.h>
466 dnl Check for MSG_NOSIGNAL
467 AC_MSG_CHECKING(for MSG_NOSIGNAL)
468 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
469 [[ int f = MSG_NOSIGNAL; ]])],
470 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
474 AC_SEARCH_LIBS([clock_gettime],[rt])
476 AC_MSG_CHECKING([for visibility attribute])
477 AC_LINK_IFELSE([AC_LANG_SOURCE([
478 int foo_def( void ) __attribute__((visibility("default")));
482 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
487 if test x$use_reduce_exports = xyes; then
488 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
493 if test x$use_reduce_exports = xyes; then
494 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
495 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
501 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
502 AC_SUBST(LEVELDB_CPPFLAGS)
506 if test x$enable_wallet != xno; then
507 dnl Check for libdb_cxx only if wallet enabled
511 dnl Check for libminiupnpc (optional)
512 if test x$use_upnp != xno; then
514 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
515 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
522 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
523 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
525 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
531 if test x$use_boost = xyes; then
533 dnl Check for boost libs
537 AX_BOOST_PROGRAM_OPTIONS
542 if test x$use_reduce_exports = xyes; then
543 AC_MSG_CHECKING([for working boost reduced exports])
544 TEMP_CPPFLAGS="$CPPFLAGS"
545 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
546 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
547 @%:@include <boost/version.hpp>
549 #if BOOST_VERSION >= 104900
550 // Everything is okay
552 # error Boost version is too old
557 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
559 CPPFLAGS="$TEMP_CPPFLAGS"
563 if test x$use_reduce_exports = xyes; then
564 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
565 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
568 if test x$use_tests = xyes; then
570 if test x$HEXDUMP = x; then
571 AC_MSG_ERROR(hexdump is required for tests)
575 if test x$use_boost = xyes; then
577 AX_BOOST_UNIT_TEST_FRAMEWORK
579 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
580 AC_MSG_CHECKING([for dynamic linked boost test])
582 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
583 TEMP_CPPFLAGS="$CPPFLAGS"
584 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
585 AC_LINK_IFELSE([AC_LANG_SOURCE([
586 #define BOOST_TEST_DYN_LINK
587 #define BOOST_TEST_MAIN
588 #include <boost/test/unit_test.hpp>
592 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
595 CPPFLAGS="$TEMP_CPPFLAGS"
600 if test x$use_boost = xyes; then
602 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
604 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
605 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
606 dnl a working version is available, else fall back to sleep. sleep was removed
608 dnl If neither is available, abort.
610 LIBS="$BOOST_LIBS $LIBS"
611 TEMP_CPPFLAGS="$CPPFLAGS"
612 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
613 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
614 #include <boost/thread/thread.hpp>
615 #include <boost/version.hpp>
617 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
618 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
624 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
627 CPPFLAGS="$TEMP_CPPFLAGS"
629 if test x$boost_sleep != xyes; then
631 LIBS="$BOOST_LIBS $LIBS"
632 TEMP_CPPFLAGS="$CPPFLAGS"
633 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
634 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
635 #include <boost/version.hpp>
636 #include <boost/thread.hpp>
637 #include <boost/date_time/posix_time/posix_time_types.hpp>
639 #if BOOST_VERSION <= 105600
640 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
645 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
648 CPPFLAGS="$TEMP_CPPFLAGS"
651 if test x$boost_sleep != xyes; then
652 AC_MSG_ERROR(No working boost sleep implementation found.)
657 if test x$use_pkgconfig = xyes; then
659 if test x"$PKG_CONFIG" = "x"; then
660 AC_MSG_ERROR(pkg-config not found.)
667 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
668 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
669 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
670 if test x$use_qr != xno; then
671 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
673 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
674 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
675 if test x$TARGET_OS != xwindows; then
676 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
682 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
683 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
685 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
686 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
688 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
689 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
690 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
691 if test x$TARGET_OS != xwindows; then
692 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
696 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
697 if test x$use_qr != xno; then
698 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
699 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
703 CXXFLAGS_TEMP="$CXXFLAGS"
705 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
706 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
707 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
708 CXXFLAGS="$CXXFLAGS_TEMP"
711 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
713 AC_MSG_CHECKING([whether to build bitcoind])
714 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
715 AC_MSG_RESULT($build_bitcoind)
717 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
718 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
719 AC_MSG_RESULT($build_bitcoin_utils)
721 AC_MSG_CHECKING([whether to build libraries])
722 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
723 if test x$build_bitcoin_libs = xyes; then
724 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
725 AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
727 AC_MSG_RESULT($build_bitcoin_libs)
731 if test "x$use_ccache" != "xno"; then
732 AC_MSG_CHECKING(if ccache should be used)
733 if test x$CCACHE = x; then
734 if test "x$use_ccache" = "xyes"; then
735 AC_MSG_ERROR([ccache not found.]);
741 CC="$ac_cv_path_CCACHE $CC"
742 CXX="$ac_cv_path_CCACHE $CXX"
744 AC_MSG_RESULT($use_ccache)
746 if test "x$use_ccache" = "xyes"; then
747 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
751 AC_MSG_CHECKING([if wallet should be enabled])
752 if test x$enable_wallet != xno; then
754 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
760 dnl enable upnp support
761 AC_MSG_CHECKING([whether to build with support for UPnP])
762 if test x$have_miniupnpc = xno; then
763 if test x$use_upnp = xyes; then
764 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
768 if test x$use_upnp != xno; then
770 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
773 if test x$use_upnp_default != xno; then
777 AC_MSG_RESULT($use_upnp_default)
778 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
779 if test x$TARGET_OS = xwindows; then
780 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
787 dnl these are only used when qt is enabled
788 if test x$bitcoin_enable_qt != xno; then
790 dnl enable dbus support
791 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
792 if test x$bitcoin_enable_qt_dbus != xno; then
793 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
795 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
797 dnl enable qr support
798 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
799 if test x$have_qrencode = xno; then
800 if test x$use_qr = xyes; then
801 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
805 if test x$use_qr != xno; then
807 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
814 if test x$XGETTEXT = x; then
815 AC_MSG_WARN("xgettext is required to update qt translations")
818 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
819 if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
827 # conditional search for and use libzmq
828 AC_MSG_CHECKING([whether to build ZMQ support])
829 if test "x$use_zmq" = "xyes"; then
831 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
832 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
833 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
834 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
837 AC_MSG_RESULT([no, --disable-zmq used])
838 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
841 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
843 AC_MSG_CHECKING([whether to build test_bitcoin])
844 if test x$use_tests = xyes; then
851 AC_MSG_CHECKING([whether to reduce exports])
852 if test x$use_reduce_exports = xyes; then
858 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
859 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
862 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
863 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
864 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
865 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
866 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
867 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
868 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
869 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
870 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
871 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
872 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
873 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
875 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
876 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
877 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
878 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
879 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
880 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
881 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
882 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
883 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
884 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
885 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
886 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
889 AC_SUBST(LIBTOOL_APP_LDFLAGS)
894 AC_SUBST(LEVELDB_TARGET_FLAGS)
897 AC_SUBST(BUILD_TEST_QT)
898 AC_SUBST(MINIUPNPC_CPPFLAGS)
899 AC_SUBST(MINIUPNPC_LIBS)
900 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
901 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
902 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
903 chmod +x qa/pull-tester/rpc-tests.py
905 dnl boost's m4 checks do something really nasty: they export these vars. As a
906 dnl result, they leak into secp256k1's configure and crazy things happen.
907 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
908 CPPFLAGS_TEMP="$CPPFLAGS"
910 CPPFLAGS="$CPPFLAGS_TEMP"
912 LDFLAGS_TEMP="$LDFLAGS"
914 LDFLAGS="$LDFLAGS_TEMP"
920 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
921 unset PKG_CONFIG_PATH
922 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
924 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
925 unset PKG_CONFIG_LIBDIR
926 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
928 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
929 AC_CONFIG_SUBDIRS([src/secp256k1 src/univalue])
933 dnl Taken from https://wiki.debian.org/RpathIssue
936 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
937 sed < libtool > libtool-2 \
938 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
944 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
947 sed 's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/' qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
948 mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py
949 chmod +x qa/pull-tester/tests_config.py