From 05393ca2170bf5db031372bdf2a714b006f9b2ca Mon Sep 17 00:00:00 2001 From: Bas van Dijk Date: Mon, 2 Sep 2019 11:13:19 +0200 Subject: [PATCH] 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"; }) ]; } --- pkgs/build-support/trivial-builders.nix | 33 +++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix index 0bfe14a85393..55df09121b42 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"; + }; }