update Changes, patchlevel, tweak Liblist.pm
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / Mksymlists.pm
index 73dc81d..0b92ca0 100644 (file)
@@ -7,7 +7,7 @@ use Exporter;
 use vars qw( @ISA @EXPORT $VERSION );
 @ISA = 'Exporter';
 @EXPORT = '&Mksymlists';
-$VERSION = substr q$Revision: 1.13 $, 10;
+$VERSION = substr q$Revision: 1.17 $, 10;
 
 sub Mksymlists {
     my(%spec) = @_;
@@ -69,6 +69,8 @@ sub _write_aix {
 
 sub _write_os2 {
     my($data) = @_;
+    require Config;
+    my $threaded = ($Config::Config{archname} =~ /-thread/ ? " threaded" : "");
 
     if (not $data->{DLBASE}) {
         ($data->{DLBASE} = $data->{NAME}) =~ s/.*:://;
@@ -79,6 +81,7 @@ sub _write_os2 {
     open(DEF,">$data->{FILE}.def")
         or croak("Can't create $data->{FILE}.def: $!\n");
     print DEF "LIBRARY '$data->{DLBASE}' INITINSTANCE TERMINSTANCE\n";
+    print DEF "DESCRIPTION 'Perl (v$]$threaded) module $data->{NAME} v$data->{VERSION}'\n";
     print DEF "CODE LOADONCALL\n";
     print DEF "DATA LOADONCALL NONSHARED MULTIPLE\n";
     print DEF "EXPORTS\n  ";
@@ -106,16 +109,28 @@ sub _write_win32 {
 
     open(DEF,">$data->{FILE}.def")
         or croak("Can't create $data->{FILE}.def: $!\n");
-    print DEF "LIBRARY $data->{DLBASE}\n";
-    print DEF "CODE LOADONCALL\n";
-    print DEF "DATA LOADONCALL NONSHARED MULTIPLE\n";
+    # put library name in quotes (it could be a keyword, like 'Alias')
+    if ($Config::Config{'cc'} !~ /^gcc/i) {
+      print DEF "LIBRARY \"$data->{DLBASE}\"\n";
+    }
     print DEF "EXPORTS\n  ";
+    my @syms;
+    # Export public symbols both with and without underscores to
+    # ensure compatibility between DLLs from different compilers
+    # NOTE: DynaLoader itself only uses the names without underscores,
+    # so this is only to cover the case when the extension DLL may be
+    # linked to directly from C. GSAR 97-07-10
     if ($Config::Config{'cc'} =~ /^bcc/i) {
-       for (@{$data->{DL_VARS}}) { $_ = "$_ = _$_" }
-       for (@{$data->{FUNCLIST}}) { $_ = "$_ = _$_" }
+       for (@{$data->{DL_VARS}}, @{$data->{FUNCLIST}}) {
+           push @syms, "_$_", "$_ = _$_";
+       }
     }
-    print DEF join("\n  ",@{$data->{DL_VARS}}, "\n") if @{$data->{DL_VARS}};
-    print DEF join("\n  ",@{$data->{FUNCLIST}}, "\n") if @{$data->{FUNCLIST}};
+    else {
+       for (@{$data->{DL_VARS}}, @{$data->{FUNCLIST}}) {
+           push @syms, "$_", "_$_ = $_";
+       }
+    }
+    print DEF join("\n  ",@syms, "\n") if @syms;
     if (%{$data->{IMPORTS}}) {
         print DEF "IMPORTS\n";
         my ($name, $exp);
@@ -162,13 +177,6 @@ sub _write_vms {
     }
     close OPT;
 
-    # Options file specifying RTLs to which this extension must be linked.
-    # Eventually, the list of libraries will be supplied by a working
-    # extliblist routine.
-    open OPT,'>rtls.opt';
-    print OPT "PerlShr/Share\n";
-    foreach $rtl (split(/\s+/,$Config::Config{'libs'})) { print OPT "$rtl\n"; }
-    close OPT;
 }
 
 1;