diff options
author | EuAndreh <eu@euandre.org> | 2025-05-12 10:31:57 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2025-05-12 10:31:57 -0300 |
commit | 8ce7ff0c753a11f490c9e2ebb071e36ec2b0d3bb (patch) | |
tree | 368941ae88cb676bede0753983a7165e2a9a2c19 /src | |
parent | src/sortx: Add (diff) | |
download | eut-8ce7ff0c753a11f490c9e2ebb071e36ec2b0d3bb.tar.gz eut-8ce7ff0c753a11f490c9e2ebb071e36ec2b0d3bb.tar.xz |
src/instool: Support "mo" type besides "man"
Diffstat (limited to 'src')
-rwxr-xr-x | src/instool | 112 |
1 files changed, 78 insertions, 34 deletions
diff --git a/src/instool b/src/instool index 0b5060a..addfc41 100755 --- a/src/instool +++ b/src/instool @@ -3,53 +3,97 @@ set -eu usage() { cat <<-'EOF' - Usage: - mandir (install|uninstall) DESTDIR MANPAGES... + Usage: instool DIRECTORY (install|uninstall) TYPE FILE... EOF } -ACTION="${1:-}" -DESTDIR="${2:-}" -eval "$(assert-arg -- "$ACTION" 'ACTION')" -eval "$(assert-arg -- "$DESTDIR" 'DESTDIR')" +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 -ldirnames() { - find "$@" | xargs -I% basename % | + +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|' } -dirnames() { - ldirnames "$@" | sort | uniq - ldirnames "$@" | cut -d/ -f2- | sort | uniq +dirs_man() { + { + man_dirnames "$@" + man_dirnames "$@" | cut -d/ -f2- + } | LANG=POSIX.UTF-8 sort | uniq | mkdirs } -if [ "$ACTION" = 'install' ]; then - dirnames "$@" | xargs -I% mkdir -p "$DESTDIR"/% -fi +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 +} + + +dirs_"$TYPE" "$@" 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 + type_"$TYPE" "$f" done |