summary refs log tree commit diff
path: root/pkgs/build-support/setup-hooks/compress-man-pages.sh
diff options
context:
space:
mode:
authorVladimír Čunát <vcunat@gmail.com>2017-02-27 20:03:45 +0100
committerVladimír Čunát <vcunat@gmail.com>2017-02-27 20:03:45 +0100
commit20ffc3cd735503ce92cb27ceead6b0ebabefbec4 (patch)
tree0a72a9dc1313d9f6056bf77090fa3aed1b0ec897 /pkgs/build-support/setup-hooks/compress-man-pages.sh
parent079353e20851073e9b5de183ab24414d7cd54ccb (diff)
downloadnixlib-20ffc3cd735503ce92cb27ceead6b0ebabefbec4.tar
nixlib-20ffc3cd735503ce92cb27ceead6b0ebabefbec4.tar.gz
nixlib-20ffc3cd735503ce92cb27ceead6b0ebabefbec4.tar.bz2
nixlib-20ffc3cd735503ce92cb27ceead6b0ebabefbec4.tar.lz
nixlib-20ffc3cd735503ce92cb27ceead6b0ebabefbec4.tar.xz
nixlib-20ffc3cd735503ce92cb27ceead6b0ebabefbec4.tar.zst
nixlib-20ffc3cd735503ce92cb27ceead6b0ebabefbec4.zip
compress-man-pages: skip compressed manpages
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.
Diffstat (limited to 'pkgs/build-support/setup-hooks/compress-man-pages.sh')
-rw-r--r--pkgs/build-support/setup-hooks/compress-man-pages.sh36
1 files changed, 20 insertions, 16 deletions
diff --git a/pkgs/build-support/setup-hooks/compress-man-pages.sh b/pkgs/build-support/setup-hooks/compress-man-pages.sh
index f1d9cf3a3696..d10a898d6e46 100644
--- a/pkgs/build-support/setup-hooks/compress-man-pages.sh
+++ b/pkgs/build-support/setup-hooks/compress-man-pages.sh
@@ -3,26 +3,30 @@ fixupOutputHooks+=('if [ -z "$dontGzipMan" ]; then compressManPages "$prefix"; f
 compressManPages() {
     local dir="$1"
 
-    if [ ! -d "$dir/share/man" ]; then return; fi
-    echo "gzipping man pages in $dir"
+    if [ -L "$dir"/share ] || [ -L "$dir"/share/man ] || [ ! -d "$dir/share/man" ]
+        then return
+    fi
+    echo "gzipping man pages under $dir/share/man/"
 
-    GLOBIGNORE=.:..:*.gz:*.bz2
-
-    for f in "$dir"/share/man/*/* "$dir"/share/man/*/*/*; do
-        if [ -f "$f" -a ! -L "$f" ]; then
-            if gzip -c -n "$f" > "$f".gz; then
-                rm "$f"
-            else
-                rm "$f".gz
-            fi
+    # Compress all uncompressed manpages.  Don't follow symlinks, etc.
+    find "$dir"/share/man/ -type f -a '!' -regex '.*\.\(bz2\|gz\)$' -print0 \
+        | while IFS= read -r -d $'\0' f
+    do
+        if gzip -c -n "$f" > "$f".gz; then
+            rm "$f"
+        else
+            rm "$f".gz
         fi
     done
 
-    for f in "$dir"/share/man/*/* "$dir"/share/man/*/*/*; do
-        if [ -L "$f" -a -f `readlink -f "$f"`.gz ]; then
-            ln -sf `readlink "$f"`.gz "$f".gz && rm "$f"
+    # Point symlinks to compressed manpages.
+    find "$dir"/share/man/ -type l -a '!' -regex '.*\.\(bz2\|gz\)$' -print0 \
+        | 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
-
-    unset GLOBIGNORE
 }