summaryrefslogtreecommitdiff
path: root/makedef.pl
diff options
context:
space:
mode:
authorCraig A. Berry <craigberry@mac.com>2011-07-08 14:28:05 -0500
committerCraig A. Berry <craigberry@mac.com>2011-07-08 17:31:21 -0500
commit93ea32b83e27783af976f1a5fb27ee02deebc40b (patch)
treed8f41a759df840cfb325f0d51feaa33530af6afe /makedef.pl
parent1a711748856db57545e4462189a7d8ae47c8d12a (diff)
downloadperl-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.pl123
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') {