123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #!perl
- use Config;
- my $coredir = $ENV{PERL_SRC} || "$Config{archlib}/CORE"; # XXX was installarchlib
- my $libdir = "$Config{prefix}/lib";
- my $useshrplib = $Config{useshrplib};
- my $libs = $Config{libs};
- my $linkargs;
- my $quiet++ if $ARGV[0] eq '-q';
- shift if $quiet;
- my $debug++ if $ARGV[0] eq '-d';
- shift if $debug;
- eval { require B::C::Flags; };
- if (grep(/^-[cES]$/, @ARGV)) { # compile-only with -c -E or -S
- ;
- } elsif (grep(/^-Bdynamic$/, @ARGV)) { # force dynamic linking with -Bdynamic
- use ExtUtils::Embed;
- @ARGV = grep{ !/^-Bdynamic$/o } @ARGV;
- $linkargs = ldopts;
- } elsif (grep(/^-Bstatic$/, @ARGV)) { # force static linking with -Bstatic
- use ExtUtils::Embed;
- @ARGV = grep{ !/^-Bstatic$/o } @ARGV;
- $linkargs = ldopts("-std");
- for my $lib ("$libdir/libperl.a", "$coredir/libperl.a") {
- if (-e $lib) {
- $linkargs =~ s|-lperl |$lib |;
- push @ARGV, ("$coredir/DynaLoader.o") if -e "$coredir/DynaLoader.o";
- #$linkargs .= " $coredir/Win32CORE.o" if $^O eq 'cygwin' and -e "$coredir/Win32CORE.o";
- last;
- }
- }
- } elsif (-e "$coredir/$Config{libperl}" and $Config{libperl} !~ /\.(dll|so)$/) {
- $linkargs = ldopts("-std");
- } elsif ( $useshrplib and -e "$libdir/$Config{libperl}") {
- # debian: /usr/lib/libperl.so.5.10.1 and broken ExtUtils::Embed::ldopts
- use ExtUtils::Embed;
- $linkargs = ldopts('-std');
- $linkargs =~ s|-lperl |$libdir/$Config{libperl} |;
- } elsif ( $useshrplib and -e "$coredir/$Config{libperl}") {
- # just help cygwin debugging
- use ExtUtils::Embed;
- $linkargs = ldopts('-std');
- $linkargs =~ s|-lperl |$coredir/$Config{libperl} |;
- } else { # try dynamic lib if no static lib exists
- use ExtUtils::Embed;
- @ARGV = grep{ !/^-Bdynamic$/o } @ARGV;
- $linkargs = ldopts('-std');
- }
- # Note (probably harmless): No library found for -lnsl
- $linkargs = $B::C::Flags::extra_libs . " " . $linkargs;
- $linkargs .= " $libs" if index($linkargs,$libs) == -1;
- sub cc_harness_msvc {
- my @ARGV = @_;
- use ExtUtils::Embed ();
- my $obj = "${Output}.obj";
- my $compile = ExtUtils::Embed::ccopts." -c -Fo$obj @ARGV ";
- my $link = "-out:$Output $obj";
- $compile .= " -DHAVE_INDEPENDENT_COMALLOC " if $B::C::Flags::have_independent_comalloc;
- $compile .= $B::C::Flags::extra_cflags;
- $compile .= " -I".$_ for split /\s+/, opt(I);
- $link .= " -libpath:".$_ for split /\s+/, opt(L);
- # TODO: -shared,-static,-sharedxs,-staticxs
- $link .= $B::C::Flags::extra_libs;
- if ($stash) {
- my @mods = split /-?u /, $stash;
- $link .= " ".ExtUtils::Embed::ldopts("-std", \@mods);
- } else {
- $link .= " ".ExtUtils::Embed::ldopts("-std");
- }
- $link .= " perl5$Config{PERL_VERSION}.lib kernel32.lib msvcrt.lib";
- print "running $Config{cc} $compile" unless $quiet;
- system("$Config{cc} $compile");
- print "running $Config{ld} $link" unless $quiet;
- system("$Config{ld} $link");
- }
- if ($^O =~ m/^MSWin/ && $Config{cc} =~ m/^cl/i) {
- cc_harness_msvc(@ARGV);
- exit;
- }
- # ActivePerl 5.10.0.1004 claims to use MSVC6 but used MSVC8
- #if ($Config::Config{ccversion} eq '12.0.8804' and $Config::Config{cc} eq 'cl') {
- # $linkargs =~ s/ -opt:ref,icf//;
- #}
- my $ccflags = $Config{ccflags};
- if ($ccflags =~ /-fstack-protector/ and $linkargs =~ /-fstack-protector/) {
- $linkargs =~ s/-fstack-protector//;
- }
- #-pedantic -Wextra -Wconversion
- $ccflags .= " -ansi -Wall -Wshadow -Wcast-qual -Wwrite-strings"
- if $debug and $Config{cc} =~ /gcc/ and !$quiet;
- $ccflags .= " --no-warn -Wl,--warn-once"
- if $Config{cc} =~ /gcc/ and $quiet and $^O ne 'darwin';
- $ccflags .= " -DHAVE_INDEPENDENT_COMALLOC" if $B::C::Flags::have_independent_comalloc;
- $ccflags .= $B::C::Flags::extra_cflags;
- my $cccmd = "$Config{cc} $ccflags -I$coredir @ARGV $linkargs";
- print "$cccmd\n" unless $quiet;
- exec $cccmd;
|