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, 14)
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])
17 BITCOIN_DAEMON_NAME=zcashd
18 BITCOIN_CLI_NAME=zcash-cli
19 BITCOIN_TX_NAME=zcash-tx
21 dnl Unless the user specified ARFLAGS, force it to be cr
22 AC_ARG_VAR(ARFLAGS, [Flags for the archiver, defaults to <cr> if not set])
23 if test "x${ARFLAGS+set}" != "xset"; then
29 AH_TOP([#ifndef BITCOIN_CONFIG_H])
30 AH_TOP([#define BITCOIN_CONFIG_H])
31 AH_BOTTOM([#endif //BITCOIN_CONFIG_H])
33 dnl faketime breaks configure and is only needed for make. Disable it here.
36 dnl Automake init set-up and checks
37 AM_INIT_AUTOMAKE([no-define subdir-objects foreign tar-pax])
39 dnl faketime messes with timestamps and causes configure to be re-run.
40 dnl --disable-maintainer-mode can be used to bypass this.
41 AM_MAINTAINER_MODE([enable])
43 dnl make the compilation flags quiet unless V=1 is used
44 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
46 dnl Compiler checks (here before libtool).
47 if test "x${CXXFLAGS+set}" = "xset"; then
48 CXXFLAGS_overridden=yes
50 CXXFLAGS_overridden=no
54 m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX])
56 dnl By default, libtool for mingw refuses to link static libs into a dll for
57 dnl fear of mixing pic/non-pic objects, and import/export complications. Since
58 dnl we have those under control, re-enable that functionality.
61 lt_cv_deplibs_check_method="pass_all"
64 dnl Require C++11 compiler (no GNU extensions)
65 AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory], [nodefault])
66 dnl Check if -latomic is required for <std::atomic>
69 dnl Libtool init checks.
72 dnl Check/return PATH for base programs.
74 AC_PATH_TOOL(RANLIB, ranlib)
75 AC_PATH_TOOL(STRIP, strip)
76 AC_PATH_TOOL(GCOV, gcov)
77 AC_PATH_PROG(LCOV, lcov)
78 AC_PATH_PROG(GENHTML, genhtml)
79 AC_PATH_PROG([GIT], [git])
80 AC_PATH_PROG(CCACHE,ccache)
81 AC_PATH_PROG(XGETTEXT,xgettext)
82 AC_PATH_PROG(HEXDUMP,hexdump)
83 AC_PATH_TOOL(READELF,readelf)
84 AC_PATH_TOOL(CPPFILT,c++filt)
87 AC_ARG_ENABLE([wallet],
88 [AS_HELP_STRING([--enable-wallet],
89 [enable wallet (default is yes)])],
90 [enable_wallet=$enableval],
93 AC_ARG_ENABLE([mining],
94 [AS_HELP_STRING([--enable-mining],
95 [enable mining (default is yes)])],
96 [enable_mining=$enableval],
100 [AS_HELP_STRING([--enable-rust],
101 [enable rust (default is yes)])],
102 [enable_rust=$enableval],
105 AC_ARG_ENABLE([proton],
106 [AS_HELP_STRING([--disable-proton],
107 [disable Proton (AMQP messaging)])],
108 [use_proton=$enableval],
112 AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
113 [use_tests=$enableval],
116 AC_ARG_ENABLE([hardening],
117 [AS_HELP_STRING([--enable-hardening],
118 [attempt to harden the resulting executables (default is yes)])],
119 [use_hardening=$enableval],
122 AC_ARG_ENABLE([reduce-exports],
123 [AS_HELP_STRING([--enable-reduce-exports],
124 [attempt to reduce exported symbols in the resulting executables (default is no)])],
125 [use_reduce_exports=$enableval],
126 [use_reduce_exports=no])
128 AC_ARG_ENABLE([ccache],
129 [AS_HELP_STRING([--enable-ccache],
130 [use ccache for building (default is yes if ccache is found)])],
131 [use_ccache=$enableval],
134 AC_ARG_ENABLE([lcov],
135 [AS_HELP_STRING([--enable-lcov],
136 [enable lcov testing (default is no)])],
140 AC_ARG_ENABLE([glibc-back-compat],
141 [AS_HELP_STRING([--enable-glibc-back-compat],
142 [enable backwards compatibility with glibc])],
143 [use_glibc_compat=$enableval],
144 [use_glibc_compat=no])
147 [AS_HELP_STRING([--disable-zmq],
148 [disable ZMQ notifications])],
149 [use_zmq=$enableval],
152 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
155 [AS_HELP_STRING([--disable-man],
156 [do not install man pages (default is to install)])],,
158 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
161 AC_ARG_ENABLE([debug],
162 [AS_HELP_STRING([--enable-debug],
163 [use debug compiler flags and macros (default is no)])],
164 [enable_debug=$enableval],
167 # Turn warnings into errors
168 AC_ARG_ENABLE([werror],
169 [AS_HELP_STRING([--enable-werror],
170 [Treat all compiler warnings as errors (default is no)])],
171 [enable_werror=$enableval],
175 AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
177 if test "x$enable_debug" = xyes; then
178 CPPFLAGS="$CPPFLAGS -DDEBUG -DDEBUG_LOCKORDER"
179 if test "x$GCC" = xyes; then
180 CFLAGS="$CFLAGS -g3 -O0"
183 if test "x$GXX" = xyes; then
184 CXXFLAGS="$CXXFLAGS -g3 -O0"
189 if test "x$enable_werror" = "xyes"; then
190 if test "x$CXXFLAG_WERROR" = "x"; then
191 AC_MSG_ERROR("enable-werror set but -Werror is not usable")
193 ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror"
196 if test "x$CXXFLAGS_overridden" = "xno"; then
197 AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
198 AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
199 AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
200 AX_CHECK_COMPILE_FLAG([-Wvla],[CXXFLAGS="$CXXFLAGS -Wvla"],,[[$CXXFLAG_WERROR]])
201 AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
203 ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
204 ## unknown options if any other warning is produced. Test the -Wfoo case, and
205 ## set the -Wno-foo case if it works.
206 AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]])
207 AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]])
208 AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]])
209 AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]])
211 CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
214 [AS_HELP_STRING([--with-utils],
215 [build zcash-cli zcash-tx (default=yes)])],
216 [build_bitcoin_utils=$withval],
217 [build_bitcoin_utils=yes])
220 [AS_HELP_STRING([--with-libs],
221 [build libraries (default=yes)])],
222 [build_bitcoin_libs=$withval],
223 [build_bitcoin_libs=yes])
225 AC_ARG_WITH([daemon],
226 [AS_HELP_STRING([--with-daemon],
227 [build bitcoind daemon (default=yes)])],
228 [build_bitcoind=$withval],
229 [build_bitcoind=yes])
235 #pkgconfig does more harm than good with MinGW
239 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
240 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
241 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
242 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
243 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
244 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
245 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
246 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
247 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
248 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
249 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
250 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
251 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
252 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
253 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
254 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
255 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
256 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
257 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
259 # -static is interpreted by libtool, where it has a different meaning.
260 # In libtool-speak, it's -all-static.
261 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
263 AC_PATH_PROG([MAKENSIS], [makensis], none)
264 if test x$MAKENSIS = xnone; then
265 AC_MSG_WARN("makensis not found. Cannot create installer.")
268 AC_PATH_TOOL(WINDRES, windres, none)
269 if test x$WINDRES = xnone; then
270 AC_MSG_ERROR("windres not found")
273 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
274 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
275 if test "x$CXXFLAGS_overridden" = "xno"; then
276 CXXFLAGS="$CXXFLAGS -w"
279 i?86-*) WINDOWS_BITS=32 ;;
280 x86_64-*) WINDOWS_BITS=64 ;;
281 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
283 AC_SUBST(WINDOWS_BITS)
285 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
286 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
287 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
288 dnl also overridden to prevent their insertion later.
289 dnl This should only affect dll's.
290 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
296 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
297 if test x$cross_compiling != xyes; then
299 AC_CHECK_PROG([PORT],port, port)
300 if test x$PORT = xport; then
301 dnl add default macports paths
302 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
303 LIBS="$LIBS -L/opt/local/lib"
304 if test -d /opt/local/include/db62; then
305 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db62"
306 LIBS="$LIBS -L/opt/local/lib/db62"
310 AC_CHECK_PROG([BREW],brew, brew)
311 if test x$BREW = xbrew; then
312 dnl These Homebrew packages may be keg-only, meaning that they won't be found
313 dnl in expected paths because they may conflict with system files. Ask
314 dnl Homebrew where each one is located, then adjust paths accordingly.
315 dnl It's safe to add these paths even if the functionality is disabled by
316 dnl the user (--without-wallet for example).
318 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
319 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
320 if test x$openssl_prefix != x; then
321 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
322 export PKG_CONFIG_PATH
324 if test x$bdb_prefix != x; then
325 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
326 LIBS="$LIBS -L$bdb_prefix/lib"
335 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
336 AC_PATH_TOOL([OTOOL], [otool], otool)
337 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
339 dnl libtool will try to strip the static lib, which is a problem for
340 dnl cross-builds because strip attempts to call a hard-coded ld,
341 dnl which may not exist in the path. Stripping the .a is not
342 dnl necessary, so just disable it.
348 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
349 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
350 OBJCXXFLAGS="$CXXFLAGS"
359 if test x$use_pkgconfig = xyes; then
360 m4_ifndef([PKG_PROG_PKG_CONFIG], [AC_MSG_ERROR(PKG_PROG_PKG_CONFIG macro not found. Please install pkg-config and re-run autogen.sh.)])
361 m4_ifdef([PKG_PROG_PKG_CONFIG], [
363 if test x"$PKG_CONFIG" = "x"; then
364 AC_MSG_ERROR(pkg-config not found.)
369 if test x$use_lcov = xyes; then
370 if test x$LCOV = x; then
371 AC_MSG_ERROR("lcov testing requested but lcov not found")
373 if test x$GCOV = x; then
374 AC_MSG_ERROR("lcov testing requested but gcov not found")
376 if test x$GENHTML = x; then
377 AC_MSG_ERROR("lcov testing requested but genhtml not found")
379 LCOV="$LCOV --gcov-tool=$GCOV --rc lcov_branch_coverage=1"
380 GENHTML="$GENHTML --branch-coverage"
381 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
382 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
385 dnl Check for endianness
388 dnl Check for pthread compile/link requirements
391 # The following macro will add the necessary defines to bitcoin-config.h, but
392 # they also need to be passed down to any subprojects. Pull the results out of
393 # the cache and add them to CPPFLAGS.
395 # detect POSIX or GNU variant of strerror_r
398 if test x$ac_cv_sys_file_offset_bits != x &&
399 test x$ac_cv_sys_file_offset_bits != xno &&
400 test x$ac_cv_sys_file_offset_bits != xunknown; then
401 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
404 if test x$ac_cv_sys_large_files != x &&
405 test x$ac_cv_sys_large_files != xno &&
406 test x$ac_cv_sys_large_files != xunknown; then
407 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
410 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
412 AX_GCC_FUNC_ATTRIBUTE([visibility])
413 AX_GCC_FUNC_ATTRIBUTE([dllexport])
414 AX_GCC_FUNC_ATTRIBUTE([dllimport])
416 if test x$use_glibc_compat != xno; then
418 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
419 #in anyway for back-compat.
420 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
422 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
423 # See which one is present here.
424 AC_MSG_CHECKING(__fdelt_chk type)
425 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
426 #undef _FORTIFY_SOURCE
428 #define _FORTIFY_SOURCE 2
429 #include <sys/select.h>
430 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
431 [ fdelt_type="long unsigned int"],
432 [ fdelt_type="long int"])
433 AC_MSG_RESULT($fdelt_type)
434 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
436 AC_SEARCH_LIBS([clock_gettime],[rt])
439 if test x$TARGET_OS != xwindows; then
440 # All windows code is PIC, forcing it on just adds useless compile warnings
441 AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"])
444 if test x$use_hardening != xno; then
445 AX_CHECK_COMPILE_FLAG([-Wformat],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat"],[AC_MSG_ERROR(Cannot enable -Wformat)])
446 AX_CHECK_COMPILE_FLAG([-Wformat-security],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat-security"],[AC_MSG_ERROR(Cannot enable -Wformat-security)],[-Wformat])
447 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"],[AC_MSG_ERROR(Cannot enable -Wstack-protector)])
448 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"],[AC_MSG_ERROR(Cannot enable -fstack-protector-all)])
450 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
451 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
452 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
453 ],[AC_MSG_ERROR(Cannot enable -U_FORTIFY_SOURCE)])
454 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
455 ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)])
457 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
458 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
460 if test x$TARGET_OS != xwindows; then
461 # All windows code is PIC, forcing it on just adds useless compile warnings
462 AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"],[AC_MSG_ERROR(Cannot enable -fPIE)])
463 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"],[AC_MSG_ERROR(Cannot enable -pie)])
465 # These are only available on Windows.
466 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"],[AC_MSG_ERROR(Cannot enable --dynamicbase)])
467 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"],[AC_MSG_ERROR(Cannot enable --nxcompat)])
468 AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"],[AC_MSG_ERROR(Cannot enable ASLR)])
473 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
478 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
479 if test x$TARGET_OS = xdarwin; then
480 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
483 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])
484 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
485 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
487 AC_CHECK_DECLS([strnlen])
489 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
492 #elif HAVE_SYS_ENDIAN_H
493 #include <sys/endian.h>
496 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
498 #include <byteswap.h>
501 dnl Check for MSG_NOSIGNAL
502 AC_MSG_CHECKING(for MSG_NOSIGNAL)
503 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
504 [[ int f = MSG_NOSIGNAL; ]])],
505 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
509 AC_MSG_CHECKING([for visibility attribute])
510 AC_LINK_IFELSE([AC_LANG_SOURCE([
511 int foo_def( void ) __attribute__((visibility("default")));
515 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
520 if test x$use_reduce_exports = xyes; then
521 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
526 if test x$use_reduce_exports = xyes; then
527 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
528 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
534 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
535 AC_SUBST(LEVELDB_CPPFLAGS)
539 if test x$enable_wallet != xno; then
540 dnl Check for libdb_cxx only if wallet enabled
544 dnl Check Qpid Proton headers and library exist
545 if test x$use_proton = xyes; then
546 AC_CHECK_HEADERS([proton/connection.hpp],
548 [AC_MSG_WARN([Proton headers not found, disabling Proton support])
550 AC_CHECK_LIB([qpid-proton-cpp], [main],
551 [PROTON_LIBS="-lqpid-proton-cpp -lqpid-proton"],
552 [AC_MSG_WARN([Proton libraries not found, disabling Proton support])
555 if test x$use_proton = xyes; then
556 AC_DEFINE(ENABLE_PROTON, 1, [Define to 1 to enable Proton functions])
558 AC_DEFINE(ENABLE_PROTON, 0, [Define to 1 to enable Proton functions])
561 if test x$build_bitcoin_utils$build_bitcoind$use_tests = xnonono; then
567 if test x$use_boost = xyes; then
569 dnl Check for boost libs
570 dnl We need Boost >= 1.62 to fix a potential security bug (https://github.com/zcash/zcash/issues/1241)
571 AX_BOOST_BASE([1.62])
574 AX_BOOST_PROGRAM_OPTIONS
580 if test x$use_reduce_exports = xyes; then
581 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
582 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
585 if test x$use_tests = xyes; then
587 if test x$HEXDUMP = x; then
588 AC_MSG_ERROR(hexdump is required for tests)
592 if test x$use_boost = xyes; then
594 AX_BOOST_UNIT_TEST_FRAMEWORK
596 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
597 AC_MSG_CHECKING([for dynamic linked boost test])
599 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
600 TEMP_CPPFLAGS="$CPPFLAGS"
601 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
602 AC_LINK_IFELSE([AC_LANG_SOURCE([
603 #define BOOST_TEST_DYN_LINK
604 #define BOOST_TEST_MAIN
605 #include <boost/test/unit_test.hpp>
609 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
612 CPPFLAGS="$TEMP_CPPFLAGS"
617 if test x$use_boost = xyes; then
618 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
621 if test x$use_pkgconfig = xyes; then
626 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
627 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
628 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
629 PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)])
630 if test x$TARGET_OS != xwindows; then
631 PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)])
635 if test "x$use_zmq" = "xyes"; then
636 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
637 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
638 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
639 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
642 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
648 echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++, libgmp'
650 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
651 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
653 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
654 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
656 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then
657 AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),)
658 AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing))
659 if test x$TARGET_OS != xwindows; then
660 AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing))
664 if test "x$use_zmq" = "xyes"; then
665 AC_CHECK_HEADER([zmq.h],
666 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
667 [AC_MSG_WARN([zmq.h not found, disabling zmq support])
669 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
670 AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq,
671 [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support])
673 AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])])
675 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
678 if test "x$use_zmq" = "xyes"; then
679 dnl Assume libzmq was built for static linking
682 ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC"
688 # These packages don't provide pkgconfig config files across all
689 # platforms, so we use older autoconf detection mechanisms:
690 AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing))
691 AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)])
693 AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing))
694 AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)])
697 if test x$enable_rust != xno; then
698 RUST_LIBS="-lrustzcash"
701 dnl Check for OpenMP support
703 [AC_DEFINE(HAVE_OPENMP, 1, [Define if OpenMP is enabled])
704 AM_CONDITIONAL([HAVE_OPENMP], [true])
705 CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"],
706 [AC_MSG_WARN([OpenMP not supported, disabling multithreading])
707 AC_DEFINE(HAVE_OPENMP, 0, [Define if OpenMP is enabled])
708 AM_CONDITIONAL([HAVE_OPENMP], [false])])
710 # Gitian uses a config.site that sets depends_prefix, and then sets --prefix=/
711 # build.sh just uses --prefix
712 if test x$depends_prefix != x; then
713 LIBSNARK_DEPINST="$depends_prefix"
715 LIBSNARK_DEPINST="$prefix"
718 # Additional Zcash flags
719 AX_CHECK_COMPILE_FLAG([-fwrapv],[CXXFLAGS="$CXXFLAGS -fwrapv"])
720 AX_CHECK_COMPILE_FLAG([-fno-strict-aliasing],[CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"])
721 AX_CHECK_COMPILE_FLAG([-Wno-builtin-declaration-mismatch],[CXXFLAGS="$CXXFLAGS -Wno-builtin-declaration-mismatch"],,[[$CXXFLAG_WERROR]])
723 LIBZCASH_LIBS="-lgmp -lgmpxx -lboost_system-mt -lcrypto -lsodium $RUST_LIBS"
725 AC_MSG_CHECKING([whether to build bitcoind])
726 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
727 AC_MSG_RESULT($build_bitcoind)
729 AC_MSG_CHECKING([whether to build utils (zcash-cli zcash-tx)])
730 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
731 AC_MSG_RESULT($build_bitcoin_utils)
733 AC_MSG_CHECKING([whether to build libraries])
734 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
735 if test x$build_bitcoin_libs = xyes; then
736 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
737 AC_CONFIG_FILES([libzcashconsensus.pc:libzcashconsensus.pc.in])
740 AC_MSG_RESULT($build_bitcoin_libs)
744 if test "x$use_ccache" != "xno"; then
745 AC_MSG_CHECKING(if ccache should be used)
746 if test x$CCACHE = x; then
747 if test "x$use_ccache" = "xyes"; then
748 AC_MSG_ERROR([ccache not found.]);
754 CC="$ac_cv_path_CCACHE $CC"
755 CXX="$ac_cv_path_CCACHE $CXX"
757 AC_MSG_RESULT($use_ccache)
759 if test "x$use_ccache" = "xyes"; then
760 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
764 AC_MSG_CHECKING([if wallet should be enabled])
765 if test x$enable_wallet != xno; then
767 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
774 AC_MSG_CHECKING([if mining should be enabled])
775 if test x$enable_mining != xno; then
777 AC_DEFINE(ENABLE_MINING, 1, [Define to 1 to enable mining functions])
784 AC_MSG_CHECKING([if rust should be enabled])
785 if test x$enable_rust != xno; then
787 AC_DEFINE(ENABLE_RUST, 1, [Define to 1 to enable Rust language dependent functions])
793 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
795 AM_CONDITIONAL([ENABLE_PROTON], [test "x$use_proton" = "xyes"])
797 AC_MSG_CHECKING([whether to build test_bitcoin])
798 if test x$use_tests = xyes; then
806 AC_MSG_CHECKING([whether to reduce exports])
807 if test x$use_reduce_exports = xyes; then
813 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$use_tests = xnononono; then
814 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon or --enable-tests])
817 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
818 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
819 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
820 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
821 AM_CONDITIONAL([ENABLE_MINING],[test x$enable_mining = xyes])
822 AM_CONDITIONAL([ENABLE_RUST],[test x$enable_rust = xyes])
823 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
824 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
825 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
826 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
828 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
829 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
830 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
831 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
832 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
833 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
834 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
835 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
836 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
837 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
838 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
839 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
840 AC_SUBST(BITCOIN_DAEMON_NAME)
841 AC_SUBST(BITCOIN_CLI_NAME)
842 AC_SUBST(BITCOIN_TX_NAME)
845 AC_SUBST(ERROR_CXXFLAGS)
846 AC_SUBST(HARDENED_CXXFLAGS)
847 AC_SUBST(HARDENED_CPPFLAGS)
848 AC_SUBST(HARDENED_LDFLAGS)
851 AC_SUBST(LIBTOOL_APP_LDFLAGS)
854 AC_SUBST(LEVELDB_TARGET_FLAGS)
855 AC_SUBST(CRYPTO_LIBS)
858 AC_SUBST(EVENT_PTHREADS_LIBS)
862 AC_SUBST(LIBSNARK_DEPINST)
863 AC_SUBST(LIBZCASH_LIBS)
864 AC_SUBST(PROTON_LIBS)
865 AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi src/test/buildenv.py])
866 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
867 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
869 dnl boost's m4 checks do something really nasty: they export these vars. As a
870 dnl result, they leak into secp256k1's configure and crazy things happen.
871 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
872 CPPFLAGS_TEMP="$CPPFLAGS"
874 CPPFLAGS="$CPPFLAGS_TEMP"
876 LDFLAGS_TEMP="$LDFLAGS"
878 LDFLAGS="$LDFLAGS_TEMP"
884 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
885 unset PKG_CONFIG_PATH
886 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
888 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
889 unset PKG_CONFIG_LIBDIR
890 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
892 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery"
893 AC_CONFIG_SUBDIRS([src/secp256k1 src/snark src/univalue])
897 dnl Taken from https://wiki.debian.org/RpathIssue
900 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
901 sed < libtool > libtool-2 \
902 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
909 echo "Options used to compile and link:"
910 echo " with wallet = $enable_wallet"
911 echo " with rust = $enable_rust"
912 echo " with proton = $use_proton"
913 echo " with zmq = $use_zmq"
914 echo " with test = $use_tests"
915 echo " debug enabled = $enable_debug"
916 echo " werror = $enable_werror"
918 echo " target os = $TARGET_OS"
919 echo " build os = $BUILD_OS"
922 echo " CFLAGS = $CFLAGS"
923 echo " CPPFLAGS = $CPPFLAGS"
925 echo " CXXFLAGS = $CXXFLAGS"
926 echo " LDFLAGS = $LDFLAGS"
927 echo " ARFLAGS = $ARFLAGS"