X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=autodoc.pl;h=f97af93acf78ca5ebbaea6a8c95ce488026c5b52;hb=b86b480f7301a8816081189c89b366a79ab9909f;hp=cb77a14ae940bd6549bc0f08d89fc9aec04037b8;hpb=7eb550cf010090aecb73da60fde61194798b89d1;p=p5sagit%2Fp5-mst-13.2.git diff --git a/autodoc.pl b/autodoc.pl index cb77a14..f97af93 100644 --- a/autodoc.pl +++ b/autodoc.pl @@ -8,6 +8,7 @@ BEGIN { require 'regen_lib.pl'; } +use strict; # # See database of global and static function prototypes in embed.fnc @@ -32,7 +33,7 @@ sub walk_table (&@) { } else { safer_unlink $filename; - open F, ">$filename" or die "Can't open $filename: $!"; + $F = safer_open($filename); binmode F; $F = \*F; } @@ -144,6 +145,27 @@ removed without notice.\n\n" if $flags =~ /x/; print $fh "=for hackers\nFound in file $file\n\n"; } +sub readonly_header (*) { + my $fh = shift; + print $fh <<"_EOH_"; +-*- buffer-read-only: t -*- + +!!!!!!! DO NOT EDIT THIS FILE !!!!!!! +This file is built by $0 extracting documentation from the C source +files. + +_EOH_ +} + +sub readonly_footer (*) { + my $fh = shift; + print $fh <<'_EOF_'; +=cut + + ex: set ro: +_EOF_ +} + my $file; # glob() picks up docs from extra .c or .h files that may be in unclean # development trees. @@ -161,9 +183,7 @@ for $file (($MANIFEST =~ /^(\S+\.c)\t/gm), ($MANIFEST =~ /^(\S+\.h)\t/gm)) { } safer_unlink "pod/perlapi.pod"; -open (DOC, ">pod/perlapi.pod") or - die "Can't create pod/perlapi.pod: $!\n"; -binmode DOC; +my $doc = safer_open("pod/perlapi.pod"); walk_table { # load documented functions into appropriate hash if (@_ > 1) { @@ -189,7 +209,7 @@ walk_table { # load documented functions into appropriate hash } } return ""; -} \*DOC; +} $doc; for (sort keys %docfuncs) { # Have you used a full for apidoc or just a func name? @@ -197,7 +217,9 @@ for (sort keys %docfuncs) { warn "Unable to place $_!\n"; } -print DOC <<'_EOB_'; +readonly_header($doc); + +print $doc <<'_EOB_'; =head1 NAME perlapi - autogenerated documentation for the perl public API @@ -224,15 +246,15 @@ my $key; # case insensitive sort, with fallback for determinacy for $key (sort { uc($a) cmp uc($b) || $a cmp $b } keys %apidocs) { my $section = $apidocs{$key}; - print DOC "\n=head1 $key\n\n=over 8\n\n"; + print $doc "\n=head1 $key\n\n=over 8\n\n"; # Again, fallback for determinacy for my $key (sort { uc($a) cmp uc($b) || $a cmp $b } keys %$section) { - docout(\*DOC, $key, $section->{$key}); + docout($doc, $key, $section->{$key}); } - print DOC "\n=back\n"; + print $doc "\n=back\n"; } -print DOC <<'_EOE_'; +print $doc <<'_EOE_'; =head1 AUTHORS @@ -254,14 +276,14 @@ perlguts(1), perlxs(1), perlxstut(1), perlintern(1) _EOE_ +readonly_footer($doc); -close(DOC) or die "Error closing pod/perlapi.pod: $!"; +safer_close($doc); safer_unlink "pod/perlintern.pod"; -open(GUTS, ">pod/perlintern.pod") or - die "Unable to create pod/perlintern.pod: $!\n"; -binmode GUTS; -print GUTS <<'END'; +my $guts = safer_open("pod/perlintern.pod"); +readonly_header($guts); +print $guts <<'END'; =head1 NAME perlintern - autogenerated documentation of purely B @@ -279,14 +301,14 @@ END for $key (sort { uc($a) cmp uc($b); } keys %gutsdocs) { my $section = $gutsdocs{$key}; - print GUTS "\n=head1 $key\n\n=over 8\n\n"; + print $guts "\n=head1 $key\n\n=over 8\n\n"; for my $key (sort { uc($a) cmp uc($b); } keys %$section) { - docout(\*GUTS, $key, $section->{$key}); + docout($guts, $key, $section->{$key}); } - print GUTS "\n=back\n"; + print $guts "\n=back\n"; } -print GUTS <<'END'; +print $guts <<'END'; =head1 AUTHORS @@ -299,5 +321,6 @@ document their functions. perlguts(1), perlapi(1) END +readonly_footer($guts); -close GUTS or die "Error closing pod/perlintern.pod: $!"; +safer_close($guts);