# Has an optional arg, which is the directory to chdir to before reading
# MANIFEST and *.[ch].
#
-# This script is normally invoked as part of 'make all', but is also
-# called from from regen.pl.
+# This script is invoked as part of 'make all'
#
# '=head1' are the only headings looked for. If the next line after the
# heading begins with a word character, it is considered to be the first line
use strict;
+if (@ARGV) {
+ my $workdir = shift;
+ chdir $workdir
+ or die "Couldn't chdir to '$workdir': $!";
+}
+require 'regen/regen_lib.pl';
+require 'regen/embed_lib.pl';
+
#
# See database of global and static function prototypes in embed.fnc
# This is used to generate prototype headers under various configurations,
if ($docref and %$docref) {
$embed_where = $docref->{flags} =~ /A/ ? 'api' : 'guts';
$embed_may_change = $docref->{flags} =~ /M/;
+ $flags .= 'D' if $docref->{flags} =~ /D/;
} else {
$missing{$name} = $file;
}
my($flags, $docs, $ret, $file, @args) = @$docref;
$name =~ s/\s*$//;
- $docs .= "NOTE: this function is experimental and may change or be
-removed without notice.\n\n" if $flags =~ /x/;
+ if ($flags =~ /D/) {
+ $docs = "\n\nDEPRECATED! It is planned to remove this function from a
+future release of Perl. Do not use it for new code; remove it from
+existing code.\n\n$docs";
+ }
+ else {
+ $docs = "\n\nNOTE: this function is experimental and may change or be
+removed without notice.\n\n$docs" if $flags =~ /x/;
+ }
$docs .= "NOTE: the perl_ form of this function is deprecated.\n\n"
if $flags =~ /p/;
$docs .= "NOTE: this function must be explicitly called as Perl_$name with an aTHX_ parameter.\n\n"
sub output {
my ($podname, $header, $dochash, $missing, $footer) = @_;
- my $filename = "pod/$podname.pod";
- open my $fh, '>', $filename or die "Can't open $filename: $!";
-
- print $fh <<"_EOH_", $header;
--*- buffer-read-only: t -*-
+ my $fh = open_new("pod/$podname.pod", undef,
+ {by => "$0 extracting documentation",
+ from => 'the C source files'}, 1);
-!!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-This file is built by $0 extracting documentation from the C source
-files.
-
-_EOH_
+ print $fh $header;
my $key;
# case insensitive sort, with fallback for determinacy
}
print $fh "=back\n\n";
}
+ print $fh $footer, "=cut\n";
-print $fh $footer, <<'_EOF_';
-=cut
-
- ex: set ro:
-_EOF_
-
- close $fh or die "Can't close $filename: $!";
-}
-
-if (@ARGV) {
- my $workdir = shift;
- chdir $workdir
- or die "Couldn't chdir to '$workdir': $!";
+ read_only_bottom_close_and_rename($fh);
}
-open IN, "embed.fnc" or die $!;
-
-while (<IN>) {
- chomp;
- next if /^:/;
- while (s|\\\s*$||) {
- $_ .= <IN>;
- chomp;
- }
- s/\s+$//;
- next if /^\s*(#|$)/;
-
- my ($flags, $retval, $func, @args) = split /\s*\|\s*/, $_;
-
- next unless $func;
-
- s/\b(NN|NULLOK)\b\s+//g for @args;
- $func =~ s/\t//g; # clean up fields from embed.pl
- $retval =~ s/\t//;
+foreach (@{(setup_embed())[0]}) {
+ next if @$_ < 2;
+ my ($flags, $retval, $func, @args) = @$_;
+ s/\b(?:NN|NULLOK)\b\s+//g for @args;
$funcflags{$func} = {
flags => $flags,
};
}
-my $file;
# glob() picks up docs from extra .c or .h files that may be in unclean
# development trees.
-my $MANIFEST = do {
- local ($/, *FH);
- open FH, "MANIFEST" or die "Can't open MANIFEST: $!";
- <FH>;
-};
+open my $fh, '<', 'MANIFEST'
+ or die "Can't open MANIFEST: $!";
+while (my $line = <$fh>) {
+ next unless my ($file) = $line =~ /^(\S+\.[ch])\t/;
-for $file (($MANIFEST =~ /^(\S+\.c)\t/gm), ($MANIFEST =~ /^(\S+\.h)\t/gm)) {
open F, "< $file" or die "Cannot open $file for docs: $!\n";
$curheader = "Functions in file $file\n";
autodoc(\*F,$file);
close F or die "Error closing $file: $!\n";
}
+close $fh or die "Error whilst reading MANIFEST: $!";
for (sort keys %funcflags) {
next unless $funcflags{$_}{flags} =~ /d/;
# walk table providing an array of components in each line to
# subroutine, printing the result
-# List of funcs in the public API that aren't also marked as experimental.
-my @missing_api = grep $funcflags{$_}{flags} =~ /A/ && $funcflags{$_}{flags} !~ /M/ && !$docs{api}{$_}, keys %funcflags;
+# List of funcs in the public API that aren't also marked as experimental nor
+# deprecated.
+my @missing_api = grep $funcflags{$_}{flags} =~ /A/ && $funcflags{$_}{flags} !~ /[MD]/ && !$docs{api}{$_}, keys %funcflags;
output('perlapi', <<'_EOB_', $docs{api}, \@missing_api, <<'_EOE_');
=head1 NAME
the UTF- encodings, and a string encoded in UTF-EBCDIC may occupy more bytes
than in UTF-8.
-Also, on some EBCDIC machines, functions that are documented as operating on
-US-ASCII (or Basic Latin in Unicode terminology) may in fact operate on all
-256 characters in the EBCDIC range, not just the subset corresponding to
-US-ASCII.
-
The listing below is alphabetical, case insensitive.
_EOB_