Merge pull request #212286 from Artturin/runonall

make-symlinks-relative: run on all outputs
This commit is contained in:
Artturi 2023-01-25 15:51:53 +02:00 committed by GitHub
commit e42cdd2383
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 2 deletions

View File

@ -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 # For every symlink in $output that refers to another file in $output
# ensure that the symlink is relative. This removes references to the output # ensure that the symlink is relative. This removes references to the output
@ -26,3 +28,10 @@ _makeSymlinksRelative() {
done < <(find $prefix -type l -print0) done < <(find $prefix -type l -print0)
} }
_makeSymlinksRelativeInAllOutputs() {
local output
for output in $(getAllOutputNames); do
prefix="${!output}" _makeSymlinksRelative
done
}

View File

@ -23,19 +23,29 @@
}; };
make-symlinks-relative = stdenv.mkDerivation { make-symlinks-relative = stdenv.mkDerivation {
name = "test-make-symlinks-relative"; name = "test-make-symlinks-relative";
outputs = [ "out" "man" ];
buildCommand = '' buildCommand = ''
mkdir -p $out/{bar,baz} mkdir -p $out/{bar,baz}
mkdir -p $man/share/{x,y}
source1="$out/bar/foo" source1="$out/bar/foo"
destination1="$out/baz/foo" destination1="$out/baz/foo"
source2="$man/share/x/file1"
destination2="$man/share/y/file2"
echo foo > $source1 echo foo > $source1
echo foo > $source2
ln -s $source1 $destination1 ln -s $source1 $destination1
ln -s $source2 $destination2
echo "symlink before patching: $(readlink $destination1)" echo "symlink before patching: $(readlink $destination1)"
echo "symlink before patching: $(readlink $destination2)"
_makeSymlinksRelative _makeSymlinksRelativeInAllOutputs
echo "symlink after patching: $(readlink $destination1)" echo "symlink after patching: $(readlink $destination1)"
([[ -e $destination1 ]] && echo "symlink isn't broken") || (echo "symlink is broken" && exit 1) ([[ -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) ([[ $(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 { move-docs = stdenv.mkDerivation {