Unverified Commit f58a6078 authored by Daniel Nagy's avatar Daniel Nagy
Browse files

chickenPackages: turn into scope

The purpose of this change is to allow the overriding of one egg, which in turn
affects all dependents of that eggs.
parent a3dd3cce
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -47,3 +47,32 @@ To include more eggs, edit `pkgs/development/compilers/chicken/5/eggs.scm`.
The first section of this file lists eggs which are required by `egg2nix`
itself; all other eggs go into the second section. After editing, follow the
procedure for updating eggs.

## Override Scope {#sec-chicken-override-scope}

The chicken package and its eggs, respectively, reside in a scope. This means,
the scope can be overridden to effect other packages in it.

This example shows how to use a local copy of `srfi-180` and have it affect
all the other eggs:

```nix
let
  myChickenPackages = pkgs.chickenPackages.overrideScope' (self: super: {
      # The chicken package itself can be overridden to effect the whole ecosystem.
      # chicken = super.chicken.overrideAttrs {
      #   src = ...
      # };

      chickenEggs = super.chickenEggs.overrideScope' (eggself: eggsuper: {
        srfi-180 = eggsuper.srfi-180.overrideAttrs {
          # path to a local copy of srfi-180
          src = ...
        };
      });
  });
in
# Here, `myChickenPackages.chickenEggs.json-rpc`, which depends on `srfi-180` will use
# the local copy of `srfi-180`.
# ...
```
+1 −1
Original line number Diff line number Diff line
@@ -18,4 +18,4 @@ let
    egg2nix = callPackage ./egg2nix.nix { };
  };

in lib.recurseIntoAttrs self
in self
+34 −32
Original line number Diff line number Diff line
{ lib, newScope, fetchurl }:
let
  callPackage = newScope self;

  self = with lib; {
    inherit callPackage;
lib.makeScope newScope (self: {

  fetchegg = { pname, version, sha256, ... }:
    fetchurl {
@@ -12,29 +9,34 @@ let
        "https://code.call-cc.org/egg-tarballs/5/${pname}/${pname}-${version}.tar.gz";
    };

    eggDerivation = callPackage ./eggDerivation.nix { };
  eggDerivation = self.callPackage ./eggDerivation.nix { };

    chicken = callPackage ./chicken.nix {
  chicken = self.callPackage ./chicken.nix {
    bootstrap-chicken = self.chicken.override { bootstrap-chicken = null; };
  };

    chickenEggs = recurseIntoAttrs (mapAttrs (pname:
  chickenEggs = lib.recurseIntoAttrs (lib.makeScope self.newScope (eggself:
    (lib.mapAttrs
      (pname:
        eggData@{ version, synopsis, dependencies, license, ... }:
        self.eggDerivation {
          name = "${pname}-${version}";
          src = self.fetchegg (eggData // { inherit pname; });
        buildInputs = map (x: self.chickenEggs.${x}) dependencies;
          buildInputs = map (x: eggself.${x}) dependencies;
          meta.homepage =
            "https://code.call-cc.org/cgi-bin/gitweb.cgi?p=eggs-5-latest.git;a=tree;f=${pname}/${version}";
          meta.description = synopsis;
        meta.license = (licenses // {
          "bsd-2-clause" = licenses.bsd2;
          "bsd-3-clause" = licenses.bsd3;
          "public-domain" = licenses.publicDomain;
          meta.license = (lib.licenses // {
            "bsd-1-clause" = lib.licenses.bsd1;
            "bsd-2-clause" = lib.licenses.bsd2;
            "bsd-3-clause" = lib.licenses.bsd3;
            "lgpl-2.0+" = lib.licenses.lgpl2Plus;
            "lgpl-2.1-or-later" = lib.licenses.lgpl21Plus;
            "public-domain" = lib.licenses.publicDomain;
          }).${license} or license;
      }) (importTOML ./deps.toml));
        })
      (lib.importTOML ./deps.toml))));

    egg2nix = callPackage ./egg2nix.nix { };
  };
  egg2nix = self.callPackage ./egg2nix.nix { };

in lib.recurseIntoAttrs self
})
+2 −2
Original line number Diff line number Diff line
@@ -15418,8 +15418,8 @@ with pkgs;
  colmap = libsForQt5.callPackage ../applications/science/misc/colmap { inherit (config) cudaSupport; };
  colmapWithCuda = colmap.override { cudaSupport = true; };
  chickenPackages_4 = callPackage ../development/compilers/chicken/4 { };
  chickenPackages_5 = callPackage ../development/compilers/chicken/5 { };
  chickenPackages_4 = recurseIntoAttrs (callPackage ../development/compilers/chicken/4 { });
  chickenPackages_5 = recurseIntoAttrs (callPackage ../development/compilers/chicken/5 { });
  chickenPackages = dontRecurseIntoAttrs chickenPackages_5;
  inherit (chickenPackages_5)