Scatter output hook
This hook allows to scatter files in $out to multiple outputs. For "bin" and "doc" outputs there are prefefined default masks, but they can be overriden by setting files_<outname>, for example: files_bin = [ "/bin/*" "/lib/libexec/" ]; To make an effect hook must be specified in buildInputs.
This commit is contained in:
parent
5b4006cddb
commit
e2e77950f3
56
pkgs/build-support/setup-hooks/scatter_output.sh
Normal file
56
pkgs/build-support/setup-hooks/scatter_output.sh
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
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 /bin/sh -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
|
||||||
|
}
|
@ -278,6 +278,8 @@ let
|
|||||||
dotnetfx = dotnetfx40;
|
dotnetfx = dotnetfx40;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
scatterOutputHook = makeSetupHook {} ../build-support/setup-hooks/scatter_output.sh;
|
||||||
|
|
||||||
vsenv = callPackage ../build-support/vsenv {
|
vsenv = callPackage ../build-support/vsenv {
|
||||||
vs = vs90wrapper;
|
vs = vs90wrapper;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user