On 11/18/2003 10:36 AM, James.FitzGibbon wrote:
> Perhaps what is needed is to update EU::Mksymlists to both export the
> platform-specific
> extensions as constants and return the canonical path to the written
> file back to it's
> caller so that link_c() in M::B can act more intelligently.
>

Mksymlists() now returns the name of the file written. (Derived from the value of the FILE parameter plus an OS specific extension.)

On 11/18/2003 10:51 PM, Michael G Schwern wrote:
On Tue, Nov 18, 2003 at 09:08:38PM -0500, Randy W. Sims wrote:

I've updated James' update of my patch ;) There were some Windows problems. I think ExtUtils::Mksymlists is buggy on Windows; it dies if


This would not surprise me.

Fixed reference to undefined variable on MSWin32 and OS2.


Randy.
--- Mksymlists.pm.orig  2003-05-28 17:41:22.000000000 -0400
+++ Mksymlists.pm       2003-11-20 21:36:16.000000000 -0500
@@ -50,25 +50,30 @@
         $spec{DLBASE} = DynaLoader::mod2fname([ split(/::/,$spec{NAME}) ]);
     }
 
-    if    ($osname eq 'aix') { _write_aix(\%spec); }
-    elsif ($osname eq 'MacOS'){ _write_aix(\%spec) }
-    elsif ($osname eq 'VMS') { _write_vms(\%spec) }
-    elsif ($osname eq 'os2') { _write_os2(\%spec) }
-    elsif ($osname eq 'MSWin32') { _write_win32(\%spec) }
+    my($sym_file);
+    if    ($osname eq 'aix'  )   { $sym_file = _write_aix(\%spec)   }
+    elsif ($osname eq 'MacOS')   { $sym_file = _write_aix(\%spec)   }
+    elsif ($osname eq 'VMS'  )   { $sym_file = _write_vms(\%spec)   }
+    elsif ($osname eq 'os2'  )   { $sym_file = _write_os2(\%spec)   }
+    elsif ($osname eq 'MSWin32') { $sym_file = _write_win32(\%spec) }
     else { croak("Don't know how to create linker option file for $osname\n"); }
+    return $sym_file;
 }
 
 
 sub _write_aix {
     my($data) = @_;
 
-    rename "$data->{FILE}.exp", "$data->{FILE}.exp_old";
+    my($sym_file) = $data->{FILE};
+    rename "$sym_file.exp", "$sym_file.exp_old";
 
-    open(EXP,">$data->{FILE}.exp")
-        or croak("Can't create $data->{FILE}.exp: $!\n");
+    open(EXP,">$sym_file.exp")
+        or croak("Can't create $sym_file.exp: $!\n");
     print EXP join("\n",@{$data->{DL_VARS}}, "\n") if @{$data->{DL_VARS}};
     print EXP join("\n",@{$data->{FUNCLIST}}, "\n") if @{$data->{FUNCLIST}};
     close EXP;
+
+    return "$sym_file.exp";
 }
 
 
@@ -93,10 +98,11 @@
     }
     $comment = "$comment (Perl-config: $Config{config_args})";
     $comment = substr($comment, 0, 200) . "...)" if length $comment > 203;
-    rename "$data->{FILE}.def", "$data->{FILE}_def.old";
+    my($sym_file) = $data->{FILE};
+    rename "$sym_file.def", "$sym_file_def.old";
 
-    open(DEF,">$data->{FILE}.def")
-        or croak("Can't create $data->{FILE}.def: $!\n");
+    open(DEF,">$sym_file.def")
+        or croak("Can't create $sym_file.def: $!\n");
     print DEF "LIBRARY '$data->{DLBASE}' INITINSTANCE TERMINSTANCE\n";
     print DEF "DESCRIPTION '[EMAIL PROTECTED]:$data->{VERSION}#\@ $comment'\n";
     print DEF "CODE LOADONCALL\n";
@@ -104,7 +110,7 @@
     print DEF "EXPORTS\n  ";
     print DEF join("\n  ",@{$data->{DL_VARS}}, "\n") if @{$data->{DL_VARS}};
     print DEF join("\n  ",@{$data->{FUNCLIST}}, "\n") if @{$data->{FUNCLIST}};
-    if (%{$data->{IMPORTS}}) {
+    if (defined $data->{IMPORTS} && %{$data->{IMPORTS}}) {
         print DEF "IMPORTS\n";
        my ($name, $exp);
        while (($name, $exp)= each %{$data->{IMPORTS}}) {
@@ -112,6 +118,8 @@
        }
     }
     close DEF;
+
+    return "$sym_file.def";
 }
 
 sub _write_win32 {
@@ -122,10 +130,12 @@
         ($data->{DLBASE} = $data->{NAME}) =~ s/.*:://;
         $data->{DLBASE} = substr($data->{DLBASE},0,7) . '_';
     }
-    rename "$data->{FILE}.def", "$data->{FILE}_def.old";
 
-    open(DEF,">$data->{FILE}.def")
-        or croak("Can't create $data->{FILE}.def: $!\n");
+    my($sym_file) = $data->{FILE};
+    rename "$sym_file.def", "${sym_file}_def.old";
+
+    open(DEF,">$sym_file.def")
+        or croak("Can't create $sym_file.def: $!\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";
@@ -148,7 +158,7 @@
        }
     }
     print DEF join("\n  ",@syms, "\n") if @syms;
-    if (%{$data->{IMPORTS}}) {
+    if (defined $data->{IMPORTS} && %{$data->{IMPORTS}}) {
         print DEF "IMPORTS\n";
         my ($name, $exp);
         while (($name, $exp)= each %{$data->{IMPORTS}}) {
@@ -156,6 +166,8 @@
         }
     }
     close DEF;
+
+    return "$sym_file.def";
 }
 
 
@@ -169,10 +181,11 @@
     my($set) = new ExtUtils::XSSymSet;
     my($sym);
 
-    rename "$data->{FILE}.opt", "$data->{FILE}.opt_old";
+    my($sym_file) = $data->{FILE};
+    rename "$sym_file.opt", "$sym_file.opt_old";
 
-    open(OPT,">$data->{FILE}.opt")
-        or croak("Can't create $data->{FILE}.opt: $!\n");
+    open(OPT,">$sym_file.opt")
+        or croak("Can't create $sym_file.opt: $!\n");
 
     # Options file declaring universal symbols
     # Used when linking shareable image for dynamic extension,
@@ -196,6 +209,7 @@
     }
     close OPT;
 
+    return "$sym_file.opt";
 }
 
 1;

Reply via email to