OSDN Git Service

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