OSDN Git Service

nginx 1.21.4: Update sources.
[linuxjm/jm.git] / admin / mktrlist2.sh
1 #!/bin/bash
2 #
3 # 新しいパッケージをリポジトリに入れた時に
4 # translation_listを自動作成するスクリプト with (N)AWK and BASH
5 #
6 # original/ディレクトリ以下にファイルを揃えてから、
7 # translation_listがあるべきディレクトリで実行して下さい。
8 # オリジナルからのコピーにおいてファイル日付が保存されていることを
9 # 前提にしています。"cp -p" や "cp -a" を使ってください。
10 # パッケージ名はディレクトリから、バージョンはlsmファイルから
11 # 所得します。ただし、コマンドライン引数で指定されたものを優先します。
12 # 標準出力に結果を出力するので、適当にリダイレクトして下さい。
13 #
14 # BUG:
15 # ・シンボリックリンクには対応していません。
16 # ・manページの日付所得に失敗することが多々あります。
17 # ・マクロ ".so" によるリンクには対応していません。
18 # ・ls コマンドは coreutils にあるもの(version 5.x)を前提としています
19
20 print_usage () {
21 (
22     exec 1>&2
23
24     echo "$0: [ -p package ] [ -v version ] [ -l G | B | M | N ]"
25     echo '-p | --package <package>'
26     echo '      set package name'
27     echo '-v | --version <version>'
28     echo '      set version of package'
29     echo '-l | --license <license type>'
30     echo '      set license type'
31     echo '        G: GPL2'
32     echo '        B: BSD'
33     echo '        M: Miscellaneous'
34     echo '        N: Not for commercial'
35 )
36 }
37
38 NAWK=awk
39 PWD=`pwd`
40 PKG=`basename $PWD`
41
42 STATUS='×'
43
44 # $1: <dir>
45 # output: <file> <YYYY/MM/DD>
46 stat_dir () {
47     pushd $1 > /dev/null
48
49     LANG=C /bin/ls -l --full-time | $NAWK '
50
51 BEGIN{
52     getline;    # skip first line
53 }
54 ($9 !~ /CVS/){
55     s=$6; gsub(/-/, "/", s); print $9, s;
56 }'
57     popd > /dev/null
58 }
59
60 # $1: <file>
61 # output: common date string(unkown format)
62 # output: or ".so <link>"
63 get_date_or_link_file () {
64     local header
65     header=`grep -i '^\.TH' $1 2> /dev/null`
66
67     if [ $? -eq 0 ]; then
68         echo $header | POSIXLY_CORRECT=1 $NAWK '
69 {
70     if ($0 !~ /([^ ]+ +){3}/) {
71         exit 1;
72     }
73
74     sub(/([^ ]+[ ]+){3}/, "");
75     sub(/"/, "");
76     sub(/".*/, "");
77     sub(/^ */, "");
78     print;
79 }'
80         return
81     fi
82
83     header=`grep -i '^\.Dd' $1 2> /dev/null`
84
85     if [ $? -eq 0 ]; then
86         echo $header | $NAWK '
87 {
88     $1 = "";
89     substr(/^ */, "");
90     print;
91 }'
92         return
93     fi
94
95     header=`grep -i '^\.so' $1 2> /dev/null`
96     if [ $? -eq 0 ]; then
97         echo $header
98         return
99     fi
100
101     return 1
102 }       
103
104 # $1: roff file to parse
105 # $2: default date (which is used if parsing is fault)
106 # output: date string or ".so link"
107 get_date_or_link () {
108     local date=`get_date_or_link_file $1`
109     if [ $? -ne 0 -o -z "$date" ]; then
110         echo $2
111         return 0
112     fi
113
114     case "$date" in
115         .so*)
116             # link
117             echo $date
118             ;;
119         *,*)
120             # month date, year
121             echo $date | $NAWK '{sub(/,/,"",$2); print $3 "/" $1 "/" $2}'
122             ;;
123         *)
124             # date month year
125             echo $date | $NAWK '{print $3 "/" $2 "/" $1}'
126             ;;
127     esac
128     return
129 }
130
131 # input:  "YYYY/Month_name/DD..."
132 # output: "YYYY/MM/DD..."
133 month2name () {
134     $NAWK '
135 BEGIN {
136     FS = "/";
137     OFS = "/";
138     month["Jan"] = "01";    month["Feb"] = "02";    month["Mar"] = "03";
139     month["Apr"] = "04";    month["May"] = "05";    month["Jun"] = "06";
140     month["Jul"] = "07";    month["Aug"] = "08";    month["Sep"] = "09";
141     month["Oct"] = "10";    month["Nov"] = "11";    month["Dec"] = "12";
142 }
143 {
144     $2 = month[substr($2,1,3)];
145     print;
146 }'
147 }
148
149 # obtain version information from LSM
150 # $1: LSM file path
151 # $2: default version (which is used if it fail to obtain version)
152 get_version () {
153     local ver_line=`grep -i "^Version:" $1 2> /dev/null`
154     if [ $? -ne 0 ]; then
155         echo $2
156         return
157     fi
158     echo $ver_line | $NAWK '{print $2}'
159 }
160
161 ######
162 # main
163 ######
164 while [ $# -ge 1 ]; do
165     case $1 in
166         -v|--version)
167             if [ $# -eq 1 ]; then
168                 print_usage
169                 exit 1
170             fi
171             shift
172             VERSION="$1"
173             shift
174             ;;
175         -p|--package)
176             if [ $# -eq 1 ]; then
177                 print_usage
178                 exit 1
179             fi
180             shift
181             PKG="$1"
182             shift
183             ;;
184         -l|--license)
185             if [ $# -eq 1 ]; then
186                 print_usage
187                 exit 1
188             fi
189             shift
190             case "$1" in
191                 [BGM])
192                     LICENSE=$1
193                     ;;
194                 *)
195                     echo "Unkown License Type: $1" 1>&2
196                     print_usage
197                     exit 1
198                     ;;
199             esac
200             shift
201             ;;
202         -h|--help)
203             print_usage
204             exit 0
205             ;;
206         *)
207             echo "Unkown option: $1" 1>&2
208             print_usage
209             exit 1
210             ;;
211     esac
212
213 done
214
215 # check LSM
216 LSM=`echo original/*.lsm`
217 if [ -f "$LSM" ]; then
218     VERSION=`get_version $LSM $VERSION`
219 fi
220
221 mandirs=`echo original/man[0-9]*`
222 for d in $mandirs
223 do
224     stat_dir $d | while read file date
225     do
226         DATE=`get_date_or_link $d/$file $date`
227         case "$DATE" in
228             .so*)
229                 echo $DATE
230                 ;;
231             *)
232                 DATE=`echo $DATE | month2name`
233                 MAN=`echo $file | sed 's/\.\([^.]*\)/:\1/'`
234                 echo "$STATUS:$PKG:$VERSION:$DATE:$MAN::$LICENSE:::"
235                 ;;
236         esac
237     done
238 done