use strict;
use Exporter ();
+use Carp;
use Config;
use File::Basename qw(basename dirname fileparse);
use File::Spec;
use strict;
use vars qw($VERSION @ISA
$Is_Mac $Is_OS2 $Is_VMS $Is_Win32 $Is_Dos $Is_VOS
- $Verbose %pm %static $Xsubpp_Version);
+ $Verbose %pm %static $Xsubpp_Version
+ %Config_Override
+ );
use ExtUtils::MakeMaker qw($Verbose neatvalue);
-$VERSION = '1.18_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
sub maybe_command_in_dirs;
sub needs_linking;
sub nicetext;
+sub parse_abstract;
sub parse_version;
sub pasthru;
sub perl_archive;
sub perl_script;
sub perldepend;
sub pm_to_blib;
+sub ppd;
sub post_constants;
sub post_initialize;
sub postamble;
-sub ppd;
sub prefixify;
sub processPL;
sub quote_paren;
sub xs_o;
sub xsubpp_version;
-use SelfLoader;
+#use SelfLoader;
# SelfLoader not smart enough to avoid autoloading DESTROY
sub DESTROY { }
-1;
+#1;
-__DATA__
+#__DATA__
=head2 SelfLoaded methods
my($name);
( $name = $self->{NAME} . "_cflags" ) =~ s/:/_/g ;
- if ($prog = $Config::Config{$name}) {
+ if ($prog = $Config{$name}) {
# Expand hints for this extension via the shell
print STDOUT "Processing $name hint:\n" if $Verbose;
my(@o)=`cc=\"$cflags{cc}\"
}
for (qw(ccflags optimize perltype)) {
+ $cflags{$_} ||= '';
$cflags{$_} =~ s/^\s+//;
$cflags{$_} =~ s/\s+/ /g;
$cflags{$_} =~ s/\s+$//;
- $self->{uc $_} ||= $cflags{$_}
+ $self->{uc $_} ||= $cflags{$_};
}
if ($self->{POLLUTE}) {
for $tmp (qw/
AR_STATIC_ARGS NAME DISTNAME NAME_SYM VERSION
- VERSION_SYM XS_VERSION INST_BIN INST_EXE INST_LIB
- INST_ARCHLIB INST_SCRIPT PREFIX INSTALLDIRS
- INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB
- INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
- PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
+ VERSION_SYM XS_VERSION
+ INST_ARCHLIB INST_SCRIPT INST_BIN INST_LIB
+ INSTALLDIRS
+ PREFIX SITEPREFIX VENDORPREFIX
+ INSTALLPRIVLIB INSTALLSITELIB INSTALLVENDORLIB
+ INSTALLARCHLIB INSTALLSITEARCH INSTALLVENDORARCH
+ INSTALLBIN INSTALLSITEBIN INSTALLVENDORBIN INSTALLSCRIPT
+ PERL_LIB PERL_ARCHLIB
+ SITELIBEXP SITEARCHEXP
+ LIBPERL_A MYEXTLIB
FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
PERL_INC PERL FULLPERL PERLRUN FULLPERLRUN PERLRUNINST
- FULLPERLRUNINST TEST_LIBS
+ FULLPERLRUNINST ABSPERL ABSPERLRUN ABSPERLRUNINST
FULL_AR PERL_CORE NOOP NOECHO
- / ) {
+ / )
+ {
next unless defined $self->{$tmp};
-# VOS pathnames can have sharp signs in them; escape them so
-# make doesn't think it is a comment-start character.
- if ($Is_VOS) {$self->{$tmp} =~ s/#/\\#/g};
+
+ # pathnames can have sharp signs in them; escape them so
+ # make doesn't think it is a comment-start character.
+ $self->{$tmp} =~ s/#/\\#/g;
push @m, "$tmp = $self->{$tmp}\n";
}
for $tmp (qw/
FULLEXT BASEEXT PARENT_NAME DLBASE VERSION_FROM INC DEFINE OBJECT
LDFROM LINKTYPE PM_FILTER
- / ) {
+ / )
+ {
next unless defined $self->{$tmp};
push @m, "$tmp = $self->{$tmp}\n";
}
";
for $tmp (qw/
- INST_MAN1DIR INSTALLMAN1DIR MAN1EXT
- INST_MAN3DIR INSTALLMAN3DIR MAN3EXT
- /) {
+ INST_MAN1DIR MAN1EXT
+ INSTALLMAN1DIR INSTALLSITEMAN1DIR INSTALLVENDORMAN1DIR
+ INST_MAN3DIR MAN3EXT
+ INSTALLMAN3DIR INSTALLSITEMAN3DIR INSTALLVENDORMAN3DIR
+ /)
+ {
next unless defined $self->{$tmp};
push @m, "$tmp = $self->{$tmp}\n";
}
for $tmp (qw(
PERM_RW PERM_RWX
)
- ) {
+ )
+ {
my $method = lc($tmp);
# warn "self[$self] method[$method]";
push @m, "$tmp = ", $self->$method(), "\n";
my(@m,$key,$val);
while (($key,$val) = each %attribs){
last unless defined $key;
- push @m, "$key: $val\n";
+ push @m, "$key : $val\n";
}
join "", @m;
}
my @m;
push @m, q{
disttest : distdir
- cd $(DISTVNAME) && $(PERLRUN) Makefile.PL
- cd $(DISTVNAME) && $(MAKE)
- cd $(DISTVNAME) && $(MAKE) test
+ cd $(DISTVNAME) && $(ABSPERLRUN) Makefile.PL
+ cd $(DISTVNAME) && $(MAKE) $(PASTHRU)
+ cd $(DISTVNAME) && $(MAKE) test $(PASTHRU)
};
join "", @m;
}
$ldfrom = "-all $ldfrom -none" if ($^O eq 'dec_osf');
# The IRIX linker doesn't use LD_RUN_PATH
- my $ldrun = qq{-rpath "$self->{LD_RUN_PATH}"}
- if ($^O eq 'irix' && $self->{LD_RUN_PATH});
+ my $ldrun = $^O eq 'irix' && $self->{LD_RUN_PATH} ?
+ qq{-rpath "$self->{LD_RUN_PATH}"} : '';
# For example in AIX the shared objects/libraries from previous builds
# linger quite a while in the shared dynalinker cache even when nobody
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
# 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';
}
}
}
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
=item fixin
-Inserts the sharpbang or equivalent magic number to a script
+ $mm->fixin(@files);
+
+Inserts the sharpbang or equivalent magic number to a set of @files.
=cut
sub fixin { # stolen from the pink Camel book, more or less
- my($self,@files) = @_;
- my($does_shbang) = $Config::Config{'sharpbang'} =~ /^\s*\#\!/;
- my($file,$interpreter);
- for $file (@files) {
+ my($self, @files) = @_;
+
+ my($does_shbang) = $Config{'sharpbang'} =~ /^\s*\#\!/;
+ 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 = <FIXIN>);
next unless $line =~ s/^\s*\#!\s*//; # Not a shbang file.
$cmd =~ s!^.*/!!;
# Now look (in reverse) for interpreter in absolute PATH (unless perl).
+ my $interpreter;
if ($cmd eq "perl") {
if ($Config{startperl} =~ m,^\#!.*/perl,) {
$interpreter = $Config{startperl};
close FIXIN;
close FIXOUT;
- # can't rename/chmod open files on some DOSISH platforms
-
- # If they override perm_rwx, we won't notice it during fixin,
- # because fixin is run through a new instance of MakeMaker.
- # That is why we must run another CHMOD later.
- $mode = oct($self->perm_rwx) unless $dev;
- chmod $mode, $file;
-
unless ( rename($file, "$file.bak") ) {
warn "Can't rename $file to $file.bak: $!";
next;
unlink "$file.bak";
} continue {
close(FIXIN) if fileno(FIXIN);
- chmod oct($self->perm_rwx), $file or
- die "Can't reset permissions for $file: $!\n";
system("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';;
}
}
my($self) = @_;
my($name, %dir, %xs, %c, %h, %ignore, %pl_files, %manifypods);
local(%pm); #the sub in find() has to see this hash
- @ignore{qw(Makefile.PL test.pl)} = (1,1);
- $ignore{'makefile.pl'} = 1 if $Is_VMS;
+
+ @ignore{qw(Makefile.PL test.pl t)} = (1,1,1);
+
+ # ignore the distdir
+ $Is_VMS ? $ignore{"$self->{DISTVNAME}.dir"} = 1
+ : $ignore{$self->{DISTVNAME}} = 1;
+
+ @ignore{map lc, keys %ignore} = values %ignore if $Is_VMS;
+
foreach $name ($self->lsdir($Curdir)){
next if $name =~ /\#/;
next if $name eq $Curdir or $name eq $Updir or $ignore{$name};
# (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
print "Searching PMLIBDIRS: @{$self->{PMLIBDIRS}}\n"
if ($Verbose >= 2);
require File::Find;
- File::Find::find(sub {
- if (-d $_){
- if ($_ eq "CVS" || $_ eq "RCS"){
- $File::Find::prune = 1;
- }
- return;
- }
- return if /\#/;
+ File::Find::find(sub {
+ if (-d $_){
+ if ($_ eq "CVS" || $_ eq "RCS"){
+ $File::Find::prune = 1;
+ }
+ return;
+ }
+ return if /\#/;
return if /~$/; # emacs temp files
my $path = $File::Find::name;
foreach my $man (qw(MAN1 MAN3)) {
unless ($self->{"${man}PODS"}) {
$self->{"${man}PODS"} = {};
- $pods{$man} = 1 unless $self->{"INST_${man}DIR"} =~ /^(none|\s*)$/;
+ $pods{$man} = 1 unless
+ $self->{"INSTALL${man}DIR"} =~ /^(none|\s*)$/;
}
}
my($ispod)=0;
if (open(FH,"<$name")) {
while (<FH>) {
- if (/^=head1\s+\w+/) {
+ if (/^=\w/) {
$ispod=1;
last;
}
my($ispod)=0;
if (open(FH,"<$name")) {
while (<FH>) {
- if (/^=head1\s+\w+/) {
+ if (/^=\w/) {
$ispod=1;
last;
}
}
# Remove "Configure.pm" and similar, if it's not the only pod listed
- # To force inclusion, just name it "Configure.pod", or override MAN3PODS
+ # To force inclusion, just name it "Configure.pod", or override
+ # MAN3PODS
foreach $name (keys %manifypods) {
if ($self->{PERL_CORE} and $name =~ /(config|setup).*\.pm/is) {
delete $manifypods{$name};
EXE_EXT, FULLEXT, FULLPERL, FULLPERLRUN, FULLPERLRUNINST, INST_*,
INSTALL*, INSTALLDIRS, LD, LIB_EXT, LIBPERL_A, MAP_TARGET, NAME,
OBJ_EXT, PARENT_NAME, PERL, PERL_ARCHLIB, PERL_INC, PERL_LIB,
-PERL_SRC, PERLRUN, PERLRUNINST, PREFIX, TEST_LIBS, VERSION,
+PERL_SRC, PERLRUN, PERLRUNINST, PREFIX, VERSION,
VERSION_FROM, VERSION_SYM, XS_VERSION.
=cut
}
($self->{PARENT_NAME}, $self->{BASEEXT}) = $self->{NAME} =~ m!(?:([\w:]+)::)?(\w+)\z! ;
+ $self->{PARENT_NAME} ||= '';
if (defined &DynaLoader::mod2fname) {
# As of 5.001m, dl_os2 appends '_'
}
- # --- Initialize PERL_LIB, INST_LIB, PERL_SRC
+ # --- Initialize PERL_LIB, PERL_SRC
# *Real* information: where did we get these two from? ...
my $inc_config_dir = dirname($INC{'Config.pm'});
foreach $dir ($Updir,
File::Spec->catdir($Updir,$Updir),
File::Spec->catdir($Updir,$Updir,$Updir),
- File::Spec->catdir($Updir,$Updir,$Updir,$Updir))
+ File::Spec->catdir($Updir,$Updir,$Updir,$Updir),
+ File::Spec->catdir($Updir,$Updir,$Updir,$Updir,$Updir))
{
if (
- -f File::Spec->catfile($dir,"config.sh")
+ -f File::Spec->catfile($dir,"config_h.SH")
&&
-f File::Spec->catfile($dir,"perl.h")
&&
}
}
}
+
+ warn "PERL_CORE is set but I can't find your PERL_SRC!\n" if
+ $self->{PERL_CORE} and !$self->{PERL_SRC};
+
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 (
} else {
# we should also consider $ENV{PERL5LIB} here
my $old = $self->{PERL_LIB} || $self->{PERL_ARCHLIB} || $self->{PERL_INC};
- $self->{PERL_LIB} ||= $Config::Config{privlibexp};
- $self->{PERL_ARCHLIB} ||= $Config::Config{archlibexp};
+ $self->{PERL_LIB} ||= $Config{privlibexp};
+ $self->{PERL_ARCHLIB} ||= $Config{archlibexp};
$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
# MakeMaker.
$self->{INSTALLDIRS} ||= "site";
- # INST_LIB typically pre-set if building an extension after
- # perl has been built and installed. Setting INST_LIB allows
- # you to build directly into, say $Config::Config{privlibexp}.
- unless ($self->{INST_LIB}){
+ $self->init_INST;
+ $self->init_INSTALL;
- ##### XXXXX We have to change this nonsense
-
- if (defined $self->{PERL_SRC} and $self->{INSTALLDIRS} eq "perl") {
- $self->{INST_LIB} = $self->{INST_ARCHLIB} = $self->{PERL_LIB};
- } else {
- $self->{INST_LIB} = File::Spec->catdir($Curdir,"blib","lib");
- }
- }
- $self->{INST_ARCHLIB} ||= File::Spec->catdir($Curdir,"blib","arch");
- $self->{INST_BIN} ||= File::Spec->catdir($Curdir,'blib','bin');
-
- # We need to set up INST_LIBDIR before init_libscan() for VMS
- my @parentdir = split(/::/, $self->{PARENT_NAME});
- $self->{INST_LIBDIR} = File::Spec->catdir($self->{INST_LIB},@parentdir);
- $self->{INST_ARCHLIBDIR} = File::Spec->catdir($self->{INST_ARCHLIB},@parentdir);
- $self->{INST_AUTODIR} = File::Spec->catdir($self->{INST_LIB},'auto',$self->{FULLEXT});
- $self->{INST_ARCHAUTODIR} = File::Spec->catdir($self->{INST_ARCHLIB},'auto',$self->{FULLEXT});
-
- # INST_EXE is deprecated, should go away March '97
- $self->{INST_EXE} ||= File::Spec->catdir($Curdir,'blib','script');
- $self->{INST_SCRIPT} ||= File::Spec->catdir($Curdir,'blib','script');
-
- # 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
- my($libpair);
- for $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->prefixify($Arch,$ilib,$self->{$Lib});
-
- unless (-d $self->{$Arch}) {
- print STDOUT "Directory $self->{$Arch} not found, thusly\n" if $Verbose;
- $self->{$Arch} = $self->{$Lib};
- }
- print STDOUT "Defaulting $Arch to $self->{$Arch}\n" if $Verbose;
- }
- }
-
- # we have to look at the relation between $Config{prefix} and the
- # requested values. We're going to set the $Config{prefix} part of
- # all the installation path variables to literally $(PREFIX), so
- # the user can still say make PREFIX=foo
- my($configure_prefix) = $Config{'prefix'};
- $configure_prefix = VMS::Filespec::unixify($configure_prefix) if $Is_VMS;
- $self->{PREFIX} ||= $configure_prefix;
-
-
- my($install_variable,$search_prefix,$replace_prefix);
-
- # If the prefix contains perl, Configure shapes the tree as follows:
- # perlprefix/lib/ INSTALLPRIVLIB
- # perlprefix/lib/pod/
- # perlprefix/lib/site_perl/ INSTALLSITELIB
- # perlprefix/bin/ INSTALLBIN
- # perlprefix/man/ INSTALLMAN1DIR
- # else
- # prefix/lib/perl5/ INSTALLPRIVLIB
- # prefix/lib/perl5/pod/
- # prefix/lib/perl5/site_perl/ INSTALLSITELIB
- # prefix/bin/ INSTALLBIN
- # prefix/lib/perl5/man/ INSTALLMAN1DIR
- #
- # The above results in various kinds of breakage on various
- # platforms, so we cope with it as follows: if prefix/lib/perl5
- # or prefix/lib/perl5/man exist, we'll replace those instead
- # of /prefix/{lib,man}
-
- $replace_prefix = qq[\$\(PREFIX\)];
- for $install_variable (qw/
- INSTALLBIN
- INSTALLSCRIPT
- /) {
- $self->prefixify($install_variable,$configure_prefix,$replace_prefix);
- }
- my $funkylibdir = File::Spec->catdir($configure_prefix,"lib","perl5");
- $funkylibdir = '' unless -d $funkylibdir;
- $search_prefix = $funkylibdir ||
- File::Spec->catdir($configure_prefix,"lib");
-
- if ($self->{LIB}) {
- $self->{INSTALLPRIVLIB} = $self->{INSTALLSITELIB} = $self->{LIB};
- $self->{INSTALLARCHLIB} = $self->{INSTALLSITEARCH} =
- File::Spec->catdir($self->{LIB},$Config{'archname'});
- }
- else {
- if (-d File::Spec->catdir($self->{PREFIX},"lib","perl5")) {
- $replace_prefix = File::Spec->catdir(qq[\$\(PREFIX\)],"lib",
- "perl5");
- }
- else {
- $replace_prefix = File::Spec->catdir(qq[\$\(PREFIX\)],"lib");
- }
- for $install_variable (qw/
- INSTALLPRIVLIB
- INSTALLARCHLIB
- INSTALLSITELIB
- INSTALLSITEARCH
- /)
- {
- $self->prefixify($install_variable,$search_prefix,$replace_prefix);
- }
- }
- my $funkymandir = File::Spec->catdir($configure_prefix,"lib","perl5","man");
- $funkymandir = '' unless -d $funkymandir;
- $search_prefix = $funkymandir || File::Spec->catdir($configure_prefix,"man");
- if (-d File::Spec->catdir($self->{PREFIX},"lib","perl5", "man")) {
- $replace_prefix = File::Spec->catdir(qq[\$\(PREFIX\)],"lib", "perl5", "man");
- }
- else {
- $replace_prefix = File::Spec->catdir(qq[\$\(PREFIX\)],"man");
- }
- for $install_variable (qw/
- INSTALLMAN1DIR
- INSTALLMAN3DIR
- /)
- {
- $self->prefixify($install_variable,$search_prefix,$replace_prefix);
- }
-
- # Now we head at the manpages. Maybe they DO NOT want manpages
- # installed
- $self->{INSTALLMAN1DIR} = $Config::Config{installman1dir}
- unless defined $self->{INSTALLMAN1DIR};
- unless (defined $self->{INST_MAN1DIR}){
- if ($self->{INSTALLMAN1DIR} =~ /^(none|\s*)$/){
- $self->{INST_MAN1DIR} = $self->{INSTALLMAN1DIR};
- } else {
- $self->{INST_MAN1DIR} = File::Spec->catdir($Curdir,'blib','man1');
- }
- }
- $self->{MAN1EXT} ||= $Config::Config{man1ext};
-
- $self->{INSTALLMAN3DIR} = $Config::Config{installman3dir}
- unless defined $self->{INSTALLMAN3DIR};
- unless (defined $self->{INST_MAN3DIR}){
- if ($self->{INSTALLMAN3DIR} =~ /^(none|\s*)$/){
- $self->{INST_MAN3DIR} = $self->{INSTALLMAN3DIR};
- } else {
- $self->{INST_MAN3DIR} = File::Spec->catdir($Curdir,'blib','man3');
- }
- }
- $self->{MAN3EXT} ||= $Config::Config{man3ext};
+ $self->{MAN1EXT} ||= $Config{man1ext};
+ $self->{MAN3EXT} ||= $Config{man3ext};
# Get some stuff out of %Config if we haven't yet done so
print STDOUT "CONFIG must be an array ref\n"
if ($self->{CONFIG} and ref $self->{CONFIG} ne 'ARRAY');
$self->{CONFIG} = [] unless (ref $self->{CONFIG});
push(@{$self->{CONFIG}}, @ExtUtils::MakeMaker::Get_from_Config);
- push(@{$self->{CONFIG}}, 'shellflags') if $Config::Config{shellflags};
+ push(@{$self->{CONFIG}}, 'shellflags') if $Config{shellflags};
my(%once_only,$m);
foreach $m (@{$self->{CONFIG}}){
next if $once_only{$m};
print STDOUT "CONFIG key '$m' does not exist in Config.pm\n"
- unless exists $Config::Config{$m};
- $self->{uc $m} ||= $Config::Config{$m};
+ unless exists $Config{$m};
+ $self->{uc $m} ||= $Config{$m};
$once_only{$m} = 1;
}
# 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}";
# Graham Barr and Paul Marquess had some ideas how to ensure
# version compatibility between the *.pm file and the
# XS_VERSION macro that defaults to VERSION:
$self->{XS_VERSION} ||= $self->{VERSION};
- # What extra library dirs do we need when running the tests?
- # Make sure these are absolute paths in case the test chdirs.
- $self->{TEST_LIBS} .= join '',
- map { ' "-I'.File::Spec->rel2abs($_).'"' }
- $self->{INST_ARCHLIB}, $self->{INST_LIB};
# --- Initialize Perl Binary Locations
$self->init_PERL;
my(@libs) = $self->extliblist($libs);
if ($libs[0] or $libs[1] or $libs[2]){
# LD_RUN_PATH now computed by ExtUtils::Liblist
- ($self->{EXTRALIBS}, $self->{BSLOADLIBS}, $self->{LDLOADLIBS}, $self->{LD_RUN_PATH}) = @libs;
+ ($self->{EXTRALIBS}, $self->{BSLOADLIBS},
+ $self->{LDLOADLIBS}, $self->{LD_RUN_PATH}) = @libs;
last;
}
}
if (!$self->{LINKTYPE}) {
$self->{LINKTYPE} = $self->{SKIPHASH}{'dynamic'}
? 'static'
- : ($Config::Config{usedl} ? 'dynamic' : 'static');
+ : ($Config{usedl} ? 'dynamic' : 'static');
};
# These get overridden for VMS and maybe some other systems
$self->{DEV_NULL} ||= "> /dev/null 2>&1";
}
+=item init_INST
+
+ $mm->init_INST;
+
+Called by init_main. Sets up all INST_* variables.
+
+=cut
+
+sub init_INST {
+ my($self) = shift;
+
+ $self->{INST_ARCHLIB} ||= File::Spec->catdir($Curdir,"blib","arch");
+ $self->{INST_BIN} ||= File::Spec->catdir($Curdir,'blib','bin');
+
+ # INST_LIB typically pre-set if building an extension after
+ # perl has been built and installed. Setting INST_LIB allows
+ # you to build directly into, say $Config{privlibexp}.
+ unless ($self->{INST_LIB}){
+ if ($self->{PERL_CORE}) {
+ 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");
+ }
+ }
+
+ my @parentdir = split(/::/, $self->{PARENT_NAME});
+ $self->{INST_LIBDIR} = File::Spec->catdir($self->{INST_LIB},@parentdir);
+ $self->{INST_ARCHLIBDIR} = File::Spec->catdir($self->{INST_ARCHLIB},
+ @parentdir);
+ $self->{INST_AUTODIR} = File::Spec->catdir($self->{INST_LIB},'auto',
+ $self->{FULLEXT});
+ $self->{INST_ARCHAUTODIR} = File::Spec->catdir($self->{INST_ARCHLIB},
+ 'auto',$self->{FULLEXT});
+
+ $self->{INST_SCRIPT} ||= File::Spec->catdir($Curdir,'blib','script');
+
+ $self->{INST_MAN1DIR} ||= File::Spec->catdir($Curdir,'blib','man1');
+ $self->{INST_MAN3DIR} ||= File::Spec->catdir($Curdir,'blib','man3');
+
+ return 1;
+}
+
+=item init_INSTALL
+
+ $mm->init_INSTALL;
+
+Called by init_main. Sets up all INSTALL_* variables (except
+INSTALLDIRS) and PREFIX.
+
+=cut
+
+sub init_INSTALL {
+ my($self) = shift;
+
+ $self->init_lib2arch;
+
+ 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} = '';
+ }
+
+ 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)');
+ }
+
+ unless( $Config{installsiteman3dir} ) {
+ $Config_Override{installsiteman3dir} =
+ File::Spec->catdir($sprefix, 'man', 'man$(MAN3EXT)');
+ }
+
+ unless( $Config{installsitebin} ) {
+ $Config_Override{installsitebin} =
+ File::Spec->catdir($sprefix, 'bin');
+ }
+
+ my $u_prefix = $self->{PREFIX} || '';
+ my $u_sprefix = $self->{SITEPREFIX} || $u_prefix;
+ my $u_vprefix = $self->{VENDORPREFIX} || $u_prefix;
+
+ $self->{PREFIX} ||= $u_prefix || $iprefix;
+ $self->{SITEPREFIX} ||= $u_sprefix || $sprefix;
+ $self->{VENDORPREFIX} ||= $u_vprefix || $vprefix;
+
+ my $arch = $Config{archname};
+ my $version = $Config{version};
+
+ # default style
+ my $libstyle = 'lib/perl5';
+ my $manstyle = '';
+
+ if( $self->{LIBSTYLE} ) {
+ $libstyle = $self->{LIBSTYLE};
+ $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 => $u_prefix,
+ d => 'bin' },
+ vendorbin => { s => $vprefix,
+ r => $u_vprefix,
+ d => 'bin' },
+ sitebin => { s => $sprefix,
+ r => $u_sprefix,
+ d => 'bin' },
+ script => { s => $iprefix,
+ r => $u_prefix,
+ d => 'bin' },
+ );
+
+ my %man_layouts =
+ (
+ man1dir => { s => $iprefix,
+ r => $u_prefix,
+ d => 'man/man$(MAN1EXT)',
+ style => $manstyle, },
+ siteman1dir => { s => $sprefix,
+ r => $u_sprefix,
+ d => 'man/man$(MAN1EXT)',
+ style => $manstyle, },
+ vendorman1dir => { s => $vprefix,
+ r => $u_vprefix,
+ d => 'man/man$(MAN1EXT)',
+ style => $manstyle, },
+
+ man3dir => { s => $iprefix,
+ r => $u_prefix,
+ d => 'man/man$(MAN3EXT)',
+ style => $manstyle, },
+ siteman3dir => { s => $sprefix,
+ r => $u_sprefix,
+ d => 'man/man$(MAN3EXT)',
+ style => $manstyle, },
+ vendorman3dir => { s => $vprefix,
+ r => $u_vprefix,
+ d => 'man/man$(MAN3EXT)',
+ style => $manstyle, },
+ );
+
+ my %lib_layouts =
+ (
+ privlib => { s => $iprefix,
+ r => $u_prefix,
+ d => '',
+ style => $libstyle, },
+ vendorlib => { s => $vprefix,
+ r => $u_vprefix,
+ d => '',
+ style => $libstyle, },
+ sitelib => { s => $sprefix,
+ r => $u_sprefix,
+ d => 'site_perl',
+ style => $libstyle, },
+
+ archlib => { s => $iprefix,
+ r => $u_prefix,
+ d => "$version/$arch",
+ style => $libstyle },
+ vendorarch => { s => $vprefix,
+ r => $u_vprefix,
+ d => "$version/$arch",
+ style => $libstyle },
+ sitearch => { s => $sprefix,
+ r => $u_sprefix,
+ d => "site_perl/$version/$arch",
+ style => $libstyle },
+ );
+
+
+ # Special case for LIB.
+ if( $self->{LIB} ) {
+ foreach my $var (keys %lib_layouts) {
+ my $Installvar = uc "install$var";
+
+ if( $var =~ /arch/ ) {
+ $self->{$Installvar} ||=
+ File::Spec->catdir($self->{LIB}, $Config{archname});
+ }
+ else {
+ $self->{$Installvar} ||= $self->{LIB};
+ }
+ }
+ }
+
+
+ my %layouts = (%bin_layouts, %man_layouts, %lib_layouts);
+ while( my($var, $layout) = each(%layouts) ) {
+ my($s, $r, $d, $style) = @{$layout}{qw(s r d style)};
+
+ print STDERR "Prefixing $var\n" if $Verbose >= 2;
+
+ my $installvar = "install$var";
+ my $Installvar = uc $installvar;
+ next if $self->{$Installvar};
+
+ if( $r ) {
+ $d = "$style/$d" if $style;
+ $self->prefixify($installvar, $s, $r, $d);
+ }
+ else {
+ $self->{$Installvar} = $Config_Override{$installvar} ||
+ $Config{$installvar};
+ }
+
+ print STDERR " $Installvar == $self->{$Installvar}\n"
+ if $Verbose >= 2;
+ }
+
+ 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
- $self->init_PERL;
+ $mm->init_PERL;
-Called by init_main. Sets up PERL, FULLPERL, PERLRUN, PERLRUNINST,
-FULLPERLRUN and FULLPERLRUNINST.
+Called by init_main. Sets up ABSPERL, PERL, FULLPERL and all the
+*PERLRUN* permutations.
PERL is allowed to be miniperl
FULLPERL must be a complete perl
+ ABSPERL is PERL converted to an absolute path
*PERLRUN contains everything necessary to run perl, find it's
libraries, etc...
my @defpath = ();
foreach my $component ($self->{PERL_SRC}, $self->path(),
- $Config::Config{binexp})
+ $Config{binexp})
{
push @defpath, $component if defined $component;
}
($self->{FULLPERL} = $self->{PERL}) =~ s/miniperl/perl/i
unless $self->{FULLPERL};
+ # Little hack to get around VMS's find_perl putting "MCR" in front
+ # sometimes.
+ $self->{ABSPERL} = $self->{PERL};
+ my $has_mcr = $self->{ABSPERL} =~ s/^MCR\s*//;
+ if( File::Spec->file_name_is_absolute($self->{ABSPERL}) ) {
+ $self->{ABSPERL} = '$(PERL)';
+ }
+ else {
+ $self->{ABSPERL} = File::Spec->rel2abs($self->{ABSPERL});
+ $self->{ABSPERL} = 'MCR '.$self->{ABSPERL} if $has_mcr;
+ }
+
# Are we building the core?
$self->{PERL_CORE} = 0 unless exists $self->{PERL_CORE};
# How do we run perl?
- foreach my $perl (qw(PERL FULLPERL)) {
+ foreach my $perl (qw(PERL FULLPERL ABSPERL)) {
$self->{$perl.'RUN'} = "\$($perl)";
# Make sure perl can find itself before it's installed.
if $self->{UNINSTALLED_PERL} || $self->{PERL_CORE};
$self->{$perl.'RUNINST'} =
- q{$(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"};
+ sprintf q{$(%sRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"}, $perl;
}
return 1;
}
+=item init_PERM
+
+ $mm->init_PERM
+
+Called by init_main. Initializes PERL_*
+
+=cut
+
+sub init_PERM {
+ my($self) = shift;
+
+ $self->{PERM_RW} = 644;
+ $self->{PERM_RWX} = 755;
+
+ return 1;
+}
+
=item install (o)
install_site :: all pure_site_install doc_site_install
-install_ :: install_site
- @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+install_vendor :: all pure_vendor_install doc_vendor_install
pure_install :: pure_$(INSTALLDIRS)_install
write }.File::Spec->catfile('$(INSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \
$(INST_LIB) $(INSTALLSITELIB) \
$(INST_ARCHLIB) $(INSTALLSITEARCH) \
- $(INST_BIN) $(INSTALLBIN) \
+ $(INST_BIN) $(INSTALLSITEBIN) \
$(INST_SCRIPT) $(INSTALLSCRIPT) \
- $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
- $(INST_MAN3DIR) $(INSTALLMAN3DIR)
+ $(INST_MAN1DIR) $(INSTALLSITEMAN1DIR) \
+ $(INST_MAN3DIR) $(INSTALLSITEMAN3DIR)
}.$self->{NOECHO}.q{$(WARN_IF_OLD_PACKLIST) \
}.File::Spec->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{
+pure_vendor_install ::
+ }.$self->{NOECHO}.q{$(MOD_INSTALL) \
+ $(INST_LIB) $(INSTALLVENDORLIB) \
+ $(INST_ARCHLIB) $(INSTALLVENDORARCH) \
+ $(INST_BIN) $(INSTALLVENDORBIN) \
+ $(INST_SCRIPT) $(INSTALLSCRIPT) \
+ $(INST_MAN1DIR) $(INSTALLVENDORMAN1DIR) \
+ $(INST_MAN3DIR) $(INSTALLVENDORMAN3DIR)
+
doc_perl_install ::
-}.$self->{NOECHO}.q{$(MKPATH) $(INSTALLARCHLIB)
-}.$self->{NOECHO}.q{$(DOC_INSTALL) \
LINKTYPE "$(LINKTYPE)" \
VERSION "$(VERSION)" \
EXE_FILES "$(EXE_FILES)" \
- >> }.File::Spec->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
+ >> }.File::Spec->catfile('$(INSTALLSITEARCH)','perllocal.pod').q{
+
+doc_vendor_install ::
};
$cccmd = $self->const_cccmd($libperl);
$cccmd =~ s/^CCCMD\s*=\s*//;
$cccmd =~ s/\$\(INC\)/ "-I$self->{PERL_INC}" /;
- $cccmd .= " $Config::Config{cccdlflags}"
- if ($Config::Config{useshrplib} eq 'true');
+ $cccmd .= " $Config{cccdlflags}"
+ if ($Config{useshrplib} eq 'true');
$cccmd =~ s/\(CC\)/\(PERLMAINCC\)/;
# The front matter of the linkcommand...
MAP_STATIC = ",
join(" \\\n\t", reverse sort keys %static), "
-MAP_PRELIBS = $Config::Config{perllibs} $Config::Config{cryptlib}
+MAP_PRELIBS = $Config{perllibs} $Config{cryptlib}
";
if (defined $libperl) {
if (! -f $libperl and ! -f $lperl) {
# We did not find a static libperl. Maybe there is a shared one?
if ($^O eq 'solaris' or $^O eq 'sunos') {
- $lperl = $libperl = "$dir/$Config::Config{libperl}";
+ $lperl = $libperl = "$dir/$Config{libperl}";
# SUNOS ld does not take the full path to a shared library
$libperl = '' if $^O eq 'sunos';
}
unless (-f $lperl || defined($self->{PERL_SRC}));
}
+ # SUNOS ld does not take the full path to a shared library
+ my $llibperl = $libperl ? '$(MAP_LIBPERL)' : '-lperl';
+
push @m, "
MAP_LIBPERL = $libperl
+LLIBPERL = $llibperl
";
push @m, "
foreach $catfile (@$extra){
push @m, "\tcat $catfile >> \$\@\n";
}
- # SUNOS ld does not take the full path to a shared library
- $self->{LLIBPERL} = ($libperl)?'$(MAP_LIBPERL)':'-lperl';
push @m, "
\$(MAP_TARGET) :: $tmp/perlmain\$(OBJ_EXT) \$(MAP_LIBPERL) \$(MAP_STATIC) \$(INST_ARCHAUTODIR)/extralibs.all
- \$(MAP_LINKCMD) -o \$\@ \$(OPTIMIZE) $tmp/perlmain\$(OBJ_EXT) \$(LDFROM) \$(MAP_STATIC) $self->{LLIBPERL} `cat \$(INST_ARCHAUTODIR)/extralibs.all` \$(MAP_PRELIBS)
+ \$(MAP_LINKCMD) -o \$\@ \$(OPTIMIZE) $tmp/perlmain\$(OBJ_EXT) \$(LDFROM) \$(MAP_STATIC) \$(LLIBPERL) `cat \$(INST_ARCHAUTODIR)/extralibs.all` \$(MAP_PRELIBS)
$self->{NOECHO}echo 'To install the new \"\$(MAP_TARGET)\" binary, call'
$self->{NOECHO}echo ' make -f $makefilename inst_perl MAP_TARGET=\$(MAP_TARGET)'
$self->{NOECHO}echo 'To remove the intermediate files say'
}.$self->{NOECHO}.q{echo "==> Please rerun the make command. <=="
false
-# To change behavior to :: would be nice, but would break Tk b9.02
-# so you find such a warning below the dist target.
-#}.$self->{MAKEFILE}.q{ :: $(VERSION_FROM)
-# }.$self->{NOECHO}.q{echo "Warning: Makefile possibly out of date with $(VERSION_FROM)"
};
join "", @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}};
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;
$text;
}
+=item parse_abstract
+
+parse a file and return what you think is the ABSTRACT
+
+=cut
+
+sub parse_abstract {
+ my($self,$parsefile) = @_;
+ my $result;
+ local *FH;
+ local $/ = "\n";
+ open(FH,$parsefile) or die "Could not open '$parsefile': $!";
+ my $inpod = 0;
+ my $package = $self->{DISTNAME};
+ $package =~ s/-/::/g;
+ while (<FH>) {
+ $inpod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $inpod;
+ next if !$inpod;
+ chop;
+ next unless /^($package\s-\s)(.*)/;
+ $result = $2;
+ last;
+ }
+ close FH;
+ return $result;
+}
+
=item parse_version
parse a file and return what you think is $VERSION in this file set to.
$_
}; \$$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;
- return $result;
-}
-
-=item parse_abstract
-parse a file and return what you think is the ABSTRACT
-
-=cut
-
-sub parse_abstract {
- my($self,$parsefile) = @_;
- my $result;
- local *FH;
- local $/ = "\n";
- open(FH,$parsefile) or die "Could not open '$parsefile': $!";
- my $inpod = 0;
- my $package = $self->{DISTNAME};
- $package =~ s/-/::/g;
- while (<FH>) {
- $inpod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $inpod;
- next if !$inpod;
- chop;
- next unless /^($package\s-\s)(.*)/;
- $result = $2;
- last;
- }
- close FH;
+ $result = "undef" unless defined $result;
return $result;
}
+
=item pasthru (o)
Defines the string that is passed to recursive make calls in
join "\n", @m;
}
-=item ppd
-
-Defines target that creates a PPD (Perl Package Description) file
-for a binary distribution.
-
-=cut
-
-sub ppd {
- my($self) = @_;
- my(@m);
- 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";
- }
- my ($pack_ver) = join ",", (split (/\./, $self->{VERSION}), (0) x 4) [0 .. 3];
- push(@m, "# Creates a PPD (Perl Package Description) for a binary distribution.\n");
- push(@m, "ppd:\n");
- push(@m, "\t\@\$(PERL) -e \"print qq{<SOFTPKG NAME=\\\"$self->{DISTNAME}\\\" VERSION=\\\"$pack_ver\\\">\\n}");
- push(@m, ". qq{\\t<TITLE>$self->{DISTNAME}</TITLE>\\n}");
- my $abstract = $self->{ABSTRACT};
- $abstract =~ s/\n/\\n/sg;
- $abstract =~ s/</</g;
- $abstract =~ s/>/>/g;
- push(@m, ". qq{\\t<ABSTRACT>$abstract</ABSTRACT>\\n}");
- my ($author) = $self->{AUTHOR};
- $author =~ s/</</g;
- $author =~ s/>/>/g;
- $author =~ s/@/\\@/g;
- push(@m, ". qq{\\t<AUTHOR>$author</AUTHOR>\\n}");
- push(@m, ". qq{\\t<IMPLEMENTATION>\\n}");
- my ($prereq);
- foreach $prereq (sort keys %{$self->{PREREQ_PM}}) {
- my $pre_req = $prereq;
- $pre_req =~ s/::/-/g;
- my ($dep_ver) = join ",", (split (/\./, $self->{PREREQ_PM}{$prereq}), (0) x 4) [0 .. 3];
- push(@m, ". qq{\\t\\t<DEPENDENCY NAME=\\\"$pre_req\\\" VERSION=\\\"$dep_ver\\\" />\\n}");
- }
- push(@m, ". qq{\\t\\t<OS NAME=\\\"\$(OSNAME)\\\" />\\n}");
- push(@m, ". qq{\\t\\t<ARCHITECTURE NAME=\\\"$Config{'archname'}\\\" />\\n}");
- my ($bin_location) = $self->{BINARY_LOCATION};
- $bin_location =~ s/\\/\\\\/g;
- if ($self->{PPM_INSTALL_SCRIPT}) {
- if ($self->{PPM_INSTALL_EXEC}) {
- push(@m, " . qq{\\t\\t<INSTALL EXEC=\\\"$self->{PPM_INSTALL_EXEC}\\\">$self->{PPM_INSTALL_SCRIPT}</INSTALL>\\n}");
- }
- else {
- push(@m, " . qq{\\t\\t<INSTALL>$self->{PPM_INSTALL_SCRIPT}</INSTALL>\\n}");
- }
- }
- push(@m, ". qq{\\t\\t<CODEBASE HREF=\\\"$bin_location\\\" />\\n}");
- push(@m, ". qq{\\t</IMPLEMENTATION>\\n}");
- push(@m, ". qq{</SOFTPKG>\\n}\" > $self->{DISTNAME}.ppd");
-
- join("", @m);
-}
=item perm_rw (o)
};
my %pm_to_blib = %{$self->{PM}};
my @a;
- my $l;
+ my $l = 0;
while (my ($pm, $blib) = each %pm_to_blib) {
my $la = length $pm;
my $lb = length $blib;
"";
}
+=item ppd
+
+Defines target that creates a PPD (Perl Package Description) file
+for a binary distribution.
+
+=cut
+
+sub ppd {
+ my($self) = @_;
+
+ if ($self->{ABSTRACT_FROM}){
+ $self->{ABSTRACT} = $self->parse_abstract($self->{ABSTRACT_FROM}) or
+ carp "WARNING: Setting ABSTRACT via file ".
+ "'$self->{ABSTRACT_FROM}' failed\n";
+ }
+
+ my ($pack_ver) = join ",", (split (/\./, $self->{VERSION}), (0)x4)[0..3];
+
+ my $abstract = $self->{ABSTRACT} || '';
+ $abstract =~ s/\n/\\n/sg;
+ $abstract =~ s/</</g;
+ $abstract =~ s/>/>/g;
+
+ my $author = $self->{AUTHOR} || '';
+ $author =~ s/</</g;
+ $author =~ s/>/>/g;
+ $author =~ s/@/\\@/g;
+
+ my $make_ppd = sprintf <<'PPD_OUT', $pack_ver, $abstract, $author;
+# Creates a PPD (Perl Package Description) for a binary distribution.
+ppd:
+ @$(PERL) -e "print qq{<SOFTPKG NAME=\"$(DISTNAME)\" VERSION=\"%s\">\n\t<TITLE>$(DISTNAME)</TITLE>\n\t<ABSTRACT>%s</ABSTRACT>\n\t<AUTHOR>%s</AUTHOR>\n}" > $(DISTNAME).ppd
+PPD_OUT
+
+
+ $make_ppd .= ' @$(PERL) -e "print qq{\t<IMPLEMENTATION>\n';
+ foreach my $prereq (sort keys %{$self->{PREREQ_PM}}) {
+ my $pre_req = $prereq;
+ $pre_req =~ s/::/-/g;
+ my ($dep_ver) = join ",", (split (/\./, $self->{PREREQ_PM}{$prereq}),
+ (0) x 4) [0 .. 3];
+ $make_ppd .= sprintf q{\t\t<DEPENDENCY NAME=\"%s\" VERSION=\"%s\" />\n}, $pre_req, $dep_ver;
+ }
+ $make_ppd .= qq[}" >> \$(DISTNAME).ppd\n];
+
+
+ $make_ppd .= sprintf <<'PPD_OUT', $Config{archname};
+ @$(PERL) -e "print qq{\t\t<OS NAME=\"$(OSNAME)\" />\n\t\t<ARCHITECTURE NAME=\"%s\" />\n
+PPD_OUT
+
+ chomp $make_ppd;
+
+
+ if ($self->{PPM_INSTALL_SCRIPT}) {
+ if ($self->{PPM_INSTALL_EXEC}) {
+ $make_ppd .= sprintf q{\t\t<INSTALL EXEC=\"%s\">%s</INSTALL>\n},
+ $self->{PPM_INSTALL_EXEC}, $self->{PPM_INSTALL_SCRIPT};
+ }
+ else {
+ $make_ppd .= sprintf q{\t\t<INSTALL>%s</INSTALL>\n},
+ $self->{PPM_INSTALL_SCRIPT};
+ }
+ }
+
+ my ($bin_location) = $self->{BINARY_LOCATION} || '';
+ $bin_location =~ s/\\/\\\\/g;
+
+ $make_ppd .= sprintf q{\t\t<CODEBASE HREF=\"%s\" />\n}, $bin_location;
+ $make_ppd .= q{\t</IMPLEMENTATION>\n};
+ $make_ppd .= q{</SOFTPKG>\n};
+
+ $make_ppd .= '}" >> $(DISTNAME).ppd';
+
+ return $make_ppd;
+}
+
=item prefixify
- my $prefixed = $MM->prefixify($var, $search, $replace);
+ $MM->prefixify($var, $prefix, $new_prefix, $default);
+
+Using either $MM->{uc $var} || $Config{lc $var}, it will attempt to
+replace it's $prefix with a $new_prefix. Should the $prefix fail to
+match it sill simply set it to the $new_prefix + $default.
+
+This is for heuristics which attempt to create directory structures
+that mirror those of the installed perl.
-Check a path variable in $self from %Config, if it contains a prefix,
-and replace it with another one.
+For example:
-Takes as arguments an attribute name, a search prefix and a
-replacement prefix. Changes the attribute in the object.
+ $MM->prefixify('installman1dir', '/usr', '/home/foo', 'man/man1');
+
+this will attempt to remove '/usr' from the front of the
+$MM->{INSTALLMAN1DIR} path (initializing it to $Config{installman1dir}
+if necessary) and replace it with '/home/foo'. If this fails it will
+simply use '/home/foo/man/man1'.
=cut
sub prefixify {
- my($self,$var,$sprefix,$rprefix) = @_;
- $self->{uc $var} ||= $Config{lc $var};
- $self->{uc $var} = VMS::Filespec::unixpath($self->{uc $var}) if $Is_VMS;
- $self->{uc $var} =~ s,^\Q$sprefix\E(?=/|\z),$rprefix,s;
+ 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;
+
+ 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;
+
+ $path = File::Spec->catdir($rprefix, $default) if $default;
+ }
+
+ print " now $path\n" if $Verbose >= 2;
+ return $self->{uc $var} = $path;
}
my($self, %attribs) = @_;
my(@m);
- push(@m,'LLIBPERL = '.$self->{LLIBPERL}."\n");
-
push(@m,'
# Delete temporary files (via clean) and also delete installed files
realclean purge :: clean
');
# realclean subdirectories first (already cleaned)
- my $sub = ($Is_Win32 && Win32::IsWin95()) ?
- "\tcd %s\n\t\$(TEST_F) %s\n\t\$(MAKE) %s realclean\n\tcd ..\n" :
- "\t-cd %s && \$(TEST_F) %s && \$(MAKE) %s realclean\n";
+ my $sub;
+ if( $Is_Win32 && Win32::IsWin95() ) {
+ $sub = <<'REALCLEAN';
+ -cd %s
+ -$(PERLRUN) -e "exit unless -f shift; system q{$(MAKE) realclean}" %s
+ -cd ..
+REALCLEAN
+ }
+ else {
+ $sub = <<'REALCLEAN';
+ -cd %s && $(TEST_F) %s && $(MAKE) %s realclean
+REALCLEAN
+ }
+
foreach(@{$self->{DIR}}){
push(@m, sprintf($sub,$_,"$self->{MAKEFILE}.old","-f $self->{MAKEFILE}.old"));
push(@m, sprintf($sub,$_,"$self->{MAKEFILE}",''));
# --- Test and Installation Sections ---
my($self, %attribs) = @_;
- my $tests = $attribs{TESTS};
+ my $tests = $attribs{TESTS} || '';
if (!$tests && -d 't') {
- $tests = $Is_Win32 ? join(' ', <t\\*.t>) : 't/*.t';
+ $tests = $self->find_tests;
}
# note: 'test.pl' name is also hardcoded in init_dirscan()
my(@m);
test :: \$(TEST_TYPE)
");
- push(@m, map("\t$self->{NOECHO}cd $_ && \$(TEST_F) $self->{MAKEFILE} && \$(MAKE) test \$(PASTHRU)\n",
- @{$self->{DIR}}));
+
+ if ($Is_Win32 && Win32::IsWin95()) {
+ push(@m, map(qq{\t$self->{NOECHO}\$(PERLRUN) -e "exit unless -f shift; chdir '$_'; system q{\$(MAKE) test \$(PASTHRU)}" $self->{MAKEFILE}\n}, @{$self->{DIR}}));
+ }
+ else {
+ push(@m, map("\t$self->{NOECHO}cd $_ && \$(TEST_F) $self->{MAKEFILE} && \$(MAKE) test \$(PASTHRU)\n", @{$self->{DIR}}));
+ }
+
push(@m, "\t$self->{NOECHO}echo 'No tests defined for \$(NAME) extension.'\n")
unless $tests or -f "test.pl" or @{$self->{DIR}};
push(@m, "\n");