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;
