about summary refs log tree commit diff
path: root/nixpkgs/pkgs/build-support/fetchbower/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/build-support/fetchbower/default.nix')
-rw-r--r--nixpkgs/pkgs/build-support/fetchbower/default.nix28
1 files changed, 28 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/build-support/fetchbower/default.nix b/nixpkgs/pkgs/build-support/fetchbower/default.nix
new file mode 100644
index 000000000000..fd971d431df8
--- /dev/null
+++ b/nixpkgs/pkgs/build-support/fetchbower/default.nix
@@ -0,0 +1,28 @@
+{ stdenvNoCC, lib, bower2nix, cacert }:
+let
+  bowerVersion = version:
+    let
+      components = lib.splitString "#" version;
+      hash = lib.last components;
+      ver = if builtins.length components == 1 then (cleanName version) else hash;
+    in ver;
+
+  cleanName = name: lib.replaceStrings ["/" ":"] ["-" "-"] name;
+
+  fetchbower = name: version: target: outputHash: stdenvNoCC.mkDerivation {
+    name = "${cleanName name}-${bowerVersion version}";
+    buildCommand = ''
+      fetch-bower --quiet --out=$PWD/out "${name}" "${target}" "${version}"
+      # In some cases, the result of fetchBower is different depending
+      # on the output directory (e.g. if the bower package contains
+      # symlinks). So use a local output directory before copying to
+      # $out.
+      cp -R out $out
+    '';
+    outputHashMode = "recursive";
+    outputHashAlgo = "sha256";
+    inherit outputHash;
+    nativeBuildInputs = [ bower2nix cacert ];
+  };
+
+in fetchbower