X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/9fb265f7d587e571375a3a5fdb05c24fd9d10d91..f2338a2e8347fc967ab6b9af21d948258b88e341:/makedef.pl diff --git a/makedef.pl b/makedef.pl index b16a0aa..f87cee5 100644 --- a/makedef.pl +++ b/makedef.pl @@ -6,10 +6,35 @@ # 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); @@ -51,7 +76,11 @@ if ($PLATFORM eq 'win32' or $PLATFORM eq 'wince' or $PLATFORM eq "aix") { # 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"; @@ -129,6 +158,7 @@ while () { $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); @@ -159,11 +189,11 @@ my $sym_ord = 0; 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} || "perl513")) =~ s/\.dll$//i; print "LIBRARY $dll\n"; # The DESCRIPTION module definition file statement is not supported # by VC7 onwards. - if ($CCTYPE !~ /^MSVC7/ && $CCTYPE !~ /^MSVC8/) { + if ($CCTYPE !~ /^MSVC7/ && $CCTYPE !~ /^MSVC8/ && $CCTYPE !~ /^MSVC9/) { print "DESCRIPTION 'Perl interpreter'\n"; } print "EXPORTS\n"; @@ -215,7 +245,7 @@ elsif ($PLATFORM eq 'aix') { } elsif ($PLATFORM eq 'netware') { if ($FILETYPE eq 'def') { - print "LIBRARY perl59\n"; + print "LIBRARY perl513\n"; print "DESCRIPTION 'Perl interpreter for NetWare'\n"; print "EXPORTS\n"; } @@ -404,6 +434,13 @@ elsif ($PLATFORM eq 'aix') { 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( @@ -593,7 +630,6 @@ unless ($define{'DEBUGGING'}) { Perl_debstack Perl_debstackptrs Perl_pad_sv - Perl_sv_peek Perl_hv_assert PL_block_type PL_watchaddr @@ -667,6 +703,7 @@ else { Perl_dump_mstats Perl_get_mstats Perl_malloced_size + Perl_malloc_good_size MallocCfg_ptr MallocCfgP_ptr )]; @@ -721,6 +758,7 @@ unless ($define{'USE_ITHREADS'}) { PL_sharedsv_space_mutex PL_dollarzero_mutex PL_hints_mutex + PL_my_ctx_mutex PL_perlio_mutex PL_regdupe Perl_parser_dup @@ -734,7 +772,7 @@ unless ($define{'USE_ITHREADS'}) { 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 @@ -756,7 +794,6 @@ unless ($define{'USE_ITHREADS'}) { unless ($define{'PERL_IMPLICIT_CONTEXT'}) { skip_symbols [qw( - PL_my_ctx_mutex PL_my_cxt_index PL_my_cxt_list PL_my_cxt_size @@ -823,6 +860,12 @@ unless ($define{'PERL_NEED_TIMESBASE'}) { )]; } +unless ($define{'DEBUG_LEAKING_SCALARS'}) { + skip_symbols [qw( + PL_sv_serial + )]; +} + unless ($define{'DEBUG_LEAKING_SCALARS_FORK_DUMP'}) { skip_symbols [qw( PL_dumper_fd @@ -891,6 +934,19 @@ if ($define{'PERL_MAD'}) { )]; } +unless ($define{'MULTIPLICITY'}) { + skip_symbols [qw( + PL_interp_size + PL_interp_size_5_10_0 + )]; +} + +unless ($define{'PERL_GLOBAL_STRUCT'}) { + skip_symbols [qw( + PL_global_struct_size + )]; +} + unless ($define{'PERL_GLOBAL_STRUCT_PRIVATE'}) { skip_symbols [qw( PL_my_cxt_keys @@ -986,8 +1042,10 @@ my @layer_syms = qw( 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 @@ -1165,6 +1223,10 @@ if ($define{'MULTIPLICITY'}) { 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); @@ -1226,6 +1288,7 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { win32_open win32_close win32_eof + win32_isatty win32_read win32_write win32_spawnvp