summaryrefslogtreecommitdiff
path: root/makedef.pl
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2011-08-21 17:37:41 +0200
committerNicholas Clark <nick@ccl4.org>2011-08-25 11:34:37 +0200
commitd500e60df9f652d9d80c9a5f4324d49e51e7f990 (patch)
tree07bc201e042e7f0373bfad81ae7df2dfba874921 /makedef.pl
parentcdde42af3c16a29c0c7fcb1b2b71c5a4b0093ac4 (diff)
downloadperl-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.pl28
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";