# and by AIX for creating libperl.a when -Dusershrplib is in effect,
# and by MacOS Classic.
#
-# reads global.sym, pp.sym, perlvars.h, intrpvar.h, config.h
-# On OS/2 reads miniperl.map and the previous version of perl5.def as well
+# Reads from information stored in
+#
+# config.h
+# config.sh
+# global.sym
+# globvar.sym
+# intrpvar.h
+# macperl.sym (on MacOS)
+# miniperl.map (on OS/2)
+# perl5.def (on OS/2; this is the old version of the file being made)
+# perlio.sym
+# perlvars.h
+#
+# plus long lists of function names hard-coded directly in this script and
+# in the DATA section.
+#
+# Writes the result to STDOUT.
+#
+# Normally this script is invoked from a makefile (e.g. win32/Makefile),
+# which redirects STDOUT to a suitable file, such as:
+#
+# perl5.def OS/2
+# perldll.def Windows
+# perl.exp AIX
+# perl.imp NetWare
+
BEGIN { unshift @INC, "lib" }
+use Config;
use strict;
use vars qw($PLATFORM $CCTYPE $FILETYPE $CONFIG_ARGS $ARCHNAME $PATCHLEVEL);
# the user might have chosen to disable because the canned configs are
# minimal configs that don't include any of those options.
my $opts = ($PLATFORM eq 'wince' ? '-MCross' : ''); # for wince need Cross.pm to get Config.pm
- my $config = `$^X $opts -Ilib -V`;
+
+ $ENV{PERL5LIB} = join $Config{path_sep}, @INC;
+ my $cmd = "$^X $opts -V";
+ my $config = `$cmd`
+ or die "Couldn't run [$cmd]: $!";
my($options) = $config =~ /^ Compile-time options: (.*?)\n^ \S/ms;
$options =~ s/\s+/ /g;
print STDERR "Options: ($options)\n";
$define{$1} = 1 if /^\s*#\s*define\s+(MULTIPLICITY)\b/;
$define{$1} = 1 if /^\s*#\s*define\s+(PERL_\w+)\b/;
$define{$1} = 1 if /^\s*#\s*define\s+(USE_\w+)\b/;
+ $define{$1} = 1 if /^\s*#\s*define\s+(HAS_\w+)\b/;
}
close(CFG);
print STDERR "Defines: (" . join(' ', sort keys %define) . ")\n";
if ($PLATFORM =~ /^win(?:32|ce)$/) {
- (my $dll = ($define{PERL_DLL} || "perl59")) =~ s/\.dll$//i;
+ (my $dll = ($define{PERL_DLL} || "perl511")) =~ s/\.dll$//i;
print "LIBRARY $dll\n";
# The DESCRIPTION module definition file statement is not supported
# by VC7 onwards.
}
elsif ($PLATFORM eq 'netware') {
if ($FILETYPE eq 'def') {
- print "LIBRARY perl59\n";
+ print "LIBRARY perl511\n";
print "DESCRIPTION 'Perl interpreter for NetWare'\n";
print "EXPORTS\n";
}
PL_statusvalue_vms
PL_sys_intern
)]);
+ skip_symbols([qw(
+ Perl_signbit
+ )])
+ if $define{'HAS_SIGNBIT'};
+ emit_symbols([qw(
+ boot_DynaLoader
+ )]);
}
elsif ($PLATFORM eq 'os2') {
emit_symbols([qw(
Perl_debstack
Perl_debstackptrs
Perl_pad_sv
- Perl_sv_peek
Perl_hv_assert
PL_block_type
PL_watchaddr
Perl_dump_mstats
Perl_get_mstats
Perl_malloced_size
+ Perl_malloc_good_size
MallocCfg_ptr
MallocCfgP_ptr
)];
PL_sharedsv_space_mutex
PL_dollarzero_mutex
PL_hints_mutex
+ PL_my_ctx_mutex
PL_perlio_mutex
PL_regdupe
Perl_parser_dup
Perl_he_dup
Perl_mg_dup
Perl_mro_meta_dup
- Perl_re_dup
+ Perl_re_dup_guts
Perl_sv_dup
Perl_rvpv_dup
Perl_hek_dup
unless ($define{'PERL_IMPLICIT_CONTEXT'}) {
skip_symbols [qw(
- PL_my_ctx_mutex
PL_my_cxt_index
PL_my_cxt_list
PL_my_cxt_size
)];
}
+unless ($define{'DEBUG_LEAKING_SCALARS'}) {
+ skip_symbols [qw(
+ PL_sv_serial
+ )];
+}
+
unless ($define{'DEBUG_LEAKING_SCALARS_FORK_DUMP'}) {
skip_symbols [qw(
PL_dumper_fd
unless ($define{'MULTIPLICITY'}) {
skip_symbols [qw(
- PL_interpreter_size
- PL_interpreter_size_5_10_0
+ PL_interp_size
+ PL_interp_size_5_10_0
)];
}
PerlIO_arg_fetch
PerlIO_debug
PerlIO_define_layer
+ PerlIO_find_layer
PerlIO_isutf8
PerlIO_layer_fetch
+ PerlIO_list_alloc
PerlIO_list_free
PerlIO_modestr
PerlIO_parse_layers
my $glob = readvar($f, sub { "Perl_" . $_[1] . $_[2] . "_ptr" });
emit_symbols $glob;
}
+ unless ($define{'USE_ITHREADS'}) {
+ # XXX needed for XS extensions that define PERL_CORE
+ emit_symbol("PL_curinterp");
+ }
# XXX AIX seems to want the perlvars.h symbols, for some reason
if ($PLATFORM eq 'aix' or $PLATFORM eq 'os2') { # OS/2 needs PL_thr_key
my $glob = readvar($perlvars_h);
win32_open
win32_close
win32_eof
+ win32_isatty
win32_read
win32_write
win32_spawnvp