198 lines
5.8 KiB
Markdown
198 lines
5.8 KiB
Markdown
# Phase 1.2 follow-up: local Guile-Git stack built on FreeBSD and checkout investigation advanced again
|
|
|
|
Date: 2026-04-01
|
|
|
|
## Summary
|
|
|
|
This step addressed the next checkout blocker found after local Guile-GnuTLS support was added on FreeBSD.
|
|
|
|
Added/updated files:
|
|
|
|
- `tests/guix/build-local-guile-git.sh`
|
|
- updated `tests/guix/run-derivation-generation-investigation.sh`
|
|
|
|
The new result is:
|
|
|
|
1. `guile-bytestructures` and `guile-git` can be built successfully on FreeBSD against the previously validated fixed local Guile build
|
|
2. these modules can be installed into the same local prefix already used for the Guile-GnuTLS validation copy
|
|
3. after making both `(gnutls)` and `(git)` available, the Guix checkout configure step advances again
|
|
4. the next checkout blocker is now `Guile-JSON`
|
|
|
|
## Inputs used
|
|
|
|
### Local Guile
|
|
|
|
The same fixed local Guile build was used:
|
|
|
|
- `/tmp/guile-freebsd-validate-install/bin/guile`
|
|
|
|
### Existing local dependency prefix
|
|
|
|
To keep checkout prerequisites together, this step installed into the existing prefix already populated by the earlier Guile-GnuTLS validation step:
|
|
|
|
- `/tmp/guile-gnutls-freebsd-validate-install`
|
|
|
|
That prefix now contains at least:
|
|
|
|
- Guile-GnuTLS
|
|
- Guile bytestructures
|
|
- Guile-Git
|
|
|
|
### Guix source-of-truth package definitions
|
|
|
|
This step used the current Guix package definitions in `~/repos/guix/gnu/packages/guile.scm`:
|
|
|
|
- `guile-bytestructures`
|
|
- version `1.0.10`
|
|
- `guile-git`
|
|
- version `0.10.0`
|
|
|
|
Because both Guix packages use `git-fetch`, the local harness cloned the matching upstream tags and recorded the resolved commits:
|
|
|
|
- `guile-bytestructures` tag `1.0.10`
|
|
- commit `27cadba6b69a01b38b33bb39b9766d713eb90c1b`
|
|
- `guile-git` tag `v0.10.0`
|
|
- commit `05d4a48c811f29c8db80ee6697fe658950fb503e`
|
|
|
|
### Host-side library dependency
|
|
|
|
The host already had the needed `libgit2` package installed. The build used:
|
|
|
|
- `libgit2` version `1.9.2`
|
|
|
|
observed via:
|
|
|
|
```text
|
|
pkg-config --modversion libgit2
|
|
```
|
|
|
|
## Build findings
|
|
|
|
### 1. Git checkouts need autotools regeneration
|
|
|
|
Both packages were built from the Git source layout reflected by the Guix package definitions, so generated configure scripts were not assumed to exist.
|
|
|
|
Observed working bootstrap paths:
|
|
|
|
- `guile-bytestructures`: `autoreconf -vfi`
|
|
- `guile-git`: `autoreconf -vfi` via the harness fallback path
|
|
|
|
This matches the fact that the Guix package definitions already list autotools components among native inputs.
|
|
|
|
### 2. No new FreeBSD-specific source patch was needed here
|
|
|
|
Unlike the earlier Guile-GnuTLS build, neither `guile-bytestructures` nor `guile-git` required a FreeBSD-specific source patch during this validation step.
|
|
|
|
### 3. The Guile-Git version/export check now passes locally
|
|
|
|
Guix `configure.ac` checks not only that `(git)` can be loaded, but also that the module exports a sufficiently recent symbol:
|
|
|
|
- `graph-descendant?`
|
|
|
|
The local validation explicitly checked that this export is present and callable enough to satisfy the configure-time requirement.
|
|
|
|
## Validation command
|
|
|
|
```sh
|
|
ENV_OUT=/tmp/guile-git-env.sh \
|
|
METADATA_OUT=/tmp/guile-git-metadata.txt \
|
|
./tests/guix/build-local-guile-git.sh
|
|
```
|
|
|
|
Default install prefix used by the harness:
|
|
|
|
```text
|
|
/tmp/guile-gnutls-freebsd-validate-install
|
|
```
|
|
|
|
## Result
|
|
|
|
The local Guile dependency stack build succeeded.
|
|
|
|
Validated module loads:
|
|
|
|
```scheme
|
|
(use-modules (bytestructures guile))
|
|
(use-modules (git))
|
|
```
|
|
|
|
Observed checks:
|
|
|
|
```text
|
|
bytestructures module check: ok
|
|
guile-git module check: ok
|
|
Existing (gnutls) module in prefix: present
|
|
```
|
|
|
|
This means the same local prefix now satisfies at least the first two mandatory Guix checkout module requirements previously encountered on FreeBSD:
|
|
|
|
- `(gnutls)`
|
|
- `(git)` with `graph-descendant?`
|
|
|
|
## Re-running the checkout investigation
|
|
|
|
After installing the Guile-Git stack, 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-git.txt \
|
|
./tests/guix/run-derivation-generation-investigation.sh
|
|
```
|
|
|
|
The investigation still used the requested experimental directories:
|
|
|
|
- store: `/frx/store`
|
|
- local state: `/frx/var`
|
|
- sysconf: `/frx/etc`
|
|
|
|
## Updated result
|
|
|
|
With both `(gnutls)` and `(git)` available, the Guix checkout configure step progresses farther and now fails at the next missing Guile dependency:
|
|
|
|
```text
|
|
configure: error: Guile-JSON is missing; please install it.
|
|
```
|
|
|
|
Relevant configure summary lines observed:
|
|
|
|
```text
|
|
checking whether Guile-JSON is available and recent enough... no
|
|
configure: error: Guile-JSON is missing; please install it.
|
|
```
|
|
|
|
## What this step demonstrates
|
|
|
|
This step demonstrates that:
|
|
|
|
1. the earlier `Guile-Git` blocker is genuinely cleared on FreeBSD when using the fixed local Guile build plus local dependency prefix
|
|
2. the checkout can now move one 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-JSON`
|
|
|
|
## Current blocker stack
|
|
|
|
The current checkout path is now blocked by:
|
|
|
|
1. unsupported-platform configure gating unless `--with-courage` is used
|
|
2. missing `Guile-JSON` after supplying:
|
|
- Guile-GnuTLS
|
|
- Guile-Git
|
|
|
|
The earlier missing blockers have now been cleared locally for validation:
|
|
|
|
- `(gnutls)`
|
|
- `(git)` / recent Guile-Git export requirement
|
|
|
|
## Recommended next step
|
|
|
|
Obtain or build `Guile-JSON` 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 will show whether the next boundary lies at:
|
|
|
|
- `Guile-SQLite3`
|
|
- `Guile-Gcrypt`
|
|
- `Guile-zlib`
|
|
- `Guile-lzlib`
|
|
- `Guile-semver`
|
|
- or finally something beyond configure-time Guile module prerequisites
|