OSDN Git Service

psmisc 23.5: 翻訳予約。
[linuxjm/jm.git] / bin / mkdist.perl
1 #!/usr/bin/perl
2 #
3 # build distribution tree.
4 #
5 # first version Thu Aug 19 00:53:30 JST 1999
6 #     by Tenkou N. Hattori <tnh@aurora.dti.ne.jp>
7 #
8 BEGIN{
9     $epath = `dirname $0`; chomp $epath;
10     unshift (@INC, $epath);
11 }
12 use JMtl ('line2hash', 'hash2line');
13 use strict 'vars';
14
15 my ($idx_header, $idx_footer);
16 #
17 # $CVSROOT は CVS リポジトリの root,
18 # $DISTROOT は配布アーカイブイメージの root.
19 #
20 if (@ARGV < 3) {die "$0 srcroot dstroot pod2man\n"};
21
22 my $CVSROOT = $ARGV[0];
23 unless (-d $CVSROOT) {die "$CVSROOT does not exist\n"};
24
25 my $DISTROOT = $ARGV[1];
26
27 my $POD2MAN = $ARGV[2];
28 unless (-x $POD2MAN) {die "$POD2MAN is not executable\n"};
29
30 # for debugging purpose:
31 #
32 #my $MANROOT = "/home/nakano/text/JM/imp/manual";
33 #my $DISTROOT = "/var/tmp/JM/man-pages-ja";
34
35 #
36 # いったん $DISTROOT/manual をお掃除。
37 #
38 if (-d "$DISTROOT/manual") {
39     system("rm -rf $DISTROOT/manual");
40 }
41 system("mkdir -p $DISTROOT/manual");
42
43 my (%roff_hash, %link_hash);
44 #
45 # $CVSROOT/manual/$pkg/translation_list の scan.
46 #
47 print "scanning translation_list's...\n";
48 open RL,"find $CVSROOT/manual -name translation_list|";
49 while(<RL>){
50     print;
51     chomp;
52     my $tl = $_;
53
54     unless(/.*manual\/([^\/]*)\/translation_list/){next;}
55     my $pkg=$1;
56
57     # release または contrib ディレクトリを持たないパッケージは処理対象としない
58     if (! -d "$CVSROOT/manual/$pkg/release" && ! -d "$CVSROOT/manual/$pkg/contrib") {next;}
59
60     system "mkdir -p $DISTROOT/manual/$pkg/";
61     system "cp $tl $DISTROOT/manual/$pkg";
62
63     open TL, $tl || die "cannot open $tl";
64     while (<TL>){
65         chomp;
66         my %ti = line2hash($_);
67         my $name = $ti{fname};
68         my $sec = $ti{sec};
69         my $page = "$pkg,$name,$sec";
70
71         if ($ti{kind} eq "link" && $ti{stat} eq "up2date"){
72             my $dst = ".so man$ti{lsec}/$ti{lname}.$ti{lsec}";
73             $link_hash{"$page"} = $dst;
74             print "collect link: $page => $dst\n";
75             next;
76         }
77
78         if ($ti{kind} eq roff && $ti{stat} =~ /^up/) {
79             my $src = "$pkg/release/man$sec/$name.$sec";
80             $roff_hash{"$page"} = $src;
81             print "collect roff: $page <= $src\n";
82             next;
83         }
84
85         if ($ti{kind} eq roff && $ti{stat} =~ /^cnt/) {
86             my $src = "$pkg/contrib/man$sec/$name.$sec";
87             $roff_hash{"$page"} = $src;
88             print "collect roff: $page <= $src\n";
89             next;
90         }
91     }
92     close TL;
93 }
94 close RL;
95
96 #
97 # copy 開始
98 #
99 foreach my $fkey (sort keys %roff_hash){
100     my ($pkg,$name,$sec)=split /,/, $fkey;
101
102     my $dstdir = "$DISTROOT/manual/$pkg/man$sec";
103     my $dstfile = "$dstdir/$name.$sec";
104     my $srcfile = "$CVSROOT/manual/$roff_hash{$fkey}";
105
106     print "copy $srcfile => $dstfile\n";
107     system "mkdir -p $dstdir";
108     system "cp $srcfile $dstfile";
109 }
110
111 #
112 # make symlinks
113 #
114 foreach my $fkey (sort keys %link_hash){
115     my ($pkg, $name, $sec) = split /,/, $fkey;
116
117     my $dstdir = "$DISTROOT/manual/$pkg/man$sec";
118     my $dstfile = "$dstdir/$name.$sec";
119
120     print "cat \"$link_hash{$fkey}\" > $dstfile\n";
121     system "mkdir -p $dstdir";
122     open DF, "> $dstfile" || die "cannot open $dstfile\n";
123     print DF "$link_hash{$fkey}\n";
124     close DF;
125 }
126
127 #
128 # pod データ収集
129 #
130 print "TRANSLATING pod -> man\n";
131 my (%pod_hash);
132 #
133 # $CVSROOT/pod/$pkg/translation_list の scan.
134 #
135 print "scanning translation_list's...\n";
136 open RL,"find $CVSROOT/pod -name translation_list|";
137 while(<RL>){
138     print;
139     chomp;
140     my $tl = $_;
141
142     unless(/.*pod\/([^\/]*)\/translation_list/){next;}
143     my $pkg=$1;
144
145     system "mkdir -p $DISTROOT/manual/$pkg/";
146     system "cp $tl $DISTROOT/manual/$pkg";
147
148     open TL, $tl || die "cannot open $tl";
149     while (<TL>){
150         chomp;
151         my %ti = line2hash($_);
152         my $name = $ti{fname};
153         my $page = "$pkg,$name";
154
155         if ($ti{kind} eq roff && $ti{stat} =~ /^up/) {
156             my $src = "$pkg/release/$name.pod";
157             $pod_hash{"$page"} = $src;
158             print "collect pod : $page <= $src\n";
159             next;
160         }
161     }
162     close TL;
163 }
164 close RL;
165
166 #
167 # 変換開始
168 #
169 foreach my $fkey (sort keys %pod_hash){
170     my ($pkg,$name)=split /,/, $fkey;
171
172     my $dstdir = "$DISTROOT/manual/$pkg/man1";
173     my $dstfile = "$dstdir/$name.1";
174     my $srcfile = "$CVSROOT/pod/$pod_hash{$fkey}";
175
176     print "translate $srcfile => $dstfile\n";
177     system "mkdir -p $dstdir";
178     system "$POD2MAN --utf8 $srcfile > $dstfile";
179 }
180