X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=makedef.pl;h=948066beb084b52427915d7b975f7ddb8ccc2e27;hb=d235852b65d51c442c4a84cfa07cd04d89233033;hp=e3b6fd638fd40d1073d682d84a5f2cbcbf68a496;hpb=7c12830045ccc861ed92463c8b0f544c90c832ef;p=p5sagit%2Fp5-mst-13.2.git diff --git a/makedef.pl b/makedef.pl index e3b6fd6..948066b 100644 --- a/makedef.pl +++ b/makedef.pl @@ -1,8 +1,9 @@ # # Create the export list for perl. # -# Needed by WIN32 and OS/2 for creating perl.dll -# and by AIX for creating libperl.a when -Dusershrplib is in effect. +# 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 as well @@ -11,7 +12,11 @@ my $PLATFORM; my $CCTYPE; my %bincompat5005 = - (Perl_call_argv => "perl_call_argv", + ( + Perl_call_atexit => "perl_atexit", + Perl_eval_sv => "perl_eval_sv", + Perl_eval_pv => "perl_eval_pv", + Perl_call_argv => "perl_call_argv", Perl_call_method => "perl_call_method", Perl_call_pv => "perl_call_pv", Perl_call_sv => "perl_call_sv", @@ -34,7 +39,8 @@ my %bincompat5005 = Perl_malloc => "malloc", Perl_mfree => "free", Perl_realloc => "realloc", - Perl_calloc => "calloc",); + Perl_calloc => "calloc", + ); my $bincompat5005 = join("|", keys %bincompat5005); @@ -46,12 +52,12 @@ while (@ARGV) { $PLATFORM = $1 if ($flag =~ /^PLATFORM=(\w+)$/); } -my @PLATFORM = qw(aix win32 os2); +my @PLATFORM = qw(aix win32 os2 MacOS); my %PLATFORM; @PLATFORM{@PLATFORM} = (); defined $PLATFORM || die "PLATFORM undefined, must be one of: @PLATFORM\n"; -exists $PLATFORM{$PLATFORM} || die "PLATFORM must be one of: @PLATFORM\n"; +exists $PLATFORM{$PLATFORM} || die "PLATFORM must be one of: @PLATFORM\n"; my $config_sh = "config.sh"; my $config_h = "config.h"; @@ -63,17 +69,24 @@ my $pp_sym = "pp.sym"; my $globvar_sym = "globvar.sym"; my $perlio_sym = "perlio.sym"; -if ($PLATFORM eq 'aix') { +if ($PLATFORM eq 'aix') { # Nothing for now. } elsif ($PLATFORM eq 'win32') { $CCTYPE = "MSVC" unless defined $CCTYPE; - foreach ($thrdvar_h, $intrpvar_h, $perlvars_h, $global_sym, $pp_sym, $globvar_sym) { + foreach ($thrdvar_h, $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) { + s!^!::!; + } +} -unless ($PLATFORM eq 'win32') { +unless ($PLATFORM eq 'win32' || $PLATFORM eq 'MacOS') { open(CFG,$config_sh) || die "Cannot open $config_sh: $!\n"; while () { if (/^(?:ccflags|optimize)='(.+)'$/) { @@ -82,7 +95,7 @@ unless ($PLATFORM eq 'win32') { } if ($PLATFORM eq 'os2') { $CONFIG_ARGS = $1 if /^(?:config_args)='(.+)'$/; - $ARCHNAME = $1 if /^(?:archname)='(.+)'$/; + $ARCHNAME = $1 if /^(?:archname)='(.+)'$/; } } close(CFG); @@ -91,31 +104,28 @@ unless ($PLATFORM eq 'win32') { open(CFG,$config_h) || die "Cannot open $config_h: $!\n"; while () { $define{$1} = 1 if /^\s*#\s*define\s+(MYMALLOC)\b/; - $define{$1} = 1 if /^\s*#\s*define\s+(USE_5005THREADS)\b/; - $define{$1} = 1 if /^\s*#\s*define\s+(USE_ITHREADS)\b/; - $define{$1} = 1 if /^\s*#\s*define\s+(USE_PERLIO)\b/; $define{$1} = 1 if /^\s*#\s*define\s+(MULTIPLICITY)\b/; - $define{$1} = 1 if /^\s*#\s*define\s+(PERL_IMPLICIT_SYS)\b/; - $define{$1} = 1 if /^\s*#\s*define\s+(PERL_BINCOMPAT_5005)\b/; + $define{$1} = 1 if /^\s*#\s*define\s+(PERL_\w+)\b/; + $define{$1} = 1 if /^\s*#\s*define\s+(USE_\w+)\b/; } close(CFG); # perl.h logic duplication begins if ($define{USE_ITHREADS}) { - if (!$define{MULTIPLICITY} && !defined{PERL_OBJECT}) { + if (!$define{MULTIPLICITY} && !$define{PERL_OBJECT}) { $define{MULTIPLICITY} = 1; } } $define{PERL_IMPLICIT_CONTEXT} ||= $define{USE_ITHREADS} || - $define{USE_THREADS} || + $define{USE_5005THREADS} || $define{MULTIPLICITY} ; if ($define{PERL_CAPI}) { delete $define{PERL_OBJECT}; - $define{MULTIPLICITY} = 1; + $define{MULTIPLICITY} = 1; $define{PERL_IMPLICIT_CONTEXT} = 1; $define{PERL_IMPLICIT_SYS} = 1; } @@ -129,7 +139,7 @@ if ($define{PERL_OBJECT}) { if ($PLATFORM eq 'win32') { warn join(' ',keys %define)."\n"; - print "LIBRARY Perl56\n"; + print "LIBRARY Perl57\n"; print "DESCRIPTION 'Perl interpreter'\n"; print "EXPORTS\n"; if ($define{PERL_IMPLICIT_SYS}) { @@ -140,19 +150,10 @@ if ($PLATFORM eq 'win32') { elsif ($PLATFORM eq 'os2') { ($v = $]) =~ s/(\d\.\d\d\d)(\d\d)$/$1_$2/; $v .= '-thread' if $ARCHNAME =~ /-thread/; - #$sum = 0; - #for (split //, $v) { - # $sum = ($sum * 33) + ord; - # $sum &= 0xffffff; - #} - #$sum += $sum >> 5; - #$sum &= 0xffff; - #$sum = printf '%X', $sum; ($dll = $define{PERL_DLL}) =~ s/\.dll$//i; - # print STDERR "'$dll' <= '$define{PERL_DLL}'\n"; print <<"---EOP---"; LIBRARY '$dll' INITINSTANCE TERMINSTANCE -DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter, configured as $CONFIG_ARGS' +DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter' STACKSIZE 32768 CODE LOADONCALL DATA LOADONCALL NONSHARED MULTIPLE @@ -254,7 +255,9 @@ elsif ($PLATFORM eq 'aix') { Perl_safexrealloc Perl_same_dirent Perl_unlnk + Perl_sys_intern_clear Perl_sys_intern_dup + Perl_sys_intern_init PL_cryptseen PL_opsave PL_statusvalue_vms @@ -270,9 +273,12 @@ elsif ($PLATFORM eq 'os2') { dlopen dlsym dlerror + dlclose my_tmpfile my_tmpnam my_flock + my_rmdir + my_mkdir malloc_mutex threads_mutex nthreads @@ -303,10 +309,38 @@ elsif ($PLATFORM eq 'os2') { Perl_hab_GET )]); } +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 + )]; +} + unless ($define{'DEBUGGING'}) { skip_symbols [qw( - Perl_deb Perl_deb_growlevel Perl_debop Perl_debprofdump @@ -357,12 +391,19 @@ if ($define{'MYMALLOC'}) { Perl_mfree Perl_realloc Perl_calloc + Perl_strdup + Perl_putenv )]; if ($define{'USE_5005THREADS'} || $define{'USE_ITHREADS'}) { emit_symbols [qw( PL_malloc_mutex )]; } + else { + skip_symbols [qw( + PL_malloc_mutex + )]; + } } else { skip_symbols [qw( @@ -377,14 +418,21 @@ else { )]; } -unless ($define{'USE_5005THREADS'}) { +unless ($define{'USE_5005THREADS'} || $define{'USE_ITHREADS'}) { skip_symbols [qw( PL_thr_key + )]; +} + +unless ($define{'USE_5005THREADS'}) { + skip_symbols [qw( PL_sv_mutex PL_strtab_mutex PL_svref_mutex PL_cred_mutex PL_eval_mutex + PL_fdpid_mutex + PL_sv_lock_mutex PL_eval_cond PL_eval_owner PL_threads_mutex @@ -394,8 +442,6 @@ unless ($define{'USE_5005THREADS'}) { PL_threadsv_names PL_thrsv PL_vtbl_mutex - Perl_getTHR - Perl_setTHR Perl_condpair_magic Perl_new_struct_thread Perl_per_thread_magicals @@ -403,12 +449,14 @@ unless ($define{'USE_5005THREADS'}) { Perl_find_threadsv Perl_unlock_condpair Perl_magic_mutexfree + Perl_sv_lock )]; } unless ($define{'USE_ITHREADS'}) { skip_symbols [qw( PL_ptr_table + PL_op_mutex Perl_dirp_dup Perl_cx_dup Perl_si_dup @@ -421,8 +469,12 @@ unless ($define{'USE_ITHREADS'}) { Perl_re_dup Perl_sv_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 @@ -436,6 +488,7 @@ unless ($define{'PERL_IMPLICIT_CONTEXT'}) { Perl_die_nocontext Perl_deb_nocontext Perl_form_nocontext + Perl_load_module_nocontext Perl_mess_nocontext Perl_warn_nocontext Perl_warner_nocontext @@ -467,8 +520,8 @@ sub readvar { # All symbols have a Perl_ prefix because that's what embed.h # sticks in front of them. push(@syms, &$proc($1,$2,$3)) if (/\bPERLVAR(A?I?C?)\(([IGT])(\w+)/); - } - close(VARS); + } + close(VARS); return \@syms; } @@ -488,8 +541,89 @@ if ($define{'PERL_GLOBAL_STRUCT'}) { my @syms = ($global_sym, $globvar_sym); # $pp_sym is not part of the API +my @layer_syms = qw( + PerlIOBase_clearerr + PerlIOBase_close + PerlIOBase_eof + PerlIOBase_error + PerlIOBase_fileno + PerlIOBase_setlinebuf + PerlIOBase_pushed + PerlIOBase_read + PerlIOBase_unread + PerlIOBuf_bufsiz + PerlIOBuf_fill + PerlIOBuf_flush + PerlIOBuf_get_cnt + PerlIOBuf_get_ptr + PerlIOBuf_open + PerlIOBuf_pushed + PerlIOBuf_read + PerlIOBuf_seek + PerlIOBuf_set_ptrcnt + PerlIOBuf_tell + PerlIOBuf_unread + PerlIOBuf_write + PerlIO_define_layer + PerlIO_arg_fetch + PerlIO_pending + PerlIO_allocate + PerlIO_push + PerlIO_unread +); + if ($define{'USE_PERLIO'}) { - push @syms, $perlio_sym; + push @syms, $perlio_sym; + if ($define{'USE_SFIO'}) { + skip_symbols \@layer_syms; + # SFIO defines most of the PerlIO routines as macros + skip_symbols [qw( + PerlIO_canset_cnt + PerlIO_clearerr + PerlIO_close + PerlIO_eof + PerlIO_error + PerlIO_exportFILE + PerlIO_fast_gets + PerlIO_fdopen + PerlIO_fileno + PerlIO_findFILE + PerlIO_flush + PerlIO_get_base + PerlIO_get_bufsiz + PerlIO_get_cnt + PerlIO_get_ptr + PerlIO_getc + PerlIO_getname + PerlIO_has_base + PerlIO_has_cntptr + PerlIO_importFILE + PerlIO_open + PerlIO_printf + PerlIO_putc + PerlIO_puts + PerlIO_read + PerlIO_releaseFILE + PerlIO_reopen + PerlIO_rewind + PerlIO_seek + PerlIO_set_cnt + PerlIO_set_ptrcnt + PerlIO_setlinebuf + PerlIO_sprintf + PerlIO_stderr + PerlIO_stdin + PerlIO_stdout + PerlIO_stdoutf + PerlIO_tell + PerlIO_ungetc + PerlIO_vprintf + PerlIO_write + )]; + } +} else { + # Skip the PerlIO New Generation symbols. + skip_symbols \@layer_syms; } for my $syms (@syms) { @@ -523,15 +657,15 @@ else { unless ($define{'PERL_GLOBAL_STRUCT'}) { my $glob = readvar($perlvars_h); emit_symbols $glob; - } + } unless ($define{'MULTIPLICITY'}) { my $glob = readvar($intrpvar_h); emit_symbols $glob; - } + } unless ($define{'MULTIPLICITY'} || $define{'USE_5005THREADS'}) { my $glob = readvar($thrdvar_h); emit_symbols $glob; - } + } } sub try_symbol { @@ -551,46 +685,15 @@ while () { if ($PLATFORM eq 'win32') { foreach my $symbol (qw( + setuid + setgid boot_DynaLoader - Perl_getTHR Perl_init_os_extras - Perl_setTHR Perl_thread_create Perl_win32_init RunPerl - GetPerlInterpreter - SetPerlInterpreter win32_errno win32_environ - win32_stdin - win32_stdout - win32_stderr - win32_ferror - win32_feof - win32_strerror - win32_fprintf - win32_printf - win32_vfprintf - win32_vprintf - win32_fread - win32_fwrite - win32_fopen - win32_fdopen - win32_freopen - win32_fclose - win32_fputs - win32_fputc - win32_ungetc - win32_getc - win32_fileno - win32_clearerr - win32_fflush - win32_ftell - win32_fseek - win32_fgetpos - win32_fsetpos - win32_rewind - win32_tmpfile win32_abort win32_fstat win32_stat @@ -661,17 +764,6 @@ if ($PLATFORM eq 'win32') { win32_getenv win32_putenv win32_perror - win32_setbuf - win32_setvbuf - win32_flushall - win32_fcloseall - win32_fgets - win32_gets - win32_fgetc - win32_putc - win32_puts - win32_getchar - win32_putchar win32_malloc win32_calloc win32_realloc @@ -703,6 +795,47 @@ if ($PLATFORM eq 'win32') { win32_getpid win32_crypt win32_dynaload + + win32_stdin + win32_stdout + win32_stderr + win32_ferror + win32_feof + win32_strerror + win32_fprintf + win32_printf + win32_vfprintf + win32_vprintf + win32_fread + win32_fwrite + win32_fopen + win32_fdopen + win32_freopen + win32_fclose + win32_fputs + win32_fputc + win32_ungetc + win32_getc + win32_fileno + win32_clearerr + win32_fflush + win32_ftell + win32_fseek + win32_fgetpos + win32_fsetpos + win32_rewind + win32_tmpfile + win32_setbuf + win32_setvbuf + win32_flushall + win32_fcloseall + win32_fgets + win32_gets + win32_fgetc + win32_putc + win32_puts + win32_getchar + win32_putchar )) { try_symbol($symbol); @@ -717,6 +850,15 @@ elsif ($PLATFORM eq 'os2') { keys %export; delete $export{$_} foreach @missing; } +elsif ($PLATFORM eq 'MacOS') { + open MACSYMS, 'macperl.sym' or die 'Cannot read macperl.sym'; + + while () { + try_symbol($_); + } + + close MACSYMS; +} # Now all symbols should be defined because # next we are going to output them. @@ -727,7 +869,7 @@ foreach my $symbol (sort keys %export) { sub emit_symbol { my $symbol = shift; - chomp($symbol); + chomp($symbol); $export{$symbol} = 1; } @@ -763,7 +905,7 @@ sub output_symbol { elsif ($PLATFORM eq 'os2') { print qq( "$symbol"\n); } - elsif ($PLATFORM eq 'aix') { + elsif ($PLATFORM eq 'aix' || $PLATFORM eq 'MacOS') { print "$symbol\n"; } } @@ -780,3 +922,41 @@ perl_destruct perl_free perl_parse perl_run +PerlIO_define_layer +PerlIOBuf_set_ptrcnt +PerlIOBuf_get_cnt +PerlIOBuf_get_ptr +PerlIOBuf_bufsiz +PerlIOBase_clearerr +PerlIOBase_setlinebuf +PerlIOBase_pushed +PerlIOBase_read +PerlIOBase_unread +PerlIOBase_error +PerlIOBase_eof +PerlIOBuf_tell +PerlIOBuf_seek +PerlIOBuf_write +PerlIOBuf_unread +PerlIOBuf_read +PerlIOBuf_open +PerlIOBase_fileno +PerlIOBuf_pushed +PerlIOBuf_fill +PerlIOBuf_flush +PerlIOBase_close +PerlIO_define_layer +PerlIO_pending +PerlIO_unread +PerlIO_push +PerlIO_allocate +PerlIO_arg_fetch +PerlIO_apply_layers +perlsio_binmode +PerlIO_binmode +PerlIO_init +PerlIO_tmpfile +PerlIO_setpos +PerlIO_getpos +PerlIO_vsprintf +PerlIO_sprintf