diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a3e4a75..5c1e6a2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -124,13 +124,13 @@ jobs: dep-opts: "" config-opts: "--with-gui=qt5 --disable-tests" goal: deploy - sdk: 10.8 - sdk-shasum: "709b84adde0fbd1c15de4c9dadb36b3b8c65f9bb7f8a7152f0cf33ab7c3f57af" + sdk: 10.11 + sdk-shasum: "bec9d089ebf2e2dd59b1a811a38ec78ebd5da18cbbcd6ab39d1e59f64ac5033f" runs-on: ubuntu-22.04 container: image: ${{ matrix.container }} - options: ${{ matrix.container-options == '' && '-e 1ARCH=1ARCH' || matrix.container-options }} + options: ${{ matrix.container-options == '' && '-e 1ADVC=1ADVC' || matrix.container-options }} steps: - name: Configure container @@ -181,22 +181,24 @@ jobs: - name: Install SDK if: ${{ matrix.sdk }} - shell: bash env: - SDK_URL: https://github.com/phracker/MacOSX-SDKs/releases/download/10.15 - sdk-filename: MacOSX${{ matrix.sdk }}.sdk.tar.xz + sdk-filename: MacOSX${{ matrix.sdk }}.sdk.tar.gz run: | - set -euo pipefail - mkdir -p ./depends/sdk-sources ./depends/SDKs - echo "๐Ÿ“ฆ Downloading macOS SDK ${{ matrix.sdk }} from phrackerโ€ฆ" - curl -L --fail \ - "$SDK_URL/${{ env.sdk-filename }}" \ - -o "depends/sdk-sources/${{ env.sdk-filename }}" - echo "๐Ÿ” Verifying checksumโ€ฆ" - echo "${{ matrix.sdk-shasum }} depends/sdk-sources/${{ env.sdk-filename }}" | sha256sum -c - echo "๐Ÿ“‚ Extracting SDKโ€ฆ" - tar -C depends/SDKs -xf "depends/sdk-sources/${{ env.sdk-filename }}" - echo "โœ… SDK installed: depends/SDKs/${{ env.sdk-filename }}" + mkdir -p depends/sdk-sources + mkdir -p depends/SDKs + + cd depends/sdk-sources + + # First check: does NOT include path + echo "${{ matrix.sdk-shasum }} ${{ env.sdk-filename }}" | sha256sum -c || \ + curl --location --fail "$SDK_URL/${{ env.sdk-filename }}" -o "${{ env.sdk-filename }}" + + # Second check AFTER download + echo "${{ matrix.sdk-shasum }} ${{ env.sdk-filename }}" | sha256sum -c + + cd ../.. + + tar -C depends/SDKs -xf depends/sdk-sources/${{ env.sdk-filename }} - name: Dependency cache uses: actions/cache@v4 @@ -206,105 +208,22 @@ jobs: path: ./depends/built key: ${{ matrix.name }}-${{ env.cache-name }}-${{ hashFiles('depends/packages/*', '.github/workflows/ci.yml') }} - # # ๐Ÿงฉ Fix macOS LLVM 10.0.0 mirror (Ubuntu 18.04 build from GitHub) - # - name: Patch native_cctools.mk to LLVM 10.0.0 (GitHub, Ubuntu 18.04) - # if: matrix.name == 'x86_64-macos' - # shell: bash - # run: | - # set -euo pipefail - # CCTOOLS="depends/packages/native_cctools.mk" - - # # โœ… LLVM 10.0.0 toolchain info - # LLVM_VER="10.0.0" - # LLVM_FILE="clang+llvm-${LLVM_VER}-x86_64-linux-gnu-ubuntu-18.04.tar.xz" - # LLVM_URL="https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VER}" - # LLVM_SHA="b25f592a0c00686f03e3b7db68ca6dc87418f681f4ead4df4745a01d9be63843" - - # # โœ… Corrected cctools-port source (GitHub changed archive path!) - # CCTOOLS_VER="master" - # CCTOOLS_URL="https://github.com/tpoechtrager/cctools-port/archive/refs/heads" - # CCTOOLS_FILE="${CCTOOLS_VER}.tar.gz" - # CCTOOLS_SHA="579c46ce16a269f202de4f4118db00bfdef95e3aa251cc79d4726faef9f4dab2" - - # echo "๐Ÿงน Cleaning old LLVM/cctools artifacts..." - # rm -rf depends/work/download/native_cctools* depends/sources/clang*llvm-* || true - - # echo "โš™๏ธ Patching native_cctools.mk..." - # # --- cctools source --- - # sed -i "s|^\$(package)_version=.*|\$(package)_version=${CCTOOLS_VER}|" "${CCTOOLS}" - # sed -i "s|^\$(package)_download_path=.*|\$(package)_download_path=${CCTOOLS_URL}|" "${CCTOOLS}" - # sed -i "s|^\$(package)_file_name=.*|\$(package)_file_name=${CCTOOLS_FILE}|" "${CCTOOLS}" - # sed -i "s|^\$(package)_sha256_hash=.*|\$(package)_sha256_hash=${CCTOOLS_SHA}|" "${CCTOOLS}" - - # # --- LLVM toolchain (hard-coded URL + filename to avoid 404) --- - # sed -i "s|^\$(package)_clang_version=.*|\$(package)_clang_version=${LLVM_VER}|" "${CCTOOLS}" - # sed -i "s|^\$(package)_clang_download_path=.*|\$(package)_clang_download_path=${LLVM_URL}|" "${CCTOOLS}" - # sed -i "s|^\$(package)_clang_download_file=.*|\$(package)_clang_download_file=${LLVM_FILE}|" "${CCTOOLS}" - # sed -i "s|^\$(package)_clang_file_name=.*|\$(package)_clang_file_name=${LLVM_FILE}|" "${CCTOOLS}" - # sed -i "s|^\$(package)_clang_sha256_hash=.*|\$(package)_clang_sha256_hash=${LLVM_SHA}|" "${CCTOOLS}" - - # echo "๐Ÿ” Confirming patched fields..." - # grep -E '^\$\(package\)_(version|download_path|file_name|sha256_hash|clang_download_path|clang_file_name|clang_sha256_hash)=' "${CCTOOLS}" || true - - # echo "๐Ÿ“ฆ Installing LLVM ${LLVM_VER} toolchain..." - # apt-get update -y - # DEBIAN_FRONTEND=noninteractive apt-get install -y \ - # clang-10 llvm-10-dev libxml2-dev libedit-dev libncurses5 libtinfo5 \ - # libbz2-dev zlib1g-dev lld make patch autoconf automake libtool cmake gawk - - # update-alternatives --install /usr/bin/clang clang /usr/bin/clang-10 100 - # update-alternatives --install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-10 100 - - # echo "โœ… native_cctools.mk patched with correct GitHub refs/heads/master URL and verified LLVM 10.0.0." - - # - name: Patch dsymutil missing issue - # if: matrix.name == 'x86_64-macos' - # shell: bash - # run: | - # set -euo pipefail - # CCTOOLS_DIR="depends/packages/native_cctools.mk" - - # echo "โš™๏ธ Disabling dsymutil check (not included in LLVM 10.0.0 Linux build)..." - # sed -i '/llvm-dsymutil/d' "$CCTOOLS_DIR" - - # # Patch staging rule to tolerate missing dsymutil - # find depends/work/build/x86_64-apple-darwin11/ -type f -name "Makefile" -print0 | \ - # xargs -0 sed -i '/llvm-dsymutil/d' || true - - # echo "โœ… dsymutil references removed โ€” build will continue without it." + - name: Build depends + run: make $MAKEJOBS -C depends HOST=${{ matrix.host }} ${{ matrix.dep-opts }} - # - name: Fix macOS cross build dependencies - # if: matrix.name == 'x86_64-macos' + # - name: Build depends # run: | - # apt-get update - # DEBIAN_FRONTEND=noninteractive apt-get install -y \ - # clang llvm-dev libxml2-dev libssl-dev libbz2-dev libtinfo5 \ - # libncurses5 zlib1g-dev xz-utils cmake patch make bison flex - - # - name: Patch Boost toolset to prevent version clashes - # if: matrix.name == 'x86_64-macos' - # shell: bash - # run: | - # BOOST_MK="depends/packages/boost.mk" - # USERCFG="depends/sources/boost_1_64_0/tools/build/src/user-config.jam" - # mkdir -p "$(dirname $USERCFG)" - - # echo "๐Ÿ›  Removing auto-detected darwin toolsets..." - # sed -i 's/toolset=darwin//g' "$BOOST_MK" || true - - # echo "๐Ÿ›  Forcing Boost to use ONLY darwin-10.0.0..." - # sed -i 's#./b2 #./b2 toolset=darwin-10.0.0 #g' "$BOOST_MK" + # set +e + # make $MAKEJOBS -C depends HOST=${{ matrix.host }} ${{ matrix.dep-opts }} + # STATUS=$? - # echo "using darwin : 10.0.0 : x86_64-apple-darwin11-clang++ ;" >> "$USERCFG" + # echo "==== Attempting to dump util/domd files found so far ====" + # find depends/work -path "*/openssl*/util/domd" -exec sh -c ' + # echo "---- {} ----" + # sed -n "1,200p" "{}" + # ' \; - # echo "๐Ÿ” Verifying Boost config override:" - # grep -n "darwin-10.0.0" "$BOOST_MK" || true - # grep -n "darwin" "$USERCFG" || true - - # echo "โœ… Boost toolset pinned to darwin-10.0.0 (no conflicts)." - - - name: Build depends - run: make $MAKEJOBS -C depends HOST=${{ matrix.host }} ${{ matrix.dep-opts }} + # exit $STATUS - name: CCache uses: actions/cache@v4 @@ -321,14 +240,23 @@ jobs: chmod +x autogen.sh chmod -R +x depends || true chmod +x share/genbuild.sh + SHORT_COMMIT=$(echo "$GIT_COMMIT_ID" | cut -c1-7) depends/${{ matrix.host }}/native/bin/ccache --max-size=$CCACHE_SIZE + ./autogen.sh chmod +x configure || true - ./configure --prefix=`pwd`/depends/${{ matrix.host }} ${{ matrix.config-opts }} --enable-reduce-exports \ - CFLAGS="-std=c++17 -DGIT_COMMIT_ID=\\\"$SHORT_COMMIT\\\"" \ - CXXFLAGS="-std=c++17 -DGIT_COMMIT_ID=\\\"$SHORT_COMMIT\\\"" || ( cat config.log && false) - make $MAKEJOBS ${{ matrix.goal }} CXXFLAGS="-std=c++17" || (echo "Build failure. Verbose build follows." && make ${{ matrix.goal }} CXXFLAGS="-std=c++17" V=1 ; false) + + ./configure --prefix=`pwd`/depends/${{ matrix.host }} \ + ${{ matrix.config-opts }} \ + --enable-reduce-exports \ + CFLAGS="-pipe -O2 -DGIT_COMMIT_ID=\\\"$SHORT_COMMIT\\\"" \ + CXXFLAGS="-std=c++17 -pipe -O2 -DGIT_COMMIT_ID=\\\"$SHORT_COMMIT\\\"" \ + || (cat config.log && false) + + make $MAKEJOBS ${{ matrix.goal }} \ + CXXFLAGS="-std=c++17" \ + || (echo "Build failure. Verbose build follows." && make ${{ matrix.goal }} CXXFLAGS="-std=c++17" V=1 ; false) - name: Run benchmark if: ${{ matrix.run-bench }} diff --git a/.gitignore b/.gitignore index 5b6d24c..8726b1f 100644 --- a/.gitignore +++ b/.gitignore @@ -61,7 +61,6 @@ src/qt/bitcoin-qt.includes *.pyc *.o *.o-* -*.patch *.a *.pb.cc *.pb.h diff --git a/configure.ac b/configure.ac index 6fc6346..f12895e 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 5) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 0) -define(_CLIENT_VERSION_BUILD, 2) +define(_CLIENT_VERSION_BUILD, 3) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2025) define(_COPYRIGHT_HOLDERS,[The %s developers]) diff --git a/contrib/devtools/security-check.py b/contrib/devtools/security-check.py index 92c18fa..04d4e05 100644 --- a/contrib/devtools/security-check.py +++ b/contrib/devtools/security-check.py @@ -177,13 +177,29 @@ def check_PE_NX(executable): ] } -def identify_executable(executable): +def identify_executable(filename): with open(filename, 'rb') as f: magic = f.read(4) + + # Windows PE if magic.startswith(b'MZ'): return 'PE' - elif magic.startswith(b'\x7fELF'): + + # Linux ELF + if magic.startswith(b'\x7fELF'): return 'ELF' + + # macOS Mach-O (32/64-bit, swapped and unswapped) + MACHO_MAGICS = [ + b'\xfe\xed\xfa\xce', # 32-bit Mach-O + b'\xce\xfa\xed\xfe', # 32-bit reverse byte order + b'\xfe\xed\xfa\xcf', # 64-bit Mach-O + b'\xcf\xfa\xed\xfe', # 64-bit reverse byte order + ] + + if magic in MACHO_MAGICS: + return 'MACHO' # <- added type + return None if __name__ == '__main__': @@ -196,6 +212,11 @@ def identify_executable(executable): retval = 1 continue + # Skip Mach-O (macOS) + if etype == 'MACHO': + print('%s: skipping macOS Mach-O binary (no checks available)' % filename) + continue + failed = [] warning = [] for (name, func) in CHECKS[etype]: diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index d3d41cc..28e505c 100644 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -7,49 +7,55 @@ $(package)_sha256_hash=83bfc1507731a0906e387fc28b7ef5417d591429e51e788417fe9ff02 define $(package)_set_vars $(package)_config_opts_release=variant=release $(package)_config_opts_debug=variant=debug + +# Common Boost build configuration $(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 +# Linux native build $(package)_config_opts_linux=threadapi=pthread runtime-link=shared -# IMPORTANT: macOS now forced to GCC toolset +# IMPORTANT: macOS must NOT use darwin toolset! +# Boost darwin toolset is incompatible with Linux cross-compile. $(package)_config_opts_darwin=--toolset=gcc runtime-link=shared +# Windows builds $(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 + +# 32-bit Linux $(package)_config_opts_i686_linux=address-model=32 architecture=x86 +# Boost toolset assignments $(package)_toolset_$(host_os)=gcc $(package)_archiver_$(host_os)=$($(package)_ar) -# These stay defined but DO NOT get used anymore +# Mac fallback variables (not used but required to exist) $(package)_toolset_darwin=gcc $(package)_archiver_darwin=$($(package)_ar) boost_toolset_darwin=$($(package)_toolset_darwin) boost_archiver_darwin=$($(package)_archiver_darwin) -$(package)_config_libraries=chrono,filesystem,program_options,system,thread +$(package)_config_libraries=chrono,filesystem,program_options,system,thread,test $(package)_cxxflags=-std=c++11 -fvisibility=hidden $(package)_cxxflags_linux=-fPIC endef -# ================================================================== -# PREPROCESS: FORCE GCC TOOLSET FOR MACOS + EVERY OTHER HOST -# macOS cross compile will use gcc toolset with g++ invocation -# This avoids Boost's broken "darwin" toolset and missing libtool. -# ================================================================== +# ========================================================== +# PREPROCESS: Create Boost user-config.jam +# IMPORTANT: Always use 'gcc' toolset but inject Clang compiler +# ========================================================== define $(package)_preprocess_cmds echo "using gcc : : $($(package)_cxx) \ - : \"$($(package)_cxxflags) $($(package)_cppflags)\" \ - \"$($(package)_ldflags)\" \ - \"$($(package)_ar)\" \ - \"$(host_RANLIB)\" \ - \"$(host_STRIP)\" \ - ;" > user-config.jam + : \"$($(package)_cxxflags) $($(package)_cppflags)\" \ + \"$($(package)_ldflags)\" \ + \"$($(package)_ar)\" \ + \"$(host_RANLIB)\" \ + \"$(host_STRIP)\" \ + ;" > user-config.jam endef define $(package)_config_cmds @@ -57,9 +63,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 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) stage endef define $(package)_stage_cmds - ./b2 -d0 -j4 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) install + ./b2 -d0 -j2 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) install endef diff --git a/depends/packages/native_cctools.mk b/depends/packages/native_cctools.mk index 44d238c..1b659cb 100644 --- a/depends/packages/native_cctools.mk +++ b/depends/packages/native_cctools.mk @@ -1,45 +1,55 @@ package=native_cctools -$(package)_version=807d6fd1be5d2224872e381870c0a75387fe05e6 -$(package)_download_path=https://github.com/theuni/cctools-port/archive +$(package)_version=3764b223c011574971ee3ae09ce968ba5dc2f00f +$(package)_download_path=https://github.com/tpoechtrager/cctools-port/archive $(package)_file_name=$($(package)_version).tar.gz -$(package)_sha256_hash=a09c9ba4684670a0375e42d9d67e7f12c1f62581a27f28f7c825d6d7032ccc6a +$(package)_sha256_hash=3e35907bf376269a844df08e03cbb43e345c88125374f2228e03724b5f9a2a04 $(package)_build_subdir=cctools -$(package)_clang_version=3.7.1 -$(package)_clang_download_path=http://llvm.org/releases/$($(package)_clang_version) +$(package)_clang_version=6.0.1 +$(package)_clang_download_path=https://releases.llvm.org/$($(package)_clang_version) $(package)_clang_download_file=clang+llvm-$($(package)_clang_version)-x86_64-linux-gnu-ubuntu-14.04.tar.xz $(package)_clang_file_name=clang-llvm-$($(package)_clang_version)-x86_64-linux-gnu-ubuntu-14.04.tar.xz -$(package)_clang_sha256_hash=99b28a6b48e793705228a390471991386daa33a9717cd9ca007fcdde69608fd9 +$(package)_clang_sha256_hash=fa5416553ca94a8c071a27134c094a5fb736fe1bd0ecc5ef2d9bc02754e1bef0 + +$(package)_libtapi_version=3efb201881e7a76a21e0554906cf306432539cef +$(package)_libtapi_download_path=https://github.com/tpoechtrager/apple-libtapi/archive +$(package)_libtapi_download_file=$($(package)_libtapi_version).tar.gz +$(package)_libtapi_file_name=$($(package)_libtapi_version).tar.gz +$(package)_libtapi_sha256_hash=380c1ca37cfa04a8699d0887a8d3ee1ad27f3d08baba78887c73b09485c0fbd3 + $(package)_extra_sources=$($(package)_clang_file_name) +$(package)_extra_sources += $($(package)_libtapi_file_name) define $(package)_fetch_cmds $(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \ -$(call fetch_file,$(package),$($(package)_clang_download_path),$($(package)_clang_download_file),$($(package)_clang_file_name),$($(package)_clang_sha256_hash)) +$(call fetch_file,$(package),$($(package)_clang_download_path),$($(package)_clang_download_file),$($(package)_clang_file_name),$($(package)_clang_sha256_hash)) && \ +$(call fetch_file,$(package),$($(package)_libtapi_download_path),$($(package)_libtapi_download_file),$($(package)_libtapi_file_name),$($(package)_libtapi_sha256_hash)) endef define $(package)_extract_cmds mkdir -p $($(package)_extract_dir) && \ echo "$($(package)_sha256_hash) $($(package)_source)" > $($(package)_extract_dir)/.$($(package)_file_name).hash && \ echo "$($(package)_clang_sha256_hash) $($(package)_source_dir)/$($(package)_clang_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + echo "$($(package)_libtapi_sha256_hash) $($(package)_source_dir)/$($(package)_libtapi_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ $(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \ - mkdir -p toolchain/bin toolchain/lib/clang/3.5/include && \ - tar --strip-components=1 -C toolchain -xf $($(package)_source_dir)/$($(package)_clang_file_name) && \ + mkdir -p toolchain/bin toolchain/lib/clang/$($(package)_clang_version)/include && \ + mkdir -p libtapi && \ + tar --no-same-owner --strip-components=1 -C libtapi -xf $($(package)_source_dir)/$($(package)_libtapi_file_name) && \ + tar --no-same-owner --strip-components=1 -C toolchain -xf $($(package)_source_dir)/$($(package)_clang_file_name) && \ rm -f toolchain/lib/libc++abi.so* && \ - echo "#!/bin/sh" > toolchain/bin/$(host)-dsymutil && \ - echo "exit 0" >> toolchain/bin/$(host)-dsymutil && \ - chmod +x toolchain/bin/$(host)-dsymutil && \ - tar --strip-components=1 -xf $($(package)_source) + tar --no-same-owner --strip-components=1 -xf $($(package)_source) endef define $(package)_set_vars -$(package)_config_opts=--target=$(host) --disable-lto-support -$(package)_ldflags+=-Wl,-rpath=\\$$$$$$$$\$$$$$$$$ORIGIN/../lib -$(package)_cc=$($(package)_extract_dir)/toolchain/bin/clang -$(package)_cxx=$($(package)_extract_dir)/toolchain/bin/clang++ + $(package)_config_opts=--target=$(host) --disable-lto-support --with-libtapi=$($(package)_extract_dir) + $(package)_ldflags+=-Wl,-rpath=\\$$$$$$$$\$$$$$$$$ORIGIN/../lib + $(package)_cc=$($(package)_extract_dir)/toolchain/bin/clang + $(package)_cxx=$($(package)_extract_dir)/toolchain/bin/clang++ endef define $(package)_preprocess_cmds - cd $($(package)_build_subdir); ./autogen.sh && \ - sed -i.old "/define HAVE_PTHREADS/d" ld64/src/ld/InputFiles.h + CC=$($(package)_cc) CXX=$($(package)_cxx) INSTALLPREFIX=$($(package)_extract_dir) ./libtapi/build.sh && \ + CC=$($(package)_cc) CXX=$($(package)_cxx) INSTALLPREFIX=$($(package)_extract_dir) ./libtapi/install.sh && \ + sed -i.old "/define HAVE_PTHREADS/d" $($(package)_build_subdir)/ld64/src/ld/InputFiles.h endef define $(package)_config_cmds @@ -52,6 +62,9 @@ endef define $(package)_stage_cmds $(MAKE) DESTDIR=$($(package)_staging_dir) install && \ + mkdir -p $($(package)_staging_prefix_dir)/lib/ && \ + cd $($(package)_extract_dir) && \ + cp lib/libtapi.so.6 $($(package)_staging_prefix_dir)/lib/ && \ cd $($(package)_extract_dir)/toolchain && \ mkdir -p $($(package)_staging_prefix_dir)/lib/clang/$($(package)_clang_version)/include && \ mkdir -p $($(package)_staging_prefix_dir)/bin $($(package)_staging_prefix_dir)/include && \ @@ -62,4 +75,4 @@ define $(package)_stage_cmds cp bin/llvm-dsymutil $($(package)_staging_prefix_dir)/bin/$(host)-dsymutil && \ if `test -d include/c++/`; then cp -rf include/c++/ $($(package)_staging_prefix_dir)/include/; fi && \ if `test -d lib/c++/`; then cp -rf lib/c++/ $($(package)_staging_prefix_dir)/lib/; fi -endef +endef \ No newline at end of file diff --git a/depends/packages/native_ds_store.mk b/depends/packages/native_ds_store.mk index 116fa25..9c63537 100644 --- a/depends/packages/native_ds_store.mk +++ b/depends/packages/native_ds_store.mk @@ -7,10 +7,10 @@ $(package)_install_libdir=$(build_prefix)/lib/python/dist-packages $(package)_dependencies=native_biplist define $(package)_build_cmds - python setup.py build + python3 setup.py build endef define $(package)_stage_cmds mkdir -p $($(package)_install_libdir) && \ - python setup.py install --root=$($(package)_staging_dir) --prefix=$(build_prefix) --install-lib=$($(package)_install_libdir) + python3 setup.py install --root=$($(package)_staging_dir) --prefix=$(build_prefix) --install-lib=$($(package)_install_libdir) endef diff --git a/depends/packages/native_mac_alias.mk b/depends/packages/native_mac_alias.mk index 488ec8b..dc3c8b7 100644 --- a/depends/packages/native_mac_alias.mk +++ b/depends/packages/native_mac_alias.mk @@ -11,10 +11,10 @@ define $(package)_preprocess_cmds endef define $(package)_build_cmds - python setup.py build + python3 setup.py build endef define $(package)_stage_cmds mkdir -p $($(package)_install_libdir) && \ - python setup.py install --root=$($(package)_staging_dir) --prefix=$(build_prefix) --install-lib=$($(package)_install_libdir) + python3 setup.py install --root=$($(package)_staging_dir) --prefix=$(build_prefix) --install-lib=$($(package)_install_libdir) endef diff --git a/depends/packages/openssl.mk b/depends/packages/openssl.mk index aaaad22..df9f437 100644 --- a/depends/packages/openssl.mk +++ b/depends/packages/openssl.mk @@ -1,8 +1,9 @@ package=openssl -$(package)_version=1.0.2t -$(package)_download_path=http://slackware.cs.utah.edu/pub/openssl-ftp/source/old/1.0.2/ +$(package)_version=1.0.1k +$(package)_download_path=https://www.openssl.org/source $(package)_file_name=$(package)-$($(package)_version).tar.gz -$(package)_sha256_hash=14cb464efe7ac6b54799b34456bd69558a749a4931ecfd9cf9f71d7881cac7bc +$(package)_sha256_hash=8f9faeaebad088e772f4ef5e38252d472be4d878c6b3a2718c10a4fcebe7a41c +$(package)_patches=0001-Add-OpenSSL-termios-fix-for-musl-libc.patch define $(package)_set_vars $(package)_config_env=AR="$($(package)_ar)" RANLIB="$($(package)_ranlib)" CC="$($(package)_cc)" @@ -52,18 +53,26 @@ $(package)_config_opts_aarch64_linux=linux-generic64 $(package)_config_opts_mipsel_linux=linux-generic32 $(package)_config_opts_mips_linux=linux-generic32 $(package)_config_opts_powerpc_linux=linux-generic32 +$(package)_config_opts_riscv32_linux=linux-generic32 +$(package)_config_opts_riscv64_linux=linux-generic64 $(package)_config_opts_x86_64_darwin=darwin64-x86_64-cc $(package)_config_opts_x86_64_mingw32=mingw64 $(package)_config_opts_i686_mingw32=mingw +$(package)_config_opts_android=-fPIC +$(package)_config_opts_aarch64_android=linux-generic64 +$(package)_config_opts_x86_64_android=linux-generic64 +$(package)_config_opts_armv7a_android=linux-generic32 +$(package)_config_opts_i686_android=linux-generic32 endef define $(package)_preprocess_cmds + patch -p1 < $($(package)_patch_dir)/0001-Add-OpenSSL-termios-fix-for-musl-libc.patch && \ sed -i.old "/define DATE/d" util/mkbuildinf.pl && \ sed -i.old "s|engines apps test|engines|" Makefile.org endef define $(package)_config_cmds - ./Configure $($(package)_config_opts) && $(MAKE) depend + ./Configure $($(package)_config_opts) endef define $(package)_build_cmds @@ -76,4 +85,4 @@ endef define $(package)_postprocess_cmds rm -rf share bin etc -endef +endef \ No newline at end of file diff --git a/depends/patches/openssl/0001-Add-OpenSSL-termios-fix-for-musl-libc.patch b/depends/patches/openssl/0001-Add-OpenSSL-termios-fix-for-musl-libc.patch new file mode 100644 index 0000000..cfb125e --- /dev/null +++ b/depends/patches/openssl/0001-Add-OpenSSL-termios-fix-for-musl-libc.patch @@ -0,0 +1,17 @@ +diff --git a/crypto/ui/ui_openssl.c b/crypto/ui/ui_openssl.c +index a38c758..d99edc2 100644 +--- a/crypto/ui/ui_openssl.c ++++ b/crypto/ui/ui_openssl.c +@@ -190,9 +190,9 @@ + # undef SGTTY + #endif + +-#if defined(linux) && !defined(TERMIO) +-# undef TERMIOS +-# define TERMIO ++#if defined(linux) ++# define TERMIOS ++# undef TERMIO + # undef SGTTY + #endif + \ No newline at end of file diff --git a/depends/patches/openssl/secure_getenv.patch b/depends/patches/openssl/secure_getenv.patch new file mode 100644 index 0000000..74e25b0 --- /dev/null +++ b/depends/patches/openssl/secure_getenv.patch @@ -0,0 +1,20 @@ +diff -dur a/crypto/getenv.c b/crypto/getenv.c +--- a/crypto/getenv.c 2019-12-20 13:02:41.000000000 +0000 ++++ b/crypto/getenv.c 2021-09-20 03:02:04.125747397 +0000 +@@ -16,16 +16,7 @@ + + char *ossl_safe_getenv(const char *name) + { +-#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) +-# if __GLIBC_PREREQ(2, 17) +-# define SECURE_GETENV +- return secure_getenv(name); +-# endif +-#endif +- +-#ifndef SECURE_GETENV + if (OPENSSL_issetugid()) + return NULL; + return getenv(name); +-#endif + } diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index f47f76f..0ece77d 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -36,6 +36,28 @@ #include #include +#include +// ================================================================ +// C++17 compatibility: std::random_shuffle was removed. +// We provide a replacement that preserves the old behavior. +// ================================================================ +template +static void RandomShuffleCompat(RandomIt first, RandomIt last) +{ +#if __cplusplus >= 201703L + // Manual shuffle using GetRandInt() + if (first == last) return; + auto n = last - first; + for (decltype(n) i = n - 1; i > 0; --i) { + std::swap(first[i], first[GetRandInt(i + 1)]); + } +#else + // Old compilers still have std::random_shuffle + std::random_shuffle(first, last, GetRandInt); +#endif +} + + std::vector vpwallets; /** Transaction fee set by the user */ CFeeRate payTxFee(DEFAULT_TRANSACTION_FEE); @@ -2392,7 +2414,7 @@ bool CWallet::SelectCoinsMinConf(const CAmount& nTargetValue, const int nConfMin std::vector vValue; CAmount nTotalLower = 0; - random_shuffle(vCoins.begin(), vCoins.end(), GetRandInt); + RandomShuffleCompat(vCoins.begin(), vCoins.end()); for (const COutput &output : vCoins) {