]> git.tuebingen.mpg.de Git - paraslash.git/blob - man_util.bash
Convert receivers to lopsub.
[paraslash.git] / man_util.bash
1 #!/usr/bin/env bash
2
3 # filters, writers are called "modules" in this script
4 print_modhelp()
5 {
6         local ggo="$1"
7
8         $GENGETOPT --show-detailed-help \
9                 --set-version "" \
10                 --set-package "" \
11                 < "$ggo" | awk 'BEGIN {
12                         have_purpose=0
13                         have_usage=0
14                 } {
15                         if (!have_purpose) {
16                                 if ($0 ~ /^ *$/)
17                                         next
18                                 printf(" (%s):", $0)
19                                 have_purpose=1
20                                 next
21                         }
22                         if (!have_usage) {
23                                 if ($0 ~ /^Usage: /) {
24                                         have_usage=1
25                                 }
26                                 next
27                         }
28                         print $0
29                 }'
30 }
31
32 make_help()
33 {
34         local target="$1" module ggo
35
36         ggo="$GGO_DIR/$1.ggo"
37         $GENGETOPT --show-detailed-help \
38                 --set-version "$VERSION" \
39                 --set-package "para_$1" \
40                 < "$ggo"
41
42         if [[ "$target" == 'filter' || "$target" == 'audiod' ]]; then
43                 for module in $FILTERS; do
44                         ggo="$GGO_DIR/${module}_filter.ggo"
45                         [[ ! -f "$ggo" ]] && continue
46                         printf "\nOptions for the $module filter"
47                         print_modhelp "$ggo"
48                 done
49         fi
50         if [[ "$target" == 'write' || "$target" == 'audiod' ]]; then
51                 for module in $WRITERS; do
52                         ggo="$GGO_DIR/${module}_write.ggo"
53                         [[ ! -f "$ggo" ]] && continue
54                         printf "\nOptions for the $module writer"
55                         print_modhelp "$ggo"
56                 done
57         fi
58 }
59
60 set -u
61
62 (($# != 1)) && exit 1
63
64 # These must be set by the caller (make or help2man)
65 export COMMAND_LISTS FILTERS GENGETOPT GGO_DIR HELP2MAN HELP2MAN_DIR \
66         RECEIVERS VERSION WRITERS
67
68 # If either --version or --help-xxx was given, we are being called by help2man
69 if [[ "$1" == "--version" ]]; then
70         echo "$VERSION"
71         exit $?
72 fi
73 if [[ "$1" =~ --help- ]]; then
74         make_help "${1#--help-}"
75         exit $?
76 fi
77
78 # Called by make, run help2man
79 output_file="$1"
80 target="${output_file##*/para_}"
81 target="${target%.*}" # server, audiod, filter, ...
82 link="$HELP2MAN_DIR/para_$target"
83
84 cl_opts=
85 tempfiles=
86 for cl in $COMMAND_LISTS; do
87         if [[ "$cl" =~ lsg ]]; then
88                 tempfiles+=" $cl.man_util.$$"
89                 sed -e '/^\.SH / s/$/]/1' -e '/^\.SH / s/^\.SH /[/1' "$cl" > "$cl.man_util.$$"
90                 cl_opts+=" --include $cl.man_util.$$"
91         else
92                 cl_opts+=" --include $cl"
93         fi
94 done
95
96 # Create a symlink para_$target, pointing to this script. This hack is
97 # necessary because help2man always includes the name of the executable in its
98 # output.
99 ln -sf "$PWD/$0" "$link"
100
101 # This will call us again twice, with either --help-$target or --version given.
102 $HELP2MAN --no-info --help-option "--help-$target" $cl_opts \
103         "$link" > "$output_file"
104 ret=$?
105 rm -f $tempfiles
106 if (($ret != 0)); then
107         rm -f "$output_file"
108         exit 1
109 fi