aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/development/compilers/elm/packages/lib.nix
blob: 12e0600dc23107dfc79bf752c5cd6f468fbb91cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{ writeScriptBin, stdenv, lib, elm }:
let
  patchBinwrap =
    let
      # Patching binwrap by NoOp script
      binwrap = writeScriptBin "binwrap" ''
        #! ${stdenv.shell}
        echo "binwrap called: Returning 0"
        return 0
      '';
      binwrap-install = writeScriptBin "binwrap-install" ''
        #! ${stdenv.shell}
        echo "binwrap-install called: Doing nothing"
      '';
    in targets: pkg:
      pkg.override (old: {
        nativeBuildInputs = (old.nativeBuildInputs or []) ++ [ binwrap binwrap-install ];

        # Manually install targets
        # by symlinking binaries into `node_modules`
        postInstall = let
          binFile = module: lib.strings.removeSuffix ("-" + module.version) module.name;
        in (old.postInstall or "") + ''
          ${lib.concatStrings (map (module: ''
              echo "linking ${binFile module}"
              ln -sf ${module}/bin/${binFile module} \
                  node_modules/${binFile module}/bin/${binFile module}
          '') targets)}
        '';
      });

  patchNpmElm = pkg:
    pkg.override (old: {
      preRebuild = (old.preRebuild or "") + ''
        rm node_modules/elm/install.js
        echo "console.log('Nixpkgs\' version of Elm will be used');" > node_modules/elm/install.js
      '';
      postInstall = (old.postInstall or "") + ''
        ln -sf ${elm}/bin/elm node_modules/elm/bin/elm
      '';
    });
in
{ inherit patchBinwrap patchNpmElm; }