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, 11)
6 define(_CLIENT_VERSION_BUILD, 25)
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_ENABLE([proton],
98 [AS_HELP_STRING([--disable-proton],
99 [disable Proton (AMQP messaging)])],
100 [use_proton=$enableval],
104 AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
105 [use_tests=$enableval],
108 AC_ARG_WITH([comparison-tool],
109 AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
110 [use_comparison_tool=$withval],
111 [use_comparison_tool=no])
113 AC_ARG_ENABLE([comparison-tool-reorg-tests],
114 AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
115 [use_comparison_tool_reorg_tests=$enableval],
116 [use_comparison_tool_reorg_tests=no])
118 AC_ARG_ENABLE([hardening],
119 [AS_HELP_STRING([--enable-hardening],
120 [attempt to harden the resulting executables (default is yes)])],
121 [use_hardening=$enableval],
124 AC_ARG_ENABLE([reduce-exports],
125 [AS_HELP_STRING([--enable-reduce-exports],
126 [attempt to reduce exported symbols in the resulting executables (default is no)])],
127 [use_reduce_exports=$enableval],
128 [use_reduce_exports=no])
130 AC_ARG_ENABLE([ccache],
131 [AS_HELP_STRING([--enable-ccache],
132 [use ccache for building (default is yes if ccache is found)])],
133 [use_ccache=$enableval],
136 AC_ARG_ENABLE([lcov],
137 [AS_HELP_STRING([--enable-lcov],
138 [enable lcov testing (default is no)])],
142 AC_ARG_ENABLE([glibc-back-compat],
143 [AS_HELP_STRING([--enable-glibc-back-compat],
144 [enable backwards compatibility with glibc])],
145 [use_glibc_compat=$enableval],
146 [use_glibc_compat=no])
149 [AS_HELP_STRING([--disable-zmq],
150 [disable ZMQ notifications])],
151 [use_zmq=$enableval],
154 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
157 [AS_HELP_STRING([--disable-man],
158 [do not install man pages (default is to install)])],,
160 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
163 AC_ARG_ENABLE([debug],
164 [AS_HELP_STRING([--enable-debug],
165 [use debug compiler flags and macros (default is no)])],
166 [enable_debug=$enableval],
169 if test "x$enable_debug" = xyes; then
170 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
171 if test "x$GCC" = xyes; then
172 CFLAGS="$CFLAGS -g3 -O0"
175 if test "x$GXX" = xyes; then
176 CXXFLAGS="$CXXFLAGS -g3 -O0"
180 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
181 ## compatibility with the legacy buildsystem.
183 if test "x$CXXFLAGS_overridden" = "xno"; then
184 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
186 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
189 [AS_HELP_STRING([--with-utils],
190 [build zcash-cli zcash-tx (default=yes)])],
191 [build_bitcoin_utils=$withval],
192 [build_bitcoin_utils=yes])
195 [AS_HELP_STRING([--with-libs],
196 [build libraries (default=yes)])],
197 [build_bitcoin_libs=$withval],
198 [build_bitcoin_libs=yes])
200 AC_ARG_WITH([daemon],
201 [AS_HELP_STRING([--with-daemon],
202 [build bitcoind daemon (default=yes)])],
203 [build_bitcoind=$withval],
204 [build_bitcoind=yes])
212 #pkgconfig does more harm than good with MinGW
216 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
217 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
218 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
219 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
220 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
221 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
222 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
223 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
224 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
225 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
226 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
227 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
228 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
229 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
230 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
231 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
232 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
233 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
234 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
236 # -static is interpreted by libtool, where it has a different meaning.
237 # In libtool-speak, it's -all-static.
238 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
240 AC_PATH_PROG([MAKENSIS], [makensis], none)
241 if test x$MAKENSIS = xnone; then
242 AC_MSG_WARN("makensis not found. Cannot create installer.")
245 AC_PATH_TOOL(WINDRES, windres, none)
246 if test x$WINDRES = xnone; then
247 AC_MSG_ERROR("windres not found")
250 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
251 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
252 if test "x$CXXFLAGS_overridden" = "xno"; then
253 CXXFLAGS="$CXXFLAGS -w"
256 i?86-*) WINDOWS_BITS=32 ;;
257 x86_64-*) WINDOWS_BITS=64 ;;
258 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
260 AC_SUBST(WINDOWS_BITS)
262 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
263 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
264 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
265 dnl also overridden to prevent their insertion later.
266 dnl This should only affect dll's.
267 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
273 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
274 if test x$cross_compiling != xyes; then
276 AC_CHECK_PROG([PORT],port, port)
277 if test x$PORT = xport; then
278 dnl add default macports paths
279 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
280 LIBS="$LIBS -L/opt/local/lib"
281 if test -d /opt/local/include/db62; then
282 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db62"
283 LIBS="$LIBS -L/opt/local/lib/db62"
287 AC_CHECK_PROG([BREW],brew, brew)
288 if test x$BREW = xbrew; then
289 dnl These Homebrew packages may be keg-only, meaning that they won't be found
290 dnl in expected paths because they may conflict with system files. Ask
291 dnl Homebrew where each one is located, then adjust paths accordingly.
292 dnl It's safe to add these paths even if the functionality is disabled by
293 dnl the user (--without-wallet for example).
295 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
296 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
297 if test x$openssl_prefix != x; then
298 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
299 export PKG_CONFIG_PATH
301 if test x$bdb_prefix != x; then
302 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
303 LIBS="$LIBS -L$bdb_prefix/lib"
312 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
313 AC_PATH_TOOL([OTOOL], [otool], otool)
314 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
316 dnl libtool will try to strip the static lib, which is a problem for
317 dnl cross-builds because strip attempts to call a hard-coded ld,
318 dnl which may not exist in the path. Stripping the .a is not
319 dnl necessary, so just disable it.
325 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
326 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
335 if test x$use_comparison_tool != xno; then
336 if test x$JAVA = x; then
337 AC_MSG_ERROR("comparison tool set but java not found")
339 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
342 if test x$use_comparison_tool_reorg_tests != xno; then
343 if test x$use_comparison_tool = x; then
344 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
346 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
348 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
351 if test x$use_lcov = xyes; then
352 if test x$LCOV = x; then
353 AC_MSG_ERROR("lcov testing requested but lcov not found")
355 if test x$GCOV = x; then
356 AC_MSG_ERROR("lcov testing requested but gcov not found")
358 if test x$JAVA = x; then
359 AC_MSG_ERROR("lcov testing requested but java not found")
361 if test x$GENHTML = x; then
362 AC_MSG_ERROR("lcov testing requested but genhtml not found")
364 if test x$use_comparison_tool = x; then
365 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
367 LCOV="$LCOV --gcov-tool=$GCOV --rc lcov_branch_coverage=1"
368 GENHTML="$GENHTML --branch-coverage"
369 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
370 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
373 dnl Check for endianness
376 dnl Check for pthread compile/link requirements
379 # The following macro will add the necessary defines to bitcoin-config.h, but
380 # they also need to be passed down to any subprojects. Pull the results out of
381 # the cache and add them to CPPFLAGS.
383 # detect POSIX or GNU variant of strerror_r
386 if test x$ac_cv_sys_file_offset_bits != x &&
387 test x$ac_cv_sys_file_offset_bits != xno &&
388 test x$ac_cv_sys_file_offset_bits != xunknown; then
389 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
392 if test x$ac_cv_sys_large_files != x &&
393 test x$ac_cv_sys_large_files != xno &&
394 test x$ac_cv_sys_large_files != xunknown; then
395 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
398 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
400 AX_GCC_FUNC_ATTRIBUTE([visibility])
401 AX_GCC_FUNC_ATTRIBUTE([dllexport])
402 AX_GCC_FUNC_ATTRIBUTE([dllimport])
404 if test x$use_glibc_compat != xno; then
406 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
407 #in anyway for back-compat.
408 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
410 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
411 # See which one is present here.
412 AC_MSG_CHECKING(__fdelt_chk type)
413 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
414 #undef _FORTIFY_SOURCE
416 #define _FORTIFY_SOURCE 2
417 #include <sys/select.h>
418 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
419 [ fdelt_type="long unsigned int"],
420 [ fdelt_type="long int"])
421 AC_MSG_RESULT($fdelt_type)
422 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
424 AC_SEARCH_LIBS([clock_gettime],[rt])
427 if test x$use_hardening != xno; then
428 AX_CHECK_COMPILE_FLAG([-Wformat],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat"],[AC_MSG_ERROR(Cannot enable -Wformat)])
429 AX_CHECK_COMPILE_FLAG([-Wformat-security],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat-security"],[AC_MSG_ERROR(Cannot enable -Wformat-security)],[-Wformat])
430 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"],[AC_MSG_ERROR(Cannot enable -Wstack-protector)])
431 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"],[AC_MSG_ERROR(Cannot enable -fstack-protector-all)])
433 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
434 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
435 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
436 ],[AC_MSG_ERROR(Cannot enable -U_FORTIFY_SOURCE)])
437 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
438 ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)])
440 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
441 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
443 if test x$TARGET_OS != xwindows; then
444 # All windows code is PIC, forcing it on just adds useless compile warnings
445 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"],[AC_MSG_ERROR(Cannot enable -fPIE)])
446 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"],[AC_MSG_ERROR(Cannot enable -pie)])
448 # These are only available on Windows.
449 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"],[AC_MSG_ERROR(Cannot enable --dynamicbase)])
450 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"],[AC_MSG_ERROR(Cannot enable --nxcompat)])
455 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
459 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
460 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
461 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
462 OBJCXXFLAGS="$CXXFLAGS"
465 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
466 if test x$TARGET_OS = xdarwin; then
467 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
470 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])
471 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
472 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
474 AC_CHECK_DECLS([strnlen])
476 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
479 #elif HAVE_SYS_ENDIAN_H
480 #include <sys/endian.h>
483 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
485 #include <byteswap.h>
488 dnl Check for MSG_NOSIGNAL
489 AC_MSG_CHECKING(for MSG_NOSIGNAL)
490 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
491 [[ int f = MSG_NOSIGNAL; ]])],
492 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
496 AC_MSG_CHECKING([for visibility attribute])
497 AC_LINK_IFELSE([AC_LANG_SOURCE([
498 int foo_def( void ) __attribute__((visibility("default")));
502 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
507 if test x$use_reduce_exports = xyes; then
508 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
513 if test x$use_reduce_exports = xyes; then
514 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
515 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
521 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
522 AC_SUBST(LEVELDB_CPPFLAGS)
526 if test x$enable_wallet != xno; then
527 dnl Check for libdb_cxx only if wallet enabled
531 dnl Check Qpid Proton headers and library exist
532 if test x$use_proton = xyes; then
533 AC_CHECK_HEADERS([proton/connection.hpp],
535 [AC_MSG_WARN([Proton headers not found, disabling Proton support])
537 AC_CHECK_LIB([qpid-proton-cpp], [main],
538 [PROTON_LIBS="-lqpid-proton-cpp -lqpid-proton"],
539 [AC_MSG_WARN([Proton libraries not found, disabling Proton support])
542 if test x$use_proton = xyes; then
543 AC_DEFINE(ENABLE_PROTON, 1, [Define to 1 to enable Proton functions])
545 AC_DEFINE(ENABLE_PROTON, 0, [Define to 1 to enable Proton functions])
548 if test x$build_bitcoin_utils$build_bitcoind$use_tests = xnonono; then
554 if test x$use_boost = xyes; then
556 dnl Check for boost libs
560 AX_BOOST_PROGRAM_OPTIONS
565 if test x$use_reduce_exports = xyes; then
566 AC_MSG_CHECKING([for working boost reduced exports])
567 TEMP_CPPFLAGS="$CPPFLAGS"
568 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
569 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
570 @%:@include <boost/version.hpp>
572 #if BOOST_VERSION >= 104900
573 // Everything is okay
575 # error Boost version is too old
580 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
582 CPPFLAGS="$TEMP_CPPFLAGS"
586 if test x$use_reduce_exports = xyes; then
587 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
588 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
591 if test x$use_tests = xyes; then
593 if test x$HEXDUMP = x; then
594 AC_MSG_ERROR(hexdump is required for tests)
598 if test x$use_boost = xyes; then
600 AX_BOOST_UNIT_TEST_FRAMEWORK
602 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
603 AC_MSG_CHECKING([for dynamic linked boost test])
605 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
606 TEMP_CPPFLAGS="$CPPFLAGS"
607 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
608 AC_LINK_IFELSE([AC_LANG_SOURCE([
609 #define BOOST_TEST_DYN_LINK
610 #define BOOST_TEST_MAIN
611 #include <boost/test/unit_test.hpp>
615 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
618 CPPFLAGS="$TEMP_CPPFLAGS"
623 if test x$use_boost = xyes; then
625 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
627 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
628 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
629 dnl a working version is available, else fall back to sleep. sleep was removed
631 dnl If neither is available, abort.
633 LIBS="$BOOST_LIBS $LIBS"
634 TEMP_CPPFLAGS="$CPPFLAGS"
635 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
636 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
637 #include <boost/thread/thread.hpp>
638 #include <boost/version.hpp>
640 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
641 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
647 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
650 CPPFLAGS="$TEMP_CPPFLAGS"
652 if test x$boost_sleep != xyes; then
654 LIBS="$BOOST_LIBS $LIBS"
655 TEMP_CPPFLAGS="$CPPFLAGS"
656 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
657 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
658 #include <boost/version.hpp>
659 #include <boost/thread.hpp>
660 #include <boost/date_time/posix_time/posix_time_types.hpp>
662 #if BOOST_VERSION <= 105600
663 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
668 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
671 CPPFLAGS="$TEMP_CPPFLAGS"
674 if test x$boost_sleep != xyes; then
675 AC_MSG_ERROR(No working boost sleep implementation found.)
680 if test x$use_pkgconfig = xyes; then
682 if test x"$PKG_CONFIG" = "x"; then
683 AC_MSG_ERROR(pkg-config not found.)
690 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
691 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
692 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
693 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
694 if test x$TARGET_OS != xwindows; then
695 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
699 if test "x$use_zmq" = "xyes"; then
700 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
701 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
702 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
703 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
706 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
712 echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++, libgmp'
714 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
715 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
717 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
718 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
720 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
721 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
722 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
723 if test x$TARGET_OS != xwindows; then
724 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
728 if test "x$use_zmq" = "xyes"; then
729 AC_CHECK_HEADER([zmq.h],
730 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
731 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
733 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
734 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
735 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
737 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
739 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
742 if test "x$use_zmq" = "xyes"; then
743 dnl Assume libzmq was built for static linking
746 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
752 # These packages don't provide pkgconfig config files across all
753 # platforms, so we use older autoconf detection mechanisms:
754 AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing))
755 AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)])
757 AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing))
758 AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)])
761 if test x$enable_rust != xno; then
762 RUST_LIBS="-lrustzcash"
765 LIBZCASH_LIBS="-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 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
845 AM_CONDITIONAL([ENABLE_PROTON], [test "x$use_proton" = "xyes"])
847 AC_MSG_CHECKING([whether to build test_bitcoin])
848 if test x$use_tests = xyes; then
856 AC_MSG_CHECKING([whether to reduce exports])
857 if test x$use_reduce_exports = xyes; then
863 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$use_tests = xnononono; then
864 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon or --enable-tests])
867 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
868 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
869 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
870 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
871 AM_CONDITIONAL([ENABLE_MINING],[test x$enable_mining = xyes])
872 AM_CONDITIONAL([ENABLE_RUST],[test x$enable_rust = xyes])
873 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
874 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
875 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
876 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
877 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
878 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
880 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
881 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
882 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
883 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
884 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
885 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
886 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
887 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
888 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
889 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
890 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
891 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
894 AC_SUBST(LIBTOOL_APP_LDFLAGS)
897 AC_SUBST(LEVELDB_TARGET_FLAGS)
900 AC_SUBST(LIBSNARK_LIBS)
901 AC_SUBST(LIBZCASH_LIBS)
902 AC_SUBST(PROTON_LIBS)
903 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi src/test/buildenv.py])
904 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
905 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
907 dnl boost's m4 checks do something really nasty: they export these vars. As a
908 dnl result, they leak into secp256k1's configure and crazy things happen.
909 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
910 CPPFLAGS_TEMP="$CPPFLAGS"
912 CPPFLAGS="$CPPFLAGS_TEMP"
914 LDFLAGS_TEMP="$LDFLAGS"
916 LDFLAGS="$LDFLAGS_TEMP"
922 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
923 unset PKG_CONFIG_PATH
924 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
926 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
927 unset PKG_CONFIG_LIBDIR
928 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
930 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
931 AC_CONFIG_SUBDIRS([src/secp256k1 src/snark src/univalue])
935 dnl Taken from https://wiki.debian.org/RpathIssue
938 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
939 sed < libtool > libtool-2 \
940 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'