defined $PLATFORM || die "PLATFORM undefined, must be one of: @PLATFORM\n";
exists $PLATFORM{$PLATFORM} || die "PLATFORM must be one of: @PLATFORM\n";
+if ($PLATFORM eq 'win32' or $PLATFORM eq "aix") {
+ # Add the compile-time options that miniperl was built with to %define.
+ # On Win32 these are not the same options as perl itself will be built
+ # with since miniperl is built with a canned config (one of the win32/
+ # config_H.*) and none of the BUILDOPT's that are set in the makefiles,
+ # but they do include some #define's that are hard-coded in various
+ # source files and header files and don't include any BUILDOPT's that
+ # the user might have chosen to disable because the canned configs are
+ # minimal configs that don't include any of those options.
+ my $config = `$^X -Ilib -V`;
+ my($options) = $config =~ /^ Compile-time options: (.*?)\n^ \S/ms;
+ $options =~ s/\s+/ /g;
+ print STDERR "Options: ($options)\n";
+ foreach (split /\s+/, $options) {
+ $define{$_} = 1;
+ }
+}
+
my %exportperlmalloc =
(
Perl_malloc => "malloc",
elsif ($PLATFORM =~ /^win(?:32|ce)$/ || $PLATFORM eq 'netware') {
$CCTYPE = "MSVC" unless defined $CCTYPE;
foreach ($thrdvar_h, $intrpvar_h, $perlvars_h, $global_sym,
- $pp_sym, $globvar_sym, $perlio_sym) {
+ $pp_sym, $globvar_sym, $perlio_sym) {
s!^!..\\!;
}
}
elsif ($PLATFORM eq 'MacOS') {
foreach ($thrdvar_h, $intrpvar_h, $perlvars_h, $global_sym,
- $pp_sym, $globvar_sym, $perlio_sym) {
+ $pp_sym, $globvar_sym, $perlio_sym) {
s!^!::!;
}
}
$_ = $1;
$define{$1} = 1 while /-D(\w+)/g;
}
+ if (/^(d_(?:mmap|sigaction))='(.+)'$/) {
+ $define{$1} = $2;
+ }
if ($PLATFORM eq 'os2') {
$CONFIG_ARGS = $1 if /^config_args='(.+)'$/;
$ARCHNAME = $1 if /^archname='(.+)'$/;
my $sym_ord = 0;
+print STDERR "Defines: (" . join(' ', sort keys %define) . ")\n";
+
if ($PLATFORM =~ /^win(?:32|ce)$/) {
- warn join(' ',keys %define)."\n";
($dll = ($define{PERL_DLL} || "perl59")) =~ s/\.dll$//i;
print "LIBRARY $dll\n";
print "DESCRIPTION 'Perl interpreter'\n";
PL_linestart
PL_modcount
PL_pending_ident
- PL_sortcxix
PL_sublex_info
PL_timesbuf
main
Perl_ErrorNo
+ Perl_GetVars
Perl_do_exec3
Perl_do_ipcctl
Perl_do_ipcget
PL_linestart
PL_modcount
PL_pending_ident
- PL_sortcxix
PL_sublex_info
PL_timesbuf
PL_collation_ix
win32_spawnvp
main
Perl_ErrorNo
+ Perl_GetVars
Perl_do_exec3
Perl_do_ipcctl
Perl_do_ipcget
skip_symbols([qw(
Perl_dump_fds
Perl_ErrorNo
+ Perl_GetVars
Perl_my_bcopy
Perl_my_bzero
Perl_my_chsize
}
elsif ($PLATFORM eq 'MacOS') {
skip_symbols [qw(
+ Perl_GetVars
PL_cryptseen
PL_cshlen
PL_cshname
PL_linestart
PL_modcount
PL_pending_ident
- PL_sortcxix
PL_sublex_info
PL_timesbuf
main
Perl_ErrorNo
+ Perl_GetVars
Perl_do_exec3
Perl_do_ipcctl
Perl_do_ipcget
)];
}
+if ($define{'PERL_IMPLICIT_CONTEXT'}) {
+ skip_symbols [qw(
+ PL_sig_sv
+ )];
+}
+
if ($define{'PERL_IMPLICIT_SYS'}) {
skip_symbols [qw(
Perl_getenv_len
)];
}
-unless ($define{'PERL_COPY_ON_WRITE'}) {
+unless ($define{'PERL_OLD_COPY_ON_WRITE'}) {
skip_symbols [qw(
Perl_sv_setsv_cow
Perl_sv_release_IVX
)];
}
-if ($define{'PERL_MALLOC_WRAP'}) {
- emit_symbols [qw(
- PL_memory_wrap
- )];
-}
-
-unless ($define{'HAS_MMAP'}) {
+unless ($define{'PERL_MALLOC_WRAP'}) {
skip_symbols [qw(
- PL_mmap_page_size
- )];
-}
-
-unless ($define{'HAS_TIMES'} || $define{'PERL_NEED_TIMESBASE'}) {
- skip_symbols [qw(
- PL_timesbase
+ PL_memory_wrap
)];
}
-unless ($define{'PERL_NEED_APPCTX'}) {
+if ($define{'PERL_USE_SAFE_PUTENV'}) {
skip_symbols [qw(
- PL_appctx
- )];
+ PL_use_safe_putenv
+ )];
}
unless ($define{'USE_ITHREADS'}) {
unless ($define{'USE_ITHREADS'}) {
skip_symbols [qw(
PL_ptr_table
+ PL_pte_root
+ PL_pte_arenaroot
PL_op_mutex
PL_regex_pad
PL_regex_padav
Perl_re_dup
Perl_sv_dup
Perl_rvpv_dup
+ Perl_hek_dup
Perl_sys_intern_dup
Perl_ptr_table_clear
Perl_ptr_table_fetch
Perl_sharedsv_thrcnt_dec
Perl_sharedsv_thrcnt_inc
Perl_sharedsv_unlock
+ Perl_stashpv_hvname_match
)];
}
)];
}
-if ($define{'PERL_IMPLICIT_CONTEXT'}) {
- skip_symbols [qw(
- PL_sig_sv
- )];
-}
-
unless ($define{'PERL_IMPLICIT_SYS'}) {
skip_symbols [qw(
perl_alloc_using
skip_symbols [qw(PL_curthr)];
}
-unless ($define{'FAKE_DEFAULT_SIGNAL_HANDLERS'}) {
+unless ($define{'PL_OP_SLAB_ALLOC'}) {
skip_symbols [qw(
- PL_sig_defaulting
+ PL_OpPtr
+ PL_OpSlab
+ PL_OpSpace
+ Perl_Slab_Alloc
+ Perl_Slab_Free
+ )];
+}
+
+unless ($define{'THREADS_HAVE_PIDS'}) {
+ skip_symbols [qw(PL_ppid)];
+}
+
+unless ($define{'PERL_NEED_APPCTX'}) {
+ skip_symbols [qw(
+ PL_appctx
)];
}
-unless ($define{'FAKE_PERSISTENT_SIGNAL_HANDLERS'}) {
+unless ($define{'PERL_NEED_TIMESBASE'}) {
skip_symbols [qw(
- PL_sig_ignoring
+ PL_timesbase
)];
}
-unless ($define{'FAKE_DEFAULT_SIGNAL_HANDLERS'} ||
- $define{'FAKE_PERSISTENT_SIGNAL_HANDLERS'})
-{
+unless ($define{'DEBUG_LEAKING_SCALARS_FORK_DUMP'}) {
skip_symbols [qw(
- PL_sig_handlers_initted
+ PL_dumper_fd
+ )];
+}
+unless ($define{'PERL_DONT_CREATE_GVSV'}) {
+ skip_symbols [qw(
+ Perl_gv_SVadd
+ )];
+}
+if ($define{'SPRINTF_RETURNS_STRLEN'}) {
+ skip_symbols [qw(
+ Perl_my_sprintf
+ )];
+}
+unless ($define{'PERL_USES_PL_PIDSTATUS'}) {
+ skip_symbols [qw(
+ Perl_pidgone
+ PL_pidstatus
)];
}
-unless ($define{'PL_OP_SLAB_ALLOC'}) {
+unless ($define{'d_mmap'}) {
skip_symbols [qw(
- PL_OpPtr
- PL_OpSlab
- PL_OpSpace
- Perl_Slab_Alloc
- Perl_Slab_Free
- )];
+ PL_mmap_page_size
+ )];
}
-unless ($define{'THREADS_HAVE_PIDS'}) {
- skip_symbols [qw(PL_ppid)];
+if ($define{'d_sigaction'}) {
+ skip_symbols [qw(
+ PL_sig_trapped
+ )];
}
+if ($^O ne 'vms') {
+ # VMS does its own thing for these symbols.
+ skip_symbols [qw(PL_sig_handlers_initted
+ PL_sig_ignoring
+ PL_sig_defaulting)];
+}
+
sub readvar {
my $file = shift;
my $proc = shift || sub { "PL_$_[2]" };
my @syms;
while (<VARS>) {
# All symbols have a Perl_ prefix because that's what embed.h
- # sticks in front of them.
+ # sticks in front of them. The A?I?S?C? is strictly speaking
+ # wrong.
push(@syms, &$proc($1,$2,$3)) if (/\bPERLVAR(A?I?S?C?)\(([IGT])(\w+)/);
}
close(VARS);
return \@syms;
}
-unless ($define{'PERL_GLOBAL_STRUCT'}) {
- skip_symbols [qw(
- Perl_GetVars
- Perl_free_global_struct
- Perl_init_global_struct
- )];
-}
-
if ($define{'PERL_GLOBAL_STRUCT'}) {
my $global = readvar($perlvars_h);
skip_symbols $global;
emit_symbol('Perl_GetVars');
emit_symbols [qw(PL_Vars PL_VarsPtr)] unless $CCTYPE eq 'GCC';
+} else {
+ skip_symbols [qw(Perl_init_global_struct Perl_free_global_struct)];
}
# functions from *.sym files
if ($define{'USE_SFIO'}) {
# Old legacy non-stdio "PerlIO"
skip_symbols \@layer_syms;
+ skip_symbols [qw(perlsio_binmode)];
# SFIO defines most of the PerlIO routines as macros
# So undo most of what $perlio_sym has just done - d'oh !
# Perhaps it would be better to list the ones which do exist
else {
# PerlIO with layers - export implementation
emit_symbols \@layer_syms;
+ emit_symbols [qw(perlsio_binmode)];
}
} else {
# -Uuseperlio
# Skip the PerlIO layer symbols - although
- # nothing should have exported them any way
+ # nothing should have exported them anyway.
skip_symbols \@layer_syms;
+ skip_symbols [qw(perlsio_binmode)];
skip_symbols [qw(PL_def_layerlist PL_known_layers PL_perlio)];
# Also do NOT add abstraction symbols from $perlio_sym
{
try_symbol($symbol);
}
+ if ($CCTYPE eq "BORLAND") {
+ try_symbol('_matherr');
+ }
}
elsif ($PLATFORM eq 'os2') {
open MAP, 'miniperl.map' or die 'Cannot read miniperl.map';
PerlIO_sv_dup
PerlIO_tmpfile
PerlIO_vsprintf
-perlsio_binmode