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, 8)
6 define(_CLIENT_VERSION_BUILD, 50)
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 if test x$TARGET_OS = xdarwin; then
125 AC_ARG_ENABLE([hardening],
126 [AS_HELP_STRING([--enable-hardening],
127 [attempt to harden the resulting executables (default is yes)])],
128 [use_hardening=$enableval],
131 AC_ARG_ENABLE([hardening],
132 [AS_HELP_STRING([--enable-hardening],
133 [attempt to harden the resulting executables (default is yes)])],
134 [use_hardening=$enableval],
138 AC_ARG_ENABLE([reduce-exports],
139 [AS_HELP_STRING([--enable-reduce-exports],
140 [attempt to reduce exported symbols in the resulting executables (default is no)])],
141 [use_reduce_exports=$enableval],
142 [use_reduce_exports=no])
144 AC_ARG_ENABLE([ccache],
145 [AS_HELP_STRING([--enable-ccache],
146 [use ccache for building (default is yes if ccache is found)])],
147 [use_ccache=$enableval],
150 AC_ARG_ENABLE([lcov],
151 [AS_HELP_STRING([--enable-lcov],
152 [enable lcov testing (default is no)])],
156 AC_ARG_ENABLE([glibc-back-compat],
157 [AS_HELP_STRING([--enable-glibc-back-compat],
158 [enable backwards compatibility with glibc])],
159 [use_glibc_compat=$enableval],
160 [use_glibc_compat=no])
163 [AS_HELP_STRING([--disable-zmq],
164 [disable ZMQ notifications])],
165 [use_zmq=$enableval],
168 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
171 [AS_HELP_STRING([--disable-man],
172 [do not install man pages (default is to install)])],,
174 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
177 AC_ARG_ENABLE([debug],
178 [AS_HELP_STRING([--enable-debug],
179 [use debug compiler flags and macros (default is no)])],
180 [enable_debug=$enableval],
183 if test "x$enable_debug" = xyes; then
184 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
185 if test "x$GCC" = xyes; then
186 CFLAGS="$CFLAGS -g3 -O0"
189 if test "x$GXX" = xyes; then
190 CXXFLAGS="$CXXFLAGS -g3 -O0"
194 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
195 ## compatibility with the legacy buildsystem.
197 if test "x$CXXFLAGS_overridden" = "xno"; then
198 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
200 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
203 [AS_HELP_STRING([--with-utils],
204 [build zcash-cli zcash-tx (default=yes)])],
205 [build_bitcoin_utils=$withval],
206 [build_bitcoin_utils=yes])
209 [AS_HELP_STRING([--with-libs],
210 [build libraries (default=yes)])],
211 [build_bitcoin_libs=$withval],
212 [build_bitcoin_libs=yes])
214 AC_ARG_WITH([daemon],
215 [AS_HELP_STRING([--with-daemon],
216 [build bitcoind daemon (default=yes)])],
217 [build_bitcoind=$withval],
218 [build_bitcoind=yes])
226 #pkgconfig does more harm than good with MinGW
230 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
231 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
232 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
233 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
234 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
235 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
236 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
237 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
238 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
239 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
240 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
241 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
242 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
243 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
244 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
245 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
246 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
247 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
248 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
250 # -static is interpreted by libtool, where it has a different meaning.
251 # In libtool-speak, it's -all-static.
252 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
254 AC_PATH_PROG([MAKENSIS], [makensis], none)
255 if test x$MAKENSIS = xnone; then
256 AC_MSG_WARN("makensis not found. Cannot create installer.")
259 AC_PATH_TOOL(WINDRES, windres, none)
260 if test x$WINDRES = xnone; then
261 AC_MSG_ERROR("windres not found")
264 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
265 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
266 if test "x$CXXFLAGS_overridden" = "xno"; then
267 CXXFLAGS="$CXXFLAGS -w"
270 i?86-*) WINDOWS_BITS=32 ;;
271 x86_64-*) WINDOWS_BITS=64 ;;
272 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
274 AC_SUBST(WINDOWS_BITS)
276 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
277 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
278 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
279 dnl also overridden to prevent their insertion later.
280 dnl This should only affect dll's.
281 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
287 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
288 if test x$cross_compiling != xyes; then
290 AC_CHECK_PROG([PORT],port, port)
291 if test x$PORT = xport; then
292 dnl add default macports paths
293 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
294 LIBS="$LIBS -L/opt/local/lib"
295 if test -d /opt/local/include/db62; then
296 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db62"
297 LIBS="$LIBS -L/opt/local/lib/db62"
301 dnl AC_CHECK_PROG([BREW],brew, brew)
302 dnl if test x$BREW = xbrew; then
303 dnl These Homebrew packages may be keg-only, meaning that they won't be found
304 dnl in expected paths because they may conflict with system files. Ask
305 dnl Homebrew where each one is located, then adjust paths accordingly.
306 dnl It's safe to add these paths even if the functionality is disabled by
307 dnl the user (--without-wallet for example).
309 dnl openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
310 dnl bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
311 dnl qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
312 dnl if test x$openssl_prefix != x; then
313 dnl PKG_CONFIG_PATH="$PKG_CONFIG_PATH"
314 dnl export PKG_CONFIG_PATH
316 dnl if test x$bdb_prefix != x; then
317 dnl CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
318 dnl LIBS="$LIBS -L$bdb_prefix/lib"
320 dnl if test x$qt5_prefix != x; then
321 dnl PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
322 dnl export PKG_CONFIG_PATH
331 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
332 AC_PATH_TOOL([OTOOL], [otool], otool)
333 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
335 dnl libtool will try to strip the static lib, which is a problem for
336 dnl cross-builds because strip attempts to call a hard-coded ld,
337 dnl which may not exist in the path. Stripping the .a is not
338 dnl necessary, so just disable it.
344 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
345 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
354 if test x$use_comparison_tool != xno; then
355 if test x$JAVA = x; then
356 AC_MSG_ERROR("comparison tool set but java not found")
358 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
361 if test x$use_comparison_tool_reorg_tests != xno; then
362 if test x$use_comparison_tool = x; then
363 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
365 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
367 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
370 if test x$use_lcov = xyes; then
371 if test x$LCOV = x; then
372 AC_MSG_ERROR("lcov testing requested but lcov not found")
374 if test x$GCOV = x; then
375 AC_MSG_ERROR("lcov testing requested but gcov not found")
377 if test x$JAVA = x; then
378 AC_MSG_ERROR("lcov testing requested but java not found")
380 if test x$GENHTML = x; then
381 AC_MSG_ERROR("lcov testing requested but genhtml not found")
383 if test x$use_comparison_tool = x; then
384 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
386 LCOV="$LCOV --gcov-tool=$GCOV --rc lcov_branch_coverage=1"
387 GENHTML="$GENHTML --branch-coverage"
388 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
389 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
392 dnl Check for endianness
395 dnl Check for pthread compile/link requirements
398 # The following macro will add the necessary defines to bitcoin-config.h, but
399 # they also need to be passed down to any subprojects. Pull the results out of
400 # the cache and add them to CPPFLAGS.
402 # detect POSIX or GNU variant of strerror_r
405 if test x$ac_cv_sys_file_offset_bits != x &&
406 test x$ac_cv_sys_file_offset_bits != xno &&
407 test x$ac_cv_sys_file_offset_bits != xunknown; then
408 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
411 if test x$ac_cv_sys_large_files != x &&
412 test x$ac_cv_sys_large_files != xno &&
413 test x$ac_cv_sys_large_files != xunknown; then
414 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
417 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
419 AX_GCC_FUNC_ATTRIBUTE([visibility])
420 AX_GCC_FUNC_ATTRIBUTE([dllexport])
421 AX_GCC_FUNC_ATTRIBUTE([dllimport])
423 if test x$use_glibc_compat != xno; then
425 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
426 #in anyway for back-compat.
427 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
429 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
430 # See which one is present here.
431 AC_MSG_CHECKING(__fdelt_chk type)
432 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
433 #undef _FORTIFY_SOURCE
435 #define _FORTIFY_SOURCE 2
436 #include <sys/select.h>
437 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
438 [ fdelt_type="long unsigned int"],
439 [ fdelt_type="long int"])
440 AC_MSG_RESULT($fdelt_type)
441 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
443 AC_SEARCH_LIBS([clock_gettime],[rt])
446 if test x$use_hardening != xno; then
447 AX_CHECK_COMPILE_FLAG([-Wformat],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat"],[AC_MSG_ERROR(Cannot enable -Wformat)])
448 AX_CHECK_COMPILE_FLAG([-Wformat-security],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat-security"],[AC_MSG_ERROR(Cannot enable -Wformat-security)],[-Wformat])
449 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"],[AC_MSG_ERROR(Cannot enable -Wstack-protector)])
450 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"],[AC_MSG_ERROR(Cannot enable -fstack-protector-all)])
452 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
453 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
454 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
455 ],[AC_MSG_ERROR(Cannot enable -U_FORTIFY_SOURCE)])
456 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
457 ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)])
459 #AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
460 #AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
462 if test x$TARGET_OS != xwindows; then
463 # All windows code is PIC, forcing it on just adds useless compile warnings
464 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
465 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
466 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"],[AC_MSG_ERROR(Cannot enable -fPIE)])
467 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"],[AC_MSG_ERROR(Cannot enable -pie)])
469 # These are only available on Windows.
470 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"],[AC_MSG_ERROR(Cannot enable --dynamicbase)])
471 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"],[AC_MSG_ERROR(Cannot enable --nxcompat)])
476 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
480 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
481 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
482 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
483 OBJCXXFLAGS="$CXXFLAGS"
486 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
487 if test x$TARGET_OS = xdarwin; then
488 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
491 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])
492 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
493 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
495 AC_CHECK_DECLS([strnlen])
497 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
500 #elif HAVE_SYS_ENDIAN_H
501 #include <sys/endian.h>
504 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
506 #include <byteswap.h>
509 dnl Check for MSG_NOSIGNAL
510 AC_MSG_CHECKING(for MSG_NOSIGNAL)
511 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
512 [[ int f = MSG_NOSIGNAL; ]])],
513 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
517 AC_MSG_CHECKING([for visibility attribute])
518 AC_LINK_IFELSE([AC_LANG_SOURCE([
519 int foo_def( void ) __attribute__((visibility("default")));
523 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
528 if test x$use_reduce_exports = xyes; then
529 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
534 if test x$use_reduce_exports = xyes; then
535 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
536 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
542 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
543 AC_SUBST(LEVELDB_CPPFLAGS)
547 if test x$enable_wallet != xno; then
548 dnl Check for libdb_cxx only if wallet enabled
552 dnl Check for libminiupnpc (optional)
553 if test x$use_upnp != xno; then
555 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
556 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
561 if test x$build_bitcoin_utils$build_bitcoind$use_tests = xnonono; then
567 if test x$use_boost = xyes; then
569 dnl Check for boost libs
573 AX_BOOST_PROGRAM_OPTIONS
578 if test x$use_reduce_exports = xyes; then
579 AC_MSG_CHECKING([for working boost reduced exports])
580 TEMP_CPPFLAGS="$CPPFLAGS"
581 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
582 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
583 @%:@include <boost/version.hpp>
585 #if BOOST_VERSION >= 104900
586 // Everything is okay
588 # error Boost version is too old
593 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
595 CPPFLAGS="$TEMP_CPPFLAGS"
599 if test x$use_reduce_exports = xyes; then
600 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
601 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
604 if test x$use_tests = xyes; then
606 if test x$HEXDUMP = x; then
607 AC_MSG_ERROR(hexdump is required for tests)
611 if test x$use_boost = xyes; then
613 AX_BOOST_UNIT_TEST_FRAMEWORK
615 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
616 AC_MSG_CHECKING([for dynamic linked boost test])
618 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
619 TEMP_CPPFLAGS="$CPPFLAGS"
620 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
621 AC_LINK_IFELSE([AC_LANG_SOURCE([
622 #define BOOST_TEST_DYN_LINK
623 #define BOOST_TEST_MAIN
624 #include <boost/test/unit_test.hpp>
628 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
631 CPPFLAGS="$TEMP_CPPFLAGS"
636 if test x$use_boost = xyes; then
638 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
640 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
641 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
642 dnl a working version is available, else fall back to sleep. sleep was removed
644 dnl If neither is available, abort.
646 LIBS="$BOOST_LIBS $LIBS"
647 TEMP_CPPFLAGS="$CPPFLAGS"
648 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
649 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
650 #include <boost/thread/thread.hpp>
651 #include <boost/version.hpp>
653 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
654 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
660 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
663 CPPFLAGS="$TEMP_CPPFLAGS"
665 if test x$boost_sleep != xyes; then
667 LIBS="$BOOST_LIBS $LIBS"
668 TEMP_CPPFLAGS="$CPPFLAGS"
669 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
670 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
671 #include <boost/version.hpp>
672 #include <boost/thread.hpp>
673 #include <boost/date_time/posix_time/posix_time_types.hpp>
675 #if BOOST_VERSION <= 105600
676 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
681 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
684 CPPFLAGS="$TEMP_CPPFLAGS"
687 if test x$boost_sleep != xyes; then
688 AC_MSG_ERROR(No working boost sleep implementation found.)
693 if test x$use_pkgconfig = xyes; then
695 if test x"$PKG_CONFIG" = "x"; then
696 AC_MSG_ERROR(pkg-config not found.)
703 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
704 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
705 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
706 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
707 if test x$TARGET_OS != xwindows; then
708 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
712 if test "x$use_zmq" = "xyes"; then
713 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
714 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
715 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
716 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
719 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
725 echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++, libgmp'
727 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
728 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
730 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
731 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
733 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
734 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
735 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
736 if test x$TARGET_OS != xwindows; then
737 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
741 if test "x$use_zmq" = "xyes"; then
742 AC_CHECK_HEADER([zmq.h],
743 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
744 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
746 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
747 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
748 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
750 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
752 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
755 if test "x$use_zmq" = "xyes"; then
756 dnl Assume libzmq was built for static linking
759 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
765 # These packages don't provide pkgconfig config files across all
766 # platforms, so we use older autoconf detection mechanisms:
767 if test x$TARGET_OS = xdarwin; then
768 AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing))
769 AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)])
771 AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing))
772 AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)])
775 #AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing))
776 #AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)])
778 #AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing))
779 #AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)])
781 # libsnark header layout is broken unless cpp's -I is passed with the
782 # libsnark directory, so for now we use this hideous workaround:
783 echo 'Hunting for libsnark include directory...'
784 [LIBSNARK_INCDIR="$(echo "$CPPFLAGS" | sed 's,^.*-I\([^ ]*/include\).*$,\1/libsnark,')"]
785 if test -d "$LIBSNARK_INCDIR"; then
786 echo "Found libsnark include directory: $LIBSNARK_INCDIR"
788 AC_MSG_ERROR(libsnark include directory not found)
791 CPPFLAGS="-I$LIBSNARK_INCDIR $CPPFLAGS"
793 # Now check for libsnark compilability using traditional autoconf tests:
794 if test x$TARGET_OS = xdarwin; then
795 AC_CHECK_HEADER([libsnark/gadgetlib1/gadget.hpp],,AC_MSG_ERROR(libsnark headers missing))
796 AC_CHECK_LIB([snark],[main],LIBSNARK_LIBS=-lsnark, [AC_MSG_ERROR(libsnark missing)], [-lgmpxx])
798 #AC_CHECK_HEADER([libsnark/gadgetlib1/gadget.hpp],,AC_MSG_ERROR(libsnark headers missing))
799 #AC_CHECK_LIB([snark],[main],LIBSNARK_LIBS=-lsnark, [AC_MSG_ERROR(libsnark missing)], [-lgmpxx])
802 if test x$enable_rust != xno; then
803 RUST_LIBS="-lrustzcash"
806 LIBZCASH_LIBS="-lsnark -lgmp -lgmpxx -lboost_system-mt -lcrypto -lsodium -fopenmp $RUST_LIBS"
808 CXXFLAGS_TEMP="$CXXFLAGS"
810 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
811 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS $GMP_LIBS $GMPXX_LIBS"
812 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
813 CXXFLAGS="$CXXFLAGS_TEMP"
816 AC_MSG_CHECKING([whether to build bitcoind])
817 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
818 AC_MSG_RESULT($build_bitcoind)
820 AC_MSG_CHECKING([whether to build utils (zcash-cli zcash-tx)])
821 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
822 AC_MSG_RESULT($build_bitcoin_utils)
824 AC_MSG_CHECKING([whether to build libraries])
825 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
826 if test x$build_bitcoin_libs = xyes; then
827 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
828 AC_CONFIG_FILES([libzcashconsensus.pc:libzcashconsensus.pc.in])
831 AC_MSG_RESULT($build_bitcoin_libs)
835 if test "x$use_ccache" != "xno"; then
836 AC_MSG_CHECKING(if ccache should be used)
837 if test x$CCACHE = x; then
838 if test "x$use_ccache" = "xyes"; then
839 AC_MSG_ERROR([ccache not found.]);
845 CC="$ac_cv_path_CCACHE $CC"
846 CXX="$ac_cv_path_CCACHE $CXX"
848 AC_MSG_RESULT($use_ccache)
850 if test "x$use_ccache" = "xyes"; then
851 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
855 AC_MSG_CHECKING([if wallet should be enabled])
856 if test x$enable_wallet != xno; then
858 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
865 AC_MSG_CHECKING([if mining should be enabled])
866 if test x$enable_mining != xno; then
868 AC_DEFINE(ENABLE_MINING, 1, [Define to 1 to enable mining functions])
875 AC_MSG_CHECKING([if rust should be enabled])
876 if test x$enable_rust != xno; then
878 AC_DEFINE(ENABLE_RUST, 1, [Define to 1 to enable Rust language dependent functions])
884 dnl enable upnp support
885 AC_MSG_CHECKING([whether to build with support for UPnP])
886 if test x$have_miniupnpc = xno; then
887 if test x$use_upnp = xyes; then
888 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
892 if test x$use_upnp != xno; then
894 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
897 if test x$use_upnp_default != xno; then
901 AC_MSG_RESULT($use_upnp_default)
902 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
903 if test x$TARGET_OS = xwindows; then
904 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
911 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
913 AC_MSG_CHECKING([whether to build test_bitcoin])
914 if test x$use_tests = xyes; then
922 AC_MSG_CHECKING([whether to reduce exports])
923 if test x$use_reduce_exports = xyes; then
929 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$use_tests = xnononono; then
930 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon or --enable-tests])
933 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
934 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
935 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
936 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
937 AM_CONDITIONAL([ENABLE_MINING],[test x$enable_mining = xyes])
938 AM_CONDITIONAL([ENABLE_RUST],[test x$enable_rust = xyes])
939 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
940 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
941 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
942 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
943 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
944 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
946 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
947 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
948 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
949 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
950 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
951 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
952 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
953 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
954 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
955 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
956 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
957 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
960 AC_SUBST(LIBTOOL_APP_LDFLAGS)
964 AC_SUBST(LEVELDB_TARGET_FLAGS)
965 AC_SUBST(MINIUPNPC_CPPFLAGS)
966 AC_SUBST(MINIUPNPC_LIBS)
969 AC_SUBST(LIBSNARK_LIBS)
970 AC_SUBST(LIBZCASH_LIBS)
971 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi src/test/buildenv.py])
972 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
973 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
975 dnl boost's m4 checks do something really nasty: they export these vars. As a
976 dnl result, they leak into secp256k1's configure and crazy things happen.
977 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
978 CPPFLAGS_TEMP="$CPPFLAGS"
980 CPPFLAGS="$CPPFLAGS_TEMP"
982 LDFLAGS_TEMP="$LDFLAGS"
984 LDFLAGS="$LDFLAGS_TEMP"
990 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
991 unset PKG_CONFIG_PATH
992 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
994 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
995 unset PKG_CONFIG_LIBDIR
996 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
998 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
999 AC_CONFIG_SUBDIRS([src/secp256k1 src/univalue])
1003 dnl Taken from https://wiki.debian.org/RpathIssue
1006 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1007 sed < libtool > libtool-2 \
1008 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1009 mv libtool-2 libtool