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, 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])
109 AC_ARG_ENABLE([proton],
110 [AS_HELP_STRING([--disable-proton],
111 [disable Proton (AMQP messaging)])],
112 [use_proton=$enableval],
116 AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
117 [use_tests=$enableval],
120 AC_ARG_WITH([comparison-tool],
121 AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
122 [use_comparison_tool=$withval],
123 [use_comparison_tool=no])
125 AC_ARG_ENABLE([comparison-tool-reorg-tests],
126 AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
127 [use_comparison_tool_reorg_tests=$enableval],
128 [use_comparison_tool_reorg_tests=no])
130 AC_ARG_ENABLE([hardening],
131 [AS_HELP_STRING([--enable-hardening],
132 [attempt to harden the resulting executables (default is yes)])],
133 [use_hardening=$enableval],
136 AC_ARG_ENABLE([reduce-exports],
137 [AS_HELP_STRING([--enable-reduce-exports],
138 [attempt to reduce exported symbols in the resulting executables (default is no)])],
139 [use_reduce_exports=$enableval],
140 [use_reduce_exports=no])
142 AC_ARG_ENABLE([ccache],
143 [AS_HELP_STRING([--enable-ccache],
144 [use ccache for building (default is yes if ccache is found)])],
145 [use_ccache=$enableval],
148 AC_ARG_ENABLE([lcov],
149 [AS_HELP_STRING([--enable-lcov],
150 [enable lcov testing (default is no)])],
154 AC_ARG_ENABLE([glibc-back-compat],
155 [AS_HELP_STRING([--enable-glibc-back-compat],
156 [enable backwards compatibility with glibc])],
157 [use_glibc_compat=$enableval],
158 [use_glibc_compat=no])
161 [AS_HELP_STRING([--disable-zmq],
162 [disable ZMQ notifications])],
163 [use_zmq=$enableval],
166 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
169 [AS_HELP_STRING([--disable-man],
170 [do not install man pages (default is to install)])],,
172 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
175 AC_ARG_ENABLE([debug],
176 [AS_HELP_STRING([--enable-debug],
177 [use debug compiler flags and macros (default is no)])],
178 [enable_debug=$enableval],
181 if test "x$enable_debug" = xyes; then
182 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
183 if test "x$GCC" = xyes; then
184 CFLAGS="$CFLAGS -g3 -O0"
187 if test "x$GXX" = xyes; then
188 CXXFLAGS="$CXXFLAGS -g3 -O0"
192 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
193 ## compatibility with the legacy buildsystem.
195 if test "x$CXXFLAGS_overridden" = "xno"; then
196 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
198 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
201 [AS_HELP_STRING([--with-utils],
202 [build zcash-cli zcash-tx (default=yes)])],
203 [build_bitcoin_utils=$withval],
204 [build_bitcoin_utils=yes])
207 [AS_HELP_STRING([--with-libs],
208 [build libraries (default=yes)])],
209 [build_bitcoin_libs=$withval],
210 [build_bitcoin_libs=yes])
212 AC_ARG_WITH([daemon],
213 [AS_HELP_STRING([--with-daemon],
214 [build bitcoind daemon (default=yes)])],
215 [build_bitcoind=$withval],
216 [build_bitcoind=yes])
224 #pkgconfig does more harm than good with MinGW
228 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
229 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
230 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
231 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
232 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
233 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
234 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
235 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
236 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
237 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
238 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
239 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
240 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
241 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
242 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
243 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
244 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
245 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
246 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
248 # -static is interpreted by libtool, where it has a different meaning.
249 # In libtool-speak, it's -all-static.
250 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
252 AC_PATH_PROG([MAKENSIS], [makensis], none)
253 if test x$MAKENSIS = xnone; then
254 AC_MSG_WARN("makensis not found. Cannot create installer.")
257 AC_PATH_TOOL(WINDRES, windres, none)
258 if test x$WINDRES = xnone; then
259 AC_MSG_ERROR("windres not found")
262 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
263 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
264 if test "x$CXXFLAGS_overridden" = "xno"; then
265 CXXFLAGS="$CXXFLAGS -w"
268 i?86-*) WINDOWS_BITS=32 ;;
269 x86_64-*) WINDOWS_BITS=64 ;;
270 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
272 AC_SUBST(WINDOWS_BITS)
274 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
275 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
276 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
277 dnl also overridden to prevent their insertion later.
278 dnl This should only affect dll's.
279 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
285 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
286 if test x$cross_compiling != xyes; then
288 AC_CHECK_PROG([PORT],port, port)
289 if test x$PORT = xport; then
290 dnl add default macports paths
291 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
292 LIBS="$LIBS -L/opt/local/lib"
293 if test -d /opt/local/include/db62; then
294 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db62"
295 LIBS="$LIBS -L/opt/local/lib/db62"
299 AC_CHECK_PROG([BREW],brew, brew)
300 if test x$BREW = xbrew; then
301 dnl These Homebrew packages may be keg-only, meaning that they won't be found
302 dnl in expected paths because they may conflict with system files. Ask
303 dnl Homebrew where each one is located, then adjust paths accordingly.
304 dnl It's safe to add these paths even if the functionality is disabled by
305 dnl the user (--without-wallet for example).
307 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
308 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
309 if test x$openssl_prefix != x; then
310 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
311 export PKG_CONFIG_PATH
313 if test x$bdb_prefix != x; then
314 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
315 LIBS="$LIBS -L$bdb_prefix/lib"
324 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
325 AC_PATH_TOOL([OTOOL], [otool], otool)
326 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
328 dnl libtool will try to strip the static lib, which is a problem for
329 dnl cross-builds because strip attempts to call a hard-coded ld,
330 dnl which may not exist in the path. Stripping the .a is not
331 dnl necessary, so just disable it.
337 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
338 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
347 if test x$use_comparison_tool != xno; then
348 if test x$JAVA = x; then
349 AC_MSG_ERROR("comparison tool set but java not found")
351 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
354 if test x$use_comparison_tool_reorg_tests != xno; then
355 if test x$use_comparison_tool = x; then
356 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
358 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
360 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
363 if test x$use_lcov = xyes; then
364 if test x$LCOV = x; then
365 AC_MSG_ERROR("lcov testing requested but lcov not found")
367 if test x$GCOV = x; then
368 AC_MSG_ERROR("lcov testing requested but gcov not found")
370 if test x$JAVA = x; then
371 AC_MSG_ERROR("lcov testing requested but java not found")
373 if test x$GENHTML = x; then
374 AC_MSG_ERROR("lcov testing requested but genhtml not found")
376 if test x$use_comparison_tool = x; then
377 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
379 LCOV="$LCOV --gcov-tool=$GCOV --rc lcov_branch_coverage=1"
380 GENHTML="$GENHTML --branch-coverage"
381 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
382 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
385 dnl Check for endianness
388 dnl Check for pthread compile/link requirements
391 # The following macro will add the necessary defines to bitcoin-config.h, but
392 # they also need to be passed down to any subprojects. Pull the results out of
393 # the cache and add them to CPPFLAGS.
395 # detect POSIX or GNU variant of strerror_r
398 if test x$ac_cv_sys_file_offset_bits != x &&
399 test x$ac_cv_sys_file_offset_bits != xno &&
400 test x$ac_cv_sys_file_offset_bits != xunknown; then
401 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
404 if test x$ac_cv_sys_large_files != x &&
405 test x$ac_cv_sys_large_files != xno &&
406 test x$ac_cv_sys_large_files != xunknown; then
407 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
410 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
412 AX_GCC_FUNC_ATTRIBUTE([visibility])
413 AX_GCC_FUNC_ATTRIBUTE([dllexport])
414 AX_GCC_FUNC_ATTRIBUTE([dllimport])
416 if test x$use_glibc_compat != xno; then
418 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
419 #in anyway for back-compat.
420 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
422 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
423 # See which one is present here.
424 AC_MSG_CHECKING(__fdelt_chk type)
425 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
426 #undef _FORTIFY_SOURCE
428 #define _FORTIFY_SOURCE 2
429 #include <sys/select.h>
430 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
431 [ fdelt_type="long unsigned int"],
432 [ fdelt_type="long int"])
433 AC_MSG_RESULT($fdelt_type)
434 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
436 AC_SEARCH_LIBS([clock_gettime],[rt])
439 if test x$use_hardening != xno; then
440 AX_CHECK_COMPILE_FLAG([-Wformat],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat"],[AC_MSG_ERROR(Cannot enable -Wformat)])
441 AX_CHECK_COMPILE_FLAG([-Wformat-security],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat-security"],[AC_MSG_ERROR(Cannot enable -Wformat-security)],[-Wformat])
442 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"],[AC_MSG_ERROR(Cannot enable -Wstack-protector)])
443 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"],[AC_MSG_ERROR(Cannot enable -fstack-protector-all)])
445 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
446 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
447 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
448 ],[AC_MSG_ERROR(Cannot enable -U_FORTIFY_SOURCE)])
449 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
450 ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)])
452 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
453 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
455 if test x$TARGET_OS != xwindows; then
456 # All windows code is PIC, forcing it on just adds useless compile warnings
457 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"],[AC_MSG_ERROR(Cannot enable -fPIE)])
458 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"],[AC_MSG_ERROR(Cannot enable -pie)])
460 # These are only available on Windows.
461 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"],[AC_MSG_ERROR(Cannot enable --dynamicbase)])
462 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"],[AC_MSG_ERROR(Cannot enable --nxcompat)])
467 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
471 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
472 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
473 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
474 OBJCXXFLAGS="$CXXFLAGS"
477 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
478 if test x$TARGET_OS = xdarwin; then
479 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
482 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])
483 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
484 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
486 AC_CHECK_DECLS([strnlen])
488 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
491 #elif HAVE_SYS_ENDIAN_H
492 #include <sys/endian.h>
495 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
497 #include <byteswap.h>
500 dnl Check for MSG_NOSIGNAL
501 AC_MSG_CHECKING(for MSG_NOSIGNAL)
502 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
503 [[ int f = MSG_NOSIGNAL; ]])],
504 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
508 AC_MSG_CHECKING([for visibility attribute])
509 AC_LINK_IFELSE([AC_LANG_SOURCE([
510 int foo_def( void ) __attribute__((visibility("default")));
514 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
519 if test x$use_reduce_exports = xyes; then
520 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
525 if test x$use_reduce_exports = xyes; then
526 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
527 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
533 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
534 AC_SUBST(LEVELDB_CPPFLAGS)
538 if test x$enable_wallet != xno; then
539 dnl Check for libdb_cxx only if wallet enabled
543 dnl Check Qpid Proton headers and library exist
544 if test x$use_proton = xyes; then
545 AC_CHECK_HEADERS([proton/connection.hpp],
547 [AC_MSG_WARN([Proton headers not found, disabling Proton support])
549 AC_CHECK_LIB([qpid-proton-cpp], [main],
550 [PROTON_LIBS="-lqpid-proton-cpp -lqpid-proton"],
551 [AC_MSG_WARN([Proton libraries not found, disabling Proton support])
554 if test x$use_proton = xyes; then
555 AC_DEFINE(ENABLE_PROTON, 1, [Define to 1 to enable Proton functions])
557 AC_DEFINE(ENABLE_PROTON, 0, [Define to 1 to enable Proton functions])
560 dnl Check for libminiupnpc (optional)
561 if test x$use_upnp != xno; then
563 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
564 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
569 if test x$build_bitcoin_utils$build_bitcoind$use_tests = xnonono; then
575 if test x$use_boost = xyes; then
577 dnl Check for boost libs
581 AX_BOOST_PROGRAM_OPTIONS
586 if test x$use_reduce_exports = xyes; then
587 AC_MSG_CHECKING([for working boost reduced exports])
588 TEMP_CPPFLAGS="$CPPFLAGS"
589 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
590 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
591 @%:@include <boost/version.hpp>
593 #if BOOST_VERSION >= 104900
594 // Everything is okay
596 # error Boost version is too old
601 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
603 CPPFLAGS="$TEMP_CPPFLAGS"
607 if test x$use_reduce_exports = xyes; then
608 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
609 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
612 if test x$use_tests = xyes; then
614 if test x$HEXDUMP = x; then
615 AC_MSG_ERROR(hexdump is required for tests)
619 if test x$use_boost = xyes; then
621 AX_BOOST_UNIT_TEST_FRAMEWORK
623 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
624 AC_MSG_CHECKING([for dynamic linked boost test])
626 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
627 TEMP_CPPFLAGS="$CPPFLAGS"
628 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
629 AC_LINK_IFELSE([AC_LANG_SOURCE([
630 #define BOOST_TEST_DYN_LINK
631 #define BOOST_TEST_MAIN
632 #include <boost/test/unit_test.hpp>
636 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
639 CPPFLAGS="$TEMP_CPPFLAGS"
644 if test x$use_boost = xyes; then
646 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
648 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
649 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
650 dnl a working version is available, else fall back to sleep. sleep was removed
652 dnl If neither is available, abort.
654 LIBS="$BOOST_LIBS $LIBS"
655 TEMP_CPPFLAGS="$CPPFLAGS"
656 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
657 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
658 #include <boost/thread/thread.hpp>
659 #include <boost/version.hpp>
661 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
662 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
668 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
671 CPPFLAGS="$TEMP_CPPFLAGS"
673 if test x$boost_sleep != xyes; then
675 LIBS="$BOOST_LIBS $LIBS"
676 TEMP_CPPFLAGS="$CPPFLAGS"
677 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
678 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
679 #include <boost/version.hpp>
680 #include <boost/thread.hpp>
681 #include <boost/date_time/posix_time/posix_time_types.hpp>
683 #if BOOST_VERSION <= 105600
684 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
689 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
692 CPPFLAGS="$TEMP_CPPFLAGS"
695 if test x$boost_sleep != xyes; then
696 AC_MSG_ERROR(No working boost sleep implementation found.)
701 if test x$use_pkgconfig = xyes; then
703 if test x"$PKG_CONFIG" = "x"; then
704 AC_MSG_ERROR(pkg-config not found.)
711 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
712 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
713 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
714 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
715 if test x$TARGET_OS != xwindows; then
716 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
720 if test "x$use_zmq" = "xyes"; then
721 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
722 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
723 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
724 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
727 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
733 echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++, libgmp'
735 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
736 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
738 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
739 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
741 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
742 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
743 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
744 if test x$TARGET_OS != xwindows; then
745 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
749 if test "x$use_zmq" = "xyes"; then
750 AC_CHECK_HEADER([zmq.h],
751 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
752 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
754 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
755 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
756 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
758 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
760 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
763 if test "x$use_zmq" = "xyes"; then
764 dnl Assume libzmq was built for static linking
767 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
773 # These packages don't provide pkgconfig config files across all
774 # platforms, so we use older autoconf detection mechanisms:
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 AC_CHECK_HEADER([libsnark/gadgetlib1/gadget.hpp],,AC_MSG_ERROR(libsnark headers missing))
795 AC_CHECK_LIB([snark],[main],LIBSNARK_LIBS=-lsnark, [AC_MSG_ERROR(libsnark missing)], [-lgmpxx])
798 if test x$enable_rust != xno; then
799 RUST_LIBS="-lrustzcash"
802 LIBZCASH_LIBS="-lsnark -lgmp -lgmpxx -lboost_system-mt -lcrypto -lsodium -fopenmp $RUST_LIBS"
804 CXXFLAGS_TEMP="$CXXFLAGS"
806 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
807 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS $GMP_LIBS $GMPXX_LIBS"
808 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
809 CXXFLAGS="$CXXFLAGS_TEMP"
812 AC_MSG_CHECKING([whether to build bitcoind])
813 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
814 AC_MSG_RESULT($build_bitcoind)
816 AC_MSG_CHECKING([whether to build utils (zcash-cli zcash-tx)])
817 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
818 AC_MSG_RESULT($build_bitcoin_utils)
820 AC_MSG_CHECKING([whether to build libraries])
821 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
822 if test x$build_bitcoin_libs = xyes; then
823 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
824 AC_CONFIG_FILES([libzcashconsensus.pc:libzcashconsensus.pc.in])
827 AC_MSG_RESULT($build_bitcoin_libs)
831 if test "x$use_ccache" != "xno"; then
832 AC_MSG_CHECKING(if ccache should be used)
833 if test x$CCACHE = x; then
834 if test "x$use_ccache" = "xyes"; then
835 AC_MSG_ERROR([ccache not found.]);
841 CC="$ac_cv_path_CCACHE $CC"
842 CXX="$ac_cv_path_CCACHE $CXX"
844 AC_MSG_RESULT($use_ccache)
846 if test "x$use_ccache" = "xyes"; then
847 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
851 AC_MSG_CHECKING([if wallet should be enabled])
852 if test x$enable_wallet != xno; then
854 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
861 AC_MSG_CHECKING([if mining should be enabled])
862 if test x$enable_mining != xno; then
864 AC_DEFINE(ENABLE_MINING, 1, [Define to 1 to enable mining functions])
871 AC_MSG_CHECKING([if rust should be enabled])
872 if test x$enable_rust != xno; then
874 AC_DEFINE(ENABLE_RUST, 1, [Define to 1 to enable Rust language dependent functions])
880 dnl enable upnp support
881 AC_MSG_CHECKING([whether to build with support for UPnP])
882 if test x$have_miniupnpc = xno; then
883 if test x$use_upnp = xyes; then
884 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
888 if test x$use_upnp != xno; then
890 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
893 if test x$use_upnp_default != xno; then
897 AC_MSG_RESULT($use_upnp_default)
898 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
899 if test x$TARGET_OS = xwindows; then
900 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
907 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
909 AM_CONDITIONAL([ENABLE_PROTON], [test "x$use_proton" = "xyes"])
911 AC_MSG_CHECKING([whether to build test_bitcoin])
912 if test x$use_tests = xyes; then
920 AC_MSG_CHECKING([whether to reduce exports])
921 if test x$use_reduce_exports = xyes; then
927 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$use_tests = xnononono; then
928 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon or --enable-tests])
931 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
932 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
933 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
934 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
935 AM_CONDITIONAL([ENABLE_MINING],[test x$enable_mining = xyes])
936 AM_CONDITIONAL([ENABLE_RUST],[test x$enable_rust = xyes])
937 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
938 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
939 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
940 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
941 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
942 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
944 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
945 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
946 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
947 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
948 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
949 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
950 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
951 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
952 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
953 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
954 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
955 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
958 AC_SUBST(LIBTOOL_APP_LDFLAGS)
962 AC_SUBST(LEVELDB_TARGET_FLAGS)
963 AC_SUBST(MINIUPNPC_CPPFLAGS)
964 AC_SUBST(MINIUPNPC_LIBS)
967 AC_SUBST(LIBSNARK_LIBS)
968 AC_SUBST(LIBZCASH_LIBS)
969 AC_SUBST(PROTON_LIBS)
970 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi src/test/buildenv.py])
971 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
972 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
974 dnl boost's m4 checks do something really nasty: they export these vars. As a
975 dnl result, they leak into secp256k1's configure and crazy things happen.
976 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
977 CPPFLAGS_TEMP="$CPPFLAGS"
979 CPPFLAGS="$CPPFLAGS_TEMP"
981 LDFLAGS_TEMP="$LDFLAGS"
983 LDFLAGS="$LDFLAGS_TEMP"
989 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
990 unset PKG_CONFIG_PATH
991 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
993 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
994 unset PKG_CONFIG_LIBDIR
995 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
997 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
998 AC_CONFIG_SUBDIRS([src/secp256k1 src/univalue])
1002 dnl Taken from https://wiki.debian.org/RpathIssue
1005 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1006 sed < libtool > libtool-2 \
1007 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1008 mv libtool-2 libtool