tricu

A lazy functional language based on Tree Calculus
Log | Files | Refs | README | LICENSE

redistribution.nix (2099B)


      1 { pkgs, host, source, nixpkgsSource, flakeUtilsSource, systemsSource }:
      2 let
      3   # Match linker inputs and installed ELF owners across the native closure.
      4   native = [ pkgs.gmpxx pkgs.libffi pkgs.elfutils pkgs.numactl pkgs.zlib
      5     pkgs.zstd pkgs.xz pkgs.bzip2 pkgs.stdenv.cc.cc pkgs.glibc ];
      6   components = [ host.compiler ] ++ host.haskellLibraries ++ native;
      7   describe = p: let
      8     clean = value: if builtins.isString value then
      9       builtins.replaceStrings (map builtins.placeholder p.outputs)
     10         (map (name: "@OUTPUT_${name}@") p.outputs) value
     11       else if builtins.isList value then map clean value else value;
     12   in {
     13     name = p.name;
     14     version = p.version or "unknown";
     15     roots = pkgs.lib.unique (map toString ([ p ] ++ map (name: p.${name})
     16       (builtins.filter (name: builtins.elem name p.outputs) [ "out" "lib" "libgcc" "dev" ])));
     17     source = toString p.src;
     18     patches = map toString (p.patches or []);
     19     cabalRevision = if p ? editedCabalFile && p.editedCabalFile != null
     20       then toString p.editedCabalFile else null;
     21     licenseMetadata = p.meta.license or [];
     22     homepage = p.meta.homepage or "";
     23     recipe = {
     24       inherit (p) name;
     25       configureFlags = clean (p.configureFlags or []);
     26       prePatch = clean (p.prePatch or "");
     27       postPatch = clean (p.postPatch or "");
     28       preConfigure = clean (p.preConfigure or "");
     29       postConfigure = clean (p.postConfigure or "");
     30     };
     31   };
     32   metadata = pkgs.writeText "tricu-redistribution-inputs.json" (builtins.toJSON (map describe components));
     33 in pkgs.runCommand "tricu-redistribution-materials" {
     34   nativeBuildInputs = [ pkgs.python3 pkgs.glibc.bin ];
     35   meta.platforms = [ "x86_64-linux" ];
     36 } ''
     37   mkdir tools
     38   cp ${./redistribution.py} tools/redistribution.py
     39   cp ${./portable.py} tools/portable.py
     40   python3 tools/redistribution.py --components ${metadata} \
     41     --host ${host} --link-evidence ${host.linkEvidence} \
     42     --source ${source} --nixpkgs ${nixpkgsSource} \
     43     --flake-utils ${flakeUtilsSource} --systems ${systemsSource} \
     44     --policy ${./redistribution-policy.json} --output $out
     45 ''