Commit Graph

17 Commits

Author SHA1 Message Date
Christopher Harrison
2311b62b34 chickenPackages: build CHICKEN 5 and 6 from shared expressions
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])
2026-09-10 19:20:46 +01:00
Stefan Frijters
bdf6477108 chickenPackages_5.eggDerivation: move env variables into env 2026-02-17 13:58:02 +01:00
NAHO
c8d4dabc43 pkgs: remove optional builtins prefixes from prelude functions
Remove optional builtins prefixes from prelude functions by running:

    builtins=(
      abort
      baseNameOf
      break
      derivation
      derivationStrict
      dirOf
      false
      fetchGit
      fetchMercurial
      fetchTarball
      fetchTree
      fromTOML
      import
      isNull
      map
      null
      placeholder
      removeAttrs
      scopedImport
      throw
      toString
      true
    )

    fd \
      --type file \
      . \
      pkgs \
      --exec-batch sed --in-place --regexp-extended "
        s/\<builtins\.($(
          printf '%s\n' "${builtins[@]}" |
            paste --delimiter '|' --serial -
        ))\>/\1/g
      "

    nix fmt
2025-10-04 19:02:37 +02:00
Moritz Heidkamp
a49ee8d7de chickenPackages.chickenEggs: Preserve version info
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
2025-08-14 20:12:06 +02:00
Wolfgang Walther
5a0711127c treewide: run nixfmt 1.0.0 2025-07-24 13:55:40 +02:00
Silvan Mosberger
4f0dadbf38 treewide: format all inactive Nix files
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
2024-12-10 20:26:33 +01:00
Konstantin Astafurov
dacbe420fb chickenPackages.chickenEggs: format 2024-07-19 12:58:24 -04:00
Daniel Nagy
6149d31915 chicken: enable cross-compilation
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.
2023-07-25 20:00:00 +02:00
Daniel Nagy
5102f0a78d chickenPackages: separate build phase
Also use addMetaAttrs function from lib.
2023-05-01 12:30:00 +02:00
Daniel Nagy
256b5d26b5 chickenPackages: fixes and mark broken 2023-04-10 20:15:00 +02:00
Daniel Nagy
da35fafa08 chickenPackages: Introduce overrides 2023-04-05 22:45:00 +02:00
sternenseemann
b394f86dcb chickenPackages*.eggDerivation: set meta.platforms if not provided
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).
2022-11-19 20:13:35 +01:00
Ben Siraphob
e03c068af5 treewide: makeWrapper buildInputs to nativeBuildInputs 2021-02-19 20:09:16 +07:00
Ben Siraphob
acc5f7b18a pkgs/development/compilers: stdenv.lib -> lib 2021-01-23 08:57:37 +07:00
Evan Hanson
4eb9e9a20c chicken: 5.1.0 -> 5.2.0
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).
2020-03-01 23:42:29 -08:00
David McFarland
ac08635414 chicken: remove parseDrvName from chicken-5 2019-12-12 10:09:50 -04:00
David McFarland
6c063ac076 chicken: 4.13.0 -> 5.0.0 2018-12-26 22:23:01 -04:00