Rust 1.95+ enables rust-lld by default on Linux. rust-lld treats
hidden symbol references (STV_HIDDEN) as hard errors, unlike the
traditional cc/ld.bfd linker used in Rust 1.94 and earlier.
vcpkg's graphite2 static library has gr_* symbols with hidden
visibility, causing link failures. Disable rust-lld with
-Clinker-features=-lld to use cc/ld.bfd as in the successful
v1.1.6 build (Rust 1.94.1).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove Cargo.lock from .gitignore and commit the lockfile with
tectonic sub-crates pinned to the versions that worked in v1.1.6.
Without a lockfile, cargo resolves latest sub-crate versions which
have breaking API changes incompatible with tectonic 0.15.0.
Workflow restored to v1.1.6 original (no linker hacks needed).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The v1.1.6 release built successfully without Cargo.lock committed
(cargo resolves fresh in CI). Our attempts to fix Linux linking by
switching linkers (lld → bfd → mold) and patching graphite2/ICU were
all caused by committing a Cargo.lock that pulled in incompatible
dependency versions.
Restore the workflow to the exact v1.1.6 state and remove Cargo.lock
from git, letting CI resolve dependencies naturally as before.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
tectonic compiles xetex C++ against vcpkg ICU 78 headers but the
linker finds system libicuuc.so (v70), causing undefined ucnv_*_78
symbols. Remove system ICU .so files to force static linking against
vcpkg's ICU 78.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
mold picks up system ICU (version 70) instead of vcpkg ICU (version 78),
causing undefined symbol errors for ucnv_*_78 functions. Add vcpkg
lib path via LIBRARY_PATH and -L flag to ensure correct ICU is linked.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ld.bfd handles hidden symbols but fails on Rust's version scripts.
lld handles version scripts but fails on hidden symbols.
mold handles both correctly.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ld.bfd errors on "anonymous version tag cannot be combined with
other version tags" from Rust-generated symbols.map. The
--undefined-version flag makes this non-fatal.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
rust-lld treats hidden symbol references as hard errors, but ld.bfd
resolves them. vcpkg's graphite2 has STV_HIDDEN on gr_* symbols which
lld refuses to link. Switch to ld.bfd via RUSTFLAGS.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
grep returns exit 1 when no match found, which aborts the script
under set -e. Wrap with { ... || true; } to prevent this.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use a temp file for symbol list instead of <() process substitution,
which fails in GitHub Actions shell. Also add explicit shell: bash.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
objcopy cannot modify symbols inside .a archives directly. Extract
individual .o files with ar, globalize gr_* symbols in each, then
repack the archive.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
vcpkg builds graphite2 with -fvisibility=hidden, making gr_* API
symbols invisible to the linker. Use objcopy --globalize-symbol to
make them visible again before the Tauri build.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
tectonic's dep_support requires graphite2 at the vcpkg path.
Replace vcpkg's hidden-visibility graphite2 with symlinks to
the system libgraphite2 (from libgraphite2-dev) which exports
all symbols properly.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
vcpkg builds graphite2 with hidden symbol visibility, causing
undefined symbol errors at link time. Remove vcpkg's graphite2
before building so the linker falls back to the system
libgraphite2-dev which exports all symbols properly.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The graphite2 hidden symbol issue is caused by fresh vcpkg builds,
not by tectonic version. The old v1 cache had a working graphite2
build. Restore the cache key to reuse it.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
tauri-plugin-dialog 2.6.0 → 2.7.1, tauri-plugin-fs 2.4.5 → 2.5.1
to match their NPM counterparts and fix version mismatch build error.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Previous commit reverted Cargo.lock too far, bringing tauri back to
2.10.3 which mismatches NPM @tauri-apps/api 2.11.0. This commit
keeps tauri at 2.11.1 while reverting tectonic to 0.15.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
tectonic 0.16 causes undefined hidden symbol gr_label_destroy on
Linux due to graphite2 visibility issues in vcpkg builds. Revert to
tectonic 0.15 which works correctly with the existing vcpkg setup.
Security fixes retained:
- rand 0.8.5 → 0.8.6, 0.9.2 → 0.9.4
Workflow: revert to x64-linux triplet with libgraphite2-dev, fresh
cache key v3.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Revert the custom static triplet (didn't fix the issue) and instead
install libgraphite2-dev via apt. The vcpkg-built graphite2 marks
gr_label_destroy as a hidden symbol, but tectonic 0.16's bridge
crate references it. The system graphite2 package exports it properly.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
tectonic's vcpkg dep_support looks for packages under the default
x64-linux triplet, but we install them under x64-linux-static.
Set VCPKGRS_TRIPLET=x64-linux-static so the Rust vcpkg crate
finds libpng and other dependencies in the correct location.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The default x64-linux triplet builds dynamic libraries, causing
graphite2's gr_label_destroy symbol to be hidden and unlinkable
after tectonic 0.15 → 0.16 upgrade.
Switch to a custom x64-linux-static triplet (static library linkage)
to match the approach used by macOS and Windows builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Force fresh vcpkg rebuild on Linux CI to resolve graphite2
gr_label_destroy linker error after tectonic 0.15 → 0.16 upgrade.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The Rust tauri crate was bumped to 2.11.1 in PR #146 but the NPM
@tauri-apps/api package stayed at 2.10.1, causing the Tauri build to
fail with a version mismatch error.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Update all version references to 1.1.7. Fix TypeScript errors in test
mocks caused by tauri 2.11 changing fs API signatures from string to
string | URL.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>