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])
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 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
151 if test "x$GCC" = xyes; then
152 CFLAGS="$CFLAGS -g3 -O0"
155 if test "x$GXX" = xyes; then
156 CXXFLAGS="$CXXFLAGS -g3 -O0"
160 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
161 ## compatibility with the legacy buildsystem.
163 if test "x$CXXFLAGS_overridden" = "xno"; then
164 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter"
166 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
169 [AS_HELP_STRING([--with-utils],
170 [build bitcoin-cli bitcoin-tx (default=yes)])],
171 [build_bitcoin_utils=$withval],
172 [build_bitcoin_utils=yes])
175 [AS_HELP_STRING([--with-libs],
176 [build libraries (default=yes)])],
177 [build_bitcoin_libs=$withval],
178 [build_bitcoin_libs=yes])
180 AC_ARG_WITH([daemon],
181 [AS_HELP_STRING([--with-daemon],
182 [build bitcoind daemon (default=yes)])],
183 [build_bitcoind=$withval],
184 [build_bitcoind=yes])
192 #pkgconfig does more harm than good with MinGW
196 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
197 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
198 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
199 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
200 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
201 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
202 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
203 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
204 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
205 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
206 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
207 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
208 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
209 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
210 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
211 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
212 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
213 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
214 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
216 # -static is interpreted by libtool, where it has a different meaning.
217 # In libtool-speak, it's -all-static.
218 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
220 AC_PATH_PROG([MAKENSIS], [makensis], none)
221 if test x$MAKENSIS = xnone; then
222 AC_MSG_WARN("makensis not found. Cannot create installer.")
225 AC_PATH_TOOL(WINDRES, windres, none)
226 if test x$WINDRES = xnone; then
227 AC_MSG_ERROR("windres not found")
230 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
231 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
232 if test "x$CXXFLAGS_overridden" = "xno"; then
233 CXXFLAGS="$CXXFLAGS -w"
236 i?86-*) WINDOWS_BITS=32 ;;
237 x86_64-*) WINDOWS_BITS=64 ;;
238 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
240 AC_SUBST(WINDOWS_BITS)
242 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
243 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
244 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
245 dnl also overridden to prevent their insertion later.
246 dnl This should only affect dll's.
247 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
253 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
254 if test x$cross_compiling != xyes; then
256 AC_CHECK_PROG([PORT],port, port)
257 if test x$PORT = xport; then
258 dnl add default macports paths
259 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
260 LIBS="$LIBS -L/opt/local/lib"
261 if test -d /opt/local/include/db48; then
262 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
263 LIBS="$LIBS -L/opt/local/lib/db48"
267 AC_CHECK_PROG([BREW],brew, brew)
268 if test x$BREW = xbrew; then
269 dnl These Homebrew packages may be keg-only, meaning that they won't be found
270 dnl in expected paths because they may conflict with system files. Ask
271 dnl Homebrew where each one is located, then adjust paths accordingly.
272 dnl It's safe to add these paths even if the functionality is disabled by
273 dnl the user (--without-wallet or --without-gui for example).
275 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
276 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
277 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
278 if test x$openssl_prefix != x; then
279 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
280 export PKG_CONFIG_PATH
282 if test x$bdb_prefix != x; then
283 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
284 LIBS="$LIBS -L$bdb_prefix/lib"
286 if test x$qt5_prefix != x; then
287 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
288 export PKG_CONFIG_PATH
297 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
298 AC_PATH_TOOL([OTOOL], [otool], otool)
299 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
301 dnl libtool will try to strip the static lib, which is a problem for
302 dnl cross-builds because strip attempts to call a hard-coded ld,
303 dnl which may not exist in the path. Stripping the .a is not
304 dnl necessary, so just disable it.
310 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
311 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
320 if test x$use_comparison_tool != xno; then
321 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
324 if test x$use_comparison_tool_reorg_tests != xno; then
325 if test x$use_comparison_tool = x; then
326 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
328 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
330 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
333 if test x$use_lcov = xyes; then
334 if test x$LCOV = x; then
335 AC_MSG_ERROR("lcov testing requested but lcov not found")
337 if test x$GCOV = x; then
338 AC_MSG_ERROR("lcov testing requested but gcov not found")
340 if test x$JAVA = x; then
341 AC_MSG_ERROR("lcov testing requested but java not found")
343 if test x$GENHTML = x; then
344 AC_MSG_ERROR("lcov testing requested but genhtml not found")
346 if test x$use_comparison_tool = x; then
347 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
349 LCOV="$LCOV --gcov-tool=$GCOV"
350 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
351 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
354 dnl Check for endianness
357 dnl Check for pthread compile/link requirements
360 # The following macro will add the necessary defines to bitcoin-config.h, but
361 # they also need to be passed down to any subprojects. Pull the results out of
362 # the cache and add them to CPPFLAGS.
364 # detect POSIX or GNU variant of strerror_r
367 if test x$ac_cv_sys_file_offset_bits != x &&
368 test x$ac_cv_sys_file_offset_bits != xno &&
369 test x$ac_cv_sys_file_offset_bits != xunknown; then
370 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
373 if test x$ac_cv_sys_large_files != x &&
374 test x$ac_cv_sys_large_files != xno &&
375 test x$ac_cv_sys_large_files != xunknown; then
376 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
379 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
381 AX_GCC_FUNC_ATTRIBUTE([visibility])
382 AX_GCC_FUNC_ATTRIBUTE([dllexport])
383 AX_GCC_FUNC_ATTRIBUTE([dllimport])
385 if test x$use_glibc_compat != xno; then
387 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
388 # See which one is present here.
389 AC_MSG_CHECKING(__fdelt_chk type)
390 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
391 #undef _FORTIFY_SOURCE
393 #define _FORTIFY_SOURCE 2
394 #include <sys/select.h>
395 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
396 [ fdelt_type="long unsigned int"],
397 [ fdelt_type="long int"])
398 AC_MSG_RESULT($fdelt_type)
399 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
403 if test x$use_hardening != xno; then
404 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
405 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
407 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
408 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
409 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
411 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
414 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
415 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
416 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
417 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
419 if test x$TARGET_OS != xwindows; then
420 # All windows code is PIC, forcing it on just adds useless compile warnings
421 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
422 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
427 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
431 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
432 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
433 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
434 OBJCXXFLAGS="$CXXFLAGS"
437 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
438 if test x$TARGET_OS = xdarwin; then
439 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
442 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])
443 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
444 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
446 AC_CHECK_DECLS([strnlen])
448 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
451 #elif HAVE_SYS_ENDIAN_H
452 #include <sys/endian.h>
455 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
457 #include <byteswap.h>
460 dnl Check for MSG_NOSIGNAL
461 AC_MSG_CHECKING(for MSG_NOSIGNAL)
462 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
463 [[ int f = MSG_NOSIGNAL; ]])],
464 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
468 AC_SEARCH_LIBS([clock_gettime],[rt])
470 AC_MSG_CHECKING([for visibility attribute])
471 AC_LINK_IFELSE([AC_LANG_SOURCE([
472 int foo_def( void ) __attribute__((visibility("default")));
476 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
481 if test x$use_reduce_exports = xyes; then
482 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
487 if test x$use_reduce_exports = xyes; then
488 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
489 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
495 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
496 AC_SUBST(LEVELDB_CPPFLAGS)
500 if test x$enable_wallet != xno; then
501 dnl Check for libdb_cxx only if wallet enabled
505 dnl Check for libminiupnpc (optional)
506 if test x$use_upnp != xno; then
508 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
509 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
516 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
517 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
519 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
525 if test x$use_boost = xyes; then
527 dnl Check for boost libs
531 AX_BOOST_PROGRAM_OPTIONS
536 if test x$use_reduce_exports = xyes; then
537 AC_MSG_CHECKING([for working boost reduced exports])
538 TEMP_CPPFLAGS="$CPPFLAGS"
539 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
540 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
541 @%:@include <boost/version.hpp>
543 #if BOOST_VERSION >= 104900
544 // Everything is okay
546 # error Boost version is too old
551 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
553 CPPFLAGS="$TEMP_CPPFLAGS"
557 if test x$use_reduce_exports = xyes; then
558 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
559 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
562 if test x$use_tests = xyes; then
564 if test x$HEXDUMP = x; then
565 AC_MSG_ERROR(hexdump is required for tests)
569 if test x$use_boost = xyes; then
571 AX_BOOST_UNIT_TEST_FRAMEWORK
573 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
574 AC_MSG_CHECKING([for dynamic linked boost test])
576 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
577 TEMP_CPPFLAGS="$CPPFLAGS"
578 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
579 AC_LINK_IFELSE([AC_LANG_SOURCE([
580 #define BOOST_TEST_DYN_LINK
581 #define BOOST_TEST_MAIN
582 #include <boost/test/unit_test.hpp>
586 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
589 CPPFLAGS="$TEMP_CPPFLAGS"
594 if test x$use_boost = xyes; then
596 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
598 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
599 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
600 dnl a working version is available, else fall back to sleep. sleep was removed
602 dnl If neither is available, abort.
604 LIBS="$BOOST_LIBS $LIBS"
605 TEMP_CPPFLAGS="$CPPFLAGS"
606 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
607 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
608 #include <boost/thread/thread.hpp>
609 #include <boost/version.hpp>
611 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
612 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
618 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
621 CPPFLAGS="$TEMP_CPPFLAGS"
623 if test x$boost_sleep != xyes; then
625 LIBS="$BOOST_LIBS $LIBS"
626 TEMP_CPPFLAGS="$CPPFLAGS"
627 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
628 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
629 #include <boost/version.hpp>
630 #include <boost/thread.hpp>
631 #include <boost/date_time/posix_time/posix_time_types.hpp>
633 #if BOOST_VERSION <= 105600
634 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
639 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
642 CPPFLAGS="$TEMP_CPPFLAGS"
645 if test x$boost_sleep != xyes; then
646 AC_MSG_ERROR(No working boost sleep implementation found.)
651 if test x$use_pkgconfig = xyes; then
653 if test x"$PKG_CONFIG" = "x"; then
654 AC_MSG_ERROR(pkg-config not found.)
661 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
662 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
663 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
664 if test x$use_qr != xno; then
665 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
667 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
668 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
669 if test x$TARGET_OS != xwindows; then
670 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
676 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
677 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
679 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
680 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
682 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
683 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
684 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
685 if test x$TARGET_OS != xwindows; then
686 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
690 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
691 if test x$use_qr != xno; then
692 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
693 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
697 CFLAGS_TEMP="$CFLAGS"
699 CFLAGS="$CFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
700 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS"
701 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
703 AC_MSG_CHECKING(for a supported OpenSSL version)
704 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
705 #include <openssl/rand.h>
707 [[RAND_egd(NULL);]])],
708 [AC_MSG_RESULT(yes)],
710 AC_ARG_WITH([libressl],
711 [AS_HELP_STRING([--with-libressl],[Build with system LibreSSL (default is no; DANGEROUS; NOT SUPPORTED)])],
712 [AC_MSG_WARN([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])],
713 [AC_MSG_ERROR([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])]
717 CFLAGS="$CFLAGS_TEMP"
720 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
722 AC_MSG_CHECKING([whether to build bitcoind])
723 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
724 AC_MSG_RESULT($build_bitcoind)
726 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
727 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
728 AC_MSG_RESULT($build_bitcoin_utils)
730 AC_MSG_CHECKING([whether to build libraries])
731 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
732 if test x$build_bitcoin_libs = xyes; then
733 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
734 AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
736 AC_MSG_RESULT($build_bitcoin_libs)
740 if test "x$use_ccache" != "xno"; then
741 AC_MSG_CHECKING(if ccache should be used)
742 if test x$CCACHE = x; then
743 if test "x$use_ccache" = "xyes"; then
744 AC_MSG_ERROR([ccache not found.]);
750 CC="$ac_cv_path_CCACHE $CC"
751 CXX="$ac_cv_path_CCACHE $CXX"
753 AC_MSG_RESULT($use_ccache)
755 if test "x$use_ccache" = "xyes"; then
756 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
760 AC_MSG_CHECKING([if wallet should be enabled])
761 if test x$enable_wallet != xno; then
763 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
769 dnl enable upnp support
770 AC_MSG_CHECKING([whether to build with support for UPnP])
771 if test x$have_miniupnpc = xno; then
772 if test x$use_upnp = xyes; then
773 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
777 if test x$use_upnp != xno; then
779 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
782 if test x$use_upnp_default != xno; then
786 AC_MSG_RESULT($use_upnp_default)
787 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
788 if test x$TARGET_OS = xwindows; then
789 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
796 dnl these are only used when qt is enabled
797 if test x$bitcoin_enable_qt != xno; then
799 dnl enable dbus support
800 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
801 if test x$bitcoin_enable_qt_dbus != xno; then
802 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
804 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
806 dnl enable qr support
807 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
808 if test x$have_qrencode = xno; then
809 if test x$use_qr = xyes; then
810 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
814 if test x$use_qr != xno; then
816 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
823 if test x$XGETTEXT = x; then
824 AC_MSG_WARN("xgettext is required to update qt translations")
827 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
828 if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
836 AC_MSG_CHECKING([whether to build test_bitcoin])
837 if test x$use_tests = xyes; then
844 AC_MSG_CHECKING([whether to reduce exports])
845 if test x$use_reduce_exports = xyes; then
851 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
852 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
855 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
856 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
857 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
858 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
859 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
860 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
861 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
862 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
863 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
864 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
865 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
866 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
868 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
869 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
870 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
871 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
872 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
873 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
874 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
875 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
876 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
877 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
878 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
879 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
882 AC_SUBST(LIBTOOL_APP_LDFLAGS)
887 AC_SUBST(LEVELDB_TARGET_FLAGS)
890 AC_SUBST(BUILD_TEST_QT)
891 AC_SUBST(MINIUPNPC_CPPFLAGS)
892 AC_SUBST(MINIUPNPC_LIBS)
893 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
894 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
895 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
897 dnl boost's m4 checks do something really nasty: they export these vars. As a
898 dnl result, they leak into secp256k1's configure and crazy things happen.
899 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
900 CPPFLAGS_TEMP="$CPPFLAGS"
902 CPPFLAGS="$CPPFLAGS_TEMP"
904 LDFLAGS_TEMP="$LDFLAGS"
906 LDFLAGS="$LDFLAGS_TEMP"
912 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
913 unset PKG_CONFIG_PATH
914 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
916 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
917 unset PKG_CONFIG_LIBDIR
918 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
920 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
921 AC_CONFIG_SUBDIRS([src/secp256k1])
925 dnl Taken from https://wiki.debian.org/RpathIssue
928 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
929 sed < libtool > libtool-2 \
930 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'