#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: instool DIRECTORY (install|uninstall) TYPE FILE... EOF } DIRECTORY="${1:-}" ACTION="${2:-}" TYPE="${3:-}" eval "$(assert-arg -- "$DIRECTORY" 'DIRECTORY')" eval "$(assert-arg -- "$ACTION" 'ACTION')" eval "$(assert-arg -- "$TYPE" 'TYPE')" shift shift shift case "$TYPE" in (man|mo) ;; (*) echo "Bad type: $TYPE" >&2 usage >&2 exit 2 ;; esac case "$ACTION" in (install|uninstall) ;; (*) usage >&2 exit 2 ;; esac mkdirs() { if [ "$ACTION" = 'install' ]; then xargs -I% mkdir -p -- "$DIRECTORY"/% fi } man_dirnames() { find -- "$@" | xargs -I% basename % | sed 's|^\(.*\)\.\([a-z][a-z]\)\.\(.*\)$|\2/man\3|' } dirs_man() { { man_dirnames "$@" man_dirnames "$@" | cut -d/ -f2- } | LANG=POSIX.UTF-8 sort | uniq | mkdirs } type_man() { f="$1" lang="$( basename -- "$f" | cut -d. -f2)" section="$(basename -- "$f" | cut -d. -f3-)" name="$(basename -- "${f%."$lang"."$section"}")" nameext="$name.$section" if [ "$ACTION" = install ]; then cp -- "$f" "$DIRECTORY/$lang/man${section}/$nameext" ln -fs "../en/man${section}/$nameext" \ "$DIRECTORY/man${section}/$nameext" else rm -f -- \ "$DIRECTORY/$lang/man${section}/$nameext" \ "$DIRECTORY/man${section}/$nameext" fi } dirs_mo() { true } type_mo() { f="$1" lang="$(basename -- "$f" .mo)" name="$(basename -- "$(dirname -- "$f")")" dir="$DIRECTORY"/"$lang"/LC_MESSAGES if [ "$ACTION" = install ]; then mkdir -p -- "$dir" cp -- "$f" "$dir"/"$name".mo else rm -f -- "$dir"/"$name".mo fi } if [ $# = 0 ]; then exit fi dirs_"$TYPE" "$@" for f in "$@"; do type_"$TYPE" "$f" done