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, 6)
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],
91 AC_ARG_WITH([miniupnpc],
92 [AS_HELP_STRING([--with-miniupnpc],
93 [enable UPNP (default is yes if libminiupnpc is found)])],
97 AC_ARG_ENABLE([upnp-default],
98 [AS_HELP_STRING([--enable-upnp-default],
99 [if UPNP is enabled, turn it on at startup (default is no)])],
100 [use_upnp_default=$enableval],
101 [use_upnp_default=no])
104 AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
105 [use_tests=$enableval],
108 AC_ARG_ENABLE(gui-tests,
109 AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)]),
110 [use_gui_tests=$enableval],
111 [use_gui_tests=$use_tests])
113 AC_ARG_WITH([comparison-tool],
114 AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
115 [use_comparison_tool=$withval],
116 [use_comparison_tool=no])
118 AC_ARG_ENABLE([comparison-tool-reorg-tests],
119 AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
120 [use_comparison_tool_reorg_tests=$enableval],
121 [use_comparison_tool_reorg_tests=no])
123 AC_ARG_WITH([qrencode],
124 [AS_HELP_STRING([--with-qrencode],
125 [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
129 AC_ARG_ENABLE([hardening],
130 [AS_HELP_STRING([--enable-hardening],
131 [attempt to harden the resulting executables (default is yes)])],
132 [use_hardening=$enableval],
135 AC_ARG_ENABLE([reduce-exports],
136 [AS_HELP_STRING([--enable-reduce-exports],
137 [attempt to reduce exported symbols in the resulting executables (default is no)])],
138 [use_reduce_exports=$enableval],
139 [use_reduce_exports=no])
141 AC_ARG_ENABLE([ccache],
142 [AS_HELP_STRING([--enable-ccache],
143 [use ccache for building (default is yes if ccache is found)])],
144 [use_ccache=$enableval],
147 AC_ARG_ENABLE([lcov],
148 [AS_HELP_STRING([--enable-lcov],
149 [enable lcov testing (default is no)])],
153 AC_ARG_ENABLE([glibc-back-compat],
154 [AS_HELP_STRING([--enable-glibc-back-compat],
155 [enable backwards compatibility with glibc])],
156 [use_glibc_compat=$enableval],
157 [use_glibc_compat=no])
160 [AS_HELP_STRING([--disable-zmq],
161 [disable ZMQ notifications])],
162 [use_zmq=$enableval],
165 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
168 [AS_HELP_STRING([--disable-man],
169 [do not install man pages (default is to install)])],,
171 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
174 AC_ARG_ENABLE([debug],
175 [AS_HELP_STRING([--enable-debug],
176 [use debug compiler flags and macros (default is no)])],
177 [enable_debug=$enableval],
180 if test "x$enable_debug" = xyes; then
181 if test "x$GCC" = xyes; then
182 CFLAGS="-g3 -O0 -DDEBUG"
185 if test "x$GXX" = xyes; then
186 CXXFLAGS="-g3 -O0 -DDEBUG"
190 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
191 ## compatibility with the legacy buildsystem.
193 if test "x$CXXFLAGS_overridden" = "xno"; then
194 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
196 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
199 [AS_HELP_STRING([--with-utils],
200 [build zcash-cli zcash-tx (default=yes)])],
201 [build_bitcoin_utils=$withval],
202 [build_bitcoin_utils=yes])
205 [AS_HELP_STRING([--with-libs],
206 [build libraries (default=yes)])],
207 [build_bitcoin_libs=$withval],
208 [build_bitcoin_libs=yes])
210 AC_ARG_WITH([daemon],
211 [AS_HELP_STRING([--with-daemon],
212 [build bitcoind daemon (default=yes)])],
213 [build_bitcoind=$withval],
214 [build_bitcoind=yes])
222 #pkgconfig does more harm than good with MinGW
226 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
227 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
228 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
229 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
230 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
231 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
232 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
233 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
234 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
235 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
236 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
237 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
238 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
239 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
240 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
241 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
242 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
243 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
244 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
246 # -static is interpreted by libtool, where it has a different meaning.
247 # In libtool-speak, it's -all-static.
248 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
250 AC_PATH_PROG([MAKENSIS], [makensis], none)
251 if test x$MAKENSIS = xnone; then
252 AC_MSG_WARN("makensis not found. Cannot create installer.")
255 AC_PATH_TOOL(WINDRES, windres, none)
256 if test x$WINDRES = xnone; then
257 AC_MSG_ERROR("windres not found")
260 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
261 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
262 if test "x$CXXFLAGS_overridden" = "xno"; then
263 CXXFLAGS="$CXXFLAGS -w"
266 i?86-*) WINDOWS_BITS=32 ;;
267 x86_64-*) WINDOWS_BITS=64 ;;
268 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
270 AC_SUBST(WINDOWS_BITS)
272 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
273 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
274 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
275 dnl also overridden to prevent their insertion later.
276 dnl This should only affect dll's.
277 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
283 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
284 if test x$cross_compiling != xyes; then
286 AC_CHECK_PROG([PORT],port, port)
287 if test x$PORT = xport; then
288 dnl add default macports paths
289 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
290 LIBS="$LIBS -L/opt/local/lib"
291 if test -d /opt/local/include/db62; then
292 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db62"
293 LIBS="$LIBS -L/opt/local/lib/db62"
297 AC_CHECK_PROG([BREW],brew, brew)
298 if test x$BREW = xbrew; then
299 dnl These Homebrew packages may be keg-only, meaning that they won't be found
300 dnl in expected paths because they may conflict with system files. Ask
301 dnl Homebrew where each one is located, then adjust paths accordingly.
302 dnl It's safe to add these paths even if the functionality is disabled by
303 dnl the user (--without-wallet or --without-gui for example).
305 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
306 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
307 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
308 if test x$openssl_prefix != x; then
309 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
310 export PKG_CONFIG_PATH
312 if test x$bdb_prefix != x; then
313 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
314 LIBS="$LIBS -L$bdb_prefix/lib"
316 if test x$qt5_prefix != x; then
317 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
318 export PKG_CONFIG_PATH
327 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
328 AC_PATH_TOOL([OTOOL], [otool], otool)
329 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
331 dnl libtool will try to strip the static lib, which is a problem for
332 dnl cross-builds because strip attempts to call a hard-coded ld,
333 dnl which may not exist in the path. Stripping the .a is not
334 dnl necessary, so just disable it.
340 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
341 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
350 if test x$use_comparison_tool != xno; then
351 if test x$JAVA = x; then
352 AC_MSG_ERROR("comparison tool set but java not found")
354 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
357 if test x$use_comparison_tool_reorg_tests != xno; then
358 if test x$use_comparison_tool = x; then
359 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
361 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
363 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
366 if test x$use_lcov = xyes; then
367 if test x$LCOV = x; then
368 AC_MSG_ERROR("lcov testing requested but lcov not found")
370 if test x$GCOV = x; then
371 AC_MSG_ERROR("lcov testing requested but gcov not found")
373 if test x$JAVA = x; then
374 AC_MSG_ERROR("lcov testing requested but java not found")
376 if test x$GENHTML = x; then
377 AC_MSG_ERROR("lcov testing requested but genhtml not found")
379 if test x$use_comparison_tool = x; then
380 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
382 LCOV="$LCOV --gcov-tool=$GCOV --rc lcov_branch_coverage=1"
383 GENHTML="$GENHTML --branch-coverage"
384 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
385 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
388 dnl Check for endianness
391 dnl Check for pthread compile/link requirements
394 # The following macro will add the necessary defines to bitcoin-config.h, but
395 # they also need to be passed down to any subprojects. Pull the results out of
396 # the cache and add them to CPPFLAGS.
398 # detect POSIX or GNU variant of strerror_r
401 if test x$ac_cv_sys_file_offset_bits != x &&
402 test x$ac_cv_sys_file_offset_bits != xno &&
403 test x$ac_cv_sys_file_offset_bits != xunknown; then
404 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
407 if test x$ac_cv_sys_large_files != x &&
408 test x$ac_cv_sys_large_files != xno &&
409 test x$ac_cv_sys_large_files != xunknown; then
410 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
413 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
415 AX_GCC_FUNC_ATTRIBUTE([visibility])
416 AX_GCC_FUNC_ATTRIBUTE([dllexport])
417 AX_GCC_FUNC_ATTRIBUTE([dllimport])
419 if test x$use_glibc_compat != xno; then
421 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
422 #in anyway for back-compat.
423 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
425 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
426 # See which one is present here.
427 AC_MSG_CHECKING(__fdelt_chk type)
428 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
429 #undef _FORTIFY_SOURCE
431 #define _FORTIFY_SOURCE 2
432 #include <sys/select.h>
433 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
434 [ fdelt_type="long unsigned int"],
435 [ fdelt_type="long int"])
436 AC_MSG_RESULT($fdelt_type)
437 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
439 AC_SEARCH_LIBS([clock_gettime],[rt])
442 if test x$use_hardening != xno; then
443 AX_CHECK_COMPILE_FLAG([-Wformat],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat"],[AC_MSG_ERROR(Cannot enable -Wformat)])
444 AX_CHECK_COMPILE_FLAG([-Wformat-security],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat-security"],[AC_MSG_ERROR(Cannot enable -Wformat-security)],[-Wformat])
445 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"],[AC_MSG_ERROR(Cannot enable -Wstack-protector)])
446 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"],[AC_MSG_ERROR(Cannot enable -fstack-protector-all)])
448 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
449 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
450 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
451 ],[AC_MSG_ERROR(Cannot enable -U_FORTIFY_SOURCE)])
452 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
453 ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)])
455 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
456 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
458 if test x$TARGET_OS != xwindows; then
459 # All windows code is PIC, forcing it on just adds useless compile warnings
460 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"],[AC_MSG_ERROR(Cannot enable -fPIE)])
461 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"],[AC_MSG_ERROR(Cannot enable -pie)])
463 # These are only available on Windows.
464 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"],[AC_MSG_ERROR(Cannot enable --dynamicbase)])
465 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"],[AC_MSG_ERROR(Cannot enable --nxcompat)])
470 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
474 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
475 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
476 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
477 OBJCXXFLAGS="$CXXFLAGS"
480 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
481 if test x$TARGET_OS = xdarwin; then
482 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
485 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])
486 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
487 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
489 AC_CHECK_DECLS([strnlen])
491 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
494 #elif HAVE_SYS_ENDIAN_H
495 #include <sys/endian.h>
498 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
500 #include <byteswap.h>
503 dnl Check for MSG_NOSIGNAL
504 AC_MSG_CHECKING(for MSG_NOSIGNAL)
505 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
506 [[ int f = MSG_NOSIGNAL; ]])],
507 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
511 AC_MSG_CHECKING([for visibility attribute])
512 AC_LINK_IFELSE([AC_LANG_SOURCE([
513 int foo_def( void ) __attribute__((visibility("default")));
517 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
522 if test x$use_reduce_exports = xyes; then
523 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
528 if test x$use_reduce_exports = xyes; then
529 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
530 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
536 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
537 AC_SUBST(LEVELDB_CPPFLAGS)
541 if test x$enable_wallet != xno; then
542 dnl Check for libdb_cxx only if wallet enabled
546 dnl Check for libminiupnpc (optional)
547 if test x$use_upnp != xno; then
549 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
550 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
557 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
558 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
560 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
566 if test x$use_boost = xyes; then
568 dnl Check for boost libs
572 AX_BOOST_PROGRAM_OPTIONS
577 if test x$use_reduce_exports = xyes; then
578 AC_MSG_CHECKING([for working boost reduced exports])
579 TEMP_CPPFLAGS="$CPPFLAGS"
580 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
581 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
582 @%:@include <boost/version.hpp>
584 #if BOOST_VERSION >= 104900
585 // Everything is okay
587 # error Boost version is too old
592 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
594 CPPFLAGS="$TEMP_CPPFLAGS"
598 if test x$use_reduce_exports = xyes; then
599 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
600 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
603 if test x$use_tests = xyes; then
605 if test x$HEXDUMP = x; then
606 AC_MSG_ERROR(hexdump is required for tests)
610 if test x$use_boost = xyes; then
612 AX_BOOST_UNIT_TEST_FRAMEWORK
614 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
615 AC_MSG_CHECKING([for dynamic linked boost test])
617 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
618 TEMP_CPPFLAGS="$CPPFLAGS"
619 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
620 AC_LINK_IFELSE([AC_LANG_SOURCE([
621 #define BOOST_TEST_DYN_LINK
622 #define BOOST_TEST_MAIN
623 #include <boost/test/unit_test.hpp>
627 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
630 CPPFLAGS="$TEMP_CPPFLAGS"
635 if test x$use_boost = xyes; then
637 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
639 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
640 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
641 dnl a working version is available, else fall back to sleep. sleep was removed
643 dnl If neither is available, abort.
645 LIBS="$BOOST_LIBS $LIBS"
646 TEMP_CPPFLAGS="$CPPFLAGS"
647 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
648 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
649 #include <boost/thread/thread.hpp>
650 #include <boost/version.hpp>
652 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
653 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
659 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
662 CPPFLAGS="$TEMP_CPPFLAGS"
664 if test x$boost_sleep != xyes; then
666 LIBS="$BOOST_LIBS $LIBS"
667 TEMP_CPPFLAGS="$CPPFLAGS"
668 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
669 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
670 #include <boost/version.hpp>
671 #include <boost/thread.hpp>
672 #include <boost/date_time/posix_time/posix_time_types.hpp>
674 #if BOOST_VERSION <= 105600
675 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
680 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
683 CPPFLAGS="$TEMP_CPPFLAGS"
686 if test x$boost_sleep != xyes; then
687 AC_MSG_ERROR(No working boost sleep implementation found.)
692 if test x$use_pkgconfig = xyes; then
694 if test x"$PKG_CONFIG" = "x"; then
695 AC_MSG_ERROR(pkg-config not found.)
702 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
703 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
704 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
705 if test x$use_qr != xno; then
706 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
709 if test "x$use_zmq" = "xyes"; then
710 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
711 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
712 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
713 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
716 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
722 echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++, libgmp'
724 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
725 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
727 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
728 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
730 if test "x$use_zmq" = "xyes"; then
731 AC_CHECK_HEADER([zmq.h],
732 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
733 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
735 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
736 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
737 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
739 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
741 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
744 if test "x$use_zmq" = "xyes"; then
745 dnl Assume libzmq was built for static linking
748 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
753 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
754 if test x$use_qr != xno; then
755 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
756 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
760 # These packages don't provide pkgconfig config files across all
761 # platforms, so we use older autoconf detection mechanisms:
762 AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing))
763 AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)])
765 AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing))
766 AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)])
768 # libsnark header layout is broken unless cpp's -I is passed with the
769 # libsnark directory, so for now we use this hideous workaround:
770 echo 'Hunting for libsnark include directory...'
771 [LIBSNARK_INCDIR="$(echo "$CPPFLAGS" | sed 's,^.*-I\([^ ]*/include\).*$,\1/libsnark,')"]
772 if test -d "$LIBSNARK_INCDIR"; then
773 echo "Found libsnark include directory: $LIBSNARK_INCDIR"
775 AC_MSG_ERROR(libsnark include directory not found)
778 CPPFLAGS="-I$LIBSNARK_INCDIR $CPPFLAGS"
780 # Now check for libsnark compilability using traditional autoconf tests:
781 AC_CHECK_HEADER([libsnark/gadgetlib1/gadget.hpp],,AC_MSG_ERROR(libsnark headers missing))
782 AC_CHECK_LIB([snark],[main],LIBSNARK_LIBS=-lsnark, [AC_MSG_ERROR(libsnark missing)], [-lgmpxx])
784 LIBZCASH_LIBS="-lsnark -lgmp -lgmpxx -lboost_system-mt -lcrypto -lsodium -fopenmp"
786 CXXFLAGS_TEMP="$CXXFLAGS"
788 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
789 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS $GMP_LIBS $GMPXX_LIBS"
790 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
791 CXXFLAGS="$CXXFLAGS_TEMP"
794 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
796 AC_MSG_CHECKING([whether to build bitcoind])
797 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
798 AC_MSG_RESULT($build_bitcoind)
800 AC_MSG_CHECKING([whether to build utils (zcash-cli zcash-tx)])
801 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
802 AC_MSG_RESULT($build_bitcoin_utils)
804 AC_MSG_CHECKING([whether to build libraries])
805 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
806 if test x$build_bitcoin_libs = xyes; then
807 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
808 AC_CONFIG_FILES([libzcashconsensus.pc:libzcashconsensus.pc.in])
811 AC_MSG_RESULT($build_bitcoin_libs)
815 if test "x$use_ccache" != "xno"; then
816 AC_MSG_CHECKING(if ccache should be used)
817 if test x$CCACHE = x; then
818 if test "x$use_ccache" = "xyes"; then
819 AC_MSG_ERROR([ccache not found.]);
825 CC="$ac_cv_path_CCACHE $CC"
826 CXX="$ac_cv_path_CCACHE $CXX"
828 AC_MSG_RESULT($use_ccache)
830 if test "x$use_ccache" = "xyes"; then
831 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
835 AC_MSG_CHECKING([if wallet should be enabled])
836 if test x$enable_wallet != xno; then
838 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
845 AC_MSG_CHECKING([if mining should be enabled])
846 if test x$enable_mining != xno; then
848 AC_DEFINE(ENABLE_MINING, 1, [Define to 1 to enable mining functions])
854 dnl enable upnp support
855 AC_MSG_CHECKING([whether to build with support for UPnP])
856 if test x$have_miniupnpc = xno; then
857 if test x$use_upnp = xyes; then
858 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
862 if test x$use_upnp != xno; then
864 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
867 if test x$use_upnp_default != xno; then
871 AC_MSG_RESULT($use_upnp_default)
872 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
873 if test x$TARGET_OS = xwindows; then
874 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
881 dnl these are only used when qt is enabled
883 if test x$bitcoin_enable_qt != xno; then
884 dnl enable dbus support
885 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
886 if test x$bitcoin_enable_qt_dbus != xno; then
887 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
889 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
891 dnl enable qr support
892 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
893 if test x$have_qrencode = xno; then
894 if test x$use_qr = xyes; then
895 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
899 if test x$use_qr != xno; then
901 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
908 if test x$XGETTEXT = x; then
909 AC_MSG_WARN("xgettext is required to update qt translations")
912 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
913 if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
921 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
923 AC_MSG_CHECKING([whether to build test_bitcoin])
924 if test x$use_tests = xyes; then
932 AC_MSG_CHECKING([whether to reduce exports])
933 if test x$use_reduce_exports = xyes; then
939 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
940 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
943 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
944 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
945 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
946 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
947 AM_CONDITIONAL([ENABLE_MINING],[test x$enable_mining = xyes])
948 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
949 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
950 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
951 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
952 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
953 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
954 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
955 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
956 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
958 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
959 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
960 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
961 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
962 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
963 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
964 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
965 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
966 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
967 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
968 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
969 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
972 AC_SUBST(LIBTOOL_APP_LDFLAGS)
977 AC_SUBST(LEVELDB_TARGET_FLAGS)
978 AC_SUBST(MINIUPNPC_CPPFLAGS)
979 AC_SUBST(MINIUPNPC_LIBS)
982 AC_SUBST(LIBSNARK_LIBS)
983 AC_SUBST(LIBZCASH_LIBS)
984 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
985 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
986 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
988 dnl boost's m4 checks do something really nasty: they export these vars. As a
989 dnl result, they leak into secp256k1's configure and crazy things happen.
990 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
991 CPPFLAGS_TEMP="$CPPFLAGS"
993 CPPFLAGS="$CPPFLAGS_TEMP"
995 LDFLAGS_TEMP="$LDFLAGS"
997 LDFLAGS="$LDFLAGS_TEMP"
1003 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1004 unset PKG_CONFIG_PATH
1005 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1007 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1008 unset PKG_CONFIG_LIBDIR
1009 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1011 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
1012 AC_CONFIG_SUBDIRS([src/secp256k1 src/univalue])
1016 dnl Taken from https://wiki.debian.org/RpathIssue
1019 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1020 sed < libtool > libtool-2 \
1021 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1022 mv libtool-2 libtool