X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FExtUtils%2FMM_Unix.pm;h=bb760133809480e6a8a41b0267b60e0b13aa24fd;hb=d71e5ff2e4c4bd22812aaff6cc21c601469f9238;hp=b106ab278418c154bd817af507323a526bf2e3ec;hpb=5c1614949255df89962f262d24ea42500b6e5948;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/ExtUtils/MM_Unix.pm b/lib/ExtUtils/MM_Unix.pm index b106ab2..bb76013 100644 --- a/lib/ExtUtils/MM_Unix.pm +++ b/lib/ExtUtils/MM_Unix.pm @@ -5,7 +5,7 @@ require 5.005_03; # Maybe further back, dunno use strict; use Exporter (); -use Carp (); +use Carp; use Config; use File::Basename qw(basename dirname fileparse); use File::Spec; @@ -19,21 +19,17 @@ use vars qw($VERSION @ISA use ExtUtils::MakeMaker qw($Verbose neatvalue); -$VERSION = '1.30_01'; +$VERSION = '1.33'; require ExtUtils::MM_Any; @ISA = qw(ExtUtils::MM_Any); $Is_OS2 = $^O eq 'os2'; $Is_Mac = $^O eq 'MacOS'; -$Is_Win32 = $^O eq 'MSWin32'; +$Is_Win32 = $^O eq 'MSWin32' || $Config{osname} eq 'NetWare'; $Is_Dos = $^O eq 'dos'; $Is_VOS = $^O eq 'vos'; - -if ($Is_VMS = $^O eq 'VMS') { - require VMS::Filespec; - import VMS::Filespec qw( &vmsify ); -} +$Is_VMS = $^O eq 'VMS'; =head1 NAME @@ -865,8 +861,8 @@ sub dist_test { push @m, q{ disttest : distdir cd $(DISTVNAME) && $(ABSPERLRUN) Makefile.PL - cd $(DISTVNAME) && $(MAKE) - cd $(DISTVNAME) && $(MAKE) test + cd $(DISTVNAME) && $(MAKE) $(PASTHRU) + cd $(DISTVNAME) && $(MAKE) test $(PASTHRU) }; join "", @m; } @@ -1008,7 +1004,7 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists push(@m,' $(RM_F) $@ '); - my $libs = $self->{LDLOADLIBS} || ''; + my $libs = '$(LDLOADLIBS)'; if ($^O eq 'netbsd') { # Use nothing on static perl platforms, and to the flags needed @@ -1017,9 +1013,9 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists # or -R to add paths to the run-time library search path. if ($Config{'useshrplib'}) { if ($Config{'lddlflags'} =~ /-Wl,-R/) { - $libs = '-L$(PERL_INC) -Wl,-R$(INSTALLARCHLIB)/CORE -lperl'; + $libs .= ' -L$(PERL_INC) -Wl,-R$(INSTALLARCHLIB)/CORE -lperl'; } elsif ($Config{'lddlflags'} =~ /-R/) { - $libs = '-L$(PERL_INC) -R$(INSTALLARCHLIB)/CORE -lperl'; + $libs .= ' -L$(PERL_INC) -R$(INSTALLARCHLIB)/CORE -lperl'; } } } @@ -1102,6 +1098,20 @@ in these dirs: 0; # false and not empty } +=item find_tests + + my $test = $mm->find_tests; + +Returns a string suitable for feeding to the shell to return all +tests in t/*.t. + +=cut + +sub find_tests { + my($self) = shift; + return 't/*.t'; +} + =back =head2 Methods to actually produce chunks of text for the Makefile @@ -1126,7 +1136,7 @@ sub fixin { # stolen from the pink Camel book, more or less for my $file (@files) { local(*FIXIN); local(*FIXOUT); - open(FIXIN, $file) or Carp::croak "Can't process '$file': $!"; + open(FIXIN, $file) or croak "Can't process '$file': $!"; local $/ = "\n"; chomp(my $line = ); next unless $line =~ s/^\s*\#!\s*//; # Not a shbang file. @@ -1339,8 +1349,15 @@ sub init_dirscan { # --- File and Directory Lists (.xs .pm .pod etc) # (which includes PARENT_NAME). This is a subtle distinction but one # that's important for nested modules. - $self->{PMLIBDIRS} = ['lib', $self->{BASEEXT}] + if ($Is_VMS) { + # avoid logical name collisions by adding directory syntax + $self->{PMLIBDIRS} = ['./lib', './' . $self->{BASEEXT}] unless $self->{PMLIBDIRS}; + } + else { + $self->{PMLIBDIRS} = ['lib', $self->{BASEEXT}] + unless $self->{PMLIBDIRS}; + } #only existing directories that aren't in $dir are allowed @@ -1556,8 +1573,19 @@ sub init_main { if ($self->{PERL_SRC}){ $self->{PERL_LIB} ||= File::Spec->catdir("$self->{PERL_SRC}","lib"); - $self->{PERL_ARCHLIB} = $self->{PERL_LIB}; - $self->{PERL_INC} = ($Is_Win32) ? File::Spec->catdir($self->{PERL_LIB},"CORE") : $self->{PERL_SRC}; + + if (defined $Cross::platform) { + $self->{PERL_ARCHLIB} = + File::Spec->catdir("$self->{PERL_SRC}","xlib",$Cross::platform); + $self->{PERL_INC} = + File::Spec->catdir("$self->{PERL_SRC}","xlib",$Cross::platform, + $Is_Win32?("CORE"):()); + } + else { + $self->{PERL_ARCHLIB} = $self->{PERL_LIB}; + $self->{PERL_INC} = ($Is_Win32) ? + File::Spec->catdir($self->{PERL_LIB},"CORE") : $self->{PERL_SRC}; + } # catch a situation that has occurred a few times in the past: unless ( @@ -1593,7 +1621,6 @@ from the perl source tree. $self->{PERL_INC} = File::Spec->catdir("$self->{PERL_ARCHLIB}","CORE"); # wild guess for now my $perl_h; - no warnings 'uninitialized' ; if (not -f ($perl_h = File::Spec->catfile($self->{PERL_INC},"perl.h")) and not $old){ # Maybe somebody tries to build an extension with an @@ -1691,17 +1718,21 @@ usually solves this kind of problem. # Determine VERSION and VERSION_FROM ($self->{DISTNAME}=$self->{NAME}) =~ s#(::)#-#g unless $self->{DISTNAME}; if ($self->{VERSION_FROM}){ - $self->{VERSION} = $self->parse_version($self->{VERSION_FROM}) or - Carp::carp "WARNING: Setting VERSION via file '$self->{VERSION_FROM}' failed\n" + $self->{VERSION} = $self->parse_version($self->{VERSION_FROM}); + if( $self->{VERSION} eq 'undef' ) { + carp "WARNING: Setting VERSION via file ". + "'$self->{VERSION_FROM}' failed\n"; + } } # strip blanks - if ($self->{VERSION}) { + if (defined $self->{VERSION}) { $self->{VERSION} =~ s/^\s+//; $self->{VERSION} =~ s/\s+$//; } - - $self->{VERSION} ||= "0.10"; + else { + $self->{VERSION} = ''; + } ($self->{VERSION_SYM} = $self->{VERSION}) =~ s/\W/_/g; $self->{DISTVNAME} = "$self->{DISTNAME}-$self->{VERSION}"; @@ -1807,7 +1838,14 @@ sub init_INST { # you to build directly into, say $Config{privlibexp}. unless ($self->{INST_LIB}){ if ($self->{PERL_CORE}) { - $self->{INST_LIB} = $self->{INST_ARCHLIB} = $self->{PERL_LIB}; + if (defined $Cross::platform) { + $self->{INST_LIB} = $self->{INST_ARCHLIB} = + File::Spec->catdir($self->{PERL_LIB},"..","xlib", + $Cross::platform); + } + else { + $self->{INST_LIB} = $self->{INST_ARCHLIB} = $self->{PERL_LIB}; + } } else { $self->{INST_LIB} = File::Spec->catdir($Curdir,"blib","lib"); } @@ -1842,47 +1880,43 @@ INSTALLDIRS) and PREFIX. sub init_INSTALL { my($self) = shift; - # The user who requests an installation directory explicitly - # should not have to tell us an architecture installation directory - # as well. We look if a directory exists that is named after the - # architecture. If not we take it as a sign that it should be the - # same as the requested installation directory. Otherwise we take - # the found one. - # We do the same thing twice: for privlib/archlib and for sitelib/sitearch - for my $libpair ({l=>"privlib", a=>"archlib"}, - {l=>"sitelib", a=>"sitearch"}) - { - my $lib = "install$libpair->{l}"; - my $Lib = uc $lib; - my $Arch = uc "install$libpair->{a}"; - if( $self->{$Lib} && ! $self->{$Arch} ){ - my($ilib) = $Config{$lib}; - $ilib = VMS::Filespec::unixify($ilib) if $Is_VMS; + $self->init_lib2arch; - $self->prefixify($Arch,$ilib,$self->{$Lib}); + if( $Config{usevendorprefix} ) { + $Config_Override{installvendorman1dir} = + File::Spec->catdir($Config{vendorprefixexp}, 'man', 'man$(MAN1EXT)'); + $Config_Override{installvendorman3dir} = + File::Spec->catdir($Config{vendorprefixexp}, 'man', 'man$(MAN3EXT)'); + } + else { + $Config_Override{installvendorman1dir} = ''; + $Config_Override{installvendorman3dir} = ''; + } - unless (-d $self->{$Arch}) { - print STDOUT "Directory $self->{$Arch} not found\n" - if $Verbose; - $self->{$Arch} = $self->{$Lib}; - } - print STDOUT "Defaulting $Arch to $self->{$Arch}\n" if $Verbose; - } + my $iprefix = $Config{installprefixexp} || $Config{installprefix} || + $Config{prefixexp} || $Config{prefix} || ''; + my $vprefix = $Config{usevendorprefix} ? $Config{vendorprefixexp} : ''; + my $sprefix = $Config{siteprefixexp} || ''; + + # 5.005_03 doesn't have a siteprefix. + $sprefix = $iprefix unless $sprefix; + + # There are often no Config.pm defaults for these, but we can make + # it up. + unless( $Config{installsiteman1dir} ) { + $Config_Override{installsiteman1dir} = + File::Spec->catdir($sprefix, 'man', 'man$(MAN1EXT)'); } - # There are no Config.pm defaults for these. - $Config_Override{installsiteman1dir} = - "$Config{siteprefixexp}/man/man\$(MAN1EXT)"; - $Config_Override{installsiteman3dir} = - "$Config{siteprefixexp}/man/man\$(MAN3EXT)"; - $Config_Override{installvendorman1dir} = - "$Config{vendorprefixexp}/man/man\$(MAN1EXT)"; - $Config_Override{installvendorman3dir} = - "$Config{vendorprefixexp}/man/man\$(MAN3EXT)"; + unless( $Config{installsiteman3dir} ) { + $Config_Override{installsiteman3dir} = + File::Spec->catdir($sprefix, 'man', 'man$(MAN3EXT)'); + } - my $iprefix = $Config{installprefixexp} || ''; - my $vprefix = $Config{vendorprefixexp} || $iprefix; - my $sprefix = $Config{siteprefixexp} || ''; + unless( $Config{installsitebin} ) { + $Config_Override{installsitebin} = + File::Spec->catdir($sprefix, 'bin'); + } my $u_prefix = $self->{PREFIX} || ''; my $u_sprefix = $self->{SITEPREFIX} || $u_prefix; @@ -1904,47 +1938,54 @@ sub init_INSTALL { $manstyle = $self->{LIBSTYLE} eq 'lib/perl5' ? 'lib/perl5' : ''; } + # Some systems, like VOS, set installman*dir to '' if they can't + # read man pages. + for my $num (1, 3) { + $self->{'INSTALLMAN'.$num.'DIR'} ||= 'none' + unless $Config{'installman'.$num.'dir'}; + } + my %bin_layouts = ( bin => { s => $iprefix, - r => '$(PREFIX)', + r => $u_prefix, d => 'bin' }, vendorbin => { s => $vprefix, - r => '$(VENDORPREFIX)', + r => $u_vprefix, d => 'bin' }, sitebin => { s => $sprefix, - r => '$(SITEPREFIX)', + r => $u_sprefix, d => 'bin' }, script => { s => $iprefix, - r => '$(PREFIX)', + r => $u_prefix, d => 'bin' }, ); my %man_layouts = ( man1dir => { s => $iprefix, - r => '$(PREFIX)', + r => $u_prefix, d => 'man/man$(MAN1EXT)', style => $manstyle, }, siteman1dir => { s => $sprefix, - r => '$(SITEPREFIX)', + r => $u_sprefix, d => 'man/man$(MAN1EXT)', style => $manstyle, }, vendorman1dir => { s => $vprefix, - r => '$(VENDORPREFIX)', + r => $u_vprefix, d => 'man/man$(MAN1EXT)', style => $manstyle, }, man3dir => { s => $iprefix, - r => '$(PREFIX)', + r => $u_prefix, d => 'man/man$(MAN3EXT)', style => $manstyle, }, siteman3dir => { s => $sprefix, - r => '$(SITEPREFIX)', + r => $u_sprefix, d => 'man/man$(MAN3EXT)', style => $manstyle, }, vendorman3dir => { s => $vprefix, - r => '$(VENDORPREFIX)', + r => $u_vprefix, d => 'man/man$(MAN3EXT)', style => $manstyle, }, ); @@ -1952,28 +1993,28 @@ sub init_INSTALL { my %lib_layouts = ( privlib => { s => $iprefix, - r => '$(PREFIX)', + r => $u_prefix, d => '', style => $libstyle, }, vendorlib => { s => $vprefix, - r => '$(VENDORPREFIX)', + r => $u_vprefix, d => '', style => $libstyle, }, sitelib => { s => $sprefix, - r => '$(SITEPREFIX)', + r => $u_sprefix, d => 'site_perl', style => $libstyle, }, archlib => { s => $iprefix, - r => '$(PREFIX)', + r => $u_prefix, d => "$version/$arch", style => $libstyle }, vendorarch => { s => $vprefix, - r => '$(VENDORPREFIX)', + r => $u_vprefix, d => "$version/$arch", style => $libstyle }, sitearch => { s => $sprefix, - r => '$(SITEPREFIX)', + r => $u_sprefix, d => "site_perl/$version/$arch", style => $libstyle }, ); @@ -2018,11 +2059,51 @@ sub init_INSTALL { if $Verbose >= 2; } - $self->{PREFIX} ||= $iprefix; - return 1; } +=begin _protected + +=item init_lib2arch + + $mm->init_lib2arch + +=end _protected + +=cut + +sub init_lib2arch { + my($self) = shift; + + # The user who requests an installation directory explicitly + # should not have to tell us an architecture installation directory + # as well. We look if a directory exists that is named after the + # architecture. If not we take it as a sign that it should be the + # same as the requested installation directory. Otherwise we take + # the found one. + for my $libpair ({l=>"privlib", a=>"archlib"}, + {l=>"sitelib", a=>"sitearch"}, + {l=>"vendorlib", a=>"vendorarch"}, + ) + { + my $lib = "install$libpair->{l}"; + my $Lib = uc $lib; + my $Arch = uc "install$libpair->{a}"; + if( $self->{$Lib} && ! $self->{$Arch} ){ + my($ilib) = $Config{$lib}; + + $self->prefixify($Arch,$ilib,$self->{$Lib}); + + unless (-d $self->{$Arch}) { + print STDOUT "Directory $self->{$Arch} not found\n" + if $Verbose; + $self->{$Arch} = $self->{$Lib}; + } + print STDOUT "Defaulting $Arch to $self->{$Arch}\n" if $Verbose; + } + } +} + =item init_PERL @@ -2670,7 +2751,7 @@ q[-e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "], $self->{MAKEFILE}, q[";' \\ -e 'print "Manifying $$m{$$_}\n";' \\ -e 'system(q[$(PERLRUN) $(POD2MAN_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\ --e 'chmod(oct($(PERM_RW))), $$m{$$_} or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}' +-e 'chmod(oct($(PERM_RW)), $$m{$$_}) or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}' ]; push @m, "\nmanifypods : pure_all "; push @m, join " \\\n\t", keys %{$self->{MAN1PODS}}, keys %{$self->{MAN3PODS}}; @@ -2745,7 +2826,8 @@ sub needs_linking { my($self) = shift; my($child,$caller); $caller = (caller(0))[3]; - Carp::confess("Needs_linking called too early") if $caller =~ /^ExtUtils::MakeMaker::/; + confess("Needs_linking called too early") if + $caller =~ /^ExtUtils::MakeMaker::/; return $self->{NEEDS_LINKING} if defined $self->{NEEDS_LINKING}; if ($self->has_link_code or $self->{MAKEAPERL}){ $self->{NEEDS_LINKING} = 1; @@ -2835,13 +2917,14 @@ sub parse_version { $_ }; \$$2 }; - no warnings; + local $^W = 0; $result = eval($eval); warn "Could not eval '$eval' in $parsefile: $@" if $@; - $result = "undef" unless defined $result; last; } close FH; + + $result = "undef" unless defined $result; return $result; } @@ -3085,8 +3168,8 @@ sub ppd { if ($self->{ABSTRACT_FROM}){ $self->{ABSTRACT} = $self->parse_abstract($self->{ABSTRACT_FROM}) or - Carp::carp "WARNING: Setting ABSTRACT via file ". - "'$self->{ABSTRACT_FROM}' failed\n"; + carp "WARNING: Setting ABSTRACT via file ". + "'$self->{ABSTRACT_FROM}' failed\n"; } my ($pack_ver) = join ",", (split (/\./, $self->{VERSION}), (0)x4)[0..3]; @@ -3175,15 +3258,12 @@ sub prefixify { my($self,$var,$sprefix,$rprefix,$default) = @_; my $path = $self->{uc $var} || - $Config_Override{lc $var} || $Config{lc $var}; - - print STDERR " prefixify $var=$path\n" if $Verbose >= 2; - print STDERR " from $sprefix to $rprefix\n" - if $Verbose >= 2; + $Config_Override{lc $var} || $Config{lc $var} || ''; - $path = VMS::Filespec::unixpath($path) if $Is_VMS; + print STDERR " prefixify $var => $path\n" if $Verbose >= 2; + print STDERR " from $sprefix to $rprefix\n" if $Verbose >= 2; - unless( $path =~ s,^\Q$sprefix\E(?=/|\z),$rprefix,s ) { + unless( $path =~ s{^\Q$sprefix\E\b}{$rprefix}s ) { print STDERR " cannot prefix, using default.\n" if $Verbose >= 2; print STDERR " no default!\n" if !$default && $Verbose >= 2; @@ -3506,7 +3586,7 @@ sub test { my($self, %attribs) = @_; my $tests = $attribs{TESTS} || ''; if (!$tests && -d 't') { - $tests = $Is_Win32 ? join(' ', ) : 't/*.t'; + $tests = $self->find_tests; } # note: 'test.pl' name is also hardcoded in init_dirscan() my(@m);