summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2025-05-12 10:31:57 -0300
committerEuAndreh <eu@euandre.org>2025-05-12 10:31:57 -0300
commit8ce7ff0c753a11f490c9e2ebb071e36ec2b0d3bb (patch)
tree368941ae88cb676bede0753983a7165e2a9a2c19
parentsrc/sortx: Add (diff)
downloadeut-8ce7ff0c753a11f490c9e2ebb071e36ec2b0d3bb.tar.gz
eut-8ce7ff0c753a11f490c9e2ebb071e36ec2b0d3bb.tar.xz
src/instool: Support "mo" type besides "man"
-rwxr-xr-xsrc/instool112
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