diff options
Diffstat (limited to 'nixpkgs/pkgs/tools/typesetting/tex/texlive/generate-fixed-hashes.nix')
-rw-r--r-- | nixpkgs/pkgs/tools/typesetting/tex/texlive/generate-fixed-hashes.nix | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/generate-fixed-hashes.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/generate-fixed-hashes.nix new file mode 100644 index 000000000000..738fef022010 --- /dev/null +++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/generate-fixed-hashes.nix @@ -0,0 +1,41 @@ +with import ../../../../.. { }; + +with lib; let + # NOTE: the fixed naming scheme must match default.nix + # name for the URL + mkURLName = { pname, tlType, ... }: pname + lib.optionalString (tlType != "run" && tlType != "tlpkg") ".${tlType}"; + # name + revision for the fixed output hashes + mkFixedName = { tlType, revision, extraRevision ? "", ... }@attrs: mkURLName attrs + (lib.optionalString (tlType == "tlpkg") ".tlpkg") + ".r${toString revision}${extraRevision}"; + + uniqueByName = fods: catAttrs "fod" (genericClosure { + startSet = map (fod: { key = fod.name; inherit fod; }) fods; + operator = _: [ ]; + }); + + # ugly hack to extract combine from collection-latexextra, since it is masked by texlive.combine + combine = lib.findFirst (p: (lib.head p.pkgs).pname == "combine") { pkgs = []; } (lib.head texlive.collection-latexextra.pkgs).tlDeps; + all = concatLists (map (p: p.pkgs or []) (attrValues (removeAttrs texlive [ "bin" "combine" "combined" "tlpdb" ]))) ++ combine.pkgs; + + # fixed hashes only for run, doc, source, tlpkg types + fods = sort (a: b: a.name < b.name) (uniqueByName (filter (p: isDerivation p && p.tlType != "bin") all)); + + computeHash = fod: runCommand "${fod.name}-fixed-hash" + { buildInputs = [ nix ]; inherit fod; } + ''echo -n "$(nix-hash --base32 --type sha256 "$fod")" >"$out"''; + + hash = fod: fod.outputHash or (builtins.readFile (computeHash fod)); + hashLine = fod: '' + "${mkFixedName fod}"="${hash fod}"; + ''; +in +{ + # fixedHashesNix uses 'import from derivation' which does not parallelize well + # you should build newHashes first, before evaluating (and building) fixedHashesNix + newHashes = map computeHash (filter (fod: ! fod ? outputHash) fods); + + fixedHashesNix = writeText "fixed-hashes.nix" + '' + { + ${lib.concatMapStrings hashLine fods}} + ''; +} |