X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/c69033f2a629160559f680da8e4e5a7e3c4c3a0c..c560d966b003defa80c2baa9fedc0a294d2b3afe:/makedef.pl diff --git a/makedef.pl b/makedef.pl index bc47833..6c08033 100644 --- a/makedef.pl +++ b/makedef.pl @@ -1,3 +1,4 @@ +#./perl -w # # Create the export list for perl. # @@ -8,8 +9,12 @@ # reads global.sym, pp.sym, perlvars.h, intrpvar.h, thrdvar.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", @@ -133,9 +157,10 @@ 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} || "perl59")) =~ s/\.dll$//i; print "LIBRARY $dll\n"; print "DESCRIPTION 'Perl interpreter'\n"; print "EXPORTS\n"; @@ -159,11 +184,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 @@ -175,9 +200,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"; @@ -231,7 +256,6 @@ if ($PLATFORM eq 'win32') { PL_linestart PL_modcount PL_pending_ident - PL_sortcxix PL_sublex_info PL_timesbuf main @@ -269,6 +293,7 @@ if ($PLATFORM eq 'win32') { Perl_getenv_len Perl_my_pclose Perl_my_popen + Perl_my_sprintf )]; } else { @@ -289,7 +314,6 @@ if ($PLATFORM eq 'wince') { PL_linestart PL_modcount PL_pending_ident - PL_sortcxix PL_sublex_info PL_timesbuf PL_collation_ix @@ -346,6 +370,7 @@ if ($PLATFORM eq 'wince') { Perl_getenv_len Perl_my_pclose Perl_my_popen + Perl_my_sprintf )]; } elsif ($PLATFORM eq 'aix') { @@ -370,6 +395,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 @@ -490,7 +516,6 @@ elsif ($PLATFORM eq 'netware') { PL_linestart PL_modcount PL_pending_ident - PL_sortcxix PL_sublex_info PL_timesbuf main @@ -564,7 +589,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 @@ -643,10 +670,10 @@ else { )]; } -unless ($define{'PERL_MALLOC_WRAP'}) { +if ($define{'PERL_USE_SAFE_PUTENV'}) { skip_symbols [qw( - PL_memory_wrap - )]; + PL_use_safe_putenv + )]; } unless ($define{'USE_ITHREADS'}) { @@ -685,15 +712,16 @@ 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 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 @@ -708,14 +736,6 @@ unless ($define{'USE_ITHREADS'}) { 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 +746,17 @@ unless ($define{'USE_ITHREADS'}) { Perl_sharedsv_thrcnt_inc Perl_sharedsv_unlock Perl_stashpv_hvname_match + Perl_regdupe_internal )]; } 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,6 +770,8 @@ unless ($define{'PERL_IMPLICIT_CONTEXT'}) { Perl_sv_setpvf_nocontext Perl_sv_catpvf_mg_nocontext Perl_sv_setpvf_mg_nocontext + Perl_my_cxt_init + Perl_my_cxt_index )]; } @@ -794,6 +822,70 @@ unless ($define{'PERL_DONT_CREATE_GVSV'}) { 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{'PERL_TRACK_MEMPOOL'}) { + skip_symbols [qw( + PL_memory_debug_header + )]; +} + +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{'PERL_GLOBAL_STRUCT_PRIVATE'}) { + skip_symbols [qw( + PL_my_cxt_keys + Perl_my_cxt_index + )]; +} unless ($define{'d_mmap'}) { skip_symbols [qw( @@ -895,6 +987,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 @@ -1009,13 +1102,30 @@ if ($define{'USE_PERLIO'}) { 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 anyway. skip_symbols \@layer_syms; - skip_symbols [qw(perlsio_binmode)]; - 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 @@ -1192,6 +1302,7 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { win32_rewinddir win32_closedir win32_longpath + win32_ansipath win32_os_id win32_getpid win32_crypt @@ -1250,6 +1361,7 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { } } 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'; @@ -1489,17 +1601,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