X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/313fe30010dfe393b83ab19118451c0eb11e1638..5ac1e9b286b068746476878a8a6206b06828a175:/makedef.pl diff --git a/makedef.pl b/makedef.pl index 107541c..dad466a 100644 --- a/makedef.pl +++ b/makedef.pl @@ -1,3 +1,4 @@ +#./perl -w # # Create the export list for perl. # @@ -5,11 +6,15 @@ # 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, thrdvar.h, config.h +# 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 -my $PLATFORM; -my $CCTYPE; +BEGIN { unshift @INC, "lib" } +use strict; + +use vars qw($PLATFORM $CCTYPE $FILETYPE $CONFIG_ARGS $ARCHNAME $PATCHLEVEL); + +my (%define, %ordinal); while (@ARGV) { my $flag = shift; @@ -36,6 +41,25 @@ my %PLATFORM; 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 'wince' 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 $opts = ($PLATFORM eq 'wince' ? '-MCross' : ''); # for wince need Cross.pm to get Config.pm + my $config = `$^X $opts -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", @@ -48,7 +72,6 @@ my $exportperlmalloc = $PLATFORM eq 'os2'; my $config_sh = "config.sh"; my $config_h = "config.h"; -my $thrdvar_h = "thrdvar.h"; my $intrpvar_h = "intrpvar.h"; my $perlvars_h = "perlvars.h"; my $global_sym = "global.sym"; @@ -62,14 +85,14 @@ if ($PLATFORM eq 'aix') { } 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) { + foreach ($intrpvar_h, $perlvars_h, $global_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) { + foreach ($intrpvar_h, $perlvars_h, $global_sym, + $pp_sym, $globvar_sym, $perlio_sym) { s!^!::!; } } @@ -81,6 +104,9 @@ unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'MacOS' || $_ = $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='(.+)'$/; @@ -130,11 +156,16 @@ if ($define{USE_ITHREADS} && $PLATFORM ne 'win32' && $^O ne 'darwin') { 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; + (my $dll = ($define{PERL_DLL} || "perl511")) =~ s/\.dll$//i; print "LIBRARY $dll\n"; - print "DESCRIPTION 'Perl interpreter'\n"; + # The DESCRIPTION module definition file statement is not supported + # by VC7 onwards. + if ($CCTYPE !~ /^MSVC7/ && $CCTYPE !~ /^MSVC8/ && $CCTYPE !~ /^MSVC9/) { + print "DESCRIPTION 'Perl interpreter'\n"; + } print "EXPORTS\n"; if ($define{PERL_IMPLICIT_SYS}) { output_symbol("perl_get_host_info"); @@ -156,11 +187,11 @@ elsif ($PLATFORM eq 'os2') { } $sym_ord < $_ and $sym_ord = $_ for values %ordinal; # Take the max } - ($v = $]) =~ s/(\d\.\d\d\d)(\d\d)$/$1_$2/; + (my $v = $]) =~ s/(\d\.\d\d\d)(\d\d)$/$1_$2/; $v .= '-thread' if $ARCHNAME =~ /-thread/; - ($dll = $define{PERL_DLL}) =~ s/\.dll$//i; + (my $dll = $define{PERL_DLL}) =~ s/\.dll$//i; $v .= "\@$PATCHLEVEL" if $PATCHLEVEL; - $d = "DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter, configured as $CONFIG_ARGS'"; + my $d = "DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter, configured as $CONFIG_ARGS'"; $d = substr($d, 0, 249) . "...'" if length $d > 253; print <<"---EOP---"; LIBRARY '$dll' INITINSTANCE TERMINSTANCE @@ -172,9 +203,9 @@ EXPORTS ---EOP--- } elsif ($PLATFORM eq 'aix') { - $OSVER = `uname -v`; + my $OSVER = `uname -v`; chop $OSVER; - $OSREL = `uname -r`; + my $OSREL = `uname -r`; chop $OSREL; if ($OSVER > 4 || ($OSVER == 4 && $OSREL >= 3)) { print "#! ..\n"; @@ -184,7 +215,7 @@ elsif ($PLATFORM eq 'aix') { } 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"; } @@ -228,11 +259,11 @@ if ($PLATFORM eq 'win32') { 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 @@ -265,6 +296,7 @@ if ($PLATFORM eq 'win32') { Perl_getenv_len Perl_my_pclose Perl_my_popen + Perl_my_sprintf )]; } else { @@ -285,7 +317,6 @@ if ($PLATFORM eq 'wince') { PL_linestart PL_modcount PL_pending_ident - PL_sortcxix PL_sublex_info PL_timesbuf PL_collation_ix @@ -309,6 +340,7 @@ if ($PLATFORM eq 'wince') { win32_spawnvp main Perl_ErrorNo + Perl_GetVars Perl_do_exec3 Perl_do_ipcctl Perl_do_ipcget @@ -341,12 +373,14 @@ if ($PLATFORM eq 'wince') { Perl_getenv_len Perl_my_pclose Perl_my_popen + Perl_my_sprintf )]; } elsif ($PLATFORM eq 'aix') { skip_symbols([qw( Perl_dump_fds Perl_ErrorNo + Perl_GetVars Perl_my_bcopy Perl_my_bzero Perl_my_chsize @@ -364,6 +398,7 @@ elsif ($PLATFORM eq 'aix') { Perl_sys_intern_clear Perl_sys_intern_dup Perl_sys_intern_init + Perl_my_sprintf PL_cryptseen PL_opsave PL_statusvalue_vms @@ -447,6 +482,7 @@ elsif ($PLATFORM eq 'os2') { } elsif ($PLATFORM eq 'MacOS') { skip_symbols [qw( + Perl_GetVars PL_cryptseen PL_cshlen PL_cshname @@ -483,11 +519,11 @@ elsif ($PLATFORM eq 'netware') { 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 @@ -556,7 +592,9 @@ unless ($define{'DEBUGGING'}) { Perl_debprofdump Perl_debstack Perl_debstackptrs + Perl_pad_sv Perl_sv_peek + Perl_hv_assert PL_block_type PL_watchaddr PL_watchok @@ -564,6 +602,12 @@ unless ($define{'DEBUGGING'}) { )]; } +if ($define{'PERL_IMPLICIT_CONTEXT'}) { + skip_symbols [qw( + PL_sig_sv + )]; +} + if ($define{'PERL_IMPLICIT_SYS'}) { skip_symbols [qw( Perl_getenv_len @@ -585,10 +629,9 @@ else { )]; } -unless ($define{'PERL_COPY_ON_WRITE'}) { +unless ($define{'PERL_OLD_COPY_ON_WRITE'}) { skip_symbols [qw( Perl_sv_setsv_cow - Perl_sv_release_IVX )]; } @@ -629,28 +672,10 @@ else { )]; } -if ($define{'PERL_MALLOC_WRAP'}) { - emit_symbols [qw( - PL_memory_wrap - )]; -} - -unless ($define{'HAS_MMAP'}) { - skip_symbols [qw( - PL_mmap_page_size - )]; -} - -unless ($define{'HAS_TIMES'} || $define{'PERL_NEED_TIMESBASE'}) { +if ($define{'PERL_USE_SAFE_PUTENV'}) { skip_symbols [qw( - PL_timesbase - )]; -} - -unless ($define{'PERL_NEED_APPCTX'}) { - skip_symbols [qw( - PL_appctx - )]; + PL_use_safe_putenv + )]; } unless ($define{'USE_ITHREADS'}) { @@ -689,13 +714,16 @@ unless ($define{'USE_ITHREADS'}) { unless ($define{'USE_ITHREADS'}) { skip_symbols [qw( - PL_ptr_table PL_op_mutex PL_regex_pad PL_regex_padav PL_sharedsv_space PL_sharedsv_space_mutex PL_dollarzero_mutex + PL_hints_mutex + PL_perlio_mutex + PL_regdupe + Perl_parser_dup Perl_dirp_dup Perl_cx_dup Perl_si_dup @@ -705,18 +733,12 @@ unless ($define{'USE_ITHREADS'}) { Perl_gp_dup Perl_he_dup Perl_mg_dup - Perl_re_dup + Perl_mro_meta_dup + Perl_re_dup_guts Perl_sv_dup Perl_rvpv_dup + Perl_hek_dup Perl_sys_intern_dup - Perl_ptr_table_clear - Perl_ptr_table_fetch - Perl_ptr_table_free - Perl_ptr_table_new - Perl_ptr_table_clear - Perl_ptr_table_free - Perl_ptr_table_split - Perl_ptr_table_store perl_clone perl_clone_using Perl_sharedsv_find @@ -726,11 +748,19 @@ unless ($define{'USE_ITHREADS'}) { Perl_sharedsv_thrcnt_dec Perl_sharedsv_thrcnt_inc Perl_sharedsv_unlock + Perl_stashpv_hvname_match + Perl_regdupe_internal + Perl_newPADOP )]; } unless ($define{'PERL_IMPLICIT_CONTEXT'}) { skip_symbols [qw( + PL_my_ctx_mutex + PL_my_cxt_index + PL_my_cxt_list + PL_my_cxt_size + PL_my_cxt_keys Perl_croak_nocontext Perl_die_nocontext Perl_deb_nocontext @@ -744,12 +774,8 @@ unless ($define{'PERL_IMPLICIT_CONTEXT'}) { Perl_sv_setpvf_nocontext Perl_sv_catpvf_mg_nocontext Perl_sv_setpvf_mg_nocontext - )]; -} - -if ($define{'PERL_IMPLICIT_CONTEXT'}) { - skip_symbols [qw( - PL_sig_sv + Perl_my_cxt_init + Perl_my_cxt_index )]; } @@ -764,40 +790,146 @@ unless ($define{'FAKE_THREADS'}) { 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{'PERL_DEBUG_READONLY_OPS'}) { + skip_symbols [qw( + PL_slab_count + PL_slabs + )]; +} + +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_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( - PL_sig_handlers_initted + Perl_pidgone + PL_pidstatus )]; } -unless ($define{'PL_OP_SLAB_ALLOC'}) { +unless ($define{'PERL_TRACK_MEMPOOL'}) { skip_symbols [qw( - PL_OpPtr - PL_OpSlab - PL_OpSpace - Perl_Slab_Alloc - Perl_Slab_Free + PL_memory_debug_header )]; } -unless ($define{'THREADS_HAVE_PIDS'}) { - skip_symbols [qw(PL_ppid)]; +if ($define{'PERL_MAD'}) { + skip_symbols [qw( + PL_nextval + PL_nexttype + )]; +} else { + skip_symbols [qw( + PL_madskills + PL_xmlfp + PL_lasttoke + PL_realtokenstart + PL_faketokens + PL_thismad + PL_thistoken + PL_thisopen + PL_thisstuff + PL_thisclose + PL_thiswhite + PL_nextwhite + PL_skipwhite + PL_endwhite + PL_curforce + Perl_pad_peg + Perl_xmldump_indent + Perl_xmldump_vindent + Perl_xmldump_all + Perl_xmldump_packsubs + Perl_xmldump_sub + Perl_xmldump_form + Perl_xmldump_eval + Perl_sv_catxmlsv + Perl_sv_catxmlpvn + Perl_sv_xmlpeek + Perl_do_pmop_xmldump + Perl_pmop_xmldump + Perl_do_op_xmldump + Perl_op_xmldump + )]; +} + +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 + Perl_my_cxt_index + )]; } +unless ($define{'d_mmap'}) { + skip_symbols [qw( + PL_mmap_page_size + )]; +} + +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]" }; @@ -805,26 +937,21 @@ sub readvar { my @syms; while () { # 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 @@ -884,6 +1011,7 @@ my @layer_syms = qw( PerlIO_sv_dup Perl_PerlIO_clearerr Perl_PerlIO_close + Perl_PerlIO_context_layers Perl_PerlIO_eof Perl_PerlIO_error Perl_PerlIO_fileno @@ -918,6 +1046,7 @@ if ($define{'USE_PERLIO'}) { 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 @@ -995,13 +1124,32 @@ if ($define{'USE_PERLIO'}) { else { # PerlIO with layers - export implementation emit_symbols \@layer_syms; + emit_symbols [qw(perlsio_binmode)]; + } + if ($define{'USE_ITHREADS'}) { + emit_symbols [qw( + PL_perlio_mutex + )]; + } + else { + skip_symbols [qw( + PL_perlio_mutex + )]; } } 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(PL_def_layerlist PL_known_layers PL_perlio)]; + skip_symbols [qw( + perlsio_binmode + PL_def_layerlist + PL_known_layers + PL_perlio + PL_perlio_debug_fd + PL_perlio_fd_refcnt + PL_perlio_fd_refcnt_size + )]; # Also do NOT add abstraction symbols from $perlio_sym # abstraction is done as #define to stdio @@ -1026,7 +1174,7 @@ for my $syms (@syms) { # variables if ($define{'MULTIPLICITY'}) { - for my $f ($perlvars_h, $intrpvar_h, $thrdvar_h) { + for my $f ($perlvars_h, $intrpvar_h) { my $glob = readvar($f, sub { "Perl_" . $_[1] . $_[2] . "_ptr" }); emit_symbols $glob; } @@ -1045,10 +1193,6 @@ else { my $glob = readvar($intrpvar_h); emit_symbols $glob; } - unless ($define{'MULTIPLICITY'}) { - my $glob = readvar($thrdvar_h); - emit_symbols $glob; - } } sub try_symbol { @@ -1178,6 +1322,7 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { win32_rewinddir win32_closedir win32_longpath + win32_ansipath win32_os_id win32_getpid win32_crypt @@ -1231,8 +1376,12 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { { try_symbol($symbol); } + if ($CCTYPE eq "BORLAND") { + try_symbol('_matherr'); + } } elsif ($PLATFORM eq 'os2') { + my (%mapped, @missing); open MAP, 'miniperl.map' or die 'Cannot read miniperl.map'; /^\s*[\da-f:]+\s+(\w+)/i and $mapped{$1}++ foreach ; close MAP or die 'Cannot close miniperl.map'; @@ -1403,6 +1552,8 @@ foreach my $symbol (@stat_mods) try_symbol($symbol); } +try_symbol("init_Win32CORE") if $static_ext =~ /\bWin32CORE\b/; + # Now all symbols should be defined because # next we are going to output them. @@ -1472,17 +1623,6 @@ sub output_symbol { 1; __DATA__ -# extra globals not included above. -Perl_cxinc -perl_alloc -perl_alloc_using -perl_clone -perl_clone_using -perl_construct -perl_destruct -perl_free -perl_parse -perl_run # Oddities from PerlIO PerlIO_binmode PerlIO_getpos @@ -1492,4 +1632,3 @@ PerlIO_sprintf PerlIO_sv_dup PerlIO_tmpfile PerlIO_vsprintf -perlsio_binmode