3 # build distribution tree.
5 # first version Thu Aug 19 00:53:30 JST 1999
6 # by Tenkou N. Hattori <tnh@aurora.dti.ne.jp>
9 $epath = `dirname $0`; chomp $epath;
10 unshift (@INC, $epath);
12 use JMtl ('line2hash', 'hash2line');
15 my ($idx_header, $idx_footer);
17 # $CVSROOT は CVS リポジトリの root,
18 # $DISTROOT は配布アーカイブイメージの root.
20 if (@ARGV < 3) {die "$0 srcroot dstroot pod2man\n"};
22 my $CVSROOT = $ARGV[0];
23 unless (-d $CVSROOT) {die "$CVSROOT does not exist\n"};
25 my $DISTROOT = $ARGV[1];
27 my $POD2MAN = $ARGV[2];
28 unless (-x $POD2MAN) {die "$POD2MAN is not executable\n"};
30 # for debugging purpose:
32 #my $MANROOT = "/home/nakano/text/JM/imp/manual";
33 #my $DISTROOT = "/var/tmp/JM/man-pages-ja";
36 # いったん $DISTROOT/manual をお掃除。
38 if (-d "$DISTROOT/manual") {
39 system("rm -rf $DISTROOT/manual");
41 system("mkdir -p $DISTROOT/manual");
43 my (%roff_hash, %link_hash);
45 # $CVSROOT/manual/$pkg/translation_list の scan.
47 print "scanning translation_list's...\n";
48 open RL,"find $CVSROOT/manual -name translation_list|";
54 unless(/.*manual\/([^\/]*)\/translation_list/){next;}
57 # release または contrib ディレクトリを持たないパッケージは処理対象としない
58 if (! -d "$CVSROOT/manual/$pkg/release" && ! -d "$CVSROOT/manual/$pkg/contrib") {next;}
60 system "mkdir -p $DISTROOT/manual/$pkg/";
61 system "cp $tl $DISTROOT/manual/$pkg";
63 open TL, $tl || die "cannot open $tl";
66 my %ti = line2hash($_);
67 my $name = $ti{fname};
69 my $page = "$pkg,$name,$sec";
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";
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";
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";
99 foreach my $fkey (sort keys %roff_hash){
100 my ($pkg,$name,$sec)=split /,/, $fkey;
102 my $dstdir = "$DISTROOT/manual/$pkg/man$sec";
103 my $dstfile = "$dstdir/$name.$sec";
104 my $srcfile = "$CVSROOT/manual/$roff_hash{$fkey}";
106 print "copy $srcfile => $dstfile\n";
107 system "mkdir -p $dstdir";
108 system "cp $srcfile $dstfile";
114 foreach my $fkey (sort keys %link_hash){
115 my ($pkg, $name, $sec) = split /,/, $fkey;
117 my $dstdir = "$DISTROOT/manual/$pkg/man$sec";
118 my $dstfile = "$dstdir/$name.$sec";
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";
130 print "TRANSLATING pod -> man\n";
133 # $CVSROOT/pod/$pkg/translation_list の scan.
135 print "scanning translation_list's...\n";
136 open RL,"find $CVSROOT/pod -name translation_list|";
142 unless(/.*pod\/([^\/]*)\/translation_list/){next;}
145 system "mkdir -p $DISTROOT/manual/$pkg/";
146 system "cp $tl $DISTROOT/manual/$pkg";
148 open TL, $tl || die "cannot open $tl";
151 my %ti = line2hash($_);
152 my $name = $ti{fname};
153 my $page = "$pkg,$name";
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";
169 foreach my $fkey (sort keys %pod_hash){
170 my ($pkg,$name)=split /,/, $fkey;
172 my $dstdir = "$DISTROOT/manual/$pkg/man1";
173 my $dstfile = "$dstdir/$name.1";
174 my $srcfile = "$CVSROOT/pod/$pod_hash{$fkey}";
176 print "translate $srcfile => $dstfile\n";
177 system "mkdir -p $dstdir";
178 system "$POD2MAN --utf8 $srcfile > $dstfile";