#!/bin/sh set -eu . tools/lib.sh usage() { cat <<-'EOF' Usage: sh doc/manpages.sh -i|-u -p MANDIR FILE... sh doc/manpages.sh -h EOF } help() { cat <<-'EOF' Options: -i set ACTION=install -u set ACTION=uninstall -p MANDIR use $MANDIR as the prefix directory -h, --help show this message Installs/uninstalls manpage files into MANDIR using the original filename as a hint towards which subdirectory to pick: the `prog.ru.1` file is installed under the `man1/` directory hierarchy under the `ru/` language folder. When then language is `en`, a the toplevel `man1/` gets a symlink to the `en/` language folder: man/ en/ man1/ prog.1 ru/ man1/ prog.1 man1/ prog.1 -> ../en/man1/prog.1 Examples: Install prog.en.1 under `/usr/man`: $ sh doc/manpages.sh -ip/usr/man prog.en.1 Uninstall all files listed under doc/ from `$PREFIX`: sh doc/manpages.sh -up "$PREFIX" doc/*.[0-9] EOF } for flag in "$@"; do case "$flag" in (--) break ;; (--help) usage help exit ;; (*) ;; esac done while getopts 'iup:h' flag; do case "$flag" in (i) ACTION=install ;; (u) ACTION=uninstall ;; (p) MANDIR="$OPTARG" ;; (h) usage help exit ;; (*) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) eval "$(assert_arg "${ACTION:-}" '-[iu] for choosing action')" eval "$(assert_arg "${MANDIR:-}" '-p MANDIR')" eval "$(assert_arg "${1:-}" 'FILE...')" for f in "$@"; do l="$(echo "$f" | awk -F. '{print $(NF-1)}')" n="$(echo "$f" | awk -F. '{print $NF}')" case "$ACTION" in (install) to_name="$(basename "${f%."$l"."$n"}.$n")" mkdir -p "$MANDIR/$l/man$n" "$MANDIR/man$n" cp "$f" "$MANDIR/$l/man$n/$to_name" if [ "$l" = 'en' ]; then ln -fs "../en/man$n/$to_name" \ "$MANDIR/man$n/$to_name" fi ;; (uninstall) to_name="$(basename "${f%."$l"."$n"}.$n")" rm -f \ "$MANDIR/$l/man$n/$to_name" \ "$MANDIR/man$n/$to_name" ;; (*) echo "Bad ACTION: $ACTION" exit 1 ;; esac done