diff --git a/pkgs/build-support/substitute-files/substitute-all-files.nix b/pkgs/build-support/substitute-files/substitute-all-files.nix new file mode 100644 index 000000000000..642919016037 --- /dev/null +++ b/pkgs/build-support/substitute-files/substitute-all-files.nix @@ -0,0 +1,22 @@ +{ stdenv }: + +args: + +stdenv.mkDerivation ({ + name = if args ? name then args.name else baseNameOf (toString args.src); + builder = with stdenv.lib; builtins.toFile "builder.sh" '' + source $stdenv/setup + set -o pipefail + + eval "$preInstall" + + args= + + cd "$src" + echo -ne "${concatStringsSep "\\0" args.files}" | xargs -0 -n1 -I {} -- find {} -type f -print0 | while read -d "" line; do + mkdir -p "$out/$(dirname "$line")" + substituteAll "$line" "$out/$line" + done + ''; + preferLocalBuild = true; +} // args) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 73b2127f9493..7c7863bf7ac3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -401,6 +401,10 @@ let inherit stdenv; }; + substituteAllFiles = import ../build-support/substitute-files/substitute-all-files.nix { + inherit stdenv; + }; + replaceDependency = import ../build-support/replace-dependency.nix { inherit runCommand nix lib; };