Because of bash 4.4 the semantics GLOBIGNORE changed. This resulted in already compressed manpages to be compressed twice. Also be careful about symlinks to fix #21777, e.g. the ledger example.
···33compressManPages() {
44 local dir="$1"
5566- if [ ! -d "$dir/share/man" ]; then return; fi
77- echo "gzipping man pages in $dir"
66+ if [ -L "$dir"/share ] || [ -L "$dir"/share/man ] || [ ! -d "$dir/share/man" ]
77+ then return
88+ fi
99+ echo "gzipping man pages under $dir/share/man/"
81099- GLOBIGNORE=.:..:*.gz:*.bz2
1010-1111- for f in "$dir"/share/man/*/* "$dir"/share/man/*/*/*; do
1212- if [ -f "$f" -a ! -L "$f" ]; then
1313- if gzip -c -n "$f" > "$f".gz; then
1414- rm "$f"
1515- else
1616- rm "$f".gz
1717- fi
1111+ # Compress all uncompressed manpages. Don't follow symlinks, etc.
1212+ find "$dir"/share/man/ -type f -a '!' -regex '.*\.\(bz2\|gz\)$' -print0 \
1313+ | while IFS= read -r -d $'\0' f
1414+ do
1515+ if gzip -c -n "$f" > "$f".gz; then
1616+ rm "$f"
1717+ else
1818+ rm "$f".gz
1819 fi
1920 done
20212121- for f in "$dir"/share/man/*/* "$dir"/share/man/*/*/*; do
2222- if [ -L "$f" -a -f `readlink -f "$f"`.gz ]; then
2323- ln -sf `readlink "$f"`.gz "$f".gz && rm "$f"
2222+ # Point symlinks to compressed manpages.
2323+ find "$dir"/share/man/ -type l -a '!' -regex '.*\.\(bz2\|gz\)$' -print0 \
2424+ | while IFS= read -r -d $'\0' f
2525+ do
2626+ local target
2727+ target="$(readlink -f "$f")"
2828+ if [ -f "$target".gz ]; then
2929+ ln -sf "$target".gz "$f".gz && rm "$f"
2430 fi
2531 done
2626-2727- unset GLOBIGNORE
2832}