#!/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 } includedlang() { lang="$1" if [ -z "${LOCALES:-}" ]; then return 0 fi printf '%s\n' "$LOCALES" | tr ',' '\n' | grep -qF "$lang" } type_man() { f="$1" lang="$( basename -- "$f" | cut -d. -f2)" if ! includedlang "$lang"; then return fi section="$(basename -- "$f" | cut -d. -f3-)" name="$(basename -- "${f%."$lang"."$section"}")" nameext="$name.$section" dir="$DIRECTORY"/"$lang"/man"${section}" if [ "$ACTION" = install ]; then mkdir -p -- "$dir" cp -- "$f" "$DIRECTORY/$lang/man${section}/$nameext" if [ "$lang" = 'en' ] && false; then ln -fs "../en/man${section}/$nameext" \ "$DIRECTORY/man${section}/$nameext" fi else rm -f -- \ "$DIRECTORY/$lang/man${section}/$nameext" \ "$DIRECTORY/man${section}/$nameext" fi } type_mo() { f="$1" lang="$(basename -- "$f" .mo)" if ! includedlang "$lang"; then return fi 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 for f in "$@"; do type_"$TYPE" "$f" done