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, 1)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_IS_RELEASE, true)
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])
140 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
143 AC_ARG_ENABLE([debug],
144 [AS_HELP_STRING([--enable-debug],
145 [use debug compiler flags and macros (default is no)])],
146 [enable_debug=$enableval],
149 if test "x$enable_debug" = xyes; then
150 if test "x$GCC" = xyes; then
151 CFLAGS="-g3 -O0 -DDEBUG"
154 if test "x$GXX" = xyes; then
155 CXXFLAGS="-g3 -O0 -DDEBUG"
159 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
160 ## compatibility with the legacy buildsystem.
162 if test "x$CXXFLAGS_overridden" = "xno"; then
163 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter"
165 CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
168 [AS_HELP_STRING([--with-utils],
169 [build bitcoin-cli bitcoin-tx (default=yes)])],
170 [build_bitcoin_utils=$withval],
171 [build_bitcoin_utils=yes])
174 [AS_HELP_STRING([--with-libs],
175 [build libraries (default=yes)])],
176 [build_bitcoin_libs=$withval],
177 [build_bitcoin_libs=yes])
179 AC_ARG_WITH([daemon],
180 [AS_HELP_STRING([--with-daemon],
181 [build bitcoind daemon (default=yes)])],
182 [build_bitcoind=$withval],
183 [build_bitcoind=yes])
191 #pkgconfig does more harm than good with MinGW
195 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
196 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
197 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
198 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
199 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
200 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
201 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
202 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
203 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
204 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
205 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
206 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
207 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
208 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
209 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
210 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
211 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
212 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
213 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
215 # -static is interpreted by libtool, where it has a different meaning.
216 # In libtool-speak, it's -all-static.
217 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
219 AC_PATH_PROG([MAKENSIS], [makensis], none)
220 if test x$MAKENSIS = xnone; then
221 AC_MSG_WARN("makensis not found. Cannot create installer.")
224 AC_PATH_TOOL(WINDRES, windres, none)
225 if test x$WINDRES = xnone; then
226 AC_MSG_ERROR("windres not found")
229 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
230 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
231 if test "x$CXXFLAGS_overridden" = "xno"; then
232 CXXFLAGS="$CXXFLAGS -w"
235 i?86-*) WINDOWS_BITS=32 ;;
236 x86_64-*) WINDOWS_BITS=64 ;;
237 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
239 AC_SUBST(WINDOWS_BITS)
241 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
242 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
243 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
244 dnl also overridden to prevent their insertion later.
245 dnl This should only affect dll's.
246 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
252 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
253 if test x$cross_compiling != xyes; then
255 AC_CHECK_PROG([PORT],port, port)
256 if test x$PORT = xport; then
257 dnl add default macports paths
258 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
259 LIBS="$LIBS -L/opt/local/lib"
260 if test -d /opt/local/include/db48; then
261 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
262 LIBS="$LIBS -L/opt/local/lib/db48"
266 AC_CHECK_PROG([BREW],brew, brew)
267 if test x$BREW = xbrew; then
268 dnl These Homebrew packages may be keg-only, meaning that they won't be found
269 dnl in expected paths because they may conflict with system files. Ask
270 dnl Homebrew where each one is located, then adjust paths accordingly.
271 dnl It's safe to add these paths even if the functionality is disabled by
272 dnl the user (--without-wallet or --without-gui for example).
274 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
275 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
276 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
277 if test x$openssl_prefix != x; then
278 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
279 export PKG_CONFIG_PATH
281 if test x$bdb_prefix != x; then
282 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
283 LIBS="$LIBS -L$bdb_prefix/lib"
285 if test x$qt5_prefix != x; then
286 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
287 export PKG_CONFIG_PATH
296 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
297 AC_PATH_TOOL([OTOOL], [otool], otool)
298 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
300 dnl libtool will try to strip the static lib, which is a problem for
301 dnl cross-builds because strip attempts to call a hard-coded ld,
302 dnl which may not exist in the path. Stripping the .a is not
303 dnl necessary, so just disable it.
309 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
310 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
319 if test x$use_comparison_tool != xno; then
320 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
323 if test x$use_comparison_tool_reorg_tests != xno; then
324 if test x$use_comparison_tool = x; then
325 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
327 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
329 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
332 if test x$use_lcov = xyes; then
333 if test x$LCOV = x; then
334 AC_MSG_ERROR("lcov testing requested but lcov not found")
336 if test x$GCOV = x; then
337 AC_MSG_ERROR("lcov testing requested but gcov not found")
339 if test x$JAVA = x; then
340 AC_MSG_ERROR("lcov testing requested but java not found")
342 if test x$GENHTML = x; then
343 AC_MSG_ERROR("lcov testing requested but genhtml not found")
345 if test x$use_comparison_tool = x; then
346 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
348 LCOV="$LCOV --gcov-tool=$GCOV"
349 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
350 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
353 dnl Check for endianness
356 dnl Check for pthread compile/link requirements
359 # The following macro will add the necessary defines to bitcoin-config.h, but
360 # they also need to be passed down to any subprojects. Pull the results out of
361 # the cache and add them to CPPFLAGS.
363 # detect POSIX or GNU variant of strerror_r
366 if test x$ac_cv_sys_file_offset_bits != x &&
367 test x$ac_cv_sys_file_offset_bits != xno &&
368 test x$ac_cv_sys_file_offset_bits != xunknown; then
369 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
372 if test x$ac_cv_sys_large_files != x &&
373 test x$ac_cv_sys_large_files != xno &&
374 test x$ac_cv_sys_large_files != xunknown; then
375 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
378 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
380 AX_GCC_FUNC_ATTRIBUTE([visibility])
381 AX_GCC_FUNC_ATTRIBUTE([dllexport])
382 AX_GCC_FUNC_ATTRIBUTE([dllimport])
384 if test x$use_glibc_compat != xno; then
386 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
387 # See which one is present here.
388 AC_MSG_CHECKING(__fdelt_chk type)
389 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
390 #undef _FORTIFY_SOURCE
392 #define _FORTIFY_SOURCE 2
393 #include <sys/select.h>
394 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
395 [ fdelt_type="long unsigned int"],
396 [ fdelt_type="long int"])
397 AC_MSG_RESULT($fdelt_type)
398 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
402 if test x$use_hardening != xno; then
403 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
404 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
406 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
407 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
408 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
410 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
413 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
414 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
415 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
416 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
418 if test x$TARGET_OS != xwindows; then
419 # All windows code is PIC, forcing it on just adds useless compile warnings
420 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
421 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
426 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
430 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
431 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
432 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
433 OBJCXXFLAGS="$CXXFLAGS"
436 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
437 if test x$TARGET_OS = xdarwin; then
438 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
441 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])
442 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
443 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
445 AC_CHECK_DECLS([strnlen])
447 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
450 #elif HAVE_SYS_ENDIAN_H
451 #include <sys/endian.h>
454 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
456 #include <byteswap.h>
459 dnl Check for MSG_NOSIGNAL
460 AC_MSG_CHECKING(for MSG_NOSIGNAL)
461 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
462 [[ int f = MSG_NOSIGNAL; ]])],
463 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
467 AC_SEARCH_LIBS([clock_gettime],[rt])
469 AC_MSG_CHECKING([for visibility attribute])
470 AC_LINK_IFELSE([AC_LANG_SOURCE([
471 int foo_def( void ) __attribute__((visibility("default")));
475 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
480 if test x$use_reduce_exports = xyes; then
481 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
486 if test x$use_reduce_exports = xyes; then
487 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
488 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
494 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
495 AC_SUBST(LEVELDB_CPPFLAGS)
499 if test x$enable_wallet != xno; then
500 dnl Check for libdb_cxx only if wallet enabled
504 dnl Check for libminiupnpc (optional)
505 if test x$use_upnp != xno; then
507 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
508 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
515 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
516 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
518 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
524 if test x$use_boost = xyes; then
526 dnl Check for boost libs
530 AX_BOOST_PROGRAM_OPTIONS
535 if test x$use_reduce_exports = xyes; then
536 AC_MSG_CHECKING([for working boost reduced exports])
537 TEMP_CPPFLAGS="$CPPFLAGS"
538 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
539 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
540 @%:@include <boost/version.hpp>
542 #if BOOST_VERSION >= 104900
543 // Everything is okay
545 # error Boost version is too old
550 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
552 CPPFLAGS="$TEMP_CPPFLAGS"
556 if test x$use_reduce_exports = xyes; then
557 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
558 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
561 if test x$use_tests = xyes; then
563 if test x$HEXDUMP = x; then
564 AC_MSG_ERROR(hexdump is required for tests)
568 if test x$use_boost = xyes; then
570 AX_BOOST_UNIT_TEST_FRAMEWORK
572 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
573 AC_MSG_CHECKING([for dynamic linked boost test])
575 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
576 TEMP_CPPFLAGS="$CPPFLAGS"
577 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
578 AC_LINK_IFELSE([AC_LANG_SOURCE([
579 #define BOOST_TEST_DYN_LINK
580 #define BOOST_TEST_MAIN
581 #include <boost/test/unit_test.hpp>
585 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
588 CPPFLAGS="$TEMP_CPPFLAGS"
593 if test x$use_boost = xyes; then
595 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
597 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
598 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
599 dnl a working version is available, else fall back to sleep. sleep was removed
601 dnl If neither is available, abort.
603 LIBS="$BOOST_LIBS $LIBS"
604 TEMP_CPPFLAGS="$CPPFLAGS"
605 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
606 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
607 #include <boost/thread/thread.hpp>
608 #include <boost/version.hpp>
610 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
611 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
617 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
620 CPPFLAGS="$TEMP_CPPFLAGS"
622 if test x$boost_sleep != xyes; then
624 LIBS="$BOOST_LIBS $LIBS"
625 TEMP_CPPFLAGS="$CPPFLAGS"
626 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
627 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
628 #include <boost/version.hpp>
629 #include <boost/thread.hpp>
630 #include <boost/date_time/posix_time/posix_time_types.hpp>
632 #if BOOST_VERSION <= 105600
633 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
638 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
641 CPPFLAGS="$TEMP_CPPFLAGS"
644 if test x$boost_sleep != xyes; then
645 AC_MSG_ERROR(No working boost sleep implementation found.)
650 if test x$use_pkgconfig = xyes; then
652 if test x"$PKG_CONFIG" = "x"; then
653 AC_MSG_ERROR(pkg-config not found.)
660 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
661 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
662 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
663 if test x$use_qr != xno; then
664 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
669 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
670 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
672 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
673 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
675 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
676 if test x$use_qr != xno; then
677 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
678 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
682 AC_CHECK_LIB([crypto],[RAND_egd],[],[
683 AC_ARG_WITH([libressl],
684 [AS_HELP_STRING([--with-libressl],[Build with system LibreSSL (default is no; DANGEROUS; NOT SUPPORTED)])],
685 [AC_MSG_WARN([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])],
686 [AC_MSG_ERROR([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])]
690 CFLAGS_TEMP="$CFLAGS"
692 CFLAGS="$CFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
693 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
694 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
696 AC_MSG_CHECKING(for a supported OpenSSL version)
697 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
698 #include <openssl/rand.h>
700 [[RAND_egd(NULL);]])],
701 [AC_MSG_RESULT(yes)],
703 AC_ARG_WITH([libressl],
704 [AS_HELP_STRING([--with-libressl],[Build with system LibreSSL (default is no; DANGEROUS; NOT SUPPORTED)])],
705 [AC_MSG_WARN([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])],
706 [AC_MSG_ERROR([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])]
710 CFLAGS="$CFLAGS_TEMP"
713 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
715 AC_MSG_CHECKING([whether to build bitcoind])
716 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
717 AC_MSG_RESULT($build_bitcoind)
719 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
720 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
721 AC_MSG_RESULT($build_bitcoin_utils)
723 AC_MSG_CHECKING([whether to build libraries])
724 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
725 if test x$build_bitcoin_libs = xyes; then
726 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
727 AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
729 AC_MSG_RESULT($build_bitcoin_libs)
733 if test "x$use_ccache" != "xno"; then
734 AC_MSG_CHECKING(if ccache should be used)
735 if test x$CCACHE = x; then
736 if test "x$use_ccache" = "xyes"; then
737 AC_MSG_ERROR([ccache not found.]);
743 CC="$ac_cv_path_CCACHE $CC"
744 CXX="$ac_cv_path_CCACHE $CXX"
746 AC_MSG_RESULT($use_ccache)
748 if test "x$use_ccache" = "xyes"; then
749 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
753 AC_MSG_CHECKING([if wallet should be enabled])
754 if test x$enable_wallet != xno; then
756 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
762 dnl enable upnp support
763 AC_MSG_CHECKING([whether to build with support for UPnP])
764 if test x$have_miniupnpc = xno; then
765 if test x$use_upnp = xyes; then
766 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
770 if test x$use_upnp != xno; then
772 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
775 if test x$use_upnp_default != xno; then
779 AC_MSG_RESULT($use_upnp_default)
780 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
781 if test x$TARGET_OS = xwindows; then
782 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
789 dnl these are only used when qt is enabled
790 if test x$bitcoin_enable_qt != xno; then
792 dnl enable dbus support
793 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
794 if test x$bitcoin_enable_qt_dbus != xno; then
795 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
797 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
799 dnl enable qr support
800 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
801 if test x$have_qrencode = xno; then
802 if test x$use_qr = xyes; then
803 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
807 if test x$use_qr != xno; then
809 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
816 if test x$XGETTEXT = x; then
817 AC_MSG_WARN("xgettext is required to update qt translations")
820 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
821 if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
829 AC_MSG_CHECKING([whether to build test_bitcoin])
830 if test x$use_tests = xyes; then
837 AC_MSG_CHECKING([whether to reduce exports])
838 if test x$use_reduce_exports = xyes; then
844 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
845 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
848 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
849 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
850 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
851 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
852 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
853 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
854 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
855 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
856 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
857 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
858 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
859 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
861 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
862 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
863 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
864 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
865 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
866 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
867 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
868 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
869 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
870 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
871 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
872 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
875 AC_SUBST(LIBTOOL_APP_LDFLAGS)
880 AC_SUBST(LEVELDB_TARGET_FLAGS)
883 AC_SUBST(BUILD_TEST_QT)
884 AC_SUBST(MINIUPNPC_CPPFLAGS)
885 AC_SUBST(MINIUPNPC_LIBS)
886 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
887 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
888 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
890 dnl boost's m4 checks do something really nasty: they export these vars. As a
891 dnl result, they leak into secp256k1's configure and crazy things happen.
892 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
893 CPPFLAGS_TEMP="$CPPFLAGS"
895 CPPFLAGS="$CPPFLAGS_TEMP"
897 LDFLAGS_TEMP="$LDFLAGS"
899 LDFLAGS="$LDFLAGS_TEMP"
905 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
906 unset PKG_CONFIG_PATH
907 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
909 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
910 unset PKG_CONFIG_LIBDIR
911 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
913 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
914 AC_CONFIG_SUBDIRS([src/secp256k1])
918 dnl Taken from https://wiki.debian.org/RpathIssue
921 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
922 sed < libtool > libtool-2 \
923 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'