X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/c560d966b003defa80c2baa9fedc0a294d2b3afe..6b3df22776523c7e117a080b445b166b31464123:/makedef.pl diff --git a/makedef.pl b/makedef.pl index 6c08033..549e8f0 100644 --- a/makedef.pl +++ b/makedef.pl @@ -4,12 +4,35 @@ # # Needed by WIN32 and OS/2 for creating perl.dll, # 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 -# 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 +# 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); @@ -34,7 +57,7 @@ while (@ARGV) { } } -my @PLATFORM = qw(aix win32 wince os2 MacOS netware); +my @PLATFORM = qw(aix win32 wince os2 netware); my %PLATFORM; @PLATFORM{@PLATFORM} = (); @@ -51,7 +74,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"; @@ -72,11 +99,9 @@ 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"; -my $pp_sym = "pp.sym"; my $globvar_sym = "globvar.sym"; my $perlio_sym = "perlio.sym"; my $static_ext = ""; @@ -86,19 +111,12 @@ 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, $globvar_sym, $perlio_sym) { s!^!..\\!; } } -elsif ($PLATFORM eq 'MacOS') { - foreach ($thrdvar_h, $intrpvar_h, $perlvars_h, $global_sym, - $pp_sym, $globvar_sym, $perlio_sym) { - s!^!::!; - } -} -unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'MacOS' || $PLATFORM eq 'netware') { +unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'netware') { open(CFG,$config_sh) || die "Cannot open $config_sh: $!\n"; while () { if (/^(?:ccflags|optimize)='(.+)'$/) { @@ -130,6 +148,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); @@ -160,9 +179,13 @@ 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"; - print "DESCRIPTION 'Perl interpreter'\n"; + # The DESCRIPTION module definition file statement is not supported + # by VC7 onwards. + if ($CCTYPE =~ /^(?:MSVC60|GCC|BORLAND)$/) { + print "DESCRIPTION 'Perl interpreter'\n"; + } print "EXPORTS\n"; if ($define{PERL_IMPLICIT_SYS}) { output_symbol("perl_get_host_info"); @@ -212,7 +235,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"; } @@ -401,6 +424,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( @@ -477,34 +507,6 @@ elsif ($PLATFORM eq 'os2') { )]) if $define{'USE_5005THREADS'} or $define{'USE_ITHREADS'}; } -elsif ($PLATFORM eq 'MacOS') { - skip_symbols [qw( - Perl_GetVars - PL_cryptseen - PL_cshlen - PL_cshname - PL_statusvalue_vms - PL_sys_intern - PL_opsave - PL_timesbuf - Perl_dump_fds - Perl_my_bcopy - Perl_my_bzero - Perl_my_chsize - Perl_my_htonl - Perl_my_memcmp - Perl_my_memset - Perl_my_ntohl - Perl_my_swap - Perl_safexcalloc - Perl_safexfree - Perl_safexmalloc - Perl_safexrealloc - Perl_unlnk - Perl_sys_intern_clear - Perl_sys_intern_init - )]; -} elsif ($PLATFORM eq 'netware') { skip_symbols [qw( PL_statusvalue_vms @@ -590,7 +592,6 @@ unless ($define{'DEBUGGING'}) { Perl_debstack Perl_debstackptrs Perl_pad_sv - Perl_sv_peek Perl_hv_assert PL_block_type PL_watchaddr @@ -629,7 +630,6 @@ else { unless ($define{'PERL_OLD_COPY_ON_WRITE'}) { skip_symbols [qw( Perl_sv_setsv_cow - Perl_sv_release_IVX )]; } @@ -665,6 +665,7 @@ else { Perl_dump_mstats Perl_get_mstats Perl_malloced_size + Perl_malloc_good_size MallocCfg_ptr MallocCfgP_ptr )]; @@ -719,8 +720,11 @@ unless ($define{'USE_ITHREADS'}) { PL_sharedsv_space_mutex PL_dollarzero_mutex PL_hints_mutex + PL_my_ctx_mutex PL_perlio_mutex PL_regdupe + Perl_clone_params_del + Perl_clone_params_new Perl_parser_dup Perl_dirp_dup Perl_cx_dup @@ -731,8 +735,10 @@ 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_sv_dup_inc Perl_rvpv_dup Perl_hek_dup Perl_sys_intern_dup @@ -747,12 +753,12 @@ unless ($define{'USE_ITHREADS'}) { 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 @@ -796,6 +802,13 @@ unless ($define{'PL_OP_SLAB_ALLOC'}) { )]; } +unless ($define{'PERL_DEBUG_READONLY_OPS'}) { + skip_symbols [qw( + PL_slab_count + PL_slabs + )]; +} + unless ($define{'THREADS_HAVE_PIDS'}) { skip_symbols [qw(PL_ppid)]; } @@ -812,6 +825,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 @@ -880,6 +899,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 @@ -932,7 +964,7 @@ if ($define{'PERL_GLOBAL_STRUCT'}) { # functions from *.sym files -my @syms = ($global_sym, $globvar_sym); # $pp_sym is not part of the API +my @syms = ($global_sym, $globvar_sym); # Symbols that are the public face of the PerlIO layers implementation # These are in _addition to_ the public face of the abstraction @@ -975,8 +1007,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 @@ -1149,8 +1183,8 @@ for my $syms (@syms) { # variables -if ($define{'MULTIPLICITY'}) { - for my $f ($perlvars_h, $intrpvar_h, $thrdvar_h) { +if ($define{'MULTIPLICITY'} && $define{PERL_GLOBAL_STRUCT}) { + for my $f ($perlvars_h) { my $glob = readvar($f, sub { "Perl_" . $_[1] . $_[2] . "_ptr" }); emit_symbols $glob; } @@ -1165,14 +1199,10 @@ else { my $glob = readvar($perlvars_h); emit_symbols $glob; } - unless ($define{'MULTIPLICITY'}) { + unless ($define{MULTIPLICITY}) { my $glob = readvar($intrpvar_h); emit_symbols $glob; } - unless ($define{'MULTIPLICITY'}) { - my $glob = readvar($thrdvar_h); - emit_symbols $glob; - } } sub try_symbol { @@ -1219,6 +1249,7 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { win32_open win32_close win32_eof + win32_isatty win32_read win32_write win32_spawnvp @@ -1371,15 +1402,6 @@ elsif ($PLATFORM eq 'os2') { @missing = grep { !exists $exportperlmalloc{$_} } @missing; delete $export{$_} foreach @missing; } -elsif ($PLATFORM eq 'MacOS') { - open MACSYMS, 'macperl.sym' or die 'Cannot read macperl.sym'; - - while () { - try_symbol($_); - } - - close MACSYMS; -} elsif ($PLATFORM eq 'netware') { foreach my $symbol (qw( boot_DynaLoader @@ -1532,6 +1554,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. @@ -1591,7 +1615,7 @@ sub output_symbol { $ordinal{$exportperlmalloc{$symbol}} || ++$sym_ord if $exportperlmalloc and exists $exportperlmalloc{$symbol}; } - elsif ($PLATFORM eq 'aix' || $PLATFORM eq 'MacOS') { + elsif ($PLATFORM eq 'aix') { print "$symbol\n"; } elsif ($PLATFORM eq 'netware') {