1 dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
3 define(_CLIENT_VERSION_MAJOR, 0)
4 define(_CLIENT_VERSION_MINOR, 12)
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(PYTHON, python)
62 AC_PATH_PROG(GENHTML, genhtml)
63 AC_PATH_PROG([GIT], [git])
64 AC_PATH_PROG(CCACHE,ccache)
65 AC_PATH_PROG(XGETTEXT,xgettext)
66 AC_PATH_PROG(HEXDUMP,hexdump)
72 AC_ARG_ENABLE([wallet],
73 [AS_HELP_STRING([--disable-wallet],
74 [disable wallet (enabled by default)])],
75 [enable_wallet=$enableval],
78 AC_ARG_WITH([miniupnpc],
79 [AS_HELP_STRING([--with-miniupnpc],
80 [enable UPNP (default is yes if libminiupnpc is found)])],
84 AC_ARG_ENABLE([upnp-default],
85 [AS_HELP_STRING([--enable-upnp-default],
86 [if UPNP is enabled, turn it on at startup (default is no)])],
87 [use_upnp_default=$enableval],
88 [use_upnp_default=no])
91 AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]),
92 [use_tests=$enableval],
96 AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]),
97 [use_bench=$enableval],
100 AC_ARG_WITH([comparison-tool],
101 AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
102 [use_comparison_tool=$withval],
103 [use_comparison_tool=no])
105 AC_ARG_ENABLE([comparison-tool-reorg-tests],
106 AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
107 [use_comparison_tool_reorg_tests=$enableval],
108 [use_comparison_tool_reorg_tests=no])
110 AC_ARG_ENABLE([extended-rpc-tests],
111 AS_HELP_STRING([--enable-extended-rpc-tests],[enable expensive RPC tests when using lcov (default no)]),
112 [use_extended_rpc_tests=$enableval],
113 [use_extended_rpc_tests=no])
115 AC_ARG_WITH([qrencode],
116 [AS_HELP_STRING([--with-qrencode],
117 [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
121 AC_ARG_ENABLE([hardening],
122 [AS_HELP_STRING([--disable-hardening],
123 [do not attempt to harden the resulting executables (default is to harden)])],
124 [use_hardening=$enableval],
127 AC_ARG_ENABLE([reduce-exports],
128 [AS_HELP_STRING([--enable-reduce-exports],
129 [attempt to reduce exported symbols in the resulting executables (default is no)])],
130 [use_reduce_exports=$enableval],
131 [use_reduce_exports=no])
133 AC_ARG_ENABLE([ccache],
134 [AS_HELP_STRING([--disable-ccache],
135 [do not use ccache for building (default is to use if found)])],
136 [use_ccache=$enableval],
139 AC_ARG_ENABLE([lcov],
140 [AS_HELP_STRING([--enable-lcov],
141 [enable lcov testing (default is no)])],
145 AC_ARG_ENABLE([glibc-back-compat],
146 [AS_HELP_STRING([--enable-glibc-back-compat],
147 [enable backwards compatibility with glibc])],
148 [use_glibc_compat=$enableval],
149 [use_glibc_compat=no])
152 [AS_HELP_STRING([--disable-zmq],
153 [disable ZMQ notifications])],
154 [use_zmq=$enableval],
157 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
160 AC_ARG_ENABLE([debug],
161 [AS_HELP_STRING([--enable-debug],
162 [use debug compiler flags and macros (default is no)])],
163 [enable_debug=$enableval],
166 if test "x$enable_debug" = xyes; then
167 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
168 if test "x$GCC" = xyes; then
169 CFLAGS="$CFLAGS -g3 -O0"
172 if test "x$GXX" = xyes; then
173 CXXFLAGS="$CXXFLAGS -g3 -O0"
177 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
178 ## compatibility with the legacy buildsystem.
180 if test "x$CXXFLAGS_overridden" = "xno"; then
181 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
183 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
186 [AS_HELP_STRING([--with-utils],
187 [build bitcoin-cli bitcoin-tx (default=yes)])],
188 [build_bitcoin_utils=$withval],
189 [build_bitcoin_utils=yes])
192 [AS_HELP_STRING([--with-libs],
193 [build libraries (default=yes)])],
194 [build_bitcoin_libs=$withval],
195 [build_bitcoin_libs=yes])
197 AC_ARG_WITH([daemon],
198 [AS_HELP_STRING([--with-daemon],
199 [build bitcoind daemon (default=yes)])],
200 [build_bitcoind=$withval],
201 [build_bitcoind=yes])
209 #pkgconfig does more harm than good with MinGW
213 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
214 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
215 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
216 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
217 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
218 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
219 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
220 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
221 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
222 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
223 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
224 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
225 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
226 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
227 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
228 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
229 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
230 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
231 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
233 # -static is interpreted by libtool, where it has a different meaning.
234 # In libtool-speak, it's -all-static.
235 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
237 AC_PATH_PROG([MAKENSIS], [makensis], none)
238 if test x$MAKENSIS = xnone; then
239 AC_MSG_WARN("makensis not found. Cannot create installer.")
242 AC_PATH_TOOL(WINDRES, windres, none)
243 if test x$WINDRES = xnone; then
244 AC_MSG_ERROR("windres not found")
247 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
248 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
249 if test "x$CXXFLAGS_overridden" = "xno"; then
250 CXXFLAGS="$CXXFLAGS -w"
253 i?86-*) WINDOWS_BITS=32 ;;
254 x86_64-*) WINDOWS_BITS=64 ;;
255 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
257 AC_SUBST(WINDOWS_BITS)
259 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
260 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
261 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
262 dnl also overridden to prevent their insertion later.
263 dnl This should only affect dll's.
264 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
270 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
271 if test x$cross_compiling != xyes; then
273 AC_CHECK_PROG([PORT],port, port)
274 if test x$PORT = xport; then
275 dnl add default macports paths
276 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
277 LIBS="$LIBS -L/opt/local/lib"
278 if test -d /opt/local/include/db48; then
279 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
280 LIBS="$LIBS -L/opt/local/lib/db48"
284 AC_CHECK_PROG([BREW],brew, brew)
285 if test x$BREW = xbrew; then
286 dnl These Homebrew packages may be keg-only, meaning that they won't be found
287 dnl in expected paths because they may conflict with system files. Ask
288 dnl Homebrew where each one is located, then adjust paths accordingly.
289 dnl It's safe to add these paths even if the functionality is disabled by
290 dnl the user (--without-wallet or --without-gui for example).
292 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
293 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
294 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
295 if test x$openssl_prefix != x; then
296 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
297 export PKG_CONFIG_PATH
299 if test x$bdb_prefix != x; then
300 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
301 LIBS="$LIBS -L$bdb_prefix/lib"
303 if test x$qt5_prefix != x; then
304 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
305 export PKG_CONFIG_PATH
314 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
315 AC_PATH_TOOL([OTOOL], [otool], otool)
316 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
318 dnl libtool will try to strip the static lib, which is a problem for
319 dnl cross-builds because strip attempts to call a hard-coded ld,
320 dnl which may not exist in the path. Stripping the .a is not
321 dnl necessary, so just disable it.
327 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
328 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
329 OBJCXXFLAGS="$CXXFLAGS"
338 if test x$use_comparison_tool != xno; then
339 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
342 if test x$use_comparison_tool_reorg_tests != xno; then
343 if test x$use_comparison_tool = x; then
344 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
346 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
348 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
351 if test x$use_extended_rpc_tests != xno; then
352 AC_SUBST(EXTENDED_RPC_TESTS, -extended)
355 if test x$use_lcov = xyes; then
356 if test x$LCOV = x; then
357 AC_MSG_ERROR("lcov testing requested but lcov not found")
359 if test x$GCOV = x; then
360 AC_MSG_ERROR("lcov testing requested but gcov not found")
362 if test x$JAVA = x; then
363 AC_MSG_ERROR("lcov testing requested but java not found")
365 if test x$PYTHON = x; then
366 AC_MSG_ERROR("lcov testing requested but python not found")
368 if test x$GENHTML = x; then
369 AC_MSG_ERROR("lcov testing requested but genhtml not found")
371 if test x$use_comparison_tool = x; then
372 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
374 LCOV="$LCOV --gcov-tool=$GCOV"
375 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
376 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
379 dnl Check for endianness
382 dnl Check for pthread compile/link requirements
385 # The following macro will add the necessary defines to bitcoin-config.h, but
386 # they also need to be passed down to any subprojects. Pull the results out of
387 # the cache and add them to CPPFLAGS.
389 # detect POSIX or GNU variant of strerror_r
392 if test x$ac_cv_sys_file_offset_bits != x &&
393 test x$ac_cv_sys_file_offset_bits != xno &&
394 test x$ac_cv_sys_file_offset_bits != xunknown; then
395 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
398 if test x$ac_cv_sys_large_files != x &&
399 test x$ac_cv_sys_large_files != xno &&
400 test x$ac_cv_sys_large_files != xunknown; then
401 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
404 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
406 AX_GCC_FUNC_ATTRIBUTE([visibility])
407 AX_GCC_FUNC_ATTRIBUTE([dllexport])
408 AX_GCC_FUNC_ATTRIBUTE([dllimport])
410 if test x$use_glibc_compat != xno; then
412 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
413 # See which one is present here.
414 AC_MSG_CHECKING(__fdelt_chk type)
415 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
416 #undef _FORTIFY_SOURCE
418 #define _FORTIFY_SOURCE 2
419 #include <sys/select.h>
420 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
421 [ fdelt_type="long unsigned int"],
422 [ fdelt_type="long int"])
423 AC_MSG_RESULT($fdelt_type)
424 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
428 if test x$TARGET_OS != xwindows; then
429 # All windows code is PIC, forcing it on just adds useless compile warnings
430 AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
433 if test x$use_hardening != xno; then
434 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
435 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
437 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
438 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
439 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
441 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
444 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
445 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
446 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
447 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
449 if test x$TARGET_OS != xwindows; then
450 AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"])
451 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
456 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
461 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
462 if test x$TARGET_OS = xdarwin; then
463 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
466 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])
467 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
468 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
470 AC_CHECK_DECLS([strnlen])
472 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
475 #elif HAVE_SYS_ENDIAN_H
476 #include <sys/endian.h>
479 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
481 #include <byteswap.h>
484 dnl Check for MSG_NOSIGNAL
485 AC_MSG_CHECKING(for MSG_NOSIGNAL)
486 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
487 [[ int f = MSG_NOSIGNAL; ]])],
488 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
492 AC_SEARCH_LIBS([clock_gettime],[rt])
494 AC_MSG_CHECKING([for visibility attribute])
495 AC_LINK_IFELSE([AC_LANG_SOURCE([
496 int foo_def( void ) __attribute__((visibility("default")));
500 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
505 if test x$use_reduce_exports = xyes; then
506 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
511 if test x$use_reduce_exports = xyes; then
512 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
513 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
519 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
520 AC_SUBST(LEVELDB_CPPFLAGS)
524 if test x$enable_wallet != xno; then
525 dnl Check for libdb_cxx only if wallet enabled
529 dnl Check for libminiupnpc (optional)
530 if test x$use_upnp != xno; then
532 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
533 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
540 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
541 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5])
543 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
549 if test x$use_boost = xyes; then
551 dnl Check for boost libs
555 AX_BOOST_PROGRAM_OPTIONS
560 if test x$use_reduce_exports = xyes; then
561 AC_MSG_CHECKING([for working boost reduced exports])
562 TEMP_CPPFLAGS="$CPPFLAGS"
563 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
564 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
565 @%:@include <boost/version.hpp>
567 #if BOOST_VERSION >= 104900
568 // Everything is okay
570 # error Boost version is too old
575 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
577 CPPFLAGS="$TEMP_CPPFLAGS"
581 if test x$use_reduce_exports = xyes; then
582 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
583 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
586 if test x$use_tests = xyes; then
588 if test x$HEXDUMP = x; then
589 AC_MSG_ERROR(hexdump is required for tests)
593 if test x$use_boost = xyes; then
595 AX_BOOST_UNIT_TEST_FRAMEWORK
597 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
598 AC_MSG_CHECKING([for dynamic linked boost test])
600 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
601 TEMP_CPPFLAGS="$CPPFLAGS"
602 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
603 AC_LINK_IFELSE([AC_LANG_SOURCE([
604 #define BOOST_TEST_DYN_LINK
605 #define BOOST_TEST_MAIN
606 #include <boost/test/unit_test.hpp>
610 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
613 CPPFLAGS="$TEMP_CPPFLAGS"
618 if test x$use_boost = xyes; then
620 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
622 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
623 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
624 dnl a working version is available, else fall back to sleep. sleep was removed
626 dnl If neither is available, abort.
628 LIBS="$BOOST_LIBS $LIBS"
629 TEMP_CPPFLAGS="$CPPFLAGS"
630 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
631 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
632 #include <boost/thread/thread.hpp>
633 #include <boost/version.hpp>
635 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
636 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
642 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
645 CPPFLAGS="$TEMP_CPPFLAGS"
647 if test x$boost_sleep != xyes; then
649 LIBS="$BOOST_LIBS $LIBS"
650 TEMP_CPPFLAGS="$CPPFLAGS"
651 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
652 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
653 #include <boost/version.hpp>
654 #include <boost/thread.hpp>
655 #include <boost/date_time/posix_time/posix_time_types.hpp>
657 #if BOOST_VERSION <= 105600
658 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
663 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
666 CPPFLAGS="$TEMP_CPPFLAGS"
669 if test x$boost_sleep != xyes; then
670 AC_MSG_ERROR(No working boost sleep implementation found.)
675 if test x$use_pkgconfig = xyes; then
677 if test x"$PKG_CONFIG" = "x"; then
678 AC_MSG_ERROR(pkg-config not found.)
685 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
686 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
687 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
688 if test x$use_qr != xno; then
689 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
691 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
692 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
693 if test x$TARGET_OS != xwindows; then
694 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
698 if test "x$use_zmq" = "xyes"; then
699 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
700 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
701 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
702 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
705 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
710 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
711 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
713 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
714 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
716 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
717 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
718 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
719 if test x$TARGET_OS != xwindows; then
720 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
724 if test "x$use_zmq" = "xyes"; then
725 AC_CHECK_HEADER([zmq.h],
726 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
727 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
729 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
730 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
731 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
733 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
735 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
738 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
739 if test x$use_qr != xno; then
740 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
741 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
745 CXXFLAGS_TEMP="$CXXFLAGS"
747 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
748 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
749 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
750 CXXFLAGS="$CXXFLAGS_TEMP"
753 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
755 AC_MSG_CHECKING([whether to build bitcoind])
756 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
757 AC_MSG_RESULT($build_bitcoind)
759 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
760 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
761 AC_MSG_RESULT($build_bitcoin_utils)
763 AC_MSG_CHECKING([whether to build libraries])
764 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
765 if test x$build_bitcoin_libs = xyes; then
766 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
767 AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
769 AC_MSG_RESULT($build_bitcoin_libs)
773 if test "x$use_ccache" != "xno"; then
774 AC_MSG_CHECKING(if ccache should be used)
775 if test x$CCACHE = x; then
776 if test "x$use_ccache" = "xyes"; then
777 AC_MSG_ERROR([ccache not found.]);
783 CC="$ac_cv_path_CCACHE $CC"
784 CXX="$ac_cv_path_CCACHE $CXX"
786 AC_MSG_RESULT($use_ccache)
788 if test "x$use_ccache" = "xyes"; then
789 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
793 AC_MSG_CHECKING([if wallet should be enabled])
794 if test x$enable_wallet != xno; then
796 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
802 dnl enable upnp support
803 AC_MSG_CHECKING([whether to build with support for UPnP])
804 if test x$have_miniupnpc = xno; then
805 if test x$use_upnp = xyes; then
806 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
810 if test x$use_upnp != xno; then
812 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
815 if test x$use_upnp_default != xno; then
819 AC_MSG_RESULT($use_upnp_default)
820 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
821 if test x$TARGET_OS = xwindows; then
822 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
829 dnl these are only used when qt is enabled
830 if test x$bitcoin_enable_qt != xno; then
832 dnl enable dbus support
833 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
834 if test x$bitcoin_enable_qt_dbus != xno; then
835 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
837 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
839 dnl enable qr support
840 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
841 if test x$have_qrencode = xno; then
842 if test x$use_qr = xyes; then
843 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
847 if test x$use_qr != xno; then
849 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
856 if test x$XGETTEXT = x; then
857 AC_MSG_WARN("xgettext is required to update qt translations")
860 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
861 if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
869 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
871 AC_MSG_CHECKING([whether to build test_bitcoin])
872 if test x$use_tests = xyes; then
879 AC_MSG_CHECKING([whether to reduce exports])
880 if test x$use_reduce_exports = xyes; then
886 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
887 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
890 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
891 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
892 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
893 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
894 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
895 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
896 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
897 AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes])
898 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
899 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
900 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
901 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
902 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
904 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
905 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
906 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
907 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
908 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
909 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
910 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
911 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
912 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
913 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
914 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
915 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
918 AC_SUBST(HARDENED_CXXFLAGS)
919 AC_SUBST(HARDENED_CPPFLAGS)
920 AC_SUBST(HARDENED_LDFLAGS)
923 AC_SUBST(LIBTOOL_APP_LDFLAGS)
928 AC_SUBST(LEVELDB_TARGET_FLAGS)
931 AC_SUBST(BUILD_TEST_QT)
932 AC_SUBST(MINIUPNPC_CPPFLAGS)
933 AC_SUBST(MINIUPNPC_LIBS)
934 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
935 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
936 AC_CONFIG_FILES([qa/pull-tester/tests_config.py],[chmod +x qa/pull-tester/tests_config.py])
938 dnl boost's m4 checks do something really nasty: they export these vars. As a
939 dnl result, they leak into secp256k1's configure and crazy things happen.
940 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
941 CPPFLAGS_TEMP="$CPPFLAGS"
943 CPPFLAGS="$CPPFLAGS_TEMP"
945 LDFLAGS_TEMP="$LDFLAGS"
947 LDFLAGS="$LDFLAGS_TEMP"
953 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
954 unset PKG_CONFIG_PATH
955 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
957 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
958 unset PKG_CONFIG_LIBDIR
959 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
961 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
962 AC_CONFIG_SUBDIRS([src/secp256k1 src/univalue])
966 dnl Taken from https://wiki.debian.org/RpathIssue
969 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
970 sed < libtool > libtool-2 \
971 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
977 dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows
980 sed 's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/' qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py
981 mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py