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 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
182 if test "x$GCC" = xyes; then
183 CFLAGS="$CFLAGS -g3 -O0"
186 if test "x$GXX" = xyes; then
187 CXXFLAGS="$CXXFLAGS -g3 -O0"
191 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
192 ## compatibility with the legacy buildsystem.
194 if test "x$CXXFLAGS_overridden" = "xno"; then
195 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
197 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
200 [AS_HELP_STRING([--with-utils],
201 [build zcash-cli zcash-tx (default=yes)])],
202 [build_bitcoin_utils=$withval],
203 [build_bitcoin_utils=yes])
206 [AS_HELP_STRING([--with-libs],
207 [build libraries (default=yes)])],
208 [build_bitcoin_libs=$withval],
209 [build_bitcoin_libs=yes])
211 AC_ARG_WITH([daemon],
212 [AS_HELP_STRING([--with-daemon],
213 [build bitcoind daemon (default=yes)])],
214 [build_bitcoind=$withval],
215 [build_bitcoind=yes])
223 #pkgconfig does more harm than good with MinGW
227 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
228 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
229 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
230 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
231 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
232 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
233 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
234 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
235 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
236 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
237 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
238 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
239 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
240 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
241 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
242 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
243 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
244 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
245 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
247 # -static is interpreted by libtool, where it has a different meaning.
248 # In libtool-speak, it's -all-static.
249 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
251 AC_PATH_PROG([MAKENSIS], [makensis], none)
252 if test x$MAKENSIS = xnone; then
253 AC_MSG_WARN("makensis not found. Cannot create installer.")
256 AC_PATH_TOOL(WINDRES, windres, none)
257 if test x$WINDRES = xnone; then
258 AC_MSG_ERROR("windres not found")
261 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
262 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
263 if test "x$CXXFLAGS_overridden" = "xno"; then
264 CXXFLAGS="$CXXFLAGS -w"
267 i?86-*) WINDOWS_BITS=32 ;;
268 x86_64-*) WINDOWS_BITS=64 ;;
269 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
271 AC_SUBST(WINDOWS_BITS)
273 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
274 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
275 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
276 dnl also overridden to prevent their insertion later.
277 dnl This should only affect dll's.
278 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
284 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
285 if test x$cross_compiling != xyes; then
287 AC_CHECK_PROG([PORT],port, port)
288 if test x$PORT = xport; then
289 dnl add default macports paths
290 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
291 LIBS="$LIBS -L/opt/local/lib"
292 if test -d /opt/local/include/db62; then
293 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db62"
294 LIBS="$LIBS -L/opt/local/lib/db62"
298 AC_CHECK_PROG([BREW],brew, brew)
299 if test x$BREW = xbrew; then
300 dnl These Homebrew packages may be keg-only, meaning that they won't be found
301 dnl in expected paths because they may conflict with system files. Ask
302 dnl Homebrew where each one is located, then adjust paths accordingly.
303 dnl It's safe to add these paths even if the functionality is disabled by
304 dnl the user (--without-wallet or --without-gui for example).
306 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
307 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
308 qt5_prefix=`$BREW --prefix qt5 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"
317 if test x$qt5_prefix != x; then
318 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
319 export PKG_CONFIG_PATH
328 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
329 AC_PATH_TOOL([OTOOL], [otool], otool)
330 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
332 dnl libtool will try to strip the static lib, which is a problem for
333 dnl cross-builds because strip attempts to call a hard-coded ld,
334 dnl which may not exist in the path. Stripping the .a is not
335 dnl necessary, so just disable it.
341 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
342 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
351 if test x$use_comparison_tool != xno; then
352 if test x$JAVA = x; then
353 AC_MSG_ERROR("comparison tool set but java not found")
355 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
358 if test x$use_comparison_tool_reorg_tests != xno; then
359 if test x$use_comparison_tool = x; then
360 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
362 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
364 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
367 if test x$use_lcov = xyes; then
368 if test x$LCOV = x; then
369 AC_MSG_ERROR("lcov testing requested but lcov not found")
371 if test x$GCOV = x; then
372 AC_MSG_ERROR("lcov testing requested but gcov not found")
374 if test x$JAVA = x; then
375 AC_MSG_ERROR("lcov testing requested but java not found")
377 if test x$GENHTML = x; then
378 AC_MSG_ERROR("lcov testing requested but genhtml not found")
380 if test x$use_comparison_tool = x; then
381 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
383 LCOV="$LCOV --gcov-tool=$GCOV --rc lcov_branch_coverage=1"
384 GENHTML="$GENHTML --branch-coverage"
385 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
386 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
389 dnl Check for endianness
392 dnl Check for pthread compile/link requirements
395 # The following macro will add the necessary defines to bitcoin-config.h, but
396 # they also need to be passed down to any subprojects. Pull the results out of
397 # the cache and add them to CPPFLAGS.
399 # detect POSIX or GNU variant of strerror_r
402 if test x$ac_cv_sys_file_offset_bits != x &&
403 test x$ac_cv_sys_file_offset_bits != xno &&
404 test x$ac_cv_sys_file_offset_bits != xunknown; then
405 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
408 if test x$ac_cv_sys_large_files != x &&
409 test x$ac_cv_sys_large_files != xno &&
410 test x$ac_cv_sys_large_files != xunknown; then
411 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
414 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
416 AX_GCC_FUNC_ATTRIBUTE([visibility])
417 AX_GCC_FUNC_ATTRIBUTE([dllexport])
418 AX_GCC_FUNC_ATTRIBUTE([dllimport])
420 if test x$use_glibc_compat != xno; then
422 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
423 #in anyway for back-compat.
424 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
426 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
427 # See which one is present here.
428 AC_MSG_CHECKING(__fdelt_chk type)
429 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
430 #undef _FORTIFY_SOURCE
432 #define _FORTIFY_SOURCE 2
433 #include <sys/select.h>
434 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
435 [ fdelt_type="long unsigned int"],
436 [ fdelt_type="long int"])
437 AC_MSG_RESULT($fdelt_type)
438 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
440 AC_SEARCH_LIBS([clock_gettime],[rt])
443 if test x$use_hardening != xno; then
444 AX_CHECK_COMPILE_FLAG([-Wformat],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat"],[AC_MSG_ERROR(Cannot enable -Wformat)])
445 AX_CHECK_COMPILE_FLAG([-Wformat-security],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat-security"],[AC_MSG_ERROR(Cannot enable -Wformat-security)],[-Wformat])
446 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"],[AC_MSG_ERROR(Cannot enable -Wstack-protector)])
447 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"],[AC_MSG_ERROR(Cannot enable -fstack-protector-all)])
449 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
450 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
451 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
452 ],[AC_MSG_ERROR(Cannot enable -U_FORTIFY_SOURCE)])
453 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
454 ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)])
456 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
457 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
459 if test x$TARGET_OS != xwindows; then
460 # All windows code is PIC, forcing it on just adds useless compile warnings
461 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"],[AC_MSG_ERROR(Cannot enable -fPIE)])
462 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"],[AC_MSG_ERROR(Cannot enable -pie)])
464 # These are only available on Windows.
465 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"],[AC_MSG_ERROR(Cannot enable --dynamicbase)])
466 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"],[AC_MSG_ERROR(Cannot enable --nxcompat)])
471 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
475 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
476 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
477 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
478 OBJCXXFLAGS="$CXXFLAGS"
481 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
482 if test x$TARGET_OS = xdarwin; then
483 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
486 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])
487 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
488 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
490 AC_CHECK_DECLS([strnlen])
492 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
495 #elif HAVE_SYS_ENDIAN_H
496 #include <sys/endian.h>
499 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
501 #include <byteswap.h>
504 dnl Check for MSG_NOSIGNAL
505 AC_MSG_CHECKING(for MSG_NOSIGNAL)
506 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
507 [[ int f = MSG_NOSIGNAL; ]])],
508 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
512 AC_MSG_CHECKING([for visibility attribute])
513 AC_LINK_IFELSE([AC_LANG_SOURCE([
514 int foo_def( void ) __attribute__((visibility("default")));
518 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
523 if test x$use_reduce_exports = xyes; then
524 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
529 if test x$use_reduce_exports = xyes; then
530 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
531 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
537 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
538 AC_SUBST(LEVELDB_CPPFLAGS)
542 if test x$enable_wallet != xno; then
543 dnl Check for libdb_cxx only if wallet enabled
547 dnl Check for libminiupnpc (optional)
548 if test x$use_upnp != xno; then
550 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
551 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
558 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
559 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
561 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
567 if test x$use_boost = xyes; then
569 dnl Check for boost libs
573 AX_BOOST_PROGRAM_OPTIONS
578 if test x$use_reduce_exports = xyes; then
579 AC_MSG_CHECKING([for working boost reduced exports])
580 TEMP_CPPFLAGS="$CPPFLAGS"
581 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
582 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
583 @%:@include <boost/version.hpp>
585 #if BOOST_VERSION >= 104900
586 // Everything is okay
588 # error Boost version is too old
593 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
595 CPPFLAGS="$TEMP_CPPFLAGS"
599 if test x$use_reduce_exports = xyes; then
600 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
601 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
604 if test x$use_tests = xyes; then
606 if test x$HEXDUMP = x; then
607 AC_MSG_ERROR(hexdump is required for tests)
611 if test x$use_boost = xyes; then
613 AX_BOOST_UNIT_TEST_FRAMEWORK
615 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
616 AC_MSG_CHECKING([for dynamic linked boost test])
618 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
619 TEMP_CPPFLAGS="$CPPFLAGS"
620 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
621 AC_LINK_IFELSE([AC_LANG_SOURCE([
622 #define BOOST_TEST_DYN_LINK
623 #define BOOST_TEST_MAIN
624 #include <boost/test/unit_test.hpp>
628 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
631 CPPFLAGS="$TEMP_CPPFLAGS"
636 if test x$use_boost = xyes; then
638 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
640 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
641 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
642 dnl a working version is available, else fall back to sleep. sleep was removed
644 dnl If neither is available, abort.
646 LIBS="$BOOST_LIBS $LIBS"
647 TEMP_CPPFLAGS="$CPPFLAGS"
648 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
649 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
650 #include <boost/thread/thread.hpp>
651 #include <boost/version.hpp>
653 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
654 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
660 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
663 CPPFLAGS="$TEMP_CPPFLAGS"
665 if test x$boost_sleep != xyes; then
667 LIBS="$BOOST_LIBS $LIBS"
668 TEMP_CPPFLAGS="$CPPFLAGS"
669 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
670 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
671 #include <boost/version.hpp>
672 #include <boost/thread.hpp>
673 #include <boost/date_time/posix_time/posix_time_types.hpp>
675 #if BOOST_VERSION <= 105600
676 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
681 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
684 CPPFLAGS="$TEMP_CPPFLAGS"
687 if test x$boost_sleep != xyes; then
688 AC_MSG_ERROR(No working boost sleep implementation found.)
693 if test x$use_pkgconfig = xyes; then
695 if test x"$PKG_CONFIG" = "x"; then
696 AC_MSG_ERROR(pkg-config not found.)
703 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
704 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
705 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
706 if test x$use_qr != xno; then
707 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
710 if test "x$use_zmq" = "xyes"; then
711 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
712 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
713 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
714 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
717 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
723 echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++, libgmp'
725 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
726 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
728 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
729 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
731 if test "x$use_zmq" = "xyes"; then
732 AC_CHECK_HEADER([zmq.h],
733 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
734 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
736 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
737 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
738 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
740 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
742 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
745 if test "x$use_zmq" = "xyes"; then
746 dnl Assume libzmq was built for static linking
749 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
754 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
755 if test x$use_qr != xno; then
756 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
757 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
761 # These packages don't provide pkgconfig config files across all
762 # platforms, so we use older autoconf detection mechanisms:
763 AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing))
764 AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)])
766 AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing))
767 AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)])
769 # libsnark header layout is broken unless cpp's -I is passed with the
770 # libsnark directory, so for now we use this hideous workaround:
771 echo 'Hunting for libsnark include directory...'
772 [LIBSNARK_INCDIR="$(echo "$CPPFLAGS" | sed 's,^.*-I\([^ ]*/include\).*$,\1/libsnark,')"]
773 if test -d "$LIBSNARK_INCDIR"; then
774 echo "Found libsnark include directory: $LIBSNARK_INCDIR"
776 AC_MSG_ERROR(libsnark include directory not found)
779 CPPFLAGS="-I$LIBSNARK_INCDIR $CPPFLAGS"
781 # Now check for libsnark compilability using traditional autoconf tests:
782 AC_CHECK_HEADER([libsnark/gadgetlib1/gadget.hpp],,AC_MSG_ERROR(libsnark headers missing))
783 AC_CHECK_LIB([snark],[main],LIBSNARK_LIBS=-lsnark, [AC_MSG_ERROR(libsnark missing)], [-lgmpxx])
785 LIBZCASH_LIBS="-lsnark -lgmp -lgmpxx -lboost_system-mt -lcrypto -lsodium -fopenmp"
787 CXXFLAGS_TEMP="$CXXFLAGS"
789 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
790 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS $GMP_LIBS $GMPXX_LIBS"
791 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
792 CXXFLAGS="$CXXFLAGS_TEMP"
795 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
797 AC_MSG_CHECKING([whether to build bitcoind])
798 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
799 AC_MSG_RESULT($build_bitcoind)
801 AC_MSG_CHECKING([whether to build utils (zcash-cli zcash-tx)])
802 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
803 AC_MSG_RESULT($build_bitcoin_utils)
805 AC_MSG_CHECKING([whether to build libraries])
806 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
807 if test x$build_bitcoin_libs = xyes; then
808 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
809 AC_CONFIG_FILES([libzcashconsensus.pc:libzcashconsensus.pc.in])
812 AC_MSG_RESULT($build_bitcoin_libs)
816 if test "x$use_ccache" != "xno"; then
817 AC_MSG_CHECKING(if ccache should be used)
818 if test x$CCACHE = x; then
819 if test "x$use_ccache" = "xyes"; then
820 AC_MSG_ERROR([ccache not found.]);
826 CC="$ac_cv_path_CCACHE $CC"
827 CXX="$ac_cv_path_CCACHE $CXX"
829 AC_MSG_RESULT($use_ccache)
831 if test "x$use_ccache" = "xyes"; then
832 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
836 AC_MSG_CHECKING([if wallet should be enabled])
837 if test x$enable_wallet != xno; then
839 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
846 AC_MSG_CHECKING([if mining should be enabled])
847 if test x$enable_mining != xno; then
849 AC_DEFINE(ENABLE_MINING, 1, [Define to 1 to enable mining functions])
855 dnl enable upnp support
856 AC_MSG_CHECKING([whether to build with support for UPnP])
857 if test x$have_miniupnpc = xno; then
858 if test x$use_upnp = xyes; then
859 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
863 if test x$use_upnp != xno; then
865 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
868 if test x$use_upnp_default != xno; then
872 AC_MSG_RESULT($use_upnp_default)
873 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
874 if test x$TARGET_OS = xwindows; then
875 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
882 dnl these are only used when qt is enabled
884 if test x$bitcoin_enable_qt != xno; then
885 dnl enable dbus support
886 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
887 if test x$bitcoin_enable_qt_dbus != xno; then
888 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
890 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
892 dnl enable qr support
893 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
894 if test x$have_qrencode = xno; then
895 if test x$use_qr = xyes; then
896 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
900 if test x$use_qr != xno; then
902 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
909 if test x$XGETTEXT = x; then
910 AC_MSG_WARN("xgettext is required to update qt translations")
913 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
914 if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
922 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
924 AC_MSG_CHECKING([whether to build test_bitcoin])
925 if test x$use_tests = xyes; then
933 AC_MSG_CHECKING([whether to reduce exports])
934 if test x$use_reduce_exports = xyes; then
940 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
941 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
944 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
945 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
946 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
947 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
948 AM_CONDITIONAL([ENABLE_MINING],[test x$enable_mining = xyes])
949 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
950 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
951 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
952 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
953 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
954 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
955 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
956 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
957 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
959 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
960 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
961 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
962 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
963 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
964 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
965 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
966 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
967 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
968 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
969 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
970 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
973 AC_SUBST(LIBTOOL_APP_LDFLAGS)
978 AC_SUBST(LEVELDB_TARGET_FLAGS)
979 AC_SUBST(MINIUPNPC_CPPFLAGS)
980 AC_SUBST(MINIUPNPC_LIBS)
983 AC_SUBST(LIBSNARK_LIBS)
984 AC_SUBST(LIBZCASH_LIBS)
985 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
986 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
987 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
989 dnl boost's m4 checks do something really nasty: they export these vars. As a
990 dnl result, they leak into secp256k1's configure and crazy things happen.
991 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
992 CPPFLAGS_TEMP="$CPPFLAGS"
994 CPPFLAGS="$CPPFLAGS_TEMP"
996 LDFLAGS_TEMP="$LDFLAGS"
998 LDFLAGS="$LDFLAGS_TEMP"
1004 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
1005 unset PKG_CONFIG_PATH
1006 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
1008 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
1009 unset PKG_CONFIG_LIBDIR
1010 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
1012 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
1013 AC_CONFIG_SUBDIRS([src/secp256k1 src/univalue])
1017 dnl Taken from https://wiki.debian.org/RpathIssue
1020 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
1021 sed < libtool > libtool-2 \
1022 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
1023 mv libtool-2 libtool