diff options
Diffstat (limited to 'src/instool')
-rwxr-xr-x | src/instool | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/instool b/src/instool new file mode 100755 index 0000000..0b5060a --- /dev/null +++ b/src/instool @@ -0,0 +1,55 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + mandir (install|uninstall) DESTDIR MANPAGES... + EOF +} + + +ACTION="${1:-}" +DESTDIR="${2:-}" +eval "$(assert-arg -- "$ACTION" 'ACTION')" +eval "$(assert-arg -- "$DESTDIR" 'DESTDIR')" +shift +shift + + +ldirnames() { + find "$@" | xargs -I% basename % | + sed 's|^\(.*\)\.\([a-z][a-z]\)\.\(.*\)$|\2/man\3|' +} + +dirnames() { + ldirnames "$@" | sort | uniq + ldirnames "$@" | cut -d/ -f2- | sort | uniq +} + +if [ "$ACTION" = 'install' ]; then + dirnames "$@" | xargs -I% mkdir -p "$DESTDIR"/% +fi + +for f in "$@"; do + lang="$( printf '%s\n' "$f" | cut -d. -f2)" + section="$(printf '%s\n' "$f" | cut -d. -f3-)" + name="$(basename "${f%."$lang"."$section"}")" + nameext="$name.$section" + case "$ACTION" in + (install) + cp "$f" "$DESTDIR/$lang/man${section}/$nameext" + ln -fs "../en/man${section}/$nameext" \ + "$DESTDIR/man${section}/$nameext" + ;; + (uninstall) + rm -f \ + "$DESTDIR/$lang/man${section}/$nameext" \ + "$DESTDIR/man${section}/$nameext" + ;; + (*) + usage >&2 + exit 2 + ;; + esac +done |