nixpkgs/pkgs/build-support/setup-hooks/scatter_output.sh

57 lines
1.4 KiB
Bash
Raw Normal View History

preFixupPhases+=" scatter_files"
preDistPhases+=" propagate_bin_input"
SCATTER_BIN_DEFAULT=${SCATTER_BIN_DEFAULT:-"/lib/*.so* /bin/*"}
SCATTER_DOC_DEFAULT=${SCATTER_DOC_DEFAULT:-"/share/man/* /share/doc/*"}
scatter_files() {
save_nullglob=$(shopt -p nullglob)
for o in $outputs; do
[[ "$o" == "out" ]] && continue
v=files_${o}
#if files_'output' isn't set in derivative, use defualts for some
[[ ${!v} ]] || {
case $o in
bin)
v=SCATTER_BIN_DEFAULT
;;
doc)
v=SCATTER_DOC_DEFAULT
;;
*)
continue
;;
esac
}
# prepend each path with $out
paths=$out${!v// \// $out/}
shopt -s nullglob
for f in $paths; do
shopt -u nullglob
dist=${!o}${f#$out}
mkdir -p $(dirname $dist)
cp -pr $f $dist
# remove source, not forgetting to clean empty dirs
rm -r $f
rmdir --ignore-fail-on-non-empty $(dirname $f)
done
find ${!o} -type f -exec $SHELL -c 'patchelf --set-rpath $(patchelf --print-rpath {} 2>/dev/null):'${!o}'/lib {} 2>/dev/null && patchelf --shrink-rpath {}' \;
done
eval $save_nullglob
}
propagate_bin_input() {
if [[ -n ${bin:-} ]]; then
mkdir -p $out/nix-support
echo $bin >> $out/nix-support/propagated-native-build-inputs
fi
if [[ -n ${bin:-} && -n ${doc:-} ]]; then
mkdir -p $bin/nix-support
echo $doc >> $bin/nix-support/propagated-user-env-packages
fi
}