4.8 KiB
Phase 1.2 follow-up: local Guile-GnuTLS built on FreeBSD and checkout investigation advanced
Date: 2026-04-01
Summary
This step addressed the previously identified missing Guile (gnutls) blocker that prevented a Guix checkout from configuring on FreeBSD even when --with-courage was used.
Added harnesses/updates:
tests/guix/build-local-guile-gnutls.sh- updated
tests/guix/run-derivation-generation-investigation.sh
The result is:
- local Guile-GnuTLS can be built successfully on FreeBSD against the already validated fixed local Guile build
- after making that module available, the Guix checkout configure step advances past the GnuTLS check
- the next checkout blocker is now clearly identified as missing
Guile-Git
Inputs used
Local Guile
The build used the previously validated fixed local Guile install:
/tmp/guile-freebsd-validate-install/bin/guile
Guile-GnuTLS source identity
The source of truth was the current Guix package definition in ~/repos/guix/gnu/packages/tls.scm:
- package:
guile-gnutls - version:
5.0.1 - Guix nix-base32:
0kqngyx4520gjk49l6whjd2ss994kaj9rm78lli6p3q6xry0945i
Translated and verified SHA256:
b190047cee068f6b22a5e8d49ca49a2425ad4593901b9ac8940f8842ba7f164f
FreeBSD package dependency
The host did not have the C GnuTLS library installed, so this step installed:
gnutlslibtasn1nettlep11-kit
via:
sudo pkg install -y gnutls
FreeBSD-specific build findings
1. GNU make is required
Guile-GnuTLS uses GNU-make-specific pattern rules in guile/src/Makefile.am.
Attempting to build with FreeBSD base make failed with:
make[3]: don't know how to make core.x. Stop
Using gmake resolved that issue.
2. Guile-GnuTLS needs a FreeBSD-specific alloca include fix
The build then failed in guile/src/core.c with:
fatal error: 'alloca.h' file not found
On this FreeBSD host, alloca is available via stdlib.h, not alloca.h.
For validation, the harness applies a small source patch in the disposable tree:
#ifdef __FreeBSD__
#include <stdlib.h>
#else
#include <alloca.h>
#endif
With that patch applied, the build completed successfully.
Validation command
ENV_OUT=/tmp/guile-gnutls-env.sh \
METADATA_OUT=/tmp/guile-gnutls-metadata.txt \
./tests/guix/build-local-guile-gnutls.sh
Default install prefix used by the harness:
/tmp/guile-gnutls-freebsd-validate-install
Result
The local Guile-GnuTLS build succeeded.
Installed artifacts included:
share/guile/site/3.0/gnutls.scmlib/guile/3.0/site-ccache/gnutls.golib/guile/3.0/extensions/guile-gnutls-v-2.so.0.0.0
Module validation succeeded with the fixed local Guile build:
(use-modules (gnutls))
Observed validation result:
ok
The harness also writes an environment file that can be used to expose the built module tree to later commands.
Re-running the checkout investigation
After building Guile-GnuTLS, the derivation-generation investigation was re-run with:
GUILE_EXTRA_PREFIX=/tmp/guile-gnutls-freebsd-validate-install \
METADATA_OUT=/tmp/guix-derivation-investigation-with-gnutls.txt \
./tests/guix/run-derivation-generation-investigation.sh
The investigation still uses the requested experimental store/state paths:
- store:
/frx/store - local state:
/frx/var - sysconf:
/frx/etc
Updated result
With (gnutls) available, the Guix checkout gets past the previous GnuTLS blocker.
The configure step now fails at the next missing Guile dependency:
configure: error: Guile-Git is missing; please install it.
This is a meaningful advancement because it proves the earlier GnuTLS blocker is genuinely cleared and that the checkout can proceed farther toward a usable pre-inst-env environment.
What this step demonstrates
This step demonstrates that:
- missing Guile
(gnutls)support on FreeBSD is not a dead end - a local, compatible Guile-GnuTLS build can be produced against the fixed local Guile build
- FreeBSD now reaches the next concrete checkout blocker for Guix source-tree configuration:
Guile-Git
Current blocker stack
The current checkout path toward real derivation generation is now blocked by:
- unsupported-platform configure gating unless
--with-courageis used - missing
Guile-Gitafter GnuTLS support is supplied
The earlier missing (gnutls) blocker has been cleared for local validation purposes.
Recommended next step
Build or otherwise obtain Guile-Git compatible with the same fixed local Guile build, then re-run the derivation-generation investigation again.
That should reveal whether the next boundary lies in:
- another Guile module dependency
pre-inst-envusability- derivation emission
- daemon connectivity
/frx/store/daemon assumptions