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_WITH([miniupnpc],
86 [AS_HELP_STRING([--with-miniupnpc],
87 [enable UPNP (default is yes if libminiupnpc is found)])],
91 AC_ARG_ENABLE([upnp-default],
92 [AS_HELP_STRING([--enable-upnp-default],
93 [if UPNP is enabled, turn it on at startup (default is no)])],
94 [use_upnp_default=$enableval],
95 [use_upnp_default=no])
98 AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
99 [use_tests=$enableval],
102 AC_ARG_ENABLE(gui-tests,
103 AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)]),
104 [use_gui_tests=$enableval],
105 [use_gui_tests=$use_tests])
107 AC_ARG_WITH([comparison-tool],
108 AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]),
109 [use_comparison_tool=$withval],
110 [use_comparison_tool=no])
112 AC_ARG_ENABLE([comparison-tool-reorg-tests],
113 AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]),
114 [use_comparison_tool_reorg_tests=$enableval],
115 [use_comparison_tool_reorg_tests=no])
117 AC_ARG_WITH([qrencode],
118 [AS_HELP_STRING([--with-qrencode],
119 [enable QR code support (default is yes if qt is enabled and libqrencode is found)])],
123 AC_ARG_ENABLE([hardening],
124 [AS_HELP_STRING([--enable-hardening],
125 [attempt to harden the resulting executables (default is yes)])],
126 [use_hardening=$enableval],
129 AC_ARG_ENABLE([reduce-exports],
130 [AS_HELP_STRING([--enable-reduce-exports],
131 [attempt to reduce exported symbols in the resulting executables (default is no)])],
132 [use_reduce_exports=$enableval],
133 [use_reduce_exports=no])
135 AC_ARG_ENABLE([ccache],
136 [AS_HELP_STRING([--enable-ccache],
137 [use ccache for building (default is yes if ccache is found)])],
138 [use_ccache=$enableval],
141 AC_ARG_ENABLE([lcov],
142 [AS_HELP_STRING([--enable-lcov],
143 [enable lcov testing (default is no)])],
147 AC_ARG_ENABLE([glibc-back-compat],
148 [AS_HELP_STRING([--enable-glibc-back-compat],
149 [enable backwards compatibility with glibc])],
150 [use_glibc_compat=$enableval],
151 [use_glibc_compat=no])
154 [AS_HELP_STRING([--disable-zmq],
155 [disable ZMQ notifications])],
156 [use_zmq=$enableval],
159 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
162 AC_ARG_ENABLE([debug],
163 [AS_HELP_STRING([--enable-debug],
164 [use debug compiler flags and macros (default is no)])],
165 [enable_debug=$enableval],
168 if test "x$enable_debug" = xyes; then
169 if test "x$GCC" = xyes; then
170 CFLAGS="-g3 -O0 -DDEBUG"
173 if test "x$GXX" = xyes; then
174 CXXFLAGS="-g3 -O0 -DDEBUG"
178 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
179 ## compatibility with the legacy buildsystem.
181 if test "x$CXXFLAGS_overridden" = "xno"; then
182 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
184 CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
187 [AS_HELP_STRING([--with-utils],
188 [build zcash-cli zcash-tx (default=yes)])],
189 [build_bitcoin_utils=$withval],
190 [build_bitcoin_utils=yes])
193 [AS_HELP_STRING([--with-libs],
194 [build libraries (default=yes)])],
195 [build_bitcoin_libs=$withval],
196 [build_bitcoin_libs=yes])
198 AC_ARG_WITH([daemon],
199 [AS_HELP_STRING([--with-daemon],
200 [build bitcoind daemon (default=yes)])],
201 [build_bitcoind=$withval],
202 [build_bitcoind=yes])
210 #pkgconfig does more harm than good with MinGW
214 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
215 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
216 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
217 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
218 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
219 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
220 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
221 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
222 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
223 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
224 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
225 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
226 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
227 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
228 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
229 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
230 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
231 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
232 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
234 # -static is interpreted by libtool, where it has a different meaning.
235 # In libtool-speak, it's -all-static.
236 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
238 AC_PATH_PROG([MAKENSIS], [makensis], none)
239 if test x$MAKENSIS = xnone; then
240 AC_MSG_WARN("makensis not found. Cannot create installer.")
243 AC_PATH_TOOL(WINDRES, windres, none)
244 if test x$WINDRES = xnone; then
245 AC_MSG_ERROR("windres not found")
248 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
249 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
250 if test "x$CXXFLAGS_overridden" = "xno"; then
251 CXXFLAGS="$CXXFLAGS -w"
254 i?86-*) WINDOWS_BITS=32 ;;
255 x86_64-*) WINDOWS_BITS=64 ;;
256 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
258 AC_SUBST(WINDOWS_BITS)
260 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
261 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
262 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
263 dnl also overridden to prevent their insertion later.
264 dnl This should only affect dll's.
265 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
271 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
272 if test x$cross_compiling != xyes; then
274 AC_CHECK_PROG([PORT],port, port)
275 if test x$PORT = xport; then
276 dnl add default macports paths
277 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
278 LIBS="$LIBS -L/opt/local/lib"
279 if test -d /opt/local/include/db62; then
280 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db62"
281 LIBS="$LIBS -L/opt/local/lib/db62"
285 AC_CHECK_PROG([BREW],brew, brew)
286 if test x$BREW = xbrew; then
287 dnl These Homebrew packages may be keg-only, meaning that they won't be found
288 dnl in expected paths because they may conflict with system files. Ask
289 dnl Homebrew where each one is located, then adjust paths accordingly.
290 dnl It's safe to add these paths even if the functionality is disabled by
291 dnl the user (--without-wallet or --without-gui for example).
293 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
294 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
295 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
296 if test x$openssl_prefix != x; then
297 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
298 export PKG_CONFIG_PATH
300 if test x$bdb_prefix != x; then
301 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
302 LIBS="$LIBS -L$bdb_prefix/lib"
304 if test x$qt5_prefix != x; then
305 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
306 export PKG_CONFIG_PATH
315 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
316 AC_PATH_TOOL([OTOOL], [otool], otool)
317 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
319 dnl libtool will try to strip the static lib, which is a problem for
320 dnl cross-builds because strip attempts to call a hard-coded ld,
321 dnl which may not exist in the path. Stripping the .a is not
322 dnl necessary, so just disable it.
328 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
329 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
338 if test x$use_comparison_tool != xno; then
339 if test x$JAVA = x; then
340 AC_MSG_ERROR("comparison tool set but java not found")
342 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
345 if test x$use_comparison_tool_reorg_tests != xno; then
346 if test x$use_comparison_tool = x; then
347 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
349 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
351 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
354 if test x$use_lcov = xyes; then
355 if test x$LCOV = x; then
356 AC_MSG_ERROR("lcov testing requested but lcov not found")
358 if test x$GCOV = x; then
359 AC_MSG_ERROR("lcov testing requested but gcov not found")
361 if test x$JAVA = x; then
362 AC_MSG_ERROR("lcov testing requested but java not found")
364 if test x$GENHTML = x; then
365 AC_MSG_ERROR("lcov testing requested but genhtml not found")
367 if test x$use_comparison_tool = x; then
368 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
370 LCOV="$LCOV --gcov-tool=$GCOV --rc lcov_branch_coverage=1"
371 GENHTML="$GENHTML --branch-coverage"
372 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
373 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
376 dnl Check for endianness
379 dnl Check for pthread compile/link requirements
382 # The following macro will add the necessary defines to bitcoin-config.h, but
383 # they also need to be passed down to any subprojects. Pull the results out of
384 # the cache and add them to CPPFLAGS.
386 # detect POSIX or GNU variant of strerror_r
389 if test x$ac_cv_sys_file_offset_bits != x &&
390 test x$ac_cv_sys_file_offset_bits != xno &&
391 test x$ac_cv_sys_file_offset_bits != xunknown; then
392 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
395 if test x$ac_cv_sys_large_files != x &&
396 test x$ac_cv_sys_large_files != xno &&
397 test x$ac_cv_sys_large_files != xunknown; then
398 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
401 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
403 AX_GCC_FUNC_ATTRIBUTE([visibility])
404 AX_GCC_FUNC_ATTRIBUTE([dllexport])
405 AX_GCC_FUNC_ATTRIBUTE([dllimport])
407 if test x$use_glibc_compat != xno; then
409 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
410 #in anyway for back-compat.
411 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
413 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
414 # See which one is present here.
415 AC_MSG_CHECKING(__fdelt_chk type)
416 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
417 #undef _FORTIFY_SOURCE
419 #define _FORTIFY_SOURCE 2
420 #include <sys/select.h>
421 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
422 [ fdelt_type="long unsigned int"],
423 [ fdelt_type="long int"])
424 AC_MSG_RESULT($fdelt_type)
425 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
427 AC_SEARCH_LIBS([clock_gettime],[rt])
430 if test x$use_hardening != xno; then
431 AX_CHECK_COMPILE_FLAG([-Wformat],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat"],[AC_MSG_ERROR(Cannot enable -Wformat)])
432 AX_CHECK_COMPILE_FLAG([-Wformat-security],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat-security"],[AC_MSG_ERROR(Cannot enable -Wformat-security)],[-Wformat])
433 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"],[AC_MSG_ERROR(Cannot enable -Wstack-protector)])
434 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"],[AC_MSG_ERROR(Cannot enable -fstack-protector-all)])
436 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
437 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
438 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
439 ],[AC_MSG_ERROR(Cannot enable -U_FORTIFY_SOURCE)])
440 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
441 ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)])
443 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
444 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
446 if test x$TARGET_OS != xwindows; then
447 # All windows code is PIC, forcing it on just adds useless compile warnings
448 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"],[AC_MSG_ERROR(Cannot enable -fPIE)])
449 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"],[AC_MSG_ERROR(Cannot enable -pie)])
451 # These are only available on Windows.
452 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"],[AC_MSG_ERROR(Cannot enable --dynamicbase)])
453 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"],[AC_MSG_ERROR(Cannot enable --nxcompat)])
458 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
462 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
463 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
464 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
465 OBJCXXFLAGS="$CXXFLAGS"
468 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
469 if test x$TARGET_OS = xdarwin; then
470 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
473 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])
474 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
475 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
477 AC_CHECK_DECLS([strnlen])
479 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
482 #elif HAVE_SYS_ENDIAN_H
483 #include <sys/endian.h>
486 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
488 #include <byteswap.h>
491 dnl Check for MSG_NOSIGNAL
492 AC_MSG_CHECKING(for MSG_NOSIGNAL)
493 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
494 [[ int f = MSG_NOSIGNAL; ]])],
495 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
499 AC_MSG_CHECKING([for visibility attribute])
500 AC_LINK_IFELSE([AC_LANG_SOURCE([
501 int foo_def( void ) __attribute__((visibility("default")));
505 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
510 if test x$use_reduce_exports = xyes; then
511 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
516 if test x$use_reduce_exports = xyes; then
517 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
518 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
524 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
525 AC_SUBST(LEVELDB_CPPFLAGS)
529 if test x$enable_wallet != xno; then
530 dnl Check for libdb_cxx only if wallet enabled
534 dnl Check for libminiupnpc (optional)
535 if test x$use_upnp != xno; then
537 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
538 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
545 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
546 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
548 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
554 if test x$use_boost = xyes; then
556 dnl Check for boost libs
560 AX_BOOST_PROGRAM_OPTIONS
565 if test x$use_reduce_exports = xyes; then
566 AC_MSG_CHECKING([for working boost reduced exports])
567 TEMP_CPPFLAGS="$CPPFLAGS"
568 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
569 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
570 @%:@include <boost/version.hpp>
572 #if BOOST_VERSION >= 104900
573 // Everything is okay
575 # error Boost version is too old
580 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
582 CPPFLAGS="$TEMP_CPPFLAGS"
586 if test x$use_reduce_exports = xyes; then
587 CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
588 AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
591 if test x$use_tests = xyes; then
593 if test x$HEXDUMP = x; then
594 AC_MSG_ERROR(hexdump is required for tests)
598 if test x$use_boost = xyes; then
600 AX_BOOST_UNIT_TEST_FRAMEWORK
602 dnl Determine if -DBOOST_TEST_DYN_LINK is needed
603 AC_MSG_CHECKING([for dynamic linked boost test])
605 LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB"
606 TEMP_CPPFLAGS="$CPPFLAGS"
607 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
608 AC_LINK_IFELSE([AC_LANG_SOURCE([
609 #define BOOST_TEST_DYN_LINK
610 #define BOOST_TEST_MAIN
611 #include <boost/test/unit_test.hpp>
615 [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"],
618 CPPFLAGS="$TEMP_CPPFLAGS"
623 if test x$use_boost = xyes; then
625 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
627 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
628 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
629 dnl a working version is available, else fall back to sleep. sleep was removed
631 dnl If neither is available, abort.
633 LIBS="$BOOST_LIBS $LIBS"
634 TEMP_CPPFLAGS="$CPPFLAGS"
635 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
636 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
637 #include <boost/thread/thread.hpp>
638 #include <boost/version.hpp>
640 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
641 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
647 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
650 CPPFLAGS="$TEMP_CPPFLAGS"
652 if test x$boost_sleep != xyes; then
654 LIBS="$BOOST_LIBS $LIBS"
655 TEMP_CPPFLAGS="$CPPFLAGS"
656 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
657 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
658 #include <boost/version.hpp>
659 #include <boost/thread.hpp>
660 #include <boost/date_time/posix_time/posix_time_types.hpp>
662 #if BOOST_VERSION <= 105600
663 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
668 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
671 CPPFLAGS="$TEMP_CPPFLAGS"
674 if test x$boost_sleep != xyes; then
675 AC_MSG_ERROR(No working boost sleep implementation found.)
680 if test x$use_pkgconfig = xyes; then
682 if test x"$PKG_CONFIG" = "x"; then
683 AC_MSG_ERROR(pkg-config not found.)
690 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
691 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
692 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
693 if test x$use_qr != xno; then
694 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
700 echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++, libgmp'
702 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
703 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
705 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
706 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
708 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
709 if test x$use_qr != xno; then
710 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
711 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
715 # These packages don't provide pkgconfig config files across all
716 # platforms, so we use older autoconf detection mechanisms:
717 AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing))
718 AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)])
720 AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing))
721 AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)])
723 # libsnark header layout is broken unless cpp's -I is passed with the
724 # libsnark directory, so for now we use this hideous workaround:
725 echo 'Hunting for libsnark include directory...'
726 [LIBSNARK_INCDIR="$(echo "$CPPFLAGS" | sed 's,^.*-I\([^ ]*/include\).*$,\1/libsnark,')"]
727 if test -d "$LIBSNARK_INCDIR"; then
728 echo "Found libsnark include directory: $LIBSNARK_INCDIR"
730 AC_MSG_ERROR(libsnark include directory not found)
733 CPPFLAGS="-I$LIBSNARK_INCDIR $CPPFLAGS"
735 # Now check for libsnark compilability using traditional autoconf tests:
736 AC_CHECK_HEADER([libsnark/gadgetlib1/gadget.hpp],,AC_MSG_ERROR(libsnark headers missing))
737 AC_CHECK_LIB([snark],[main],LIBSNARK_LIBS=-lsnark, [AC_MSG_ERROR(libsnark missing)], [-lgmpxx])
739 LIBZCASH_LIBS="-lsnark -lgmp -lgmpxx -lboost_system-mt -lcrypto -lsodium -fopenmp"
741 CXXFLAGS_TEMP="$CXXFLAGS"
743 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
744 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS $GMP_LIBS $GMPXX_LIBS"
745 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
746 CXXFLAGS="$CXXFLAGS_TEMP"
749 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
751 AC_MSG_CHECKING([whether to build bitcoind])
752 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
753 AC_MSG_RESULT($build_bitcoind)
755 AC_MSG_CHECKING([whether to build utils (zcash-cli zcash-tx)])
756 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
757 AC_MSG_RESULT($build_bitcoin_utils)
759 AC_MSG_CHECKING([whether to build libraries])
760 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
761 if test x$build_bitcoin_libs = xyes; then
762 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
763 AC_CONFIG_FILES([libzcashconsensus.pc:libzcashconsensus.pc.in])
766 AC_MSG_RESULT($build_bitcoin_libs)
770 if test "x$use_ccache" != "xno"; then
771 AC_MSG_CHECKING(if ccache should be used)
772 if test x$CCACHE = x; then
773 if test "x$use_ccache" = "xyes"; then
774 AC_MSG_ERROR([ccache not found.]);
780 CC="$ac_cv_path_CCACHE $CC"
781 CXX="$ac_cv_path_CCACHE $CXX"
783 AC_MSG_RESULT($use_ccache)
785 if test "x$use_ccache" = "xyes"; then
786 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
790 AC_MSG_CHECKING([if wallet should be enabled])
791 if test x$enable_wallet != xno; then
793 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
799 dnl enable upnp support
800 AC_MSG_CHECKING([whether to build with support for UPnP])
801 if test x$have_miniupnpc = xno; then
802 if test x$use_upnp = xyes; then
803 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
807 if test x$use_upnp != xno; then
809 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
812 if test x$use_upnp_default != xno; then
816 AC_MSG_RESULT($use_upnp_default)
817 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
818 if test x$TARGET_OS = xwindows; then
819 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
826 dnl these are only used when qt is enabled
828 if test x$bitcoin_enable_qt != xno; then
829 dnl enable dbus support
830 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
831 if test x$bitcoin_enable_qt_dbus != xno; then
832 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
834 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
836 dnl enable qr support
837 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
838 if test x$have_qrencode = xno; then
839 if test x$use_qr = xyes; then
840 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
844 if test x$use_qr != xno; then
846 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
853 if test x$XGETTEXT = x; then
854 AC_MSG_WARN("xgettext is required to update qt translations")
857 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
858 if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
866 # conditional search for and use libzmq
867 AC_MSG_CHECKING([whether to build ZMQ support])
868 if test "x$use_zmq" = "xyes"; then
870 PKG_CHECK_MODULES([ZMQ],[libzmq >= 4],
871 [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])],
872 [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
873 AC_MSG_WARN([libzmq version 4.x or greater not found, disabling])
876 AC_MSG_RESULT([no, --disable-zmq used])
877 AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])
880 AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"])
882 AC_MSG_CHECKING([whether to build test_bitcoin])
883 if test x$use_tests = xyes; then
891 AC_MSG_CHECKING([whether to reduce exports])
892 if test x$use_reduce_exports = xyes; then
898 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
899 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
902 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
903 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
904 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
905 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
906 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
907 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
908 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
909 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
910 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
911 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
912 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
913 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
914 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
916 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
917 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
918 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
919 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
920 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
921 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
922 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
923 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
924 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
925 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
926 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
927 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
930 AC_SUBST(LIBTOOL_APP_LDFLAGS)
935 AC_SUBST(LEVELDB_TARGET_FLAGS)
936 AC_SUBST(MINIUPNPC_CPPFLAGS)
937 AC_SUBST(MINIUPNPC_LIBS)
940 AC_SUBST(LIBSNARK_LIBS)
941 AC_SUBST(LIBZCASH_LIBS)
942 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
943 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
944 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
946 dnl boost's m4 checks do something really nasty: they export these vars. As a
947 dnl result, they leak into secp256k1's configure and crazy things happen.
948 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
949 CPPFLAGS_TEMP="$CPPFLAGS"
951 CPPFLAGS="$CPPFLAGS_TEMP"
953 LDFLAGS_TEMP="$LDFLAGS"
955 LDFLAGS="$LDFLAGS_TEMP"
961 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
962 unset PKG_CONFIG_PATH
963 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
965 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
966 unset PKG_CONFIG_LIBDIR
967 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
969 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
970 AC_CONFIG_SUBDIRS([src/secp256k1])
974 dnl Taken from https://wiki.debian.org/RpathIssue
977 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
978 sed < libtool > libtool-2 \
979 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'