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, 5)
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 AC_ARG_ENABLE([debug],
169 [AS_HELP_STRING([--enable-debug],
170 [use debug compiler flags and macros (default is no)])],
171 [enable_debug=$enableval],
174 if test "x$enable_debug" = xyes; then
175 if test "x$GCC" = xyes; then
176 CFLAGS="-g3 -O0 -DDEBUG"
179 if test "x$GXX" = xyes; then
180 CXXFLAGS="-g3 -O0 -DDEBUG"
184 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
185 ## compatibility with the legacy buildsystem.
187 if test "x$CXXFLAGS_overridden" = "xno"; then
188 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
190 CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
193 [AS_HELP_STRING([--with-utils],
194 [build zcash-cli zcash-tx (default=yes)])],
195 [build_bitcoin_utils=$withval],
196 [build_bitcoin_utils=yes])
199 [AS_HELP_STRING([--with-libs],
200 [build libraries (default=yes)])],
201 [build_bitcoin_libs=$withval],
202 [build_bitcoin_libs=yes])
204 AC_ARG_WITH([daemon],
205 [AS_HELP_STRING([--with-daemon],
206 [build bitcoind daemon (default=yes)])],
207 [build_bitcoind=$withval],
208 [build_bitcoind=yes])
216 #pkgconfig does more harm than good with MinGW
220 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
221 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
222 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
223 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
224 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
225 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
226 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
227 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
228 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
229 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
230 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
231 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
232 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
233 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
234 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
235 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
236 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
237 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
238 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
240 # -static is interpreted by libtool, where it has a different meaning.
241 # In libtool-speak, it's -all-static.
242 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
244 AC_PATH_PROG([MAKENSIS], [makensis], none)
245 if test x$MAKENSIS = xnone; then
246 AC_MSG_WARN("makensis not found. Cannot create installer.")
249 AC_PATH_TOOL(WINDRES, windres, none)
250 if test x$WINDRES = xnone; then
251 AC_MSG_ERROR("windres not found")
254 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
255 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
256 if test "x$CXXFLAGS_overridden" = "xno"; then
257 CXXFLAGS="$CXXFLAGS -w"
260 i?86-*) WINDOWS_BITS=32 ;;
261 x86_64-*) WINDOWS_BITS=64 ;;
262 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
264 AC_SUBST(WINDOWS_BITS)
266 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
267 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
268 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
269 dnl also overridden to prevent their insertion later.
270 dnl This should only affect dll's.
271 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
277 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
278 if test x$cross_compiling != xyes; then
280 AC_CHECK_PROG([PORT],port, port)
281 if test x$PORT = xport; then
282 dnl add default macports paths
283 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
284 LIBS="$LIBS -L/opt/local/lib"
285 if test -d /opt/local/include/db62; then
286 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db62"
287 LIBS="$LIBS -L/opt/local/lib/db62"
291 AC_CHECK_PROG([BREW],brew, brew)
292 if test x$BREW = xbrew; then
293 dnl These Homebrew packages may be keg-only, meaning that they won't be found
294 dnl in expected paths because they may conflict with system files. Ask
295 dnl Homebrew where each one is located, then adjust paths accordingly.
296 dnl It's safe to add these paths even if the functionality is disabled by
297 dnl the user (--without-wallet or --without-gui for example).
299 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
300 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
301 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
302 if test x$openssl_prefix != x; then
303 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
304 export PKG_CONFIG_PATH
306 if test x$bdb_prefix != x; then
307 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
308 LIBS="$LIBS -L$bdb_prefix/lib"
310 if test x$qt5_prefix != x; then
311 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
312 export PKG_CONFIG_PATH
321 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
322 AC_PATH_TOOL([OTOOL], [otool], otool)
323 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
325 dnl libtool will try to strip the static lib, which is a problem for
326 dnl cross-builds because strip attempts to call a hard-coded ld,
327 dnl which may not exist in the path. Stripping the .a is not
328 dnl necessary, so just disable it.
334 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
335 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
344 if test x$use_comparison_tool != xno; then
345 if test x$JAVA = x; then
346 AC_MSG_ERROR("comparison tool set but java not found")
348 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
351 if test x$use_comparison_tool_reorg_tests != xno; then
352 if test x$use_comparison_tool = x; then
353 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
355 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
357 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
360 if test x$use_lcov = xyes; then
361 if test x$LCOV = x; then
362 AC_MSG_ERROR("lcov testing requested but lcov not found")
364 if test x$GCOV = x; then
365 AC_MSG_ERROR("lcov testing requested but gcov not found")
367 if test x$JAVA = x; then
368 AC_MSG_ERROR("lcov testing requested but java not found")
370 if test x$GENHTML = x; then
371 AC_MSG_ERROR("lcov testing requested but genhtml not found")
373 if test x$use_comparison_tool = x; then
374 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
376 LCOV="$LCOV --gcov-tool=$GCOV --rc lcov_branch_coverage=1"
377 GENHTML="$GENHTML --branch-coverage"
378 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
379 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
382 dnl Check for endianness
385 dnl Check for pthread compile/link requirements
388 # The following macro will add the necessary defines to bitcoin-config.h, but
389 # they also need to be passed down to any subprojects. Pull the results out of
390 # the cache and add them to CPPFLAGS.
392 # detect POSIX or GNU variant of strerror_r
395 if test x$ac_cv_sys_file_offset_bits != x &&
396 test x$ac_cv_sys_file_offset_bits != xno &&
397 test x$ac_cv_sys_file_offset_bits != xunknown; then
398 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
401 if test x$ac_cv_sys_large_files != x &&
402 test x$ac_cv_sys_large_files != xno &&
403 test x$ac_cv_sys_large_files != xunknown; then
404 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
407 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
409 AX_GCC_FUNC_ATTRIBUTE([visibility])
410 AX_GCC_FUNC_ATTRIBUTE([dllexport])
411 AX_GCC_FUNC_ATTRIBUTE([dllimport])
413 if test x$use_glibc_compat != xno; then
415 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
416 #in anyway for back-compat.
417 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
419 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
420 # See which one is present here.
421 AC_MSG_CHECKING(__fdelt_chk type)
422 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
423 #undef _FORTIFY_SOURCE
425 #define _FORTIFY_SOURCE 2
426 #include <sys/select.h>
427 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
428 [ fdelt_type="long unsigned int"],
429 [ fdelt_type="long int"])
430 AC_MSG_RESULT($fdelt_type)
431 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
433 AC_SEARCH_LIBS([clock_gettime],[rt])
436 if test x$use_hardening != xno; then
437 AX_CHECK_COMPILE_FLAG([-Wformat],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat"],[AC_MSG_ERROR(Cannot enable -Wformat)])
438 AX_CHECK_COMPILE_FLAG([-Wformat-security],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat-security"],[AC_MSG_ERROR(Cannot enable -Wformat-security)],[-Wformat])
439 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"],[AC_MSG_ERROR(Cannot enable -Wstack-protector)])
440 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"],[AC_MSG_ERROR(Cannot enable -fstack-protector-all)])
442 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
443 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
444 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
445 ],[AC_MSG_ERROR(Cannot enable -U_FORTIFY_SOURCE)])
446 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
447 ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)])
449 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
450 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
452 if test x$TARGET_OS != xwindows; then
453 # All windows code is PIC, forcing it on just adds useless compile warnings
454 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"],[AC_MSG_ERROR(Cannot enable -fPIE)])
455 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"],[AC_MSG_ERROR(Cannot enable -pie)])
457 # These are only available on Windows.
458 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"],[AC_MSG_ERROR(Cannot enable --dynamicbase)])
459 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"],[AC_MSG_ERROR(Cannot enable --nxcompat)])
464 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
468 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
469 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
470 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
471 OBJCXXFLAGS="$CXXFLAGS"
474 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
475 if test x$TARGET_OS = xdarwin; then
476 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
479 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])
480 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
481 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
483 AC_CHECK_DECLS([strnlen])
485 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
488 #elif HAVE_SYS_ENDIAN_H
489 #include <sys/endian.h>
492 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
494 #include <byteswap.h>
497 dnl Check for MSG_NOSIGNAL
498 AC_MSG_CHECKING(for MSG_NOSIGNAL)
499 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
500 [[ int f = MSG_NOSIGNAL; ]])],
501 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
505 AC_MSG_CHECKING([for visibility attribute])
506 AC_LINK_IFELSE([AC_LANG_SOURCE([
507 int foo_def( void ) __attribute__((visibility("default")));
511 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
516 if test x$use_reduce_exports = xyes; then
517 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
522 if test x$use_reduce_exports = xyes; then
523 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
524 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
530 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
531 AC_SUBST(LEVELDB_CPPFLAGS)
535 if test x$enable_wallet != xno; then
536 dnl Check for libdb_cxx only if wallet enabled
540 dnl Check for libminiupnpc (optional)
541 if test x$use_upnp != xno; then
543 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
544 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
551 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
552 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
554 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
560 if test x$use_boost = xyes; then
562 dnl Check for boost libs
566 AX_BOOST_PROGRAM_OPTIONS
571 if test x$use_reduce_exports = xyes; then
572 AC_MSG_CHECKING([for working boost reduced exports])
573 TEMP_CPPFLAGS="$CPPFLAGS"
574 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
575 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
576 @%:@include <boost/version.hpp>
578 #if BOOST_VERSION >= 104900
579 // Everything is okay
581 # error Boost version is too old
586 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
588 CPPFLAGS="$TEMP_CPPFLAGS"
592 if test x$use_reduce_exports = xyes; then
593 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
594 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
597 if test x$use_tests = xyes; then
599 if test x$HEXDUMP = x; then
600 AC_MSG_ERROR(hexdump is required for tests)
604 if test x$use_boost = xyes; then
606 AX_BOOST_UNIT_TEST_FRAMEWORK
608 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
609 AC_MSG_CHECKING([for dynamic linked boost test])
611 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
612 TEMP_CPPFLAGS="$CPPFLAGS"
613 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
614 AC_LINK_IFELSE([AC_LANG_SOURCE([
615 #define BOOST_TEST_DYN_LINK
616 #define BOOST_TEST_MAIN
617 #include <boost/test/unit_test.hpp>
621 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
624 CPPFLAGS="$TEMP_CPPFLAGS"
629 if test x$use_boost = xyes; then
631 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
633 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
634 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
635 dnl a working version is available, else fall back to sleep. sleep was removed
637 dnl If neither is available, abort.
639 LIBS="$BOOST_LIBS $LIBS"
640 TEMP_CPPFLAGS="$CPPFLAGS"
641 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
642 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
643 #include <boost/thread/thread.hpp>
644 #include <boost/version.hpp>
646 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
647 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
653 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
656 CPPFLAGS="$TEMP_CPPFLAGS"
658 if test x$boost_sleep != xyes; then
660 LIBS="$BOOST_LIBS $LIBS"
661 TEMP_CPPFLAGS="$CPPFLAGS"
662 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
663 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
664 #include <boost/version.hpp>
665 #include <boost/thread.hpp>
666 #include <boost/date_time/posix_time/posix_time_types.hpp>
668 #if BOOST_VERSION <= 105600
669 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
674 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
677 CPPFLAGS="$TEMP_CPPFLAGS"
680 if test x$boost_sleep != xyes; then
681 AC_MSG_ERROR(No working boost sleep implementation found.)
686 if test x$use_pkgconfig = xyes; then
688 if test x"$PKG_CONFIG" = "x"; then
689 AC_MSG_ERROR(pkg-config not found.)
696 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
697 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
698 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
699 if test x$use_qr != xno; then
700 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
703 if test "x$use_zmq" = "xyes"; then
704 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
705 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
706 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
707 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
710 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
716 echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++, libgmp'
718 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
719 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
721 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
722 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
724 if test "x$use_zmq" = "xyes"; then
725 AC_CHECK_HEADER([zmq.h],
726 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
727 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
729 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
730 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
731 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
733 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
735 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
738 if test "x$use_zmq" = "xyes"; then
739 dnl Assume libzmq was built for static linking
742 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
747 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
748 if test x$use_qr != xno; then
749 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
750 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
754 # These packages don't provide pkgconfig config files across all
755 # platforms, so we use older autoconf detection mechanisms:
756 AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing))
757 AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)])
759 AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing))
760 AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)])
762 # libsnark header layout is broken unless cpp's -I is passed with the
763 # libsnark directory, so for now we use this hideous workaround:
764 echo 'Hunting for libsnark include directory...'
765 [LIBSNARK_INCDIR="$(echo "$CPPFLAGS" | sed 's,^.*-I\([^ ]*/include\).*$,\1/libsnark,')"]
766 if test -d "$LIBSNARK_INCDIR"; then
767 echo "Found libsnark include directory: $LIBSNARK_INCDIR"
769 AC_MSG_ERROR(libsnark include directory not found)
772 CPPFLAGS="-I$LIBSNARK_INCDIR $CPPFLAGS"
774 # Now check for libsnark compilability using traditional autoconf tests:
775 AC_CHECK_HEADER([libsnark/gadgetlib1/gadget.hpp],,AC_MSG_ERROR(libsnark headers missing))
776 AC_CHECK_LIB([snark],[main],LIBSNARK_LIBS=-lsnark, [AC_MSG_ERROR(libsnark missing)], [-lgmpxx])
778 LIBZCASH_LIBS="-lsnark -lgmp -lgmpxx -lboost_system-mt -lcrypto -lsodium -fopenmp"
780 CXXFLAGS_TEMP="$CXXFLAGS"
782 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
783 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS $GMP_LIBS $GMPXX_LIBS"
784 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
785 CXXFLAGS="$CXXFLAGS_TEMP"
788 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
790 AC_MSG_CHECKING([whether to build bitcoind])
791 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
792 AC_MSG_RESULT($build_bitcoind)
794 AC_MSG_CHECKING([whether to build utils (zcash-cli zcash-tx)])
795 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
796 AC_MSG_RESULT($build_bitcoin_utils)
798 AC_MSG_CHECKING([whether to build libraries])
799 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
800 if test x$build_bitcoin_libs = xyes; then
801 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
802 AC_CONFIG_FILES([libzcashconsensus.pc:libzcashconsensus.pc.in])
805 AC_MSG_RESULT($build_bitcoin_libs)
809 if test "x$use_ccache" != "xno"; then
810 AC_MSG_CHECKING(if ccache should be used)
811 if test x$CCACHE = x; then
812 if test "x$use_ccache" = "xyes"; then
813 AC_MSG_ERROR([ccache not found.]);
819 CC="$ac_cv_path_CCACHE $CC"
820 CXX="$ac_cv_path_CCACHE $CXX"
822 AC_MSG_RESULT($use_ccache)
824 if test "x$use_ccache" = "xyes"; then
825 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
829 AC_MSG_CHECKING([if wallet should be enabled])
830 if test x$enable_wallet != xno; then
832 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
839 AC_MSG_CHECKING([if mining should be enabled])
840 if test x$enable_mining != xno; then
842 AC_DEFINE(ENABLE_MINING, 1, [Define to 1 to enable mining functions])
848 dnl enable upnp support
849 AC_MSG_CHECKING([whether to build with support for UPnP])
850 if test x$have_miniupnpc = xno; then
851 if test x$use_upnp = xyes; then
852 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
856 if test x$use_upnp != xno; then
858 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
861 if test x$use_upnp_default != xno; then
865 AC_MSG_RESULT($use_upnp_default)
866 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
867 if test x$TARGET_OS = xwindows; then
868 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
875 dnl these are only used when qt is enabled
877 if test x$bitcoin_enable_qt != xno; then
878 dnl enable dbus support
879 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
880 if test x$bitcoin_enable_qt_dbus != xno; then
881 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
883 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
885 dnl enable qr support
886 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
887 if test x$have_qrencode = xno; then
888 if test x$use_qr = xyes; then
889 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
893 if test x$use_qr != xno; then
895 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
902 if test x$XGETTEXT = x; then
903 AC_MSG_WARN("xgettext is required to update qt translations")
906 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
907 if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
915 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
917 AC_MSG_CHECKING([whether to build test_bitcoin])
918 if test x$use_tests = xyes; then
926 AC_MSG_CHECKING([whether to reduce exports])
927 if test x$use_reduce_exports = xyes; then
933 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
934 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
937 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
938 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
939 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
940 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
941 AM_CONDITIONAL([ENABLE_MINING],[test x$enable_mining = xyes])
942 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
943 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
944 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
945 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
946 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
947 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
948 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
949 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
950 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
952 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
953 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
954 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
955 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
956 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
957 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
958 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
959 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
960 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
961 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
962 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
963 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
966 AC_SUBST(LIBTOOL_APP_LDFLAGS)
971 AC_SUBST(LEVELDB_TARGET_FLAGS)
972 AC_SUBST(MINIUPNPC_CPPFLAGS)
973 AC_SUBST(MINIUPNPC_LIBS)
976 AC_SUBST(LIBSNARK_LIBS)
977 AC_SUBST(LIBZCASH_LIBS)
978 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
979 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
980 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
982 dnl boost's m4 checks do something really nasty: they export these vars. As a
983 dnl result, they leak into secp256k1's configure and crazy things happen.
984 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
985 CPPFLAGS_TEMP="$CPPFLAGS"
987 CPPFLAGS="$CPPFLAGS_TEMP"
989 LDFLAGS_TEMP="$LDFLAGS"
991 LDFLAGS="$LDFLAGS_TEMP"
997 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
998 unset PKG_CONFIG_PATH
999 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1001 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1002 unset PKG_CONFIG_LIBDIR
1003 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1005 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
1006 AC_CONFIG_SUBDIRS([src/secp256k1])
1010 dnl Taken from https://wiki.debian.org/RpathIssue
1013 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1014 sed < libtool > libtool-2 \
1015 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1016 mv libtool-2 libtool