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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user