This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make sv_set[ps]v(cv...) set prototype
[perl5.git] / makedef.pl
index 35b3046..1a44d1b 100644 (file)
 #
 #    %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";
@@ -941,9 +965,6 @@ if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) {
                            win32_getchar
                            win32_putchar
                 ));
-    if ($ARGS{CCTYPE} eq "BORLAND") {
-       try_symbols('_matherr');
-    }
 }
 elsif ($ARGS{PLATFORM} eq 'vms') {
     try_symbols(qw(
@@ -1281,7 +1302,7 @@ if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) {
     print "LIBRARY $dll\n";
     # The DESCRIPTION module definition file statement is not supported
     # by VC7 onwards.
-    if ($ARGS{CCTYPE} =~ /^(?:MSVC60|GCC|BORLAND)$/) {
+    if ($ARGS{CCTYPE} =~ /^(?:MSVC60|GCC)$/) {
        print "DESCRIPTION 'Perl interpreter'\n";
     }
     print "EXPORTS\n";
@@ -1325,7 +1346,6 @@ elsif ($ARGS{PLATFORM} eq 'netware') {
 
 foreach my $symbol (sort keys %export) {
     if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) {
-       $symbol = "_$symbol" if $ARGS{CCTYPE} eq 'BORLAND';
        print "\t$symbol\n";
     }
     elsif ($ARGS{PLATFORM} eq 'os2') {