Decreases the time spent on gzipping man pages. Decreases the number of processes launched per file from 2 to 1. Launches multiple processes in parallel via xargs -P. The behavior of the hook is unchanged. gzip -f is now needed to retain the behavior of compressing hardlinkgs. Previously '-f' was not needed because gzip compressed to stdout. It removes the check checking if gzip failed, because there os no reason it should ever fail. Even if it fails we probably want to fix the issue instead of silently not gzipping. This check has been introduced via c06046e5ef1b2f0a5b0fe243b72a257eaa9033ad. No comment was given on why it would be necessary.
28 lines
917 B
Bash
28 lines
917 B
Bash
fixupOutputHooks+=('if [ -z "${dontGzipMan-}" ]; then compressManPages "$prefix"; fi')
|
|
|
|
compressManPages() {
|
|
local dir="$1"
|
|
|
|
if [ -L "$dir"/share ] || [ -L "$dir"/share/man ] || [ ! -d "$dir/share/man" ]
|
|
then return
|
|
fi
|
|
echo "gzipping man pages under $dir/share/man/"
|
|
|
|
# Compress all uncompressed manpages. Don't follow symlinks, etc.
|
|
# gzip -f is needed to not error out on hard links.
|
|
find "$dir"/share/man/ -type f -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 \
|
|
| xargs -0 -n1 -P "$NIX_BUILD_CORES" gzip -f
|
|
|
|
# Point symlinks to compressed manpages.
|
|
find "$dir"/share/man/ -type l -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 \
|
|
| sort -z \
|
|
| while IFS= read -r -d $'\0' f
|
|
do
|
|
local target
|
|
target="$(readlink -f "$f")"
|
|
if [ -f "$target".gz ]; then
|
|
ln -sf "$target".gz "$f".gz && rm "$f"
|
|
fi
|
|
done
|
|
}
|