diff --git a/Makefile.am b/Makefile.am index 66c63c37a..deb9638a9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -204,7 +204,7 @@ endif dist_noinst_SCRIPTS = autogen.sh -EXTRA_DIST = $(top_srcdir)/share/genbuild.sh qa/pull-tester/rpc-tests.sh qa/pull-tester/run-bitcoin-cli qa/rpc-tests $(DIST_DOCS) $(WINDOWS_PACKAGING) $(OSX_PACKAGING) +EXTRA_DIST = $(top_srcdir)/share/genbuild.sh qa/pull-tester/rpc-tests.sh qa/pull-tester/run-bitcoin-cli qa/rpc-tests qa/zerocash $(DIST_DOCS) $(WINDOWS_PACKAGING) $(OSX_PACKAGING) CLEANFILES = $(OSX_DMG) $(BITCOIN_WIN_INSTALLER) diff --git a/configure.ac b/configure.ac index 5debd219e..2c8bf75c5 100644 --- a/configure.ac +++ b/configure.ac @@ -37,6 +37,12 @@ if test "x${CXXFLAGS+set}" = "xset"; then else CXXFLAGS_overridden=no fi + +# Zerocash requries C++11 compatibility; set it early: +CXXFLAGS="-std=c++11 $CXXFLAGS" +# Zerocash uses this libsnark curve: +CPPFLAGS="-DCURVE_ALT_BN128 $CPPFLAGS" + AC_PROG_CXX m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX]) @@ -666,6 +672,9 @@ if test x$use_pkgconfig = xyes; then ] ) else + # BUG: Fix this: + echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++, libgmp' + AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing)) AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing)) @@ -679,6 +688,53 @@ else fi fi +# These packages don't provide pkgconfig config files across all +# platforms, so we use older autoconf detection mechanisms: +AC_CHECK_HEADER([gmp.h],,AC_MSG_ERROR(libgmp headers missing)) +AC_CHECK_LIB([gmp],[[__gmpn_sub_n]],GMP_LIBS=-lgmp, [AC_MSG_ERROR(libgmp missing)]) + +AC_CHECK_HEADER([gmpxx.h],,AC_MSG_ERROR(libgmpxx headers missing)) +AC_CHECK_LIB([gmpxx],[main],GMPXX_LIBS=-lgmpxx, [AC_MSG_ERROR(libgmpxx missing)]) + +AC_CHECK_HEADER([cryptopp/eccrypto.h],,AC_MSG_ERROR(libcryptopp headers missing)) +# We link against "main" as a stop-gap; crypto++ is full of template +# classes whose library symbols are mangled by some black alchemy. +AC_CHECK_LIB([cryptopp],[main],CRYPTOPP_LIBS=-lcryptopp, [AC_MSG_ERROR(libcryptopp missing)]) + +# libsnark header layout is broken unless cpp's -I is passed with the +# libsnark directory, so for now we use this hideous workaround: +echo 'Hunting for libsnark include directory...' +[LIBSNARK_INCDIR="$(echo "$CPPFLAGS" | sed 's,^.*-I\([^ ]*/include\).*$,\1/libsnark,')"] +if test -d "$LIBSNARK_INCDIR"; then + echo "Found libsnark include directory: $LIBSNARK_INCDIR" +else + AC_MSG_ERROR(libsnark include directory not found) +fi + +CPPFLAGS="-I$LIBSNARK_INCDIR $CPPFLAGS" + +# Now check for libsnark compilability using traditional autoconf tests: +AC_CHECK_HEADER([libsnark/gadgetlib1/gadget.hpp],,AC_MSG_ERROR(libsnark headers missing)) +AC_CHECK_LIB([snark],[main],LIBSNARK_LIBS=-lsnark, [AC_MSG_ERROR(libsnark missing)], [-lgmpxx]) + +# Abuse the ugly libsnark hack above further to get the libzerocash directory +[LIBZEROCASH_INCDIR=$(echo "$LIBSNARK_INCDIR" | sed 's,libsnark$,libzerocash,')] +if test -d "$LIBZEROCASH_INCDIR"; then + echo "Found libzerocash include directory: $LIBZEROCASH_INCDIR" +else + AC_MSG_ERROR(libzerocash include directory not found) +fi + +CPPFLAGS="-I$LIBZEROCASH_INCDIR $CPPFLAGS" + +# libzerocash depends on headers in ./src/, so for the following +# AC_CHECK_HEADER, that has to be on the include path list. +CPPFLAGS_TEMP="$CPPFLAGS" +CPPFLAGS="-I ./src/ $CPPFLAGS" +AC_CHECK_HEADER([libzerocash/libzerocash/Zerocash.h],,AC_MSG_ERROR(libzerocash headers missing)) +AC_CHECK_LIB([zerocash], [main],LIBZEROCASH_LIBS="-lzerocash -lsnark -lcryptopp -lgmp -lgmpxx -lboost_system-mt -lcrypto", [AC_MSG_ERROR(libzerocash missing)], [-lsnark -lcryptopp -lgmp -lgmpxx -lboost_system-mt -lcrypto]) +CPPFLAGS="$CPPFLAGS_TEMP" + AC_CHECK_LIB([crypto],[RAND_egd],[],[ AC_ARG_WITH([libressl], [AS_HELP_STRING([--with-libressl],[Build with system LibreSSL (default is no; DANGEROUS; NOT SUPPORTED)])], @@ -690,7 +746,7 @@ AC_CHECK_LIB([crypto],[RAND_egd],[],[ CFLAGS_TEMP="$CFLAGS" LIBS_TEMP="$LIBS" CFLAGS="$CFLAGS $SSL_CFLAGS $CRYPTO_CFLAGS" -LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS" +LIBS="$LIBS $SSL_LIBS $CRYPTO_LIBS $GMP_LIBS $GMPXX_LIBS" AC_CHECK_HEADER([openssl/ec.h],, AC_MSG_ERROR(OpenSSL ec header missing),) AC_MSG_CHECKING(for a supported OpenSSL version) @@ -883,6 +939,11 @@ AC_SUBST(BUILD_QT) AC_SUBST(BUILD_TEST_QT) AC_SUBST(MINIUPNPC_CPPFLAGS) AC_SUBST(MINIUPNPC_LIBS) +AC_SUBST(GMP_LIBS) +AC_SUBST(GMPXX_LIBS) +AC_SUBST(CRYPTOPP_LIBS) +AC_SUBST(LIBSNARK_LIBS) +AC_SUBST(LIBZEROCASH_LIBS) AC_CONFIG_FILES([Makefile src/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py]) AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh]) AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh]) diff --git a/depends/packages/ate-pairing.mk b/depends/packages/ate-pairing.mk new file mode 100644 index 000000000..dbeab633d --- /dev/null +++ b/depends/packages/ate-pairing.mk @@ -0,0 +1,17 @@ +package=ate-pairing +$(package)_version=0.1 +$(package)_download_path=https://github.com/herumi/$(package)/archive/ +$(package)_file_name=$(package)-$($(package)_git_commit).tar.gz +$(package)_download_file=$($(package)_git_commit).tar.gz +$(package)_sha256_hash=37c05b4a60653b912a0130d77ac816620890d65a51dd9629ed65c15b54c2d8e0 +$(package)_dependencies=xbyak libgmp + +$(package)_git_commit=dd7889f2881e66f87165fcd180a03cf659bcb073 + +define $(package)_build_cmds + $(MAKE) -j SUPPORT_SNARK=1 INC_DIR='-I../include $($(package)_cppflags)' LIB_DIR='-L../lib $($(package)_ldflags)' +endef + +define $(package)_stage_cmds + cp -rv include/ lib/ $($(package)_staging_dir)$(host_prefix) +endef diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index e7aa48ddf..621e669e2 100644 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -1,9 +1,8 @@ package=boost -$(package)_version=1_55_0 -$(package)_download_path=http://sourceforge.net/projects/boost/files/boost/1.55.0 +$(package)_version=1_57_0 +$(package)_download_path=http://sourceforge.net/projects/boost/files/boost/1.57.0 $(package)_file_name=$(package)_$($(package)_version).tar.bz2 -$(package)_sha256_hash=fff00023dd79486d444c8e29922f4072e1d451fc5a4d2b6075852ead7f2b7b52 -$(package)_patches=darwin_boost_atomic-1.patch darwin_boost_atomic-2.patch gcc_5_no_cxx11.patch +$(package)_sha256_hash=910c8c022a33ccec7f088bd65d4f14b466588dda94ba2124e78b8c57db264967 define $(package)_set_vars $(package)_config_opts_release=variant=release @@ -26,9 +25,6 @@ $(package)_cxxflags_linux=-fPIC endef define $(package)_preprocess_cmds - patch -p2 < $($(package)_patch_dir)/darwin_boost_atomic-1.patch && \ - patch -p2 < $($(package)_patch_dir)/darwin_boost_atomic-2.patch && \ - patch -p2 < $($(package)_patch_dir)/gcc_5_no_cxx11.patch && \ echo "using $(boost_toolset_$(host_os)) : : $($(package)_cxx) : \"$($(package)_cxxflags) $($(package)_cppflags)\" \"$($(package)_ldflags)\" \"$(boost_archiver_$(host_os))\" \"$(host_STRIP)\" \"$(host_RANLIB)\" \"$(host_WINDRES)\" : ;" > user-config.jam endef diff --git a/depends/packages/crypto++.mk b/depends/packages/crypto++.mk new file mode 100644 index 000000000..ed3730e3f --- /dev/null +++ b/depends/packages/crypto++.mk @@ -0,0 +1,20 @@ +package=crypto++ +$(package)_version=5.6.2 +$(package)_download_path=http://www.cryptopp.com/ +$(package)_file_name=cryptopp562.zip +$(package)_sha256_hash=5cbfd2fcb4a6b3aab35902e2e0f3b59d9171fee12b3fc2b363e1801dfec53574 +$(package)_dependencies= + +# SECURITY BUG: _extract_cmds is responsible for verifying the archive +# hash, but does not do so here: +define $(package)_extract_cmds + unzip $($(package)_source_dir)/$($(package)_file_name) +endef + +define $(package)_build_cmds + $(MAKE) static CXXFLAGS='-DNDEBUG -g -O2 -fPIC' +endef + +define $(package)_stage_cmds + $(MAKE) install PREFIX=$($(package)_staging_dir)$(host_prefix) +endef diff --git a/depends/packages/libgmp.mk b/depends/packages/libgmp.mk new file mode 100644 index 000000000..aa9a89b60 --- /dev/null +++ b/depends/packages/libgmp.mk @@ -0,0 +1,19 @@ +package=libgmp +$(package)_version=6.0.0a +$(package)_download_path=https://gmplib.org/download/gmp/ +$(package)_file_name=gmp-6.0.0a.tar.bz2 +$(package)_sha256_hash=7f8e9a804b9c6d07164cf754207be838ece1219425d64e28cfa3e70d5c759aaf +$(package)_dependencies= +$(package)_config_opts=--enable-cxx --disable-shared + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) CPPFLAGS='-fPIC' +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install ; echo '=== staging find for $(package):' ; find $($(package)_staging_dir) +endef diff --git a/depends/packages/libsnark.mk b/depends/packages/libsnark.mk new file mode 100644 index 000000000..620edaee1 --- /dev/null +++ b/depends/packages/libsnark.mk @@ -0,0 +1,22 @@ +package=libsnark +$(package)_version=0.1 +$(package)_download_path=https://github.com/scipr-lab/$(package)/archive/ +$(package)_file_name=$(package)-$($(package)_git_commit).tar.gz +$(package)_download_file=$($(package)_git_commit).tar.gz +$(package)_sha256_hash=b5ec84a836d0d305407d5f39c8176bae2bb448abe802a8d11ba0f88f17e6d358 +$(package)_git_commit=69f312f149cc4bd8def8e2fed26a7941ff41251d + +$(package)_dependencies=crypto++ libgmp xbyak ate-pairing +$(package)_patches=1_fix_Wl_flag.patch + +define $(package)_preprocess_cmds + patch -p1 < $($(package)_patch_dir)/1_fix_Wl_flag.patch +endef + +define $(package)_build_cmds + CXXFLAGS="-fPIC -DNO_PT_COMPRESSION=1" $(MAKE) lib DEPINST=$(host_prefix) CURVE=ALT_BN128 NO_PROCPS=1 NO_GTEST=1 NO_DOCS=1 STATIC=1 NO_SUPERCOP=1 +endef + +define $(package)_stage_cmds + $(MAKE) install STATIC=1 DEPINST=$(host_prefix) PREFIX=$($(package)_staging_dir)$(host_prefix) CURVE=ALT_BN128 NO_SUPERCOP=1 +endef diff --git a/depends/packages/libzerocash.mk b/depends/packages/libzerocash.mk new file mode 100644 index 000000000..c7f61130d --- /dev/null +++ b/depends/packages/libzerocash.mk @@ -0,0 +1,38 @@ +package=libzerocash +$(package)_download_path=https://github.com/Electric-Coin-Company/$(package)/archive/ +$(package)_file_name=$(package)-$($(package)_git_commit).tar.gz +$(package)_download_file=$($(package)_git_commit).tar.gz +$(package)_sha256_hash=b79290e4ef412c07d519995caa1016d78d8263c6805a8ecfa1f42f8754978f95 +$(package)_git_commit=29df1b8bb28dff1c3e7b5952944aa55b42c36f7b + +$(package)_dependencies=libsnark crypto++ openssl boost libgmp +$(package)_patches= + +define $(package)_preprocess_cmds + rm libzerocash/allocators.h libzerocash/serialize.h libzerocash/streams.h +endef + +# FIXME: How do we know, at the point where the _build_cms are run, that the +# $(host_prefix)/include/libsnark folder is there? The lifecycle of that folder +# is as follows: +# 1. First, the _stage_cmds of libsnark.mk create it in the staging directory. +# 2. At some point in time, the depends system moves it from the staging +# directory to the actual $(host_prefix)/include/libsnark directory. +# +# If (2) happens after the libzerocash_build_cmds get run, then what's in the +# $(host_prefix)/include/libsnark directory will be an *old* copy of the +# libsnark headers, and we might have to build twice in order for libzerocash to +# get the changes. If (2) happens before, then all is well, and it works. +# +# ** Which is it? ** +# +$(package)_cppflags += -I$(BASEDIR)/../src -I. -I$(host_prefix)/include -I$(host_prefix)/include/libsnark -DCURVE_ALT_BN128 -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -std=c++11 -pipe -O2 -O0 -g -Wstack-protector -fstack-protector-all -fPIE -fvisibility=hidden +$(package)_cppflags += -I$(BASEDIR)/../src -I. -I$(host_prefix)/include -I$(host_prefix)/include/libsnark -DCURVE_ALT_BN128 -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -std=c++11 -pipe -O2 -O0 -g -Wstack-protector -fstack-protector-all -fPIE -fvisibility=hidden -fPIC + +define $(package)_build_cmds + $(MAKE) all DEPINST=$(host_prefix) CXXFLAGS="$($(package)_cppflags)" STATIC=1 MINDEPS=1 USE_MT=1 LINK_RT=1 +endef + +define $(package)_stage_cmds + $(MAKE) install DEPINST=$(host_prefix) PREFIX=$($(package)_staging_dir)$(host_prefix) STATIC=1 MINDEPS=1 USE_MT=1 +endef diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk index 03908aba5..2c863438b 100644 --- a/depends/packages/packages.mk +++ b/depends/packages/packages.mk @@ -1,4 +1,5 @@ -packages:=boost openssl +zerocash_packages := libsnark crypto++ libgmp xbyak ate-pairing libzerocash +packages:=boost openssl $(zerocash_packages) native_packages := native_ccache native_comparisontool qt_native_packages = native_protobuf diff --git a/depends/packages/xbyak.mk b/depends/packages/xbyak.mk new file mode 100644 index 000000000..a4ad7e37e --- /dev/null +++ b/depends/packages/xbyak.mk @@ -0,0 +1,17 @@ +package=xbyak +$(package)_version=0.1 +$(package)_download_path=https://github.com/herumi/$(package)/archive/ +$(package)_file_name=$(package)-$($(package)_git_commit).tar.gz +$(package)_download_file=$($(package)_git_commit).tar.gz +$(package)_sha256_hash=467a9037c29bc417840177f3ff5d76910d3f688f2f216dd86ced4a7ac837bfb0 +$(package)_dependencies= + +$(package)_git_commit=62fd6d022acd83209e2a5af8ec359a3a1bed3a50 + +define $(package)_build_cmds + echo 'xbyak build is unnecessary for consumer ate-pairing.' +endef + +define $(package)_stage_cmds + $(MAKE) install PREFIX=$($(package)_staging_dir)$(host_prefix) +endef diff --git a/depends/patches/boost/darwin_boost_atomic-1.patch b/depends/patches/boost/darwin_boost_atomic-1.patch deleted file mode 100644 index 97f59cb7e..000000000 --- a/depends/patches/boost/darwin_boost_atomic-1.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff --git a/include/boost/atomic/detail/cas128strong.hpp b/include/boost/atomic/detail/cas128strong.hpp -index 906c13e..dcb4d7d 100644 ---- a/include/boost/atomic/detail/cas128strong.hpp -+++ b/include/boost/atomic/detail/cas128strong.hpp -@@ -196,15 +196,17 @@ class base_atomic - - public: - BOOST_DEFAULTED_FUNCTION(base_atomic(void), {}) -- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0) -+ explicit base_atomic(value_type const& v) BOOST_NOEXCEPT - { -+ memset(&v_, 0, sizeof(v_)); - memcpy(&v_, &v, sizeof(value_type)); - } - - void - store(value_type const& value, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT - { -- storage_type value_s = 0; -+ storage_type value_s; -+ memset(&value_s, 0, sizeof(value_s)); - memcpy(&value_s, &value, sizeof(value_type)); - platform_fence_before_store(order); - platform_store128(value_s, &v_); -@@ -247,7 +249,9 @@ class base_atomic - memory_order success_order, - memory_order failure_order) volatile BOOST_NOEXCEPT - { -- storage_type expected_s = 0, desired_s = 0; -+ storage_type expected_s, desired_s; -+ memset(&expected_s, 0, sizeof(expected_s)); -+ memset(&desired_s, 0, sizeof(desired_s)); - memcpy(&expected_s, &expected, sizeof(value_type)); - memcpy(&desired_s, &desired, sizeof(value_type)); - diff --git a/depends/patches/boost/darwin_boost_atomic-2.patch b/depends/patches/boost/darwin_boost_atomic-2.patch deleted file mode 100644 index ca5076520..000000000 --- a/depends/patches/boost/darwin_boost_atomic-2.patch +++ /dev/null @@ -1,55 +0,0 @@ -diff --git a/include/boost/atomic/detail/gcc-atomic.hpp b/include/boost/atomic/detail/gcc-atomic.hpp -index a130590..4af99a1 100644 ---- a/include/boost/atomic/detail/gcc-atomic.hpp -+++ b/include/boost/atomic/detail/gcc-atomic.hpp -@@ -958,14 +958,16 @@ class base_atomic - - public: - BOOST_DEFAULTED_FUNCTION(base_atomic(void), {}) -- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0) -+ explicit base_atomic(value_type const& v) BOOST_NOEXCEPT - { -+ memset(&v_, 0, sizeof(v_)); - memcpy(&v_, &v, sizeof(value_type)); - } - - void store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT - { -- storage_type tmp = 0; -+ storage_type tmp; -+ memset(&tmp, 0, sizeof(tmp)); - memcpy(&tmp, &v, sizeof(value_type)); - __atomic_store_n(&v_, tmp, atomics::detail::convert_memory_order_to_gcc(order)); - } -@@ -980,7 +982,8 @@ class base_atomic - - value_type exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT - { -- storage_type tmp = 0; -+ storage_type tmp; -+ memset(&tmp, 0, sizeof(tmp)); - memcpy(&tmp, &v, sizeof(value_type)); - tmp = __atomic_exchange_n(&v_, tmp, atomics::detail::convert_memory_order_to_gcc(order)); - value_type res; -@@ -994,7 +997,9 @@ class base_atomic - memory_order success_order, - memory_order failure_order) volatile BOOST_NOEXCEPT - { -- storage_type expected_s = 0, desired_s = 0; -+ storage_type expected_s, desired_s; -+ memset(&expected_s, 0, sizeof(expected_s)); -+ memset(&desired_s, 0, sizeof(desired_s)); - memcpy(&expected_s, &expected, sizeof(value_type)); - memcpy(&desired_s, &desired, sizeof(value_type)); - const bool success = __atomic_compare_exchange_n(&v_, &expected_s, desired_s, false, -@@ -1010,7 +1015,9 @@ class base_atomic - memory_order success_order, - memory_order failure_order) volatile BOOST_NOEXCEPT - { -- storage_type expected_s = 0, desired_s = 0; -+ storage_type expected_s, desired_s; -+ memset(&expected_s, 0, sizeof(expected_s)); -+ memset(&desired_s, 0, sizeof(desired_s)); - memcpy(&expected_s, &expected, sizeof(value_type)); - memcpy(&desired_s, &desired, sizeof(value_type)); - const bool success = __atomic_compare_exchange_n(&v_, &expected_s, desired_s, true, diff --git a/depends/patches/boost/gcc_5_no_cxx11.patch b/depends/patches/boost/gcc_5_no_cxx11.patch deleted file mode 100644 index 04514c593..000000000 --- a/depends/patches/boost/gcc_5_no_cxx11.patch +++ /dev/null @@ -1,37 +0,0 @@ -From eec808554936ae068b23df07ab54d4dc6302a695 Mon Sep 17 00:00:00 2001 -From: jzmaddock -Date: Sat, 23 Aug 2014 09:38:02 +0100 -Subject: [PATCH] Fix BOOST_NO_CXX11_VARIADIC_TEMPLATES definition - the - feature was introduced in GCC 4.4. - ---- - include/boost/config/compiler/gcc.hpp | 9 +-------- - 1 file changed, 1 insertion(+), 8 deletions(-) - -diff --git a/include/boost/config/compiler/gcc.hpp b/include/boost/config/compiler/gcc.hpp -index f37159d..97d8a18 100644 ---- a/include/boost/config/compiler/gcc.hpp -+++ b/include/boost/config/compiler/gcc.hpp -@@ -154,14 +154,6 @@ - # define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS - # define BOOST_NO_CXX11_RVALUE_REFERENCES - # define BOOST_NO_CXX11_STATIC_ASSERT -- --// Variadic templates compiler: --// http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html --# if defined(__VARIADIC_TEMPLATES) || (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4) && defined(__GXX_EXPERIMENTAL_CXX0X__)) --# define BOOST_HAS_VARIADIC_TMPL --# else --# define BOOST_NO_CXX11_VARIADIC_TEMPLATES --# endif - #endif - - // C++0x features in 4.4.n and later -@@ -176,6 +168,7 @@ - # define BOOST_NO_CXX11_DELETED_FUNCTIONS - # define BOOST_NO_CXX11_TRAILING_RESULT_TYPES - # define BOOST_NO_CXX11_INLINE_NAMESPACES -+# define BOOST_NO_CXX11_VARIADIC_TEMPLATES - #endif - - #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) diff --git a/depends/patches/libsnark/1_fix_Wl_flag.patch b/depends/patches/libsnark/1_fix_Wl_flag.patch new file mode 100644 index 000000000..bf2432036 --- /dev/null +++ b/depends/patches/libsnark/1_fix_Wl_flag.patch @@ -0,0 +1,19 @@ +commit 728c1ace30f2338b86331f0b83559409198e1f74 +Author: Taylor Hornby +Date: Wed Sep 9 16:46:48 2015 -0600 + + g++-4.9 requires commas to include the argument to ``rpath`` as a linker flag. + +diff --git a/Makefile b/Makefile +index 5f59388..68e91bb 100644 +--- a/Makefile ++++ b/Makefile +@@ -18,7 +18,7 @@ DEPSRC = depsrc + DEPINST = depinst + + CXXFLAGS += -I$(DEPINST)/include -Isrc +-LDFLAGS += -L$(DEPINST)/lib -Wl,-rpath $(DEPINST)/lib ++LDFLAGS += -L$(DEPINST)/lib -Wl,-rpath,$(DEPINST)/lib + LDLIBS += -lgmpxx -lgmp -lboost_program_options + # OpenSSL and its dependencies (needed explicitly for static builds): + LDLIBS += -lcrypto -ldl -lz diff --git a/src/Makefile.am b/src/Makefile.am index 0ed3a6382..7aade4ea3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -329,7 +329,13 @@ if ENABLE_WALLET zcashd_LDADD += libbitcoin_wallet.a endif -zcashd_LDADD += $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) +zcashd_LDADD += \ + $(BOOST_LIBS) \ + $(BDB_LIBS) \ + $(SSL_LIBS) \ + $(CRYPTO_LIBS) \ + $(MINIUPNPC_LIBS) \ + $(LIBZEROCASH_LIBS) # # bitcoin-cli binary # @@ -343,9 +349,11 @@ endif zcash_cli_LDADD = \ $(LIBBITCOIN_CLI) \ - $(LIBBITCOIN_UTIL) - -zcash_cli_LDADD += $(BOOST_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) + $(LIBBITCOIN_UTIL) \ + $(BOOST_LIBS) \ + $(SSL_LIBS) \ + $(CRYPTO_LIBS) \ + $(LIBZEROCASH_LIBS) # # bitcoin-tx binary # @@ -357,12 +365,14 @@ if TARGET_WINDOWS bitcoin_tx_SOURCES += bitcoin-tx-res.rc endif +# FIXME: Is libzerocash needed for bitcoin_tx? bitcoin_tx_LDADD = \ $(LIBBITCOIN_UNIVALUE) \ $(LIBBITCOIN_COMMON) \ $(LIBBITCOIN_UTIL) \ $(LIBBITCOIN_CRYPTO) \ - $(LIBSECP256K1) + $(LIBSECP256K1) \ + $(LIBZEROCASH_LIBS) bitcoin_tx_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS) # @@ -402,7 +412,7 @@ CLEANFILES = leveldb/libleveldb.a leveldb/libmemenv.a *.gcda *.gcno DISTCLEANFILES = obj/build.h -EXTRA_DIST = leveldb +EXTRA_DIST = leveldb libzerocash/Makefile clean-local: -$(MAKE) -C leveldb clean diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index 2ec3468e0..ef99cfeb4 100644 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -362,7 +362,7 @@ if ENABLE_WALLET qt_bitcoin_qt_LDADD += $(LIBBITCOIN_WALLET) endif qt_bitcoin_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CRYPTO) $(LIBBITCOIN_UNIVALUE) $(LIBLEVELDB) $(LIBMEMENV) \ - $(BOOST_LIBS) $(QT_LIBS) $(QT_DBUS_LIBS) $(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBSECP256K1) + $(BOOST_LIBS) $(QT_LIBS) $(QT_DBUS_LIBS) $(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBSECP256K1) $(LIBZEROCASH_LIBS) qt_bitcoin_qt_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) qt_bitcoin_qt_LIBTOOLFLAGS = --tag CXX diff --git a/src/Makefile.qttest.include b/src/Makefile.qttest.include index c5392cf30..8cfc0e05f 100644 --- a/src/Makefile.qttest.include +++ b/src/Makefile.qttest.include @@ -32,7 +32,7 @@ qt_test_test_bitcoin_qt_LDADD += $(LIBBITCOIN_WALLET) endif qt_test_test_bitcoin_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CRYPTO) $(LIBBITCOIN_UNIVALUE) $(LIBLEVELDB) \ $(LIBMEMENV) $(BOOST_LIBS) $(QT_DBUS_LIBS) $(QT_TEST_LIBS) $(QT_LIBS) \ - $(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBSECP256K1) + $(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBSECP256K1) $(LIBZEROCASH_LIBS) qt_test_test_bitcoin_qt_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) CLEAN_BITCOIN_QT_TEST = $(TEST_QT_MOC_CPP) qt/test/*.gcda qt/test/*.gcno diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 386911514..64d984e9e 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -88,7 +88,7 @@ endif test_test_bitcoin_SOURCES = $(BITCOIN_TESTS) $(JSON_TEST_FILES) $(RAW_TEST_FILES) test_test_bitcoin_CPPFLAGS = $(BITCOIN_INCLUDES) -I$(builddir)/test/ $(TESTDEFS) test_test_bitcoin_LDADD = $(LIBBITCOIN_SERVER) $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CRYPTO) $(LIBBITCOIN_UNIVALUE) $(LIBLEVELDB) $(LIBMEMENV) \ - $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(LIBSECP256K1) + $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(LIBSECP256K1) $(LIBZEROCASH_LIBS) if ENABLE_WALLET test_test_bitcoin_LDADD += $(LIBBITCOIN_WALLET) endif