about summary refs log tree commit diff
path: root/pkgs/development/compilers/elm/lib/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/compilers/elm/lib/default.nix')
-rw-r--r--pkgs/development/compilers/elm/lib/default.nix43
1 files changed, 43 insertions, 0 deletions
diff --git a/pkgs/development/compilers/elm/lib/default.nix b/pkgs/development/compilers/elm/lib/default.nix
new file mode 100644
index 000000000000..12e0600dc231
--- /dev/null
+++ b/pkgs/development/compilers/elm/lib/default.nix
@@ -0,0 +1,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; }