Avoid top-level with ...; in pkgs/development/compilers/gerbil/gerbil-support.nix

The set of names to inherit was generated by running this in a loop until it did not error:

```
nix-instantiate --parse pkgs/development/compilers/gerbil/gerbil-support.nix
```
This commit is contained in:
Philip Taron 2024-03-14 14:37:50 -07:00 committed by Valentin Gagarin
parent bc736298ed
commit 91feb4b6f3

View File

@ -1,11 +1,52 @@
{ pkgs, lib, callPackage, ... }: { pkgs, lib, callPackage, ... }:
with pkgs.gerbil-support; { let
inherit (builtins) filterSource;
pppToName = ppp: lib.removeSuffix ".nix" (baseNameOf ppp); # from pre-package path to name inherit (lib)
commitIdFromGitRepo
concatStringsSep
elem
elemAt
hasSuffix
listToAttrs
mapAttrs
optionalString
pathExists
readFile
removeSuffix
substring
traceSeqN
;
inherit (lib.strings) match;
# Implicitly calls through to this file, similar to `let .. in` or `rec`.
inherit (pkgs.gerbil-support)
callPpp
gerbilLoadPath
gerbilPackage
gerbilPackages-unstable
gerbilSkippableFiles
gerbilSourceFilter
overrideSrcIfShaDiff
ppaToPl
pppToKV
pppToName
ppplToPpa
prePackage-defaults
prePackages-unstable
resolve-pre-src
sha256-of-pre-src
view
;
in
{
pppToName = ppp: removeSuffix ".nix" (baseNameOf ppp); # from pre-package path to name
callPpp = ppp: callPackage ppp prePackage-defaults; # from pre-package path to pre-package callPpp = ppp: callPackage ppp prePackage-defaults; # from pre-package path to pre-package
pppToKV = ppp: { name = pppToName ppp; value = callPpp ppp; }; # from pre-package path to name pppToKV = ppp: { name = pppToName ppp; value = callPpp ppp; }; # from pre-package path to name
ppplToPpa = ppps: builtins.listToAttrs (map pppToKV ppps); # from pre-package path list to name/pre-package attr ppplToPpa = ppps: listToAttrs (map pppToKV ppps); # from pre-package path list to name/pre-package attr
prePackages-unstable = prePackages-unstable =
ppplToPpa ppplToPpa
@ -32,37 +73,37 @@ with pkgs.gerbil-support; {
softwareName = ""; softwareName = "";
}; };
ppaToPl = builtins.mapAttrs (_: gerbilPackage); ppaToPl = mapAttrs (_: gerbilPackage);
gerbilPackages-unstable = ppaToPl prePackages-unstable; gerbilPackages-unstable = ppaToPl prePackages-unstable;
resolve-pre-src = pre-src: pre-src.fun (removeAttrs pre-src ["fun"]); resolve-pre-src = pre-src: pre-src.fun (removeAttrs pre-src ["fun"]);
gerbilVersionFromGit = srcDir: version-path: gerbilVersionFromGit = srcDir: version-path:
let version-file = "${srcDir}/${version-path}.ss"; in let version-file = "${srcDir}/${version-path}.ss"; in
if builtins.pathExists version-file then if pathExists version-file then
let m = let m =
builtins.match "\\(import :clan/versioning.*\\)\n\\(register-software \"([-_.A-Za-z0-9]+)\" \"([-_.A-Za-z0-9]+)\"\\) ;; ([-0-9]+)\n" match "\\(import :clan/versioning.*\\)\n\\(register-software \"([-_.A-Za-z0-9]+)\" \"([-_.A-Za-z0-9]+)\"\\) ;; ([-0-9]+)\n"
(builtins.readFile version-file); in (readFile version-file); in
{ version = "${builtins.elemAt m 2}-git"; git-version = builtins.elemAt m 1; } { version = "${elemAt m 2}-git"; git-version = elemAt m 1; }
else { version = "0.0-git"; else { version = "0.0-git";
git-version = let gitpath = "${srcDir}/.git"; in git-version = let gitpath = "${srcDir}/.git"; in
if builtins.pathExists gitpath then lib.commitIdFromGitRepo gitpath else "0"; }; if pathExists gitpath then commitIdFromGitRepo gitpath else "0"; };
gerbilSkippableFiles = [".git" ".build" ".build_outputs" "run" "result" "dep" "BLAH" "tmp.nix"]; gerbilSkippableFiles = [".git" ".build" ".build_outputs" "run" "result" "dep" "BLAH" "tmp.nix"];
gerbilSourceFilter = path: type: gerbilSourceFilter = path: type:
let baseName = baseNameOf path; in let baseName = baseNameOf path; in
! (builtins.elem baseName gerbilSkippableFiles || lib.hasSuffix "~" baseName); ! (elem baseName gerbilSkippableFiles || hasSuffix "~" baseName);
gerbilFilterSource = builtins.filterSource gerbilSourceFilter; gerbilFilterSource = filterSource gerbilSourceFilter;
# Use this function in any package that uses Gerbil libraries, to define the GERBIL_LOADPATH. # Use this function in any package that uses Gerbil libraries, to define the GERBIL_LOADPATH.
gerbilLoadPath = gerbilLoadPath =
gerbilInputs: builtins.concatStringsSep ":" (map (x: x + "/gerbil/lib") gerbilInputs); gerbilInputs: concatStringsSep ":" (map (x: x + "/gerbil/lib") gerbilInputs);
path-src = path: { fun = _: path; }; path-src = path: { fun = _: path; };
view = lib.debug.traceSeqN 4; view = traceSeqN 4;
sha256-of-pre-src = pre-src: if pre-src ? sha256 then pre-src.sha256 else "none"; sha256-of-pre-src = pre-src: if pre-src ? sha256 then pre-src.sha256 else "none";
@ -75,7 +116,7 @@ with pkgs.gerbil-support; {
pre-src = new-pre-src; pre-src = new-pre-src;
version = "override"; version = "override";
git-version = if new-pre-src ? rev git-version = if new-pre-src ? rev
then lib.substring 0 7 new-pre-src.rev then substring 0 7 new-pre-src.rev
else "unknown";}; else "unknown";};
}; };
@ -102,10 +143,10 @@ with pkgs.gerbil-support; {
postPatch = '' postPatch = ''
set -e ; set -e ;
${lib.optionalString (version-path != "") ${optionalString (version-path != "")
''echo -e '(import :clan/versioning${builtins.concatStringsSep "" ''echo -e '(import :clan/versioning${concatStringsSep ""
(map (x: let px = x.passthru.pre-pkg; in (map (x: let px = x.passthru.pre-pkg; in
lib.optionalString (px.version-path != "") optionalString (px.version-path != "")
" :${px.gerbil-package}/${px.version-path}") " :${px.gerbil-package}/${px.version-path}")
gerbilInputs) gerbilInputs)
})\n(register-software "${softwareName}" "v${git-version}")\n' > "${version-path}.ss"''} })\n(register-software "${softwareName}" "v${git-version}")\n' > "${version-path}.ss"''}