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
This commit is contained in:
parent
4ff3ec314a
commit
a49ee8d7de
@ -37,7 +37,7 @@ lib.makeScope newScope (self: {
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
self.eggDerivation {
|
self.eggDerivation {
|
||||||
name = "${pname}-${version}";
|
inherit pname version;
|
||||||
src = self.fetchegg (eggData // { inherit pname; });
|
src = self.fetchegg (eggData // { inherit pname; });
|
||||||
buildInputs = map (x: eggself.${x}) dependencies;
|
buildInputs = map (x: eggself.${x}) dependencies;
|
||||||
meta.homepage = "https://wiki.call-cc.org/eggref/5/${pname}";
|
meta.homepage = "https://wiki.call-cc.org/eggref/5/${pname}";
|
||||||
|
|||||||
@ -5,12 +5,6 @@
|
|||||||
chickenEggs,
|
chickenEggs,
|
||||||
}:
|
}:
|
||||||
|
|
||||||
# Note: This mostly reimplements the default.nix already contained in
|
|
||||||
# the tarball. Is there a nicer way than duplicating code?
|
|
||||||
|
|
||||||
let
|
|
||||||
version = "c5-git";
|
|
||||||
in
|
|
||||||
eggDerivation {
|
eggDerivation {
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "corngood";
|
owner = "corngood";
|
||||||
@ -19,7 +13,8 @@ eggDerivation {
|
|||||||
sha256 = "1vfnhbcnyakywgjafhs0k5kpsdnrinzvdjxpz3fkwas1jsvxq3d1";
|
sha256 = "1vfnhbcnyakywgjafhs0k5kpsdnrinzvdjxpz3fkwas1jsvxq3d1";
|
||||||
};
|
};
|
||||||
|
|
||||||
name = "egg2nix-${version}";
|
pname = "egg2nix";
|
||||||
|
version = "c5-git";
|
||||||
buildInputs = with chickenEggs; [
|
buildInputs = with chickenEggs; [
|
||||||
args
|
args
|
||||||
matchable
|
matchable
|
||||||
|
|||||||
@ -6,7 +6,6 @@
|
|||||||
makeWrapper,
|
makeWrapper,
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
name,
|
|
||||||
src,
|
src,
|
||||||
buildInputs ? [ ],
|
buildInputs ? [ ],
|
||||||
chickenInstallFlags ? [ ],
|
chickenInstallFlags ? [ ],
|
||||||
@ -15,14 +14,24 @@
|
|||||||
}@args:
|
}@args:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
nameVersionAssertion =
|
||||||
|
pred: lib.assertMsg pred "either name or both pname and version must be given";
|
||||||
|
pname =
|
||||||
|
if args ? pname then
|
||||||
|
assert nameVersionAssertion (!args ? name && args ? version);
|
||||||
|
args.pname
|
||||||
|
else
|
||||||
|
assert nameVersionAssertion (args ? name && !args ? version);
|
||||||
|
lib.getName args.name;
|
||||||
|
version = if args ? version then args.version else lib.getVersion args.name;
|
||||||
|
name = if args ? name then args.name else "${args.pname}-${args.version}";
|
||||||
overrides = callPackage ./overrides.nix { };
|
overrides = callPackage ./overrides.nix { };
|
||||||
baseName = lib.getName name;
|
override = if builtins.hasAttr pname overrides then builtins.getAttr pname overrides else lib.id;
|
||||||
override =
|
|
||||||
if builtins.hasAttr baseName overrides then builtins.getAttr baseName overrides else lib.id;
|
|
||||||
in
|
in
|
||||||
(stdenv.mkDerivation (
|
(stdenv.mkDerivation (
|
||||||
{
|
{
|
||||||
name = "chicken-${name}";
|
pname = "chicken-${pname}";
|
||||||
|
inherit version;
|
||||||
propagatedBuildInputs = buildInputs;
|
propagatedBuildInputs = buildInputs;
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
chicken
|
chicken
|
||||||
@ -47,6 +56,10 @@ in
|
|||||||
export CHICKEN_INSTALL_REPOSITORY=$out/lib/chicken/${toString chicken.binaryVersion}
|
export CHICKEN_INSTALL_REPOSITORY=$out/lib/chicken/${toString chicken.binaryVersion}
|
||||||
chicken-install -cached -host ${lib.escapeShellArgs chickenInstallFlags}
|
chicken-install -cached -host ${lib.escapeShellArgs chickenInstallFlags}
|
||||||
|
|
||||||
|
# Patching generated .egg-info instead of original .egg to work around https://bugs.call-cc.org/ticket/1855
|
||||||
|
csi -e "(write (cons '(version \"${version}\") (read)))" < "$CHICKEN_INSTALL_REPOSITORY/${pname}.egg-info" > "${pname}.egg-info.new"
|
||||||
|
mv "${pname}.egg-info.new" "$CHICKEN_INSTALL_REPOSITORY/${pname}.egg-info"
|
||||||
|
|
||||||
for f in $out/bin/*
|
for f in $out/bin/*
|
||||||
do
|
do
|
||||||
wrapProgram $f \
|
wrapProgram $f \
|
||||||
@ -67,6 +80,8 @@ in
|
|||||||
}
|
}
|
||||||
// builtins.removeAttrs args [
|
// builtins.removeAttrs args [
|
||||||
"name"
|
"name"
|
||||||
|
"pname"
|
||||||
|
"version"
|
||||||
"buildInputs"
|
"buildInputs"
|
||||||
"meta"
|
"meta"
|
||||||
]
|
]
|
||||||
|
|||||||
@ -60,13 +60,6 @@ in
|
|||||||
srfi-13
|
srfi-13
|
||||||
]) old);
|
]) old);
|
||||||
cmark = addToBuildInputs pkgs.cmark;
|
cmark = addToBuildInputs pkgs.cmark;
|
||||||
comparse = old: {
|
|
||||||
# For some reason lazy-seq 2 gets interpreted as lazy-seq 0.0.0??
|
|
||||||
postPatch = ''
|
|
||||||
substituteInPlace comparse.egg \
|
|
||||||
--replace-fail 'lazy-seq "0.1.0"' 'lazy-seq "0.0.0"'
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
epoxy =
|
epoxy =
|
||||||
old:
|
old:
|
||||||
(addToPropagatedBuildInputsWithPkgConfig pkgs.libepoxy old)
|
(addToPropagatedBuildInputsWithPkgConfig pkgs.libepoxy old)
|
||||||
@ -122,13 +115,6 @@ in
|
|||||||
(addToBuildInputs (lib.optional stdenv.hostPlatform.isDarwin pkgs.libinotify-kqueue) old)
|
(addToBuildInputs (lib.optional stdenv.hostPlatform.isDarwin pkgs.libinotify-kqueue) old)
|
||||||
// lib.optionalAttrs stdenv.hostPlatform.isDarwin (addToCscOptions "-L -linotify" old);
|
// lib.optionalAttrs stdenv.hostPlatform.isDarwin (addToCscOptions "-L -linotify" old);
|
||||||
leveldb = addToBuildInputs pkgs.leveldb;
|
leveldb = addToBuildInputs pkgs.leveldb;
|
||||||
lowdown = old: {
|
|
||||||
# For some reason comparse version gets interpreted as 0.0.0
|
|
||||||
postPatch = ''
|
|
||||||
substituteInPlace lowdown.egg \
|
|
||||||
--replace-fail 'comparse "3"' 'comparse "0.0.0"'
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
magic = addToBuildInputs pkgs.file;
|
magic = addToBuildInputs pkgs.file;
|
||||||
mdh =
|
mdh =
|
||||||
old:
|
old:
|
||||||
@ -139,13 +125,6 @@ in
|
|||||||
"-Wno-error=implicit-int"
|
"-Wno-error=implicit-int"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
medea = old: {
|
|
||||||
# For some reason comparse gets interpreted as comparse 0.0.0
|
|
||||||
postPatch = ''
|
|
||||||
substituteInPlace medea.egg \
|
|
||||||
--replace-fail 'comparse "0.3.0"' 'comparse "0.0.0"'
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
# missing dependency in upstream egg
|
# missing dependency in upstream egg
|
||||||
mistie = addToPropagatedBuildInputs (with chickenEggs; [ srfi-1 ]);
|
mistie = addToPropagatedBuildInputs (with chickenEggs; [ srfi-1 ]);
|
||||||
mosquitto = addToPropagatedBuildInputs ([ pkgs.mosquitto ]);
|
mosquitto = addToPropagatedBuildInputs ([ pkgs.mosquitto ]);
|
||||||
@ -286,12 +265,8 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
# mark broken
|
# mark broken
|
||||||
"ephem-v1.1" = broken;
|
ephem = broken;
|
||||||
F-operator = broken;
|
|
||||||
atom = broken;
|
|
||||||
begin-syntax = broken;
|
|
||||||
canvas-draw = broken;
|
canvas-draw = broken;
|
||||||
chicken-doc-admin = broken;
|
|
||||||
coops-utils = broken;
|
coops-utils = broken;
|
||||||
crypt = broken;
|
crypt = broken;
|
||||||
hypergiant = broken;
|
hypergiant = broken;
|
||||||
@ -301,10 +276,8 @@ in
|
|||||||
mpi = broken;
|
mpi = broken;
|
||||||
pyffi = broken;
|
pyffi = broken;
|
||||||
qt-light = broken;
|
qt-light = broken;
|
||||||
salmonella-html-report = broken;
|
|
||||||
sundials = broken;
|
sundials = broken;
|
||||||
svn-client = broken;
|
svn-client = broken;
|
||||||
system = broken;
|
|
||||||
tokyocabinet = broken;
|
tokyocabinet = broken;
|
||||||
|
|
||||||
# mark broken darwin
|
# mark broken darwin
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user