summary refs log tree commit diff
path: root/pkgs/build-support/trivial-builders.nix
diff options
context:
space:
mode:
authorBas van Dijk <v.dijk.bas@gmail.com>2019-09-02 11:13:19 +0200
committerBas van Dijk <v.dijk.bas@gmail.com>2019-09-02 11:18:52 +0200
commit05393ca2170bf5db031372bdf2a714b006f9b2ca (patch)
tree337304a5e4c9ec939333d9e0d1a5e0b1f2688f0e /pkgs/build-support/trivial-builders.nix
parent0a8e54d1c6569be9a389270e9e0b13e78269b1db (diff)
downloadnixpkgs-05393ca2170bf5db031372bdf2a714b006f9b2ca.tar
nixpkgs-05393ca2170bf5db031372bdf2a714b006f9b2ca.tar.gz
nixpkgs-05393ca2170bf5db031372bdf2a714b006f9b2ca.tar.bz2
nixpkgs-05393ca2170bf5db031372bdf2a714b006f9b2ca.tar.lz
nixpkgs-05393ca2170bf5db031372bdf2a714b006f9b2ca.tar.xz
nixpkgs-05393ca2170bf5db031372bdf2a714b006f9b2ca.tar.zst
nixpkgs-05393ca2170bf5db031372bdf2a714b006f9b2ca.zip
trivial-builders: add the applyPatches function
applyPatches applies a list of patches to a source directory.

For example to patch nixpkgs you can use:

  applyPatches {
    src = pkgs.path;
    patches = [
      (pkgs.fetchpatch {
        url = "https://github.com/NixOS/nixpkgs/commit/1f770d20550a413e508e081ddc08464e9d08ba3d.patch";
        sha256 = "1nlzx171y3r3jbk0qhvnl711kmdk57jlq4na8f8bs8wz2pbffymr";
      })
    ];
  }
Diffstat (limited to 'pkgs/build-support/trivial-builders.nix')
-rw-r--r--pkgs/build-support/trivial-builders.nix33
1 files changed, 33 insertions, 0 deletions
diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix
index 0bfe14a8539..55df09121b4 100644
--- a/pkgs/build-support/trivial-builders.nix
+++ b/pkgs/build-support/trivial-builders.nix
@@ -381,4 +381,37 @@ rec {
   # Copy a list of paths to the Nix store.
   copyPathsToStore = builtins.map copyPathToStore;
 
+  /* Applies a list of patches to a source directory.
+   *
+   * Examples:
+   *
+   * # Patching nixpkgs:
+   * applyPatches {
+   *   src = pkgs.path;
+   *   patches = [
+   *     (pkgs.fetchpatch {
+   *       url = "https://github.com/NixOS/nixpkgs/commit/1f770d20550a413e508e081ddc08464e9d08ba3d.patch";
+   *       sha256 = "1nlzx171y3r3jbk0qhvnl711kmdk57jlq4na8f8bs8wz2pbffymr";
+   *     })
+   *   ];
+   * }
+   */
+  applyPatches =
+    { src
+    , name ? (if builtins.typeOf src == "path"
+              then builtins.baseNameOf src
+              else
+                if builtins.isAttrs src && builtins.hasAttr "name" src
+                then src.name
+                else throw "applyPatches: please supply a `name` argument because a default name can only be computed when the `src` is a path or is an attribute set with a `name` attribute."
+             ) + "-patched"
+    , patches   ? []
+    , postPatch ? ""
+    }: stdenvNoCC.mkDerivation {
+      inherit name src patches postPatch;
+      preferLocalBuild = true;
+      allowSubstitutes = false;
+      phases = "unpackPhase patchPhase installPhase";
+      installPhase = "cp -R ./ $out";
+    };
 }