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>
8 # $Id: mkdist.perl,v 1.2 2000/08/02 10:00:22 nakano Exp $
11 $epath = `dirname $0`; chomp $epath;
12 unshift (@INC, $epath);
14 use JMtl ('line2hash', 'hash2line');
17 my ($idx_header, $idx_footer);
19 # $CVSROOT は CVS リポジトリの root,
20 # $DISTROOT は配布アーカイブイメージの root.
22 if (@ARGV < 3) {die "$0 srcroot dstroot pod2man\n"};
24 my $CVSROOT = $ARGV[0];
25 unless (-d $CVSROOT) {die "$CVSROOT does not exist\n"};
27 my $DISTROOT = $ARGV[1];
29 my $POD2MAN = $ARGV[2];
30 unless (-x $POD2MAN) {die "$POD2MAN is not executable\n"};
32 # for debugging purpose:
34 #my $MANROOT = "/home/nakano/text/JM/imp/manual";
35 #my $DISTROOT = "/var/tmp/JM/man-pages-ja";
38 # いったん $DISTROOT/manual をお掃除。
40 if (-d "$DISTROOT/manual") {
41 system("rm -rf $DISTROOT/manual");
43 system("mkdir -p $DISTROOT/manual");
45 my (%roff_hash, %link_hash);
47 # $CVSROOT/manual/$pkg/translation_list の scan.
49 print "scanning translation_list's...\n";
50 open RL,"find $CVSROOT/manual -name translation_list|";
56 unless(/.*manual\/([^\/]*)\/translation_list/){next;}
59 system "mkdir -p $DISTROOT/manual/$pkg/";
60 system "cp $tl $DISTROOT/manual/$pkg";
62 open TL, $tl || die "cannot open $tl";
65 my %ti = line2hash($_);
66 my $name = $ti{fname};
68 my $page = "$pkg,$name,$sec";
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";
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";
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";
98 foreach my $fkey (sort keys %roff_hash){
99 my ($pkg,$name,$sec)=split /,/, $fkey;
101 my $dstdir = "$DISTROOT/manual/$pkg/man$sec";
102 my $dstfile = "$dstdir/$name.$sec";
103 my $srcfile = "$CVSROOT/manual/$roff_hash{$fkey}";
105 print "copy $srcfile => $dstfile\n";
106 system "mkdir -p $dstdir";
107 system "cp $srcfile $dstfile";
113 foreach my $fkey (sort keys %link_hash){
114 my ($pkg, $name, $sec) = split /,/, $fkey;
116 my $dstdir = "$DISTROOT/manual/$pkg/man$sec";
117 my $dstfile = "$dstdir/$name.$sec";
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";
129 print "TRANSLATING pod -> man\n";
132 # $CVSROOT/pod/$pkg/translation_list の scan.
134 print "scanning translation_list's...\n";
135 open RL,"find $CVSROOT/pod -name translation_list|";
141 unless(/.*pod\/([^\/]*)\/translation_list/){next;}
144 system "mkdir -p $DISTROOT/manual/$pkg/";
145 system "cp $tl $DISTROOT/manual/$pkg";
147 open TL, $tl || die "cannot open $tl";
150 my %ti = line2hash($_);
151 my $name = $ti{fname};
152 my $page = "$pkg,$name";
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";
168 foreach my $fkey (sort keys %pod_hash){
169 my ($pkg,$name)=split /,/, $fkey;
171 my $dstdir = "$DISTROOT/manual/$pkg/man1";
172 my $dstfile = "$dstdir/$name.1";
173 my $srcfile = "$CVSROOT/pod/$pod_hash{$fkey}";
175 print "translate $srcfile => $dstfile\n";
176 system "mkdir -p $dstdir";
177 system "$POD2MAN $srcfile > $dstfile";