The CHICKEN 6 set was added as a copy of the CHICKEN 5 one, following the
existing 4-vs-5 split, but the two releases only really differ in the
compiler's version, its egg binary version, and the egg channel their eggs
come from. Everything else -- the compiler derivation, the egg builder, the
scope that ties them together, the egg metadata reader and the script that
generates the egg set -- now lives in common/, and each release directory
keeps only what is genuinely per release: deps.toml, overrides.nix, and the
arguments in default.nix.
CHICKEN 4 is left alone. It predates deps.toml and update.sh, it patches and
regenerates the compiler's own sources, and it is no longer supported
upstream, so it has little to share.
Aligning the two expressions changes the CHICKEN 5 compiler derivation:
- The bootstrap stage is gone. Building a throwaway compiler and rebuilding
with it is a leftover of the CHICKEN 4 expression, which patches Scheme
sources and therefore needs a working CHICKEN to regenerate the C files.
CHICKEN 5 needs no patch and its tarball ships the generated C files.
- checkTarget is set, so the test suite now actually runs. The generic
check phase probes for a target with a bare `make`, which fails here
because PLATFORM is only given in makeFlags, so the suite was silently
skipped. It passes: 76 sections, in 12 minutes, with the two tests the
expression disables in postPatch still disabled.
- dontConfigure is set. CHICKEN 5 has no configure script at all, so this
is a no-op for it; it is CHICKEN 6, whose hand-written configure rejects
the options stdenv passes, that needs it.
- The setup hook is generated from the binary version with replaceVars,
rather than kept as one copy per release.
The egg builder gains the CHICKEN 6 egg cache export, which is harmless for
CHICKEN 5, and loses an unused binding. As @DerGuteMoritz notes in review,
the export only needs doing once: the install phase runs in the same shell as
the build phase.
Every CHICKEN 5 egg therefore rebuilds, with no expected change to what they
contain.
Sharing the expression also shares its meta, so Xophmeister, who added the
CHICKEN 6 set, is now listed as a maintainer of CHICKEN 5 as well.
Assisted-by: Claude Code (claude-opus-5[1m])
Most eggs in the canonical repository don't declare a `version` property in their `.egg` files. This
is because it's provided implicitly when using `chicken-install` to retrieve them. Quoting from [the
manual](https://wiki.call-cc.org/man/5/Egg%20specification%20format#version):
> Eggs from remote egg servers are automatically versioned - the version is part of the protocol to
retrieve the egg and does not have to be specified in the .egg file.
Since we don't use `chicken-install` to retrieve eggs, this leaves us with a version of "unknown" in
most cases, e.g.:
$ nix-shell -p chickenPackages.chickenEggs.json-abnf chickenPackages.chicken --run chicken-status
abnf ...................................................... version: unknown
iset ...................................................... version: unknown
json-abnf ................................................. version: unknown
lexgen .................................................... version: unknown
regex ......................................................... version: 2.0
srfi-1 .................................................... version: unknown
srfi-127 .................................................. version: unknown
srfi-69 ................................................... version: unknown
utf8 ...................................................... version: unknown
This is usually not an issue unless another egg declares a minimum required version dependency on an
egg with missing version info. In this case, `chicken-install` will fill in "0.0.0" as a fallback
and the check will fail. This has so far been worked around patches (see e.g. #346004 or #358455).
This patch addresses the root cause by following the documentation's recommendation:
> Eggs installed from local directories (see below) should explicitly specify a version.
To do that, `eggDerivation` now simply always adds the version to the generated `.egg-info`
file. This has the added benefit of correcting potentially inconsistent version declarations in
`.egg` files. Note that we cannot patch the original `.egg` file because not all released egg
versions match [the stricter version format validation which currently applies
there](https://bugs.call-cc.org/ticket/1855).
The patch also changes the signature of `eggDerivation` to allow passing in `pname` and `version`
instead of `name` to allow for easy access to the egg version. However, for backwards compatibility,
the old `name` argument is also still supported.
As a result, the aforementioned overrides are removed again and some additional eggs can be marked
as unbroken again.
And finally, this is the output of the above `chicken-status` call with the patch applied:
$ nix-shell -p chickenPackages.chickenEggs.json-abnf chickenPackages.chicken --run chicken-status
abnf .......................................................... version: 8.3
iset .......................................................... version: 2.2
json-abnf ..................................................... version: 7.0
lexgen ........................................................ version: 8.2
regex ......................................................... version: 2.0
srfi-1 ...................................................... version: 0.5.1
srfi-127 ...................................................... version: 1.3
srfi-69 ..................................................... version: 0.4.3
utf8 ........................................................ version: 3.6.3
After final improvements to the official formatter implementation,
this commit now performs the first treewide reformat of Nix files using it.
This is part of the implementation of RFC 166.
Only "inactive" files are reformatted, meaning only files that
aren't being touched by any PR with activity in the past 2 months.
This is to avoid conflicts for PRs that might soon be merged.
Later we can do a full treewide reformat to get the rest,
which should not cause as many conflicts.
A CI check has already been running for some time to ensure that new and
already-formatted files are formatted, so the files being reformatted here
should also stay formatted.
This commit was automatically created and can be verified using
nix-build a08b3a4d19.tar.gz \
--argstr baseRev b32a094368
result/bin/apply-formatting $NIXPKGS_PATH
This allows the cross compilation of chicken in, at least, the following ways:
```sh
nix-build -A pkgsCross.aarch64-multiplatform.chicken
```
and
```sh
nix-build -A pkgsCross.raspberryPi.chicken
```
Building with clang on x86_64-linux has also been repaired.
Additionally, instead of reimplementing a version tester in the
`installCheckPhase`, this test has been pulled out into its own tester
attribute.
While two broken tests needed to be disabled, the functionality of static
building is not broken. Only the tests themselves seem not to be able to handle
the specification of absolute compiler paths.
This will ensure that Hydra attempts to build the eggs on all supported
platforms instead of just the platform the evaluator is running
on (currently x86_64-linux).
Also updates the matchable egg (used by egg2nix) from 1.0 -> 1.1 and
removes trailing slashes from the path prefix variables passed to
wrapProgram (they're unnecessary and only result in doubled-up slashes
in the values).