B-C
view release on metacpan or search on metacpan
script/perlcc.PL view on Meta::CPAN
}
}
my ($libperl, $libdir) = ($Config{libperl});
if ($ENV{PERL_CORE}) {
# on mingw we still search for cperl52x.dll not the importlib
# coredir + includedir is ../../lib/CORE on windows
$libdir = "../..";
# $ldopts .= " -L$coredir" if $^O eq 'MSWin32';
} else {
$libdir = $Config{prefix} . "/lib";
$coredir = $ENV{PERL_SRC} || $Config{archlib}."/CORE";
}
if ($extra_libs) {
# splice extra_libs after $Config{ldopts} before @archives
my $i_ldopts = index($ldopts, $ldflags);
if ($ldflags and $i_ldopts >= 0) {
my $l = $i_ldopts + length($ldflags);
$ldopts = substr($ldopts,0,$l).$extra_libs." ".substr($ldopts,$l);
} else {
$ldopts = $extra_libs." ".$ldopts;
}
}
if (exists $Options->{m} or opt('shared')) {
$ldopts = "-shared $ldopts";
}
if (opt('shared')) {
warn "--shared with useshrplib=false might not work\n" unless $useshrplib;
my @plibs = ($libperl, "$coredir/$libperl", "$libdir/$libperl");
if ($libperl !~ /$Config{dlext}$/) {
$libperl = "libperl.".$Config{dlext};
@plibs = ($libperl, "$coredir/$libperl", "$libdir/$libperl");
push @plibs, glob "$coredir/*perl5*".$Config{dlext};
push @plibs, glob "$coredir/*perl.".$Config{dlext};
push @plibs, glob $libdir."/*perl5*.".$Config{dlext};
push @plibs, glob $libdir."/*perl.".$Config{dlext};
push @plibs, glob $Config{bin}."/perl*.".$Config{dlext};
}
for my $lib (@plibs) {
if (-e $lib) {
$ldopts =~ s|-lc?perl |$lib |;
$ldopts =~ s|\s+\S+libc?perl\w+\.a | $lib |;
$ldopts = "$coredir/DynaLoader.o $ldopts" if -e "$coredir/DynaLoader.o";
last;
}
}
} elsif (opt('static')) {
for my $lib ($libperl, "$coredir/$libperl", "$coredir/$libperl",
"$coredir/libperl.a", "$libdir/libperl.a", "$coredir/libcperl.a", "$libdir/libcperl.a") {
if (-e $lib) {
$ldopts =~ s|-lc?perl |$lib |;
$ldopts = "$coredir/DynaLoader.o $ldopts" if -e "$coredir/DynaLoader.o";
last;
}
}
} else {
if ( $useshrplib and -e $libdir."/".$Config{libperl}) {
# debian: only /usr/lib/libperl.so.5.10.1 and broken ExtUtils::Embed::ldopts
$ldopts =~ s|-lperl |$libdir/$Config{libperl} |;
}
if ( $useshrplib and -e $coredir."/".$Config{libperl}) {
# help cygwin debugging, and workaround wrong debian linker prefs (/usr/lib before given -L)
$ldopts =~ s|-lperl |$coredir/$Config{libperl} |;
}
}
unless ( $command =~ m{( -lc?perl|/CORE\/libperl)} ) {
if ($Config{usecperl} and $libperl =~ /libcperl/) {
$ldopts .= " -lcperl";
} else {
$ldopts .= " -lperl";
}
$ldopts .= " $Config{libs}" if $ENV{PERL_CORE}; # no -L found at all
}
$command .= " ".$ldopts;
$command .= $B::C::Config::extra_libs if $B::C::Config::extra_libs;
vprint 3, "Calling $Config{cc} $command";
vsystem("$Config{cc} $command");
}
# Where Perl is, and which include path to give it.
sub yclept {
my $command = $^X =~ m/\s/ ? qq{"$^X"} : $^X;
# DWIM the -I to be Perl, not C, include directories.
if (opt('I') && $Backend eq "Bytecode") {
my $incdir = opt('I');
if ($incdir) {
if (ref $incdir ne 'ARRAY') {
$incdir = ($incdir);
}
for (@$incdir) {
if (-d $_) {
push @INC, $_;
} else {
warn "$0: Include directory $_ not found, skipping\n";
}
}
}
}
my %OINC;
$OINC{$Config{$_}}++ for (qw(privlib archlib sitelib sitearch vendorlib vendorarch));
$OINC{'.'}++ unless ${^TAINT};
$OINC{$_}++ for split ':', $Config{otherlibdirs};
if (my $incver = $Config{inc_version_list}) {
my $incpre = dirname($Config{sitelib});
$OINC{$_}++ for map { File::Spec->catdir($incpre,$_) } split(' ',$incver);
$OINC{$incpre}++;
}
for my $i (@INC) {
my $inc = $i =~ m/\s/ ? qq{"$i"} : $i;
$command .= " -I$inc" unless $OINC{$i}; # omit internal @INC dirs
}
return $command;
}
# Use B::Stash to find additional modules and stuff.
{
my $_stash;
sub grab_stash {
warn "already called grab_stash once" if $_stash;
( run in 0.485 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )