package ExtUtils::MakeMaker;
-$VERSION = "5.46";
+$VERSION = "5.47";
$Version_OK = "5.17"; # Makefiles older than $Version_OK will die
# (Will be checked from MakeMaker version 4.13 onwards)
($Revision = substr(q$Revision: 1.222 $, 10)) =~ s/\s+$//;
sub eval_in_subdirs {
my($self) = @_;
my($dir);
- use Cwd 'cwd';
+ use Cwd qw(cwd abs_path);
my $pwd = cwd();
+ local @INC = map eval {abs_path($_) if -e} || $_, @INC;
foreach $dir (@{$self->{DIR}}){
my($abs) = $self->catdir($pwd,$dir);
check_hints($self);
+ my %configure_att; # record &{$self->{CONFIGURE}} attributes
my(%initial_att) = %$self; # record initial attributes
my($prereq);
eval $eval;
if ($@) {
- warn "Warning: prerequisite $prereq failed to load: $@";
+ warn "Warning: prerequisite $prereq $self->{PREREQ_PM}->{$prereq} not found. We have "
+ . ($prereq->VERSION || 'unknown version');
}
elsif ($prereq->VERSION < $self->{PREREQ_PM}->{$prereq} ){
warn "Warning: prerequisite $prereq $self->{PREREQ_PM}->{$prereq} not found";
if (defined $self->{CONFIGURE}) {
if (ref $self->{CONFIGURE} eq 'CODE') {
- $self = { %$self, %{&{$self->{CONFIGURE}}}};
+ %configure_att = %{&{$self->{CONFIGURE}}};
+ $self = { %$self, %configure_att };
} else {
Carp::croak "Attribute 'CONFIGURE' to WriteMakefile() not a code reference\n";
}
}
if ($self->{PARENT}) {
$self->{PARENT}->{CHILDREN}->{$newclass} = $self;
- foreach my $opt (qw(CAPI POLLUTE)) {
+ foreach my $opt (qw(POLLUTE PERL_CORE)) {
if (exists $self->{PARENT}->{$opt}
and not exists $self->{$opt})
{
}
}
}
+ my @fm = grep /^FIRST_MAKEFILE=/, @ARGV;
+ parse_args($self,@fm) if @fm;
} else {
parse_args($self,split(' ', $ENV{PERL_MM_OPT} || ''),@ARGV);
}
$v =~ tr/\n/ /s;
push @{$self->{RESULT}}, "# $key => $v";
}
+ undef %initial_att; # free memory
+
+ if (defined $self->{CONFIGURE}) {
+ push @{$self->{RESULT}}, <<END;
+
+# MakeMaker 'CONFIGURE' Parameters:
+END
+ if (scalar(keys %configure_att) > 0) {
+ foreach $key (sort keys %configure_att){
+ my($v) = neatvalue($configure_att{$key});
+ $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
+ $v =~ tr/\n/ /s;
+ push @{$self->{RESULT}}, "# $key => $v";
+ }
+ }
+ else
+ {
+ push @{$self->{RESULT}}, "# no values returned";
+ }
+ undef %configure_att; # free memory
+ }
# turn the SKIP array into a SKIPHASH hash
my (%skip,$skip);
}
sub WriteEmptyMakefile {
- if (-f 'Makefile.old') {
- chmod 0666, 'Makefile.old';
- unlink 'Makefile.old' or warn "unlink Makefile.old: $!";
- }
- rename 'Makefile', 'Makefile.old' or warn "rename Makefile Makefile.old: $!"
- if -f 'Makefile';
- open MF, '> Makefile' or die "open Makefile for write: $!";
- print MF <<'EOP';
+ Carp::croak "WriteEmptyMakefile: Need even number of args" if @_ % 2;
+ local $SIG{__WARN__} = \&warnhandler;
+
+ my %att = @_;
+ my $self = MM->new(\%att);
+ if (-f "$self->{MAKEFILE}.old") {
+ chmod 0666, "$self->{MAKEFILE}.old";
+ unlink "$self->{MAKEFILE}.old" or warn "unlink $self->{MAKEFILE}.old: $!";
+ }
+ rename $self->{MAKEFILE}, "$self->{MAKEFILE}.old"
+ or warn "rename $self->{MAKEFILE} $self->{MAKEFILE}.old: $!"
+ if -f $self->{MAKEFILE};
+ open MF, '>', $self->{MAKEFILE} or die "open $self->{MAKEFILE} for write: $!";
+ print MF <<'EOP';
all:
clean:
test:
EOP
- close MF or die "close Makefile for write: $!";
+ close MF or die "close $self->{MAKEFILE} for write: $!";
}
sub check_manifest {
and the values portion of the XS attribute hash. This is not
currently used by MakeMaker but may be handy in Makefile.PLs.
-=item CAPI
-
-[This attribute is obsolete in Perl 5.6. PERL_OBJECT builds are C-compatible
-by default.]
-
-Switch to force usage of the Perl C API even when compiling for PERL_OBJECT.
-
-Note that this attribute is passed through to any recursive build,
-but if and only if the submodule's Makefile.PL itself makes no mention
-of the 'CAPI' attribute.
-
=item CCFLAGS
String that will be included in the compiler call command line between
=item PERLRUN
- $(PERL) -I$(PERL_ARCH) -I$(PERL_LIB)
-
+Use this instead of $(PERL) or $(FULLPERL) when you wish to run perl.
+It will set up extra necessary flags for you.
+
=item PERLRUNINST
-
- $(PERL) -I$(INST_ARCH) -I$(INST_LIB) -I$(PERL_ARCH) -I$(PERL_LIB)
-
+
+Use this instead of $(PERL) or $(FULLPERL) when you wish to run
+perl to work with modules. It will add things like -I$(INST_ARCH)
+and other necessary flags.
+
=item PERL_SRC
Directory containing the Perl source code (use of this should be
=item TEST_LIBS
-The set of -I's necessary to run a "make test".
-
+The set of -I's necessary to run a "make test". Use as:
+$(PERL) $(TEST_LIBS) -e '...' for example.
+
=item TYPEMAPS
Ref to array of typemap file names. Use this when the typemaps are