use Config;
use File::Basename qw(&basename &dirname);
+use File::Spec;
use Cwd;
# List explicitly here the variables you want Configure to
{
my ( $backend, $generated_file, $file, $final_output ) = @_;
my $return;
+ my $output_switch = "o";
+ my $max_line_len = '';
local($") = " -I";
- open(GENFILE, "> $generated_file") || die "Can't open $generated_file: $!";
+ if ($^O eq 'MSWin32' && $backend =~ /^CC?$/ && $Config{cc} =~ /^cl/i) {
+ $max_line_len = '-l2000,';
+ }
if ($backend eq "Bytecode")
{
require ByteLoader;
+ open(GENFILE, "> $generated_file") || die "Can't open $generated_file: $!";
+ binmode GENFILE;
print GENFILE "#!$^X\n" if @_ == 3;
print GENFILE "use ByteLoader $ByteLoader::VERSION;\n";
- }
+ close(GENFILE);
- close(GENFILE);
+ $output_switch ="a";
+ }
if (@_ == 3) # compiling a program
{
chmod $generated_file, 0777 & ~umask if $backend eq "Bytecode";
-
+ my $null=File::Spec->devnull;
_print( "$^X -I@INC -MB::Stash -c $file\n", 36);
- my $stash=`$^X -I@INC -MB::Stash -c $file 2>/dev/null|tail -1`;
+ my @stash=`$^X -I@INC -MB::Stash -c $file 2>$null`;
+ my $stash=$stash[-1];
chomp $stash;
- _print( "$^X -I@INC -MO=$backend,$stash $file\n", 36);
- $return = _run("$^X -I@INC -MO=$backend,$stash $file >> $generated_file", 9);
+ _print( "$^X -I@INC -MO=$backend,$max_line_len$stash $file\n", 36);
+ $return = _run("$^X -I@INC -MO=$backend,$max_line_len$stash,-$output_switch$generated_file $file", 9);
$return;
}
else # compiling a shared object
{
_print(
- "$^X -I@INC -MO=$backend,-m$final_output $file\n", 36);
+ "$^X -I@INC -MO=$backend,$max_line_len-m$final_output $file\n", 36);
$return =
- _run("$^X -I@INC -MO=$backend,-m$final_output $file >> $generated_file", 9);
+ _run("$^X -I@INC -MO=$backend,$max_line_len-m$final_output,-$output_switch$generated_file $file ", 9);
$return;
}
}
my $sourceprog = shift(@args);
my ($libdir, $incdir);
+ my $L = '-L';
+ $L = '-libpath:' if $^O eq 'MSWin32' && $Config{cc} =~ /^cl/i;
+
if (-d "$Config{installarchlib}/CORE")
{
- $libdir = "-L$Config{installarchlib}/CORE";
+ $libdir = "$L$Config{installarchlib}/CORE";
$incdir = "-I$Config{installarchlib}/CORE";
}
else
{
- $libdir = "-L.. -L.";
+ $libdir = "$L.. $L.";
$incdir = "-I.. -I.";
}
- $libdir .= " -L$options->{L}" if (defined($options->{L}));
+ $libdir .= " $L$options->{L}" if (defined($options->{L}));
$incdir .= " -I$options->{L}" if (defined($options->{L}));
my $linkargs = '';
if (!grep(/^-[cS]$/, @args))
{
my $lperl = $^O eq 'os2' ? '-llibperl'
- : $^O eq 'MSWin32' ? "$Config{archlibexp}\\CORE\\perl.lib"
+ : $^O eq 'MSWin32' ? "$Config{archlibexp}\\CORE\\$Config{libperl}"
: '-lperl';
+ ($lperl = $Config{libperl}) =~ s/lib(.*)\Q$Config{_a}\E/-l$1/
+ if($^O eq 'cygwin');
$optimize = $Config{'optimize'} =~ /-O\d/ ? '' : $Config{'optimize'};
$flags = $type eq 'dynamic' ? $Config{lddlflags} : $Config{ldflags};
$linkargs = "$flags $libdir $lperl @Config{libs}";
+ $linkargs = "/link $linkargs" if $^O eq 'MSWin32' && $Config{cc} =~ /^cl/i;
}
my $libs = _getSharedObjects($sourceprog);
+ @$libs = grep { !(/DynaLoader\.a$/ && ($dynaloader = $_)) } @$libs
+ if($^O eq 'cygwin');
- my $cccmd = "$Config{cc} $Config{ccflags} $optimize $incdir "
+ my $ccflags = $Config{ccflags};
+ $ccflags .= ' -DUSEIMPORTLIB' if $^O eq 'cygwin';
+ my $cccmd = "$Config{cc} $ccflags $optimize $incdir "
."@args $dynaloader $linkargs @$libs";
_print ("$cccmd\n", 36);
my ($tmpprog);
($tmpprog = $sourceprog) =~ s"(.*)[\\/](.*)"$2";
- my $tempdir;
+ my $tempdir= File::Spec->tmpdir;
- if ($Config{'osname'} eq 'MSWin32')
- {
- $tempdir = $ENV{TEMP};
- $tempdir =~ s[\\][/]g;
- }
- else
- {
- $tempdir = "/tmp";
- }
$tmpfile = "$tempdir/$tmpprog.tst";
$incfile = "$tempdir/$tmpprog.val";
my ($relabs, $relshared);
my ($prefix);
my $return;
-
+ my $sharedextension = $^O =~ /MSWin32|cygwin|os2/i
+ ? $Config{_a} : ".$Config{so}";
($prefix = $file) =~ s"(.*)\.pm"$1";
my ($tmp, $modname) = ($prefix =~ m"(?:(.*)[\\/]){0,1}(.*)"s);
- $relshared = "$pathsep$prefix$pathsep$modname.$Config{so}";
+ $relshared = "$pathsep$prefix$pathsep$modname$sharedextension";
$relabs = "$pathsep$prefix$pathsep$modname$Config{_a}";
# HACK . WHY DOES _a HAVE A '.'
# AND so HAVE NONE??
one file the names clash)\n");
}
- if ($options->{'e'} && ($options->{'sav'} || $options->{'gen'}) && ò0
+ if ($options->{'e'} && ($options->{'sav'} || $options->{'gen'}) &&
!$options->{'C'})
{
push(@errors,
sub _interruptrun
{
my ($command) = @_;
- my $pid = open (FD, "$command 2|");
+ my $pid = open (FD, "$command |");
local($SIG{HUP}) = sub {
# kill 9, $pid + 1;