X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/e601c439adce167078ac7b49550c0418ace86f94..a3167221c5c86fcb0d7f6497651ad0157ad5776e:/makedef.pl diff --git a/makedef.pl b/makedef.pl index 70682f7..2b8e636b 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 @@ -49,14 +50,17 @@ while (@ARGV) { $define{$1} = $2 if ($flag =~ /^-D(\w+)=(.+)$/); $CCTYPE = $1 if ($flag =~ /^CCTYPE=(\w+)$/); $PLATFORM = $1 if ($flag =~ /^PLATFORM=(\w+)$/); + if ($PLATFORM eq 'netware') { + $FILETYPE = $1 if ($flag =~ /^FILETYPE=(\w+)$/); + } } -my @PLATFORM = qw(aix win32 os2); +my @PLATFORM = qw(aix win32 os2 MacOS netware); 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"; @@ -68,18 +72,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') { +elsif ($PLATFORM eq 'win32' || $PLATFORM eq 'netware') { $CCTYPE = "MSVC" unless defined $CCTYPE; - foreach ($thrdvar_h, $intrpvar_h, $perlvars_h, $global_sym, - $pp_sym, $globvar_sym, $perlio_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' || $PLATFORM eq 'netware') { open(CFG,$config_sh) || die "Cannot open $config_sh: $!\n"; while () { if (/^(?:ccflags|optimize)='(.+)'$/) { @@ -88,7 +98,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); @@ -97,19 +107,16 @@ 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} && !$define{PERL_OBJECT}) { + if (!$define{MULTIPLICITY}) { $define{MULTIPLICITY} = 1; } } @@ -119,46 +126,28 @@ $define{PERL_IMPLICIT_CONTEXT} ||= $define{USE_5005THREADS} || $define{MULTIPLICITY} ; -if ($define{PERL_CAPI}) { - delete $define{PERL_OBJECT}; - $define{MULTIPLICITY} = 1; - $define{PERL_IMPLICIT_CONTEXT} = 1; - $define{PERL_IMPLICIT_SYS} = 1; -} - -if ($define{PERL_OBJECT}) { - $define{PERL_IMPLICIT_CONTEXT} = 1; - $define{PERL_IMPLICIT_SYS} = 1; -} - # perl.h logic duplication ends 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}) { output_symbol("perl_get_host_info"); output_symbol("perl_alloc_override"); + output_symbol("perl_clone_host"); } } 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"; + $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 -DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter' +$d STACKSIZE 32768 CODE LOADONCALL DATA LOADONCALL NONSHARED MULTIPLE @@ -166,7 +155,27 @@ EXPORTS ---EOP--- } elsif ($PLATFORM eq 'aix') { - print "#!\n"; + $OSVER = `uname -v`; + chop $OSVER; + $OSREL = `uname -r`; + chop $OSREL; + if ($OSVER > 4 || ($OSVER == 4 && $OSREL >= 3)) { + print "#! ..\n"; + } else { + print "#!\n"; + } +} +elsif ($PLATFORM eq 'netware') { + if ($FILETYPE eq 'def') { + print "LIBRARY Perl57\n"; + print "DESCRIPTION 'Perl interpreter for NetWare'\n"; + print "EXPORTS\n"; + } + if ($define{PERL_IMPLICIT_SYS}) { + output_symbol("perl_get_host_info"); + output_symbol("perl_alloc_override"); + output_symbol("perl_clone_host"); + } } my %skip; @@ -184,13 +193,14 @@ sub emit_symbols { foreach my $symbol (@$list) { my $skipsym = $symbol; # XXX hack - if ($define{PERL_OBJECT} || $define{MULTIPLICITY}) { + if ($define{MULTIPLICITY}) { $skipsym =~ s/^Perl_[GIT](\w+)_ptr$/PL_$1/; } emit_symbol($symbol) unless exists $skip{$skipsym}; } } + if ($PLATFORM eq 'win32') { skip_symbols [qw( PL_statusvalue_vms @@ -218,6 +228,7 @@ if ($PLATFORM eq 'win32') { Perl_dump_fds Perl_init_thread_intern Perl_my_bzero + Perl_my_bcopy Perl_my_htonl Perl_my_ntohl Perl_my_swap @@ -274,6 +285,8 @@ elsif ($PLATFORM eq 'os2') { ctermid get_sysinfo Perl_OS2_init + Perl_OS2_init3 + Perl_OS2_term OS2_Perl_data dlopen dlsym @@ -282,6 +295,16 @@ elsif ($PLATFORM eq 'os2') { my_tmpfile my_tmpnam my_flock + my_rmdir + my_mkdir + my_getpwuid + my_getpwnam + my_getpwent + my_setpwent + my_endpwent + setgrent + endgrent + getgrent malloc_mutex threads_mutex nthreads @@ -310,12 +333,91 @@ elsif ($PLATFORM eq 'os2') { init_PMWIN_entries PMWIN_entries Perl_hab_GET + loadByOrdinal + pExtFCN )]); } +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 + PL_archpat_auto + PL_cryptseen + PL_DBcv + PL_generation + PL_lastgotoprobe + 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 + Perl_do_msgrcv + Perl_do_msgsnd + Perl_do_semop + Perl_do_shmio + Perl_dump_fds + Perl_init_thread_intern + Perl_my_bzero + Perl_my_htonl + Perl_my_ntohl + Perl_my_swap + Perl_my_chsize + Perl_same_dirent + Perl_setenv_getix + Perl_unlnk + Perl_watch + Perl_safexcalloc + Perl_safexmalloc + Perl_safexfree + Perl_safexrealloc + Perl_my_memcmp + Perl_my_memset + PL_cshlen + PL_cshname + PL_opsave + Perl_do_exec + Perl_getenv_len + Perl_my_pclose + Perl_my_popen + )]; +} unless ($define{'DEBUGGING'}) { skip_symbols [qw( - Perl_deb Perl_deb_growlevel Perl_debop Perl_debprofdump @@ -358,14 +460,18 @@ unless ($define{'PERL_FLEXIBLE_EXCEPTIONS'}) { )]; } +unless ($define{'USE_REENTRANT_API'}) { + skip_symbols [qw( + PL_reentrant_buffer + )]; +} + if ($define{'MYMALLOC'}) { emit_symbols [qw( Perl_dump_mstats Perl_get_mstats - Perl_malloc - Perl_mfree - Perl_realloc - Perl_calloc + Perl_strdup + Perl_putenv )]; if ($define{'USE_5005THREADS'} || $define{'USE_ITHREADS'}) { emit_symbols [qw( @@ -383,10 +489,6 @@ else { PL_malloc_mutex Perl_dump_mstats Perl_get_mstats - Perl_malloc - Perl_mfree - Perl_realloc - Perl_calloc Perl_malloced_size )]; } @@ -430,6 +532,8 @@ unless ($define{'USE_ITHREADS'}) { skip_symbols [qw( PL_ptr_table PL_op_mutex + PL_regex_pad + PL_regex_padav Perl_dirp_dup Perl_cx_dup Perl_si_dup @@ -442,12 +546,23 @@ 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 perl_clone_using + Perl_sharedsv_find + Perl_sharedsv_init + Perl_sharedsv_lock + Perl_sharedsv_new + Perl_sharedsv_thrcnt_dec + Perl_sharedsv_thrcnt_inc + Perl_sharedsv_unlock )]; } @@ -489,8 +604,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; } @@ -510,8 +625,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) { @@ -530,7 +726,7 @@ for my $syms (@syms) { # variables -if ($define{'PERL_OBJECT'} || $define{'MULTIPLICITY'}) { +if ($define{'MULTIPLICITY'}) { for my $f ($perlvars_h, $intrpvar_h, $thrdvar_h) { my $glob = readvar($f, sub { "Perl_" . $_[1] . $_[2] . "_ptr" }); emit_symbols $glob; @@ -545,21 +741,21 @@ 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 { my $symbol = shift; - return if $symbol !~ /^[A-Za-z]/; + return if $symbol !~ /^[A-Za-z_]/; return if $symbol =~ /^\#/; $symbol =~s/\r//g; chomp($symbol); @@ -573,8 +769,8 @@ while () { if ($PLATFORM eq 'win32') { foreach my $symbol (qw( - setuid - setgid + setuid + setgid boot_DynaLoader Perl_init_os_extras Perl_thread_create @@ -683,47 +879,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 + + 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); @@ -738,6 +934,149 @@ 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; +} +elsif ($PLATFORM eq 'netware') { +foreach my $symbol (qw( + boot_DynaLoader + Perl_init_os_extras + Perl_thread_create + Perl_nw5_init + RunPerl + AllocStdPerl + FreeStdPerl + do_spawn2 + do_aspawn + nw_uname + nw_stdin + nw_stdout + nw_stderr + nw_feof + nw_ferror + nw_fopen + nw_fclose + nw_clearerr + nw_getc + nw_fgets + nw_fputc + nw_fputs + nw_fflush + nw_ungetc + nw_fileno + nw_fdopen + nw_freopen + nw_fread + nw_fwrite + nw_setbuf + nw_setvbuf + nw_vfprintf + nw_ftell + nw_fseek + nw_rewind + nw_tmpfile + nw_fgetpos + nw_fsetpos + nw_dup + nw_access + nw_chmod + nw_chsize + nw_close + nw_dup2 + nw_flock + nw_isatty + nw_link + nw_lseek + nw_stat + nw_mktemp + nw_open + nw_read + nw_rename + nw_setmode + nw_unlink + nw_utime + nw_write + nw_chdir + nw_rmdir + nw_closedir + nw_opendir + nw_readdir + nw_rewinddir + nw_seekdir + nw_telldir + nw_htonl + nw_htons + nw_ntohl + nw_ntohs + nw_accept + nw_bind + nw_connect + nw_endhostent + nw_endnetent + nw_endprotoent + nw_endservent + nw_gethostbyaddr + nw_gethostbyname + nw_gethostent + nw_gethostname + nw_getnetbyaddr + nw_getnetbyname + nw_getnetent + nw_getpeername + nw_getprotobyname + nw_getprotobynumber + nw_getprotoent + nw_getservbyname + nw_getservbyport + nw_getservent + nw_getsockname + nw_getsockopt + nw_inet_addr + nw_listen + nw_socket + nw_recv + nw_recvfrom + nw_select + nw_send + nw_sendto + nw_sethostent + nw_setnetent + nw_setprotoent + nw_setservent + nw_shutdown + nw_crypt + nw_execvp + nw_kill + nw_Popen + nw_Pclose + nw_Pipe + nw_times + nw_waitpid + nw_getpid + nw_spawnvp + nw_os_id + nw_open_osfhandle + nw_get_osfhandle + nw_abort + nw_sleep + nw_wait + nw_dynaload + nw_strerror + fnFpSetMode + fnInsertHashListAddrs + fnGetHashListAddrs + Perl_deb + )) + { + try_symbol($symbol); + } +} # Now all symbols should be defined because # next we are going to output them. @@ -746,12 +1085,21 @@ foreach my $symbol (sort keys %export) { output_symbol($symbol); } +if ($PLATFORM eq 'netware') { + # This may not be the right way to do. This is to make sure + # that the last symbol will not contain a comma else + # Watcom linker cribs + print "\tdummy\n"; +} + sub emit_symbol { my $symbol = shift; - chomp($symbol); + chomp($symbol); $export{$symbol} = 1; } +my $sym_ord = 0; + sub output_symbol { my $symbol = shift; $symbol = $bincompat5005{$symbol} @@ -782,11 +1130,14 @@ sub output_symbol { # } } elsif ($PLATFORM eq 'os2') { - print qq( "$symbol"\n); + printf qq( %-31s \@%s\n), qq("$symbol"), ++$sym_ord; } - elsif ($PLATFORM eq 'aix') { + elsif ($PLATFORM eq 'aix' || $PLATFORM eq 'MacOS') { print "$symbol\n"; } + elsif ($PLATFORM eq 'netware') { + print "\t$symbol,\n"; + } } 1; @@ -801,3 +1152,42 @@ perl_destruct perl_free perl_parse perl_run +Perl_cxinc +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