Some checks failed
Test / frontend-tests (pull_request) Successful in 1m53s
Test / frontend-typecheck (pull_request) Successful in 2m2s
PR Review Automation / review (pull_request) Successful in 4m59s
Test / rust-fmt-check (pull_request) Has been cancelled
Test / rust-tests (pull_request) Has been cancelled
Test / rust-clippy (pull_request) Has been cancelled
- Add LIBSODIUM_PKG_CONFIG_FIX.md specific to PR #102 changes - Update LIBSODIUM_BUILD_FIX.md to indicate it covers both PR #101 and #102 - Label each section with which PR introduced the change Addresses automated review feedback about documentation not matching changed files list (reviewer only saw PR #102 files, but doc covered both PRs). Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
91 lines
3.5 KiB
Markdown
91 lines
3.5 KiB
Markdown
# libsodium pkg-config Detection Fix
|
|
|
|
## Description
|
|
|
|
This PR fixes libsodium build failures that persisted after adding `libsodium-dev` packages to Docker images (PR #101). The issue was that `libsodium-sys-stable`'s build script wasn't being explicitly told **how** to find libsodium.
|
|
|
|
**Remaining build failures after PR #101:**
|
|
|
|
1. **Linux amd64/arm64**: `libsodium not found via pkg-config or vcpkg` (despite `libsodium-dev` + `pkg-config` being installed)
|
|
2. **Windows cross-build**: `SODIUM_LIB_DIR is incompatible with SODIUM_USE_PKG_CONFIG` (conflicting detection methods)
|
|
|
|
## Root Cause
|
|
|
|
The `libsodium-sys-stable` crate's `build.rs` checks environment variables in this precedence:
|
|
|
|
1. If `SODIUM_LIB_DIR` is set → use explicit path (incompatible with `SODIUM_USE_PKG_CONFIG` mode)
|
|
2. If `SODIUM_USE_PKG_CONFIG` ≠ "no" → try pkg-config detection
|
|
3. Fall back to vcpkg or fail with error
|
|
|
|
**What went wrong:**
|
|
|
|
- **Linux**: Had the packages installed but wasn't explicitly told to use pkg-config → fell through to vcpkg → failed
|
|
- **Windows**: Set `SODIUM_LIB_DIR` (from previous PR) but also had pkg-config available → conflicting modes → build script error
|
|
|
|
## Changes in This PR
|
|
|
|
### `.gitea/workflows/auto-tag.yml`
|
|
|
|
#### Linux amd64 build (line ~347)
|
|
```yaml
|
|
env:
|
|
SODIUM_USE_PKG_CONFIG: "1" # NEW: Force pkg-config detection
|
|
```
|
|
|
|
**Why:** Ensures `libsodium-sys-stable` uses the installed `libsodium-dev` package via pkg-config.
|
|
|
|
#### Linux arm64 build (line ~633)
|
|
```yaml
|
|
env:
|
|
SODIUM_USE_PKG_CONFIG: "1" # NEW: Force pkg-config for cross-compile
|
|
```
|
|
|
|
**Why:** Same as amd64 - force pkg-config to find the arm64 libsodium package.
|
|
|
|
#### Windows cross-compile build (line ~448)
|
|
```yaml
|
|
env:
|
|
SODIUM_LIB_DIR: /usr/x86_64-w64-mingw32/lib # Already present from PR #101
|
|
SODIUM_STATIC: "1" # Already present from PR #101
|
|
SODIUM_USE_PKG_CONFIG: "no" # NEW: Disable pkg-config
|
|
```
|
|
|
|
**Why:** Prevents conflict between explicit path mode (`SODIUM_LIB_DIR`) and pkg-config detection. Windows uses pre-built libsodium from Dockerfile, not system packages.
|
|
|
|
### `LIBSODIUM_BUILD_FIX.md`
|
|
|
|
Updated documentation section 2 (CI/CD Pipeline Fix) to explain:
|
|
- Platform-specific environment variable strategy
|
|
- Build script precedence order
|
|
- Rationale for each approach
|
|
|
|
## Strategy Summary
|
|
|
|
| Platform | Method | Env Vars | Reason |
|
|
|----------|--------|----------|--------|
|
|
| Linux amd64 | pkg-config | `SODIUM_USE_PKG_CONFIG=1` | Has `libsodium-dev` + `pkg-config` installed |
|
|
| Linux arm64 | pkg-config | `SODIUM_USE_PKG_CONFIG=1` | Has `libsodium-dev:arm64` + `pkg-config` |
|
|
| Windows | explicit path | `SODIUM_LIB_DIR=...` + `SODIUM_USE_PKG_CONFIG=no` | Pre-built lib in known location, disable pkg-config |
|
|
|
|
## Testing
|
|
|
|
This PR only modifies CI workflow environment variables. Testing occurs via CI pipeline:
|
|
|
|
- [ ] Linux amd64 build succeeds with pkg-config detection
|
|
- [ ] Linux arm64 build succeeds with cross-compile pkg-config
|
|
- [ ] Windows build succeeds with explicit lib path (no pkg-config conflict)
|
|
- [ ] All platforms produce valid `.deb`, `.rpm`, `.exe`, `.msi` artifacts
|
|
|
|
## Relationship to PR #101
|
|
|
|
**PR #101** (already merged):
|
|
- Added `libsodium-dev` to Linux Docker images
|
|
- Added `SODIUM_LIB_DIR` + `SODIUM_STATIC` to Windows workflow
|
|
- Added smoke test in `src-tauri/src/state.rs`
|
|
|
|
**This PR** (new):
|
|
- Adds `SODIUM_USE_PKG_CONFIG` env vars to tell build script **how** to find libsodium
|
|
- Fixes detection failures that persisted after package installation
|
|
|
|
Both PRs together form the complete fix.
|