From 603b799bcbcb8d49a9397bbd2896c1a454ee6ff6 Mon Sep 17 00:00:00 2001 From: Linus Heckemann Date: Mon, 6 Mar 2017 17:54:54 +0000 Subject: Add removeReferencesTo for removing specific refs This allows for a less blanket approach than nuke-refs, targetting specific references that we know we don't want rather than all references that we don't know we want. --- .../build-support/remove-references-to/default.nix | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 pkgs/build-support/remove-references-to/default.nix (limited to 'pkgs/build-support/remove-references-to/default.nix') diff --git a/pkgs/build-support/remove-references-to/default.nix b/pkgs/build-support/remove-references-to/default.nix new file mode 100644 index 00000000000..8b1d05fc230 --- /dev/null +++ b/pkgs/build-support/remove-references-to/default.nix @@ -0,0 +1,34 @@ +# The program `remove-references-to' created by this derivation replaces all +# references to the given Nix store paths in the specified files by a +# non-existent path (/nix/store/eeee...). This is useful for getting rid of +# dependencies that you know are not actually needed at runtime. + +{ stdenv, writeScriptBin }: + +writeScriptBin "remove-references-to" '' +#! ${stdenv.shell} -e + +# References to remove +targets=() +while getopts t: o; do + case "$o" in + t) storeId=$(echo "$OPTARG" | sed -n "s|^$NIX_STORE/\\([a-z0-9]\{32\}\\)-.*|\1|p") + if [ -z "$storeId" ]; then + echo "-t argument must be a Nix store path" + exit 1 + fi + targets+=("$storeId") + esac +done +shift $(($OPTIND-1)) + +# Files to remove the references from +regions=() +for i in "$@"; do + test ! -L "$i" -a -f "$i" && regions+=("$i") +done + +for target in "''${targets[@]}" ; do + sed -i -e "s|$NIX_STORE/$target-|$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-|g" "''${regions[@]}" +done +'' -- cgit 1.4.1