1 dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
3 define(_CLIENT_VERSION_MAJOR, 1)
4 define(_CLIENT_VERSION_MINOR, 0)
5 define(_CLIENT_VERSION_REVISION, 7)
6 define(_CLIENT_VERSION_BUILD, 51)
7 define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50)))
8 define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1)))
9 define(_CLIENT_VERSION_IS_RELEASE, true)
10 define(_COPYRIGHT_YEAR, 2017)
11 AC_INIT([Zcash],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_SUFFIX(_ZC_BUILD_VAL)],[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)
72 AC_PATH_TOOL(READELF,readelf)
73 AC_PATH_TOOL(CPPFILT,c++filt)
79 AC_ARG_ENABLE([wallet],
80 [AS_HELP_STRING([--enable-wallet],
81 [enable wallet (default is yes)])],
82 [enable_wallet=$enableval],
85 AC_ARG_ENABLE([mining],
86 [AS_HELP_STRING([--enable-mining],
87 [enable mining (default is yes)])],
88 [enable_mining=$enableval],
92 [AS_HELP_STRING([--enable-rust],
93 [enable rust (default is yes)])],
94 [enable_rust=$enableval],
97 AC_ARG_WITH([miniupnpc],
98 [AS_HELP_STRING([--with-miniupnpc],
99 [enable UPNP (default is yes if libminiupnpc is found)])],
103 AC_ARG_ENABLE([upnp-default],
104 [AS_HELP_STRING([--enable-upnp-default],
105 [if UPNP is enabled, turn it on at startup (default is no)])],
106 [use_upnp_default=$enableval],
107 [use_upnp_default=no])
110 AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
111 [use_tests=$enableval],
114 AC_ARG_WITH([comparison-tool],
115 AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
116 [use_comparison_tool=$withval],
117 [use_comparison_tool=no])
119 AC_ARG_ENABLE([comparison-tool-reorg-tests],
120 AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
121 [use_comparison_tool_reorg_tests=$enableval],
122 [use_comparison_tool_reorg_tests=no])
124 AC_ARG_ENABLE([hardening],
125 [AS_HELP_STRING([--enable-hardening],
126 [attempt to harden the resulting executables (default is yes)])],
127 [use_hardening=$enableval],
130 AC_ARG_ENABLE([reduce-exports],
131 [AS_HELP_STRING([--enable-reduce-exports],
132 [attempt to reduce exported symbols in the resulting executables (default is no)])],
133 [use_reduce_exports=$enableval],
134 [use_reduce_exports=no])
136 AC_ARG_ENABLE([ccache],
137 [AS_HELP_STRING([--enable-ccache],
138 [use ccache for building (default is yes if ccache is found)])],
139 [use_ccache=$enableval],
142 AC_ARG_ENABLE([lcov],
143 [AS_HELP_STRING([--enable-lcov],
144 [enable lcov testing (default is no)])],
148 AC_ARG_ENABLE([glibc-back-compat],
149 [AS_HELP_STRING([--enable-glibc-back-compat],
150 [enable backwards compatibility with glibc])],
151 [use_glibc_compat=$enableval],
152 [use_glibc_compat=no])
155 [AS_HELP_STRING([--disable-zmq],
156 [disable ZMQ notifications])],
157 [use_zmq=$enableval],
160 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
163 [AS_HELP_STRING([--disable-man],
164 [do not install man pages (default is to install)])],,
166 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
169 AC_ARG_ENABLE([debug],
170 [AS_HELP_STRING([--enable-debug],
171 [use debug compiler flags and macros (default is no)])],
172 [enable_debug=$enableval],
175 if test "x$enable_debug" = xyes; then
176 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
177 if test "x$GCC" = xyes; then
178 CFLAGS="$CFLAGS -g3 -O0"
181 if test "x$GXX" = xyes; then
182 CXXFLAGS="$CXXFLAGS -g3 -O0"
186 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
187 ## compatibility with the legacy buildsystem.
189 if test "x$CXXFLAGS_overridden" = "xno"; then
190 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
192 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
195 [AS_HELP_STRING([--with-utils],
196 [build zcash-cli zcash-tx (default=yes)])],
197 [build_bitcoin_utils=$withval],
198 [build_bitcoin_utils=yes])
201 [AS_HELP_STRING([--with-libs],
202 [build libraries (default=yes)])],
203 [build_bitcoin_libs=$withval],
204 [build_bitcoin_libs=yes])
206 AC_ARG_WITH([daemon],
207 [AS_HELP_STRING([--with-daemon],
208 [build bitcoind daemon (default=yes)])],
209 [build_bitcoind=$withval],
210 [build_bitcoind=yes])
218 #pkgconfig does more harm than good with MinGW
222 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
223 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
224 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
225 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
226 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
227 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
228 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
229 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
230 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
231 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
232 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
233 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
234 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
235 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
236 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
237 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
238 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
239 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
240 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
242 # -static is interpreted by libtool, where it has a different meaning.
243 # In libtool-speak, it's -all-static.
244 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
246 AC_PATH_PROG([MAKENSIS], [makensis], none)
247 if test x$MAKENSIS = xnone; then
248 AC_MSG_WARN("makensis not found. Cannot create installer.")
251 AC_PATH_TOOL(WINDRES, windres, none)
252 if test x$WINDRES = xnone; then
253 AC_MSG_ERROR("windres not found")
256 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
257 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
258 if test "x$CXXFLAGS_overridden" = "xno"; then
259 CXXFLAGS="$CXXFLAGS -w"
262 i?86-*) WINDOWS_BITS=32 ;;
263 x86_64-*) WINDOWS_BITS=64 ;;
264 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
266 AC_SUBST(WINDOWS_BITS)
268 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
269 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
270 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
271 dnl also overridden to prevent their insertion later.
272 dnl This should only affect dll's.
273 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
279 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
280 if test x$cross_compiling != xyes; then
282 AC_CHECK_PROG([PORT],port, port)
283 if test x$PORT = xport; then
284 dnl add default macports paths
285 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
286 LIBS="$LIBS -L/opt/local/lib"
287 if test -d /opt/local/include/db62; then
288 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db62"
289 LIBS="$LIBS -L/opt/local/lib/db62"
293 AC_CHECK_PROG([BREW],brew, brew)
294 if test x$BREW = xbrew; then
295 dnl These Homebrew packages may be keg-only, meaning that they won't be found
296 dnl in expected paths because they may conflict with system files. Ask
297 dnl Homebrew where each one is located, then adjust paths accordingly.
298 dnl It's safe to add these paths even if the functionality is disabled by
299 dnl the user (--without-wallet for example).
301 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
302 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
303 if test x$openssl_prefix != x; then
304 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
305 export PKG_CONFIG_PATH
307 if test x$bdb_prefix != x; then
308 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
309 LIBS="$LIBS -L$bdb_prefix/lib"
318 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
319 AC_PATH_TOOL([OTOOL], [otool], otool)
320 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
322 dnl libtool will try to strip the static lib, which is a problem for
323 dnl cross-builds because strip attempts to call a hard-coded ld,
324 dnl which may not exist in the path. Stripping the .a is not
325 dnl necessary, so just disable it.
331 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
332 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
341 if test x$use_comparison_tool != xno; then
342 if test x$JAVA = x; then
343 AC_MSG_ERROR("comparison tool set but java not found")
345 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
348 if test x$use_comparison_tool_reorg_tests != xno; then
349 if test x$use_comparison_tool = x; then
350 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
352 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
354 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
357 if test x$use_lcov = xyes; then
358 if test x$LCOV = x; then
359 AC_MSG_ERROR("lcov testing requested but lcov not found")
361 if test x$GCOV = x; then
362 AC_MSG_ERROR("lcov testing requested but gcov not found")
364 if test x$JAVA = x; then
365 AC_MSG_ERROR("lcov testing requested but java not found")
367 if test x$GENHTML = x; then
368 AC_MSG_ERROR("lcov testing requested but genhtml not found")
370 if test x$use_comparison_tool = x; then
371 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
373 LCOV="$LCOV --gcov-tool=$GCOV --rc lcov_branch_coverage=1"
374 GENHTML="$GENHTML --branch-coverage"
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 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
413 #in anyway for back-compat.
414 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
416 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
417 # See which one is present here.
418 AC_MSG_CHECKING(__fdelt_chk type)
419 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
420 #undef _FORTIFY_SOURCE
422 #define _FORTIFY_SOURCE 2
423 #include <sys/select.h>
424 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
425 [ fdelt_type="long unsigned int"],
426 [ fdelt_type="long int"])
427 AC_MSG_RESULT($fdelt_type)
428 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
430 AC_SEARCH_LIBS([clock_gettime],[rt])
433 if test x$use_hardening != xno; then
434 AX_CHECK_COMPILE_FLAG([-Wformat],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat"],[AC_MSG_ERROR(Cannot enable -Wformat)])
435 AX_CHECK_COMPILE_FLAG([-Wformat-security],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat-security"],[AC_MSG_ERROR(Cannot enable -Wformat-security)],[-Wformat])
436 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"],[AC_MSG_ERROR(Cannot enable -Wstack-protector)])
437 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"],[AC_MSG_ERROR(Cannot enable -fstack-protector-all)])
439 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
440 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
441 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
442 ],[AC_MSG_ERROR(Cannot enable -U_FORTIFY_SOURCE)])
443 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
444 ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)])
446 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
447 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
449 if test x$TARGET_OS != xwindows; then
450 # All windows code is PIC, forcing it on just adds useless compile warnings
451 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"],[AC_MSG_ERROR(Cannot enable -fPIE)])
452 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"],[AC_MSG_ERROR(Cannot enable -pie)])
454 # These are only available on Windows.
455 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"],[AC_MSG_ERROR(Cannot enable --dynamicbase)])
456 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"],[AC_MSG_ERROR(Cannot enable --nxcompat)])
461 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
465 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
466 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
467 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
468 OBJCXXFLAGS="$CXXFLAGS"
471 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
472 if test x$TARGET_OS = xdarwin; then
473 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
476 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])
477 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
478 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
480 AC_CHECK_DECLS([strnlen])
482 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
485 #elif HAVE_SYS_ENDIAN_H
486 #include <sys/endian.h>
489 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
491 #include <byteswap.h>
494 dnl Check for MSG_NOSIGNAL
495 AC_MSG_CHECKING(for MSG_NOSIGNAL)
496 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
497 [[ int f = MSG_NOSIGNAL; ]])],
498 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
502 AC_MSG_CHECKING([for visibility attribute])
503 AC_LINK_IFELSE([AC_LANG_SOURCE([
504 int foo_def( void ) __attribute__((visibility("default")));
508 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
513 if test x$use_reduce_exports = xyes; then
514 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
519 if test x$use_reduce_exports = xyes; then
520 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
521 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
527 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
528 AC_SUBST(LEVELDB_CPPFLAGS)
532 if test x$enable_wallet != xno; then
533 dnl Check for libdb_cxx only if wallet enabled
537 dnl Check for libminiupnpc (optional)
538 if test x$use_upnp != xno; then
540 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
541 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
546 if test x$build_bitcoin_utils$build_bitcoind$use_tests = xnonono; then
552 if test x$use_boost = xyes; then
554 dnl Check for boost libs
558 AX_BOOST_PROGRAM_OPTIONS
563 if test x$use_reduce_exports = xyes; then
564 AC_MSG_CHECKING([for working boost reduced exports])
565 TEMP_CPPFLAGS="$CPPFLAGS"
566 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
567 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
568 @%:@include <boost/version.hpp>
570 #if BOOST_VERSION >= 104900
571 // Everything is okay
573 # error Boost version is too old
578 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
580 CPPFLAGS="$TEMP_CPPFLAGS"
584 if test x$use_reduce_exports = xyes; then
585 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
586 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
589 if test x$use_tests = xyes; then
591 if test x$HEXDUMP = x; then
592 AC_MSG_ERROR(hexdump is required for tests)
596 if test x$use_boost = xyes; then
598 AX_BOOST_UNIT_TEST_FRAMEWORK
600 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
601 AC_MSG_CHECKING([for dynamic linked boost test])
603 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
604 TEMP_CPPFLAGS="$CPPFLAGS"
605 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
606 AC_LINK_IFELSE([AC_LANG_SOURCE([
607 #define BOOST_TEST_DYN_LINK
608 #define BOOST_TEST_MAIN
609 #include <boost/test/unit_test.hpp>
613 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
616 CPPFLAGS="$TEMP_CPPFLAGS"
621 if test x$use_boost = xyes; then
623 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
625 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
626 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
627 dnl a working version is available, else fall back to sleep. sleep was removed
629 dnl If neither is available, abort.
631 LIBS="$BOOST_LIBS $LIBS"
632 TEMP_CPPFLAGS="$CPPFLAGS"
633 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
634 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
635 #include <boost/thread/thread.hpp>
636 #include <boost/version.hpp>
638 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
639 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
645 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
648 CPPFLAGS="$TEMP_CPPFLAGS"
650 if test x$boost_sleep != xyes; then
652 LIBS="$BOOST_LIBS $LIBS"
653 TEMP_CPPFLAGS="$CPPFLAGS"
654 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
655 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
656 #include <boost/version.hpp>
657 #include <boost/thread.hpp>
658 #include <boost/date_time/posix_time/posix_time_types.hpp>
660 #if BOOST_VERSION <= 105600
661 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
666 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
669 CPPFLAGS="$TEMP_CPPFLAGS"
672 if test x$boost_sleep != xyes; then
673 AC_MSG_ERROR(No working boost sleep implementation found.)
678 if test x$use_pkgconfig = xyes; then
680 if test x"$PKG_CONFIG" = "x"; then
681 AC_MSG_ERROR(pkg-config not found.)
688 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
689 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
691 if test "x$use_zmq" = "xyes"; then
692 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
693 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
694 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
695 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
698 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
704 echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++, libgmp'
706 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
707 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
709 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
710 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
712 if test "x$use_zmq" = "xyes"; then
713 AC_CHECK_HEADER([zmq.h],
714 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
715 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
717 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
718 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
719 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
721 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
723 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
726 if test "x$use_zmq" = "xyes"; then
727 dnl Assume libzmq was built for static linking
730 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
736 # These packages don't provide pkgconfig config files across all
737 # platforms, so we use older autoconf detection mechanisms:
738 AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing))
739 AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)])
741 AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing))
742 AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)])
744 # libsnark header layout is broken unless cpp's -I is passed with the
745 # libsnark directory, so for now we use this hideous workaround:
746 echo 'Hunting for libsnark include directory...'
747 [LIBSNARK_INCDIR="$(echo "$CPPFLAGS" | sed 's,^.*-I\([^ ]*/include\).*$,\1/libsnark,')"]
748 if test -d "$LIBSNARK_INCDIR"; then
749 echo "Found libsnark include directory: $LIBSNARK_INCDIR"
751 AC_MSG_ERROR(libsnark include directory not found)
754 CPPFLAGS="-I$LIBSNARK_INCDIR $CPPFLAGS"
756 # Now check for libsnark compilability using traditional autoconf tests:
757 AC_CHECK_HEADER([libsnark/gadgetlib1/gadget.hpp],,AC_MSG_ERROR(libsnark headers missing))
758 AC_CHECK_LIB([snark],[main],LIBSNARK_LIBS=-lsnark, [AC_MSG_ERROR(libsnark missing)], [-lgmpxx])
761 if test x$enable_rust != xno; then
762 RUST_LIBS="-lrustzcash"
765 LIBZCASH_LIBS="-lsnark -lgmp -lgmpxx -lboost_system-mt -lcrypto -lsodium -fopenmp $RUST_LIBS"
767 CXXFLAGS_TEMP="$CXXFLAGS"
769 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
770 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS $GMP_LIBS $GMPXX_LIBS"
771 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
772 CXXFLAGS="$CXXFLAGS_TEMP"
775 AC_MSG_CHECKING([whether to build bitcoind])
776 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
777 AC_MSG_RESULT($build_bitcoind)
779 AC_MSG_CHECKING([whether to build utils (zcash-cli zcash-tx)])
780 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
781 AC_MSG_RESULT($build_bitcoin_utils)
783 AC_MSG_CHECKING([whether to build libraries])
784 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
785 if test x$build_bitcoin_libs = xyes; then
786 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
787 AC_CONFIG_FILES([libzcashconsensus.pc:libzcashconsensus.pc.in])
790 AC_MSG_RESULT($build_bitcoin_libs)
794 if test "x$use_ccache" != "xno"; then
795 AC_MSG_CHECKING(if ccache should be used)
796 if test x$CCACHE = x; then
797 if test "x$use_ccache" = "xyes"; then
798 AC_MSG_ERROR([ccache not found.]);
804 CC="$ac_cv_path_CCACHE $CC"
805 CXX="$ac_cv_path_CCACHE $CXX"
807 AC_MSG_RESULT($use_ccache)
809 if test "x$use_ccache" = "xyes"; then
810 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
814 AC_MSG_CHECKING([if wallet should be enabled])
815 if test x$enable_wallet != xno; then
817 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
824 AC_MSG_CHECKING([if mining should be enabled])
825 if test x$enable_mining != xno; then
827 AC_DEFINE(ENABLE_MINING, 1, [Define to 1 to enable mining functions])
834 AC_MSG_CHECKING([if rust should be enabled])
835 if test x$enable_rust != xno; then
837 AC_DEFINE(ENABLE_RUST, 1, [Define to 1 to enable Rust language dependent functions])
843 dnl enable upnp support
844 AC_MSG_CHECKING([whether to build with support for UPnP])
845 if test x$have_miniupnpc = xno; then
846 if test x$use_upnp = xyes; then
847 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
851 if test x$use_upnp != xno; then
853 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
856 if test x$use_upnp_default != xno; then
860 AC_MSG_RESULT($use_upnp_default)
861 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
862 if test x$TARGET_OS = xwindows; then
863 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
870 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
872 AC_MSG_CHECKING([whether to build test_bitcoin])
873 if test x$use_tests = xyes; then
881 AC_MSG_CHECKING([whether to reduce exports])
882 if test x$use_reduce_exports = xyes; then
888 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$use_tests = xnononono; then
889 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon or --enable-tests])
892 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
893 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
894 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
895 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
896 AM_CONDITIONAL([ENABLE_MINING],[test x$enable_mining = xyes])
897 AM_CONDITIONAL([ENABLE_RUST],[test x$enable_rust = xyes])
898 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = 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])
903 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
905 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
906 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
907 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
908 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
909 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
910 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
911 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
912 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
913 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
914 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
915 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
916 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
919 AC_SUBST(LIBTOOL_APP_LDFLAGS)
923 AC_SUBST(LEVELDB_TARGET_FLAGS)
924 AC_SUBST(MINIUPNPC_CPPFLAGS)
925 AC_SUBST(MINIUPNPC_LIBS)
928 AC_SUBST(LIBSNARK_LIBS)
929 AC_SUBST(LIBZCASH_LIBS)
930 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi src/test/buildenv.py])
931 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
932 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
934 dnl boost's m4 checks do something really nasty: they export these vars. As a
935 dnl result, they leak into secp256k1's configure and crazy things happen.
936 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
937 CPPFLAGS_TEMP="$CPPFLAGS"
939 CPPFLAGS="$CPPFLAGS_TEMP"
941 LDFLAGS_TEMP="$LDFLAGS"
943 LDFLAGS="$LDFLAGS_TEMP"
949 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
950 unset PKG_CONFIG_PATH
951 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
953 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
954 unset PKG_CONFIG_LIBDIR
955 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
957 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
958 AC_CONFIG_SUBDIRS([src/secp256k1 src/univalue])
962 dnl Taken from https://wiki.debian.org/RpathIssue
965 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
966 sed < libtool > libtool-2 \
967 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'