Build local Guile-JSON on FreeBSD

This commit is contained in:
2026-04-01 10:48:54 +02:00
parent 15b9037034
commit 47d31e8992
4 changed files with 467 additions and 1 deletions

View File

@@ -571,3 +571,69 @@ Next recommended step:
1. obtain `Guile-JSON` compatible with the fixed local Guile build and install it into the same local dependency prefix
2. re-run the derivation-generation investigation again to identify the next configure-time or checkout-time blocker after `Guile-JSON`
3. continue keeping `/frx/store` as the intended experimental store root and keep `~/repos/bdwgc` in reserve if later FreeBSD-specific GC/thread issues appear
## 2026-04-01 — Phase 1.2 follow-up: local Guile-JSON built on FreeBSD; next blocker is Guile-SQLite3
Completed work:
- added a reproducible local Guile-JSON build harness:
- `tests/guix/build-local-guile-json.sh`
- updated the derivation-generation investigation harness to probe and record local recent-enough `(json)` availability in addition to the earlier `(gnutls)` and `(git)` checks
- used the current Guix package definition in `~/repos/guix/gnu/packages/guile.scm` as the source of truth for:
- `guile-json` version `4.7.3`
- expected Guix nix-base32 source hash `127k2xc07w1gnyqs40z4865l8p3ra5xgpcn569dz04lxsa709fiq`
- verified the downloaded Guile-JSON tarball against the translated SHA256:
- `38ba048ed29d12f05b32c5b2fb7a51795c448b41e403a2b1b72ff0035817f388`
- built and installed a local Guile-JSON validation copy into the same local dependency prefix already used for checkout prerequisites:
- `/tmp/guile-gnutls-freebsd-validate-install`
- validated successfully that the fixed local Guile now satisfies the Guix configure-time JSON requirement by:
- loading `(json)`
- using `define-json-mapping`
- decoding a small JSON object successfully
- re-ran the checkout derivation-generation investigation with:
- `GUILE_EXTRA_PREFIX=/tmp/guile-gnutls-freebsd-validate-install`
- store directory still set to `/frx/store`
- wrote the results to:
- `docs/reports/phase1-guile-json-freebsd.md`
Important findings:
- unlike the earlier Guile-Git step, Guile-JSON built cleanly from the release tarball and did not require autotools regeneration in this validation pass
- unlike the earlier Guile-GnuTLS step, no FreeBSD-specific source patch was needed here
- the shared local validation prefix now contains at least:
- Guile-GnuTLS
- Guile bytestructures
- Guile-Git
- Guile-JSON
- the Guix checkout now gets past the previously cleared dependency gates for:
- `(gnutls)`
- `Guile-Git`
- `Guile-JSON`
- after clearing those, the next configure-time blocker is now:
- `configure: error: A recent Guile-SQLite3 could not be found; please install it.`
Current assessment:
- the checkout-preparation path on FreeBSD has progressed another dependency layer deeper
- the project still has not yet reached derivation emission, daemon connectivity, or actual `/frx/store` population
- the next concrete blocker is now recent `Guile-SQLite3`, as reported directly by the real Guix checkout configure step
Recent commits:
- `e380e88``Add FreeBSD Guile verification harness`
- `cd721b1``Update progress after Guile verification`
- `27916cb``Diagnose Guile subprocess crash on FreeBSD`
- `02f7a7f``Validate local Guile fix on FreeBSD`
- `4aebea4``Add native GNU Hello FreeBSD build harness`
- `c944cdb``Validate Guix builder phases on FreeBSD`
- `0a2e48e``Validate GNU which builder phases on FreeBSD`
- `245a47d``Document gaps to real Guix FreeBSD builds`
- `d62e9b0``Investigate Guix derivation generation on FreeBSD`
- `c0a85ed``Build local Guile-GnuTLS on FreeBSD`
- `15b9037``Build local Guile-Git on FreeBSD`
Next recommended step:
1. obtain recent `Guile-SQLite3` compatible with the fixed local Guile build and install it into the same local dependency prefix
2. re-run the derivation-generation investigation again to identify the next configure-time or checkout-time blocker after `Guile-SQLite3`
3. continue keeping `/frx/store` as the intended experimental store root and keep `~/repos/bdwgc` in reserve if later FreeBSD-specific GC/thread issues appear

View File

@@ -0,0 +1,181 @@
# Phase 1.2 follow-up: local Guile-JSON built on FreeBSD and checkout investigation advanced again
Date: 2026-04-01
## Summary
This step addressed the next Guix checkout blocker found after adding local Guile-GnuTLS and Guile-Git support on FreeBSD.
Added/updated files:
- `tests/guix/build-local-guile-json.sh`
- updated `tests/guix/run-derivation-generation-investigation.sh`
The result is:
1. `guile-json` can be built successfully on FreeBSD against the previously validated fixed local Guile build
2. it can be installed into the same local dependency prefix already used for the earlier checkout prerequisite work
3. after making `(json)` available, the Guix checkout configure step advances again
4. the next checkout blocker is now `Guile-SQLite3`
## Inputs used
### Local Guile
The same fixed local Guile build was used:
- `/tmp/guile-freebsd-validate-install/bin/guile`
### Existing local dependency prefix
This step reused the same local dependency prefix already populated by earlier prerequisite builds:
- `/tmp/guile-gnutls-freebsd-validate-install`
At this point that prefix contains at least:
- Guile-GnuTLS
- Guile bytestructures
- Guile-Git
- Guile-JSON
### Guix source-of-truth package definition
This step used the current Guix package definition in `~/repos/guix/gnu/packages/guile.scm`:
- `guile-json`
- version `4.7.3`
- Guix nix-base32 source hash:
- `127k2xc07w1gnyqs40z4865l8p3ra5xgpcn569dz04lxsa709fiq`
Translated and verified SHA256:
```text
38ba048ed29d12f05b32c5b2fb7a51795c448b41e403a2b1b72ff0035817f388
```
## Build findings
### 1. The release tarball builds cleanly on FreeBSD with the fixed local Guile
Unlike the earlier Guile-Git step, `guile-json` was built from the upstream release tarball rather than a Git checkout, so no autotools regeneration step was required in this validation pass.
### 2. No new FreeBSD-specific source patch was needed
Unlike the earlier Guile-GnuTLS step, this build did not require any FreeBSD-specific source patch.
### 3. The validation matched Guix's actual configure-time expectation
Guix does not merely check that `(json)` loads; `configure.ac` calls `GUIX_CHECK_GUILE_JSON`, which requires a recent-enough Guile-JSON providing `define-json-mapping`.
The local validation therefore used the same kind of test:
- load `(json)`
- define a small JSON mapping with `define-json-mapping`
- decode a JSON object and confirm the mapped record matches the expected value
Observed validation result:
```text
ok
```
## Validation command
```sh
ENV_OUT=/tmp/guile-json-env.sh \
METADATA_OUT=/tmp/guile-json-metadata.txt \
./tests/guix/build-local-guile-json.sh
```
Default install prefix used by the harness:
```text
/tmp/guile-gnutls-freebsd-validate-install
```
## Result
The local Guile-JSON build succeeded.
Observed checks:
```text
json module check: ok
Existing (gnutls) module in prefix: present
Existing (git) module in prefix: present
```
This means the same local prefix now satisfies at least the following mandatory Guix checkout module requirements previously encountered on FreeBSD:
- `(gnutls)`
- `(git)` with recent Guile-Git export support
- `(json)` with recent-enough `define-json-mapping` support
## Re-running the checkout investigation
After installing Guile-JSON, the derivation-generation investigation was re-run with:
```sh
GUILE_EXTRA_PREFIX=/tmp/guile-gnutls-freebsd-validate-install \
METADATA_OUT=/tmp/guix-derivation-investigation-with-json.txt \
./tests/guix/run-derivation-generation-investigation.sh
```
The investigation continued to use the requested experimental directories:
- store: `/frx/store`
- local state: `/frx/var`
- sysconf: `/frx/etc`
## Updated result
With `(gnutls)`, `(git)`, and `(json)` available, the Guix checkout configure step progresses farther and now fails at the next missing Guile dependency:
```text
configure: error: A recent Guile-SQLite3 could not be found; please install it.
```
Relevant configure summary lines observed:
```text
checking whether Guile-JSON is available and recent enough... yes
configure: error: A recent Guile-SQLite3 could not be found; please install it.
```
## What this step demonstrates
This step demonstrates that:
1. the earlier `Guile-JSON` blocker is genuinely cleared on FreeBSD when using the fixed local Guile build plus the local dependency prefix
2. the checkout can move one more dependency layer deeper than before
3. the project is still in the checkout-prerequisite stage rather than the derivation/store/daemon stage
4. the next concrete prerequisite for reaching deeper Guix checkout usability on FreeBSD is `Guile-SQLite3`
## Current blocker stack
The current checkout path is now blocked by:
1. unsupported-platform configure gating unless `--with-courage` is used
2. missing recent `Guile-SQLite3` after supplying:
- Guile-GnuTLS
- Guile-Git
- Guile-JSON
The earlier missing blockers have now been cleared locally for validation:
- `(gnutls)`
- `(git)` / recent Guile-Git export requirement
- recent `(json)` support
## Recommended next step
Obtain or build `Guile-SQLite3` compatible with the same fixed local Guile build, install it into the same local dependency prefix, and re-run the derivation-generation investigation again.
That should show whether the next boundary lies at:
- `Guile-Gcrypt`
- `Guile-zlib`
- `Guile-lzlib`
- `Guile-semver`
- or finally something beyond configure-time Guile module prerequisites