root/trunk/bin/make-make.pl

Revision 73, 2.5 kB (checked in by ingy, 2 years ago)
 r83@erxz:  ingy | 2007-01-20 01:14:36 -0800
 Separate nodes with '-' instead.
  • Property svn:mime-type set to text/script
  • Property svn:executable set to *
Line 
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4
5 my ($output_file, $type, $star_level) = @ARGV;
6 $star_level ||= 1;
7
8 # ./Kwiki/src/doc/Kwiki/Formatter.pod
9
10 my $pathlet = ($output_file eq 'modules.mk') ? 'lib' : 'src/doc';
11 my $file_type = ($output_file eq 'modules.mk') ? 'MODULES' : 'DOCS';
12
13 my @libs = map {
14     s!^.*/$pathlet/!! or die $_;
15     chomp;
16     $_;
17 } (<STDIN>);
18
19 my %paths;
20 our $level1 = '';
21 our $level2 = '';
22 our $level3 = '';
23 our $level4 = '';
24 our $level5 = '';
25 my $all = '';
26 my $sections = lc($type) . ": \$(${type}_PATHS) \$(${type}_$file_type)\n\n";
27
28 for my $lib (@libs) {
29     my @parts = split('/', $lib);
30     my $level = @parts;
31     my $path = $lib;
32     if ($path =~ s!/\w+.(pm|pod)$!!) {
33         $paths{$path} = 1;
34     }
35     no strict 'refs';
36     ${"level$level"} .= "\t$lib \\\n";
37 }
38
39 for my $level (1..5) {
40     no strict 'refs';
41     if (${"level$level"}) {
42         ${"level$level"} =
43             "${type}_LEVEL_$level = \\\n" .
44             ${"level$level"} .
45             "\n";
46         $all .= "\$(${type}_LEVEL_$level) ";
47         $sections .= make_section($level, $type, $star_level);
48     }
49 }
50
51 my $paths = '';
52 if ($output_file eq 'modules.mk') {
53     $paths = join '', map {
54         "\t$_ \\\n";
55     } sort keys %paths;
56     $paths ||= '';
57 }
58
59 if ($paths) {
60     $paths = "${type}_PATHS = \\\n$paths\n";
61 }
62
63 if ($all) {
64     $all = "${type}_$file_type = $all\n\n";
65 }
66
67 open OUT, "> $output_file" or die "Can't open $output_file for output: $!";
68 print OUT "$paths$level1$level2$level3$level4$level5$all$sections";
69 close OUT;
70
71 sub make_section {
72     my ($level, $TYPE, $star_level) = @_;
73     my $dot_level = $level;
74     $dot_level++ if $output_file eq 'docs.mk';
75     my $type = lc($TYPE);
76     my $stars = join '/', (('*') x $star_level);
77     my $dots = join '/', (('..') x $dot_level);
78     if ($level == 1) {
79         return ($output_file eq 'modules.mk') ? <<"..." : <<"...";
80 \$(${TYPE}_LEVEL_$level):
81         ln -fs $dots/src/$type/$stars/$pathlet/\$\@ \$\@
82 ...
83 \$(${TYPE}_LEVEL_$level):
84         link=`perl -e '\$\$_=shift;s!\\.pod\$\$!!;print' \$\@`; \\\
85         ln -fs $dots/src/$type/$stars/$pathlet/\$\@ \$\$link;
86 ...
87     }
88     my $dots2 = join '/', (('..') x ($level - 1));
89     my $dummy = join '/', (('dummy') x ($level - 1));
90     return ($output_file eq 'modules.mk') ? <<"..." : <<"...";
91 \$(${TYPE}_LEVEL_$level):
92         cd $dummy; \\
93         lib=$dots/src/$type/$stars/$pathlet/\$\@; \\
94         ln -fs \$\$lib $dots2/\$\@;
95 ...
96 \$(${TYPE}_LEVEL_$level):
97         lib=../../src/$type/$stars/$pathlet/\$\@; \\
98         link=`perl -e '\$\$_=shift;s!/!-!g;s!\\.pod\$\$!!;print' \$\@`; \\
99         ln -fs \$\$lib \$\$link;
100 ...
101 }
102
Note: See TracBrowser for help on using the browser.