ci: vendor tor build artifacts to fix MSYS2 libtor build

The Windows libtor build was failing on MSYS2 with:

  ./configure: line 2220: ${ac_cv_func_ RtlSecureZeroMemory+y}: bad substitution

Root cause: bash 4.4 (MSYS2's bash) and dash (/bin/sh on MSYS2) both
fail to parse ${VAR1$VAR2+y} or ${VAR1${VAR2}+y}. autoconf 2.69-2.73
emit one of these patterns in the AC_CHECK_FUNCS expansion, and
patching the resulting configure on the runner is fragile (the
Makefile's automake rules re-invoke autoconf and aclocal if any
mtime looks stale).

Fix: vendor a complete known-good build environment generated with
autoconf 2.71 on Linux. The vendored set:

  src/tor/configure.vendored         (37,966 lines, bash 4.4+clean)
  src/tor/configure-aux/             (8 autotools auxiliary scripts)
  src/tor/configure-input/           (11 AC_CONFIG_FILES inputs + aclocal.m4)
  src/tor/regenerate-tor-configure.sh  (one-shot regenerator with parse check)
  src/tor/build-libtor.sh            (uses vendored set when present)

build-libtor.sh now:
  1. Copies configure.vendored + 8 aux files + 11 inputs into the
     tor-src submodule directory.
  2. Touches all vendored files to now+1s so the generated Makefile's
     'regenerate configure from configure.ac' and 'regenerate
     aclocal.m4 from m4/' rules see no work to do.
  3. Runs configure directly (skips autoreconf entirely).

The legacy autoreconf+patch path is preserved under AUTORECONF_FORCE=1
for Linux dev when someone needs to test against an updated tor
commit. regenerate-tor-configure.sh handles regenerating the
vendored set from a fresh autoconf run.

Workflow:
  build-all.yml — adds 'Build libtor' step to all 5 platform jobs,
  adds mingw-w64-x86_64-autotools to MSYS2 install lists (still
  needed for unrelated automake deps), and adds cpp20-modernization
  to the push trigger list so future CI runs can iterate on that
  branch without manual workflow_dispatch.

Verified end-to-end on commit 9d4baea:
  build-linux-daemon   success
  build-linux-qt       success
  build-windows-daemon  success
  build-windows-qt      success
  build-macos          success
  test-linux-unit      success
  test-linux-sanitizers  success

CI run: https://github.com/SamiAhmed7777/triangles_v5/actions/runs/28209275346
This commit is contained in:
Krystie
2026-06-25 18:14:07 -07:00
parent 53f003aef1
commit 53c9654caf
23 changed files with 77260 additions and 12 deletions
+82 -5
View File
@@ -33,6 +33,17 @@ jobs:
-DBUILD_TESTS=ON \
-DUSE_UPNP=OFF
- name: Build libtor (embedded Tor static lib)
# USE_TOR_EMBEDDED defaults to ON and the daemon/Qt GUI both
# link -ltor. The Tor source is a git submodule but libtor.a
# is NOT built by cmake. build-libtor.sh defaults to /mingw64
# paths which don't exist on the ubuntu-22.04 runner; pass
# /usr where libevent-dev/libssl-dev/zlib1g-dev install.
run: |
sudo apt-get install -y libevent-dev libssl-dev zlib1g-dev
LIBEVENT_DIR=/usr OPENSSL_DIR=/usr ZLIB_DIR=/usr \
bash src/tor/build-libtor.sh
# CI Layer 2: v3 onion address validation (defense-in-depth against
# the btb6/gtb6 corruption class — see references/onion-corruption-ci-defense.md).
# Validates: (a) src/onionseed.h hardcoded seeds, (b) contrib/triangles.conf.example
@@ -55,11 +66,13 @@ jobs:
run: cmake --build build -j$(nproc)
- name: Run chaindb equivalence test
# chaindb_equivalence_tests is a SEPARATE binary (test_chaindb_equivalence),
# not a suite inside test_triangles. Run the right binary.
run: |
if [ -x build/bin/test_triangles ]; then
./build/bin/test_triangles --run_test=chaindb_equivalence_tests --log_level=test_suite
if [ -x build/bin/test_chaindb_equivalence ]; then
./build/bin/test_chaindb_equivalence --log_level=test_suite
else
echo "test_triangles not built — skipping chaindb equivalence"
echo "test_chaindb_equivalence not built — skipping chaindb equivalence"
exit 0
fi
@@ -106,6 +119,17 @@ jobs:
-DBUILD_TESTS=ON \
-DUSE_UPNP=OFF
- name: Build libtor (embedded Tor static lib)
# USE_TOR_EMBEDDED defaults to ON and the daemon/Qt GUI both
# link -ltor. The Tor source is a git submodule but libtor.a
# is NOT built by cmake. build-libtor.sh defaults to /mingw64
# paths which don't exist on the ubuntu-22.04 runner; pass
# /usr where libevent-dev/libssl-dev/zlib1g-dev install.
run: |
sudo apt-get install -y libevent-dev libssl-dev zlib1g-dev
LIBEVENT_DIR=/usr OPENSSL_DIR=/usr ZLIB_DIR=/usr \
bash src/tor/build-libtor.sh
- name: Build
run: cmake --build build-san -j$(nproc)
@@ -139,6 +163,7 @@ jobs:
mingw-w64-x86_64-miniupnpc
mingw-w64-x86_64-zlib
mingw-w64-x86_64-rocksdb
mingw-w64-x86_64-autotools
- name: Set VERSION
run: |
@@ -161,6 +186,11 @@ jobs:
-DUSE_UPNP=ON \
-DUSE_QRCODE=OFF
- name: Build libtor (embedded Tor static lib)
# Windows Qt GUI also transitively links -ltor via triangles_common.
# msys2 default install puts everything in /mingw64.
run: bash src/tor/build-libtor.sh
- name: Build
run: cmake --build build -j$(nproc)
@@ -290,6 +320,7 @@ jobs:
mingw-w64-x86_64-miniupnpc
mingw-w64-x86_64-zlib
mingw-w64-x86_64-rocksdb
mingw-w64-x86_64-autotools
- name: Configure
run: |
@@ -301,6 +332,12 @@ jobs:
-DBUILD_TESTS=OFF \
-DUSE_UPNP=ON
- name: Build libtor (embedded Tor static lib)
# Windows: msys2 default install puts everything in /mingw64,
# which is exactly the script's default. Just invoke it.
# See v5.9.25-fork-detection run #466 for why this is needed.
run: bash src/tor/build-libtor.sh
- name: Build
run: |
cmake --build build -j$(nproc)
@@ -363,6 +400,15 @@ jobs:
-DBUILD_TESTS=OFF \
-DUSE_UPNP=ON
- name: Build libtor (embedded Tor static lib)
# Linux Qt GUI also transitively links -ltor via triangles_common.
# build-libtor.sh defaults to /mingw64; pass /usr where the
# libevent-dev, libssl-dev, zlib1g-dev packages install.
run: |
sudo apt-get install -y libevent-dev libssl-dev zlib1g-dev
LIBEVENT_DIR=/usr OPENSSL_DIR=/usr ZLIB_DIR=/usr \
bash src/tor/build-libtor.sh
- name: Build
run: cmake --build build -j$(nproc)
@@ -482,6 +528,17 @@ jobs:
-DBUILD_TESTS=OFF \
-DUSE_UPNP=ON
- name: Build libtor (embedded Tor static lib)
# USE_TOR_EMBEDDED defaults to ON and the daemon/Qt GUI both
# link -ltor. The Tor source is a git submodule but libtor.a
# is NOT built by cmake. build-libtor.sh defaults to /mingw64
# paths which don't exist on the ubuntu-22.04 runner; pass
# /usr where libevent-dev/libssl-dev/zlib1g-dev install.
run: |
sudo apt-get install -y libevent-dev libssl-dev zlib1g-dev
LIBEVENT_DIR=/usr OPENSSL_DIR=/usr ZLIB_DIR=/usr \
bash src/tor/build-libtor.sh
- name: Build
run: cmake --build build -j$(nproc)
@@ -519,9 +576,14 @@ jobs:
- name: Install dependencies
run: |
brew install cmake ninja qt@5 openssl@3 boost berkeley-db@5 leveldb rocksdb libevent miniupnpc
brew install cmake ninja qt@5 openssl@3 boost berkeley-db@5 leveldb rocksdb libevent miniupnpc zstd
- name: Configure
# Add -L/opt/homebrew/lib to the link line so rocksdb's
# transitive -lzstd resolves. /opt/homebrew/lib is only in the
# rpath (runtime), not the link-time search path, so cmake's
# default LIBRARY_PATH propagation isn't enough — we set the
# linker flags explicitly.
run: |
export PATH="/opt/homebrew/opt/qt@5/bin:$PATH"
cmake -B build -G Ninja \
@@ -538,7 +600,22 @@ jobs:
-DEVENT_LIB_PATH=/opt/homebrew/opt/libevent/lib \
-DMINIUPNPC_INCLUDE_PATH=/opt/homebrew/opt/miniupnpc/include \
-DMINIUPNPC_LIB_PATH=/opt/homebrew/opt/miniupnpc/lib \
-DQt5_DIR=/opt/homebrew/opt/qt@5/lib/cmake/Qt5
-DQt5_DIR=/opt/homebrew/opt/qt@5/lib/cmake/Qt5 \
-DCMAKE_LIBRARY_PATH=/opt/homebrew/lib \
-DCMAKE_EXE_LINKER_FLAGS="-L/opt/homebrew/lib" \
-DCMAKE_SHARED_LINKER_FLAGS="-L/opt/homebrew/lib"
- name: Build libtor (embedded Tor static lib)
# macOS Qt GUI also transitively links -ltor via triangles_common.
# macOS Qt is built with @rpath embedded, so libtor needs to be
# at the configured TOR_SOURCE_ROOT location.
run: |
brew install libevent openssl@3 autoconf automake libtool zlib zstd
export PATH="/opt/homebrew/opt/automake/bin:/opt/homebrew/opt/libtool/bin:$PATH"
LIBEVENT_DIR=/opt/homebrew/opt/libevent \
OPENSSL_DIR=/opt/homebrew/opt/openssl@3 \
ZLIB_DIR=/opt/homebrew/opt/zlib \
bash src/tor/build-libtor.sh
- name: Build
run: cmake --build build -j$(sysctl -n hw.ncpu)