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, 2)
6 define(_CLIENT_VERSION_BUILD, 0)
7 define(_CLIENT_VERSION_ZCASH, 3)
8 define(_CLIENT_VERSION_ZCASH_FULL, z$1)
9 define(_CLIENT_VERSION_IS_RELEASE, true)
10 define(_COPYRIGHT_YEAR, 2015)
11 AC_INIT([Zcash],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION._CLIENT_VERSION_ZCASH_FULL(_CLIENT_VERSION_ZCASH)],[https://github.com/zcash/zcash/issues],[zcash])
12 AC_CONFIG_SRCDIR([src/main.cpp])
13 AC_CONFIG_HEADERS([src/config/bitcoin-config.h])
14 AC_CONFIG_AUX_DIR([build-aux])
15 AC_CONFIG_MACRO_DIR([build-aux/m4])
19 AH_TOP([#ifndef BITCOIN_CONFIG_H])
20 AH_TOP([#define BITCOIN_CONFIG_H])
21 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
23 dnl faketime breaks configure and is only needed for make. Disable it here.
26 dnl Automake init set-up and checks
27 AM_INIT_AUTOMAKE([no-define subdir-objects foreign])
29 dnl faketime messes with timestamps and causes configure to be re-run.
30 dnl --disable-maintainer-mode can be used to bypass this.
31 AM_MAINTAINER_MODE([enable])
33 dnl make the compilation flags quiet unless V=1 is used
34 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
36 dnl Compiler checks (here before libtool).
37 if test "x${CXXFLAGS+set}" = "xset"; then
38 CXXFLAGS_overridden=yes
40 CXXFLAGS_overridden=no
43 # Zcash requries C++11 compatibility; set it early:
44 CXXFLAGS="-std=c++11 $CXXFLAGS"
47 m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
49 dnl By default, libtool for mingw refuses to link static libs into a dll for
50 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
51 dnl we have those under control, re-enable that functionality.
54 lt_cv_deplibs_check_method="pass_all"
57 dnl Libtool init checks.
60 dnl Check/return PATH for base programs.
62 AC_PATH_TOOL(RANLIB, ranlib)
63 AC_PATH_TOOL(STRIP, strip)
64 AC_PATH_TOOL(GCOV, gcov)
65 AC_PATH_PROG(LCOV, lcov)
66 AC_PATH_PROG(JAVA, java)
67 AC_PATH_PROG(GENHTML, genhtml)
68 AC_PATH_PROG([GIT], [git])
69 AC_PATH_PROG(CCACHE,ccache)
70 AC_PATH_PROG(XGETTEXT,xgettext)
71 AC_PATH_PROG(HEXDUMP,hexdump)
77 AC_ARG_ENABLE([wallet],
78 [AS_HELP_STRING([--enable-wallet],
79 [enable wallet (default is yes)])],
80 [enable_wallet=$enableval],
83 AC_ARG_WITH([miniupnpc],
84 [AS_HELP_STRING([--with-miniupnpc],
85 [enable UPNP (default is yes if libminiupnpc is found)])],
89 AC_ARG_ENABLE([upnp-default],
90 [AS_HELP_STRING([--enable-upnp-default],
91 [if UPNP is enabled, turn it on at startup (default is no)])],
92 [use_upnp_default=$enableval],
93 [use_upnp_default=no])
96 AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
97 [use_tests=$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_WITH([qrencode],
111 [AS_HELP_STRING([--with-qrencode],
112 [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
116 AC_ARG_ENABLE([hardening],
117 [AS_HELP_STRING([--enable-hardening],
118 [attempt to harden the resulting executables (default is yes)])],
119 [use_hardening=$enableval],
122 AC_ARG_ENABLE([reduce-exports],
123 [AS_HELP_STRING([--enable-reduce-exports],
124 [attempt to reduce exported symbols in the resulting executables (default is no)])],
125 [use_reduce_exports=$enableval],
126 [use_reduce_exports=no])
128 AC_ARG_ENABLE([ccache],
129 [AS_HELP_STRING([--enable-ccache],
130 [use ccache for building (default is yes if ccache is found)])],
131 [use_ccache=$enableval],
134 AC_ARG_ENABLE([lcov],
135 [AS_HELP_STRING([--enable-lcov],
136 [enable lcov testing (default is no)])],
140 AC_ARG_ENABLE([glibc-back-compat],
141 [AS_HELP_STRING([--enable-glibc-back-compat],
142 [enable backwards compatibility with glibc])],
143 [use_glibc_compat=$enableval],
144 [use_glibc_compat=no])
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 if test "x$GCC" = xyes; then
157 CFLAGS="-g3 -O0 -DDEBUG"
160 if test "x$GXX" = xyes; then
161 CXXFLAGS="-g3 -O0 -DDEBUG"
165 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
166 ## compatibility with the legacy buildsystem.
168 if test "x$CXXFLAGS_overridden" = "xno"; then
169 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
171 CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
174 [AS_HELP_STRING([--with-utils],
175 [build bitcoin-cli bitcoin-tx (default=yes)])],
176 [build_bitcoin_utils=$withval],
177 [build_bitcoin_utils=yes])
180 [AS_HELP_STRING([--with-libs],
181 [build libraries (default=yes)])],
182 [build_bitcoin_libs=$withval],
183 [build_bitcoin_libs=yes])
185 AC_ARG_WITH([daemon],
186 [AS_HELP_STRING([--with-daemon],
187 [build bitcoind daemon (default=yes)])],
188 [build_bitcoind=$withval],
189 [build_bitcoind=yes])
197 #pkgconfig does more harm than good with MinGW
201 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
202 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
203 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
204 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
205 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
206 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
207 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
208 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
209 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
210 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
211 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
212 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
213 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
214 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
215 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
216 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
217 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
218 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
219 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
221 # -static is interpreted by libtool, where it has a different meaning.
222 # In libtool-speak, it's -all-static.
223 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
225 AC_PATH_PROG([MAKENSIS], [makensis], none)
226 if test x$MAKENSIS = xnone; then
227 AC_MSG_WARN("makensis not found. Cannot create installer.")
230 AC_PATH_TOOL(WINDRES, windres, none)
231 if test x$WINDRES = xnone; then
232 AC_MSG_ERROR("windres not found")
235 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
236 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
237 if test "x$CXXFLAGS_overridden" = "xno"; then
238 CXXFLAGS="$CXXFLAGS -w"
241 i?86-*) WINDOWS_BITS=32 ;;
242 x86_64-*) WINDOWS_BITS=64 ;;
243 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
245 AC_SUBST(WINDOWS_BITS)
247 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
248 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
249 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
250 dnl also overridden to prevent their insertion later.
251 dnl This should only affect dll's.
252 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
258 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
259 if test x$cross_compiling != xyes; then
261 AC_CHECK_PROG([PORT],port, port)
262 if test x$PORT = xport; then
263 dnl add default macports paths
264 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
265 LIBS="$LIBS -L/opt/local/lib"
266 if test -d /opt/local/include/db48; then
267 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48"
268 LIBS="$LIBS -L/opt/local/lib/db48"
272 AC_CHECK_PROG([BREW],brew, brew)
273 if test x$BREW = xbrew; then
274 dnl These Homebrew packages may be keg-only, meaning that they won't be found
275 dnl in expected paths because they may conflict with system files. Ask
276 dnl Homebrew where each one is located, then adjust paths accordingly.
277 dnl It's safe to add these paths even if the functionality is disabled by
278 dnl the user (--without-wallet or --without-gui for example).
280 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
281 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
282 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
283 if test x$openssl_prefix != x; then
284 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
285 export PKG_CONFIG_PATH
287 if test x$bdb_prefix != x; then
288 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
289 LIBS="$LIBS -L$bdb_prefix/lib"
291 if test x$qt5_prefix != x; then
292 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
293 export PKG_CONFIG_PATH
302 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
303 AC_PATH_TOOL([OTOOL], [otool], otool)
304 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
306 dnl libtool will try to strip the static lib, which is a problem for
307 dnl cross-builds because strip attempts to call a hard-coded ld,
308 dnl which may not exist in the path. Stripping the .a is not
309 dnl necessary, so just disable it.
315 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
316 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
325 if test x$use_comparison_tool != xno; then
326 if test x$JAVA = x; then
327 AC_MSG_ERROR("comparison tool set but java not found")
329 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
332 if test x$use_comparison_tool_reorg_tests != xno; then
333 if test x$use_comparison_tool = x; then
334 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
336 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
338 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
341 if test x$use_lcov = xyes; then
342 if test x$LCOV = x; then
343 AC_MSG_ERROR("lcov testing requested but lcov not found")
345 if test x$GCOV = x; then
346 AC_MSG_ERROR("lcov testing requested but gcov not found")
348 if test x$JAVA = x; then
349 AC_MSG_ERROR("lcov testing requested but java not found")
351 if test x$GENHTML = x; then
352 AC_MSG_ERROR("lcov testing requested but genhtml not found")
354 if test x$use_comparison_tool = x; then
355 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
357 LCOV="$LCOV --gcov-tool=$GCOV"
358 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
359 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
362 dnl Check for endianness
365 dnl Check for pthread compile/link requirements
368 # The following macro will add the necessary defines to bitcoin-config.h, but
369 # they also need to be passed down to any subprojects. Pull the results out of
370 # the cache and add them to CPPFLAGS.
372 # detect POSIX or GNU variant of strerror_r
375 if test x$ac_cv_sys_file_offset_bits != x &&
376 test x$ac_cv_sys_file_offset_bits != xno &&
377 test x$ac_cv_sys_file_offset_bits != xunknown; then
378 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
381 if test x$ac_cv_sys_large_files != x &&
382 test x$ac_cv_sys_large_files != xno &&
383 test x$ac_cv_sys_large_files != xunknown; then
384 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
387 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
389 AX_GCC_FUNC_ATTRIBUTE([visibility])
390 AX_GCC_FUNC_ATTRIBUTE([dllexport])
391 AX_GCC_FUNC_ATTRIBUTE([dllimport])
393 if test x$use_glibc_compat != xno; then
395 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
396 # See which one is present here.
397 AC_MSG_CHECKING(__fdelt_chk type)
398 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
399 #undef _FORTIFY_SOURCE
401 #define _FORTIFY_SOURCE 2
402 #include <sys/select.h>
403 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
404 [ fdelt_type="long unsigned int"],
405 [ fdelt_type="long int"])
406 AC_MSG_RESULT($fdelt_type)
407 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
411 if test x$use_hardening != xno; then
412 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"])
413 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"])
415 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
416 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
417 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
419 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
422 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"])
423 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"])
424 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"])
425 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"])
427 if test x$TARGET_OS != xwindows; then
428 # All windows code is PIC, forcing it on just adds useless compile warnings
429 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"])
430 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"])
435 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
439 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
440 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
441 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
442 OBJCXXFLAGS="$CXXFLAGS"
445 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
446 if test x$TARGET_OS = xdarwin; then
447 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
450 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])
451 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
452 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
454 AC_CHECK_DECLS([strnlen])
456 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
459 #elif HAVE_SYS_ENDIAN_H
460 #include <sys/endian.h>
463 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
465 #include <byteswap.h>
468 dnl Check for MSG_NOSIGNAL
469 AC_MSG_CHECKING(for MSG_NOSIGNAL)
470 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
471 [[ int f = MSG_NOSIGNAL; ]])],
472 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
476 AC_SEARCH_LIBS([clock_gettime],[rt])
478 AC_MSG_CHECKING([for visibility attribute])
479 AC_LINK_IFELSE([AC_LANG_SOURCE([
480 int foo_def( void ) __attribute__((visibility("default")));
484 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
489 if test x$use_reduce_exports = xyes; then
490 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
495 if test x$use_reduce_exports = xyes; then
496 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
497 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
503 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
504 AC_SUBST(LEVELDB_CPPFLAGS)
508 if test x$enable_wallet != xno; then
509 dnl Check for libdb_cxx only if wallet enabled
513 dnl Check for libminiupnpc (optional)
514 if test x$use_upnp != xno; then
516 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
517 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
524 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
525 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
527 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
533 if test x$use_boost = xyes; then
535 dnl Check for boost libs
539 AX_BOOST_PROGRAM_OPTIONS
544 if test x$use_reduce_exports = xyes; then
545 AC_MSG_CHECKING([for working boost reduced exports])
546 TEMP_CPPFLAGS="$CPPFLAGS"
547 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
548 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
549 @%:@include <boost/version.hpp>
551 #if BOOST_VERSION >= 104900
552 // Everything is okay
554 # error Boost version is too old
559 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
561 CPPFLAGS="$TEMP_CPPFLAGS"
565 if test x$use_reduce_exports = xyes; then
566 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
567 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
570 if test x$use_tests = xyes; then
572 if test x$HEXDUMP = x; then
573 AC_MSG_ERROR(hexdump is required for tests)
577 if test x$use_boost = xyes; then
579 AX_BOOST_UNIT_TEST_FRAMEWORK
581 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
582 AC_MSG_CHECKING([for dynamic linked boost test])
584 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
585 TEMP_CPPFLAGS="$CPPFLAGS"
586 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
587 AC_LINK_IFELSE([AC_LANG_SOURCE([
588 #define BOOST_TEST_DYN_LINK
589 #define BOOST_TEST_MAIN
590 #include <boost/test/unit_test.hpp>
594 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
597 CPPFLAGS="$TEMP_CPPFLAGS"
602 if test x$use_boost = xyes; then
604 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
606 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
607 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
608 dnl a working version is available, else fall back to sleep. sleep was removed
610 dnl If neither is available, abort.
612 LIBS="$BOOST_LIBS $LIBS"
613 TEMP_CPPFLAGS="$CPPFLAGS"
614 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
615 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
616 #include <boost/thread/thread.hpp>
617 #include <boost/version.hpp>
619 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
620 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
626 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
629 CPPFLAGS="$TEMP_CPPFLAGS"
631 if test x$boost_sleep != xyes; then
633 LIBS="$BOOST_LIBS $LIBS"
634 TEMP_CPPFLAGS="$CPPFLAGS"
635 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
636 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
637 #include <boost/version.hpp>
638 #include <boost/thread.hpp>
639 #include <boost/date_time/posix_time/posix_time_types.hpp>
641 #if BOOST_VERSION <= 105600
642 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
647 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
650 CPPFLAGS="$TEMP_CPPFLAGS"
653 if test x$boost_sleep != xyes; then
654 AC_MSG_ERROR(No working boost sleep implementation found.)
659 if test x$use_pkgconfig = xyes; then
661 if test x"$PKG_CONFIG" = "x"; then
662 AC_MSG_ERROR(pkg-config not found.)
669 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
670 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
671 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
672 if test x$use_qr != xno; then
673 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
679 echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++, libgmp'
681 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
682 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
684 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
685 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
687 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
688 if test x$use_qr != xno; then
689 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
690 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
694 # These packages don't provide pkgconfig config files across all
695 # platforms, so we use older autoconf detection mechanisms:
696 AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing))
697 AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)])
699 AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing))
700 AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)])
702 # libsnark header layout is broken unless cpp's -I is passed with the
703 # libsnark directory, so for now we use this hideous workaround:
704 echo 'Hunting for libsnark include directory...'
705 [LIBSNARK_INCDIR="$(echo "$CPPFLAGS" | sed 's,^.*-I\([^ ]*/include\).*$,\1/libsnark,')"]
706 if test -d "$LIBSNARK_INCDIR"; then
707 echo "Found libsnark include directory: $LIBSNARK_INCDIR"
709 AC_MSG_ERROR(libsnark include directory not found)
712 CPPFLAGS="-I$LIBSNARK_INCDIR $CPPFLAGS"
714 # Now check for libsnark compilability using traditional autoconf tests:
715 AC_CHECK_HEADER([libsnark/gadgetlib1/gadget.hpp],,AC_MSG_ERROR(libsnark headers missing))
716 AC_CHECK_LIB([snark],[main],LIBSNARK_LIBS=-lsnark, [AC_MSG_ERROR(libsnark missing)], [-lgmpxx])
718 LIBZCASH_LIBS="-lsnark -lgmp -lgmpxx -lboost_system-mt -lcrypto -lsodium -fopenmp"
720 AC_CHECK_LIB([crypto],[RAND_egd],[],[
721 AC_ARG_WITH([libressl],
722 [AS_HELP_STRING([--with-libressl],[Build with system LibreSSL (default is no; DANGEROUS; NOT SUPPORTED)])],
723 [AC_MSG_WARN([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])],
724 [AC_MSG_ERROR([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])]
728 CFLAGS_TEMP="$CFLAGS"
730 CFLAGS="$CFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
731 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS $GMP_LIBS $GMPXX_LIBS"
732 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
734 AC_MSG_CHECKING(for a supported OpenSSL version)
735 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
736 #include <openssl/rand.h>
738 [[RAND_egd(NULL);]])],
739 [AC_MSG_RESULT(yes)],
741 AC_ARG_WITH([libressl],
742 [AS_HELP_STRING([--with-libressl],[Build with system LibreSSL (default is no; DANGEROUS; NOT SUPPORTED)])],
743 [AC_MSG_WARN([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])],
744 [AC_MSG_ERROR([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])]
748 CFLAGS="$CFLAGS_TEMP"
751 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
753 AC_MSG_CHECKING([whether to build bitcoind])
754 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
755 AC_MSG_RESULT($build_bitcoind)
757 AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
758 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
759 AC_MSG_RESULT($build_bitcoin_utils)
761 AC_MSG_CHECKING([whether to build libraries])
762 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
763 if test x$build_bitcoin_libs = xyes; then
764 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
765 AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
768 AC_MSG_RESULT($build_bitcoin_libs)
772 if test "x$use_ccache" != "xno"; then
773 AC_MSG_CHECKING(if ccache should be used)
774 if test x$CCACHE = x; then
775 if test "x$use_ccache" = "xyes"; then
776 AC_MSG_ERROR([ccache not found.]);
782 CC="$ac_cv_path_CCACHE $CC"
783 CXX="$ac_cv_path_CCACHE $CXX"
785 AC_MSG_RESULT($use_ccache)
787 if test "x$use_ccache" = "xyes"; then
788 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
792 AC_MSG_CHECKING([if wallet should be enabled])
793 if test x$enable_wallet != xno; then
795 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
801 dnl enable upnp support
802 AC_MSG_CHECKING([whether to build with support for UPnP])
803 if test x$have_miniupnpc = xno; then
804 if test x$use_upnp = xyes; then
805 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
809 if test x$use_upnp != xno; then
811 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
814 if test x$use_upnp_default != xno; then
818 AC_MSG_RESULT($use_upnp_default)
819 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
820 if test x$TARGET_OS = xwindows; then
821 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
828 dnl these are only used when qt is enabled
829 if test x$bitcoin_enable_qt != xno; then
831 dnl enable dbus support
832 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
833 if test x$bitcoin_enable_qt_dbus != xno; then
834 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
836 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
838 dnl enable qr support
839 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
840 if test x$have_qrencode = xno; then
841 if test x$use_qr = xyes; then
842 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
846 if test x$use_qr != xno; then
848 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
855 if test x$XGETTEXT = x; then
856 AC_MSG_WARN("xgettext is required to update qt translations")
859 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
860 if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then
868 AC_MSG_CHECKING([whether to build test_bitcoin])
869 if test x$use_tests = xyes; then
876 AC_MSG_CHECKING([whether to reduce exports])
877 if test x$use_reduce_exports = xyes; then
883 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
884 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
887 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
888 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
889 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
890 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
891 AM_CONDITIONAL([ENABLE_TESTS],[test x$use_tests = xyes])
892 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
893 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$use_tests$bitcoin_enable_qt_test = xyesyes])
894 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
895 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
896 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
897 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
898 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
900 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
901 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
902 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
903 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
904 AC_DEFINE(CLIENT_VERSION_ZCASH, _CLIENT_VERSION_ZCASH, [Zcash revision])
905 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
906 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
907 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
908 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
909 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
910 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
911 AC_SUBST(CLIENT_VERSION_ZCASH, _CLIENT_VERSION_ZCASH)
912 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
913 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
916 AC_SUBST(LIBTOOL_APP_LDFLAGS)
921 AC_SUBST(LEVELDB_TARGET_FLAGS)
924 AC_SUBST(BUILD_TEST_QT)
925 AC_SUBST(MINIUPNPC_CPPFLAGS)
926 AC_SUBST(MINIUPNPC_LIBS)
929 AC_SUBST(LIBSNARK_LIBS)
930 AC_SUBST(LIBZCASH_LIBS)
931 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
932 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
933 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
935 dnl boost's m4 checks do something really nasty: they export these vars. As a
936 dnl result, they leak into secp256k1's configure and crazy things happen.
937 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
938 CPPFLAGS_TEMP="$CPPFLAGS"
940 CPPFLAGS="$CPPFLAGS_TEMP"
942 LDFLAGS_TEMP="$LDFLAGS"
944 LDFLAGS="$LDFLAGS_TEMP"
950 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
951 unset PKG_CONFIG_PATH
952 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
954 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
955 unset PKG_CONFIG_LIBDIR
956 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
958 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
959 AC_CONFIG_SUBDIRS([src/secp256k1])
963 dnl Taken from https://wiki.debian.org/RpathIssue
966 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
967 sed < libtool > libtool-2 \
968 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'