summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MANIFEST4
-rw-r--r--lib/ExtUtils/Changes64
-rw-r--r--lib/ExtUtils/Command/MM.pm13
-rw-r--r--lib/ExtUtils/MM_Any.pm6
-rw-r--r--lib/ExtUtils/MM_Cygwin.pm3
-rw-r--r--lib/ExtUtils/MM_NW5.pm4
-rw-r--r--lib/ExtUtils/MM_Unix.pm778
-rw-r--r--lib/ExtUtils/MM_VMS.pm53
-rw-r--r--lib/ExtUtils/MM_Win32.pm26
-rw-r--r--lib/ExtUtils/MM_Win95.pm14
-rw-r--r--lib/ExtUtils/MakeMaker.pm99
-rw-r--r--lib/ExtUtils/t/Big-Fat-Dummy/Liar/Makefile.PL12
-rw-r--r--lib/ExtUtils/t/Big-Fat-Dummy/Liar/lib/Big/Fat/Liar.pm5
-rw-r--r--lib/ExtUtils/t/INST.t110
-rw-r--r--lib/ExtUtils/t/MM_Cygwin.t7
-rw-r--r--lib/ExtUtils/t/MM_Win32.t2
-rw-r--r--lib/ExtUtils/t/basic.t63
-rw-r--r--lib/ExtUtils/t/prefixify.t24
-rw-r--r--t/lib/MakeMaker/Test/Utils.pm42
19 files changed, 860 insertions, 469 deletions
diff --git a/MANIFEST b/MANIFEST
index f7a7df7f8c..be6e311dfe 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1003,6 +1003,8 @@ lib/ExtUtils/MM_Win95.pm MakeMaker methods for Win95
lib/ExtUtils/MY.pm MakeMaker user override class
lib/ExtUtils/Packlist.pm Manipulates .packlist files
lib/ExtUtils/t/basic.t See if MakeMaker can build a module
+lib/ExtUtils/t/Big-Fat-Dummy/Liar/Makefile.PL MakeMaker dummy module
+lib/ExtUtils/t/Big-Fat-Dummy/Liar/lib/Big/Fat/Liar.pm MakeMaker dummy module
lib/ExtUtils/t/Big-Fat-Dummy/lib/Big/Fat/Dummy.pm MakeMaker dummy module
lib/ExtUtils/t/Big-Fat-Dummy/Makefile.PL MakeMaker dummy module
lib/ExtUtils/t/Command.t See if ExtUtils::Command works (Win32 only)
@@ -1010,6 +1012,7 @@ lib/ExtUtils/t/Constant.t See if ExtUtils::Constant works
lib/ExtUtils/t/Embed.t See if ExtUtils::Embed and embedding works
lib/ExtUtils/t/hints.t See if hint files are honored.
lib/ExtUtils/t/Installed.t See if ExtUtils::Installed works
+lib/ExtUtils/t/INST.t Check MakeMaker INST_* macros
lib/ExtUtils/t/Manifest.t See if ExtUtils::Manifest works
lib/ExtUtils/t/Mkbootstrap.t See if ExtUtils::Mkbootstrap works
lib/ExtUtils/t/MM_BeOS.t See if ExtUtils::MM_BeOS works
@@ -1019,6 +1022,7 @@ lib/ExtUtils/t/MM_Unix.t See if ExtUtils::MM_UNIX works
lib/ExtUtils/t/MM_VMS.t See if ExtUtils::MM_VMS works
lib/ExtUtils/t/MM_Win32.t See if ExtUtils::MM_Win32 works
lib/ExtUtils/t/Packlist.t See if Packlist works
+lib/ExtUtils/t/prefixify.t See if MakeMaker can apply a PREFIX
lib/ExtUtils/t/Problem-Module/Makefile.PL MakeMaker dummy module
lib/ExtUtils/t/Problem-Module/subdir/Makefile.PL MakeMaker dummy module
lib/ExtUtils/t/problems.t How MakeMaker reacts to build problems
diff --git a/lib/ExtUtils/Changes b/lib/ExtUtils/Changes
index e344887da5..f3646695a5 100644
--- a/lib/ExtUtils/Changes
+++ b/lib/ExtUtils/Changes
@@ -1,3 +1,58 @@
+5.55_02 Sat Apr 6 03:09:15 EST 2002
+ [[ Bug Fixes ]]
+ - Craig Berry fixed install on VMS (again, I munged the last patch)
+ - MakeMaker might not be recognizing it's in PERL_SRC on Win32.
+ Made safer.
+ - For some reason MM_VMS was using $Config{arch} instead of
+ $Config{archname}
+ - Fix (well, hack) for creating ABSPERL on VMS.
+
+ [[ Test Fixes ]]
+ - INST.t has to tell MakeMaker it's in the PERL_CORE
+ - INST_LIB doesn't change if it's in the core
+
+5.55_01 Thu Apr 4 23:58:06 EST 2002
+ [[ API Changes ]]
+ * Long deprecated INST_EXE completely removed.
+ - Removing TEST_LIBS constant (never seen in a stable MM anyway)
+ - Added $default argument to prefixify() for safer prefixification.
+
+ [[ Bug Fixes ]]
+ - $mm->{PERM_*} were not being set
+ - fixin() redundantly chmod'ing scripts. Let the Makefile do that.
+ - The above means MM_Unix will now compile cleanly under strict
+ * init_dirscan's search for Makefile.PL's will no longer look
+ inside a distdir.
+ * Fixed running tests when there are t/'s in subdirs.
+ - MM_DOS inheriting from MM_Unix instead of MM_Win32. DJGPP
+ appears to be unix-like (bleadperl@15650)
+ - Escaping constants with # in them so they're not confused as
+ make comments (bleadperl)
+ * ExtUtils::MM_Win95 didn't return a true value
+ - Fixing disttest when perl is a relative path.
+ * Fixed disttest & tests in subdirs on Win95
+ - Fixed recursive Makefile.PL scan on VMS so it skips the distdir
+ - Fixed a bug when an alternative MAKEFILE is specified and you're
+ using something other than a Makefile.PL (RT 444)
+ - Quieting uninit warning when there are no tests.
+
+ [[ Doc Fixes ]]
+ - Documented INSTALLMAN*DIR == 'none' feature.
+
+ [[ Test Fixes ]]
+ - Paul Green's which_perl patch to build a proper Perl on systems
+ that use command extensions.
+ - basic.t's Makefile.PL PREFIX call wasn't properly quoted for VMS
+ (Craig Berry)
+ - little initialization glitch in MM_Win32.t
+
+ [[ Internals ]]
+ - INST_* constants moved to init_INST
+ - INSTALL* constants moved to inst_INSTALL
+ * Internal warning supression removed.
+ - Temporarily turning off SelfLoader in MM_Unix so warnings
+ have the right line numbers.
+
5.54_01 Sat Mar 30 02:32:44 EST 2002
[[ New Features ]]
* Added FULLPERLRUN and FULLPERLRUNINST
@@ -6,9 +61,12 @@
- hint files were made a little too noisy in 5.53_01
[[ Test Fixes ]]
- - mtime appears to be broken on Tru64 5.6.0
+ - adjusting for NFS time drift
- basic.t was finding the wrong perl in the core
+ [[ Internals ]]
+ - FULLPERL* PERL* setup moved to init_PERL
+
5.53_02 Fri Mar 29 04:47:44 EST 2002
- Adjusted for Perl core. Synced into bleadperl.
@@ -161,7 +219,7 @@
5.48_04 Mon Jan 21 19:28:38 EST 2002
- No longer requiring Test::More
- Now tested to work with a clean 5.6.1
- - Stripped out $Revision: 1.27 $ based $VERSIONs.
+ - Stripped out $Revision: 1.48 $ based $VERSIONs.
- Rolled in patches from p5p, vmsperl & VOS (14325, 14338, 14360, 14364)
* hint files now run in a safer context. Only $self is available.
- ExtUtils::testlib now provides absolute paths into @INC.
@@ -182,7 +240,7 @@
5.48_02 Wed Jan 16 19:11:26 EST 2002
- Fixed some Win32 warnings. Needs more work.
-5.48_01 Wed Jan 16 15:10:28 EST 200
+5.48_01 Wed Jan 16 15:10:28 EST 2002
* Adapted from bleadperl@14303
* Backported to 5.6.1
- inst and xsubpp moved out of lib/ and into bin/
diff --git a/lib/ExtUtils/Command/MM.pm b/lib/ExtUtils/Command/MM.pm
index 702353a1ef..b57386cd18 100644
--- a/lib/ExtUtils/Command/MM.pm
+++ b/lib/ExtUtils/Command/MM.pm
@@ -34,18 +34,21 @@ Any $(FOO) used in the examples are make variables, not Perl.
=item B<test_harness>
- perl -MExtUtils::Command::MM -e "test_harness($(TEST_VERBOSE))" t/*.t
+ test_harness($verbose, @test_libs);
-Runs the given tests via Test::Harness. Will exit with non-zero if
-the test fails.
-
-Typically used with t/*.t files.
+Runs the tests on @ARGV via Test::Harness passing through the $verbose
+flag. Any @test_libs will be unshifted onto the test's @INC.
=cut
sub test_harness {
require Test::Harness;
+ require File::Spec;
+
$Test::Harness::verbose = shift;
+
+ local @INC = @INC;
+ unshift @INC, map { File::Spec->rel2abs($_) } @_;
Test::Harness::runtests(@ARGV);
}
diff --git a/lib/ExtUtils/MM_Any.pm b/lib/ExtUtils/MM_Any.pm
index 214c316200..fb48ae2831 100644
--- a/lib/ExtUtils/MM_Any.pm
+++ b/lib/ExtUtils/MM_Any.pm
@@ -145,8 +145,8 @@ Used on the t/*.t files.
sub test_via_harness {
my($self, $perl, $tests) = @_;
- return qq{\t$perl "-MExtUtils::testlib" "-MExtUtils::Command::MM" }.
- qq{"-e" "test_harness(\$(TEST_VERBOSE))" $tests\n};
+ return qq{\t$perl "-MExtUtils::Command::MM" }.
+ qq{"-e" "test_harness(\$(TEST_VERBOSE), '\$(INST_LIB)', '\$(INST_ARCHLIB)')" $tests\n};
}
=item test_via_script
@@ -164,7 +164,7 @@ formatting.
sub test_via_script {
my($self, $perl, $script) = @_;
- return "\t$perl \$(TEST_LIBS) $script\n";
+ return qq{\t$perl "-I\$(INST_LIB)" "-I\$(INST_ARCHLIB)" $script\n};
}
=back
diff --git a/lib/ExtUtils/MM_Cygwin.pm b/lib/ExtUtils/MM_Cygwin.pm
index 3d72aec64a..01928366e0 100644
--- a/lib/ExtUtils/MM_Cygwin.pm
+++ b/lib/ExtUtils/MM_Cygwin.pm
@@ -10,11 +10,12 @@ require ExtUtils::MM_Any;
require ExtUtils::MM_Unix;
@ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix );
-$VERSION = 1.01_01;
+$VERSION = 1.02_01;
sub cflags {
my($self,$libperl)=@_;
return $self->{CFLAGS} if $self->{CFLAGS};
+ return '' unless $self->needs_linking();
my $base = $self->SUPER::cflags($libperl);
foreach (split /\n/, $base) {
diff --git a/lib/ExtUtils/MM_NW5.pm b/lib/ExtUtils/MM_NW5.pm
index fa3469cd5f..6652fbb596 100644
--- a/lib/ExtUtils/MM_NW5.pm
+++ b/lib/ExtUtils/MM_NW5.pm
@@ -87,14 +87,14 @@ sub constants {
for $tmp (qw/
AR_STATIC_ARGS NAME DISTNAME NAME_SYM VERSION
- VERSION_SYM XS_VERSION INST_BIN INST_EXE INST_LIB
+ VERSION_SYM XS_VERSION INST_BIN INST_LIB
INST_ARCHLIB INST_SCRIPT PREFIX INSTALLDIRS
INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB
INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
PERL_INC PERL FULLPERL LIBPTH BASE_IMPORT PERLRUN
- FULLPERLRUN PERLRUNINST FULLPERLRUNINST TEST_LIBS
+ FULLPERLRUN PERLRUNINST FULLPERLRUNINST
FULL_AR PERL_CORE NLM_VERSION MPKTOOL TOOLPATH
/ ) {
diff --git a/lib/ExtUtils/MM_Unix.pm b/lib/ExtUtils/MM_Unix.pm
index ae0251d26d..61f07cf7a8 100644
--- a/lib/ExtUtils/MM_Unix.pm
+++ b/lib/ExtUtils/MM_Unix.pm
@@ -5,6 +5,7 @@ require 5.005_03; # Maybe further back, dunno
use strict;
use Exporter ();
+use Carp ();
use Config;
use File::Basename qw(basename dirname fileparse);
use File::Spec;
@@ -16,7 +17,7 @@ use vars qw($VERSION @ISA
use ExtUtils::MakeMaker qw($Verbose neatvalue);
-$VERSION = '1.18_01';
+$VERSION = '1.20_01';
require ExtUtils::MM_Any;
@ISA = qw(ExtUtils::MM_Any);
@@ -125,6 +126,7 @@ sub maybe_command;
sub maybe_command_in_dirs;
sub needs_linking;
sub nicetext;
+sub parse_abstract;
sub parse_version;
sub pasthru;
sub perl_archive;
@@ -132,10 +134,10 @@ sub perl_archive_after;
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;
@@ -159,14 +161,14 @@ sub xs_cpp;
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
@@ -266,7 +268,7 @@ sub cflags {
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}\"
@@ -298,10 +300,11 @@ sub cflags {
}
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}) {
@@ -476,21 +479,22 @@ sub constants {
for $tmp (qw/
AR_STATIC_ARGS NAME DISTNAME NAME_SYM VERSION
- VERSION_SYM XS_VERSION INST_BIN INST_EXE INST_LIB
+ VERSION_SYM XS_VERSION INST_BIN INST_LIB
INST_ARCHLIB INST_SCRIPT PREFIX INSTALLDIRS
INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB
INSTALLSITEARCH INSTALLBIN 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";
}
@@ -847,7 +851,7 @@ sub dist_test {
my @m;
push @m, q{
disttest : distdir
- cd $(DISTVNAME) && $(PERLRUN) Makefile.PL
+ cd $(DISTVNAME) && $(ABSPERLRUN) Makefile.PL
cd $(DISTVNAME) && $(MAKE)
cd $(DISTVNAME) && $(MAKE) test
};
@@ -980,8 +984,8 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists
$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
@@ -991,7 +995,7 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists
push(@m,' $(RM_F) $@
');
- my $libs = $self->{LDLOADLIBS};
+ my $libs = $self->{LDLOADLIBS} || '';
if ($^O eq 'netbsd') {
# Use nothing on static perl platforms, and to the flags needed
@@ -1096,15 +1100,17 @@ specified by @ExtUtils::MakeMaker::MM_Sections.
=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': $!";
@@ -1116,6 +1122,7 @@ sub fixin { # stolen from the pink Camel book, more or less
$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};
@@ -1168,14 +1175,6 @@ eval 'exec $interpreter $arg -S \$0 \${1+"\$\@"}'
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;
@@ -1191,8 +1190,6 @@ eval 'exec $interpreter $arg -S \$0 \${1+"\$\@"}'
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 ':';;
}
}
@@ -1261,8 +1258,15 @@ sub init_dirscan { # --- File and Directory Lists (.xs .pm .pod etc)
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};
@@ -1340,14 +1344,14 @@ sub init_dirscan { # --- File and Directory Lists (.xs .pm .pod etc)
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;
@@ -1380,7 +1384,8 @@ sub init_dirscan { # --- File and Directory Lists (.xs .pm .pod etc)
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*)$/;
}
}
@@ -1436,7 +1441,8 @@ sub init_dirscan { # --- File and Directory Lists (.xs .pm .pod etc)
}
# 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};
@@ -1462,7 +1468,7 @@ Initializes AR, AR_STATIC_ARGS, BASEEXT, CONFIG, DISTNAME, DLBASE,
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
@@ -1495,6 +1501,7 @@ sub init_main {
}
($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 '_'
@@ -1504,7 +1511,7 @@ sub init_main {
}
- # --- 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'});
@@ -1518,7 +1525,7 @@ sub init_main {
File::Spec->catdir($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")
&&
@@ -1529,6 +1536,10 @@ sub init_main {
}
}
}
+
+ 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};
@@ -1563,8 +1574,8 @@ from the perl source tree.
} 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;
@@ -1617,177 +1628,25 @@ usually solves this kind of problem.
# 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}){
-
-
- ##### 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");
+ $self->init_INST;
+ $self->init_INSTALL;
- 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;
}
@@ -1831,6 +1690,7 @@ usually solves this kind of problem.
$self->{VERSION} ||= "0.10";
($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
@@ -1838,11 +1698,6 @@ usually solves this kind of problem.
# 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;
@@ -1874,7 +1729,8 @@ sub init_others { # --- Initialize Other Attributes
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;
}
}
@@ -1898,7 +1754,7 @@ sub init_others { # --- Initialize Other Attributes
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
@@ -1918,15 +1774,180 @@ sub init_others { # --- Initialize Other Attributes
$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}) {
+ $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;
+
+ # The user who requests an installation directory explicitly
+ # should not have to tell us an architecture installation directory
+ # as well. We look if a directory exists that is named after the
+ # architecture. If not we take it as a sign that it should be the
+ # same as the requested installation directory. Otherwise we take
+ # the found one.
+ # We do the same thing twice: for privlib/archlib and for sitelib/sitearch
+ for my $libpair ({l=>"privlib", a=>"archlib"},
+ {l=>"sitelib", a=>"sitearch"})
+ {
+ my $lib = "install$libpair->{l}";
+ my $Lib = uc $lib;
+ my $Arch = uc "install$libpair->{a}";
+ if( $self->{$Lib} && ! $self->{$Arch} ){
+ my($ilib) = $Config{$lib};
+ $ilib = VMS::Filespec::unixify($ilib) if $Is_VMS;
+
+ $self->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;
+ }
+ }
+
+ # 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($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 = '$(PREFIX)';
+ for my $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 my $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 my $install_variable (qw/
+ INSTALLMAN1DIR
+ INSTALLMAN3DIR
+ /)
+ {
+ $self->prefixify($install_variable,$search_prefix,$replace_prefix);
+ }
+
+ return 1;
+}
+
=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...
@@ -1941,7 +1962,7 @@ sub init_PERL {
my @defpath = ();
foreach my $component ($self->{PERL_SRC}, $self->path(),
- $Config::Config{binexp})
+ $Config{binexp})
{
push @defpath, $component if defined $component;
}
@@ -1972,11 +1993,23 @@ sub init_PERL {
($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.
@@ -1984,12 +2017,29 @@ sub init_PERL {
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)
@@ -2008,9 +2058,6 @@ install_perl :: all pure_perl_install doc_perl_install
install_site :: all pure_site_install doc_site_install
-install_ :: install_site
- @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
-
pure_install :: pure_$(INSTALLDIRS)_install
doc_install :: doc_$(INSTALLDIRS)_install
@@ -2261,8 +2308,8 @@ $(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
$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...
@@ -2350,7 +2397,7 @@ MAP_PERLINC = @{$perlinc || []}
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) {
@@ -2367,7 +2414,7 @@ MAP_PRELIBS = $Config::Config{perllibs} $Config::Config{cryptlib}
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';
}
@@ -2379,8 +2426,12 @@ MAP_PRELIBS = $Config::Config{perllibs} $Config::Config{cryptlib}
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, "
@@ -2393,12 +2444,10 @@ MAP_LIBPERL = $libperl
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'
@@ -2466,7 +2515,7 @@ $(OBJECT) : $(FIRST_MAKEFILE)
push @m, q{
# 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}.q{ : Makefile.PL $(CONFIGDEP)
+}.$self->{MAKEFILE}.q{ :: Makefile.PL $(CONFIGDEP)
}.$self->{NOECHO}.q{echo "Makefile out-of-date with respect to $?"
}.$self->{NOECHO}.q{echo "Cleaning current config before rebuilding Makefile..."
-}.$self->{NOECHO}.q{$(RM_F) }."$self->{MAKEFILE}.old".q{
@@ -2477,10 +2526,6 @@ $(OBJECT) : $(FIRST_MAKEFILE)
}.$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;
@@ -2633,6 +2678,33 @@ sub nicetext {
$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.
@@ -2674,32 +2746,6 @@ sub parse_version {
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;
- return $result;
-}
=item pasthru (o)
@@ -2816,68 +2862,13 @@ PERL_HDRS = \
$(PERL_INC)/warnings.h
$(OBJECT) : $(PERL_HDRS)
-} if $self->{OBJECT};
+ } if $self->{OBJECT};
push @m, join(" ", values %{$self->{XS}})." : \$(XSUBPPDEPS)\n" if %{$self->{XS}};
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/</&lt;/g;
- $abstract =~ s/>/&gt;/g;
- push(@m, ". qq{\\t<ABSTRACT>$abstract</ABSTRACT>\\n}");
- my ($author) = $self->{AUTHOR};
- $author =~ s/</&lt;/g;
- $author =~ s/>/&gt;/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)
@@ -2933,7 +2924,7 @@ pm_to_blib: $(TO_INST_PM)
};
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;
@@ -2983,23 +2974,125 @@ sub postamble {
"";
}
+=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::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/</&lt;/g;
+ $abstract =~ s/>/&gt;/g;
+
+ my $author = $self->{AUTHOR} || '';
+ $author =~ s/</&lt;/g;
+ $author =~ s/>/&gt;/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);
-Check a path variable in $self from %Config, if it contains a prefix,
-and replace it with another one.
+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.
-Takes as arguments an attribute name, a search prefix and a
-replacement prefix. Changes the attribute in the object.
+This is for heuristics which attempt to create directory structures
+that mirror those of the installed perl.
+
+For example:
+
+ $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{lc $var};
+
+ print STDERR "Prefixing $var=$path\n" if $Verbose >= 2;
+ print STDERR " from $sprefix to $rprefix\n"
+ if $Verbose >= 2;
+
+ $path = VMS::Filespec::unixpath($path) if $Is_VMS;
+
+ unless( $path =~ s,^\Q$sprefix\E(?=/|\z),$rprefix,s ) {
+
+ print STDERR " cannot prefix, using default.\n" if $Verbose >= 2;
+ print STDERR " no default!\n" if $Verbose >= 2;
+
+ $path = File::Spec->catdir($rprefix, $default) if $default;
+ }
+
+ print " now $path\n" if $Verbose >= 2;
+ return $self->{uc $var} = $path;
}
@@ -3057,16 +3150,25 @@ sub realclean {
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}",''));
@@ -3302,7 +3404,7 @@ sub test {
# --- 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';
}
@@ -3319,8 +3421,14 @@ testdb :: testdb_\$(LINKTYPE)
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");
diff --git a/lib/ExtUtils/MM_VMS.pm b/lib/ExtUtils/MM_VMS.pm
index 881b8a953f..bb38b8b0da 100644
--- a/lib/ExtUtils/MM_VMS.pm
+++ b/lib/ExtUtils/MM_VMS.pm
@@ -14,7 +14,7 @@ use VMS::Filespec;
use File::Basename;
use File::Spec;
use vars qw($Revision @ISA $VERSION);
-($VERSION) = $Revision = '5.62_01';
+($VERSION) = $Revision = '5.63_01';
require ExtUtils::MM_Any;
require ExtUtils::MM_Unix;
@@ -332,6 +332,20 @@ sub replace_manpage_separator {
$man;
}
+=item init_main (override)
+
+Override DISTVNAME so it uses VERSION_SYM to avoid getting too many
+dots in the name.
+
+=cut
+
+sub init_main {
+ my($self) = shift;
+
+ $self->SUPER::init_main;
+ $self->{DISTVNAME} = "$self->{DISTNAME}-$self->{VERSION_SYM}";
+}
+
=item init_others (override)
Provide VMS-specific forms of various utility commands, then hand
@@ -373,6 +387,7 @@ sub constants {
# Be kind about case for pollution
for (@ARGV) { $_ = uc($_) if /POLLUTE/i; }
+ $self->{DEFINE} ||= '';
if ($self->{DEFINE} ne '') {
my(@terms) = split(/\s+/,$self->{DEFINE});
my(@defs,@udefs);
@@ -391,8 +406,12 @@ sub constants {
push @$targ, $def;
}
$self->{DEFINE} = '';
- if (@defs) { $self->{DEFINE} = '/Define=(' . join(',',@defs) . ')'; }
- if (@udefs) { $self->{DEFINE} .= '/Undef=(' . join(',',@udefs) . ')'; }
+ if (@defs) {
+ $self->{DEFINE} = '/Define=(' . join(',',@defs) . ')';
+ }
+ if (@udefs) {
+ $self->{DEFINE} .= '/Undef=(' . join(',',@udefs) . ')';
+ }
}
if ($self->{OBJECT} =~ /\s/) {
@@ -403,7 +422,7 @@ sub constants {
foreach $macro ( qw [
- INST_BIN INST_SCRIPT INST_LIB INST_ARCHLIB INST_EXE INSTALLPRIVLIB
+ INST_BIN INST_SCRIPT INST_LIB INST_ARCHLIB INSTALLPRIVLIB
INSTALLARCHLIB INSTALLSCRIPT INSTALLBIN PERL_LIB PERL_ARCHLIB
PERL_INC PERL_SRC FULLEXT INST_MAN1DIR INSTALLMAN1DIR
INST_MAN3DIR INSTALLMAN3DIR INSTALLSITELIB INSTALLSITEARCH
@@ -424,13 +443,14 @@ sub constants {
foreach $macro (qw/
AR_STATIC_ARGS NAME DISTNAME NAME_SYM VERSION VERSION_SYM XS_VERSION
- INST_BIN INST_EXE INST_LIB INST_ARCHLIB INST_SCRIPT PREFIX
+ INST_BIN INST_LIB INST_ARCHLIB INST_SCRIPT PREFIX
INSTALLDIRS INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB
INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC PERL_VMS
PERL_INC PERL FULLPERL PERLRUN FULLPERLRUN PERLRUNINST
- FULLPERLRUNINST TEST_LIBS PERL_CORE NOECHO NOOP
+ FULLPERLRUNINST ABSPERL ABSPERLRUN ABSPERLRUNINST
+ PERL_CORE NOECHO NOOP
/ ) {
next unless defined $self->{$macro};
push @m, "$macro = $self->{$macro}\n";
@@ -631,6 +651,8 @@ sub cflags {
# $quals =~ s/,,/,/g; $quals =~ s/\(,/(/g;
$self->{CCFLAGS} = $quals;
+ $self->{PERLTYPE} ||= '';
+
$self->{OPTIMIZE} ||= $flagoptstr || $Config{'optimize'};
if ($self->{OPTIMIZE} !~ m!/!) {
if ($self->{OPTIMIZE} =~ m!-g!) { $self->{OPTIMIZE} = '/Debug/NoOptimize' }
@@ -681,7 +703,7 @@ sub const_cccmd {
push @m,'
.FIRST
',$self->{NOECHO},'If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("DECC$System_Include").eqs."" Then Define/NoLog SYS ',
- ($Config{'arch'} eq 'VMS_AXP' ? 'Sys$Library' : 'DECC$Library_Include'),'
+ ($Config{'archname'} eq 'VMS_AXP' ? 'Sys$Library' : 'DECC$Library_Include'),'
',$self->{NOECHO},'If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("DECC$System_Include").nes."" Then Define/NoLog SYS DECC$System_Include';
}
@@ -939,6 +961,8 @@ sub dist {
$attribs{VERSION} =~ s/[^\w\$]/_/g;
$attribs{NAME} =~ s/[^\w\$]/-/g;
+ $attribs{DISTVNAME} ||= '$(DISTNAME)-$(VERSION_SYM)';
+
return $self->SUPER::dist(%attribs);
}
@@ -1578,7 +1602,7 @@ q{
disttest : distdir
startdir = F$Environment("Default")
Set Default [.$(DISTVNAME)]
- $(PERLRUN) Makefile.PL
+ $(ABSPERLRUN) Makefile.PL
$(MMS)$(MMSQUALIFIERS)
$(MMS)$(MMSQUALIFIERS) test
Set Default 'startdir'
@@ -1620,9 +1644,6 @@ install_perl :: all pure_perl_install doc_perl_install
install_site :: all pure_site_install doc_site_install
$(NOECHO) $(NOOP)
-install_ :: install_site
- $(NOECHO) $(SAY) "INSTALLDIRS not defined, defaulting to INSTALLDIRS=site"
-
pure_install :: pure_$(INSTALLDIRS)_install
$(NOECHO) $(NOOP)
@@ -1637,8 +1658,8 @@ doc__install : doc_site_install
# 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) $(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) $(PERL) -e "print '$(INST_LIB) $(INSTALLPRIVLIB) '" >>.MM_tmp
$(NOECHO) $(PERL) -e "print '$(INST_ARCHLIB) $(INSTALLARCHLIB) '" >>.MM_tmp
$(NOECHO) $(PERL) -e "print '$(INST_BIN) $(INSTALLBIN) '" >>.MM_tmp
@@ -1651,8 +1672,8 @@ pure_perl_install ::
# 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) $(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) $(PERL) -e "print '$(INST_LIB) $(INSTALLSITELIB) '" >>.MM_tmp
$(NOECHO) $(PERL) -e "print '$(INST_ARCHLIB) $(INSTALLSITEARCH) '" >>.MM_tmp
$(NOECHO) $(PERL) -e "print '$(INST_BIN) $(INSTALLBIN) '" >>.MM_tmp
@@ -1743,7 +1764,7 @@ $(OBJECT) : $(PERL_INC)util.h, $(PERL_INC)vmsish.h, $(PERL_INC)warnings.h
if ($self->{PERL_SRC}) {
my(@macros);
my($mmsquals) = '$(USEMAKEFILE)[.vms]$(MAKEFILE)';
- push(@macros,'__AXP__=1') if $Config{'arch'} eq 'VMS_AXP';
+ push(@macros,'__AXP__=1') if $Config{'archname'} eq 'VMS_AXP';
push(@macros,'DECC=1') if $Config{'vms_cc_type'} eq 'decc';
push(@macros,'GNUC=1') if $Config{'vms_cc_type'} eq 'gcc';
push(@macros,'SOCKET=1') if $Config{'d_has_sockets'};
diff --git a/lib/ExtUtils/MM_Win32.pm b/lib/ExtUtils/MM_Win32.pm
index d8c73675a1..2d8ccca509 100644
--- a/lib/ExtUtils/MM_Win32.pm
+++ b/lib/ExtUtils/MM_Win32.pm
@@ -184,14 +184,15 @@ sub constants {
for $tmp (qw/
AR_STATIC_ARGS NAME DISTNAME NAME_SYM VERSION
- VERSION_SYM XS_VERSION INST_BIN INST_EXE INST_LIB
+ VERSION_SYM XS_VERSION INST_BIN INST_LIB
INST_ARCHLIB INST_SCRIPT PREFIX INSTALLDIRS
INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB
INSTALLSITEARCH INSTALLBIN 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 FULL_AR PERL_CORE
+ FULLPERLRUNINST ABSPERL ABSPERLRUN ABSPERLRUNINST
+ FULL_AR PERL_CORE
/ ) {
next unless defined $self->{$tmp};
@@ -475,26 +476,6 @@ sub export_list
return "$self->{BASEEXT}.def";
}
-=item canonpath
-
-No physical check on the filesystem, but a logical cleanup of a
-path. On UNIX eliminated successive slashes and successive "/.".
-
-=cut
-
-sub canonpath {
- my($self,$path) = @_;
- $path =~ s/^([a-z]:)/\u$1/;
- $path =~ s|/|\\|g;
- $path =~ s|(.)\\+|$1\\|g ; # xx////xx -> xx/xx
- $path =~ s|(\\\.)+\\|\\|g ; # xx/././xx -> xx/xx
- $path =~ s|^(\.\\)+|| unless $path eq ".\\"; # ./xx -> xx
- $path =~ s|\\$||
- unless $path =~ m#^([a-z]:)?\\#; # xx/ -> xx
- $path .= '.' if $path =~ m#\\$#;
- $path;
-}
-
=item perl_script
Takes one argument, a file name, and returns the file name, if the
@@ -786,7 +767,6 @@ sub pasthru {
}
-
1;
__END__
diff --git a/lib/ExtUtils/MM_Win95.pm b/lib/ExtUtils/MM_Win95.pm
index aaabc132bc..65fac14f25 100644
--- a/lib/ExtUtils/MM_Win95.pm
+++ b/lib/ExtUtils/MM_Win95.pm
@@ -1,7 +1,7 @@
package ExtUtils::MM_Win95;
use vars qw($VERSION @ISA);
-$VERSION = 0.01;
+$VERSION = 0.02;
require ExtUtils::MM_Win32;
@ISA = qw(ExtUtils::MM_Win32);
@@ -9,6 +9,18 @@ require ExtUtils::MM_Win32;
# a few workarounds for command.com (very basic)
+sub dist_test {
+ my($self) = shift;
+ return q{
+disttest : distdir
+ cd $(DISTVNAME)
+ $(ABSPERLRUN) Makefile.PL
+ $(MAKE) $(PASTHRU)
+ $(MAKE) test $(PASTHRU)
+ cd ..
+};
+}
+
sub xs_c {
my($self) = shift;
return '' unless $self->needs_linking();
diff --git a/lib/ExtUtils/MakeMaker.pm b/lib/ExtUtils/MakeMaker.pm
index a505b15f4e..075049d5b1 100644
--- a/lib/ExtUtils/MakeMaker.pm
+++ b/lib/ExtUtils/MakeMaker.pm
@@ -2,10 +2,10 @@ BEGIN {require 5.004;}
package ExtUtils::MakeMaker;
-$VERSION = "5.54_01";
+$VERSION = "5.55_02";
$Version_OK = "5.49"; # Makefiles older than $Version_OK will die
# (Will be checked from MakeMaker version 4.13 onwards)
-($Revision = substr(q$Revision: 1.23 $, 10)) =~ s/\s+$//;
+($Revision = substr(q$Revision: 1.33 $, 10)) =~ s/\s+$//;
require Exporter;
use Config;
@@ -14,7 +14,7 @@ use Carp ();
use vars qw(
@ISA @EXPORT @EXPORT_OK
$ISA_TTY $Revision $VERSION $Verbose $Version_OK %Config
- %Keep_after_flush %MM_Sections @Prepend_dot_dot
+ %Keep_after_flush %MM_Sections @Prepend_parent
%Recognized_Att_Keys @Get_from_Config @MM_Sections @Overridable
@Parent $PACKNAME
);
@@ -34,26 +34,23 @@ full_setup();
require ExtUtils::MM; # Things like CPAN assume loading ExtUtils::MakeMaker
# will give them MM.
-sub warnhandler {
- $_[0] =~ /^Use of uninitialized value/ && return;
- $_[0] =~ /used only once/ && return;
- $_[0] =~ /^Subroutine\s+[\w:]+\s+redefined/ && return;
- warn @_;
-}
sub WriteMakefile {
Carp::croak "WriteMakefile: Need even number of args" if @_ % 2;
- local $SIG{__WARN__} = \&warnhandler;
require ExtUtils::MY;
my %att = @_;
- MM->new(\%att)->flush;
+ my $mm = MM->new(\%att);
+ $mm->flush;
+
+ return $mm;
}
sub prompt ($;$) {
my($mess,$def)=@_;
$ISA_TTY = -t STDIN && (-t STDOUT || !(-f STDOUT || -c STDOUT)) ; # Pipe?
- Carp::confess("prompt function called without an argument") unless defined $mess;
+ Carp::confess("prompt function called without an argument")
+ unless defined $mess;
my $dispdef = defined $def ? "[$def] " : " ";
$def = defined $def ? $def : "";
my $ans;
@@ -123,7 +120,7 @@ sub full_setup {
INC INCLUDE_EXT INSTALLARCHLIB INSTALLBIN INSTALLDIRS
INSTALLMAN1DIR
INSTALLMAN3DIR INSTALLPRIVLIB INSTALLSCRIPT INSTALLSITEARCH
- INSTALLSITELIB INST_ARCHLIB INST_BIN INST_EXE INST_LIB
+ INSTALLSITELIB INST_ARCHLIB INST_BIN INST_LIB
INST_MAN1DIR INST_MAN3DIR INST_SCRIPT LDFROM LIB LIBPERL_A LIBS
LINKTYPE MAKEAPERL MAKEFILE MAN1PODS MAN3PODS MAP_TARGET MYEXTLIB
PERL_MALLOC_OK
@@ -133,7 +130,7 @@ sub full_setup {
PL_FILES PM PM_FILTER PMLIBDIRS POLLUTE PPM_INSTALL_EXEC
PPM_INSTALL_SCRIPT PREFIX
PREREQ_FATAL PREREQ_PM PREREQ_PRINT PRINT_PREREQ
- SKIP TEST_LIBS TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG
+ SKIP TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG
XS_VERSION clean depend dist dynamic_lib linkext macro realclean
tool_autosplit
MACPERL_SRC MACPERL_LIB MACLIBS_68K MACLIBS_PPC MACLIBS_SC MACLIBS_MRC
@@ -210,8 +207,8 @@ sub full_setup {
# us (the parent) for the values and will prepend "..", so that
# all files to be installed end up below OUR ./blib
#
- @Prepend_dot_dot = qw(
- INST_BIN INST_EXE INST_LIB INST_ARCHLIB INST_SCRIPT
+ @Prepend_parent = qw(
+ INST_BIN INST_LIB INST_ARCHLIB INST_SCRIPT
MAP_TARGET INST_MAN1DIR INST_MAN3DIR PERL_SRC
PERL FULLPERL
);
@@ -273,15 +270,17 @@ sub new {
foreach my $prereq (sort keys %{$self->{PREREQ_PM}}) {
eval "require $prereq";
+ my $pr_version = $prereq->VERSION || 0;
+
if ($@) {
warn sprintf "Warning: prerequisite %s %s not found.\n",
$prereq, $self->{PREREQ_PM}{$prereq}
unless $self->{PREREQ_FATAL};
$unsatisfied{$prereq} = 'not installed';
- } elsif ($prereq->VERSION < $self->{PREREQ_PM}->{$prereq} ){
+ } elsif ($pr_version < $self->{PREREQ_PM}->{$prereq} ){
warn "Warning: prerequisite %s %s not found. We have %s.\n",
$prereq, $self->{PREREQ_PM}{$prereq},
- ($prereq->VERSION || 'unknown version')
+ ($pr_version || 'unknown version')
unless $self->{PREREQ_FATAL};
$unsatisfied{$prereq} = $self->{PREREQ_PM}->{$prereq} ?
$self->{PREREQ_PM}->{$prereq} : 'unknown version' ;
@@ -323,7 +322,7 @@ sub new {
if (defined $Parent[-2]){
$self->{PARENT} = $Parent[-2];
my $key;
- for $key (@Prepend_dot_dot) {
+ for $key (@Prepend_parent) {
next unless defined $self->{PARENT}{$key};
$self->{$key} = $self->{PARENT}{$key};
unless ($^O eq 'VMS' && $key =~ /PERL$/) {
@@ -391,6 +390,7 @@ END
$self->init_dirscan();
$self->init_others();
+ $self->init_PERM();
my($argv) = neatvalue(\@ARGV);
$argv =~ s/^\[/(/;
$argv =~ s/\]$/)/;
@@ -476,7 +476,6 @@ END
sub WriteEmptyMakefile {
Carp::croak "WriteEmptyMakefile: Need even number of args" if @_ % 2;
- local $SIG{__WARN__} = \&warnhandler;
my %att = @_;
my $self = MM->new(\%att);
@@ -635,6 +634,7 @@ sub mv_all_methods {
# still trying to reduce the list to some reasonable minimum --
# because I want to make it easier for the user. A.K.
+ no warnings 'redefine';
foreach my $method (@Overridable) {
# We cannot say "next" here. Nick might call MY->makeaperl
@@ -729,7 +729,7 @@ sub flush {
rename("MakeMaker.tmp", $finalname);
chmod 0644, $finalname unless $Is_VMS;
- if ($self->{PARENT}) {
+ if ($self->{PARENT} && !$self->{_KEEP_AFTER_FLUSH}) {
foreach (keys %$self) { # safe memory
delete $self->{$_} unless $Keep_after_flush{$_};
}
@@ -808,13 +808,9 @@ ExtUtils::MakeMaker - create an extension Makefile
=head1 SYNOPSIS
-C<use ExtUtils::MakeMaker;>
+ use ExtUtils::MakeMaker;
-C<WriteMakefile( ATTRIBUTE =E<gt> VALUE [, ...] );>
-
-which is really
-
-C<MM-E<gt>new(\%att)-E<gt>flush;>
+ WriteMakefile( ATTRIBUTE => VALUE [, ...] );
=head1 DESCRIPTION
@@ -827,7 +823,7 @@ that can be individually overridden. Each subroutine returns the text
it wishes to have written to the Makefile.
MakeMaker is object oriented. Each directory below the current
-directory that contains a Makefile.PL. Is treated as a separate
+directory that contains a Makefile.PL is treated as a separate
object. This makes it possible to write an unlimited number of
Makefiles with a single invocation of WriteMakefile().
@@ -987,7 +983,9 @@ relatives, then the defaults for INSTALLPRIVLIB, INSTALLARCHLIB,
INSTALLSCRIPT, etc. will be appropriate, and this incantation will be
the best:
- perl Makefile.PL; make; make test
+ perl Makefile.PL;
+ make;
+ make test
make install
make install per default writes some documentation of what has been
@@ -1322,11 +1320,15 @@ second with INSTALLDIRS=site. Default is site.
This directory gets the man pages at 'make install' time. Defaults to
$Config{installman1dir}.
+If set to 'none', no man 1 pages will be installed.
+
=item INSTALLMAN3DIR
This directory gets the man pages at 'make install' time. Defaults to
$Config{installman3dir}.
+If set to 'none', no man 3 pages will be installed.
+
=item INSTALLPRIVLIB
Used by 'make install', which copies files from INST_LIB to this
@@ -1356,11 +1358,6 @@ Same as INST_LIB for architecture dependent files.
Directory to put real binary files during 'make'. These will be copied
to INSTALLBIN during 'make install'
-=item INST_EXE
-
-Old name for INST_SCRIPT. Deprecated. Please use INST_SCRIPT if you
-need to use it.
-
=item INST_LIB
Directory where we put library files of this extension while building
@@ -1724,13 +1721,6 @@ Makefile. Caution! Do not use the SKIP attribute for the negligible
speedup. It may seriously damage the resulting Makefile. Only use it
if you really need it.
-=item TEST_LIBS
-
-The set of -I's necessary to run a "make test". Use as:
-$(PERL) $(TEST_LIBS) -e '...' for example.
-
-The paths will be absolute.
-
=item TYPEMAPS
Ref to array of typemap file names. Use this when the typemaps are
@@ -1761,7 +1751,7 @@ MakeMaker object. The following lines will be parsed o.k.:
$VERSION = '1.00';
*VERSION = \'1.01';
- ( $VERSION ) = '$Revision: 1.23 $ ' =~ /\$Revision:\s+([^\s]+)/;
+ ( $VERSION ) = '$Revision: 1.33 $ ' =~ /\$Revision:\s+([^\s]+)/;
$FOO::VERSION = '1.10';
*FOO::VERSION = \'1.11';
our $VERSION = 1.2.3; # new for perl5.6.0
@@ -1881,7 +1871,7 @@ be linked.
If you cannot achieve the desired Makefile behaviour by specifying
attributes you may define private subroutines in the Makefile.PL.
-Each subroutines returns the text it wishes to have written to
+Each subroutine returns the text it wishes to have written to
the Makefile. To override a section of the Makefile you can
either say:
@@ -1889,8 +1879,8 @@ either say:
or you can edit the default by saying something like:
- sub MY::c_o {
- package MY; # so that "SUPER" works right
+ package MY; # so that "SUPER" works right
+ sub c_o {
my $inherited = shift->SUPER::c_o(@_);
$inherited =~ s/old text/new text/;
$inherited;
@@ -1903,18 +1893,20 @@ for embedding.
If you still need a different solution, try to develop another
subroutine that fits your needs and submit the diffs to
-F<perl5-porters@perl.org> or F<comp.lang.perl.moderated> as appropriate.
+F<makemaker@perl.org>
-For a complete description of all MakeMaker methods see L<ExtUtils::MM_Unix>.
+For a complete description of all MakeMaker methods see
+L<ExtUtils::MM_Unix>.
Here is a simple example of how to add a new target to the generated
Makefile:
sub MY::postamble {
- '
+ return <<'MAKE_FRAG';
$(MYEXTLIB): sdbm/Makefile
cd sdbm && $(MAKE) all
- ';
+
+ MAKE_FRAG
}
@@ -2078,8 +2070,8 @@ ExtUtils::Embed
=head1 AUTHORS
-Andy Dougherty <F<doughera@lafcol.lafayette.edu>>, Andreas KE<ouml>nig
-<F<andreas.koenig@mind.de>>, Tim Bunce <F<Tim.Bunce@ig.co.uk>>. VMS
+Andy Dougherty <F<doughera@lafayette.edu>>, Andreas KE<ouml>nig
+<F<andreas.koenig@mind.de>>, Tim Bunce <F<timb@cpan.org>>. VMS
support by Charles Bailey <F<bailey@newman.upenn.edu>>. OS/2 support
by Ilya Zakharevich <F<ilya@math.ohio-state.edu>>.
@@ -2087,6 +2079,9 @@ Currently maintained by Michael G Schwern <F<schwern@pobox.com>>
Send patches and ideas to <F<makemaker@perl.org>>.
-Send bug reports via http://rt.cpan.org/.
+Send bug reports via http://rt.cpan.org/. Please send your
+generated Makefile along with your report.
+
+For more up-to-date information, see http://www.makemaker.org.
=cut
diff --git a/lib/ExtUtils/t/Big-Fat-Dummy/Liar/Makefile.PL b/lib/ExtUtils/t/Big-Fat-Dummy/Liar/Makefile.PL
new file mode 100644
index 0000000000..c6478dd8d6
--- /dev/null
+++ b/lib/ExtUtils/t/Big-Fat-Dummy/Liar/Makefile.PL
@@ -0,0 +1,12 @@
+use ExtUtils::MakeMaker;
+
+my $mm = WriteMakefile(
+ NAME => 'Big::Fat::Liar',
+ VERSION_FROM => 'lib/Big/Fat/Liar.pm',
+ _KEEP_AFTER_FLUSH => 1
+ );
+
+print "Big::Fat::Liar's vars\n";
+foreach my $key (qw(INST_LIB INST_ARCHLIB)) {
+ print "$key = $mm->{$key}\n";
+}
diff --git a/lib/ExtUtils/t/Big-Fat-Dummy/Liar/lib/Big/Fat/Liar.pm b/lib/ExtUtils/t/Big-Fat-Dummy/Liar/lib/Big/Fat/Liar.pm
new file mode 100644
index 0000000000..11e6fc627b
--- /dev/null
+++ b/lib/ExtUtils/t/Big-Fat-Dummy/Liar/lib/Big/Fat/Liar.pm
@@ -0,0 +1,5 @@
+package Big::Fat::Liar;
+
+$VERSION = 0.01;
+
+1;
diff --git a/lib/ExtUtils/t/INST.t b/lib/ExtUtils/t/INST.t
new file mode 100644
index 0000000000..2d281044e0
--- /dev/null
+++ b/lib/ExtUtils/t/INST.t
@@ -0,0 +1,110 @@
+#!/usr/bin/perl -w
+
+# Wherein we ensure the INST_* and INSTALL* variables are set correctly
+# according to the values of PREFIX, SITEPREFIX, INSTALLDIRS, etc...
+#
+# Essentially, this test is a Makefile.PL.
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't' if -d 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+use Test::More tests => 17;
+use MakeMaker::Test::Utils;
+use ExtUtils::MakeMaker;
+use File::Spec;
+use TieOut;
+use Config;
+
+$ENV{PERL_CORE} ? chdir '../lib/ExtUtils/t' : chdir 't';
+
+perl_lib;
+
+$| = 1;
+
+my $Makefile = makefile_name;
+my $Curdir = File::Spec->curdir;
+my $Updir = File::Spec->updir;
+
+ok( chdir 'Big-Fat-Dummy', "chdir'd to Big-Fat-Dummy" ) ||
+ diag("chdir failed: $!");
+
+my $stdout = tie *STDOUT, 'TieOut' or die;
+my $mm = WriteMakefile(
+ NAME => 'Big::Fat::Dummy',
+ VERSION_FROM => 'lib/Big/Fat/Dummy.pm',
+ PREREQ_PM => {},
+ PERL_CORE => $ENV{PERL_CORE},
+);
+like( $stdout->read, qr{
+ Writing\ $Makefile\ for\ Big::Fat::Liar\n
+ Big::Fat::Liar's\ vars\n
+ INST_LIB\ =\ \S+\n
+ INST_ARCHLIB\ =\ \S+\n
+ Writing\ $Makefile\ for\ Big::Fat::Dummy\n
+}x );
+undef $stdout;
+untie *STDOUT;
+
+isa_ok( $mm, 'ExtUtils::MakeMaker' );
+
+is( $mm->{NAME}, 'Big::Fat::Dummy', 'NAME' );
+is( $mm->{VERSION}, 0.01, 'VERSION' );
+
+my $config_prefix = $^O eq 'VMS' ? VMS::Filespec::unixify($Config{prefix})
+ : $Config{prefix};
+is( $mm->{PREFIX}, $config_prefix, 'PREFIX' );
+
+is( !!$mm->{PERL_CORE}, !!$ENV{PERL_CORE}, 'PERL_CORE' );
+
+my($perl_src, $mm_perl_src);
+if( $ENV{PERL_CORE} ) {
+ $perl_src = File::Spec->catdir($Updir, $Updir, $Updir, $Updir);
+ $perl_src = File::Spec->canonpath($perl_src);
+ $mm_perl_src = File::Spec->canonpath($mm->{PERL_SRC});
+}
+else {
+ $mm_perl_src = $mm->{PERL_SRC};
+}
+
+is( $mm_perl_src, $perl_src, 'PERL_SRC' );
+
+
+# PERM_*
+is( $mm->{PERM_RW}, 644, 'PERM_RW' );
+is( $mm->{PERM_RWX}, 755, 'PERM_RWX' );
+
+
+# INST_*
+is( $mm->{INST_ARCHLIB},
+ $mm->{PERL_CORE} ? $mm->{PERL_ARCHLIB}
+ : File::Spec->catdir($Curdir, 'blib', 'arch'),
+ 'INST_ARCHLIB');
+is( $mm->{INST_BIN}, File::Spec->catdir($Curdir, 'blib', 'bin'),
+ 'INST_BIN' );
+
+is( keys %{$mm->{CHILDREN}}, 1 );
+my($child_pack) = keys %{$mm->{CHILDREN}};
+my $c_mm = $mm->{CHILDREN}{$child_pack};
+is( $c_mm->{INST_ARCHLIB},
+ $c_mm->{PERL_CORE} ? $c_mm->{PERL_ARCHLIB}
+ : File::Spec->catdir($Updir, 'blib', 'arch'),
+ 'CHILD INST_ARCHLIB');
+is( $c_mm->{INST_BIN}, File::Spec->catdir($Updir, 'blib', 'bin'),
+ 'CHILD INST_BIN' );
+
+
+my $inst_lib = File::Spec->catdir($Curdir, 'blib', 'lib');
+is( $mm->{INST_LIB},
+ $mm->{PERL_CORE} ? $mm->{PERL_LIB} : $inst_lib, 'INST_LIB' );
+
+
+# INSTALL*
+is( $mm->{INSTALLDIRS}, 'site', 'INSTALLDIRS' );
diff --git a/lib/ExtUtils/t/MM_Cygwin.t b/lib/ExtUtils/t/MM_Cygwin.t
index 3c995b7d13..42d3949121 100644
--- a/lib/ExtUtils/t/MM_Cygwin.t
+++ b/lib/ExtUtils/t/MM_Cygwin.t
@@ -23,7 +23,7 @@ BEGIN {
use Config;
use File::Spec;
-require ExtUtils::MM;
+use ExtUtils::MM;
use_ok( 'ExtUtils::MM_Cygwin' );
@@ -52,12 +52,15 @@ delete $args->{CFLAGS};
# respects the config setting, should ignore whitespace around equal sign
my $ccflags = $Config{useshrplib} eq 'true' ? ' -DUSEIMPORTLIB' : '';
-$args->cflags(<<FLAGS);
+{
+ local $args->{NEEDS_LINKING} = 1;
+ $args->cflags(<<FLAGS);
OPTIMIZE = opt
PERLTYPE =pt
LARGE= lg
SPLIT=split
FLAGS
+}
like( $args->{CFLAGS}, qr/OPTIMIZE = opt/, '... should set OPTIMIZE' );
like( $args->{CFLAGS}, qr/PERLTYPE = pt/, '... should set PERLTYPE' );
diff --git a/lib/ExtUtils/t/MM_Win32.t b/lib/ExtUtils/t/MM_Win32.t
index 01fb849a66..8e2b52c03c 100644
--- a/lib/ExtUtils/t/MM_Win32.t
+++ b/lib/ExtUtils/t/MM_Win32.t
@@ -33,7 +33,7 @@ require_ok( 'ExtUtils::MM_Win32' );
my $MM = bless {
DIR => [],
NOECHO => '@',
- XS => '',
+ XS => {},
MAKEFILE => 'Makefile',
RM_RF => 'rm -rf',
MV => 'mv',
diff --git a/lib/ExtUtils/t/basic.t b/lib/ExtUtils/t/basic.t
index 966aa10d44..b0cb6f7178 100644
--- a/lib/ExtUtils/t/basic.t
+++ b/lib/ExtUtils/t/basic.t
@@ -14,17 +14,19 @@ BEGIN {
}
use strict;
-use Test::More tests => 15;
+use Test::More tests => 17;
use MakeMaker::Test::Utils;
use File::Spec;
use TieOut;
-my $perl = which_perl;
+my $perl = which_perl();
$ENV{PERL_CORE} ? chdir '../lib/ExtUtils/t' : chdir 't';
perl_lib;
+my $Touch_Time = calibrate_mtime();
+
$| = 1;
ok( chdir 'Big-Fat-Dummy', "chdir'd to Big-Fat-Dummy" ) ||
@@ -33,12 +35,28 @@ ok( chdir 'Big-Fat-Dummy', "chdir'd to Big-Fat-Dummy" ) ||
# The perl core test suite will run any .t file in the MANIFEST.
# So we have to generate this on the fly.
-mkdir 't';
+mkdir 't' || die "Can't create test dir: $!";
open(TEST, ">t/compile.t") or die "Can't open t/compile.t: $!";
-print TEST <DATA>;
+print TEST <<'COMPILE_T';
+print "1..2\n";
+
+print eval "use Big::Fat::Dummy; 1;" ? "ok 1\n" : "not ok 1\n";
+print "ok 2 - TEST_VERBOSE\n";
+COMPILE_T
close TEST;
-END { unlink 't/compile.t' }
+mkdir 'Liar/t' || die "Can't create test dir: $!";
+open(TEST, ">Liar/t/sanity.t") or die "Can't open Liar/t/sanity.t: $!";
+print TEST <<'SANITY_T';
+print "1..3\n";
+
+print eval "use Big::Fat::Dummy; 1;" ? "ok 1\n" : "not ok 1\n";
+print eval "use Big::Fat::Liar; 1;" ? "ok 2\n" : "not ok 2\n";
+print "ok 3 - TEST_VERBOSE\n";
+SANITY_T
+close TEST;
+
+END { unlink 't/compile.t', 'Liar/t/sanity.t' }
my @mpl_out = `$perl Makefile.PL PREFIX=dummy-install`;
@@ -56,14 +74,9 @@ ok( grep(/^Current package is: main$/,
ok( -e $makefile, 'Makefile exists' );
-# -M is flakey on VMS, flat out broken on Tru64 5.6.0
-SKIP: {
- skip "stat a/mtime broken on Tru64 5.6.0", 1 if $^O eq 'dec_osf' and
- $] >= 5.006;
-
- my $mtime = (stat($makefile))[9];
- cmp_ok( $^T, '<=', $mtime, ' its been touched' );
-}
+# -M is flakey on VMS
+my $mtime = (stat($makefile))[9];
+cmp_ok( $Touch_Time, '<=', $mtime, ' its been touched' );
END { unlink makefile_name(), makefile_backup() }
@@ -93,11 +106,25 @@ is( $?, 0 );
my $dist_test_out = `$make disttest`;
is( $?, 0, 'disttest' ) || diag($dist_test_out);
+
+# Make sure init_dirscan doesn't go into the distdir
+@mpl_out = `$perl Makefile.PL "PREFIX=dummy-install"`;
+
+cmp_ok( $?, '==', 0, 'Makefile.PL exited with zero' ) ||
+ diag(@mpl_out);
+
+ok( grep(/^Writing $makefile for Big::Fat::Dummy/,
+ @mpl_out) == 1,
+ 'init_dirscan skipped distdir') ||
+ diag(@mpl_out);
+
+# I know we'll get ignored errors from make here, that's ok.
+# Send STDERR off to oblivion.
+open(SAVERR, ">&STDERR") or die $!;
+open(STDERR, ">".File::Spec->devnull) or die $!;
+
my $realclean_out = `$make realclean`;
is( $?, 0, 'realclean' ) || diag($realclean_out);
-__DATA__
-print "1..2\n";
-
-print eval "use Big::Fat::Dummy; 1;" ? "ok 1\n" : "not ok 1\n";
-print "ok 2 - TEST_VERBOSE\n";
+open(STDERR, ">&SAVERR") or die $!;
+close SAVERR;
diff --git a/lib/ExtUtils/t/prefixify.t b/lib/ExtUtils/t/prefixify.t
new file mode 100644
index 0000000000..ba2851b681
--- /dev/null
+++ b/lib/ExtUtils/t/prefixify.t
@@ -0,0 +1,24 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't' if -d 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+use Test::More tests => 1;
+use File::Spec;
+use ExtUtils::MM;
+
+my $mm = bless {}, 'MM';
+
+my $default = File::Spec->catdir(qw(this that));
+$mm->prefixify('installbin', 'wibble', 'something', $default);
+
+is( $mm->{INSTALLBIN}, File::Spec->catdir('something', $default),
+ 'prefixify w/defaults');
diff --git a/t/lib/MakeMaker/Test/Utils.pm b/t/lib/MakeMaker/Test/Utils.pm
index b1de088c83..e039a6f0e5 100644
--- a/t/lib/MakeMaker/Test/Utils.pm
+++ b/t/lib/MakeMaker/Test/Utils.pm
@@ -9,10 +9,10 @@ use vars qw($VERSION @ISA @EXPORT);
require Exporter;
@ISA = qw(Exporter);
-$VERSION = 0.01;
+$VERSION = 0.02;
@EXPORT = qw(which_perl perl_lib makefile_name makefile_backup
- make make_run make_macro
+ make make_run make_macro calibrate_mtime
);
my $Is_VMS = $^O eq 'VMS';
@@ -36,6 +36,8 @@ MakeMaker::Test::Utils - Utility routines for testing MakeMaker
my $make_run = make_run;
make_macro($make, $targ, %macros);
+ my $mtime = calibrate_mtime;
+
=head1 DESCRIPTION
A consolidation of little utility functions used through out the
@@ -63,17 +65,24 @@ sub which_perl {
# VMS should have 'perl' aliased properly
return $perl if $Is_VMS;
- $perl = File::Spec->rel2abs( $perl );
+ $perl .= $Config{exe_ext} unless $perl =~ m/$Config{exe_ext}$/i;
- unless( -x $perl ) {
+ my $perlpath = File::Spec->rel2abs( $perl );
+ unless( -x $perlpath ) {
# $^X was probably 'perl'
+
+ # When building in the core, *don't* go off and find
+ # another perl
+ die "Can't find a perl to use (\$^X=$^X), (\$perlpath=$perlpath)"
+ if $ENV{PERL_CORE};
+
foreach my $path (File::Spec->path) {
- $perl = File::Spec->catfile($path, $^X);
- last if -x $perl;
+ $perlpath = File::Spec->catfile($path, $perl);
+ last if -x $perlpath;
}
}
- return $perl;
+ return $perlpath;
}
=item B<perl_lib>
@@ -201,6 +210,25 @@ sub make_macro {
return $is_mms ? "$make$macros $target" : "$make $target $macros";
}
+=item B<calibrate_mtime>
+
+ my $mtime = calibrate_mtime;
+
+When building on NFS, file modification times can often lose touch
+with reality. This returns the mtime of a file which has just been
+touched.
+
+=cut
+
+sub calibrate_mtime {
+ open(FILE, ">calibrate_mtime.tmp") || die $!;
+ print FILE "foo";
+ close FILE;
+ my($mtime) = (stat('calibrate_mtime.tmp'))[9];
+ unlink 'calibrate_mtime.tmp';
+ return $mtime;
+}
+
=back
=head1 AUTHOR