| 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 |
|
|---|