lib/ExtUtils/t/prefixify.t See if MakeMaker can apply a PREFIX
lib/ExtUtils/t/problems.t How MakeMaker reacts to build problems
lib/ExtUtils/t/prompt.t See if E::MM::prompt() works
+lib/ExtUtils/t/recurs.t See if recursive builds work
lib/ExtUtils/t/split_command.t See if MM's xargs-like function works
lib/ExtUtils/t/testlib.t See if ExtUtils::testlib works
lib/ExtUtils/t/VERSION_FROM.t See if MakeMaker's VERSION_FROM works
#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
name: ExtUtils-MakeMaker
-version: 6.10_07
+version: 6.10_08
version_from: lib/ExtUtils/MakeMaker.pm
installdirs: perl
requires:
Pod::Man: 0
distribution_type: module
-generated_by: ExtUtils::MakeMaker version 6.10_07
+generated_by: ExtUtils::MakeMaker version 6.10_08
=over 4
+=item installvars
+
+ my @installvars = $mm->installvars;
+
+A list of all the INSTALL* variables without the INSTALL prefix. Useful
+for iteration or building related variable sets.
+
+=cut
+
+sub installvars {
+ return qw(PRIVLIB SITELIB VENDORLIB
+ ARCHLIB SITEARCH VENDORARCH
+ BIN SITEBIN VENDORBIN
+ SCRIPT
+ MAN1DIR SITEMAN1DIR VENDORMAN1DIR
+ MAN3DIR SITEMAN3DIR VENDORMAN3DIR
+ );
+}
+
=item os_flavor_is
$mm->os_flavor_is($this_flavor);
@ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix );
use vars qw($VERSION);
-$VERSION = '1.05';
+$VERSION = '1.06';
use Config;
use Cwd 'cwd';
next if ($name =~ /^\./ or $ignore{$name});
next unless $self->libscan($name);
if (-d $name){
+ next if $self->{NORECURS};
$dir{$name} = $name if (-f ":$name:Makefile.PL");
} elsif ($name =~ /\.xs$/){
my($c); ($c = $name) =~ s/\.xs$/.c/;
use ExtUtils::MakeMaker qw($Verbose neatvalue);
-$VERSION = '1.37';
+$VERSION = '1.38';
require ExtUtils::MM_Any;
@ISA = qw(ExtUtils::MM_Any);
my($self) = @_;
my @m = ();
- for my $macro (qw/
+ for my $macro (qw(
AR_STATIC_ARGS DIRFILESEP
NAME NAME_SYM
VERSION VERSION_MACRO VERSION_SYM DEFINE_VERSION
XS_VERSION XS_VERSION_MACRO XS_DEFINE_VERSION
INST_ARCHLIB INST_SCRIPT INST_BIN INST_LIB
+ INST_MAN1DIR INST_MAN3DIR
+ MAN1EXT MAN3EXT
INSTALLDIRS
DESTDIR PREFIX
PERLPREFIX SITEPREFIX VENDORPREFIX
- INSTALLPRIVLIB INSTALLSITELIB INSTALLVENDORLIB
- INSTALLARCHLIB INSTALLSITEARCH INSTALLVENDORARCH
- INSTALLBIN INSTALLSITEBIN INSTALLVENDORBIN INSTALLSCRIPT
+ ),
+ (map { ("INSTALL".$_,
+ "DESTINSTALL".$_)
+ } $self->installvars),
+ qw(
PERL_LIB
PERL_ARCHLIB
LIBPERL_A MYEXTLIB
PERL_CORE
PERM_RW PERM_RWX
- / )
+ ) )
{
next unless defined $self->{$macro};
MAN3PODS = ".$self->wraplist(sort keys %{$self->{MAN3PODS}})."
";
- for my $macro (qw/
- INST_MAN1DIR MAN1EXT
- INSTALLMAN1DIR INSTALLSITEMAN1DIR INSTALLVENDORMAN1DIR
- INST_MAN3DIR MAN3EXT
- INSTALLMAN3DIR INSTALLSITEMAN3DIR INSTALLVENDORMAN3DIR
- /)
- {
- next unless defined $self->{$macro};
- push @m, "$macro = $self->{$macro}\n";
- }
-
push @m, q{
# Where is the Config information that we are using/depend on
join "", @m;
}
+=item init_DEST
+
+ $mm->init_DEST
+
+Defines the DESTDIR and DEST* variables paralleling the INSTALL*.
+
+=cut
+
+sub init_DEST {
+ my $self = shift;
+
+ # Initialize DESTDIR
+ $self->{DESTDIR} ||= '';
+
+ # Make DEST variables.
+ foreach my $var ($self->installvars) {
+ my $destvar = 'DESTINSTALL'.$var;
+ $self->{$destvar} ||= '$(DESTDIR)$(INSTALL'.$var.')';
+ }
+}
+
+
=item init_dist
$mm->init_dist;
next unless $self->libscan($name);
if (-d $name){
next if -l $name; # We do not support symlinks at all
+ next if $self->{NORECURS};
$dir{$name} = $name if (-f $self->catfile($name,"Makefile.PL"));
} elsif ($name =~ /\.xs\z/){
my($c); ($c = $name) =~ s/\.xs\z/.c/;
$self->init_lib2arch;
- if( $Config{usevendorprefix} ) {
- $Config_Override{installvendorman1dir} =
- $self->catdir($Config{vendorprefixexp}, 'man', 'man1');
- $Config_Override{installvendorman3dir} =
- $self->catdir($Config{vendorprefixexp}, 'man', 'man3');
- }
- else {
- $Config_Override{installvendorman1dir} = '';
- $Config_Override{installvendorman3dir} = '';
+ # Initialize installvendorman*dir if necessary
+ foreach my $num (1, 3) {
+ my $k = 'installvendorman'.$num.'dir';
+
+ unless ($Config{$k}) {
+ $Config_Override{$k} = $Config{usevendorprefix} ?
+ $self->catdir($Config{vendorprefixexp}, 'man', "man$num") :
+ '';
+ }
}
my $iprefix = $Config{installprefixexp} || $Config{installprefix} ||
$self->{VENDORPREFIX} ||= $vprefix;
}
- # Add DESTDIR.
- $self->{DESTDIR} ||= '';
- foreach my $prefix (qw(PREFIX PERLPREFIX SITEPREFIX VENDORPREFIX)) {
- $self->{$prefix} = '$(DESTDIR)'.$self->{$prefix};
- }
-
my $arch = $Config{archname};
my $version = $Config{version};
pure_perl_install ::
$(NOECHO) $(MOD_INSTALL) \
read }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
- write }.$self->catfile('$(INSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
- $(INST_LIB) $(INSTALLPRIVLIB) \
- $(INST_ARCHLIB) $(INSTALLARCHLIB) \
- $(INST_BIN) $(INSTALLBIN) \
- $(INST_SCRIPT) $(INSTALLSCRIPT) \
- $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
- $(INST_MAN3DIR) $(INSTALLMAN3DIR)
+ write }.$self->catfile('$(DESTINSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
+ $(INST_LIB) $(DESTINSTALLPRIVLIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \
+ $(INST_BIN) $(DESTINSTALLBIN) \
+ $(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+ $(INST_MAN1DIR) $(DESTINSTALLMAN1DIR) \
+ $(INST_MAN3DIR) $(DESTINSTALLMAN3DIR)
$(NOECHO) $(WARN_IF_OLD_PACKLIST) \
}.$self->catdir('$(SITEARCHEXP)','auto','$(FULLEXT)').q{
pure_site_install ::
$(NOECHO) $(MOD_INSTALL) \
read }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
- write }.$self->catfile('$(INSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \
- $(INST_LIB) $(INSTALLSITELIB) \
- $(INST_ARCHLIB) $(INSTALLSITEARCH) \
- $(INST_BIN) $(INSTALLSITEBIN) \
- $(INST_SCRIPT) $(INSTALLSCRIPT) \
- $(INST_MAN1DIR) $(INSTALLSITEMAN1DIR) \
- $(INST_MAN3DIR) $(INSTALLSITEMAN3DIR)
+ write }.$self->catfile('$(DESTINSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \
+ $(INST_LIB) $(DESTINSTALLSITELIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLSITEARCH) \
+ $(INST_BIN) $(DESTINSTALLSITEBIN) \
+ $(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+ $(INST_MAN1DIR) $(DESTINSTALLSITEMAN1DIR) \
+ $(INST_MAN3DIR) $(DESTINSTALLSITEMAN3DIR)
$(NOECHO) $(WARN_IF_OLD_PACKLIST) \
}.$self->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{
pure_vendor_install ::
$(NOECHO) $(MOD_INSTALL) \
read }.$self->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
- write }.$self->catfile('$(INSTALLVENDORARCH)','auto','$(FULLEXT)','.packlist').q{ \
- $(INST_LIB) $(INSTALLVENDORLIB) \
- $(INST_ARCHLIB) $(INSTALLVENDORARCH) \
- $(INST_BIN) $(INSTALLVENDORBIN) \
- $(INST_SCRIPT) $(INSTALLSCRIPT) \
- $(INST_MAN1DIR) $(INSTALLVENDORMAN1DIR) \
- $(INST_MAN3DIR) $(INSTALLVENDORMAN3DIR)
+ write }.$self->catfile('$(DESTINSTALLVENDORARCH)','auto','$(FULLEXT)','.packlist').q{ \
+ $(INST_LIB) $(DESTINSTALLVENDORLIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \
+ $(INST_BIN) $(DESTINSTALLVENDORBIN) \
+ $(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+ $(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \
+ $(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
doc_perl_install ::
- $(NOECHO) $(ECHO) Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
- -$(NOECHO) $(MKPATH) $(INSTALLARCHLIB)
+ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+ -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
-$(NOECHO) $(DOC_INSTALL) \
"Module" "$(NAME)" \
"installed into" "$(INSTALLPRIVLIB)" \
LINKTYPE "$(LINKTYPE)" \
VERSION "$(VERSION)" \
EXE_FILES "$(EXE_FILES)" \
- >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
+ >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
doc_site_install ::
- $(NOECHO) $(ECHO) Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
- -$(NOECHO) $(MKPATH) $(INSTALLARCHLIB)
+ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+ -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
-$(NOECHO) $(DOC_INSTALL) \
"Module" "$(NAME)" \
"installed into" "$(INSTALLSITELIB)" \
LINKTYPE "$(LINKTYPE)" \
VERSION "$(VERSION)" \
EXE_FILES "$(EXE_FILES)" \
- >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
+ >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
doc_vendor_install ::
- $(NOECHO) $(ECHO) Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
- -$(NOECHO) $(MKPATH) $(INSTALLARCHLIB)
+ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+ -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
-$(NOECHO) $(DOC_INSTALL) \
"Module" "$(NAME)" \
"installed into" "$(INSTALLVENDORLIB)" \
LINKTYPE "$(LINKTYPE)" \
VERSION "$(VERSION)" \
EXE_FILES "$(EXE_FILES)" \
- >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
+ >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
};
push @m, q{
doc_inst_perl:
- $(NOECHO) $(ECHO) Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
- -$(NOECHO) $(MKPATH) $(INSTALLARCHLIB)
+ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+ -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
-$(NOECHO) $(DOC_INSTALL) \
"Perl binary" "$(MAP_TARGET)" \
MAP_STATIC "$(MAP_STATIC)" \
MAP_EXTRA "`cat $(INST_ARCHAUTODIR)/extralibs.all`" \
MAP_LIBPERL "$(MAP_LIBPERL)" \
- >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
+ >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
};
inst_perl: pure_inst_perl doc_inst_perl
pure_inst_perl: $(MAP_TARGET)
- }.$self->{CP}.q{ $(MAP_TARGET) }.$self->catfile('$(INSTALLBIN)','$(MAP_TARGET)').q{
+ }.$self->{CP}.q{ $(MAP_TARGET) }.$self->catfile('$(DESTINSTALLBIN)','$(MAP_TARGET)').q{
clean :: map_clean
use File::Basename;
use vars qw($Revision @ISA $VERSION);
($VERSION) = '5.68';
-($Revision) = q$Revision: 1.101 $ =~ /Revision:\s+(\S+)/;
+($Revision) = q$Revision: 1.104 $ =~ /Revision:\s+(\S+)/;
require ExtUtils::MM_Any;
require ExtUtils::MM_Unix;
$man;
}
+=item init_DEST
+
+(override) Because of the difficulty concatenating VMS filepaths we
+must pre-expand the DEST* variables.
+
+=cut
+
+sub init_DEST {
+ my $self = shift;
+
+ $self->SUPER::init_DEST;
+
+ # Expand DEST variables.
+ foreach my $var ($self->installvars) {
+ my $destvar = 'DESTINSTALL'.$var;
+ $self->{$destvar} = File::Spec->eliminate_macros($self->{$destvar});
+ }
+}
+
+
=item init_DIRFILESEP
No seperator between a directory path and a filename on VMS.
# Cleanup paths for directories in MMS macros.
foreach my $macro ( qw [
INST_BIN INST_SCRIPT INST_LIB INST_ARCHLIB
- INSTALLPRIVLIB INSTALLSITELIB INSTALLVENDORLIB
- INSTALLARCHLIB INSTALLSITEARCH INSTALLVENDORARCH
- INSTALLBIN INSTALLSITEBIN INSTALLVENDORBIN INSTALLSCRIPT
- INSTALLMAN1DIR INSTALLSITEMAN1DIR INSTALLVENDORMAN1DIR
- INSTALLMAN3DIR INSTALLSITEMAN3DIR INSTALLVENDORMAN3DIR
PERL_LIB PERL_ARCHLIB
- PERL_INC PERL_SRC ] )
+ PERL_INC PERL_SRC ],
+ (map { 'INSTALL'.$_ } $self->installvars)
+ )
{
next unless defined $self->{$macro};
next if $macro =~ /MAN/ && $self->{$macro} eq 'none';
# This hack brought to you by DCL's 255-character command line limit
pure_perl_install ::
$(NOECHO) $(PERLRUN) "-MFile::Spec" -e "print 'read '.File::Spec->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').' '" >.MM_tmp
- $(NOECHO) $(PERLRUN) "-MFile::Spec" -e "print 'write '.File::Spec->catfile('$(INSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').' '" >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_LIB) $(INSTALLPRIVLIB) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_ARCHLIB) $(INSTALLARCHLIB) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_BIN) $(INSTALLBIN) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_SCRIPT) $(INSTALLSCRIPT) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_MAN1DIR) $(INSTALLMAN1DIR) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_MAN3DIR) $(INSTALLMAN3DIR) " >>.MM_tmp
+ $(NOECHO) $(PERLRUN) "-MFile::Spec" -e "print 'write '.File::Spec->catfile('$(DESTINSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').' '" >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_LIB) $(DESTINSTALLPRIVLIB) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_ARCHLIB) $(DESTINSTALLARCHLIB) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_BIN) $(DESTINSTALLBIN) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_SCRIPT) $(DESTINSTALLSCRIPT) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_MAN1DIR) $(DESTINSTALLMAN1DIR) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_MAN3DIR) $(DESTINSTALLMAN3DIR) " >>.MM_tmp
$(NOECHO) $(MOD_INSTALL) <.MM_tmp
$(NOECHO) $(RM_F) .MM_tmp
$(NOECHO) $(WARN_IF_OLD_PACKLIST) ].$self->catfile($self->{SITEARCHEXP},'auto',$self->{FULLEXT},'.packlist').q[
# Likewise
pure_site_install ::
$(NOECHO) $(PERLRUN) "-MFile::Spec" -e "print 'read '.File::Spec->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').' '" >.MM_tmp
- $(NOECHO) $(PERLRUN) "-MFile::Spec" -e "print 'write '.File::Spec->catfile('$(INSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').' '" >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_LIB) $(INSTALLSITELIB) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_ARCHLIB) $(INSTALLSITEARCH) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_BIN) $(INSTALLSITEBIN) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_SCRIPT) $(INSTALLSCRIPT) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_MAN1DIR) $(INSTALLSITEMAN1DIR) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_MAN3DIR) $(INSTALLSITEMAN3DIR) " >>.MM_tmp
+ $(NOECHO) $(PERLRUN) "-MFile::Spec" -e "print 'write '.File::Spec->catfile('$(DESTINSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').' '" >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_LIB) $(DESTINSTALLSITELIB) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_ARCHLIB) $(DESTINSTALLSITEARCH) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_BIN) $(DESTINSTALLSITEBIN) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_SCRIPT) $(DESTINSTALLSCRIPT) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_MAN1DIR) $(DESTINSTALLSITEMAN1DIR) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_MAN3DIR) $(DESTINSTALLSITEMAN3DIR) " >>.MM_tmp
$(NOECHO) $(MOD_INSTALL) <.MM_tmp
$(NOECHO) $(RM_F) .MM_tmp
$(NOECHO) $(WARN_IF_OLD_PACKLIST) ].$self->catfile($self->{PERL_ARCHLIB},'auto',$self->{FULLEXT},'.packlist').q[
pure_vendor_install ::
$(NOECHO) $(PERLRUN) "-MFile::Spec" -e "print 'read '.File::Spec->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').' '" >.MM_tmp
- $(NOECHO) $(PERLRUN) "-MFile::Spec" -e "print 'write '.File::Spec->catfile('$(INSTALLVENDORARCH)','auto','$(FULLEXT)','.packlist').' '" >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_LIB) $(INSTALLVENDORLIB) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_ARCHLIB) $(INSTALLVENDORARCH) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_BIN) $(INSTALLVENDORBIN) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_SCRIPT) $(INSTALLSCRIPT) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_MAN1DIR) $(INSTALLVENDORMAN1DIR) " >>.MM_tmp
- $(NOECHO) $(ECHO_N) "$(INST_MAN3DIR) $(INSTALLVENDORMAN3DIR) " >>.MM_tmp
+ $(NOECHO) $(PERLRUN) "-MFile::Spec" -e "print 'write '.File::Spec->catfile('$(DESTINSTALLVENDORARCH)','auto','$(FULLEXT)','.packlist').' '" >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_LIB) $(DESTINSTALLVENDORLIB) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_BIN) $(DESTINSTALLVENDORBIN) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_SCRIPT) $(DESTINSTALLSCRIPT) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) " >>.MM_tmp
+ $(NOECHO) $(ECHO_N) "$(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR) " >>.MM_tmp
$(NOECHO) $(MOD_INSTALL) <.MM_tmp
$(NOECHO) $(RM_F) .MM_tmp
# Ditto
doc_perl_install ::
- $(NOECHO) $(ECHO) "Appending installation info to ].$self->catfile($self->{INSTALLARCHLIB}, 'perllocal.pod').q["
- $(NOECHO) $(MKPATH) $(INSTALLARCHLIB)
+ $(NOECHO) $(ECHO) "Appending installation info to ].$self->catfile($self->{DESTINSTALLARCHLIB}, 'perllocal.pod').q["
+ $(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
$(NOECHO) $(ECHO_N) "installed into|$(INSTALLPRIVLIB)|" >.MM_tmp
$(NOECHO) $(ECHO_N) "LINKTYPE|$(LINKTYPE)|VERSION|$(VERSION)|EXE_FILES|$(EXE_FILES) " >>.MM_tmp
],@exe_files,
-q[ $(NOECHO) $(DOC_INSTALL) "Module" "$(NAME)" <.MM_tmp >>].$self->catfile($self->{INSTALLARCHLIB},'perllocal.pod').q[
+q[ $(NOECHO) $(DOC_INSTALL) "Module" "$(NAME)" <.MM_tmp >>].$self->catfile($self->{DESTINSTALLARCHLIB},'perllocal.pod').q[
$(NOECHO) $(RM_F) .MM_tmp
# And again
doc_site_install ::
- $(NOECHO) $(ECHO) "Appending installation info to ].$self->catfile($self->{INSTALLARCHLIB}, 'perllocal.pod').q["
- $(NOECHO) $(MKPATH) $(INSTALLARCHLIB)
+ $(NOECHO) $(ECHO) "Appending installation info to ].$self->catfile($self->{DESTINSTALLARCHLIB}, 'perllocal.pod').q["
+ $(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
$(NOECHO) $(ECHO_N) "installed into|$(INSTALLSITELIB)|" >.MM_tmp
$(NOECHO) $(ECHO_N) "LINKTYPE|$(LINKTYPE)|VERSION|$(VERSION)|EXE_FILES|$(EXE_FILES) " >>.MM_tmp
],@exe_files,
-q[ $(NOECHO) $(DOC_INSTALL) "Module" "$(NAME)" <.MM_tmp >>].$self->catfile($self->{INSTALLARCHLIB},'perllocal.pod').q[
+q[ $(NOECHO) $(DOC_INSTALL) "Module" "$(NAME)" <.MM_tmp >>].$self->catfile($self->{DESTINSTALLARCHLIB},'perllocal.pod').q[
$(NOECHO) $(RM_F) .MM_tmp
doc_vendor_install ::
- $(NOECHO) $(ECHO) "Appending installation info to ].$self->catfile($self->{INSTALLARCHLIB}, 'perllocal.pod').q["
- $(NOECHO) $(MKPATH) $(INSTALLARCHLIB)
+ $(NOECHO) $(ECHO) "Appending installation info to ].$self->catfile($self->{DESTINSTALLARCHLIB}, 'perllocal.pod').q["
+ $(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
$(NOECHO) $(ECHO_N) "installed into|$(INSTALLVENDORLIB)|" >.MM_tmp
$(NOECHO) $(ECHO_N) "LINKTYPE|$(LINKTYPE)|VERSION|$(VERSION)|EXE_FILES|$(EXE_FILES) " >>.MM_tmp
],@exe_files,
-q[ $(NOECHO) $(DOC_INSTALL) "Module" "$(NAME)" <.MM_tmp >>].$self->catfile($self->{INSTALLARCHLIB},'perllocal.pod').q[
+q[ $(NOECHO) $(DOC_INSTALL) "Module" "$(NAME)" <.MM_tmp >>].$self->catfile($self->{DESTINSTALLARCHLIB},'perllocal.pod').q[
$(NOECHO) $(RM_F) .MM_tmp
];
push @m, q[
# Still more from the 255-char line length limit
doc_inst_perl :
- $(NOECHO) $(MKPATH) $(INSTALLARCHLIB)
+ $(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
$(NOECHO) $(ECHO) "Perl binary $(MAP_TARGET)|" >.MM_tmp
$(NOECHO) $(ECHO) "MAP_STATIC|$(MAP_STATIC)|" >>.MM_tmp
$(NOECHO) $(PERL) -pl040 -e " " ].$self->catfile('$(INST_ARCHAUTODIR)','extralibs.all'),q[ >>.MM_tmp
$(NOECHO) $(ECHO) -e "MAP_LIBPERL|$(MAP_LIBPERL)|" >>.MM_tmp
- $(NOECHO) $(DOC_INSTALL) <.MM_tmp >>].$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q[
+ $(NOECHO) $(DOC_INSTALL) <.MM_tmp >>].$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q[
$(NOECHO) $(RM_F) .MM_tmp
];
# Translate $(PERLPREFIX) to a real path.
$rprefix = $self->eliminate_macros($rprefix);
$rprefix = VMS::Filespec::vmspath($rprefix) if $rprefix;
+ $sprefix = VMS::Filespec::vmspath($sprefix) if $sprefix;
$default = VMS::Filespec::vmsify($default)
unless $default =~ /\[.*\]/;
(my $var_no_install = $var) =~ s/^install//;
- my $path = $self->{uc $var} || $Config{lc $var} ||
- $Config{lc $var_no_install};
+ my $path = $self->{uc $var} ||
+ $ExtUtils::MM_Unix::Config_Override{lc $var} ||
+ $Config{lc $var} || $Config{lc $var_no_install};
if( !$path ) {
print STDERR " no Config found for $var.\n" if $Verbose >= 2;
package ExtUtils::MakeMaker::FAQ;
-(our $VERSION) = sprintf "%03d", q$Revision: 1.8 $ =~ /Revision:\s+(\S+)/;
+(our $VERSION) = sprintf "%03d", q$Revision: 1.9 $ =~ /Revision:\s+(\S+)/;
1;
__END__
In CVS and RCS you use $Z<>Revision$ writing it like so:
- $VERSION = sprintf "%d.%03d", q$Revision: 1.8 $ =~ /(\d+)/g;
+ $VERSION = sprintf "%d.%03d", q$Revision: 1.9 $ =~ /(\d+)/g;
Every time the file is checked in the $Z<>Revision$ will be updated,
updating your $VERSION.
complicated.
# must be all on one line or MakeMaker will get confused.
- $VERSION = do { my @r = (q$Revision: 1.5.3.4 $ =~ /\d+/g); sprintf "%d."."%03d" x $#r, @r };
+ $VERSION = do { my @r = (q$Revision: 1.9 $ =~ /\d+/g); sprintf "%d."."%03d" x $#r, @r };
=item What's this F<META.yml> thing and how did it get in my F<MANIFEST>?!
deliberately. Even if it was done deliberately, we still want to hear
if it caused problems.
+- If you're testing MakeMaker against a development version of Perl,
+ please also check it against the latest stable version. This makes it
+ easier to figure out if its MakeMaker or Perl at fault.
+
Patching details
chdir 't';
BEGIN {
- 1 while unlink 'ecmdfile', 'newfile';
+ $Testfile = 'testfile.foo';
+}
+
+BEGIN {
+ 1 while unlink $Testfile, 'newfile';
# forcibly remove ecmddir/temp2, but don't import mkpath
use File::Path ();
File::Path::rmtree( 'ecmddir' );
}
BEGIN {
- use Test::More tests => 27;
+ use Test::More tests => 26;
use File::Spec;
}
}
{
- # get a file in the current directory, replace last char with wildcard
- my $file;
- {
- local *DIR;
- opendir(DIR, File::Spec->curdir());
- while ($file = readdir(DIR)) {
- $file =~ s/\.\z// if $^O eq 'VMS';
- last if $file =~ /^\w/;
- }
- closedir DIR;
- }
-
-
- # % means 'match one character' on VMS. Everything else is ?
- my $match_char = $^O eq 'VMS' ? '%' : '?';
- ($ARGV[0] = $file) =~ s/.\z/$match_char/;
-
- # this should find the file
- ExtUtils::Command::expand_wildcards();
-
- is( scalar @ARGV, 1, 'found one file' );
- like( $ARGV[0], qr/$file/, 'expanded wildcard ? successfully' );
-
- # try it with the asterisk now
- ($ARGV[0] = $file) =~ s/.{3}\z/\*/;
- ExtUtils::Command::expand_wildcards();
-
- ok( (grep { qr/$file/ } @ARGV), 'expanded wildcard * successfully' );
-
# concatenate this file with itself
# be extra careful the regex doesn't match itself
use TieOut;
'concatenation worked' );
# the truth value here is reversed -- Perl true is C false
- @ARGV = ( 'ecmdfile' );
+ @ARGV = ( $Testfile );
ok( test_f(), 'testing non-existent file' );
- @ARGV = ( 'ecmdfile' );
- cmp_ok( ! test_f(), '==', (-f 'ecmdfile'), 'testing non-existent file' );
+ @ARGV = ( $Testfile );
+ cmp_ok( ! test_f(), '==', (-f $Testfile), 'testing non-existent file' );
# these are destructive, have to keep setting @ARGV
- @ARGV = ( 'ecmdfile' );
+ @ARGV = ( $Testfile );
touch();
- @ARGV = ( 'ecmdfile' );
+ @ARGV = ( $Testfile );
ok( test_f(), 'now creating that file' );
- @ARGV = ( 'ecmdfile' );
+ @ARGV = ( $Testfile );
ok( -e $ARGV[0], 'created!' );
my ($now) = time;
my $new_stamp = (stat('newfile'))[9];
cmp_ok( abs($new_stamp - $stamp), '>=', 2, 'newer file created' );
- @ARGV = qw(newfile ecmdfile);
+ @ARGV = ('newfile', $Testfile);
eqtime();
- $stamp = (stat('ecmdfile'))[9];
+ $stamp = (stat($Testfile))[9];
cmp_ok( abs($new_stamp - $stamp), '<=', 1, 'eqtime' );
# eqtime use to clear the contents of the file being equalized!
- open(FILE, '>>ecmdfile') || die $!;
+ open(FILE, ">>$Testfile") || die $!;
print FILE "Foo";
close FILE;
- @ARGV = qw(newfile ecmdfile);
+ @ARGV = ('newfile', $Testfile);
eqtime();
- ok( -s 'ecmdfile', "eqtime doesn't clear the file being equalized" );
+ ok( -s $Testfile, "eqtime doesn't clear the file being equalized" );
SKIP: {
if ($^O eq 'amigaos' || $^O eq 'os2' || $^O eq 'MSWin32' ||
}
# change a file to execute-only
- @ARGV = ( '0100', 'ecmdfile' );
+ @ARGV = ( '0100', $Testfile );
ExtUtils::Command::chmod();
- is( ((stat('ecmdfile'))[2] & 07777) & 0700,
+ is( ((stat($Testfile))[2] & 07777) & 0700,
0100, 'change a file to execute-only' );
# change a file to read-only
- @ARGV = ( '0400', 'ecmdfile' );
+ @ARGV = ( '0400', $Testfile );
ExtUtils::Command::chmod();
- is( ((stat('ecmdfile'))[2] & 07777) & 0700,
+ is( ((stat($Testfile))[2] & 07777) & 0700,
($^O eq 'vos' ? 0500 : 0400), 'change a file to read-only' );
# change a file to write-only
- @ARGV = ( '0200', 'ecmdfile' );
+ @ARGV = ( '0200', $Testfile );
ExtUtils::Command::chmod();
- is( ((stat('ecmdfile'))[2] & 07777) & 0700,
+ is( ((stat($Testfile))[2] & 07777) & 0700,
($^O eq 'vos' ? 0700 : 0200), 'change a file to write-only' );
}
# change a file to read-write
- @ARGV = ( '0600', 'ecmdfile' );
+ @ARGV = ( '0600', $Testfile );
ExtUtils::Command::chmod();
- is( ((stat('ecmdfile'))[2] & 07777) & 0700,
+ is( ((stat($Testfile))[2] & 07777) & 0700,
($^O eq 'vos' ? 0700 : 0600), 'change a file to read-write' );
# mkpath
ok( -e $ARGV[0], 'temp directory created' );
# copy a file to a nested subdirectory
- unshift @ARGV, 'ecmdfile';
+ unshift @ARGV, $Testfile;
cp();
- ok( -e File::Spec->join( 'ecmddir', 'temp2', 'ecmdfile' ), 'copied okay' );
+ ok( -e File::Spec->join( 'ecmddir', 'temp2', $Testfile ), 'copied okay' );
# cp should croak if destination isn't directory (not a great warning)
- @ARGV = ( 'ecmdfile' ) x 3;
+ @ARGV = ( $Testfile ) x 3;
eval { cp() };
like( $@, qr/Too many arguments/, 'cp croaks on error' );
# move a file to a subdirectory
- @ARGV = ( 'ecmdfile', 'ecmddir' );
+ @ARGV = ( $Testfile, 'ecmddir' );
mv();
- ok( ! -e 'ecmdfile', 'moved file away' );
- ok( -e File::Spec->join( 'ecmddir', 'ecmdfile' ), 'file in new location' );
+ ok( ! -e $Testfile, 'moved file away' );
+ ok( -e File::Spec->join( 'ecmddir', $Testfile ), 'file in new location' );
# mv should also croak with the same wacky warning
- @ARGV = ( 'ecmdfile' ) x 3;
+ @ARGV = ( $Testfile ) x 3;
eval { mv() };
like( $@, qr/Too many arguments/, 'mv croaks on error' );
+ # Test expand_wildcards()
+ {
+ my $file = $Testfile;
+ @ARGV = ();
+ chdir 'ecmddir';
+
+ # % means 'match one character' on VMS. Everything else is ?
+ my $match_char = $^O eq 'VMS' ? '%' : '?';
+ ($ARGV[0] = $file) =~ s/.\z/$match_char/;
+
+ # this should find the file
+ ExtUtils::Command::expand_wildcards();
+
+ is_deeply( \@ARGV, [$file], 'expanded wildcard ? successfully' );
+
+ # try it with the asterisk now
+ ($ARGV[0] = $file) =~ s/.{3}\z/\*/;
+ ExtUtils::Command::expand_wildcards();
+
+ is_deeply( \@ARGV, [$file], 'expanded wildcard * successfully' );
+
+ chdir File::Spec->updir;
+ }
+
# remove some files
- my @files = @ARGV = ( File::Spec->catfile( 'ecmddir', 'ecmdfile' ),
- File::Spec->catfile( 'ecmddir', 'temp2', 'ecmdfile' ) );
+ my @files = @ARGV = ( File::Spec->catfile( 'ecmddir', $Testfile ),
+ File::Spec->catfile( 'ecmddir', 'temp2', $Testfile ) );
rm_f();
ok( ! -e $_, "removed $_ successfully" ) for (@ARGV);
}
END {
- 1 while unlink 'ecmdfile', 'newfile';
+ 1 while unlink $Testfile, 'newfile';
File::Path::rmtree( 'ecmddir' );
}
my $config_prefix = $Config{installprefixexp} || $Config{installprefix} ||
$Config{prefixexp} || $Config{prefix};
-is( $mm->{PERLPREFIX}, '$(DESTDIR)'.$config_prefix, 'PERLPREFIX' );
+is( $mm->{PERLPREFIX}, $config_prefix, 'PERLPREFIX' );
is( !!$mm->{PERL_CORE}, !!$ENV{PERL_CORE}, 'PERL_CORE' );
}
use strict;
-use Test::More tests => 38;
+use Test::More tests => 36;
use MakeMaker::Test::Utils;
use ExtUtils::MakeMaker;
use File::Spec;
foreach my $prefix (qw(PREFIX PERLPREFIX SITEPREFIX VENDORPREFIX)) {
unlike( $mm->{$prefix}, qr/\$\(PREFIX\)/ );
- like( $mm->{$prefix}, qr/^\$\(DESTDIR\)/,
- "\$(DESTDIR) prepended to $prefix" );
}
undef $stdout;
untie *STDOUT;
-is( $mm->{PREFIX}, '$(DESTDIR)'.$PREFIX, 'PREFIX' );
+is( $mm->{PREFIX}, $PREFIX, 'PREFIX' );
foreach my $prefix (qw(PERLPREFIX SITEPREFIX VENDORPREFIX)) {
- is( $mm->{$prefix}, '$(DESTDIR)$(PREFIX)',
- "\$(PREFIX) overrides $prefix" );
+ is( $mm->{$prefix}, '$(PREFIX)', "\$(PREFIX) overrides $prefix" );
}
is( !!$mm->{PERL_CORE}, !!$ENV{PERL_CORE}, 'PERL_CORE' );
# are generated.
{
undef *ExtUtils::MM_Unix::Config;
+ undef *ExtUtils::MM_Unix::Config_Override;
%ExtUtils::MM_Unix::Config = %Config;
+ *ExtUtils::MM_VMS::Config = \%ExtUtils::MM_Unix::Config;
+
$ExtUtils::MM_Unix::Config{installman1dir} = '';
$ExtUtils::MM_Unix::Config{installman3dir} = '';
is( $mm->{INSTALLMAN1DIR}, $wibble );
is( $mm->{INSTALLMAN3DIR}, 'none' );
}
+
+# Check that when installvendorman*dir is set in Config it is honored
+# [rt.cpan.org 2949]
+{
+ undef *ExtUtils::MM_Unix::Config;
+ undef *ExtUtils::MM_Unix::Config_Override;
+ undef *ExtUtils::MM_VMS::Config;
+
+ %ExtUtils::MM_Unix::Config = %Config;
+ *ExtUtils::MM_VMS::Config = \%ExtUtils::MM_Unix::Config;
+
+ $ExtUtils::MM_Unix::Config{installvendorman1dir} =
+ File::Spec->catdir('foo','bar');
+ $ExtUtils::MM_Unix::Config{installvendorman3dir} = '';
+ $ExtUtils::MM_Unix::Config{usevendorprefix} = 1;
+ $ExtUtils::MM_Unix::Config{vendorprefixexp} = 'something';
+
+ my $stdout = tie *STDOUT, 'TieOut' or die;
+ my $mm = WriteMakefile(
+ NAME => 'Big::Dummy',
+ VERSION_FROM => 'lib/Big/Dummy.pm',
+ PREREQ_PM => {},
+ PERL_CORE => $ENV{PERL_CORE},
+
+ # In case the local installation doesn't have man pages.
+ INSTALLMAN1DIR=> 'foo/bar/baz',
+ INSTALLMAN3DIR=> 'foo/bar/baz',
+ );
+
+ is( $mm->{INSTALLVENDORMAN1DIR}, File::Spec->catdir('foo','bar'),
+ 'installvendorman1dir (in %Config) not modified' );
+ isnt( $mm->{INSTALLVENDORMAN3DIR}, '',
+ 'installvendorman3dir (not in %Config) set' );
+}
use strict;
use Config;
-use Test::More tests => 54;
+use Test::More tests => 73;
use MakeMaker::Test::Utils;
use File::Find;
use File::Spec;
+use File::Path;
# 'make disttest' sets a bunch of environment variables which interfere
# with our testing.
$| = 1;
-ok( chdir 'Big-Dummy', "chdir'd to Big-Dummy" ) ||
+ok( chdir('Big-Dummy'), "chdir'd to Big-Dummy" ) ||
diag("chdir failed: $!");
my @mpl_out = run(qq{$perl Makefile.PL "PREFIX=../dummy-install"});
SKIP: {
- skip "VMS install targets do not preserve PREFIX", 8 if $Is_VMS;
+ skip "VMS install targets do not preserve $(PREFIX)", 8 if $Is_VMS;
$install_out = run("$make install PREFIX=elsewhere");
is( $?, 0, 'install with PREFIX override' ) || diag $install_out;
ok( $files{'Liar.pm'}, ' Liar.pm installed' );
ok( $files{'.packlist'}, ' packlist created' );
ok( $files{'perllocal.pod'},' perllocal.pod created' );
+ rmtree('elsewhere');
+}
+
+
+SKIP: {
+ skip "VMS install targets do not preserve $(DESTDIR)", 10 if $Is_VMS;
+
+ $install_out = run("$make install PREFIX= DESTDIR=other");
+ is( $?, 0, 'install with DESTDIR' ) ||
+ diag $install_out;
+ like( $install_out, qr/^Installing /m );
+ like( $install_out, qr/^Writing /m );
+
+ ok( -d 'other', ' destdir created' );
+ %files = ();
+ my $perllocal;
+ find( sub {
+ $files{$_} = $File::Find::name;
+ }, 'other' );
+ ok( $files{'Dummy.pm'}, ' Dummy.pm installed' );
+ ok( $files{'Liar.pm'}, ' Liar.pm installed' );
+ ok( $files{'.packlist'}, ' packlist created' );
+ ok( $files{'perllocal.pod'},' perllocal.pod created' );
+
+ ok( open(PERLLOCAL, $files{'perllocal.pod'} ) ) ||
+ diag("Can't open $files{'perllocal.pod'}: $!");
+ { local $/;
+ unlike(<PERLLOCAL>, qr/other/, 'DESTDIR should not appear in perllocal');
+ }
+ close PERLLOCAL;
+
+# TODO not available in the min version of Test::Harness we require
+# ok( open(PACKLIST, $files{'.packlist'} ) ) ||
+# diag("Can't open $files{'.packlist'}: $!");
+# { local $/;
+# local $TODO = 'DESTDIR still in .packlist';
+# unlike(<PACKLIST>, qr/other/, 'DESTDIR should not appear in .packlist');
+# }
+# close PACKLIST;
+
+ rmtree('other');
+}
+
+
+SKIP: {
+ skip "VMS install targets do not preserve $(PREFIX)", 9 if $Is_VMS;
+
+ $install_out = run("$make install PREFIX=elsewhere DESTDIR=other/");
+ is( $?, 0, 'install with PREFIX override and DESTDIR' ) ||
+ diag $install_out;
+ like( $install_out, qr/^Installing /m );
+ like( $install_out, qr/^Writing /m );
+
+ ok( !-d 'elsewhere', ' install dir not created' );
+ ok( -d 'other/elsewhere', ' destdir created' );
+ %files = ();
+ find( sub { $files{$_} = $File::Find::name; }, 'other/elsewhere' );
+ ok( $files{'Dummy.pm'}, ' Dummy.pm installed' );
+ ok( $files{'Liar.pm'}, ' Liar.pm installed' );
+ ok( $files{'.packlist'}, ' packlist created' );
+ ok( $files{'perllocal.pod'},' perllocal.pod created' );
+ rmtree('other');
}
--- /dev/null
+#!/usr/bin/perl -w
+
+# This tests MakeMaker against recursive builds
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't' if -d 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+use Config;
+
+use Test::More tests => 25;
+use MakeMaker::Test::Utils;
+use MakeMaker::Test::Setup::Recurs;
+
+# 'make disttest' sets a bunch of environment variables which interfere
+# with our testing.
+delete @ENV{qw(PREFIX LIB MAKEFLAGS)};
+
+my $perl = which_perl();
+my $Is_VMS = $^O eq 'VMS';
+
+chdir('t');
+
+perl_lib;
+
+my $Touch_Time = calibrate_mtime();
+
+$| = 1;
+
+ok( setup_recurs(), 'setup' );
+END {
+ ok( chdir File::Spec->updir );
+ ok( teardown_recurs(), 'teardown' );
+}
+
+ok( chdir('Recurs'), q{chdir'd to Recurs} ) ||
+ diag("chdir failed: $!");
+
+
+# Check recursive Makefile building.
+my @mpl_out = run(qq{$perl Makefile.PL});
+
+cmp_ok( $?, '==', 0, 'Makefile.PL exited with zero' ) ||
+ diag(@mpl_out);
+
+my $makefile = makefile_name();
+
+ok( -e $makefile, 'Makefile written' );
+ok( -e File::Spec->catfile('prj2',$makefile), 'sub Makefile written' );
+
+my $make = make_run();
+
+run("$make");
+is( $?, 0, 'recursive make exited normally' );
+
+ok( chdir File::Spec->updir );
+ok( teardown_recurs(), 'cleaning out recurs' );
+ok( setup_recurs(), ' setting up fresh copy' );
+ok( chdir('Recurs'), q{chdir'd to Recurs} ) ||
+ diag("chdir failed: $!");
+
+
+# Check NORECURS
+@mpl_out = run(qq{$perl Makefile.PL "NORECURS=1"});
+
+cmp_ok( $?, '==', 0, 'Makefile.PL NORECURS=1 exited with zero' ) ||
+ diag(@mpl_out);
+
+$makefile = makefile_name();
+
+ok( -e $makefile, 'Makefile written' );
+ok( !-e File::Spec->catfile('prj2',$makefile), 'sub Makefile not written' );
+
+$make = make_run();
+
+run("$make");
+is( $?, 0, 'recursive make exited normally' );
+
+
+ok( chdir File::Spec->updir );
+ok( teardown_recurs(), 'cleaning out recurs' );
+ok( setup_recurs(), ' setting up fresh copy' );
+ok( chdir('Recurs'), q{chdir'd to Recurs} ) ||
+ diag("chdir failed: $!");
+
+
+# Check that arguments aren't stomped when they have .. prepended
+# [rt.perl.org 4345]
+@mpl_out = run(qq{$perl Makefile.PL "INST_SCRIPT=cgi"});
+
+cmp_ok( $?, '==', 0, 'Makefile.PL exited with zero' ) ||
+ diag(@mpl_out);
+
+$makefile = makefile_name();
+my $submakefile = File::Spec->catfile('prj2',$makefile);
+
+ok( -e $makefile, 'Makefile written' );
+ok( -e $submakefile, 'sub Makefile written' );
+
+my $inst_script = File::Spec->catdir(File::Spec->updir, 'cgi');
+ok( open(MAKEFILE, $submakefile) ) || diag("Can't open $submakefile: $!");
+{ local $/;
+ like( <MAKEFILE>, qr/^\s*INST_SCRIPT\s*=\s*\Q$inst_script\E/m,
+ 'prepend .. not stomping WriteMakefile args' )
+}
+close MAKEFILE;