# This package is inserted into @ISA of MakeMaker's MM before the
# built-in MM_Unix methods if MakeMaker.pm is run under VMS.
#
-# Version: 5.12
+# Version: 5.16
# Author: Charles Bailey bailey@genetics.upenn.edu
-# Revised: 12-Dec-1995
+# Revised: 03-Jan-1996
package ExtUtils::MM_VMS;
VERSION_SYM = $self->{VERSION_SYM}
VERSION_MACRO = VERSION
DEFINE_VERSION = ",'"$(VERSION_MACRO)=""$(VERSION)"""',"
-# XS_VERSION = $self->{XS_VERSION}
-# XS_VERSION_MACRO = XS_VERSION
-# XS_DEFINE_VERSION = ",'"$(XS_VERSION_MACRO)=""$(XS_VERSION)"""',"
+XS_VERSION = $self->{XS_VERSION}
+XS_VERSION_MACRO = XS_VERSION
+XS_DEFINE_VERSION = ",'"$(XS_VERSION_MACRO)=""$(XS_VERSION)"""',"
# In which library should we install this extension?
# This is typically the same as PERL_LIB.
INST_ARCHLIB = ",$self->fixpath($self->{INST_ARCHLIB},1),"
INST_EXE = ",$self->fixpath($self->{INST_EXE},1),"
+PREFIX = $self->{PREFIX}
+
# AFS users will want to set the installation directories for
# the final 'make install' early without setting INST_LIB,
# INST_ARCHLIB, and INST_EXE for the testing phase
ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
$self = $ExtUtils::MakeMaker::Parent[-1];
}
- my($cmd) = $Config{'cc'};
+ my($cmd,$quals) = ($Config{'cc'},$Config{'ccflags'});
my($name,$sys,@m);
( $name = $self->{NAME} . "_cflags" ) =~ s/:/_/g ;
# Deal with $self->{DEFINE} here since some C compilers pay attention
# to only one /Define clause on command line, so we have to
# conflate the ones from $Config{'cc'} and $self->{DEFINE}
- if ($cmd =~ m:(.*)/define=\(?([^\(\/\)\s]+)\)?(.*)?:i) {
- $cmd = "$1/Define=($2," . ($self->{DEFINE} ? "$self->{DEFINE}," : '') .
- "\$(DEFINE_VERSION))$3";
-# "\$(DEFINE_VERSION),\$(XS_DEFINE_VERSION))$3";
+ if ($quals =~ m:(.*)/define=\(?([^\(\/\)\s]+)\)?(.*)?:i) {
+ $quals = "$1/Define=($2," . ($self->{DEFINE} ? "$self->{DEFINE}," : '') .
+ "\$(DEFINE_VERSION),\$(XS_DEFINE_VERSION))$3";
}
else {
- $cmd .= '/Define=(' . ($self->{DEFINE} ? "$self->{DEFINE}," : '') .
- '$(DEFINE_VERSION))';
-# '$(DEFINE_VERSION),$(XS_DEFINE_VERSION))';
+ $quals .= '/Define=(' . ($self->{DEFINE} ? "$self->{DEFINE}," : '') .
+ '$(DEFINE_VERSION),$(XS_DEFINE_VERSION))';
}
$libperl or $libperl = $self->{LIBPERL_A} || "libperl.olb";
my(%map) = ( 'D' => 'DEBUGGING', 'E' => 'EMBED', 'M' => 'MULTIPLICITY',
'DE' => 'DEBUGGING,EMBED', 'DM' => 'DEBUGGING,MULTIPLICITY',
'EM' => 'EMBED,MULTIPLICITY', 'DEM' => 'DEBUGGING,EMBED,MULTIPLICITY' );
- $cmd =~ s:/define=\(([^\)]+)\):/Define=($1,$map{$type}):i
+ $quals =~ s:/define=\(([^\)]+)\):/Define=($1,$map{$type}):i
}
# Likewise with $self->{INC} and /Include
$incstr .= ', '.$self->fixpath($_,1);
}
}
- if ($cmd =~ m:(.*)/include=\(?([^\(\/\)\s]+)\)?(.*):i) {
- $cmd = "$1$incstr,$2)$3";
+ if ($quals =~ m:(.*)/include=\(?([^\(\/\)\s]+)\)?(.*):i) {
+ $quals = "$1$incstr,$2)$3";
}
- else { $cmd .= "$incstr)"; }
+ else { $quals .= "$incstr)"; }
if ($Config{'vms_cc_type'} ne 'decc') {
';
}
- push(@m, "CCCMD = $cmd\n");
+ push(@m, "CCCMD = $cmd$quals\n");
$self->{CONST_CCCMD} = join('',@m);
}
MACROEND = )
MAKEFILE = Descrip.MMS
SHELL = Posix
-LD = $self->{LD}
TOUCH = $self->{TOUCH}
CHMOD = $self->{CHMOD}
CP = $self->{CP}
$(NOOP)
config :: $(MAKEFILE) $(INST_LIBDIR).exists
+ $(NOOP)
config :: $(INST_ARCHAUTODIR).exists Version_check
+ $(NOOP)
config :: $(INST_AUTODIR).exists
+ $(NOOP)
';
if (%{$self->{MAN1PODS}}) {
push @m, q[
config :: $(INST_MAN1DIR)/.exists
+ $(NOOP)
];
push @m, $self->dir_target(qw[$(INST_MAN1DIR)]);
}
if (%{$self->{MAN3PODS}}) {
push @m, q[
config :: $(INST_MAN3DIR).exists
+ $(NOOP)
];
push @m, $self->dir_target(qw[$(INST_MAN3DIR)]);
}
ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
$self = $ExtUtils::MakeMaker::Parent[-1];
}
+
+ return '' unless $self->needs_linking();
+
my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
my(@m);
$(BASEEXT).opt : makefile.PL
$(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e "use ExtUtils::MakeMaker qw(&mksymlists);" -
- -e "MM->new()->mksymlists({DL_FUNCS => ',neatvalue($self->{DL_FUNCS}),', DL_VARS => ',neatvalue($self->{DL_VARS}),',NAME => \'',$self->{NAME},'\'})"
+ -e "MM->new({NAME => \'',$self->{NAME},'\'})->mksymlists({DL_FUNCS => ',neatvalue($self->{DL_FUNCS}),', DL_VARS => ',neatvalue($self->{DL_VARS}),'})"
$(PERL) -e "open OPT,\'>>$(MMS$TARGET)\'; print OPT ""$(INST_STATIC)/Include=$(BASEEXT)\n$(INST_STATIC)/Library\n"";close OPT"
');
}
return '' unless $self->needs_linking(); #might be because of a subdir
-
- return '
-$(INST_DYNAMIC) :
- $(NOOP)
-' unless ($self->{OBJECT} or @{$self->{C} || []} or $self->{MYEXTLIB});
+ return '' unless $self->has_link_code();
($otherldflags) = $attribs{OTHERLDFLAGS} || "";
my(@m);
ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
$self = $ExtUtils::MakeMaker::Parent[-1];
}
- return '' unless $self->needs_linking();
+ return '
+BOOTSTRAP =
+' unless $self->has_link_code();
'
BOOTSTRAP = '."$self->{BASEEXT}.bs".'
# As MakeMaker mkbootstrap might not write a file (if none is required)
# we use touch to prevent make continually trying to remake it.
# The DynaLoader only reads a non-empty file.
-$(BOOTSTRAP) : $(MAKEFILE) '."$self->{BOOTDEP}".'
+$(BOOTSTRAP) : $(MAKEFILE) '."$self->{BOOTDEP}".' $(INST_ARCHAUTODIR).exists
@ Write Sys$Output "Running mkbootstrap for $(NAME) ($(BSLOADLIBS))"
@ $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -
-e "use ExtUtils::Mkbootstrap; Mkbootstrap(\'$(BASEEXT)\',\'$(BSLOADLIBS)\');"
@ $(TOUCH) $(MMS$TARGET)
@ $(PERL) -e "open F,\'>>$(INST_ARCHAUTODIR).packlist\';print F qq[$(MMS$TARGET)\n];close F;"
-$(INST_BOOT) : $(BOOTSTRAP)
+$(INST_BOOT) : $(BOOTSTRAP) $(INST_ARCHAUTODIR).exists
@ $(RM_RF) $(INST_BOOT)
- $(CP) $(BOOTSTRAP) $(INST_BOOT)
@ $(PERL) -e "open F,\'>>$(INST_ARCHAUTODIR).packlist\';print F qq[$(MMS$TARGET)\n];close F;"
my(@m);
push(@m, "
-$inst : $dist \$(MAKEFILE) ${instdir}.exists
+$inst : $dist \$(MAKEFILE) ${instdir}.exists \$(INST_ARCHAUTODIR).exists
",' @ $(RM_F) $(MMS$TARGET)
@ $(CP) ',"$dist $inst",'
$(CHMOD) 644 $(MMS$TARGET)
push @m,
qq[POD2MAN_EXE = $pod2man_exe\n],
q[POD2MAN = $(PERL) -we "%m=@ARGV;for (keys %m){" -
--e "system(""$(PERL) $(POD2MAN_EXE) $_ >$m{$_}"");}"
+-e "system(""$^X $(POD2MAN_EXE) $_ >$m{$_}"");}"
];
push @m, "\nmanifypods : ";
push @m, join " ", keys %{$self->{MAN1PODS}}, keys %{$self->{MAN3PODS}};
@ Write Sys$Output "Appending installation info to $(INST_ARCHLIB)perllocal.pod"
@ $(PERL) "-I$(PERL_LIB)" "-I$(PERL_ARCHLIB)" \\
-e "use ExtUtils::MakeMaker; MY->new({})->writedoc('Module', '$(NAME)', \\
- 'LINKTYPE=$(LINKTYPE)', 'VERSION=$(VERSION)', 'EXE_FILES=$(EXE_FILES)')" \\
+ 'LINKTYPE=$(LINKTYPE)', 'VERSION=$(VERSION)', 'XS_VERSION=$(XS_VERSION)', 'EXE_FILES=$(EXE_FILES)')" \\
>>$(INSTALLARCHLIB)perllocal.pod
};
push @m, "
# --- MakeMaker makeaperl section ---
MAP_TARGET = $target
-FULLPERL = $self->{FULLPERL}
";
return join '', @m if $self->{PARENT};
unless ($self->{MAKEAPERL}) {
push @m, q{
-$(MAP_TARGET) :: $(MAKE_APERL_FILE)
- $(MMS)$(USEMAKEFILE)$(MAKE_APERL_FILE) static $(MMS$TARGET)
-
$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
@ Write Sys$Output "Writing ""$(MMS$TARGET)"" for this $(MAP_TARGET)"
@ $(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
Makefile.PL DIR=}, $dir, q{ \
MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
- MAKEAPERL=1 NORECURS=1};
+ MAKEAPERL=1 NORECURS=1
+$(MAP_TARGET) :: $(MAKE_APERL_FILE)
+ $(MMS)$(USEMAKEFILE)$(MAKE_APERL_FILE) static $(MMS$TARGET)
+};
push @m, map( " \\\n\t\t$_", @ARGV );
push @m, "\n";
package ExtUtils::MakeMaker;
-# Last edited $Date: 1995/12/10 23:38:09 $ by Andreas Koenig
-# $Id: MakeMaker.pm,v 1.116 1995/12/10 23:38:09 k Exp $
+# Last edited $Date: 1996/01/05 20:40:47 $ by Andreas Koenig
+# $Id: MakeMaker.pm,v 1.135 1996/01/05 20:40:47 k Exp $
-$Version = $VERSION = "5.12";
+$Version = $VERSION = "5.16";
$ExtUtils::MakeMaker::Version_OK = 4.13; # Makefiles older than $Version_OK will die
# (Will be checked from MakeMaker version 4.13 onwards)
%att ## Import of %att is deprecated, please use OO features!
);
-$Is_VMS = $Config::Config{osname} eq 'VMS';
-require ExtUtils::MM_VMS if $Is_VMS;
+if ($Is_VMS = ($Config::Config{osname} eq 'VMS')) {
+ require ExtUtils::MM_VMS;
+ require VMS::Filespec;
+ import VMS::Filespec '&vmsify';
+}
$Is_OS2 = $Config::Config{osname} =~ m|^os/?2$|i ;
$ENV{EMXSHELL} = 'sh' if $Is_OS2; # to run `commands`
postamble => {}, # should always be last the user has hands on
selfdocument => {}, # well, he may override it, but he won't do it
);
-# looses section ordering
+# loses section ordering
%ExtUtils::MakeMaker::MM_Sections = @ExtUtils::MakeMaker::MM_Sections_spec;
# keeps order
@ExtUtils::MakeMaker::MM_Sections = grep(!ref, @ExtUtils::MakeMaker::MM_Sections_spec);
$self->init_main();
- if (! $self->{PERL_SRC} &&
- $INC{'Config.pm'} ne $self->catdir($Config::Config{archlibexp},'Config.pm')){
- (my $pthinks = $INC{'Config.pm'}) =~ s!/Config\.pm$!!;
- $pthinks =~ s!.*/!!;
- print STDOUT <<END;
+ if (! $self->{PERL_SRC} ) {
+ my($pthinks) = $INC{'Config.pm'};
+ $pthinks = vmsify($pthinks) if $Is_VMS;
+ if ($pthinks ne $self->catfile($Config::Config{archlibexp},'Config.pm')){
+ $pthinks =~ s!/Config\.pm$!!;
+ $pthinks =~ s!.*/!!;
+ print STDOUT <<END;
Your perl and your Config.pm seem to have different ideas about the architecture
they are running on.
Perl thinks: [$pthinks]
This may or may not cause problems. Please check your installation of perl if you
have problems building this extension.
END
+ }
}
$self->init_dirscan();
sub mv_all_methods {
my($from,$to) = @_;
my($method);
+ my($symtab) = \%{"${from}::"};
# no strict;
# Here you see the *current* list of methods that are overridable
# next unless defined &{"${from}::$method"};
*{"${to}::$method"} = \&{"${from}::$method"};
- my $symtab = \%{"${from}::"};
# delete would do, if we were sure, nobody ever called
# MY->makeaperl directly
sub prompt {
my($mess,$def)=@_;
- BEGIN { my $ISA_TTY = -t STDIN && -t STDOUT }
+ BEGIN { $ISA_TTY = -t STDIN && -t STDOUT }
Carp::confess("prompt function called without an argument") unless defined $mess;
$def = "" unless defined $def;
my $dispdef = "[$def] ";
}
close MAKE;
- my($finalname) = $Is_VMS ? "Descrip.MMS" : $self->{MAKEFILE};
+ my($finalname) = $self->{MAKEFILE};
rename("MakeMaker.tmp", $finalname);
- chmod 0644, $finalname;
+ chmod 0644, $finalname unless $Is_VMS;
system("$Config::Config{eunicefix} $finalname") unless $Config::Config{eunicefix} eq ":";
}
if ($Is_VMS = $Config::Config{osname} eq 'VMS') {
require VMS::Filespec;
- import VMS::Filespec 'vmsify';
+ import VMS::Filespec qw( &vmsify );
}
$Is_OS2 = $ExtUtils::MakeMaker::Is_OS2;
-sub guess_name { # Charles! That's something for MM_VMS
+sub guess_name {
my($self) = @_;
my $name = fastcwd();
- if ($Is_VMS) {
- $name =~ s:.*?([^.\]]+)\]:$1: unless ($name =~ s:.*[.\[]ext\.(.*)\]:$1:i);
- $name =~ s#[.\]]#::#g;
- } else {
- $name =~ s:.*/:: unless ($name =~ s:^.*/ext/::);
- $name =~ s#/#::#g;
- $name =~ s#\-\d+\.\d+$##; # this is new with MM 5.00
- }
+ $name =~ s:.*/:: unless ($name =~ s:^.*/ext/::);
+ $name =~ s#/#::#g;
+ $name =~ s#[\-_][\d.\-]+$##; # this is new with MM 5.00
$name;
}
$self->{PERL_LIB} ||= $self->catdir("$self->{PERL_SRC}","lib");
$self->{PERL_ARCHLIB} = $self->{PERL_LIB};
$self->{PERL_INC} = $self->{PERL_SRC};
- # catch an situation that has occurred a few times in the past:
+ # catch a situation that has occurred a few times in the past:
warn <<EOM unless -s "$self->{PERL_SRC}/cflags";
You cannot build extensions below the perl source tree after executing
a 'make clean' in the perl source tree.
}
$self->{INST_EXE} ||= $self->catdir('.','blib',$Config::Config{archname});
- if ($self->{PREFIX}){
+ my($prefix) = $Config{'prefix'};
+ $prefix = VMS::Filespec::unixify($prefix) if $Is_VMS;
+ unless ($self->{PREFIX}){
+ $self->{PREFIX} = $prefix;
+ }
# With perl5.002 it turns out, that we hardcoded some assumptions in here:
# $self->{INSTALLPRIVLIB} = $self->catdir($self->{PREFIX},"lib","perl5");
# $self->{INSTALLBIN} = $self->catdir($self->{PREFIX},"bin");
# $self->{INSTALLMAN3DIR} = $self->catdir($self->{PREFIX},"perl5","man","man3")
# unless defined $self->{INSTALLMAN3DIR};
- # we have to look at the relation between $Config{prefix} and
- # the requested values
- ($self->{INSTALLPRIVLIB} = $Config{installprivlib})
- =~ s/\Q$Config{prefix}\E/$self->{PREFIX}/;
- ($self->{INSTALLBIN} = $Config{installbin})
- =~ s/\Q$Config{prefix}\E/$self->{PREFIX}/;
- ($self->{INSTALLMAN3DIR} = $Config{installman3dir})
- =~ s/\Q$Config{prefix}\E/$self->{PREFIX}/;
- }
+ # we have to look at the relation between $Config{prefix} and
+ # the requested values
+ $self->{INSTALLPRIVLIB} = $Config{installprivlib};
+ $self->{INSTALLPRIVLIB} = VMS::Filespec::unixpath($self->{INSTALLPRIVLIB})
+ if $Is_VMS;
+ $self->{INSTALLPRIVLIB} =~ s/\Q$prefix\E/\$(PREFIX)/;
+ $self->{INSTALLBIN} = $Config{installbin};
+ $self->{INSTALLBIN} = VMS::Filespec::unixpath($self->{INSTALLBIN})
+ if $Is_VMS;
+ $self->{INSTALLBIN} =~ s/\Q$prefix\E/\$(PREFIX)/;
+ $self->{INSTALLMAN1DIR} = $Config{installman1dir};
+ $self->{INSTALLMAN1DIR} = VMS::Filespec::unixpath($self->{INSTALLMAN1DIR})
+ if $Is_VMS;
+ $self->{INSTALLMAN1DIR} =~ s/\Q$prefix\E/\$(PREFIX)/;
+ $self->{INSTALLMAN3DIR} = $Config{installman3dir};
+ $self->{INSTALLMAN3DIR} = VMS::Filespec::unixpath($self->{INSTALLMAN3DIR})
+ if $Is_VMS;
+ $self->{INSTALLMAN3DIR} =~ s/\Q$prefix\E/\$(PREFIX)/;
if( $self->{INSTALLPRIVLIB} && ! $self->{INSTALLARCHLIB} ){
# Same as above here. With the unresolved versioned directory issue, we have to
# } else {
# $self->{INSTALLARCHLIB} = $self->{INSTALLPRIVLIB};
# }
- ($self->{INSTALLARCHLIB} = $Config{installarchlib})
- =~ s/\Q$Config{installprivlib}\E/$self->{INSTALLPRIVLIB}/;
- if (-d $self->{INSTALLARCHLIB}) {
- print STDOUT "Defaulting INSTALLARCHLIB to $self->{INSTALLARCHLIB}\n";
+ my($installprivlib) = $Config{'installprivlib'};
+ $installprivlib = VMS::Filespec::unixify($installprivlib) if $Is_VMS;
+ $self->{INSTALLARCHLIB} = $Config{installarchlib};
+ $self->{INSTALLARCHLIB} = VMS::Filespec::unixpath($self->{INSTALLARCHLIB})
+ if $Is_VMS;
+ $self->{INSTALLARCHLIB} =~ s/\Q$installprivlib\E/$self->{INSTALLPRIVLIB}/;
+
+ # It's a pain to be so friendly to the user. I wish we wouldn't have been so nice.
+ # Now we have '$(PREFIX)' in the string, and the directory won't exist
+ my($installarchlib);
+ ($installarchlib = $self->{INSTALLARCHLIB}) =~ s/\$\(PREFIX\)/$self->{PREFIX}/;
+ if (-d $installarchlib) {
} else {
+ print STDOUT "Directory $self->{INSTALLARCHLIB} not found, thusly\n" if $Verbose;
$self->{INSTALLARCHLIB} = $self->{INSTALLPRIVLIB};
}
+ print STDOUT "Defaulting INSTALLARCHLIB to $self->{INSTALLARCHLIB}\n" if $Verbose;
}
$self->{INSTALLPRIVLIB} ||= $Config::Config{installprivlib};
$self->{MAP_TARGET} ||= "perl";
unless ($self->{LIBPERL_A}){
- if ($Is_VMS) {
- $self->{LIBPERL_A} = 'libperl.olb';
- } else {
- $self->{LIBPERL_A} = "libperl$self->{LIB_EXT}";
- }
+ $self->{LIBPERL_A} = "libperl$self->{LIB_EXT}";
}
# make a few simple checks
unless (-f $self->catfile("$self->{PERL_LIB}","Exporter.pm"));
($self->{DISTNAME}=$self->{NAME}) =~ s#(::)#-#g unless $self->{DISTNAME};
+ if ($self->{VERSION_FROM}){
+ local *PM;
+ open PM, $self->{VERSION_FROM} or die "Could not open '$self->{VERSION_FROM}' (attribute VERSION_FROM): $!";
+ while (<PM>) {
+ chop;
+ next unless /\$([\w:]*\bVERSION)\b.*=/;
+ local $ExtUtils::MakeMaker::module_version_variable = $1;
+ my($eval) = "$_;";
+ eval $eval;
+ die "Could not eval '$eval': $@" if $@;
+ if ($self->{VERSION} = $$ExtUtils::MakeMaker::module_version_variable){
+ print "Setting VERSION to $self->{VERSION}\n" if $Verbose;
+ } else {
+ print "WARNING: Setting VERSION via file '$self->{VERSION_FROM}' failed\n";
+ }
+ last;
+ }
+ close PM;
+ }
$self->{VERSION} = "0.10" unless $self->{VERSION};
+ $self->{VERSION} = sprintf("%.10g",$self->{VERSION})
+ if ($self->{VERSION} =~ /^[\d.]{9,}$/);
($self->{VERSION_SYM} = $self->{VERSION}) =~ s/\W/_/g;
# Graham Barr and Paul Marquess had some ideas how to ensure
# version compatibility between the *.pm file and the
# corresponding *.xs file. The bottomline was, that we need an
# XS_VERSION macro that defaults to VERSION:
- # $self->{XS_VERSION} ||= $self->{VERSION};
+ $self->{XS_VERSION} ||= $self->{VERSION};
# --- Initialize Perl Binary Locations
$pm{$name} = $self->catfile('$(INST_LIBDIR)',"$name");
} elsif ($name =~ /\.PL$/ && $name ne "Makefile.PL") {
($pl_files{$name} = $name) =~ s/\.PL$// ;
+ } elsif ($Is_VMS && $name =~ /\.pl$/ && $name ne 'makefile.pl' &&
+ $name ne 'test.pl') { # case-insensitive filesystem
+ ($pl_files{$name} = $name) =~ s/\.pl$// ;
}
}
return;
}
my($path, $prefix) = ($File::Find::name, '$(INST_LIBDIR)');
- my $striplibpath;
- $prefix = '$(INST_LIB)' if (($striplibpath = $path) =~ s:^lib/::);
- my($inst) = $self->catdir($prefix,$striplibpath);
+ my($striplibpath,$striplibname);
+ $prefix = '$(INST_LIB)' if (($striplibpath = $path) =~ s:^(\W*)lib\W:$1:);
+ ($striplibname,$striplibpath) = fileparse($striplibpath);
+ my($inst) = $self->catfile($self->catdir($prefix,$striplibpath),$striplibname);
local($_) = $inst; # for backwards compatibility
$inst = $self->libscan($inst);
print "libscan($path) => '$inst'\n" if ($ExtUtils::MakeMaker::Verbose >= 2);
$self->{MAN1PODS} = {};
} else {
my %manifypods = ();
- if( exists $self->{EXE_FILES} ){
- foreach $name (@{$self->{EXE_FILES}}) {
- local(*TESTPOD);
- my($ispod)=0;
- if (open(TESTPOD,"<$name")) {
- my $testpodline;
- while ($testpodline = <TESTPOD>) {
- if($testpodline =~ /^=head/) {
- $ispod=1;
- last;
- }
+ if ( exists $self->{EXE_FILES} ) {
+ foreach $name (@{$self->{EXE_FILES}}) {
+ local(*TESTPOD);
+ my($ispod)=0;
+ # one day test, if $/ can be set to '' safely (is the bug fixed that was in 5.001m?)
+ if (open(TESTPOD,"<$name")) {
+ my $testpodline;
+ while ($testpodline = <TESTPOD>) {
+ if($testpodline =~ /^=head1\s+\w+/) {
+ $ispod=1;
+ last;
}
- close(TESTPOD);
- } else {
- # If it doesn't exist yet, we assume, it has pods in it
- $ispod = 1;
- }
- if( $ispod ) {
- $manifypods{$name} = $self->catdir('$(INST_MAN1DIR)',basename($name).'.$(MAN1EXT)');
}
+ close(TESTPOD);
+ } else {
+ # If it doesn't exist yet, we assume, it has pods in it
+ $ispod = 1;
}
+ if( $ispod ) {
+ $manifypods{$name} = $self->catfile('$(INST_MAN1DIR)',basename($name).'.$(MAN1EXT)');
+ }
+ }
}
-
$self->{MAN1PODS} = \%manifypods;
}
if ($self->{MAN3PODS}) {
next;
}
my($manpagename) = $name;
- unless ($manpagename =~ s!^lib/!!) {
- $manpagename = join("/",$self->{ROOTEXT},$manpagename);
+ unless ($manpagename =~ s!^(\W*)lib\W!$1!) {
+ $manpagename = $self->catfile($self->{ROOTEXT},$manpagename);
}
$manpagename =~ s/\.p(od|m|l)$//;
# Strip leading slashes
$manpagename =~ s!^/+!!;
# Turn other slashes into colons
# $manpagename =~ s,/+,::,g;
- $manpagename = $self->replace_manpage_seperator($manpagename);
- $manifypods{$name} = "\$(INST_MAN3DIR)/$manpagename.\$(MAN3EXT)";
+ $manpagename = $self->replace_manpage_separator($manpagename);
+ $manifypods{$name} = $self->catfile("\$(INST_MAN3DIR)","$manpagename.\$(MAN3EXT)");
}
$self->{MAN3PODS} = \%manifypods;
}
@ls;
}
-sub replace_manpage_seperator {
+sub replace_manpage_separator {
my($self,$man) = @_;
$man =~ s,/+,::,g;
$man;
sub libscan {
my($self,$path) = @_;
- return '' if $path =~ m:/RCS/: ;
+ return '' if $path =~ m:/(RCS|SCCS)/: ;
$path;
}
};
# These get overridden for VMS and maybe some other systems
- $self->{NOOP} = "";
+ $self->{NOOP} ||= "";
$self->{FIRST_MAKEFILE} ||= "Makefile";
$self->{MAKEFILE} ||= $self->{FIRST_MAKEFILE};
$self->{MAKE_APERL_FILE} ||= "Makefile.aperl";
- $self->{RM_F} = "rm -f";
- $self->{RM_RF} = "rm -rf";
- $self->{TOUCH} = "touch";
- $self->{CP} = "cp";
- $self->{MV} = "mv";
- $self->{CHMOD} = "chmod";
- $self->{UMASK_NULL} = "umask 0";
+ $self->{NOECHO} ||= '@';
+ $self->{RM_F} ||= "rm -f";
+ $self->{RM_RF} ||= "rm -rf";
+ $self->{TOUCH} ||= "touch";
+ $self->{CP} ||= "cp";
+ $self->{MV} ||= "mv";
+ $self->{CHMOD} ||= "chmod";
+ $self->{UMASK_NULL} ||= "umask 0";
}
sub find_perl {
my $abs;
if ($self->file_name_is_absolute($name)) {
$abs = $name;
- } elsif ($name =~ m|/|) { # file_name_contains_path
+ } elsif (($name =~ m|/|) && ($name !~ m|^\.{1,2}/|)) {
+ # name is a path that does not begin with dot or dotdot
$abs = $self->catfile(".", $name);
} else {
$abs = $self->catfile($dir, $name);
ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
$self = $ExtUtils::MakeMaker::Parent[-1];
}
- unless (ref $self){
- ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
- $self = $ExtUtils::MakeMaker::Parent[-1];
- }
my(@m,$tmp);
push @m, "
VERSION_SYM = $self->{VERSION_SYM}
VERSION_MACRO = VERSION
DEFINE_VERSION = -D\$(VERSION_MACRO)=\\\"\$(VERSION)\\\"
-# XS_VERSION = $self->{XS_VERSION}
-# XS_VERSION_MACRO = XS_VERSION
-# XS_DEFINE_VERSION = -D\$(XS_VERSION_MACRO)=\\\"\$(XS_VERSION)\\\"
+XS_VERSION = $self->{XS_VERSION}
+XS_VERSION_MACRO = XS_VERSION
+XS_DEFINE_VERSION = -D\$(XS_VERSION_MACRO)=\\\"\$(XS_VERSION)\\\"
# In which directory should we put this extension during 'make'?
# This is typically ./blib.
INST_ARCHLIB = $self->{INST_ARCHLIB}
INST_EXE = $self->{INST_EXE}
+PREFIX = $self->{PREFIX}
+
# AFS users will want to set the installation directories for
# the final 'make install' early without setting INST_LIB,
# INST_ARCHLIB, and INST_EXE for the testing phase
ROOTEXT = $self->{ROOTEXT}
DLBASE = $self->{DLBASE}
";
+
+ push @m, "
+VERSION_FROM = $self->{VERSION_FROM}
+" if defined $self->{VERSION_FROM};
+
push @m, "
INC = $self->{INC}
DEFINE = $self->{DEFINE}
MYEXTLIB = $self->{MYEXTLIB}
# Where is the Config information that we are using/depend on
-CONFIGDEP = \$(PERL_ARCHLIB)/Config.pm \$(PERL_INC)/config.h
+CONFIGDEP = \$(PERL_ARCHLIB)/Config.pm \$(PERL_INC)/config.h \$(VERSION_FROM)
";
push @m, '
my($compress) = $attribs{COMPRESS} || 'compress'; # eg gzip
my($suffix) = $attribs{SUFFIX} || 'Z'; # eg gz
my($shar) = $attribs{SHAR} || 'shar'; # eg "shar --gzip"
- my($preop) = $attribs{PREOP} || '@ true'; # eg update MANIFEST
- my($postop) = $attribs{POSTOP} || '@ true'; # eg remove the distdir
+ my($preop) = $attribs{PREOP} || "$self->{NOECHO}true"; # eg update MANIFEST
+ my($postop) = $attribs{POSTOP} || "$self->{NOECHO}true"; # eg remove the distdir
my($ci) = $attribs{CI} || 'ci -u';
my($rcs_label)= $attribs{RCS_LABEL}|| 'rcs -Nv$(VERSION_SYM): -q';
my($dist_cp) = $attribs{DIST_CP} || 'best';
ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
$self = $ExtUtils::MakeMaker::Parent[-1];
}
- unless (ref $self){
- ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
- $self = $ExtUtils::MakeMaker::Parent[-1];
- }
my(@m);
push @m, '
-all :: config $(INST_PM) subdirs linkext manifypods
+all :: config $(INST_PM) subdirs linkext manifypods reorg_packlist
subdirs :: $(MYEXTLIB)
push @m, q{
Version_check:
- @$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
+ }.$self->{NOECHO}.q{$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
-e 'use ExtUtils::MakeMaker qw($$Version &Version_check);' \
-e '&Version_check("$(MM_VERSION)")'
};
$self = $ExtUtils::MakeMaker::Parent[-1];
}
- return '' if ($Config::Config{osname} ne 'aix');
+ return '' unless ($Config::Config{osname} eq 'aix' && $self->needs_linking() );
my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
push(@m,"
$self->{BASEEXT}.exp: Makefile.PL
",' $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e \'use ExtUtils::MakeMaker qw(&mksymlists); \\
- MM->new()->mksymlists({DL_FUNCS => ',
+ MM->new({NAME => "'.$self->{NAME}.'"})->mksymlists({DL_FUNCS => ',
%$funcs ? neatvalue($funcs) : '""',', DL_VARS => ',
@$vars ? neatvalue($vars) : '""', ", NAME => \"$self->{NAME}\"})'
");
ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
$self = $ExtUtils::MakeMaker::Parent[-1];
}
- return '' unless $self->needs_linking();
- '
+ return '
+BOOTSTRAP =
+' unless $self->has_link_code();
+
+ return '
BOOTSTRAP = '."$self->{BASEEXT}.bs".'
# As Mkbootstrap might not write a file (if none is required)
# we use touch to prevent make continually trying to remake it.
# The DynaLoader only reads a non-empty file.
-$(BOOTSTRAP): '."$self->{MAKEFILE} $self->{BOOTDEP}".'
- @ echo "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
- @ $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
+$(BOOTSTRAP): '."$self->{MAKEFILE} $self->{BOOTDEP}".' $(INST_ARCHAUTODIR)/.exists
+ '.$self->{NOECHO}.'echo "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
+ '.$self->{NOECHO}.'$(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
-e \'use ExtUtils::Mkbootstrap;\' \
-e \'Mkbootstrap("$(BASEEXT)","$(BSLOADLIBS)");\'
- @ $(TOUCH) $(BOOTSTRAP)
+ '.$self->{NOECHO}.'$(TOUCH) $(BOOTSTRAP)
$(CHMOD) 644 $@
- @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
+ '.$self->{NOECHO}.'echo $@ >> $(INST_ARCHAUTODIR)/.packlist
-$(INST_BOOT): $(BOOTSTRAP)
- @ '.$self->{RM_RF}.' $(INST_BOOT)
+$(INST_BOOT): $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists
+ '."$self->{NOECHO}$self->{RM_RF}".' $(INST_BOOT)
-'.$self->{CP}.' $(BOOTSTRAP) $(INST_BOOT)
$(CHMOD) 644 $@
- @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
+ '.$self->{NOECHO}.'echo $@ >> $(INST_ARCHAUTODIR)/.packlist
';
}
}
return '' unless $self->needs_linking(); #might be because of a subdir
- return '
-$(INST_DYNAMIC):
-' unless ($self->{OBJECT} or @{$self->{C} || []} or $self->{MYEXTLIB});
+ return '' unless $self->has_link_code;
my($otherldflags) = $attribs{OTHERLDFLAGS} || "";
+ my($inst_dynamic_dep) = $attribs{INST_DYNAMIC_DEP} || "";
my($armaybe) = $attribs{ARMAYBE} || $self->{ARMAYBE} || ":";
my($ldfrom) = '$(LDFROM)';
my($osname) = $Config::Config{osname};
# from $(OBJECT) and possibly $(MYEXTLIB).
ARMAYBE = '.$armaybe.'
OTHERLDFLAGS = '.$otherldflags.'
+INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
-$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists $(EXPORT_LIST) $(PERL_ARCHIVE)
+$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(INST_DYNAMIC_DEP)
');
if ($armaybe ne ':'){
$ldfrom = 'tmp$(LIB_EXT)';
' $(OTHERLDFLAGS) $(MYEXTLIB) $(LDLOADLIBS) $(EXPORT_LIST) $(PERL_ARCHIVE)');
push @m, '
$(CHMOD) 755 $@
- @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
+ '.$self->{NOECHO}.'echo $@ >> $(INST_ARCHAUTODIR)/.packlist
';
push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
$self = $ExtUtils::MakeMaker::Parent[-1];
}
- return '' unless $self->needs_linking(); #might be because of a subdir
+# Come to think of it, if there are subdirs with linkcode, we still have no INST_STATIC
+# return '' unless $self->needs_linking(); #might be because of a subdir
- return '
-$(INST_DYNAMIC):
-' unless ($self->{OBJECT} or @{$self->{C} || []} or $self->{MYEXTLIB});
+ return '' unless $self->has_link_code;
my(@m);
push(@m, <<'END');
END
# If this extension has it's own library (eg SDBM_File)
# then copy that to $(INST_STATIC) and add $(OBJECT) into it.
- push(@m, " $self->{CP} \$(MYEXTLIB) \$\@\n") if $self->{MYEXTLIB};
+ push(@m, "\t$self->{CP} \$(MYEXTLIB) \$\@\n") if $self->{MYEXTLIB};
- push(@m, <<'END');
- $(AR) cr $@ $(OBJECT) && $(RANLIB) $@
- @echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)/extralibs.ld
+ push @m,
+q{ $(AR) cr $@ $(OBJECT) && $(RANLIB) $@
+ }.$self->{NOECHO}.q{echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)/extralibs.ld
$(CHMOD) 755 $@
- @echo $@ >> $(INST_ARCHAUTODIR)/.packlist
-END
+ }.$self->{NOECHO}.q{echo $@ >> $(INST_ARCHAUTODIR)/.packlist
+};
# Old mechanism - still available:
- push(@m, <<'END') if $self->{PERL_SRC};
- @ echo "$(EXTRALIBS)" >> $(PERL_SRC)/ext.libs
-END
+ push @m, "\t$self->{NOECHO}".q{echo "$(EXTRALIBS)" >> $(PERL_SRC)/ext.libs}."\n\n"
+ if $self->{PERL_SRC};
push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
join('', "\n",@m);
ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
$self = $ExtUtils::MakeMaker::Parent[-1];
}
- warn "Warning: Most probably 'make' will have problems processing this file: $inst\n"
- if $inst =~ m![:#]!;
+ if ($inst =~ m,[:\#],){
+ warn "Warning: 'make' would have problems processing this file: '$inst', SKIPPED\n";
+ return '';
+ }
my($instdir) = $inst =~ m|(.*)/|;
my(@m);
push(@m,"
-$inst: $dist $self->{MAKEFILE} $instdir/.exists
-".' @ '.$self->{RM_F}.' $@
- $(UMASK_NULL) && '."$self->{CP} $dist".' $@
- @ echo $@ >> $(INST_ARCHAUTODIR)/.packlist
+$inst: $dist $self->{MAKEFILE} $instdir/.exists \$(INST_ARCHAUTODIR)/.exists
+ $self->{NOECHO}$self->{RM_F}".' $@
+ $(UMASK_NULL) && '."$self->{CP} $dist \$\@
+ $self->{NOECHO}echo ".'$@ >> $(INST_ARCHAUTODIR)/.packlist
');
- push(@m, "\t\@\$(AUTOSPLITFILE) \$@ $splitlib/auto\n")
+ push(@m, "\t$self->{NOECHO}\$(AUTOSPLITFILE) \$@ $splitlib/auto\n")
if ($splitlib and $inst =~ m/\.pm$/);
push @m, $self->dir_target($instdir);
my($dist);
my($pod2man_exe);
if (defined $self->{PERL_SRC}) {
- $pod2man_exe = "$self->{PERL_SRC}/pod/pod2man";
+ $pod2man_exe = $self->catfile($self->{PERL_SRC},'pod','pod2man');
} else {
- $pod2man_exe = "$Config{bin}/pod2man";
+ $pod2man_exe = $self->catfile($Config{bin},'pod2man');
}
unless ($self->perl_script($pod2man_exe)) {
# No pod2man but some MAN3PODS to be installed
q[POD2MAN = $(PERL) -we '%m=@ARGV;for (keys %m){' \\
-e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "].$self->{MAKEFILE}.q[";' \\
-e 'print "Installing $$m{$$_}\n";' \\
--e 'system("$(PERL) $(POD2MAN_EXE) $$_>$$m{$$_}")==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\
+-e 'system("$$^X \\"-I$(PERL_ARCHLIB)\\" \\"-I$(PERL_LIB)\\" $(POD2MAN_EXE) $$_>$$m{$$_}")==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\
-e 'chmod 0644, $$m{$$_} or warn "chmod 644 $$m{$$_}: $$!\n";}'
];
push @m, "\nmanifypods : ";
push(@m,"\n");
if (%{$self->{MAN1PODS}} || %{$self->{MAN3PODS}}) {
- push @m, "\t\@\$(POD2MAN) \\\n\t";
+ push @m, "\t$self->{NOECHO}\$(POD2MAN) \\\n\t";
push @m, join " \\\n\t", %{$self->{MAN1PODS}}, %{$self->{MAN3PODS}};
}
join('', @m);
qq{
subdirs ::
- \@-cd $subdir && \$(MAKE) all \$(PASTHRU)
+ $self->{NOECHO}-cd $subdir && \$(MAKE) all \$(PASTHRU)
};
}
my(@otherfiles) = values %{$self->{XS}}; # .c files from *.xs files
push(@otherfiles, $attribs{FILES}) if $attribs{FILES};
- push(@otherfiles, qw[./blib Makeaperlfile $(INST_ARCHAUTODIR)/extralibs.all
+ push(@otherfiles, qw[./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all
perlmain.c mon.out core so_locations
*~ */*~ */*/*~
*$(OBJ_EXT) *$(LIB_EXT)
my(@m);
push @m, q{
doc_install ::
- @ echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
- @ $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \\
+ }.$self->{NOECHO}.q{echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
+ }.$self->{NOECHO}.q{$(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \\
-e "use ExtUtils::MakeMaker; MY->new({})->writedoc('Module', '$(NAME)', \\
- 'LINKTYPE=$(LINKTYPE)', 'VERSION=$(VERSION)', \\
+ 'LINKTYPE=$(LINKTYPE)', 'VERSION=$(VERSION)', 'XS_VERSION=$(XS_VERSION)', \\
'EXE_FILES=$(EXE_FILES)')" >> $(INSTALLARCHLIB)/perllocal.pod
};
push(@m, map("\tcd $_ && test -f $self->{MAKEFILE} && \$(MAKE) install\n",
@{$self->{DIR}}));
- push(@m, "\t\@\$(PERL) \"-I\$(PERL_ARCHLIB)\" \"-I\$(PERL_LIB)\" -e 'require File::Path;' \\
- -e '\$\$message = q[ You do not have permissions to install into];' \\
- -e 'File::Path::mkpath(\@ARGV);' \\
- -e 'foreach (\@ARGV){ die qq{ \$\$message \$\$_\\n} unless -w \$\$_}' \\
- \$(INSTALLPRIVLIB) \$(INSTALLARCHLIB)
- \$(MAKE) INST_LIB=\$(INSTALLPRIVLIB) INST_ARCHLIB=\$(INSTALLARCHLIB) INST_EXE=\$(INSTALLBIN) INST_MAN1DIR=\$(INSTALLMAN1DIR) INST_MAN3DIR=\$(INSTALLMAN3DIR) all
-");
-
-# .packlist is not supported in this MakeMaker, because it needs a serious fix. -i.bak
-# is not allowed in an environment, with afs, we have to read here, write there, and I
-# don't have time to fix it today -> TODO
-# The following line was executed with MMs up to 5.10:
-# \@\$(PERL) -i.bak -lne 'print unless \$\$seen{ \$\$_ }++' \$(PERL_ARCHLIB)/auto/\$(FULLEXT)/.packlist
-
+ push(@m, "\t$self->{NOECHO}".q{$(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e 'require File::Path;' \
+ -e '$$message = q[ You do not have permissions to install into];' \
+ -e 'File::Path::mkpath(@ARGV);' \
+ -e 'foreach (@ARGV){ die qq{ $$message $$_\\n} unless -w $$_}' \
+ $(INSTALLPRIVLIB) $(INSTALLARCHLIB)
+ $(MAKE) INST_LIB=$(INSTALLPRIVLIB) INST_ARCHLIB=$(INSTALLARCHLIB) \
+ INST_EXE=$(INSTALLBIN) INST_MAN1DIR=$(INSTALLMAN1DIR) \
+ INST_MAN3DIR=$(INSTALLMAN3DIR) all
+
+reorg_packlist:
+ }.$self->{NOECHO}.q{$(PERL) -ne 'BEGIN{die "Need 2 arguments to reorg .packlist" unless @ARGV==2;' \
+ -e '$$out=$$ARGV[1]; shift @ARGV while @ARGV && ! -f $$ARGV[0]; exit unless @ARGV;}' \
+ -e 'push @lines, $$_ unless $$seen{$$_}++;' \
+ -e 'END{open STDOUT, ">$$out" or die "Cannot write to $$out: $$!";' \
+ -e 'print @lines;}' $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist \
+ $(INST_ARCHAUTODIR)/.packlist
+});
+
+# From MM 5.16:
+
+ push @m, q[
+# Comment on .packlist rewrite above:
+# Read both .packlist files: the old one in PERL_ARCHLIB/auto/FULLEXT, and the new one
+# in INSTARCHAUTODIR. Don't croak if they are missing. Write to the one
+# in INSTARCHAUTODIR.
- push @m, '
#### UNINSTALL IS STILL EXPERIMENTAL ####
uninstall ::
-';
+];
push(@m, map("\tcd $_ && test -f $self->{MAKEFILE} && \$(MAKE) uninstall\n",
@{$self->{DIR}}));
# We do NOT just update config.h because that is not sufficient.
# An out of date config.h is not fatal but complains loudly!
$(PERL_INC)/config.h: $(PERL_SRC)/config.sh
- -@echo "Warning: $(PERL_INC)/config.h out of date with $(PERL_SRC)/config.sh"; false
+ -'.$self->{NOECHO}.'echo "Warning: $(PERL_INC)/config.h out of date with $(PERL_SRC)/config.sh"; false
$(PERL_ARCHLIB)/Config.pm: $(PERL_SRC)/config.sh
- @echo "Warning: $(PERL_ARCHLIB)/Config.pm may be out of date with $(PERL_SRC)/config.sh"
+ '.$self->{NOECHO}.'echo "Warning: $(PERL_ARCHLIB)/Config.pm may be out of date with $(PERL_SRC)/config.sh"
cd $(PERL_SRC) && $(MAKE) lib/Config.pm
') if $self->{PERL_SRC};
# We take a very conservative approach here, but it\'s worth it.
# We move Makefile to Makefile.old here to avoid gnu make looping.
'.$self->{MAKEFILE}.' : Makefile.PL $(CONFIGDEP)
- @echo "Makefile out-of-date with respect to $?"
- @echo "Cleaning current config before rebuilding Makefile..."
- -@mv '."$self->{MAKEFILE} $self->{MAKEFILE}.old".'
+ '.$self->{NOECHO}.'echo "Makefile out-of-date with respect to $?"
+ '.$self->{NOECHO}.'echo "Cleaning current config before rebuilding Makefile..."
+ -'.$self->{NOECHO}.'mv '."$self->{MAKEFILE} $self->{MAKEFILE}.old".'
-$(MAKE) -f '.$self->{MAKEFILE}.'.old clean >/dev/null 2>&1 || true
$(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" Makefile.PL '."@ARGV".'
- @echo ">>> Your Makefile has been rebuilt. <<<"
- @echo ">>> Please rerun the make command. <<<"; false
+ '.$self->{NOECHO}.'echo ">>> Your Makefile has been rebuilt. <<<"
+ '.$self->{NOECHO}.'echo ">>> Please rerun the make command. <<<"; false
';
join "", @m;
test :: \$(TEST_TYPE)
");
- push(@m, map("\t\@cd $_ && test -f $self->{MAKEFILE} && \$(MAKE) test \$(PASTHRU)\n",
+ push(@m, map("\t$self->{NOECHO}cd $_ && test -f $self->{MAKEFILE} && \$(MAKE) test \$(PASTHRU)\n",
@{$self->{DIR}}));
- push(@m, "\t\@echo 'No tests defined for \$(NAME) extension.'\n")
+ 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");
push(@m, $self->test_via_script('$(FULLPERL)', 'test.pl')) if -f "test.pl";
push(@m, "\n");
- # Occasionally we may face this degenerated target:
+ # Occasionally we may face this degenerate target:
push @m, "test_ : test_dynamic\n\n";
if ($self->needs_linking()) {
unless ($self->{MAKEAPERL}) {
push @m, q{
$(MAP_TARGET) :: $(MAKE_APERL_FILE)
- $(MAKE) -f Makefile.aperl static $@
+ $(MAKE) -f $(MAKE_APERL_FILE) static $@
$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
- @ echo Writing \"Makefile.aperl\" for this $(MAP_TARGET)
- @ $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
+ }.$self->{NOECHO}.q{echo Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
+ }.$self->{NOECHO}.q{$(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
Makefile.PL DIR=}, $dir, q{ \
MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
- MAKEAPERL=1 NORECURS=1};
+ MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=};
push @m, map( " \\\n\t\t$_", @ARGV );
push @m, "\n";
push @m, "
\$(INST_ARCHAUTODIR)/extralibs.all: \$(INST_ARCHAUTODIR)/.exists ".join(" \\\n\t", @$extra)."
- \@ $self->{RM_F} \$\@
- \@ \$(TOUCH) \$\@
+ $self->{NOECHO}$self->{RM_F} \$\@
+ $self->{NOECHO}\$(TOUCH) \$\@
";
my $catfile;
push @m, "
\$(MAP_TARGET) :: $tmp/perlmain\$(OBJ_EXT) \$(MAP_LIBPERL) \$(MAP_STATIC) \$(INST_ARCHAUTODIR)/extralibs.all
\$(MAP_LINKCMD) -o \$\@ $tmp/perlmain\$(OBJ_EXT) \$(MAP_LIBPERL) \$(MAP_STATIC) `cat \$(INST_ARCHAUTODIR)/extralibs.all` \$(MAP_PRELIBS)
- @ echo 'To install the new \"\$(MAP_TARGET)\" binary, call'
- @ echo ' make -f $makefilename inst_perl MAP_TARGET=\$(MAP_TARGET)'
- @ echo 'To remove the intermediate files say'
- @ echo ' make -f $makefilename map_clean'
+ $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}echo ' make -f $makefilename map_clean'
$tmp/perlmain\$(OBJ_EXT): $tmp/perlmain.c
";
push @m, qq{
$tmp/perlmain.c: $makefilename}, q{
- @ echo Writing $@
- @ $(PERL) $(MAP_PERLINC) -e 'use ExtUtils::Miniperl; \\
+ }.$self->{NOECHO}.q{echo Writing $@
+ }.$self->{NOECHO}.q{$(PERL) $(MAP_PERLINC) -e 'use ExtUtils::Miniperl; \\
writemain(grep s#.*/auto/##, qw|$(MAP_STATIC)|)' > $@.tmp && mv $@.tmp $@
};
# We write EXTRA outside the perl program to have it eval'd by the shell
push @m, q{
doc_inst_perl:
- @ echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
- @ $(FULLPERL) -e 'use ExtUtils::MakeMaker; MY->new->writedoc("Perl binary",' \\
+ }.$self->{NOECHO}.q{echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
+ }.$self->{NOECHO}.q{$(FULLPERL) -e 'use ExtUtils::MakeMaker; MY->new->writedoc("Perl binary",' \\
-e '"$(MAP_TARGET)", "MAP_STATIC=$(MAP_STATIC)",' \\
-e '"MAP_EXTRA=@ARGV", "MAP_LIBPERL=$(MAP_LIBPERL)")' \\
-- `cat $(INST_ARCHAUTODIR)/extralibs.all` >> $(INSTALLARCHLIB)/perllocal.pod
next if $self->{DIR_TARGET}{$self}{$dir}++;
push @m, "
$dir/.exists :: \$(PERL)
- \@ \$(MKPATH) $dir
- \@ \$(TOUCH) $dir/.exists
- \@-\$(CHMOD) 755 $dir
+ $self->{NOECHO}\$(MKPATH) $dir
+ $self->{NOECHO}\$(TOUCH) $dir/.exists
+ $self->{NOECHO}-\$(CHMOD) 755 $dir
";
}
join "", @m;
ExtUtils::MakeMaker::TieAtt::warndirectuse((caller(0))[3]);
$self = $ExtUtils::MakeMaker::Parent[-1];
}
- my($time);
- require "ctime.pl";
- chop($time = ctime(time));
+ my($time) = localtime;
print "=head2 $time: $what C<$name>\n\n=over 4\n\n=item *\n\n";
print join "\n\n=item *\n\n", map("C<$_>",@attribs);
print "\n\n=back\n\n";
}
-sub catdir { shift; join('/',@_); }
-sub catfile { shift; join('/',@_); }
+sub catdir { shift; my $result = join('/',@_); $result =~ s:/+:/:g; $result; }
+sub catfile { shift; my $result = join('/',@_); $result =~ s:/+:/:g; $result; }
package ExtUtils::MM_OS2;
join('',@m);
}
-sub replace_manpage_seperator {
+sub replace_manpage_separator {
my($self,$man) = @_;
$man =~ s,/+,.,g;
$man;
=head2 PREFIX attribute
-The PREFIX attribute can be used to set the INSTALL* attributes
-(except INSTALLMAN1DIR) in one go. The quickest way to install a
-module in a non-standard place
+The PREFIX attribute can be used to set the INSTALL* attributes in one
+go. The quickest way to install a module in a non-standard place
perl Makefile.PL PREFIX=~
-is identical to
-
- perl Makefile.PL INSTALLPRIVLIB=~/perl5/lib INSTALLBIN=~/bin \
- INSTALLMAN3DIR=~/perl5/man/man3
+This will replace the string specified by $Config{prefix} in all
+$Config{install*} values.
Note, that the tilde expansion is done by MakeMaker, not by perl by
default, nor by make.
procedure every time you recompile an extension, unless you are sure
the AFS istallation directories are still valid.
-
-
=head2 Static Linking of a new Perl Binary
An extension that is built with the above steps is ready to use on
Your version number for distributing the package. This defaults to
0.1.
+=item VERSION_FROM
+
+Instead of specifying the VERSION in the Makefile.PL you can let
+MakeMaker parse a file to determine the version number. The parsing
+routine requires that the file named by VERSION_FROM contains one
+single line to compute the version number. The first line in the file
+that contains the regular expression
+
+ /(\$[\w:]*\bVERSION)\b.*=/
+
+will be evaluated with eval() and the value of the named variable
+B<after> the eval() will be assigned to the VERSION attribute of the
+MakeMaker object. The following lines will be parsed o.k.:
+
+ $VERSION = '1.00';
+ ( $VERSION ) = '$Revision: 1.135 $ ' =~ /\$Revision:\s+([^\s]+)/;
+ $FOO::VERSION = '1.10';
+
+but these will fail:
+
+ my $VERSION = '1.01';
+ local $VERSION = '1.02';
+ local $FOO::VERSION = '1.30';
+
+The file named in VERSION_FROM is added as a dependency to Makefile to
+guarantee, that the Makefile contains the correct VERSION macro after
+a change of the file.
+
=item XS
Hashref of .xs files. MakeMaker will default this. e.g.
C<-noprototypes>. See the xsubpp documentation for details. MakeMaker
defaults to the empty string.
+=item XS_VERSION
+
+Your version number for the .xs file of this package. This defaults
+to the value of the VERSION attribute.
+
=back
=head2 Additional lowercase attributes
=item dynamic_lib
- {ARMAYBE => 'ar', OTHERLDFLAGS => '...'}
+ {ARMAYBE => 'ar', OTHERLDFLAGS => '...', INST_DYNAMIC_DEP => '...'}
=item installpm