aboutsummaryrefslogtreecommitdiff
path: root/tools/manpages.sh
blob: 755ff777660da0b08b713ac6029132ebc477bd65 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/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