4 use File::Basename qw(&basename &dirname);
7 # List explicitly here the variables you want Configure to
8 # generate. Metaconfig only looks for shell variables, so you
9 # have to mention them as if they were shell variables, not
10 # %Config entries. Thus you write
12 # to ensure Configure will look for $Config{startperl}.
14 # This forces PL files to create target in same directory as PL file.
15 # This is so that make depend always knows where to find PL derivatives.
18 ($file = basename($0)) =~ s/\.PL$//;
19 $file =~ s/\.pl$// if ($^O eq 'os2' or $^O eq 'dos'); # "case-forgiving"
20 $file =~ s/\.pl$/.com/ if ($^O eq 'VMS'); # "case-forgiving"
22 open OUT,">$file" or die "Can't create $file: $!";
24 print "Extracting $file (with variable substitutions)\n";
26 # In this section, perl variables will be expanded during extraction.
27 # You can use $Config{...} to use Configure variables.
29 print OUT <<"!GROK!THIS!";
31 eval 'exec perl -S \$0 "\$@"'
35 # In the following, perl variables are not expanded during extraction.
37 print OUT <<'!NO!SUBS!';
42 # Build perltoc.pod and sanity check the list of pods against all
43 # of the MANIFEST, perl.pod, and ourselves.
50 @PODS = glob("*.pod");
55 die "$0: failed to chdir('pod'): $!\n" unless chdir("pod");
59 perl perlfaq perlfaq1 perlfaq2 perlfaq3 perlfaq4 perlfaq5
60 perlfaq6 perlfaq7 perlfaq8 perlfaq9 perldelta perldata
61 perlsyn perlop perlre perlrun perlfunc perlvar perlsub
62 perlmod perlmodlib perlmodinstall perlfork perlform perllocale
63 perlref perlreftut perldsc
64 perllol perlboot perltoot perltootc perlobj perltie perlbot perlipc
65 perldbmfilter perldebug perlnumber perldebguts
66 perldiag perlsec perltrap perlport perlstyle perlpod perlbook
67 perlembed perlapio perlxs perlxstut perlguts perlcall perlcompile
68 perlapi perlintern perlhist
71 for (@pods) { s/$/.pod/ }
75 open(MANI, "../MANIFEST") || die "$0: opening ../MANIFEST failed: $!";
77 if (m!^pod/([^.]+\.pod)\s+!i) {
82 @MANIPODS{@MANIPODS} = ();
84 open(PERLPOD, "perl.pod") || die "$0: opening perl.pod failed: $!\n";
86 if (/^For ease of access, /../^\(If you're intending /) {
87 if (/^\s+(perl\w+)\s+Perl /) {
88 push @PERLPODS, "$1.pod";
93 die "$0: could not find the pod listing of perl.pod\n"
95 @PERLPODS{@PERLPODS} = ();
97 # Cross-check against ourselves
98 # Cross-check against the MANIFEST
99 # Cross-check against the perl.pod
101 foreach my $i (sort keys %PODS) {
102 warn "$0: $i exists but is unknown by buildtoc\n"
103 unless exists $pods{$i};
104 warn "$0: $i exists but is unknown by ../MANIFEST\n"
105 unless exists $MANIPODS{$i};
106 warn "$0: $i exists but is unknown by perl.pod\n"
107 unless exists $PERLPODS{$i};
109 foreach my $i (sort keys %pods) {
110 warn "$0: $i is known by buildtoc but does not exist\n"
111 unless exists $PODS{$i};
113 foreach my $i (sort keys %MANIPODS) {
114 warn "$0: $i is known by ../MANIFEST but does not exist\n"
115 unless exists $PODS{$i};
117 foreach my $i (sort keys %PERLPODS) {
118 warn "$0: $i is known by perl.pod but does not exist\n"
119 unless exists $PODS{$i};
122 # We are ready to rock.
123 open(OUT, ">perltoc.pod") || die "$0: creating perltoc.pod failed: $!";
128 ($_= <<EOPOD2B) =~ s/^\t//gm && output($_);
132 perltoc - perl documentation table of contents
136 This page provides a brief table of contents for the rest of the Perl
137 documentation set. It is meant to be scanned quickly or grepped
138 through to locate the proper section you're looking for.
140 =head1 BASIC DOCUMENTATION
147 find \&getpods => qw(../lib ../ext);
151 # Skip .pm files that have corresponding .pod files, and Functions.pm.
152 return if /(.*)\.pm$/ && -f "$1.pod";
153 my $file = $File::Find::name;
154 return if $file eq '../lib/Pod/Functions.pm'; # Used only by pod itself
156 die "tut $name" if $file =~ /TUT/;
157 unless (open (F, "< $_\0")) {
158 warn "bogus <$file>: $!";
159 system "ls", "-l", $file;
163 while ($line = <F>) {
164 if ($line =~ /^=head1\s+NAME\b/) {
165 push @modpods, $file;
166 #warn "GOOD $file\n";
170 warn "$0: $file: cannot find =head1 NAME\n";
175 die "no pods" unless @modpods;
178 #($name) = /(\w+)\.p(m|od)$/;
179 $name = path2modname($_);
180 if ($name =~ /^[a-z]/) {
183 if ($done{$name}++) {
184 # warn "already did $_\n";
188 push @modname, $name;
192 ($_= <<EOPOD2B) =~ s/^\t//gm && output($_);
196 =head1 PRAGMA DOCUMENTATION
200 podset(sort @pragmata);
202 ($_= <<EOPOD2B) =~ s/^\t//gm && output($_);
206 =head1 MODULE DOCUMENTATION
210 podset( @modules[ sort { $modname[$a] cmp $modname[$b] } 0 .. $#modules ] );
212 ($_= <<EOPOD2B) =~ s/^\t//gm;
215 =head1 AUXILIARY DOCUMENTATION
217 Here should be listed all the extra programs' documentation, but they
218 don't all have manual pages yet:
244 Larry Wall <F<larry\@wall.org>>, with the help of oodles
250 output "\n"; # flush $LINE
257 if (s/^=head1 (NAME)\s*/=head2 /) {
258 $pod = path2modname($ARGV);
260 output "\n \n\n=head2 ";
262 if ( /^\s*$pod\b/ ) {
263 s/$pod\.pm/$pod/; # '.pm' in NAME !?
271 if (s/^=head1 (.*)/=item $1/) {
273 output "=over\n\n" unless $inhead1;
275 output $_; nl(); next;
277 if (s/^=head2 (.*)/=item $1/) {
279 output "=over\n\n" unless $inhead2;
281 output $_; nl(); next;
283 if (s/^=item ([^=].*)/$1/) {
284 next if $pod eq 'perldiag';
285 s/^\s*\*\s*$// && next;
290 next if $pod eq 'perlmodlib' && /^ftp:/;
291 ##print "=over\n\n" unless $initem;
292 output ", " if $initem;
298 if (s/^=cut\s*\n//) {
317 output "\n\n=back\n\n";
325 output "\n\n=back\n\n";
333 ##print "\n\n=back\n\n";
342 my $NEWLINE; # how many newlines have we seen recently
343 my $LINE; # what remains to be printed
346 for (split /(\n)/, shift) {
349 print OUT wrap('', '', $LINE);
357 elsif (/\S/ && length) {