Skip to content

No macOS or Windows binary for 4.8.0 — I built both; 12 toolchain fixes + 3 bugs found, patches included #1288

Description

@PLAYX1

macOS and Windows users currently cannot run 4.8.0 at all. The release that fixes
the August 2026 consensus flaw exists as a Linux x86_64 binary only, so everyone else is
still on 4.7.0 — which stalls in the affected range and never recovers. That is a live
problem for anyone holding RVN on those platforms right now.

I built 4.8.0 for macOS arm64 and Windows x64 from the tagged source and have both
running against mainnet. Posting the full procedure and patches here rather than asking
anyone to trust binaries from a stranger — a maintainer-signed release would be far more
useful, and I am happy to open a PR with any part of this.

(The v4.8.0 tag lives in 2miners/Ravencoin, whose issue tracker is disabled, so I am
raising it here. Please redirect me if there is a better venue.)


Happy to open a PR with any of this.

Result

  • macOS: Raven-Qt.app (Apple Silicon native, arm64), ravend, raven-cli
  • Windows: raven-qt.exe (Qt statically linked, no runtime DLLs), ravend.exe, raven-cli.exe
  • A mainnet wallet stalled at height 4,472,087 resynced and crossed
    4,489,527 – 4,491,615 in 21 seconds, with zero bad-blk-height rejections
  • getnetworkinfo"subversion": "/Ravencoin:4.8.0/", "version": 4080000

Note the macOS side: the official 4.7.0 macOS binary is x86_64 and runs under Rosetta
on M-series Macs. depends/ has no aarch64-darwin support at all, so an arm64 build
needs the fixes below.

Consensus, signing and cryptographic code is untouched. Exactly one line under src/
affects the node (item 10).

Build environment

macOS 26.5 / Apple clang 21, mingw-w64 GCC 16.2. The build scripts are from 2017–2019,
so most of what follows is toolchain drift rather than bugs in Ravencoin. Roughly half
of these only appear on a macOS host
, so anyone who has only cross-compiled from Linux
will not have hit them.

depends

  1. config.sub predates arm64 macOS. It rejects arm64-apple-darwin but accepts
    aarch64-apple-darwin. Refreshing depends/config.{sub,guess} is not enough — every
    library tarball carries its own copy. Using HOST=aarch64-apple-darwin sidesteps all
    of them at once; the emitted code is identical.

  2. openssl.mk has no aarch64-darwin target, and passes no AR/RANLIB. Without
    them the macOS BSD ar refuses the mingw COFF objects
    (ranlib: warning: ... not a mach-o file) and writes a 96-byte empty archive, then
    exits 0
    . depends caches that as a successful build, and the failure only surfaces
    much later as undefined reference to OPENSSL_init_crypto while linking ravend.exe.
    This cost the most time by far — a size sanity-check on depends artifacts would have
    caught it immediately.

  3. builders/darwin.mk invokes the compiler by absolute path (xcrun -f clang),
    which skips the SDK selection xcrun clang would have done. Modern macOS has no
    /usr/include, so even <cstddef> fails to resolve. Needs -isysroot.
    Separately: the existing build_darwin_CC: = ... lines have a stray colon, so those
    variables are never actually set.

  4. Boost 1.71 vs clang 21, two issues:

    • derives from std::unary_function, removed from libc++ →
      -D_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION
    • mpl::integral_c casts value-1 back into the 0..3 enums in numeric/conversion,
      i.e. -1, rejected since clang 16 — and clang 21 no longer has
      -Wno-enum-constexpr-conversion
      , so it cannot be suppressed. Giving those three
      enums a fixed underlying type (enum foo : int) widens the legal range without
      changing any enumerator.
    • The main tree needs the same macro; configure's Boost::Thread probe fails without it.
  5. BDB 4.8 finds no arm64 mutex implementation, falls back to UNIX/fcntl, then aborts
    with "Unable to find a mutex implementation". --with-mutex=POSIX/pthreads/library
    fixes it — in-process locking only, wallet.dat format unaffected.

  6. qt.mk assumes GNU sed. BSD sed silently ignores the 0,/re/ address form and
    treats \0 as a literal 0. Two patches therefore appear to apply while changing
    nothing, and Qt's configure then fails with Project ERROR: failed to parse default search paths from compiler output because LIBRARY_PATH vanished from
    toolchain.prf. The clang.conf rewrite also has to be gated on darwin targets, or
    the host qmake is built with the mingw compiler and dies on -stdlib=libc++.

  7. native_ccache (2017) no longer configures, and the .dmg helpers
    (native_biplist etc.) invoke a bare python. Neither is needed to build the wallet.
    Dropping them via the command line is a trap: a command-line native_packages= also
    discards the native_packages += lines in depends/Makefile, taking
    native_protobuf with it.

  8. miniupnpc 2.0 vs GCC 16 — several warnings are now hard errors, and its
    Makefile.mingw defines its own CFLAGS, so the environment variable is ignored.

  9. qrencode returns the bare VERSION macro, which current autoheader no longer
    emits (only PACKAGE_VERSION).

Main tree

  1. RAND_screen() was removed in OpenSSL 1.1 (util.cpp:139), so Windows fails to
    link. Guarding it on OPENSSL_VERSION_NUMBER is enough — 1.1+ seeds its PRNG from
    the OS. This is the only functional change I needed.

  2. -lssp collides on modern mingw, which provides the stack protector in the CRT:
    multiple definition of __stack_chk_fail. Making AC_CHECK_LIB([ssp]) conditional
    on AC_CHECK_FUNC([__stack_chk_fail]) keeps hardening enabled either way.

  3. ~60 files rely on <stdexcept> / <limits> arriving transitively.
    CXXFLAGS="-include stdexcept -include limits" at make time fixes all of them
    without touching source. It must not go into configure: autoconf's legacy link
    probe declares extern "C" int exit ();, which conflicts with the real exit(int)
    and breaks Boost detection.

Bugs in released 4.8.0 (all platforms)

Found while testing, unrelated to the build:

  • The market price display is wrong. ravengui.cpp queries Binance's RVNBTC, but
    that market has been delisted. The endpoint still answers with a stale price of about
    10 sat — roughly 2.4× reality. Cross-checking the live RVNUSDT and BTCUSDT markets
    gives ~4.4 sat, which matches other exchanges. The wallet presents the stale number as
    fact. (It also still calls API v1, long deprecated.)

  • IPFS links never open on macOS. QDesktopServices::openUrl() returns true even when
    LaunchServices declines, and every call site discards the return value, so the action is
    silently dead with no feedback.

  • Two Clear buttons do nothing. AssignQualifier::clear() and FreezeAddress::clear()
    are declared as plain methods, so SLOT(clear()) never resolves — visible as
    QObject::connect: No such slot in the debug log.
    MyRestrictedAssetsTableModel::updateDisplayUnit() has the same problem.

Patches

Branch: https://github.com/PLAYX1/Ravencoin/tree/macos-windows-gui-4.8.0

Two commits — build fixes and defect fixes are separated from interface changes so they
can be taken piecemeal. I can rebase, split them further, or open a PR against whichever
branch you prefer.

I can also test macOS/Windows builds on Apple Silicon against mainnet if that helps.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions