diff --git a/configure.ac b/configure.ac index 724ae6e17..9308e39ac 100644 --- a/configure.ac +++ b/configure.ac @@ -449,8 +449,13 @@ if test x$use_hardening != xno; then HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2" ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)]) - AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)]) - AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)]) + if test x$BUILD_OS != xdarwin; then + AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)]) + AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)]) + else + AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_WARN(Cannot enable RELRO)]) + AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_WARN(Cannot enable BIND_NOW)]) + fi if test x$TARGET_OS != xwindows; then # All windows code is PIC, forcing it on just adds useless compile warnings diff --git a/depends/builders/darwin.mk b/depends/builders/darwin.mk index b366460e6..af60fa8ea 100644 --- a/depends/builders/darwin.mk +++ b/depends/builders/darwin.mk @@ -1,5 +1,5 @@ -build_darwin_CC: = $(shell xcrun -f clang) -build_darwin_CXX: = $(shell xcrun -f clang++) +build_darwin_CC = gcc-5 +build_darwin_CXX = g++-5 build_darwin_AR: = $(shell xcrun -f ar) build_darwin_RANLIB: = $(shell xcrun -f ranlib) build_darwin_STRIP: = $(shell xcrun -f strip) @@ -7,11 +7,11 @@ build_darwin_OTOOL: = $(shell xcrun -f otool) build_darwin_NM: = $(shell xcrun -f nm) build_darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool) build_darwin_SHA256SUM = shasum -a 256 -build_darwin_DOWNLOAD = curl --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -L -o +build_darwin_DOWNLOAD = wget --timeout=$(DOWNLOAD_CONNECT_TIMEOUT) --tries=$(DOWNLOAD_RETRIES) -nv -O #darwin host on darwin builder. overrides darwin host preferences. -darwin_CC=$(shell xcrun -f clang) -mmacosx-version-min=$(OSX_MIN_VERSION) -darwin_CXX:=$(shell xcrun -f clang++) -mmacosx-version-min=$(OSX_MIN_VERSION) +darwin_CC= gcc-5 +darwin_CXX= g++-5 darwin_AR:=$(shell xcrun -f ar) darwin_RANLIB:=$(shell xcrun -f ranlib) darwin_STRIP:=$(shell xcrun -f strip) diff --git a/depends/funcs.mk b/depends/funcs.mk index db13ac8eb..0b3bc6ee9 100644 --- a/depends/funcs.mk +++ b/depends/funcs.mk @@ -22,8 +22,8 @@ endef define fetch_file (test -f $$($(1)_source_dir)/$(4) || \ ( mkdir -p $$($(1)_download_dir) && echo Fetching $(1)... && \ - ( $(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(FALLBACK_DOWNLOAD_PATH)/$(4)" || \ - $(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(2)/$(3)" ) && \ + ( $(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(2)/$(3)" || \ + $(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(FALLBACK_DOWNLOAD_PATH)/$(4)" ) && \ echo "$(5) $$($(1)_download_dir)/$(4).temp" > $$($(1)_download_dir)/.$(4).hash && \ $(build_SHA256SUM) -c $$($(1)_download_dir)/.$(4).hash && \ mv $$($(1)_download_dir)/$(4).temp $$($(1)_source_dir)/$(4) && \ diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index 7303821be..a2e820163 100644 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -11,15 +11,14 @@ $(package)_config_opts_debug=variant=debug $(package)_config_opts=--layout=tagged --build-type=complete --user-config=user-config.jam $(package)_config_opts+=threading=multi link=static -sNO_BZIP2=1 -sNO_ZLIB=1 $(package)_config_opts_linux=threadapi=pthread runtime-link=shared -$(package)_config_opts_darwin=--toolset=darwin-4.2.1 runtime-link=shared +$(package)_config_opts_darwin=--toolset=gcc threadapi=pthread runtime-link=shared $(package)_config_opts_mingw32=binary-format=pe target-os=windows threadapi=win32 runtime-link=static $(package)_config_opts_x86_64_mingw32=address-model=64 $(package)_config_opts_i686_mingw32=address-model=32 $(package)_config_opts_i686_linux=address-model=32 architecture=x86 $(package)_toolset_$(host_os)=gcc $(package)_archiver_$(host_os)=$($(package)_ar) -$(package)_toolset_darwin=darwin -$(package)_archiver_darwin=$($(package)_libtool) +$(package)_toolset_darwin=gcc $(package)_config_libraries=chrono,filesystem,program_options,system,thread,test $(package)_cxxflags=-fvisibility=hidden $(package)_cxxflags_linux=-fPIC @@ -36,9 +35,9 @@ define $(package)_config_cmds endef define $(package)_build_cmds - ./b2 -d2 -j2 -d1 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) stage + ./b2 -d2 -j2 -d1 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) cxxflags=-std=c++11 stage endef define $(package)_stage_cmds - ./b2 -d0 -j4 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) install + ./b2 -d0 -j4 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) cxxflags=-std=c++11 install endef diff --git a/depends/packages/libsnark.mk b/depends/packages/libsnark.mk index 4a7d86bbb..a5df331b0 100644 --- a/depends/packages/libsnark.mk +++ b/depends/packages/libsnark.mk @@ -1,15 +1,15 @@ package=libsnark $(package)_version=0.1 -$(package)_download_path=https://github.com/zcash/$(package)/archive/ +$(package)_download_path=https://github.com/radix42/$(package)/archive/ $(package)_file_name=$(package)-$($(package)_git_commit).tar.gz $(package)_download_file=$($(package)_git_commit).tar.gz -$(package)_sha256_hash=dad153fe46e2e1f33557a195cbe7d69aed8b19ed9befc08ddcb8c6d3c025941f -$(package)_git_commit=9ada3f84ab484c57b2247c2f41091fd6a0916573 +$(package)_sha256_hash=9dbd5b44d3443e86463e934bfe1023cab4ca5948f8d74c23a67d9535c28d2584 +$(package)_git_commit=9be18569b8abcda1245c3912877075259599c0f1 $(package)_dependencies=libgmp libsodium define $(package)_build_cmds - CXXFLAGS="-fPIC -DBINARY_OUTPUT -DNO_PT_COMPRESSION=1" $(MAKE) lib DEPINST=$(host_prefix) CURVE=ALT_BN128 MULTICORE=1 NO_PROCPS=1 NO_GTEST=1 NO_DOCS=1 STATIC=1 NO_SUPERCOP=1 FEATUREFLAGS=-DMONTGOMERY_OUTPUT OPTFLAGS="-O2 -march=x86-64" +CC=gcc-5 CXX=g++-5 CXXFLAGS="-arch x86_64 -DBINARY_OUTPUT -DNO_PT_COMPRESSION=1" $(MAKE) lib DEPINST=$(host_prefix) CURVE=ALT_BN128 MULTICORE=0 NO_PROCPS=1 NO_GTEST=1 NO_DOCS=1 STATIC=1 NO_SUPERCOP=1 FEATUREFLAGS=-DMONTGOMERY_OUTPUT endef define $(package)_stage_cmds diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk index 5e45dbe98..4a4c6090f 100644 --- a/depends/packages/packages.mk +++ b/depends/packages/packages.mk @@ -1,7 +1,7 @@ -rust_packages := rust librustzcash -proton_packages := proton +#rust_packages := rust librustzcash +#proton_packages := proton zcash_packages := libsnark libgmp libsodium -packages := boost openssl libevent zeromq $(zcash_packages) googletest googlemock +packages := boost openssl libevent zeromq $(zcash_packages) native_packages := native_ccache wallet_packages=bdb diff --git a/depends/packages/rust.mk b/depends/packages/rust.mk index cdefbdbee..c01f7b21c 100644 --- a/depends/packages/rust.mk +++ b/depends/packages/rust.mk @@ -1,8 +1,8 @@ package=rust $(package)_version=1.16.0 $(package)_download_path=https://static.rust-lang.org/dist -$(package)_file_name=rust-$($(package)_version)-x86_64-unknown-linux-gnu.tar.gz -$(package)_sha256_hash=48621912c242753ba37cad5145df375eeba41c81079df46f93ffb4896542e8fd +$(package)_file_name=rust-$($(package)_version)-x86_64-apple-darwin.tar.gz +$(package)_sha256_hash=2d08259ee038d3a2c77a93f1a31fc59e7a1d6d1bbfcba3dba3c8213b2e5d1926 define $(package)_stage_cmds ./install.sh --destdir=$($(package)_staging_dir) --prefix=$(host_prefix)/native --disable-ldconfig diff --git a/src/crypto/equihash.cpp b/src/crypto/equihash.cpp index d22244aa9..460121226 100644 --- a/src/crypto/equihash.cpp +++ b/src/crypto/equihash.cpp @@ -16,6 +16,8 @@ #include "config/bitcoin-config.h" #endif +#include "compat/endian.h" + #include "crypto/equihash.h" #include "util.h" diff --git a/src/netbase.cpp b/src/netbase.cpp index c88a227fd..750508135 100644 --- a/src/netbase.cpp +++ b/src/netbase.cpp @@ -16,10 +16,6 @@ #include "util.h" #include "utilstrencodings.h" -#ifdef HAVE_GETADDRINFO_A -#include -#endif - #ifndef WIN32 #if HAVE_INET_PTON #include @@ -96,28 +92,6 @@ bool static LookupIntern(const char *pszName, std::vector& vIP, unsign } } -#ifdef HAVE_GETADDRINFO_A - struct in_addr ipv4_addr; -#ifdef HAVE_INET_PTON - if (inet_pton(AF_INET, pszName, &ipv4_addr) > 0) { - vIP.push_back(CNetAddr(ipv4_addr)); - return true; - } - - struct in6_addr ipv6_addr; - if (inet_pton(AF_INET6, pszName, &ipv6_addr) > 0) { - vIP.push_back(CNetAddr(ipv6_addr)); - return true; - } -#else - ipv4_addr.s_addr = inet_addr(pszName); - if (ipv4_addr.s_addr != INADDR_NONE) { - vIP.push_back(CNetAddr(ipv4_addr)); - return true; - } -#endif -#endif - struct addrinfo aiHint; memset(&aiHint, 0, sizeof(struct addrinfo)); aiHint.ai_socktype = SOCK_STREAM; @@ -130,31 +104,7 @@ bool static LookupIntern(const char *pszName, std::vector& vIP, unsign #endif struct addrinfo *aiRes = NULL; -#ifdef HAVE_GETADDRINFO_A - struct gaicb gcb, *query = &gcb; - memset(query, 0, sizeof(struct gaicb)); - gcb.ar_name = pszName; - gcb.ar_request = &aiHint; - int nErr = getaddrinfo_a(GAI_NOWAIT, &query, 1, NULL); - if (nErr) - return false; - - do { - // Should set the timeout limit to a resonable value to avoid - // generating unnecessary checking call during the polling loop, - // while it can still response to stop request quick enough. - // 2 seconds looks fine in our situation. - struct timespec ts = { 2, 0 }; - gai_suspend(&query, 1, &ts); - boost::this_thread::interruption_point(); - - nErr = gai_error(query); - if (0 == nErr) - aiRes = query->ar_result; - } while (nErr == EAI_INPROGRESS); -#else int nErr = getaddrinfo(pszName, NULL, &aiHint, &aiRes); -#endif if (nErr) return false; diff --git a/src/univalue/include/univalue.h b/src/univalue/include/univalue.h index 07314bc5c..908339ad4 100644 --- a/src/univalue/include/univalue.h +++ b/src/univalue/include/univalue.h @@ -25,6 +25,9 @@ public: typ = initialType; val = initialStr; } + UniValue(size_t val_) { + setInt(val_); + } UniValue(uint64_t val_) { setInt(val_); } @@ -54,6 +57,7 @@ public: bool setNull(); bool setBool(bool val); bool setNumStr(const std::string& val); + bool setInt(size_t val_); bool setInt(uint64_t val); bool setInt(int64_t val); bool setInt(int val_) { return setInt((int64_t)val_); } @@ -92,6 +96,10 @@ public: std::string s(val_); return push_back(s); } + bool push_back(size_t val_) { + UniValue tmpVal(val_); + return push_back(tmpVal); + } bool push_back(uint64_t val_) { UniValue tmpVal(val_); return push_back(tmpVal); @@ -190,6 +198,13 @@ static inline std::pair Pair(const char *cKey, std::string return std::make_pair(key, uVal); } +static inline std::pair Pair(const char *cKey, size_t sizeVal) +{ + std::string key(cKey); + UniValue uVal(sizeVal); + return std::make_pair(key, uVal); +} + static inline std::pair Pair(const char *cKey, uint64_t u64Val) { std::string key(cKey); diff --git a/src/univalue/lib/univalue.cpp b/src/univalue/lib/univalue.cpp index 47ca7aca7..b6c205f16 100644 --- a/src/univalue/lib/univalue.cpp +++ b/src/univalue/lib/univalue.cpp @@ -119,6 +119,15 @@ bool UniValue::setNumStr(const string& val_) return true; } +bool UniValue::setInt(size_t val_) +{ + ostringstream oss; + + oss << val_; + + return setNumStr(oss.str()); +} + bool UniValue::setInt(uint64_t val_) { ostringstream oss; diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index e73d05cc9..9962ab609 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -160,7 +160,7 @@ public: // Transaction hash uint256 hash; // Index into CTransaction.vjoinsplit - size_t js; + uint64_t js; // Index into JSDescription fields of length ZC_NUM_JS_OUTPUTS uint8_t n; diff --git a/zcutil/build.sh b/zcutil/build.sh index 8394de1b5..7badf3049 100755 --- a/zcutil/build.sh +++ b/zcutil/build.sh @@ -102,7 +102,7 @@ eval "$MAKE" --version eval "$CC" --version eval "$CXX" --version as --version -ld --version +ld -v HOST="$HOST" BUILD="$BUILD" NO_RUST="$RUST_ARG" NO_PROTON="$PROTON_ARG" "$MAKE" "$@" -C ./depends/ V=1 ./autogen.sh diff --git a/zcutil/fetch-params.sh b/zcutil/fetch-params.sh index bd13c0046..8c8502789 100755 --- a/zcutil/fetch-params.sh +++ b/zcutil/fetch-params.sh @@ -2,7 +2,11 @@ set -eu -PARAMS_DIR="$HOME/.zcash-params" +if [[ "$OSTYPE" == "darwin"* ]]; then + PARAMS_DIR="$HOME/Library/Application Support/ZcashParams" +else + PARAMS_DIR="$HOME/.zcash-params" +fi SPROUT_PKEY_NAME='sprout-proving.key' SPROUT_VKEY_NAME='sprout-verifying.key' @@ -18,17 +22,23 @@ function fetch_params { local dlname="${output}.dl" local expectedhash="$3" - if ! [ -f "$output" ] - then + if ! [ -f "$output" ]; then echo "Retrieving: $url" - wget \ - --progress=dot:giga \ - --output-document="$dlname" \ - --continue \ - --retry-connrefused --waitretry=3 --timeout=30 \ - "$url" - - "$SHA256CMD" $SHA256ARGS -c </$lockfile" - # acquire the lock - flock -n 200 \ - && return 0 \ - || return 1 + if [[ "$OSTYPE" == "darwin"* ]]; then + if shlock -f ${lockfile} -p $$; then + return 0 + else + return 1 + fi + else + # create lock file + eval "exec 200>/$lockfile" + # acquire the lock + flock -n 200 \ + && return 0 \ + || return 1 + fi } function exit_locked_error {