diff --git a/pkgs/build-support/setup-hooks/make-symlinks-relative.sh b/pkgs/build-support/setup-hooks/make-symlinks-relative.sh index f34353a7617b..b07b0c5ae804 100644 --- a/pkgs/build-support/setup-hooks/make-symlinks-relative.sh +++ b/pkgs/build-support/setup-hooks/make-symlinks-relative.sh @@ -1,4 +1,6 @@ -postFixupHooks+=(_makeSymlinksRelative) +# symlinks are often created in postFixup +# don't use fixupOutputHooks, it is before postFixup +postFixupHooks+=(_makeSymlinksRelativeInAllOutputs) # For every symlink in $output that refers to another file in $output # ensure that the symlink is relative. This removes references to the output @@ -26,3 +28,10 @@ _makeSymlinksRelative() { done < <(find $prefix -type l -print0) } + +_makeSymlinksRelativeInAllOutputs() { + local output + for output in $(getAllOutputNames); do + prefix="${!output}" _makeSymlinksRelative + done +} diff --git a/pkgs/test/stdenv/hooks.nix b/pkgs/test/stdenv/hooks.nix index 7f25d7dbd2db..3d72efae6c47 100644 --- a/pkgs/test/stdenv/hooks.nix +++ b/pkgs/test/stdenv/hooks.nix @@ -23,19 +23,29 @@ }; make-symlinks-relative = stdenv.mkDerivation { name = "test-make-symlinks-relative"; + outputs = [ "out" "man" ]; buildCommand = '' mkdir -p $out/{bar,baz} + mkdir -p $man/share/{x,y} source1="$out/bar/foo" destination1="$out/baz/foo" + source2="$man/share/x/file1" + destination2="$man/share/y/file2" echo foo > $source1 + echo foo > $source2 ln -s $source1 $destination1 + ln -s $source2 $destination2 echo "symlink before patching: $(readlink $destination1)" + echo "symlink before patching: $(readlink $destination2)" - _makeSymlinksRelative + _makeSymlinksRelativeInAllOutputs echo "symlink after patching: $(readlink $destination1)" ([[ -e $destination1 ]] && echo "symlink isn't broken") || (echo "symlink is broken" && exit 1) ([[ $(readlink $destination1) == "../bar/foo" ]] && echo "absolute symlink was made relative") || (echo "symlink was not made relative" && exit 1) + echo "symlink after patching: $(readlink $destination2)" + ([[ -e $destination2 ]] && echo "symlink isn't broken") || (echo "symlink is broken" && exit 1) + ([[ $(readlink $destination2) == "../x/file1" ]] && echo "absolute symlink was made relative") || (echo "symlink was not made relative" && exit 1) ''; }; move-docs = stdenv.mkDerivation {