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, 3)
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, 2016)
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])
153 AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], [])
156 AC_ARG_ENABLE([debug],
157 [AS_HELP_STRING([--enable-debug],
158 [use debug compiler flags and macros (default is no)])],
159 [enable_debug=$enableval],
162 if test "x$enable_debug" = xyes; then
163 if test "x$GCC" = xyes; then
164 CFLAGS="-g3 -O0 -DDEBUG"
167 if test "x$GXX" = xyes; then
168 CXXFLAGS="-g3 -O0 -DDEBUG"
172 ## TODO: Remove these hard-coded paths and flags. They are here for the sake of
173 ## compatibility with the legacy buildsystem.
175 if test "x$CXXFLAGS_overridden" = "xno"; then
176 CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wno-self-assign"
178 CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
181 [AS_HELP_STRING([--with-utils],
182 [build zcash-cli zcash-tx (default=yes)])],
183 [build_bitcoin_utils=$withval],
184 [build_bitcoin_utils=yes])
187 [AS_HELP_STRING([--with-libs],
188 [build libraries (default=yes)])],
189 [build_bitcoin_libs=$withval],
190 [build_bitcoin_libs=yes])
192 AC_ARG_WITH([daemon],
193 [AS_HELP_STRING([--with-daemon],
194 [build bitcoind daemon (default=yes)])],
195 [build_bitcoind=$withval],
196 [build_bitcoind=yes])
204 #pkgconfig does more harm than good with MinGW
208 AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing))
209 AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing))
210 AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing))
211 AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing))
212 AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing))
213 AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing))
214 AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing))
215 AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing))
216 AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing))
217 AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing))
218 AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing))
219 AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing))
220 AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing))
221 AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing))
222 AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing))
223 AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing))
224 AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing))
225 AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing))
226 AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing))
228 # -static is interpreted by libtool, where it has a different meaning.
229 # In libtool-speak, it's -all-static.
230 AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
232 AC_PATH_PROG([MAKENSIS], [makensis], none)
233 if test x$MAKENSIS = xnone; then
234 AC_MSG_WARN("makensis not found. Cannot create installer.")
237 AC_PATH_TOOL(WINDRES, windres, none)
238 if test x$WINDRES = xnone; then
239 AC_MSG_ERROR("windres not found")
242 CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
243 LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
244 if test "x$CXXFLAGS_overridden" = "xno"; then
245 CXXFLAGS="$CXXFLAGS -w"
248 i?86-*) WINDOWS_BITS=32 ;;
249 x86_64-*) WINDOWS_BITS=64 ;;
250 *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;;
252 AC_SUBST(WINDOWS_BITS)
254 dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against.
255 dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override
256 dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are
257 dnl also overridden to prevent their insertion later.
258 dnl This should only affect dll's.
259 archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib"
265 LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin"
266 if test x$cross_compiling != xyes; then
268 AC_CHECK_PROG([PORT],port, port)
269 if test x$PORT = xport; then
270 dnl add default macports paths
271 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
272 LIBS="$LIBS -L/opt/local/lib"
273 if test -d /opt/local/include/db62; then
274 CPPFLAGS="$CPPFLAGS -I/opt/local/include/db62"
275 LIBS="$LIBS -L/opt/local/lib/db62"
279 AC_CHECK_PROG([BREW],brew, brew)
280 if test x$BREW = xbrew; then
281 dnl These Homebrew packages may be keg-only, meaning that they won't be found
282 dnl in expected paths because they may conflict with system files. Ask
283 dnl Homebrew where each one is located, then adjust paths accordingly.
284 dnl It's safe to add these paths even if the functionality is disabled by
285 dnl the user (--without-wallet or --without-gui for example).
287 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
288 bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null`
289 qt5_prefix=`$BREW --prefix qt5 2>/dev/null`
290 if test x$openssl_prefix != x; then
291 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
292 export PKG_CONFIG_PATH
294 if test x$bdb_prefix != x; then
295 CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include"
296 LIBS="$LIBS -L$bdb_prefix/lib"
298 if test x$qt5_prefix != x; then
299 PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
300 export PKG_CONFIG_PATH
309 AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool)
310 AC_PATH_TOOL([OTOOL], [otool], otool)
311 AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage)
313 dnl libtool will try to strip the static lib, which is a problem for
314 dnl cross-builds because strip attempts to call a hard-coded ld,
315 dnl which may not exist in the path. Stripping the .a is not
316 dnl necessary, so just disable it.
322 AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
323 CPPFLAGS="$CPPFLAGS -DMAC_OSX"
332 if test x$use_comparison_tool != xno; then
333 if test x$JAVA = x; then
334 AC_MSG_ERROR("comparison tool set but java not found")
336 AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool)
339 if test x$use_comparison_tool_reorg_tests != xno; then
340 if test x$use_comparison_tool = x; then
341 AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified")
343 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1)
345 AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0)
348 if test x$use_lcov = xyes; then
349 if test x$LCOV = x; then
350 AC_MSG_ERROR("lcov testing requested but lcov not found")
352 if test x$GCOV = x; then
353 AC_MSG_ERROR("lcov testing requested but gcov not found")
355 if test x$JAVA = x; then
356 AC_MSG_ERROR("lcov testing requested but java not found")
358 if test x$GENHTML = x; then
359 AC_MSG_ERROR("lcov testing requested but genhtml not found")
361 if test x$use_comparison_tool = x; then
362 AC_MSG_ERROR("lcov testing requested but comparison tool was not specified")
364 LCOV="$LCOV --gcov-tool=$GCOV --rc lcov_branch_coverage=1"
365 GENHTML="$GENHTML --branch-coverage"
366 AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
367 [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
370 dnl Check for endianness
373 dnl Check for pthread compile/link requirements
376 # The following macro will add the necessary defines to bitcoin-config.h, but
377 # they also need to be passed down to any subprojects. Pull the results out of
378 # the cache and add them to CPPFLAGS.
380 # detect POSIX or GNU variant of strerror_r
383 if test x$ac_cv_sys_file_offset_bits != x &&
384 test x$ac_cv_sys_file_offset_bits != xno &&
385 test x$ac_cv_sys_file_offset_bits != xunknown; then
386 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
389 if test x$ac_cv_sys_large_files != x &&
390 test x$ac_cv_sys_large_files != xno &&
391 test x$ac_cv_sys_large_files != xunknown; then
392 CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files"
395 AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"])
397 AX_GCC_FUNC_ATTRIBUTE([visibility])
398 AX_GCC_FUNC_ATTRIBUTE([dllexport])
399 AX_GCC_FUNC_ATTRIBUTE([dllimport])
401 if test x$use_glibc_compat != xno; then
403 #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link
404 #in anyway for back-compat.
405 AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing))
407 #__fdelt_chk's params and return type have changed from long unsigned int to long int.
408 # See which one is present here.
409 AC_MSG_CHECKING(__fdelt_chk type)
410 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE
411 #undef _FORTIFY_SOURCE
413 #define _FORTIFY_SOURCE 2
414 #include <sys/select.h>
415 extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])],
416 [ fdelt_type="long unsigned int"],
417 [ fdelt_type="long int"])
418 AC_MSG_RESULT($fdelt_type)
419 AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk])
421 AC_SEARCH_LIBS([clock_gettime],[rt])
424 if test x$use_hardening != xno; then
425 AX_CHECK_COMPILE_FLAG([-Wformat],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat"],[AC_MSG_ERROR(Cannot enable -Wformat)])
426 AX_CHECK_COMPILE_FLAG([-Wformat-security],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wformat-security"],[AC_MSG_ERROR(Cannot enable -Wformat-security)],[-Wformat])
427 AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"],[AC_MSG_ERROR(Cannot enable -Wstack-protector)])
428 AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"],[AC_MSG_ERROR(Cannot enable -fstack-protector-all)])
430 AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[
431 AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[
432 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE"
433 ],[AC_MSG_ERROR(Cannot enable -U_FORTIFY_SOURCE)])
434 HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
435 ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)])
437 AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
438 AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
440 if test x$TARGET_OS != xwindows; then
441 # All windows code is PIC, forcing it on just adds useless compile warnings
442 AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"],[AC_MSG_ERROR(Cannot enable -fPIE)])
443 AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"],[AC_MSG_ERROR(Cannot enable -pie)])
445 # These are only available on Windows.
446 AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"],[AC_MSG_ERROR(Cannot enable --dynamicbase)])
447 AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"],[AC_MSG_ERROR(Cannot enable --nxcompat)])
452 AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing))
456 CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS"
457 CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS"
458 LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS"
459 OBJCXXFLAGS="$CXXFLAGS"
462 dnl this flag screws up non-darwin gcc even when the check fails. special-case it.
463 if test x$TARGET_OS = xdarwin; then
464 AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"])
467 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])
468 AC_SEARCH_LIBS([getaddrinfo_a], [anl], [AC_DEFINE(HAVE_GETADDRINFO_A, 1, [Define this symbol if you have getaddrinfo_a])])
469 AC_SEARCH_LIBS([inet_pton], [nsl resolv], [AC_DEFINE(HAVE_INET_PTON, 1, [Define this symbol if you have inet_pton])])
471 AC_CHECK_DECLS([strnlen])
473 AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,,
476 #elif HAVE_SYS_ENDIAN_H
477 #include <sys/endian.h>
480 AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
482 #include <byteswap.h>
485 dnl Check for MSG_NOSIGNAL
486 AC_MSG_CHECKING(for MSG_NOSIGNAL)
487 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
488 [[ int f = MSG_NOSIGNAL; ]])],
489 [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ],
493 AC_MSG_CHECKING([for visibility attribute])
494 AC_LINK_IFELSE([AC_LANG_SOURCE([
495 int foo_def( void ) __attribute__((visibility("default")));
499 AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
504 if test x$use_reduce_exports = xyes; then
505 AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.])
510 if test x$use_reduce_exports = xyes; then
511 AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
512 [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])])
518 AM_CONDITIONAL([EMBEDDED_LEVELDB],[true])
519 AC_SUBST(LEVELDB_CPPFLAGS)
523 if test x$enable_wallet != xno; then
524 dnl Check for libdb_cxx only if wallet enabled
528 dnl Check for libminiupnpc (optional)
529 if test x$use_upnp != xno; then
531 [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h],
532 [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])],
539 dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus
540 BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4])
542 if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests = xnononono; then
548 if test x$use_boost = xyes; then
550 dnl Check for boost libs
554 AX_BOOST_PROGRAM_OPTIONS
559 if test x$use_reduce_exports = xyes; then
560 AC_MSG_CHECKING([for working boost reduced exports])
561 TEMP_CPPFLAGS="$CPPFLAGS"
562 CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
563 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
564 @%:@include <boost/version.hpp>
566 #if BOOST_VERSION >= 104900
567 // Everything is okay
569 # error Boost version is too old
574 AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.])
576 CPPFLAGS="$TEMP_CPPFLAGS"
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
619 BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
621 dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however
622 dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if
623 dnl a working version is available, else fall back to sleep. sleep was removed
625 dnl If neither is available, abort.
627 LIBS="$BOOST_LIBS $LIBS"
628 TEMP_CPPFLAGS="$CPPFLAGS"
629 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
630 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
631 #include <boost/thread/thread.hpp>
632 #include <boost/version.hpp>
634 #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200)
635 boost::this_thread::sleep_for(boost::chrono::milliseconds(0));
641 AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])],
644 CPPFLAGS="$TEMP_CPPFLAGS"
646 if test x$boost_sleep != xyes; then
648 LIBS="$BOOST_LIBS $LIBS"
649 TEMP_CPPFLAGS="$CPPFLAGS"
650 CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
651 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
652 #include <boost/version.hpp>
653 #include <boost/thread.hpp>
654 #include <boost/date_time/posix_time/posix_time_types.hpp>
656 #if BOOST_VERSION <= 105600
657 boost::this_thread::sleep(boost::posix_time::milliseconds(0));
662 [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])],
665 CPPFLAGS="$TEMP_CPPFLAGS"
668 if test x$boost_sleep != xyes; then
669 AC_MSG_ERROR(No working boost sleep implementation found.)
674 if test x$use_pkgconfig = xyes; then
676 if test x"$PKG_CONFIG" = "x"; then
677 AC_MSG_ERROR(pkg-config not found.)
684 PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)])
685 PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)])
686 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])])
687 if test x$use_qr != xno; then
688 BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])])
694 echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++, libgmp'
696 AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing))
697 AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing))
699 AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),)
700 AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing))
702 BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found)))
703 if test x$use_qr != xno; then
704 BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])])
705 BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)])
709 # These packages don't provide pkgconfig config files across all
710 # platforms, so we use older autoconf detection mechanisms:
711 AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing))
712 AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)])
714 AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing))
715 AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)])
717 # libsnark header layout is broken unless cpp's -I is passed with the
718 # libsnark directory, so for now we use this hideous workaround:
719 echo 'Hunting for libsnark include directory...'
720 [LIBSNARK_INCDIR="$(echo "$CPPFLAGS" | sed 's,^.*-I\([^ ]*/include\).*$,\1/libsnark,')"]
721 if test -d "$LIBSNARK_INCDIR"; then
722 echo "Found libsnark include directory: $LIBSNARK_INCDIR"
724 AC_MSG_ERROR(libsnark include directory not found)
727 CPPFLAGS="-I$LIBSNARK_INCDIR $CPPFLAGS"
729 # Now check for libsnark compilability using traditional autoconf tests:
730 AC_CHECK_HEADER([libsnark/gadgetlib1/gadget.hpp],,AC_MSG_ERROR(libsnark headers missing))
731 AC_CHECK_LIB([snark],[main],LIBSNARK_LIBS=-lsnark, [AC_MSG_ERROR(libsnark missing)], [-lgmpxx])
733 LIBZCASH_LIBS="-lsnark -lgmp -lgmpxx -lboost_system-mt -lcrypto -lsodium -fopenmp"
735 CXXFLAGS_TEMP="$CXXFLAGS"
737 CXXFLAGS="$CXXFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS"
738 LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS $GMP_LIBS $GMPXX_LIBS"
739 AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),)
740 CXXFLAGS="$CXXFLAGS_TEMP"
743 BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path)
745 AC_MSG_CHECKING([whether to build bitcoind])
746 AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
747 AC_MSG_RESULT($build_bitcoind)
749 AC_MSG_CHECKING([whether to build utils (zcash-cli zcash-tx)])
750 AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
751 AC_MSG_RESULT($build_bitcoin_utils)
753 AC_MSG_CHECKING([whether to build libraries])
754 AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
755 if test x$build_bitcoin_libs = xyes; then
756 AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
757 AC_CONFIG_FILES([libzcashconsensus.pc:libzcashconsensus.pc.in])
760 AC_MSG_RESULT($build_bitcoin_libs)
764 if test "x$use_ccache" != "xno"; then
765 AC_MSG_CHECKING(if ccache should be used)
766 if test x$CCACHE = x; then
767 if test "x$use_ccache" = "xyes"; then
768 AC_MSG_ERROR([ccache not found.]);
774 CC="$ac_cv_path_CCACHE $CC"
775 CXX="$ac_cv_path_CCACHE $CXX"
777 AC_MSG_RESULT($use_ccache)
779 if test "x$use_ccache" = "xyes"; then
780 AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"])
784 AC_MSG_CHECKING([if wallet should be enabled])
785 if test x$enable_wallet != xno; then
787 AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions])
793 dnl enable upnp support
794 AC_MSG_CHECKING([whether to build with support for UPnP])
795 if test x$have_miniupnpc = xno; then
796 if test x$use_upnp = xyes; then
797 AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc")
801 if test x$use_upnp != xno; then
803 AC_MSG_CHECKING([whether to build with UPnP enabled by default])
806 if test x$use_upnp_default != xno; then
810 AC_MSG_RESULT($use_upnp_default)
811 AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state])
812 if test x$TARGET_OS = xwindows; then
813 MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB"
820 dnl these are only used when qt is enabled
822 if test x$bitcoin_enable_qt != xno; then
823 dnl enable dbus support
824 AC_MSG_CHECKING([whether to build GUI with support for D-Bus])
825 if test x$bitcoin_enable_qt_dbus != xno; then
826 AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in])
828 AC_MSG_RESULT($bitcoin_enable_qt_dbus)
830 dnl enable qr support
831 AC_MSG_CHECKING([whether to build GUI with support for QR codes])
832 if test x$have_qrencode = xno; then
833 if test x$use_qr = xyes; then
834 AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode")
838 if test x$use_qr != xno; then
840 AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in])
847 if test x$XGETTEXT = x; then
848 AC_MSG_WARN("xgettext is required to update qt translations")
851 AC_MSG_CHECKING([whether to build test_bitcoin-qt])
852 if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then
860 AC_MSG_CHECKING([whether to build test_bitcoin])
861 if test x$use_tests = xyes; then
869 AC_MSG_CHECKING([whether to reduce exports])
870 if test x$use_reduce_exports = xyes; then
876 if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_tests = xnonononono; then
877 AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui or --enable-tests])
880 AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin])
881 AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin])
882 AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows])
883 AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes])
884 AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes])
885 AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes])
886 AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes])
887 AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
888 AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
889 AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno])
890 AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno])
891 AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
892 AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
894 AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
895 AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
896 AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision])
897 AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
898 AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release])
899 AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release])
900 AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR)
901 AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR)
902 AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION)
903 AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD)
904 AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
905 AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
908 AC_SUBST(LIBTOOL_APP_LDFLAGS)
913 AC_SUBST(LEVELDB_TARGET_FLAGS)
914 AC_SUBST(MINIUPNPC_CPPFLAGS)
915 AC_SUBST(MINIUPNPC_LIBS)
918 AC_SUBST(LIBSNARK_LIBS)
919 AC_SUBST(LIBZCASH_LIBS)
920 AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py])
921 AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh])
922 AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh])
924 dnl boost's m4 checks do something really nasty: they export these vars. As a
925 dnl result, they leak into secp256k1's configure and crazy things happen.
926 dnl Until this is fixed upstream and we've synced, we'll just un-export them.
927 CPPFLAGS_TEMP="$CPPFLAGS"
929 CPPFLAGS="$CPPFLAGS_TEMP"
931 LDFLAGS_TEMP="$LDFLAGS"
933 LDFLAGS="$LDFLAGS_TEMP"
939 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
940 unset PKG_CONFIG_PATH
941 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
943 PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
944 unset PKG_CONFIG_LIBDIR
945 PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
947 ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no"
948 AC_CONFIG_SUBDIRS([src/secp256k1])
952 dnl Taken from https://wiki.debian.org/RpathIssue
955 AC_MSG_RESULT([Fixing libtool for -rpath problems.])
956 sed < libtool > libtool-2 \
957 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'