diff options
author | Craig A. Berry <craigberry@mac.com> | 2011-07-08 14:28:05 -0500 |
---|---|---|
committer | Craig A. Berry <craigberry@mac.com> | 2011-07-08 17:31:21 -0500 |
commit | 93ea32b83e27783af976f1a5fb27ee02deebc40b (patch) | |
tree | d8f41a759df840cfb325f0d51feaa33530af6afe /makedef.pl | |
parent | 1a711748856db57545e4462189a7d8ae47c8d12a (diff) | |
download | perl-93ea32b83e27783af976f1a5fb27ee02deebc40b.tar.gz |
Use makedef.pl on VMS to feed vms/gen_shrfls.pl.
This replaces the latter's long-standing method of running
perl.h through the C preprocessor and parsing the output in
order to see what symbols need exporting in the linker options
file.
vms/gen_shrfls.pl remains part of the process for now since it
knows various things about generating linker options files on
different architectures and other VMS-specific gotchas such as
symbol case sensitivity and long symbol shortening. These
features could be added to makedef.pl but are unlike anything
currently done there.
This should slightly increase the chances that folks can modify
the API without breaking the build, and it should make us a bit
stricter about only exporting the symbols we intend to, but the
result is still far from optimal. It replaces one set of
heuristics and manually-maintained inclusion and exclusion lists
with different heuristics and even longer lists of inclusions and
exclusions.
Diffstat (limited to 'makedef.pl')
-rw-r--r-- | makedef.pl | 123 |
1 files changed, 119 insertions, 4 deletions
diff --git a/makedef.pl b/makedef.pl index 94a0e1a8b8..4e9dfb2902 100644 --- a/makedef.pl +++ b/makedef.pl @@ -4,6 +4,7 @@ # # Needed by WIN32 and OS/2 for creating perl.dll, # and by AIX for creating libperl.a when -Dusershrplib is in effect, +# and by VMS for creating perlshr.exe. # # Reads from information stored in # @@ -29,7 +30,7 @@ # perldll.def Windows # perl.exp AIX # perl.imp NetWare - +# makedef.lis VMS BEGIN { unshift @INC, "lib" } use Config; @@ -57,7 +58,7 @@ while (@ARGV) { } } -my @PLATFORM = qw(aix win32 wince os2 netware); +my @PLATFORM = qw(aix win32 wince os2 netware vms); my %PLATFORM; @PLATFORM{@PLATFORM} = (); @@ -131,6 +132,10 @@ unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'netware') $ARCHNAME = $1 if /^archname='(.+)'$/; $PATCHLEVEL = $1 if /^perl_patchlevel='(.+)'$/; } + if ($PLATFORM eq 'vms') { + $define{DEBUGGING} = 1 if /^usedebugging_perl='Y'$/; + $define{UNLINK_ALL_VERSIONS} = 1 if /^d_unlink_all_versions='define'$/; + } } close(CFG); } @@ -319,7 +324,7 @@ if ($PLATFORM eq 'win32') { Perl_my_sprintf )]; } -else { +elsif ($PLATFORM ne 'vms') { skip_symbols [qw( Perl_do_spawn Perl_do_spawn_nowait @@ -582,6 +587,116 @@ elsif ($PLATFORM eq 'netware') { PerlIO_perlio )]; } +elsif ($PLATFORM eq 'vms') { + emit_symbols([qw( + boot_DynaLoader + Perl_cando + Perl_cando_by_name + Perl_closedir + Perl_csighandler_init + Perl_do_rmdir + Perl_fileify_dirspec + Perl_fileify_dirspec_ts + Perl_fileify_dirspec_utf8 + Perl_fileify_dirspec_utf8_ts + Perl_flex_fstat + Perl_flex_lstat + Perl_flex_stat + Perl_kill_file + Perl_my_chdir + Perl_my_chmod + Perl_my_crypt + Perl_my_endpwent + Perl_my_fclose + Perl_my_fdopen + Perl_my_fgetname + Perl_my_flush + Perl_my_fwrite + Perl_my_gconvert + Perl_my_getenv + Perl_my_getenv_len + Perl_my_getlogin + Perl_my_getpwnam + Perl_my_getpwuid + Perl_my_gmtime + Perl_my_kill + Perl_my_localtime + Perl_my_mkdir + Perl_my_sigaction + Perl_my_symlink + Perl_my_time + Perl_my_tmpfile + Perl_my_trnlnm + Perl_my_utime + Perl_my_waitpid + Perl_opendir + Perl_pathify_dirspec + Perl_pathify_dirspec_ts + Perl_pathify_dirspec_utf8 + Perl_pathify_dirspec_utf8_ts + Perl_readdir + Perl_readdir_r + Perl_rename + Perl_rmscopy + Perl_rmsexpand + Perl_rmsexpand_ts + Perl_rmsexpand_utf8 + Perl_rmsexpand_utf8_ts + Perl_seekdir + Perl_sig_to_vmscondition + Perl_telldir + Perl_tounixpath + Perl_tounixpath_ts + Perl_tounixpath_utf8 + Perl_tounixpath_utf8_ts + Perl_tounixspec + Perl_tounixspec_ts + Perl_tounixspec_utf8 + Perl_tounixspec_utf8_ts + Perl_tovmspath + Perl_tovmspath_ts + Perl_tovmspath_utf8 + Perl_tovmspath_utf8_ts + Perl_tovmsspec + Perl_tovmsspec_ts + Perl_tovmsspec_utf8 + Perl_tovmsspec_utf8_ts + Perl_trim_unixpath + Perl_vms_case_tolerant + Perl_vms_do_aexec + Perl_vms_do_exec + Perl_vms_image_init + Perl_vms_realpath + Perl_vmssetenv + Perl_vmssetuserlnm + Perl_vmstrnenv + PerlIO_openn + )]); + skip_symbols([qw( + PL_statusvalue_posix + PL_cryptseen + PL_opsave + Perl_GetVars + Perl_dump_fds + Perl_my_bzero + Perl_my_bcopy + Perl_my_chsize + Perl_my_htonl + Perl_my_memcmp + Perl_my_memset + Perl_my_ntohl + Perl_my_sprintf + Perl_my_swap + )]); + skip_symbols([qw( + Perl_signbit + )]) + if $define{'HAS_SIGNBIT'}; + skip_symbols([qw( + Perl_unlnk + )]) + unless $define{'UNLINK_ALL_VERSIONS'}; +} unless ($define{'DEBUGGING'}) { skip_symbols [qw( @@ -1614,7 +1729,7 @@ sub output_symbol { $ordinal{$exportperlmalloc{$symbol}} || ++$sym_ord if $exportperlmalloc and exists $exportperlmalloc{$symbol}; } - elsif ($PLATFORM eq 'aix') { + elsif ($PLATFORM eq 'aix' || $PLATFORM eq 'vms') { print "$symbol\n"; } elsif ($PLATFORM eq 'netware') { |