diff options
author | Nicholas Clark <nick@ccl4.org> | 2011-08-21 17:37:41 +0200 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2011-08-25 11:34:37 +0200 |
commit | d500e60df9f652d9d80c9a5f4324d49e51e7f990 (patch) | |
tree | 07bc201e042e7f0373bfad81ae7df2dfba874921 /makedef.pl | |
parent | cdde42af3c16a29c0c7fcb1b2b71c5a4b0093ac4 (diff) | |
download | perl-d500e60df9f652d9d80c9a5f4324d49e51e7f990.tar.gz |
Eliminate global.sym, as makedef.pl can generate it internally.
global.sym was a file listing the exported symbols, generated by regen/embed.pl
from embed.fnc and regen/opcodes, which was only used by makedef.pl
Move the code that generates global.sym from regen/embed.pl to makedef.pl,
and thereby eliminate the need to ship a 907 line generated file.
Diffstat (limited to 'makedef.pl')
-rw-r--r-- | makedef.pl | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/makedef.pl b/makedef.pl index 35b3046d8c..b648a65581 100644 --- a/makedef.pl +++ b/makedef.pl @@ -10,13 +10,14 @@ # # %Config::Config (ie config.sh) # config.h -# global.sym +# embed.fnc # globvar.sym # intrpvar.h # miniperl.map (on OS/2) # perl5.def (on OS/2; this is the old version of the file being made) # perlio.sym # perlvars.h +# regen/opcodes # # plus long lists of function names hard-coded directly in this script. # @@ -54,6 +55,8 @@ while (@ARGV) { } } +require "$ARGS{TARG_DIR}regen/embed_lib.pl"; + { my @PLATFORM = qw(aix win32 wince os2 netware vms test); my %PLATFORM; @@ -532,7 +535,7 @@ if ($define{'PERL_GLOBAL_STRUCT'}) { # functions from *.sym files -my @syms = qw(global.sym globvar.sym); +my @syms = qw(globvar.sym); # Symbols that are the public face of the PerlIO layers implementation # These are in _addition to_ the public face of the abstraction @@ -729,6 +732,27 @@ if ($define{'USE_PERLIO'}) { # At this point all skip lists should be completed, as we are about to test # many symbols against them. +{ + my %seen; + my ($embed) = setup_embed($ARGS{TARG_DIR}); + + foreach (@$embed) { + my ($flags, $retval, $func, @args) = @$_; + next unless $func; + if ($flags =~ /[AX]/ && $flags !~ /[xm]/ || $flags =~ /b/) { + # public API, so export + + # If a function is defined twice, for example before and after + # an #else, only export its name once. Important to do this test + # within the block, as the *first* definition may have flags which + # mean "don't export" + next if $seen{$func}++; + $func = "Perl_$func" if $flags =~ /[pbX]/; + ++$export{$func} unless exists $skip{$func}; + } + } +} + foreach (@syms) { my $syms = $ARGS{TARG_DIR} . $_; open my $global, '<', $syms or die "failed to open $syms: $!\n"; |