perl/perl-update-Module-Build.patch
Štěpán Kasal 26b7a08961 - remove compatibility obsolete sitelib directories
- use a better BuildRoot
- drop a redundant mkdir in %%install
- call patchlevel.h only once; rm patchlevel.bak
- update modules Sys::Syslog, Module::Load::Conditional, Module::CoreList,
    Test::Harness, Test::Simple, CGI.pm (dropping the upstreamed patch),
    File::Path (that includes our perl-5.10.0-CVE-2008-2827.patch),
    constant, Pod::Simple, Archive::Tar, Archive::Extract, File::Fetch,
    File::Temp, IPC::Cmd, Time::HiRes, Module::Build, ExtUtils::CBuilder
- standardize the patches for updating embedded modules
- work around a bug in Module::Build tests bu setting TMPDIR to a directory
    inside the source tree
2009-03-11 21:12:37 +00:00

5716 lines
172 KiB
Diff

Module-Build-0.32
perl-5.10.0 contained some fixes in the Module::Build testsuite; all
these have been integrated to Module-Build-0.31012
--- perl-5.10.0.orig/MANIFEST 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/MANIFEST 2009-03-10 17:07:04.000000000 +0100
@@ -2156,8 +2156,10 @@
lib/Module/Build/PodParser.pm Module::Build
lib/Module/Build/PPMMaker.pm Module::Build
lib/Module/Build/scripts/config_data Module::Build
+lib/Module/Build/t/add_property.t Module::Build
lib/Module/Build/t/basic.t Module::Build
lib/Module/Build/t/bundled/Tie/CPHash.pm Module::Build.pm
+lib/Module/Build/t/compat/exit.t Module::Build
lib/Module/Build/t/compat.t Module::Build
lib/Module/Build/t/destinations.t Module::Build
lib/Module/Build/t/extend.t Module::Build
@@ -2178,9 +2180,12 @@
lib/Module/Build/t/pod_parser.t Module::Build
lib/Module/Build/t/ppm.t Module::Build
lib/Module/Build/t/runthrough.t Module::Build
+lib/Module/Build/t/script_dist.t Module::Build
+lib/Module/Build/t/test_file_exts.t Module::Build
lib/Module/Build/t/test_types.t Module::Build
lib/Module/Build/t/test_type.t Module::Build
lib/Module/Build/t/tilde.t Module::Build
+lib/Module/Build/t/use_tap_harness.t Module::Build
lib/Module/Build/t/versions.t Module::Build
lib/Module/Build/t/xs.t Module::Build
lib/Module/Build/Version.pm Module::Build
diff -urN perl-5.10.0.orig/lib/Module/Build/API.pod perl-5.10.0/lib/Module/Build/API.pod
--- perl-5.10.0.orig/lib/Module/Build/API.pod 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/API.pod 2009-03-10 16:49:12.000000000 +0100
@@ -211,12 +211,12 @@
[version 0.20]
-This should be a short description of the distribution. This is used
-when generating metadata for F<META.yml> and PPD files. If it is not
-given then C<Module::Build> looks in the POD of the module from which
-it gets the distribution's version. It looks for the first line
-matching C<$package\s-\s(.+)>, and uses the captured text as the
-abstract.
+This should be a short description of the distribution. This is used when
+generating metadata for F<META.yml> and PPD files. If it is not given
+then C<Module::Build> looks in the POD of the module from which it gets
+the distribution's version. If it finds a POD section marked "=head1
+NAME", then it looks for the first line matching C<\s+-\s+(.+)>,
+and uses the captured text as the abstract.
=item dist_author
@@ -268,6 +268,10 @@
this process, so there's no real opportunity to change to something
better.
+If the target file of L</dist_version_from> contains more than one package
+declaration, the version returned will be the one matching the configured
+L</module_name>.
+
=item dynamic_config
[version 0.07]
@@ -502,16 +506,16 @@
sync with your written documentation if you ever change your licensing
terms.
+You may also use a license type of C<unknown> if you don't wish to
+specify your terms in the metadata.
+
It is a fatal error to use a license other than the ones mentioned
above. This is not because I wish to impose licensing terms on you -
please let me know if you would like another license option to be
-added to the list. You may also use a license type of C<unknown> if
-you don't wish to specify your terms (but this is usually not a good
-idea for you to do!).
-
-I just started out with a small set of licenses to keep things simple,
-figuring I'd let people with actual working knowledge in this area
-tell me what to do. So if that's you, drop me a line.
+added to the list. I just started out with a small set of licenses to
+keep things simple, figuring I'd let people with actual working
+knowledge in this area tell me what to do. So if that's you, drop me
+a line.
=item meta_add
@@ -683,13 +687,13 @@
An optional parameter specifying a set of files that should be
installed as executable Perl scripts when the module is installed.
-May be given as an array reference of the files, or as a hash
-reference whose keys are the files (and whose values will currently be
-ignored).
+May be given as an array reference of the files, as a hash reference
+whose keys are the files (and whose values will currently be ignored),
+as a string giving the name of a directory in which to find scripts,
+or as a string giving the name of a single script file.
-The default is to install no script files - in other words, there is
-no default location where Module::Build will look for script files to
-install.
+The default is to install any scripts found in a F<bin> directory at
+the top level of the distribution.
For backward compatibility, you may use the parameter C<scripts>
instead of C<script_files>. Please consider this usage deprecated,
@@ -725,6 +729,26 @@
property is true, then the C<t/> directory will be scanned recursively
for C<*.t> files.
+=item use_tap_harness
+
+[version 0.2808_03]
+
+An optional parameter indicating whether or not to use TAP::Harness for
+testing rather than Test::Harness. Defaults to false. If set to true, you must
+therefore be sure to add TAP::Harness as a requirement for your module in
+L</build_requires>. Implicitly set to a true value if C<tap_harness_args> is
+specified.
+
+=item tap_harness_args
+
+[version 0.2808_03]
+
+An optional parameter specifying parameters to be passed to TAP::Harness when
+running tests. Must be given as a hash reference of parameters; see the
+L<TAP::Harness|TAP::Harness> documentation for details. Note that specifying
+this parameter will implicitly set C<use_tap_harness> to a true value. You
+must therefore be sure to add TAP::Harness as a requirement for your module in
+L</build_requires>.
=item xs_files
@@ -771,6 +795,86 @@
defaults to C<MyModuleBuilder>. The C<code> parameter specifies Perl
code to use as the body of the subclass.
+=item add_property
+
+[version 0.31]
+
+ package 'My::Build';
+ use base 'Module::Build';
+ __PACKAGE__->add_property( 'pedantic' );
+ __PACKAGE__->add_property( answer => 42 );
+ __PACKAGE__->add_property(
+ 'epoch',
+ default => sub { time },
+ check => sub {
+ return 1 if /^\d+$/;
+ shift->property_error( "'$_' is not an epoch time" );
+ return 0;
+ },
+ );
+
+Adds a property to a Module::Build class. Properties are those attributes of a
+Module::Build object which can be passed to the constructor and which have
+accessors to get and set them. All of the core properties, such as
+C<module_name> and C<license>, are defined using this class method.
+
+The first argument to C<add_property()> is always the name of the property.
+The second argument can be either a default value for the property, or a list
+of key/value pairs. The supported keys are:
+
+=over
+
+=item C<default>
+
+The default value. May optionally be specified as a code reference, in which
+case the return value from the execution of the code reference will be used.
+If you need the default to be a code reference, just use a code reference to
+return it, e.g.:
+
+ default => sub { sub { ... } },
+
+=item C<check>
+
+A code reference that checks that a value specified for the property is valid.
+During the execution of the code reference, the new value will be included in
+the C<$_> variable. If the value is correct, the C<check> code reference
+should return true. If the value is not correct, it sends an error message to
+C<property_error()> and returns false.
+
+=back
+
+When this method is called, a new property will be installed in the
+Module::Build class, and an accessor will be built to allow the property to be
+get or set on the build object.
+
+ print $build->pedantic, $/;
+ $build->pedantic(0);
+
+If the default value is a hash reference, this generetes a special-case
+accessor method, wherein individual key/value pairs may be set or fetched:
+
+ print "stuff{foo} is: ", $build->stuff( 'foo' ), $/;
+ $build->stuff( foo => 'bar' );
+ print $build->stuff( 'foo' ), $/; # Outputs "bar"
+
+Of course, you can still set the entire hash reference at once, as well:
+
+ $build->stuff( { foo => 'bar', baz => 'yo' } );
+
+In either case, if a C<check> has been specified for the property, it will be
+applied to the entire hash. So the check code reference should look something
+like:
+
+ check => sub {
+ return 1 if defined $_ && exists $_->{foo};
+ shift->property_error(qq{Property "stuff" needs "foo"});
+ return 0;
+ },
+
+=item property_error
+
+[version 0.31]
+
=back
@@ -855,6 +959,14 @@
Returns a hash reference indicating the C<build_requires>
prerequisites that were passed to the C<new()> method.
+=item cbuilder()
+
+[version 0.2809]
+
+Returns the internal ExtUtils::CBuilder object that can be used for
+compiling & linking C code. If no such object is available (e.g. if
+the system has no compiler installed) an exception will be thrown.
+
=item check_installed_status($module, $version)
[version 0.11]
@@ -1166,6 +1278,19 @@
Module::Build's main support for configuration of installed modules.
See also L<Module::Build::Authoring/"SAVING CONFIGURATION INFORMATION">.
+=item fix_shebang_line(@files)
+
+[version 0.??]
+
+Modify any "shebang" line in the specified files to use the path to the
+perl executable being used for the current build. Files are modified
+in-place. The existing shebang line must have a command that contains
+"C<perl>"; arguments to the command do not count. In particular, this
+means that the use of C<#!/usr/bin/env perl> will not be changed.
+
+For an explanation of shebang lines, see
+L<http://en.wikipedia.org/wiki/Shebang_%28Unix%29>.
+
=item have_c_compiler()
[version 0.21]
@@ -1423,6 +1548,18 @@
}
}
+=item prereq_data()
+
+[version 0.32]
+
+Returns a reference to a hash describing all prerequisites. The keys of the
+hash will the various prerequisite types ('requires', 'build_requires',
+'configure_requires', 'recommends', or 'conflicts') and the values will
+references to hashes of module names and version numbers. Only prerequisites
+types that are defined will be included. The C<prereq_data> action is just a
+thin wrapper around the C<prereq_data()> method and dumps the hash as a string
+that can be loaded using C<eval()>.
+
=item prereq_report()
[version 0.28]
@@ -1606,6 +1743,8 @@
=item conflicts()
+=item create_license()
+
=item create_makefile_pl()
=item create_packlist()
@@ -1660,6 +1799,8 @@
=item prereq_action_types()
+=item program_name()
+
=item quiet()
=item recommends()
@@ -1672,8 +1813,16 @@
=item scripts()
+=item sign()
+
+=item tap_harness_args()
+
+=item test_file_exts()
+
=item use_rcfile()
+=item use_tap_harness()
+
=item verbose()
=item xs_files()
diff -urN perl-5.10.0.orig/lib/Module/Build/Base.pm perl-5.10.0/lib/Module/Build/Base.pm
--- perl-5.10.0.orig/lib/Module/Build/Base.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Base.pm 2009-03-10 16:49:12.000000000 +0100
@@ -1,12 +1,15 @@
+# -*- mode: cperl; tab-width: 8; indent-tabs-mode: nil; basic-offset: 2 -*-
+# vim:ts=8:sw=2:et:sta:sts=2
package Module::Build::Base;
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
BEGIN { require 5.00503 }
use Carp;
+use Cwd ();
use File::Copy ();
use File::Find ();
use File::Path ();
@@ -82,6 +85,8 @@
}
$self->{invoked_action} = $self->{action} ||= 'build';
+
+ $self->_set_install_paths;
return $self;
}
@@ -172,8 +177,14 @@
################## End constructors #########################
-sub log_info { print @_ unless shift()->quiet }
-sub log_verbose { shift()->log_info(@_) if $_[0]->verbose }
+sub log_info {
+ my $self = shift;
+ print @_ unless(ref($self) and $self->quiet);
+}
+sub log_verbose {
+ my $self = shift;
+ $self->log_info(@_) if(ref($self) and $self->verbose);
+}
sub log_warn {
# Try to make our call stack invisible
shift;
@@ -319,7 +330,6 @@
}
sub cwd {
- require Cwd;
return Cwd::cwd();
}
@@ -328,18 +338,17 @@
# proper quoting so that the subprocess sees this same list of args.
my ($self, @args) = @_;
- my $return_args = '';
my @quoted;
for (@args) {
- if ( /^[^\s*?!$<>;\\|'"\[\]\{\}]+$/ ) {
+ if ( /^[^\s*?!\$<>;\\|'"\[\]\{\}]+$/ ) {
# Looks pretty safe
push @quoted, $_;
} else {
# XXX this will obviously have to improve - is there already a
# core module lying around that does proper quoting?
- s/"/"'"'"/g;
- push @quoted, qq("$_");
+ s/('+)/'"$1"'/g;
+ push @quoted, qq('$_');
}
}
@@ -363,6 +372,8 @@
}
}
+# Tells us whether the construct open($fh, '-|', @command) is
+# supported. It would probably be better to dynamically sense this.
sub have_forkpipe { 1 }
# Determine whether a given binary is the same as the perl
@@ -435,7 +446,7 @@
# CBuilder is also in the core, so it should be available here
require ExtUtils::CBuilder;
- my $perl_src = ExtUtils::CBuilder->perl_src;
+ my $perl_src = Cwd::realpath( ExtUtils::CBuilder->perl_src );
if ( defined($perl_src) && length($perl_src) ) {
my $uninstperl =
File::Spec->rel2abs(File::Spec->catfile( $perl_src, $perl_basename ));
@@ -639,123 +650,172 @@
);
}
-{
- my %valid_properties = ( __PACKAGE__, {} );
- my %additive_properties;
+########################################################################
+{ # enclosing these lexicals -- TODO
+ my %valid_properties = ( __PACKAGE__, {} );
+ my %additive_properties;
- sub _mb_classes {
- my $class = ref($_[0]) || $_[0];
- return ($class, $class->mb_parents);
- }
+ sub _mb_classes {
+ my $class = ref($_[0]) || $_[0];
+ return ($class, $class->mb_parents);
+ }
- sub valid_property {
- my ($class, $prop) = @_;
- return grep exists( $valid_properties{$_}{$prop} ), $class->_mb_classes;
+ sub valid_property {
+ my ($class, $prop) = @_;
+ return grep exists( $valid_properties{$_}{$prop} ), $class->_mb_classes;
+ }
+
+ sub valid_properties {
+ return keys %{ shift->valid_properties_defaults() };
+ }
+
+ sub valid_properties_defaults {
+ my %out;
+ for (reverse shift->_mb_classes) {
+ @out{ keys %{ $valid_properties{$_} } } = map {
+ $_->()
+ } values %{ $valid_properties{$_} };
}
+ return \%out;
+ }
- sub valid_properties {
- return keys %{ shift->valid_properties_defaults() };
+ sub array_properties {
+ for (shift->_mb_classes) {
+ return @{$additive_properties{$_}->{ARRAY}}
+ if exists $additive_properties{$_}->{ARRAY};
}
+ }
- sub valid_properties_defaults {
- my %out;
- for (reverse shift->_mb_classes) {
- @out{ keys %{ $valid_properties{$_} } } = values %{ $valid_properties{$_} };
- }
- return \%out;
+ sub hash_properties {
+ for (shift->_mb_classes) {
+ return @{$additive_properties{$_}->{'HASH'}}
+ if exists $additive_properties{$_}->{'HASH'};
}
+ }
- sub array_properties {
- for (shift->_mb_classes) {
- return @{$additive_properties{$_}->{ARRAY}}
- if exists $additive_properties{$_}->{ARRAY};
- }
+ sub add_property {
+ my ($class, $property) = (shift, shift);
+ die "Property '$property' already exists"
+ if $class->valid_property($property);
+ my %p = @_ == 1 ? ( default => shift ) : @_;
+
+ my $type = ref $p{default};
+ $valid_properties{$class}{$property} = $type eq 'CODE'
+ ? $p{default}
+ : sub { $p{default} };
+
+ push @{$additive_properties{$class}->{$type}}, $property
+ if $type;
+
+ unless ($class->can($property)) {
+ # TODO probably should put these in a util package
+ my $sub = $type eq 'HASH'
+ ? _make_hash_accessor($property, \%p)
+ : _make_accessor($property, \%p);
+ no strict 'refs';
+ *{"$class\::$property"} = $sub;
}
- sub hash_properties {
- for (shift->_mb_classes) {
- return @{$additive_properties{$_}->{'HASH'}}
- if exists $additive_properties{$_}->{'HASH'};
- }
+ return $class;
+ }
+
+ sub property_error {
+ my $self = shift;
+ die 'ERROR: ', @_;
}
- sub add_property {
- my ($class, $property, $default) = @_;
- die "Property '$property' already exists" if $class->valid_property($property);
-
- $valid_properties{$class}{$property} = $default;
-
- my $type = ref $default;
- if ($type) {
- push @{$additive_properties{$class}->{$type}}, $property;
- }
+ sub _set_defaults {
+ my $self = shift;
- unless ($class->can($property)) {
- no strict 'refs';
- if ( $type eq 'HASH' ) {
- *{"$class\::$property"} = sub {
- my $self = shift;
- my $x = $self->{properties};
- return $x->{$property} unless @_;
-
- if ( defined($_[0]) && !ref($_[0]) ) {
- if ( @_ == 1 ) {
- return exists( $x->{$property}{$_[0]} ) ?
- $x->{$property}{$_[0]} : undef;
- } elsif ( @_ % 2 == 0 ) {
- my %args = @_;
- while ( my($k, $v) = each %args ) {
- $x->{$property}{$k} = $v;
- }
- } else {
- die "Unexpected arguments for property '$property'\n";
- }
- } else {
- $x->{$property} = $_[0];
- }
- };
-
- } else {
- *{"$class\::$property"} = sub {
- my $self = shift;
- $self->{properties}{$property} = shift if @_;
- return $self->{properties}{$property};
- }
- }
+ # Set the build class.
+ $self->{properties}{build_class} ||= ref $self;
- }
- return $class;
+ # If there was no orig_dir, set to the same as base_dir
+ $self->{properties}{orig_dir} ||= $self->{properties}{base_dir};
+
+ my $defaults = $self->valid_properties_defaults;
+
+ foreach my $prop (keys %$defaults) {
+ $self->{properties}{$prop} = $defaults->{$prop}
+ unless exists $self->{properties}{$prop};
}
- sub _set_defaults {
- my $self = shift;
+ # Copy defaults for arrays any arrays.
+ for my $prop ($self->array_properties) {
+ $self->{properties}{$prop} = [@{$defaults->{$prop}}]
+ unless exists $self->{properties}{$prop};
+ }
+ # Copy defaults for arrays any hashes.
+ for my $prop ($self->hash_properties) {
+ $self->{properties}{$prop} = {%{$defaults->{$prop}}}
+ unless exists $self->{properties}{$prop};
+ }
+ }
- # Set the build class.
- $self->{properties}{build_class} ||= ref $self;
+} # end closure
+########################################################################
+sub _make_hash_accessor {
+ my ($property, $p) = @_;
+ my $check = $p->{check} || sub { 1 };
- # If there was no orig_dir, set to the same as base_dir
- $self->{properties}{orig_dir} ||= $self->{properties}{base_dir};
+ return sub {
+ my $self = shift;
- my $defaults = $self->valid_properties_defaults;
-
- foreach my $prop (keys %$defaults) {
- $self->{properties}{$prop} = $defaults->{$prop}
- unless exists $self->{properties}{$prop};
- }
-
- # Copy defaults for arrays any arrays.
- for my $prop ($self->array_properties) {
- $self->{properties}{$prop} = [@{$defaults->{$prop}}]
- unless exists $self->{properties}{$prop};
- }
- # Copy defaults for arrays any hashes.
- for my $prop ($self->hash_properties) {
- $self->{properties}{$prop} = {%{$defaults->{$prop}}}
- unless exists $self->{properties}{$prop};
+ # This is only here to deprecate the historic accident of calling
+ # properties as class methods - I suspect it only happens in our
+ # test suite.
+ unless(ref($self)) {
+ carp("\n$property not a class method (@_)");
+ return;
+ }
+
+ my $x = $self->{properties};
+ return $x->{$property} unless @_;
+
+ my $prop = $x->{$property};
+ if ( defined $_[0] && !ref $_[0] ) {
+ if ( @_ == 1 ) {
+ return exists $prop->{$_[0]} ? $prop->{$_[0]} : undef;
+ } elsif ( @_ % 2 == 0 ) {
+ my %new = (%{ $prop }, @_);
+ local $_ = \%new;
+ $x->{$property} = \%new if $check->($self);
+ return $x->{$property};
+ } else {
+ die "Unexpected arguments for property '$property'\n";
}
+ } else {
+ die "Unexpected arguments for property '$property'\n"
+ if defined $_[0] && ref $_[0] ne 'HASH';
+ local $_ = $_[0];
+ $x->{$property} = shift if $check->($self);
}
+ };
+}
+########################################################################
+sub _make_accessor {
+ my ($property, $p) = @_;
+ my $check = $p->{check} || sub { 1 };
+ return sub {
+ my $self = shift;
+
+ # This is only here to deprecate the historic accident of calling
+ # properties as class methods - I suspect it only happens in our
+ # test suite.
+ unless(ref($self)) {
+ carp("\n$property not a class method (@_)");
+ return;
+ }
+
+ my $x = $self->{properties};
+ return $x->{$property} unless @_;
+ local $_ = $_[0];
+ $x->{$property} = shift if $check->($self);
+ return $x->{$property};
+ };
}
+########################################################################
# Add the default properties.
__PACKAGE__->add_property(blib => 'blib');
@@ -765,13 +825,29 @@
__PACKAGE__->add_property(build_bat => 0);
__PACKAGE__->add_property(config_dir => '_build');
__PACKAGE__->add_property(include_dirs => []);
-__PACKAGE__->add_property(installdirs => 'site');
__PACKAGE__->add_property(metafile => 'META.yml');
__PACKAGE__->add_property(recurse_into => []);
__PACKAGE__->add_property(use_rcfile => 1);
__PACKAGE__->add_property(create_packlist => 1);
__PACKAGE__->add_property(allow_mb_mismatch => 0);
__PACKAGE__->add_property(config => undef);
+__PACKAGE__->add_property(test_file_exts => ['.t']);
+__PACKAGE__->add_property(use_tap_harness => 0);
+__PACKAGE__->add_property(tap_harness_args => {});
+__PACKAGE__->add_property(
+ 'installdirs',
+ default => 'site',
+ check => sub {
+ return 1 if /^(core|site|vendor)$/;
+ return shift->property_error(
+ $_ eq 'perl'
+ ? 'Perhaps you meant installdirs to be "core" rather than "perl"?'
+ : 'installdirs must be one of "core", "site", or "vendor"'
+ );
+ return shift->property_error("Perhaps you meant 'core'?") if $_ eq 'perl';
+ return 0;
+ },
+);
{
my $Is_ActivePerl = eval {require ActivePerl::DocTools};
@@ -804,6 +880,7 @@
base_dir
bindoc_dirs
c_source
+ create_license
create_makefile_pl
create_readme
debugger
@@ -828,10 +905,12 @@
pod_files
pollute
prefix
+ program_name
quiet
recursive_test_files
script_files
scripts
+ sign
test_files
verbose
xs_files
@@ -1072,10 +1151,19 @@
$self->log_info("Checking features:\n");
- my $max_name_len;
- $max_name_len = ( length($_) > $max_name_len ) ?
- length($_) : $max_name_len
- for keys %$features;
+ # TODO refactor into ::Util
+ my $longest = sub {
+ my @str = @_ or croak("no strings given");
+
+ my @len = map({length($_)} @str);
+ my $max = 0;
+ my $longest;
+ for my $i (0..$#len) {
+ ($max, $longest) = ($len[$i], $str[$i]) if($len[$i] > $max);
+ }
+ return($longest);
+ };
+ my $max_name_len = length($longest->(keys %$features));
while (my ($name, $info) = each %$features) {
$self->log_info(" $name" . '.' x ($max_name_len - length($name) + 4));
@@ -1100,7 +1188,7 @@
}
}
- $self->log_warn("\n");
+ $self->log_warn("\n") unless $self->quiet;
}
sub prereq_failures {
@@ -1285,7 +1373,7 @@
my $status = $self->check_installed_status($modname, $spec);
if ($status->{ok}) {
- return $status->{have} if $status->{have} and $status->{have} ne '<none>';
+ return $status->{have} if $status->{have} and "$status->{have}" ne '<none>';
return '0 but true';
}
@@ -1501,9 +1589,17 @@
return $self->$method();
}
+# cuts the user-specified options out of the command-line args
sub cull_options {
my $self = shift;
- my $specs = $self->get_options or return ({}, @_);
+ my (@argv) = @_;
+
+ # XXX is it even valid to call this as a class method?
+ return({}, @argv) unless(ref($self)); # no object
+
+ my $specs = $self->get_options;
+ return({}, @argv) unless($specs and %$specs); # no user options
+
require Getopt::Long;
# XXX Should we let Getopt::Long handle M::B's options? That would
# be easy-ish to add to @specs right here, but wouldn't handle options
@@ -1522,7 +1618,7 @@
$args->{$k} = $v->{default} if exists $v->{default};
}
- local @ARGV = @_; # No other way to dupe Getopt::Long
+ local @ARGV = @argv; # No other way to dupe Getopt::Long
# Get the options values and return them.
# XXX Add option to allow users to set options?
@@ -1553,6 +1649,8 @@
return $self->{args}{$key};
}
+# allows select parameters (with underscores) to be spoken with dashes
+# when used as command-line options
sub _translate_option {
my $self = shift;
my $opt = shift;
@@ -1560,6 +1658,7 @@
(my $tr_opt = $opt) =~ tr/-/_/;
return $tr_opt if grep $tr_opt =~ /^(?:no_?)?$_$/, qw(
+ create_license
create_makefile_pl
create_readme
extra_compiler_flags
@@ -1571,6 +1670,8 @@
meta_merge
test_files
use_rcfile
+ use_tap_harness
+ tap_harness_args
); # normalize only selected option names
return $opt;
@@ -1589,6 +1690,7 @@
}
}
+# decide whether or not an option requires/has an opterand
sub _optional_arg {
my $self = shift;
my $opt = shift;
@@ -1598,12 +1700,15 @@
my @bool_opts = qw(
build_bat
+ create_license
create_readme
pollute
quiet
uninst
use_rcfile
verbose
+ sign
+ use_tap_harness
);
# inverted boolean options; eg --noverbose or --no-verbose
@@ -1618,7 +1723,7 @@
# we're punting a bit here, if an option appears followed by a digit
# we take the digit as the argument for the option. If there is
- # nothing that looks like a digit, we pretent the option is a flag
+ # nothing that looks like a digit, we pretend the option is a flag
# that is being set and has no argument.
my $arg = 1;
$arg = shift(@$argv) if @$argv && $argv->[0] =~ /^\d+$/;
@@ -1628,12 +1733,13 @@
sub read_args {
my $self = shift;
- my ($action, @argv);
+
(my $args, @_) = $self->cull_options(@_);
my %args = %$args;
my $opt_re = qr/[\w\-]+/;
+ my ($action, @argv);
while (@_) {
local $_ = shift;
if ( /^(?:--)?($opt_re)=(.*)$/ ) {
@@ -1828,9 +1934,9 @@
if ($key eq 'config') {
$self->config($_ => $val->{$_}) foreach keys %$val;
} else {
- my $add_to = ( $additive{$key} ? $self->{properties}{$key}
- : $self->valid_property($key) ? $self->{properties}
- : $self->{args});
+ my $add_to = $additive{$key} ? $self->{properties}{$key} :
+ $self->valid_property($key) ? $self->{properties} :
+ $self->{args} ;
if ($additive{$key}) {
$add_to->{$_} = $val->{$_} foreach keys %$val;
@@ -1948,15 +2054,25 @@
$self->log_info( $self->prereq_report );
}
-sub prereq_report {
+sub ACTION_prereq_data {
+ my $self = shift;
+ $self->log_info( Module::Build::Dumper->_data_dump( $self->prereq_data ) );
+}
+
+sub prereq_data {
my $self = shift;
my @types = @{ $self->prereq_action_types };
- my $info = { map { $_ => $self->$_() } @types };
+ my $info = { map { $_ => $self->$_() } grep { %{$self->$_()} } @types };
+ return $info;
+}
+
+sub prereq_report {
+ my $self = shift;
+ my $info = $self->prereq_data;
my $output = '';
- foreach my $type (@types) {
+ foreach my $type (keys %$info) {
my $prereqs = $info->{$type};
- next unless %$prereqs;
$output .= "\n$type:\n";
my $mod_len = 2;
my $ver_len = 4;
@@ -2094,7 +2210,7 @@
@types or croak "need some types of tests to check";
my %test_types = (
- default => '.t',
+ default => $p->{test_file_exts},
(defined($p->{test_types}) ? %{$p->{test_types}} : ()),
);
@@ -2104,7 +2220,7 @@
}
# we use local here because it ends up two method calls deep
- local $p->{test_file_exts} = [ @test_types{@types} ];
+ local $p->{test_file_exts} = [ map { ref $_ ? @$_ : $_ } @test_types{@types} ];
$self->depends_on('code');
# Protect others against our @INC changes
@@ -2123,40 +2239,77 @@
sub do_tests {
my $self = shift;
- my $p = $self->{properties};
- require Test::Harness;
-
- # Do everything in our power to work with all versions of Test::Harness
- my @harness_switches = $p->{debugger} ? qw(-w -d) : ();
- local $Test::Harness::switches = join ' ', grep defined, $Test::Harness::switches, @harness_switches;
- local $Test::Harness::Switches = join ' ', grep defined, $Test::Harness::Switches, @harness_switches;
- local $ENV{HARNESS_PERL_SWITCHES} = join ' ', grep defined, $ENV{HARNESS_PERL_SWITCHES}, @harness_switches;
-
- $Test::Harness::switches = undef unless length $Test::Harness::switches;
- $Test::Harness::Switches = undef unless length $Test::Harness::Switches;
- delete $ENV{HARNESS_PERL_SWITCHES} unless length $ENV{HARNESS_PERL_SWITCHES};
-
- local ($Test::Harness::verbose,
- $Test::Harness::Verbose,
- $ENV{TEST_VERBOSE},
- $ENV{HARNESS_VERBOSE}) = ($p->{verbose} || 0) x 4;
my $tests = $self->find_test_files;
- if (@$tests) {
+ if(@$tests) {
+ my $args = $self->tap_harness_args;
+ if($self->use_tap_harness or ($args and %$args)) {
+ $self->run_tap_harness($tests);
+ }
+ else {
+ $self->run_test_harness($tests);
+ }
+ }
+ else {
+ $self->log_info("No tests defined.\n");
+ }
+
+ $self->run_visual_script;
+}
+
+sub run_tap_harness {
+ my ($self, $tests) = @_;
+
+ require TAP::Harness;
+
+ # TODO allow the test @INC to be set via our API?
+
+ TAP::Harness->new({
+ lib => [@INC],
+ verbosity => $self->{properties}{verbose},
+ switches => [ $self->harness_switches ],
+ %{ $self->tap_harness_args },
+ })->runtests(@$tests);
+}
+
+sub run_test_harness {
+ my ($self, $tests) = @_;
+ require Test::Harness;
+ my $p = $self->{properties};
+ my @harness_switches = $self->harness_switches;
+
# Work around a Test::Harness bug that loses the particular perl
# we're running under. $self->perl is trustworthy, but $^X isn't.
local $^X = $self->perl;
+
+ # Do everything in our power to work with all versions of Test::Harness
+ local $Test::Harness::switches = join ' ', grep defined, $Test::Harness::switches, @harness_switches;
+ local $Test::Harness::Switches = join ' ', grep defined, $Test::Harness::Switches, @harness_switches;
+ local $ENV{HARNESS_PERL_SWITCHES} = join ' ', grep defined, $ENV{HARNESS_PERL_SWITCHES}, @harness_switches;
+
+ $Test::Harness::switches = undef unless length $Test::Harness::switches;
+ $Test::Harness::Switches = undef unless length $Test::Harness::Switches;
+ delete $ENV{HARNESS_PERL_SWITCHES} unless length $ENV{HARNESS_PERL_SWITCHES};
+
+ local ($Test::Harness::verbose,
+ $Test::Harness::Verbose,
+ $ENV{TEST_VERBOSE},
+ $ENV{HARNESS_VERBOSE}) = ($p->{verbose} || 0) x 4;
+
Test::Harness::runtests(@$tests);
- } else {
- $self->log_info("No tests defined.\n");
- }
+}
- # This will get run and the user will see the output. It doesn't
- # emit Test::Harness-style output.
- if (-e 'visual.pl') {
- $self->run_perl_script('visual.pl', '-Mblib='.$self->blib);
- }
+sub run_visual_script {
+ my $self = shift;
+ # This will get run and the user will see the output. It doesn't
+ # emit Test::Harness-style output.
+ $self->run_perl_script('visual.pl', '-Mblib='.$self->blib)
+ if -e 'visual.pl';
+}
+
+sub harness_switches {
+ shift->{properties}{debugger} ? qw(-w -d) : ();
}
sub test_files {
@@ -2170,7 +2323,7 @@
sub expand_test_dir {
my ($self, $dir) = @_;
- my $exts = $self->{properties}{test_file_exts} || ['.t'];
+ my $exts = $self->{properties}{test_file_exts};
return sort map { @{$self->rscan_dir($dir, qr{^[^.].*\Q$_\E$})} } @$exts
if $self->recursive_test_files;
@@ -2392,7 +2545,6 @@
sub localize_file_path {
my ($self, $path) = @_;
- $path =~ s/\.\z// if $self->is_vmsish;
return File::Spec->catfile( split m{/}, $path );
}
@@ -2807,6 +2959,14 @@
sub ACTION_fakeinstall {
my ($self) = @_;
require ExtUtils::Install;
+ my $eui_version = ExtUtils::Install->VERSION;
+ if ( $eui_version < 1.32 ) {
+ $self->log_warn(
+ "The 'fakeinstall' action requires Extutils::Install 1.32 or later.\n"
+ . "(You only have version $eui_version)."
+ );
+ return;
+ }
$self->depends_on('build');
ExtUtils::Install::install($self->install_map, !$self->quiet, 1, $self->{args}{uninst}||0);
}
@@ -2879,7 +3039,7 @@
File::Spec->abs2rel( File::Spec->rel2abs( $file ),
File::Spec->rel2abs( $dir ) );
my $to_file =
- File::Spec->catdir( $ppm, 'blib',
+ File::Spec->catfile( $ppm, 'blib',
exists( $types{$type} ) ? $types{$type} : $type,
$rel_file );
$self->copy_if_modified( from => $file, to => $to_file );
@@ -3034,12 +3194,37 @@
sub do_create_makefile_pl {
my $self = shift;
require Module::Build::Compat;
- $self->delete_filetree('Makefile.PL');
$self->log_info("Creating Makefile.PL\n");
Module::Build::Compat->create_makefile_pl($self->create_makefile_pl, $self, @_);
$self->_add_to_manifest('MANIFEST', 'Makefile.PL');
}
+sub do_create_license {
+ my $self = shift;
+ $self->log_info("Creating LICENSE file");
+
+ my $l = $self->license
+ or die "No license specified";
+
+ my $key = $self->valid_licenses->{$l}
+ or die "'$l' isn't a license key we know about";
+ my $class = "Software::License::$key";
+
+ eval "use $class; 1"
+ or die "Can't load Software::License to create LICENSE file: $@";
+
+ $self->delete_filetree('LICENSE');
+
+ my $author = join " & ", @{ $self->dist_author };
+ my $license = $class->new({holder => $author});
+ my $fh = IO::File->new('> LICENSE')
+ or die "Can't write LICENSE file: $!";
+ print $fh $license->fulltext;
+ close $fh;
+
+ $self->_add_to_manifest('MANIFEST', 'LICENSE');
+}
+
sub do_create_readme {
my $self = shift;
$self->delete_filetree('README');
@@ -3179,10 +3364,18 @@
\bblibdirs$
^MANIFEST\.SKIP$
+# Avoid VMS specific Makmaker generated files
+\bDescrip.MMS$
+\bDESCRIP.MMS$
+\bdescrip.mms$
+
# Avoid Module::Build generated and utility files.
\bBuild$
\bBuild.bat$
\b_build
+\bBuild.COM$
+\bBUILD.COM$
+\bbuild.com$
# Avoid Devel::Cover generated files
\bcover_db
@@ -3278,13 +3471,39 @@
{
my %licenses = (
+ perl => 'Perl_5',
+ apache => 'Apache_2_0',
+ artistic => 'Artistic_1_0',
+ artistic_2 => 'Artistic_2_0',
+ lgpl => 'LGPL_2_1',
+ lgpl2 => 'LGPL_2_1',
+ lgpl3 => 'LGPL_3_0',
+ bsd => 'BSD',
+ gpl => 'GPL_1',
+ gpl2 => 'GPL_2',
+ gpl3 => 'GPL_3',
+ mit => 'MIT',
+ mozilla => 'Mozilla_1_1',
+ open_source => undef,
+ unrestricted => undef,
+ restrictive => undef,
+ unknown => undef,
+ );
+
+ # TODO - would be nice to not have these here, since they're more
+ # properly stored only in Software::License
+ my %license_urls = (
perl => 'http://dev.perl.org/licenses/',
apache => 'http://apache.org/licenses/LICENSE-2.0',
artistic => 'http://opensource.org/licenses/artistic-license.php',
artistic_2 => 'http://opensource.org/licenses/artistic-license-2.0.php',
lgpl => 'http://opensource.org/licenses/lgpl-license.php',
+ lgpl2 => 'http://opensource.org/licenses/lgpl-2.1.php',
+ lgpl3 => 'http://opensource.org/licenses/lgpl-3.0.html',
bsd => 'http://opensource.org/licenses/bsd-license.php',
gpl => 'http://opensource.org/licenses/gpl-license.php',
+ gpl2 => 'http://opensource.org/licenses/gpl-2.0.php',
+ gpl3 => 'http://opensource.org/licenses/gpl-3.0.html',
mit => 'http://opensource.org/licenses/mit-license.php',
mozilla => 'http://opensource.org/licenses/mozilla1.1.php',
open_source => undef,
@@ -3295,6 +3514,9 @@
sub valid_licenses {
return \%licenses;
}
+ sub _license_url {
+ return $license_urls{$_[1]};
+ }
}
sub _hash_merge {
@@ -3313,6 +3535,7 @@
$self->do_create_makefile_pl if $self->create_makefile_pl;
$self->do_create_readme if $self->create_readme;
+ $self->do_create_license if $self->create_license;
$self->do_create_metafile;
}
@@ -3392,9 +3615,19 @@
}
$node->{version} = '' . $node->{version}; # Stringify version objects
- if (defined( $self->license ) &&
- defined( my $url = $self->valid_licenses->{ $self->license } )) {
- $node->{resources}{license} = $url;
+ if (defined( my $l = $self->license )) {
+ die "Unknown license string '$l'"
+ unless exists $self->valid_licenses->{ $self->license };
+
+ if (my $key = $self->valid_licenses->{ $self->license }) {
+ my $class = "Software::License::$key";
+ if (eval "use $class; 1") {
+ # S::L requires a 'holder' key
+ $node->{resources}{license} = $class->new({holder=>"nobody"})->url;
+ } else {
+ $node->{resources}{license} = $self->_license_url($key);
+ }
+ }
}
if (exists $p->{configure_requires}) {
@@ -3627,11 +3860,18 @@
$self->do_system($self->split_like_shell($self->{args}{gzip}), "$file.tar") if $self->{args}{gzip};
} else {
require Archive::Tar;
+
# Archive::Tar versions >= 1.09 use the following to enable a compatibility
# hack so that the resulting archive is compatible with older clients.
$Archive::Tar::DO_NOT_USE_PREFIX = 0;
+
my $files = $self->rscan_dir($dir);
- Archive::Tar->create_archive("$file.tar.gz", 1, @$files);
+ my $tar = Archive::Tar->new;
+ $tar->add_files(@$files);
+ for my $f ($tar->get_files) {
+ $f->mode($f->mode & ~022); # chmod go-w
+ }
+ $tar->write("$file.tar.gz", 1);
}
}
@@ -3744,8 +3984,6 @@
return $self->_prefixify_default( $type, $rprefix );
} elsif( !File::Spec->file_name_is_absolute($path) ) {
$self->log_verbose(" path is relative, not prefixifying.\n");
- } elsif( $sprefix eq $rprefix ) {
- $self->log_verbose(" no new prefix.\n");
} elsif( $path !~ s{^\Q$sprefix\E\b}{}s ) {
$self->log_verbose(" cannot prefixify, falling back to default.\n");
return $self->_prefixify_default( $type, $rprefix );
@@ -3902,16 +4140,20 @@
AutoSplit::autosplit($file, $dir);
}
-sub _cbuilder {
+sub cbuilder {
# Returns a CBuilder object
my $self = shift;
my $p = $self->{properties};
return $p->{_cbuilder} if $p->{_cbuilder};
- return unless $self->_mb_feature('C_support');
+ die "Module::Build is not configured with C_support"
+ unless $self->_mb_feature('C_support');
require ExtUtils::CBuilder;
- return $p->{_cbuilder} = ExtUtils::CBuilder->new(config => $self->config);
+ return $p->{_cbuilder} = ExtUtils::CBuilder->new(
+ config => $self->config,
+ ($self->quiet ? (quiet => 1 ) : ()),
+ );
}
sub have_c_compiler {
@@ -3921,7 +4163,7 @@
return $p->{have_compiler} if defined $p->{have_compiler};
$self->log_verbose("Checking if compiler tools configured... ");
- my $b = $self->_cbuilder;
+ my $b = eval { $self->cbuilder };
my $have = $b && $b->have_compiler;
$self->log_verbose($have ? "ok.\n" : "failed.\n");
return $p->{have_compiler} = $have;
@@ -3929,8 +4171,7 @@
sub compile_c {
my ($self, $file, %args) = @_;
- my $b = $self->_cbuilder
- or die "Module::Build is not configured with C_support";
+ my $b = $self->cbuilder;
my $obj_file = $b->object_file($file);
$self->add_to_cleanup($obj_file);
@@ -3963,9 +4204,7 @@
my $module_name = $self->module_name;
$module_name ||= $spec->{module_name};
- my $b = $self->_cbuilder
- or die "Module::Build is not configured with C_support";
- $b->link(
+ $self->cbuilder->link(
module_name => $module_name,
objects => [$spec->{obj_file}, @$objects],
lib_file => $spec->{lib_file},
@@ -3993,11 +4232,13 @@
or die "Can't find ExtUtils::xsubpp in INC (@INC)";
my @typemaps;
- push @typemaps, Module::Build::ModuleInfo->find_module_by_name('ExtUtils::typemap', \@INC);
- my $lib_typemap = Module::Build::ModuleInfo->find_module_by_name('typemap', ['lib']);
- if (defined $lib_typemap and -e $lib_typemap) {
- push @typemaps, 'typemap';
- }
+ push @typemaps, Module::Build::ModuleInfo->find_module_by_name(
+ 'ExtUtils::typemap', \@INC
+ );
+ my $lib_typemap = Module::Build::ModuleInfo->find_module_by_name(
+ 'typemap', [File::Basename::dirname($file)]
+ );
+ push @typemaps, $lib_typemap if $lib_typemap;
@typemaps = map {+'-typemap', $_} @typemaps;
my $cf = $self->{config};
@@ -4024,6 +4265,26 @@
return Text::ParseWords::shellwords($string);
}
+sub oneliner {
+ # Returns a string that the shell can evaluate as a perl command.
+ # This should be avoided whenever possible, since "the shell" really
+ # means zillions of shells on zillions of platforms and it's really
+ # hard to get it right all the time.
+
+ # Some of this code is stolen with permission from ExtUtils::MakeMaker.
+
+ my($self, $cmd, $switches, $args) = @_;
+ $switches = [] unless defined $switches;
+ $args = [] unless defined $args;
+
+ # Strip leading and trailing newlines
+ $cmd =~ s{^\n+}{};
+ $cmd =~ s{\n+$}{};
+
+ my $perl = ref($self) ? $self->perl : $self->find_perl_interpreter;
+ return $self->_quote_args($perl, @$switches, '-e', $cmd, @$args);
+}
+
sub run_perl_script {
my ($self, $script, $preargs, $postargs) = @_;
foreach ($preargs, $postargs) {
@@ -4155,12 +4416,15 @@
);
$args{verbose} = !$self->quiet
unless exists $args{verbose};
-
+
my $file = $args{from};
unless (defined $file and length $file) {
die "No 'from' parameter given to copy_if_modified";
}
-
+
+ # makes no sense to replicate an absolute path, so assume flatten
+ $args{flatten} = 1 if File::Spec->file_name_is_absolute( $file );
+
my $to_path;
if (defined $args{to} and length $args{to}) {
$to_path = $args{to};
@@ -4282,5 +4546,3 @@
perl(1), Module::Build(3)
=cut
-
-# vim:ts=8:sw=2:et:sta:sts=2
diff -urN perl-5.10.0.orig/lib/Module/Build/Changes perl-5.10.0/lib/Module/Build/Changes
--- perl-5.10.0.orig/lib/Module/Build/Changes 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Changes 2009-03-10 16:48:30.000000000 +0100
@@ -1,5 +1,251 @@
Revision history for Perl extension Module::Build.
+0.32 - Wed Feb 25 17:40:02 PST 2009
+
+ No changes since 0.31_04.
+
+0.31_04 - Fri Feb 20 11:04:59 PST 2009
+
+ Other
+ - Bumped Test::Harness prereq to 3.16 for latest PERL5LIB fixes (solves
+ test failures when installing Module::Build using CPANPLUS::Dist::Build)
+ [David Golden]
+
+0.31_03 - Sun Feb 8 14:54:01 PST 2009
+
+ Enhancements
+ - added a "prereq_data" action that prints a Perl data structure of
+ all prerequisites; can be loaded by external tools using eval()
+ [David Golden]
+
+ Bug-fixes
+ - 'fakeinstall' action warns and skips without ExtUtils::Install 1.32+
+ [David Golden, reported by Zefram]
+ - allows Module::Build version mismatch when installing self; works around
+ limitations in CPANPLUS::Dist::Build [David Golden]
+
+0.31_02 - Tue Jan 27 09:16:43 PST 2009
+
+ Other
+ - tests now use File::Temp (added to build_requires); appears to fix
+ Win32 testing heisenbug on directory removal during high system loads
+ - use_tap_harness.t will skip unless a release version of TAP::Harness
+ is installed
+ - improved diagnostics to ensure_blib() tests in t/lib/MBTest.pm
+
+ Compat
+ - passthrough Makefile.PL will now play nice with cpantesters' on
+ exit(0) (RT#32018) [Eric Wilhelm]
+
+ Bug Fixes
+ - fix for doubling-up of --prefix (RT#19951)
+
+0.31012 - Wed Jan 14 01:36:19 PST 2009
+
+ Bug Fixes
+ - t/tilde.t maybe actually fixed on MSWin32 now.
+
+0.31011 - Mon Jan 12 21:57:04 PST 2009
+
+ Bug Fixes
+ - t/tilde.t had been failing on MSWin32 (RT#42349)
+
+0.3101 - Mon Jan 12 13:52:36 PST 2009
+
+ Other
+ - added 'mirbsd' as a Unix-type OS [BinGOs]
+ - added 'haiku' as a Unix-type OS (backported from bleadperl)
+ - skips certain tests on VMS (backported from bleadperl)
+ - sets $^X to absolute path in tests (backported from bleadperl)
+
+0.31 - Sat Dec 20 15:03:33 2008
+
+ Deprecations
+ - Use of attributes as class methods is deprecated (this was never a
+ documented feature and appears to only have worked accidentally.)
+
+0.30_02 - Mon Dec 15 12:23:55 PST 2008
+
+ Bug Fixes
+ - make Software::License dependency "softer".
+
+0.30_01 - Thu Dec 11 18:25:53 PST 2008
+
+ New Docs
+ - Added a recipe for writing a new action to the Cookbook
+ - Added a recipe for bundling Module::Build to the Cookbook.
+
+ Doc Fixes
+ - Clarified dist_abstract search procedure in API.pod (RT#41056) [Mario
+ Domgoergen]
+
+ Bug Fixes
+ - Workaround HARNESS_TIMER env issue in t/compat.t (RT#39635)
+ - Fix ~ expansion when $HOME is different from /etc/passwd as
+ when running sudo. [rt.cpan.org 39662]
+ - Fixed a small POD error in the Cookbook. [Damyan Ivanov]
+ - Unset group/other write permission bits when using Archive::Tar to
+ build the dist tarball. (RT#39804) [David Golden]
+
+ Enhancements
+ - We now support a 'create_license' parameter to new() that will
+ create a LICENSE file during the 'dist' phase with the full text of
+ the license. This requires Software::License on the author's
+ machine. THIS ALSO STILL NEEDS DOCS.
+ - Added lgpl2/lgpl3 entries to the supported licenses (RT#40532).
+ - Support for validating properties with a check subref. [David
+ Wheeler]
+
+ Test Fixes
+ - Defend against more stray environment variables interfering
+ with the tests.
+
+ Other
+ - Updated our embedded version.pm to 0.76, enhanced documentation on
+ dist_version_from. [John Peacock]
+
+0.30 - Thu Sep 25 20:57:36 2008
+
+ - First non-beta release since April 2007. In the meantime, Sarkozy
+ became president of France, the 35W bridge fell in Minneapolis,
+ Phelps won a lot of gold, a new tribe of indigenous people was
+ discovered in the Amazon, and Bob Barker stopped doing The Price Is
+ Right. As of this moment though, the U.S. economy still hasn't
+ collapsed completely.
+
+0.2808_05 - Thu Sep 18 23:30:39 PDT 2008
+
+ - Skip test in t/ext.t which tickles shellwords() in Text::ParseWords
+ below 3.23 [David Wheeler, Ken]
+
+ - Fixed some shell-quoting issues in do_system() on Windows [Ken,
+ Schwern, reported by Curtis Jewell]
+
+ - Fixed t/xs.t failure for missing 'const char *' typemap in 5.6
+ [Schwern]
+
+ - Added build_requires for Test::More 0.49 and Test::Harness 2.03.
+ Removed bundled Test::More (was not working for 5.005x anyway).
+ [Schwern]
+
+ - Minimum required perl version is now 5.6.1. [Schwern]
+
+0.2808_04 - Thu Sep 11 22:51:27 PDT 2008
+
+ - Backed-out incompatible Module::Build::ModuleInfo change (first in
+ 0.2808_02.)
+
+0.2808_03 - Mon Sep 1 14:43:27 PDT 2008
+
+ - Made adjustments for the format changes of recent Test::Harness
+ output. [Nicholas Clark]
+
+ - Fixed the documentation for script_files to indicate that we search
+ bin/ for scripts by default. It has been this way for several
+ years. [Spotted by Ron Savage]
+
+0.2808_02 - Wed Jul 9 16:45:08 PDT 2008
+
+ - Experimental support for TAP::Harness with --use-tap-harness option
+ and the tap_harness_args property. [David Wheeler & Eric Wilhelm]
+
+ - Added test_file_exts property for main-run tests other than '*.t'.
+ [David Wheeler]
+
+ - Fixed getcwd()/rmtree() failure case on 5.10+mac where something is
+ unhappy about all of the tests deleting their distgen directory
+ before leaving it. [Eric Wilhelm & David Wheeler]
+
+ - Improved support for parsing qv() in modules' $VERSION
+ declarations, and made $VERSION-parsing errors more verbose. [Jos
+ Boumans]
+
+ - Integrated an omnibus patch for various VMS fixes. [Craig Berry &
+ John E. Malmberg]
+
+ - Some versions of Test::Harness (or something) seem to not be
+ stripping the ".t" suffix when outputting test reports, which was
+ causing one of our tests in t/compat.t to fail. Fixed. [Spotted by
+ a smoke tester]
+
+ - Most Unix platforms seem to allow hyphens in usernames, so we honor
+ this in our de-tilde-fying methods now. [Spotted by s-murata]
+
+ - If there are multiple assignments to the $VERSION variable in
+ someone's module and this generates warnings, tell the user what
+ line number the problem is at.
+
+ - Added 'gnu' and 'gnukfreebsd' as Unix variants. [Niko Tyni]
+
+ - Fixed a couple bugs in how we quote arguments to external processes
+ when they have to pass through the shell. Also much more
+ thoroughly tested our quoting now.
+
+ - Edited the Module::Build::API docs prose about the 'license' field
+ in response to some comments on the module-authors mailing list.
+
+ - Fixed a typo in some example code in the Cookbook. [Jeremy Leader]
+
+ - Custom typemaps were being looked for in places that don't quite
+ exist; fixed. [Michael G Schwern]
+
+ - QNX/Neutrino is now considered to be Unix. [rt.cpan.org 32214]
+
+ - Added 'gpl2' and 'gpl3' to the list of valid licenses. [Allen
+ Engelhardt]
+
+ - Fixed our Data::Dumper wrapper's sensitivity to users who might set
+ $Data::Dumper::Terse. [Spotted by Dominique Dumont]
+
+ - Documented the fix_shebang_line() method. [Elliot Shank]
+
+ - Applied the 'const' modifier to version() and xs_version() XS
+ functions we use during testing. [Robin Barker]
+
+ - Fixed processing of INC=, POLLUTE=, INSTALLDIRS=, and LIB= for
+ passthrough/small Makefile.PLs.
+
+ - perl Build.PL --sign=1 now signs. [Michael G Schwern]
+
+ - Fixed processing of INSTALLDIRS=whatever for compatibility
+ Makefiles. [Spotted by John Peacock]
+
+ - Zillions of special-cases have been added in Compat.pm for dealing
+ with the special Makefile system on VMS. [John E. Malmberg]
+
+ - Fixed some stuff in how VMS command-args get quoted. [John E. Malmberg]
+
+ - VMS now overrides localize_file_path() and localize_dir_path() so
+ we don't need to do special stuff in the general case. [John
+ E. Malmberg]
+
+ - Added a few more VMS-specific entries to the default MANIFEST.SKIP
+ file that (sometimes) gets created during the 'manifest'
+ action. [John E. Malmberg]
+
+ - Fixed a catdir() that should have been a catfile() when creating a
+ ppmdist. [John E. Malmberg]
+
+ - Removed some assumptions about what makefiles are called (not
+ necessarily "Makefile") and how they take their arguments, to get
+ VMS tests working better. [John E. Malmberg]
+
+ - Fixed our check for Archive::Tar in the t/runthrough.t test, which
+ fixes a common failure on Win32. [Spotted by Chris Williams]
+
+ - Fixed a File::Spec mal-ism in t/destinations.t [Craig A. Berry]
+
+ - Exposed the internal ExtUtils::CBuilder object as part of our API,
+ via the cbuilder() method. [Zefram]
+
+ - Upgraded to version.pm 0.74 (fixes bug #30004.)
+
+ - Overwrite core (post-5.9.4) Module::Build installs (bug #20528.)
+
+ - Pass quiet() option to ExtUtils::CBuilder object.
+
+0.2808_01 - Wed Oct 24 11:51:25 2007
+
- All .pm files in the Module-Build distribution (except for
M::B::Version.pm, which is kind of tied to version.pm) now have the
same $VERSION number explicitly specified.
@@ -1806,3 +2052,592 @@
- Added documentation for 'extra_linker_flags' parameter, and added a
corresponding 'extra_compiler_flags' parameter. [original patch by
Richard Clamp]
+
+ - The pass-through Makefile created by Module::Build::Compat now
+ supports MakeMaker options like POLLUTE=1 and INC. We also just
+ warn & skip when we see any unknown MM parameters, rather than
+ dying. [Dave Rolsky]
+
+ - Fixed an error about how @INC and $ENV{PERL5LIB} interact during
+ the testing of M::B itself. [jk <billy2000@fastmail.fm>]
+
+ - The pass-through Makefile doesn't include 'recommended' M::B
+ dependencies in the Makefile anymore, since they're not strictly
+ necessary. In particular, this makes installing M::B itself
+ easier.
+
+ - A new 'create_makefile_pl' parameter lets you use
+ Module::Build::Compat during the 'distdir' (or 'dist') action to
+ automatically create a Makefile.PL for compatibility with
+ ExtUtils::MakeMaker. The parameter's value should be one of the
+ styles named in the Module::Build::Compat documentation.
+
+ - When compiling C code, we now respect 'pollute' and 'inc'
+ parameters. (XXX - needs docs) [Dave Rolsky]
+
+ - Made the creation of the "install map" more generic. (XXX - needs
+ documentation)
+
+ - Fixed a problem in which add_to_cleanup() didn't note cleanup files
+ unless create_build_script() had been called already. [Dave Rolsky]
+
+ - During 'Build dist', we no longer have to load each .pm file (via
+ Module::Info) to determine the $VERSION numbers inside. Instead,
+ we call our internal version_from_file() method, which is the same
+ thing MakeMaker and PAUSE and search.cpan.org do. Also fixes a
+ failure when Module::Info is installed in a nonstandard directory.
+ [reported by Teun Burgers]
+
+ - Fixed some failing test code on Windows - open files can't be
+ deleted. [Andrew Savige]
+
+ - The Cygwin platform is now treated as a flavor of Unix rather than
+ a flavor of Windows. [chocolateboy]
+
+ - We're now more aggressive about adding temporary C compilation
+ files (*.c, *.bs) to the cleanup list. [Dave Rolsky]
+
+ - When constructing the list in META.yml of packages provided by this
+ distribution, we now use the same rules as the PAUSE scanner does
+ when a single .pm file contains multiple VERSIONs. [Andreas Koenig]
+
+ - check_installed_status() now works as both a class method and an
+ object method (and is documented so). [Spotted by Dave Rolsky]
+
+0.18 Tue Apr 8 13:24:23 CDT 2003
+
+ - We now rewrite the shebang lines of scripts ourselves, rather than
+ relying on MakeMaker routines to do it. MakeMaker changed the way
+ this happened (not the result, but where the code lived) a few
+ times. [Suggested by Richard Clamp]
+
+ - The scripts() method has changed to script_files(), and likewise
+ the 'scripts' parameter has changed to 'script_files'. The old
+ names can still be used for backward compatibility.
+
+ - Support for the 'scripts' parameter (which is now 'script_files')
+ was broken in 0.17, now it's fixed. [Richard Clamp]
+
+ - We now recommend ExtUtils::ParseXS 2.02, which will fail to load
+ with perl 5.005 or earlier (which is proper, because it doesn't
+ work with those versions). When it fails to load, we still fall
+ back to using the xsubpp script for XS parsing. [spotted by Dave
+ Rolsky, fix suggested by Richard Clamp]
+
+ - Now works on VMS - the Build script's shebang-line-equivalent
+ wasn't being formed correctly there - though just about everything
+ else worked fine. [Tested & patched by Michael Schwern]
+
+ - Eliminated a warning that occurred if 'perl Build.PL' or the
+ check_installed_status() method was run with -w. [Spotted by
+ Michael Schwern]
+
+0.17 Sat Mar 29 18:06:01 CST 2003
+
+ - Now works under perl 5.005_03. [Richard Clamp]
+
+ - When building blib/ , .PL files are now processed before doing
+ anything else. This means .PL files can be used in any of the
+ other contexts.
+
+ - The locating and processing of .pm, .pod, .xs, .PL files and script
+ files are now isolated into their own methods. This is aimed
+ toward providing a stable interface for this stuff, so they can be
+ overridden, parameterized, etc. They're not quite stable yet,
+ though.
+
+ - The internal lib_to_blib() method has gone away, because processing
+ is now done by smaller specialized methods. This method had some
+ duplicate assumptions about filenames that it's nice to get rid of.
+
+ - .PL files are no longer automatically processed in the c_source
+ directory, they must be specified manually in a 'PL_files'
+ parameter.
+
+ - Mention in the docs that it's useful to do "PL_FILES => {}" in a
+ Makefile.PL if you're using both a Makefile.PL and a
+ Build.PL. [Dom]
+
+ - Add several options to the 'license' field, so that we're in better
+ sync with PAUSE and CPAN options. [Andreas Koenig]
+
+ - Created a find_perl_interpreter() method that tries to locate the
+ currently executing perl interpreter. Following a suggestion from
+ Nicholas Clark <nick@ccl4.org> for Inline, we prefer an absolute
+ path in $^X, then an existent path in $Config{perlpath}, then
+ whatever's in $^X.
+
+ - Use the aforementioned perl to run scripts in run_perl_script().
+ This fixes the spurious warning "WARNING: Configuration was
+ initially created with 'foo', but we are now using 'bar'" that
+ appeared a lot in version 0.16.
+
+
+0.16 Mon Feb 24 13:06:47 CST 2003
+
+ - All three C compilers that perl supports on Windows environments
+ (MSVC, BCC, and GCC) are now supported by Module::Build. We now
+ reportedly pass all tests on Windows. [Randy W. Sims]
+
+ - The test t/xs.t, which tests building of XS modules, will be
+ skipped if no C compiler is found. [suggested by Randy W. Sims]
+
+ - The "install" action accepts new "destdir" [motivated by Michael
+ Schwern and Chip Salzenberg] and "uninst" parameters [by Dave
+ Rolsky]. The former prepends an arbitrary directory to all
+ installation paths (useful for package management), and the latter
+ will tell ExtUtils::Install to remove any differing files that are
+ "shadowing" the stuff you're installing from a different location,
+ just like MakeMaker's "make install UNINST=1" command will do.
+
+ - Made changes to the generated Makefile in Module::Build::Compat
+ that much better support Windows platforms [after suggestions by
+ James Freeman]
+
+ - Added experimental support for creating distribution SIGNATURE
+ files via Module::Signature. [Dave Rolsky]
+
+ - Added experimental support for installing via the "only.pm" module,
+ which allows loading specific versions of modules. Since this
+ module is so new, the interface may still be changing. [Brian
+ Ingerson]
+
+ - Added support for installing executable scripts, via the 'scripts'
+ parameter to new(), and the scripts() accessor method.
+
+ - Fix an infinite loop that occurred when doing 'perl Build.PL
+ config="foo=bar"'
+
+ - Fix up the formatting of the error message the user gets when
+ prereqs aren't satisfied.
+
+0.15 Fri Jan 17 15:00:24 CST 2003
+
+ - In link_c(), extra object files were mistakenly being treated as
+ output files, not input files, in the up-to-date check. Fixed.
+
+ - In up_to_date(), don't make an unnecessary copy of the file lists
+ when they're specified as array references.
+
+ - Split off the C compilation phase into its own method,
+ compile_support_files(), for easier subclassing.
+
+ - Start a stub of a 'manifypods' action.
+
+ - Compiler optimizations weren't being included in C compilation
+ statements. Fixed.
+
+ - The 'extra_linker_flags' parameter wasn't being honored. Fixed.
+
+ - The 'ccflags' Config.pm entry wasn't being properly split into
+ separate arguments. Fixed.
+
+
+0.14 Fri Dec 13 14:06:29 AEST 2002
+
+ - Added support for MacPerl (Mac OS version 9 and below), which (as
+ far as I know) was never natively supported by MakeMaker. Still
+ lacks support for the 'test' action (because Test::Harness
+ requires forking, which MacPerl won't do) and compiling XS/C files
+ (because I don't know how to invoke a compiler on MacOS, and one
+ may not even be available). This change is brought to you by
+ Michael Schwern and the letter '('.
+
+ - Improved processing of .xs files. Now we use the new
+ ExtUtils::ParseXS module if it's available, otherwise we use
+ backticks and write the result to a .c file ourselves. This
+ avoids the need to do cross-platform shell redirection.
+
+ - Make sure all parts of 'Build test' use the not-yet-installed
+ version of Module::Build. This only affects the tests for this
+ module, not any of the module code itself. [Spotted by Schwern]
+
+ - Oopsie - use $Config{ld} instead of $Config{cc} for linking.
+
+ - Added a 'diff' action, which is useful for comparing the details
+ of what you're about to install with what is already installed on
+ your system. This uses File::Compare, which is in the core.
+
+ - Fixed a problem on Windows in which the _build/ directory wasn't
+ getting deleted during the 'realclean' action, because we had a
+ file open in that directory. [Spotted by Michael Schwern]
+
+ - delete_filetree() now always uses File::Path::rmtree(), regardless
+ of whether the thing being deleted is a file or a directory. This
+ helps remove things on obscure platforms with strange locking
+ rules (or even not so obscure ones like MacOS). It also now
+ reports the number of files or directories deleted (without
+ recursing directory contents).
+
+ - rm_previous_build_script() is gone, replaced by calls to
+ delete_filetree().
+
+ - 'Build' now chdir()s in a BEGIN block, so the 'use Module::Build'
+ statement will work correctly. Solves a problem on MacOS, where
+ the 'Build' script may often be invoked from the wrong working
+ directory. [Fix by Michael Schwern]
+
+ - Internally we now use the multi-argument form of system() to run
+ external commands (such as 'diff' or 'cc') whenever possible (and
+ whenever we can't avoid system() altogether). Note that this
+ means we have to handle splitting some strings (such as
+ $Config{ccflags}) into argument lists like the shell would, which
+ is a drag. However, the alternative would be to handle shell
+ quoting of all arguments to commands ourselves, which is an even
+ bigger drag across platforms and involves arbitrary filenames and
+ so on.
+
+ - To handle the argument splitting mentioned above, a method
+ split_like_shell() has been created. So far it's just doing naive
+ processing. In practice, I've yet to actually see a %Config entry
+ that uses quotes & spaces, so the splitting task is usually not
+ very error-prone.
+
+ - The 'test' action now takes a 'test_files' parameter, similar to
+ the (undocumented) ExtUtils::MakeMaker TEST_FILES argument. Handy
+ during development when fixing bugs.
+
+ - Internally, the rscan_dir() method can now accept a predicate
+ function that decides whether a file/directory should be matched.
+
+ - We now issue a warning message when the author hasn't specified a
+ license type.
+
+0.13 Wed Nov 20 20:07:53 AEST 2002
+
+ - 'cleanup' file lists are now written immediately, rather than at
+ program termination. This helps avoid "phantom files" that don't
+ get handled by the 'realclean' action. The internal
+ write_cleanup() method (which was never documented) is now gone.
+
+ - The 'blib/' directory is now properly cleaned up in more (all?)
+ circumstances. Previously it could become a phantom if
+ create_build_script() was never called.
+
+ - Now scan the 'c_source' directory for .cpp (C++) files as well as
+ .c files, and compiles them.
+
+ - Use a 'phony' target for 'make manifest' in the pass-through
+ Makefile, for the same reason as 'make install' (see version 0.12
+ notes below).
+
+ - Module::Build::Compat now accepts any known Config.pm key and
+ passes it through to the Build.PL. Fixes a problem with CPANPLUS,
+ which was passing INSTALLMAN1DIR.
+
+ - The file 'META.yaml' has been re-named to 'META.yml' in order to
+ cooperate better with systems that can only handle 3 characters
+ after the dot.
+
+ - The t/xs.t test should give more informative error messages upon
+ failure.
+
+0.12 Thu Nov 14 18:31:47 AEST 2002
+
+ - The META.yaml file was erroneously looking for 'build_depends'
+ instead of 'build_requires'. [spotted by Iain Truskett]
+
+ - Add prompt() and y_n() methods for use in Build.PLs
+
+ - Do more to work with all versions of Test::Harness when setting
+ the TEST_VERBOSE flag and running under the debugger [patch by
+ Dave Rolsky]
+
+ - Include a test for verbosity handling
+
+ - Make sure the blib/ directory is always cleaned up with the
+ 'clean' or 'realclean' action.
+
+ - In a pass-through Makefile.PL, inform 'make' that 'install' is a
+ "fake target", so that it works properly on case-insensitive
+ filesystems like HFS+ with distributions that contain an INSTALL
+ file. [patch by Brian Ingerson]
+
+ - In Module::Build::Compat, show an example Makefile.PL that can
+ install Module::Build and re-invoke itself in one fell swoop [Dave
+ Rolsky and Autrijus Tang]
+
+ - Improve the formatting of the Module::Build and
+ Module::Build::Compat documentation.
+
+0.11 Fri Aug 23 18:50:46 AEST 2002
+
+ - 'module_version' and 'module_version_from' have been replaced by
+ 'dist_version' and 'dist_version_from', which is what they really
+ meant in the first place. 'dist_name' has been added.
+
+ - 'module_name' is now just a way to set 'dist_name' and
+ 'dist_version_from' in a convenient way.
+
+ - The 'name' in META.yaml is now the distribution name, not the
+ (incorrect) module name. [spotted by Graham Barr]
+
+ - Added the check_installed_status() and prereq_failures() methods
+ for checking prerequisite information with the programmatic
+ interface
+
+ - check_installed_version() now uses check_installed_status()
+ internally
+
+ - Documented the create_build_script() method, which had escaped
+ documentation.
+
+ - create_build_script() now writes prerequisite information to the
+ _build/ directory, for use by Module::Build::Compat.
+
+ - Module::Build::Compat has documentation for a safer way to write a
+ dummy Makefile.PL. [patch by Autrijus Tang]
+
+0.10 Wed Aug 7 19:36 2002
+ - Recommend YAML 0.35 instead of 0.30.
+
+ - Don't die during 'Build disttest' if YAML isn't installed. This
+ fixes tests 5-10 in runthrough.t if YAML isn't installed.
+
+ - Die if an unknown license type is used, but still default to
+ 'unknown' if no license is specified.
+
+ - Use YAML::DumpFile() if we're using a recent YAML,
+ YAML::StoreFile() otherwise.
+
+ - Show specific error messages in runthrough.t.
+
+ - Add a generated_by entry to the META.yaml file.
+
+ - Skip a few tests if YAML isn't installed.
+
+0.09 Fri Jun 28 11:07:08 EST 2002
+
+ - The 'distdir' action wasn't deleting the distribution directory
+ before building it again. This meant that, say, if you did 'Build
+ disttest' then 'Build dist', you'd end up with a blib/ directory
+ in your distribution. I actually had this happen for version
+ 0.08, and it's not nice to distribute a blib/ on CPAN.
+
+ - We now keep track of the 'base_dir', i.e. the top-level build
+ directory, so we can change back into it if we change out of it.
+ This necessitated a cwd() method, which uses the Cwd.pm module.
+ I'm aware of Cwd's limitations, particularly under taint-mode, but
+ I don't know a way around using it here.
+
+ - The 'dist_dir' action now changes back into 'base_dir' directory.
+
+ - We now do write_config() inside the create_build_script() method,
+ not inside the new() method.
+
+ - Simplified the find_version() method, and improved its error
+ messages.
+
+ - Renamed module_name_to_file() to find_module_by_name(), and added
+ a parameter specifying the directories to search in. Previously
+ we searched in 'lib' and @INC, which wasn't correct in all
+ situations.
+
+ - Patched the docs to change "Build test" to "./Build test"
+ [Elizabeth Mattijsen]
+
+0.08 Wed Jun 26 20:30:56 EST 2002
+
+ - Fixed the 'prereq' alias for the 'requires' parameter
+
+ - Added some tests in t/basic.t to test the dependency checking
+
+ - Added 'artistic' as a licensing option [Arthur Bergman]
+
+ - Fixed some bugs in requires/prereq/recommends/conflicts/build_depends
+
+ - Fixed a typo in the 'distclean' action that prevented its
+ execution [Arthur Bergman]
+
+ - Separated the linking phase of building XS items into its own
+ link_c() method. Its interface is still unstable, so it's not
+ documented yet. [suggested by Arthur Bergman]
+
+0.07 Jun 9 2002 15:46
+
+ - We now generate a 'META.yaml' metadata file during 'Build dist'.
+ This can be very useful for lots of things, none of which are
+ implemented yet.
+
+ - Added a 'dynamic_config' parameter, defaulting to false. This
+ lets distribution systems (CPAN.pm, etc.) build, test, and install
+ "easy" modules without having to execute the Build.PL at runtime.
+ It's also a guarantee that the list of dependencies is exactly
+ what is present in the metadata file, and won't be changed during
+ the build process.
+
+ - Added support for "recommended" and "build-time requirement"
+ modules, besides those that are absolutely required. Also added a
+ "conflicts" field.
+
+ - Changed the 'prereq' field to 'requires' (the old name will
+ continue to work).
+
+ - Added support for checking the installed version of perl as an
+ explicit dependency.
+
+ - Added a 'license' parameter to specify one of a fixed number of
+ licenses for the distribution.
+
+ - Fixed a bug in Module::Build::Compat that was preventing arguments
+ from being processed properly. [patch by Ilya Martynov]
+
+ - Make sure we're in the right directory when we write the cleanup
+ file, since various ExtUtils::Install errors might leave us in an
+ unknown directory. [patch by Ilya Martynov]
+
+ - Specified the 'license', 'recommends', and 'dynamic_config'
+ values in Build.PL, and changed 'prereq' to 'requires'.
+
+0.06 Apr 2 2002 17:44
+
+ - Added the Module::Build::Compat module for assisting and
+ explaining compatibility with ExtUtils::Makemaker and cohorts.
+
+ - State is now saved using Data::Dumper instead of my ad-hoc
+ mechanism, guaranteeing data integrity. Whitespace values broke
+ in the former scheme.
+
+ - Added the 'recommended' option, which works like 'prereq' but
+ isn't insistent.
+
+ - Separated the various parameters into three groups: parameters
+ that tell Module::Build what to do, Config.pm parameters, and
+ user-defined parameters for each build (the module author is the
+ 'user' here). This helps avoid conflicts between names, and it
+ was silly to have them all together. The three groups of
+ parameters are subject to the same rules for overriding: values
+ specified during a Build action take precedence over values
+ specified at 'perl Build.PL' time, which in turn take precedence
+ over values specified in the call to new().
+
+ - Improved support for .PL files. Any .PL file in the lib/
+ directory or the directory specified by 'c_source' will now get
+ properly executed. I also added a 'PL_files' parameter that you
+ can use in case the .PL doesn't create an obviously-named output
+ file.
+
+ - If a prerequisite condition is malformed, we now report a prereq
+ failure and say why. Previously we issued a warning and kept
+ going.
+
+
+0.05 10-Jan-2002 20:26
+ - Added the Module::Build->subclass() method, which makes it easier to
+ make quick-and-dirty subclasses of Module::Build.
+
+ - Reorganized the docs a bit.
+
+ - Added the 'testdb' action, and the 'debugger=1' argument to the
+ 'test' action, both of which run tests under the perl
+ debugger. (idea: Dave Rolsky)
+
+ - Added prerequisite checking (Dave Rolsky)
+
+ - Fixed an unlikely-to-occur bug with misquoted strings in the
+ 'Build' script (spot: Dave Rolsky)
+
+ - We're more careful about shush-ing warnings that
+ ExtUtils::Manifest might emit (Dave Rolsky)
+
+ - The 'help' action now auto-generates the list of actions (Dave Rolsky)
+
+ - Added the 'distcheck', 'skipcheck', 'distclean', 'distdir', and
+ 'disttest' actions (Dave Rolsky)
+
+ - We're a little more aggressive about cleaning up temporary files -
+ we'll try to clean them up even when we don't have write permission
+ on them. This isn't as dastardly as it sounds; if we /really/
+ don't have permission, we won't be able to remove them no matter
+ how hard we try.
+
+0.04 Fri Nov 16 16:55 2001
+ - Added a 'manifest' action. It's just like MakeMaker's 'make manifest', it
+ brings your MANIFEST file up to date with your distribution directory.
+
+ - Reorganized some of the responsibilities of various methods, which
+ allows modules to be built and tested programmatically.
+
+ - The 'clean' action will now clean up files that were created more
+ recently than the on-disk cleanup registry was written.
+
+ - Undefined values from Config.pm are handled correctly now.
+
+ - The dispatch() method will now accept explicit dispatch
+ parameters, for use in a programmatic setting.
+
+ - $ENV{TEST_VERBOSE} will be set in test scripts if the 'verbose=1'
+ parameter is set.
+
+ - Moved the test.pl script to t/basic.t
+
+ - Created the t/xs.t script, which tests building a module with a
+ .xs component.
+
+ - Fixed the loading of $^O-specific modules (there were no such
+ modules before).
+
+ - Added a 'darwin' platform module, which removes -flat_namespace
+ from $Config{ccflags} while building .xs modules (it's a linker
+ flag, not a compiler flag).
+
+ - Now uses $^W instead of the 'warnings' pragma, which apparently
+ provides compatibility with perl 5.005 (I've only tested it with
+ 5.6.x myself).
+
+ - If a file called C<visual.pl> exists in the top-level directory,
+ this file will be executed as a Perl script during 'Build test' and
+ its output will be shown to the user. This is a good place to put
+ speed tests or other tests that don't use the C<Test::Harness> format
+ for output.
+
+ - The 'Build install' step will now put .xs-related things in the
+ correct architecture-dependent libraries.
+
+ - Added the 'autosplit' option, even though I think autosplitting is
+ a load of hooie.
+
+0.03 Sun Nov 11 14:58 CDT 2001
+ - The 'perl Build.PL' step will now detect whether the current
+ environment is "unixish", "windowsish", etc., and load the correct
+ module (i.e. Module::Build::Platform::Unix). More specific
+ modules may also be written for particular values of $^O.
+
+ - Module::Build will now process any .xs files in the lib/
+ directory. Please let me know whether this works or not with your
+ distribution & platform. I'll be trying out various distributions
+ on my platform.
+
+ - Corrected some embarassing errors in the POD documentation. Also
+ added a long documentation section on the various build actions
+ (test, install, build, etc.) and added some neato ASCII art.
+
+ - Added a 'cleanup' mechanism - any method may call the
+ $self->add_to_cleanup(@files) method to register files which need
+ to be cleaned up during 'Build clean'.
+
+ - Added a 'Build help' action that gives a little syntax help, and
+ lists all the actions available.
+
+ - Fixed a bug in which 'blib/' wasn't properly being added to @INC
+ when running 'Build test'.
+
+ - For the 'Build dist' action, we'll use the 'tar' and 'gzip'
+ programs (as specified by Config.pm) on Unix platforms, otherwise
+ we'll use Archive::Tar and Compress::Zlib.
+
+0.02 Wed Sep 5 00:53:04 CDT 2001
+ - Added POD documentation.
+
+ - Added the 'install', 'fakeinstall', and 'dist' actions.
+
+ - new() will now determine version string based on 'module_version', or
+ 'module_version_from', or 'module_name', in that order.
+
+ - Module::Build::Base handles its file paths in a platform-independent
+ way, using the File:: modules
+
+
+0.01 Sun Aug 5 01:23:10 2001
+ - original version; created by h2xs 1.1.1.4 with options -XA -n Module::Build
+
diff -urN perl-5.10.0.orig/lib/Module/Build/Compat.pm perl-5.10.0/lib/Module/Build/Compat.pm
--- perl-5.10.0.orig/lib/Module/Build/Compat.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Compat.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
use File::Spec;
use IO::File;
@@ -11,19 +11,50 @@
use Module::Build::ModuleInfo;
use Data::Dumper;
+my %convert_installdirs = (
+ PERL => 'core',
+ SITE => 'site',
+ VENDOR => 'vendor',
+);
+
my %makefile_to_build =
(
TEST_VERBOSE => 'verbose',
VERBINST => 'verbose',
- INC => sub { map {('--extra_compiler_flags', $_)} Module::Build->split_like_shell(shift) },
- POLLUTE => sub { ('--extra_compiler_flags', '-DPERL_POLLUTE') },
- INSTALLDIRS => sub {local $_ = shift; 'installdirs=' . (/^perl$/ ? 'core' : $_) },
- LIB => sub { ('--install_path', 'lib='.shift()) },
+ INC => sub { map {(extra_compiler_flags => $_)} Module::Build->split_like_shell(shift) },
+ POLLUTE => sub { (extra_compiler_flags => '-DPERL_POLLUTE') },
+ INSTALLDIRS => sub { (installdirs => $convert_installdirs{uc shift()}) },
+ LIB => sub {
+ my $lib = shift;
+ my %config = (
+ installprivlib => $lib,
+ installsitelib => $lib,
+ installarchlib => "$lib/$Config{archname}",
+ installsitearch => "$lib/$Config{archname}"
+ );
+ return map { (config => "$_=$config{$_}") } keys %config;
+ },
+
+ # Convert INSTALLVENDORLIB and friends.
+ (
+ map {
+ my $name = "INSTALL".$_."LIB";
+ $name => sub {
+ my @ret = (config => { lc $name => shift });
+ print STDERR "# Converted to @ret\n";
+
+ return @ret;
+ }
+ } keys %convert_installdirs
+ ),
# Some names they have in common
map {$_, lc($_)} qw(DESTDIR PREFIX INSTALL_BASE UNINST),
);
+my %macro_to_build = %makefile_to_build;
+# "LIB=foo make" is not the same as "perl Makefile.PL LIB=foo"
+delete $macro_to_build{LIB};
sub create_makefile_pl {
@@ -37,6 +68,8 @@
$fh = $args{fh};
} else {
$args{file} ||= 'Makefile.PL';
+ local $build->{properties}{quiet} = 1;
+ $build->delete_filetree($args{file});
$fh = IO::File->new("> $args{file}") or die "Can't write $args{file}: $!";
}
@@ -50,7 +83,7 @@
}
# If a *bundled* custom subclass is being used, make sure we add its
- # directory to @INC.
+ # directory to @INC. Also, lib.pm always needs paths in Unix format.
my $subclass_load = '';
if (ref($build) ne "Module::Build") {
my $subclass_dir = $package->subclass_dir($build);
@@ -60,10 +93,13 @@
if ($build->dir_contains($base_dir, $subclass_dir)) {
$subclass_dir = File::Spec->abs2rel($subclass_dir, $base_dir);
+ $subclass_dir = $package->unixify_dir($subclass_dir);
$subclass_load = "use lib '$subclass_dir';";
}
+ # Otherwise, leave it the empty string
} else {
+ $subclass_dir = $package->unixify_dir($subclass_dir);
$subclass_load = "use lib '$subclass_dir';";
}
}
@@ -107,6 +143,7 @@
eval "use Module::Build::Compat 0.02; 1" or die $@;
%s
Module::Build::Compat->run_build_pl(args => \@ARGV);
+ exit(0) unless(-e 'Build'); # cpantesters convention
require %s;
Module::Build::Compat->write_makefile(build_class => '%s');
EOF
@@ -139,7 +176,7 @@
$MM_Args{EXE_FILES} = [ sort keys %{$build->script_files} ] if $build->script_files;
- $MM_Args{PL_FILES} = {};
+ $MM_Args{PL_FILES} = $build->PL_files if $build->PL_files;
local $Data::Dumper::Terse = 1;
my $args = Data::Dumper::Dumper(\%MM_Args);
@@ -161,8 +198,13 @@
|| File::Spec->catdir($build->config_dir, 'lib'));
}
+sub unixify_dir {
+ my ($self, $path) = @_;
+ return join '/', File::Spec->splitdir($path);
+}
+
sub makefile_to_build_args {
- shift;
+ my $class = shift;
my @out;
foreach my $arg (@_) {
next if $arg eq '';
@@ -171,24 +213,34 @@
die "Malformed argument '$arg'");
# Do tilde-expansion if it looks like a tilde prefixed path
- ( $val ) = glob( $val ) if $val =~ /^~/;
+ ( $val ) = Module::Build->_detildefy( $val ) if $val =~ /^~/;
if (exists $makefile_to_build{$key}) {
my $trans = $makefile_to_build{$key};
- push @out, ref($trans) ? $trans->($val) : ("--$trans", $val);
+ push @out, $class->_argvify( ref($trans) ? $trans->($val) : ($trans => $val) );
} elsif (exists $Config{lc($key)}) {
- push @out, '--config', lc($key) . "=$val";
+ push @out, $class->_argvify( config => lc($key) . "=$val" );
} else {
# Assume M::B can handle it in lowercase form
- push @out, "--\L$key", $val;
+ push @out, $class->_argvify("\L$key" => $val);
}
}
return @out;
}
+sub _argvify {
+ my ($self, @pairs) = @_;
+ my @out;
+ while (@pairs) {
+ my ($k, $v) = splice @pairs, 0, 2;
+ push @out, ("--$k", $v);
+ }
+ return @out;
+}
+
sub makefile_to_build_macros {
my @out;
- while (my ($macro, $trans) = each %makefile_to_build) {
+ while (my ($macro, $trans) = each %macro_to_build) {
# On some platforms (e.g. Cygwin with 'make'), the mere presence
# of "EXPORT: FOO" in the Makefile will make $ENV{FOO} defined.
# Therefore we check length() too.
@@ -216,18 +268,26 @@
my $class = $args{build_class};
my $perl = $class->find_perl_interpreter;
+
+ # VMS MMS/MMK need to use MCR to run the Perl image.
+ $perl = 'MCR ' . $perl if $self->_is_vms_mms;
+
my $noop = ($class->is_windowsish ? 'rem>nul' :
- $class->is_vmsish ? 'Continue' :
+ $self->_is_vms_mms ? 'Continue' :
'true');
- my $Build = 'Build --makefile_env_macros 1';
- # Start with a couple special actions
+ my $filetype = $class->is_vmsish ? '.COM' : '';
+
+ my $Build = 'Build' . $filetype . ' --makefile_env_macros 1';
+ my $unlink = $class->oneliner('1 while unlink $ARGV[0]', [], [$args{makefile}]);
+ $unlink =~ s/\$/\$\$/g;
+
my $maketext = <<"EOF";
all : force_do_it
$perl $Build
realclean : force_do_it
$perl $Build realclean
- $perl -e unlink -e shift $args{makefile}
+ $unlink
force_do_it :
@ $noop
@@ -241,7 +301,17 @@
EOF
}
- $maketext .= "\n.EXPORT : " . join(' ', keys %makefile_to_build) . "\n\n";
+ if ($self->_is_vms_mms) {
+ # Roll our own .EXPORT as MMS/MMK don't honor that directive.
+ $maketext .= "\n.FIRST\n\t\@ $noop\n";
+ for my $macro (keys %macro_to_build) {
+ $maketext .= ".IFDEF $macro\n\tDEFINE $macro \"\$($macro)\"\n.ENDIF\n";
+ }
+ $maketext .= "\n";
+ }
+ else {
+ $maketext .= "\n.EXPORT : " . join(' ', keys %macro_to_build) . "\n\n";
+ }
return $maketext;
}
@@ -267,13 +337,24 @@
sub write_makefile {
my ($pack, %in) = @_;
- $in{makefile} ||= 'Makefile';
+
+ unless (exists $in{build_class}) {
+ warn "Unknown 'build_class', defaulting to 'Module::Build'\n";
+ $in{build_class} = 'Module::Build';
+ }
+ my $class = $in{build_class};
+ $in{makefile} ||= $pack->_is_vms_mms ? 'Descrip.MMS' : 'Makefile';
+
open MAKE, "> $in{makefile}" or die "Cannot write $in{makefile}: $!";
print MAKE $pack->fake_prereqs;
print MAKE $pack->fake_makefile(%in);
close MAKE;
}
+sub _is_vms_mms {
+ return Module::Build->is_vmsish && ($Config{make} =~ m/MM[SK]/i);
+}
+
1;
__END__
diff -urN perl-5.10.0.orig/lib/Module/Build/Config.pm perl-5.10.0/lib/Module/Build/Config.pm
--- perl-5.10.0.orig/lib/Module/Build/Config.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Config.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Config;
diff -urN perl-5.10.0.orig/lib/Module/Build/Cookbook.pm perl-5.10.0/lib/Module/Build/Cookbook.pm
--- perl-5.10.0.orig/lib/Module/Build/Cookbook.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Cookbook.pm 2009-03-10 16:49:12.000000000 +0100
@@ -1,4 +1,7 @@
package Module::Build::Cookbook;
+use strict;
+use vars qw($VERSION);
+$VERSION = '0.32';
=head1 NAME
@@ -245,7 +248,7 @@
# Process pod files first
my @e = @{$build->build_elements};
- my $i = grep {$e[$_] eq 'pod'} 0..$#e;
+ my ($i) = grep {$e[$_] eq 'pod'} 0..$#e;
unshift @e, splice @e, $i, 1;
Currently, C<build_elements> has the following default value:
@@ -392,7 +395,7 @@
I'm sure I could not have handled this complexity with EU::MM, but it
was very easy to do with M::B.
-=back 4
+=back
=head2 Modifying an action
@@ -428,6 +431,84 @@
)->create_build_script;
+=head2 Adding an action
+
+You can add a new C<./Build> action simply by writing the method for
+it in your subclass. Use C<depends_on> to declare that another action
+must have been run before your action.
+
+For example, let's say you wanted to be able to write C<./Build
+commit> to test your code and commit it to Subversion.
+
+ # Build.PL
+ use Module::Build;
+ my $class = Module::Build->subclass(
+ class => "Module::Build::Custom",
+ code => <<'SUBCLASS' );
+
+ sub ACTION_commit {
+ my $self = shift;
+
+ $self->depends_on("test");
+ $self->do_system(qw(svn commit));
+ }
+ SUBCLASS
+
+
+=head2 Bundling Module::Build
+
+Note: This section probably needs an update as the technology improves
+(see scripts/bundle.pl in the distribution).
+
+Suppose you want to use some new-ish features of Module::Build,
+e.g. newer than the version of Module::Build your users are likely to
+already have installed on their systems. The first thing you should
+do is set C<configure_requires> to your minimum version of
+Module::Build. See L<Module::Build::Authoring>.
+
+But not every build system honors C<configure_requires> yet. Here's
+how you can ship a copy of Module::Build, but still use a newer
+installed version to take advantage of any bug fixes and upgrades.
+
+First, install Module::Build into F<Your-Project/inc/Module-Build>.
+CPAN will not index anything in the F<inc> directory so this copy will
+not show up in CPAN searches.
+
+ cd Module-Build
+ perl Build.PL --install_base /path/to/Your-Project/inc/Module-Build
+ ./Build test
+ ./Build install
+
+You should now have all the Module::Build .pm files in
+F<Your-Project/inc/Module-Build/lib/perl5>.
+
+Next, add this to the top of your F<Build.PL>.
+
+ my $Bundled_MB = 0.30; # or whatever version it was.
+
+ # Find out what version of Module::Build is installed or fail quietly.
+ # This should be cross-platform.
+ my $Installed_MB =
+ `$^X -e "eval q{require Module::Build; print Module::Build->VERSION} or exit 1";
+
+ # some operating systems put a newline at the end of every print.
+ chomp $Installed_MB;
+
+ $Installed_MB = 0 if $?;
+
+ # Use our bundled copy of Module::Build if it's newer than the installed.
+ unshift @INC, "inc/Module-Build/lib/perl5" if $Bundled_MB > $Installed_MB;
+
+ require Module::Build;
+
+And write the rest of your F<Build.PL> normally. Module::Build will
+remember your change to C<@INC> and use it when you run F<./Build>.
+
+In the future, we hope to provide a more automated solution for this
+scenario; see C<inc/latest.pm> in the Module::Build distribution for
+one indication of the direction we're moving.
+
+
=head1 AUTHOR
Ken Williams <kwilliams@cpan.org>
@@ -435,7 +516,7 @@
=head1 COPYRIGHT
-Copyright (c) 2001-2006 Ken Williams. All rights reserved.
+Copyright (c) 2001-2008 Ken Williams. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
diff -urN perl-5.10.0.orig/lib/Module/Build/Dumper.pm perl-5.10.0/lib/Module/Build/Dumper.pm
--- perl-5.10.0.orig/lib/Module/Build/Dumper.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Dumper.pm 2009-03-10 16:49:12.000000000 +0100
@@ -1,4 +1,7 @@
package Module::Build::Dumper;
+use strict;
+use vars qw($VERSION);
+$VERSION = '0.32';
# This is just a split-out of a wrapper function to do Data::Dumper
# stuff "the right way". See:
@@ -9,7 +12,7 @@
sub _data_dump {
my ($self, $data) = @_;
return ("do{ my "
- . Data::Dumper->new([$data],['x'])->Purity(1)->Dump()
+ . Data::Dumper->new([$data],['x'])->Purity(1)->Terse(0)->Dump()
. '$x; }')
}
diff -urN perl-5.10.0.orig/lib/Module/Build/ModuleInfo.pm perl-5.10.0/lib/Module/Build/ModuleInfo.pm
--- perl-5.10.0.orig/lib/Module/Build/ModuleInfo.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/ModuleInfo.pm 2009-03-10 16:49:12.000000000 +0100
@@ -1,3 +1,5 @@
+# -*- mode: cperl; tab-width: 8; indent-tabs-mode: nil; basic-offset: 2 -*-
+# vim:ts=8:sw=2:et:sta:sts=2
package Module::Build::ModuleInfo;
# This module provides routines to gather information about
@@ -6,7 +8,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use File::Spec;
@@ -14,16 +16,16 @@
use Module::Build::Version;
-my $PKG_REGEXP = qr/ # match a package declaration
+my $PKG_REGEXP = qr{ # match a package declaration
^[\s\{;]* # intro chars on a line
package # the word 'package'
\s+ # whitespace
([\w:]+) # a package name
\s* # optional whitespace
; # semicolon line terminator
-/x;
+}x;
-my $VARNAME_REGEXP = qr/ # match fully-qualified VERSION name
+my $VARNAME_REGEXP = qr{ # match fully-qualified VERSION name
([\$*]) # sigil - $ or *
(
( # optional leading package name
@@ -32,9 +34,9 @@
)?
VERSION
)\b
-/x;
+}x;
-my $VERS_REGEXP = qr/ # match a VERSION definition
+my $VERS_REGEXP = qr{ # match a VERSION definition
(?:
\(\s*$VARNAME_REGEXP\s*\) # with parens
|
@@ -42,43 +44,45 @@
)
\s*
=[^=~] # = but not ==, nor =~
-/x;
+}x;
sub new_from_file {
- my $package = shift;
+ my $class = shift;
my $filename = File::Spec->rel2abs( shift );
+
return undef unless defined( $filename ) && -f $filename;
- return $package->_init( undef, $filename, @_ );
+ return $class->_init(undef, $filename, @_);
}
sub new_from_module {
- my $package = shift;
+ my $class = shift;
my $module = shift;
my %props = @_;
+
$props{inc} ||= \@INC;
- my $filename = $package->find_module_by_name( $module, $props{inc} );
+ my $filename = $class->find_module_by_name( $module, $props{inc} );
return undef unless defined( $filename ) && -f $filename;
- return $package->_init( $module, $filename, %props );
+ return $class->_init($module, $filename, %props);
}
sub _init {
- my $package = shift;
+ my $class = shift;
my $module = shift;
my $filename = shift;
-
my %props = @_;
+
my( %valid_props, @valid_props );
@valid_props = qw( collect_pod inc );
@valid_props{@valid_props} = delete( @props{@valid_props} );
warn "Unknown properties: @{[keys %props]}\n" if scalar( %props );
my %data = (
- module => $module,
- filename => $filename,
- version => undef,
- packages => [],
- versions => {},
+ module => $module,
+ filename => $filename,
+ version => undef,
+ packages => [],
+ versions => {},
pod => {},
pod_headings => [],
collect_pod => 0,
@@ -86,20 +90,22 @@
%valid_props,
);
- my $self = bless( \%data, $package );
+ my $self = bless(\%data, $class);
$self->_parse_file();
- unless ( $self->{module} && length( $self->{module} ) ) {
- my( $v, $d, $f ) = File::Spec->splitpath( $self->{filename} );
- if ( $f =~ /\.pm$/ ) {
+ unless($self->{module} and length($self->{module})) {
+ my ($v, $d, $f) = File::Spec->splitpath($self->{filename});
+ if($f =~ /\.pm$/) {
$f =~ s/\..+$//;
my @candidates = grep /$f$/, @{$self->{packages}};
- $self->{module} = shift( @candidates ); # punt
- } else {
- if ( grep /main/, @{$self->{packages}} ) {
- $self->{module} = 'main';
- } else {
+ $self->{module} = shift(@candidates); # punt
+ }
+ else {
+ if(grep /main/, @{$self->{packages}}) {
+ $self->{module} = 'main';
+ }
+ else {
$self->{module} = $self->{packages}[0] || '';
}
}
@@ -113,7 +119,7 @@
# class method
sub _do_find_module {
- my $package = shift;
+ my $class = shift;
my $module = shift || die 'find_module_by_name() requires a package name';
my $dirs = shift || \@INC;
@@ -179,6 +185,7 @@
my $pod_data = '';
while (defined( my $line = <$fh> )) {
+ my $line_num = $.;
chomp( $line );
next if $line =~ /^\s*#/;
@@ -233,7 +240,7 @@
# that we should watch out for...)
warn <<"EOM" unless $line =~ /=\s*eval/;
Package '$vers_pkg' already declared with version '$vers{$vers_pkg}',
-ignoring subsequent declaration.
+ignoring subsequent declaration on line $line_num.
EOM
}
@@ -263,7 +270,7 @@
} else {
warn <<"EOM";
Package '$pkg' already declared with version '$vers{$pkg}'
-ignoring new version '$v'.
+ignoring new version '$v' on line $line_num.
EOM
}
@@ -283,6 +290,8 @@
$self->{pod_headings} = \@pod;
}
+{
+my $pn = 0;
sub _evaluate_version_line {
my $self = shift;
my( $sigil, $var, $line ) = @_;
@@ -292,8 +301,10 @@
# We compile into $vsub because 'use version' would cause
# compiletime/runtime issues with local()
my $vsub;
+ $pn++; # everybody gets their own package
my $eval = qq{BEGIN { q# Hide from _packages_inside()
- #; package Module::Build::ModuleInfo::_version;
+ #; package Module::Build::ModuleInfo::_version::p$pn;
+ use Module::Build::Version;
no strict;
local $sigil$var;
@@ -311,13 +322,16 @@
if $@;
(ref($vsub) eq 'CODE') or
die "failed to build version sub for $self->{filename}";
- my $result = $vsub->();
+ my $result = eval { $vsub->() };
+
+ die "Could not get version from $self->{filename} by executing:\n$eval\n\nThe fatal error was: $@\n" if $@;
# Bless it into our own version class
$result = Module::Build::Version->new($result);
return $result;
}
+}
############################################################
diff -urN perl-5.10.0.orig/lib/Module/Build/Notes.pm perl-5.10.0/lib/Module/Build/Notes.pm
--- perl-5.10.0.orig/lib/Module/Build/Notes.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Notes.pm 2009-03-10 16:49:12.000000000 +0100
@@ -4,7 +4,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Data::Dumper;
use IO::File;
diff -urN perl-5.10.0.orig/lib/Module/Build/PPMMaker.pm perl-5.10.0/lib/Module/Build/PPMMaker.pm
--- perl-5.10.0.orig/lib/Module/Build/PPMMaker.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/PPMMaker.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
# This code is mostly borrowed from ExtUtils::MM_Unix 6.10_03, with a
diff -urN perl-5.10.0.orig/lib/Module/Build/Platform/Amiga.pm perl-5.10.0/lib/Module/Build/Platform/Amiga.pm
--- perl-5.10.0.orig/lib/Module/Build/Platform/Amiga.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Platform/Amiga.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Module::Build::Base;
diff -urN perl-5.10.0.orig/lib/Module/Build/Platform/Default.pm perl-5.10.0/lib/Module/Build/Platform/Default.pm
--- perl-5.10.0.orig/lib/Module/Build/Platform/Default.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Platform/Default.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Module::Build::Base;
diff -urN perl-5.10.0.orig/lib/Module/Build/Platform/EBCDIC.pm perl-5.10.0/lib/Module/Build/Platform/EBCDIC.pm
--- perl-5.10.0.orig/lib/Module/Build/Platform/EBCDIC.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Platform/EBCDIC.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Module::Build::Base;
diff -urN perl-5.10.0.orig/lib/Module/Build/Platform/MPEiX.pm perl-5.10.0/lib/Module/Build/Platform/MPEiX.pm
--- perl-5.10.0.orig/lib/Module/Build/Platform/MPEiX.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Platform/MPEiX.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Module::Build::Base;
diff -urN perl-5.10.0.orig/lib/Module/Build/Platform/MacOS.pm perl-5.10.0/lib/Module/Build/Platform/MacOS.pm
--- perl-5.10.0.orig/lib/Module/Build/Platform/MacOS.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Platform/MacOS.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Module::Build::Base;
use vars qw(@ISA);
diff -urN perl-5.10.0.orig/lib/Module/Build/Platform/RiscOS.pm perl-5.10.0/lib/Module/Build/Platform/RiscOS.pm
--- perl-5.10.0.orig/lib/Module/Build/Platform/RiscOS.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Platform/RiscOS.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Module::Build::Base;
diff -urN perl-5.10.0.orig/lib/Module/Build/Platform/Unix.pm perl-5.10.0/lib/Module/Build/Platform/Unix.pm
--- perl-5.10.0.orig/lib/Module/Build/Platform/Unix.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Platform/Unix.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Module::Build::Base;
@@ -44,10 +44,10 @@
sub _detildefy {
my ($self, $value) = @_;
- $value =~ s[^~(\w*)(?=/|$)] # tilde with optional username
+ $value =~ s[^~(\w[-\w]*)?(?=/|$)] # tilde with optional username
[$1 ?
((getpwnam $1)[7] || "~$1") :
- (getpwuid $>)[7]
+ ($ENV{HOME} || (getpwuid $>)[7])
]ex;
return $value;
}
diff -urN perl-5.10.0.orig/lib/Module/Build/Platform/VMS.pm perl-5.10.0/lib/Module/Build/Platform/VMS.pm
--- perl-5.10.0.orig/lib/Module/Build/Platform/VMS.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Platform/VMS.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Module::Build::Base;
@@ -136,10 +136,15 @@
? 1
: 0;
- map { $_ = q(").$_.q(") if !/^\"/ && length($_) > 0 }
- ($got_arrayref ? @{$args[0]}
- : @args
- );
+ # Do not quote qualifiers that begin with '/'.
+ map { if (!/^\//) {
+ $_ =~ s/\"/""/g; # escape C<"> by doubling
+ $_ = q(").$_.q(");
+ }
+ }
+ ($got_arrayref ? @{$args[0]}
+ : @args
+ );
return $got_arrayref ? $args[0]
: join(' ', @args);
@@ -357,6 +362,29 @@
sub find_perl_interpreter { return $^X; }
+=item localize_file_path
+
+Convert the file path to the local syntax
+
+=cut
+
+sub localize_file_path {
+ my ($self, $path) = @_;
+ $path =~ s/\.\z//;
+ return VMS::Filespec::vmsify($path);
+}
+
+=item localize_dir_path
+
+Convert the directory path to the local syntax
+
+=cut
+
+sub localize_dir_path {
+ my ($self, $path) = @_;
+ return VMS::Filespec::vmspath($path);
+}
+
=back
=head1 AUTHOR
diff -urN perl-5.10.0.orig/lib/Module/Build/Platform/VOS.pm perl-5.10.0/lib/Module/Build/Platform/VOS.pm
--- perl-5.10.0.orig/lib/Module/Build/Platform/VOS.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Platform/VOS.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Module::Build::Base;
diff -urN perl-5.10.0.orig/lib/Module/Build/Platform/Windows.pm perl-5.10.0/lib/Module/Build/Platform/Windows.pm
--- perl-5.10.0.orig/lib/Module/Build/Platform/Windows.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Platform/Windows.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Config;
@@ -175,6 +175,29 @@
}
+sub _quote_args {
+ # Returns a string that can become [part of] a command line with
+ # proper quoting so that the subprocess sees this same list of args.
+ my ($self, @args) = @_;
+
+ my @quoted;
+
+ for (@args) {
+ if ( /^[^\s*?!\$<>;|'"\[\]\{\}]+$/ ) {
+ # Looks pretty safe
+ push @quoted, $_;
+ } else {
+ # XXX this will obviously have to improve - is there already a
+ # core module lying around that does proper quoting?
+ s/"/\\"/g;
+ push @quoted, qq("$_");
+ }
+ }
+
+ return join " ", @quoted;
+}
+
+
sub split_like_shell {
# As it turns out, Windows command-parsing is very different from
# Unix command-parsing. Double-quotes mean different things,
@@ -233,6 +256,23 @@
return @argv;
}
+
+# system(@cmd) does not like having double-quotes in it on Windows.
+# So we quote them and run it as a single command.
+sub do_system {
+ my ($self, @cmd) = @_;
+
+ my $cmd = $self->_quote_args(@cmd);
+ my $status = system($cmd);
+ if ($status and $! =~ /Argument list too long/i) {
+ my $env_entries = '';
+ foreach (sort keys %ENV) { $env_entries .= "$_=>".length($ENV{$_})."; " }
+ warn "'Argument list' was 'too long', env lengths are $env_entries";
+ }
+ return !$status;
+}
+
+
1;
__END__
diff -urN perl-5.10.0.orig/lib/Module/Build/Platform/aix.pm perl-5.10.0/lib/Module/Build/Platform/aix.pm
--- perl-5.10.0.orig/lib/Module/Build/Platform/aix.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Platform/aix.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Module::Build::Platform::Unix;
diff -urN perl-5.10.0.orig/lib/Module/Build/Platform/cygwin.pm perl-5.10.0/lib/Module/Build/Platform/cygwin.pm
--- perl-5.10.0.orig/lib/Module/Build/Platform/cygwin.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Platform/cygwin.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Module::Build::Platform::Unix;
diff -urN perl-5.10.0.orig/lib/Module/Build/Platform/darwin.pm perl-5.10.0/lib/Module/Build/Platform/darwin.pm
--- perl-5.10.0.orig/lib/Module/Build/Platform/darwin.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Platform/darwin.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Module::Build::Platform::Unix;
diff -urN perl-5.10.0.orig/lib/Module/Build/Platform/os2.pm perl-5.10.0/lib/Module/Build/Platform/os2.pm
--- perl-5.10.0.orig/lib/Module/Build/Platform/os2.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Platform/os2.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use Module::Build::Platform::Unix;
diff -urN perl-5.10.0.orig/lib/Module/Build/PodParser.pm perl-5.10.0/lib/Module/Build/PodParser.pm
--- perl-5.10.0.orig/lib/Module/Build/PodParser.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/PodParser.pm 2009-03-10 16:49:12.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
use vars qw(@ISA);
diff -urN perl-5.10.0.orig/lib/Module/Build/Version.pm perl-5.10.0/lib/Module/Build/Version.pm
--- perl-5.10.0.orig/lib/Module/Build/Version.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/Version.pm 2009-03-10 16:45:37.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = 0.7203;
+$VERSION = 0.74;
eval "use version $VERSION";
if ($@) { # can't locate version files, use our own
@@ -69,13 +69,12 @@
1;
# replace everything from here to the end with the current version/vpp.pm
-
package version::vpp;
use strict;
use locale;
use vars qw ($VERSION @ISA @REGEXS);
-$VERSION = 0.7203;
+$VERSION = 0.76;
push @REGEXS, qr/
^v? # optional leading 'v'
@@ -93,6 +92,17 @@
'nomethod' => \&vnoop,
);
+my $VERSION_MAX = 0x7FFFFFFF;
+
+eval "use warnings";
+if ($@) {
+ eval '
+ package warnings;
+ sub enabled {return $^W;}
+ 1;
+ ';
+}
+
sub new
{
my ($class, $value) = @_;
@@ -145,6 +155,7 @@
my $alpha = 0;
my $width = 3;
my $saw_period = 0;
+ my $vinf = 0;
my ($start, $last, $pos, $s);
$s = 0;
@@ -163,9 +174,8 @@
while ( substr($value,$pos,1) =~ /[._\d]/ ) {
if ( substr($value,$pos,1) eq '.' ) {
if ($alpha) {
- require Carp;
Carp::croak("Invalid version format ".
- "(underscores before decimal)");
+ "(underscores before decimal)");
}
$saw_period++;
$last = $pos;
@@ -174,7 +184,7 @@
if ($alpha) {
require Carp;
Carp::croak("Invalid version format ".
- "(multiple underscores)");
+ "(multiple underscores)");
}
$alpha = 1;
$width = $pos - $last - 1; # natural width of sub-version
@@ -184,18 +194,21 @@
if ( $alpha && !$saw_period ) {
require Carp;
- Carp::croak("Invalid version format (alpha without decimal)");
+ Carp::croak("Invalid version format ".
+ "(alpha without decimal)");
}
if ( $alpha && $saw_period && $width == 0 ) {
require Carp;
- Carp::croak("Invalid version format (misplaced _ in number)");
+ Carp::croak("Invalid version format ".
+ "(misplaced _ in number)");
}
if ( $saw_period > 1 ) {
$qv = 1; # force quoted version processing
}
+ $last = $pos;
$pos = $s;
if ( $qv ) {
@@ -235,9 +248,14 @@
$orev = $rev;
$rev += substr($value,$s,1) * $mult;
$mult /= 10;
- if ( abs($orev) > abs($rev) ) {
- require Carp;
- Carp::croak("Integer overflow in version");
+ if ( abs($orev) > abs($rev)
+ || abs($rev) > abs($VERSION_MAX) ) {
+ if ( warnings::enabled("overflow") ) {
+ require Carp;
+ Carp::carp("Integer overflow in version");
+ }
+ $s = $end - 1;
+ $rev = $VERSION_MAX;
}
$s++;
if ( substr($value,$s,1) eq '_' ) {
@@ -250,9 +268,14 @@
$orev = $rev;
$rev += substr($value,$end,1) * $mult;
$mult *= 10;
- if ( abs($orev) > abs($rev) ) {
- require Carp;
- Carp::croak("Integer overflow in version");
+ if ( abs($orev) > abs($rev)
+ || abs($rev) > abs($VERSION_MAX) ) {
+ if ( warnings::enabled("overflow") ) {
+ require Carp;
+ Carp::carp("Integer overflow in version");
+ }
+ $end = $s - 1;
+ $rev = $VERSION_MAX;
}
}
}
@@ -300,12 +323,21 @@
}
if ( substr($value,$pos) ) { # any remaining text
- warn "Version string '$value' contains invalid data; ".
- "ignoring: '".substr($value,$pos)."'";
+ if ( warnings::enabled("misc") ) {
+ require Carp;
+ Carp::carp("Version string '$value' contains invalid data; ".
+ "ignoring: '".substr($value,$pos)."'");
+ }
}
# cache the original value for use when stringification
- $self->{original} = substr($value,0,$pos);
+ if ( $vinf ) {
+ $self->{vinf} = 1;
+ $self->{original} = 'v.Inf';
+ }
+ else {
+ $self->{original} = substr($value,0,$pos);
+ }
return ($self);
}
@@ -394,7 +426,11 @@
require Carp;
Carp::croak("Invalid version object");
}
- return $self->{original};
+ return exists $self->{original}
+ ? $self->{original}
+ : exists $self->{qv}
+ ? $self->normal
+ : $self->numify;
}
sub vcmp
@@ -525,7 +561,8 @@
# Thanks to Yitzchak Scott-Thoennes for this mode of operation
{
local $^W;
- *UNIVERSAL::VERSION = sub {
+ *UNIVERSAL::VERSION # Module::Build::ModuleInfo doesn't see this now
+ = sub {
my ($obj, $req) = @_;
my $class = ref($obj) || $obj;
diff -urN perl-5.10.0.orig/lib/Module/Build/scripts/bundle.pl perl-5.10.0/lib/Module/Build/scripts/bundle.pl
--- perl-5.10.0.orig/lib/Module/Build/scripts/bundle.pl 1970-01-01 01:00:00.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/scripts/bundle.pl 2009-03-10 16:45:37.000000000 +0100
@@ -0,0 +1,53 @@
+#!/usr/bin/perl
+
+# this is just a first crack and it uses File::Fu because I'm lazy.
+
+=head1 using
+
+This installs from a fresh Module::Build to your inc/inc_Module-Build
+directory. Use it from within your dist:
+
+ perl /path/to/Module-Build/scripts/bundle.pl
+
+You still need to manually add the following to your Build.PL
+
+ use lib 'inc';
+ use latest 'Module::Build';
+
+You also need to regen your manifest.
+
+ perl Build.PL
+ ./Build distmeta; >MANIFEST; ./Build manifest; svn diff MANIFEST
+
+=cut
+
+use warnings;
+use strict;
+
+use File::Fu;
+use File::Copy ();
+
+my $inc_dir = shift(@ARGV);
+$inc_dir = File::Fu->dir($inc_dir || 'inc/inc_Module-Build');
+$inc_dir->create unless($inc_dir->e);
+$inc_dir = $inc_dir->absolutely;
+
+
+my $mb_dir = File::Fu->program_dir->dirname;
+
+$mb_dir->chdir_for(sub {
+ my $temp = File::Fu->temp_dir('mb_bundle');
+ local @INC = @INC;
+ unshift(@INC, 'lib', 'inc');
+ require Module::Build;
+ my $builder = Module::Build->new_from_context;
+ $builder->dispatch(install =>
+ install_base => $temp,
+ install_path => {lib => $inc_dir},
+ );
+});
+
+my $latest = $mb_dir/'inc'+'latest.pm';
+File::Copy::copy($latest, 'inc');
+
+# vim:ts=2:sw=2:et:sta
diff -urN perl-5.10.0.orig/lib/Module/Build/t/add_property.t perl-5.10.0/lib/Module/Build/t/add_property.t
--- perl-5.10.0.orig/lib/Module/Build/t/add_property.t 1970-01-01 01:00:00.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/add_property.t 2009-03-10 16:45:37.000000000 +0100
@@ -0,0 +1,93 @@
+#!/usr/bin/perl -w
+
+use strict;
+use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
+use MBTest tests => 29;
+#use MBTest 'no_plan';
+use DistGen;
+
+BEGIN { use_ok 'Module::Build' or die; }
+ensure_blib 'Module::Build';
+
+my $tmp = MBTest->tmpdir;
+my $dist = DistGen->new( dir => $tmp );
+$dist->regen;
+$dist->chdir_in;
+
+ADDPROP: {
+ package My::Build::Prop;
+ use base 'Module::Build';
+ __PACKAGE__->add_property( 'foo' );
+ __PACKAGE__->add_property( 'bar', 'howdy' );
+ __PACKAGE__->add_property( 'baz', default => 'howdy' );
+ __PACKAGE__->add_property( 'code', default => sub { 'yay' } );
+ __PACKAGE__->add_property(
+ 'check',
+ default => sub { 'howdy' },
+ check => sub {
+ return 1 if $_ eq 'howdy';
+ shift->property_error(qq{"$_" is invalid});
+ return 0;
+ },
+ );
+ __PACKAGE__->add_property(
+ 'hash',
+ default => { foo => 1 },
+ check => sub {
+ return 1 if !defined $_ or exists $_->{foo};
+ shift->property_error(qq{hash is invalid});
+ return 0;
+ },
+ );
+}
+
+ok my $build = My::Build::Prop->new(
+ 'module_name' => 'Simple',
+ quiet => 1,
+), 'Create new build object';
+
+is $build->foo, undef, 'Property "foo" should be undef';
+ok $build->foo(42), 'Set "foo"';
+is $build->foo, 42, 'Now "foo" should have new value';
+
+is $build->bar, 'howdy', 'Property "bar" should be its default';
+ok $build->bar('yo'), 'Set "bar"';
+is $build->bar, 'yo', 'Now "bar" should have new value';
+
+is $build->check, 'howdy', 'Property "check" should be its default';
+
+eval { $build->check('yo') };
+ok my $err = $@, 'Should get an error for an invalid value';
+like $err, qr/^ERROR: "yo" is invalid/, 'It should be the correct error';
+
+is $build->code, 'yay', 'Property "code" should have its code value';
+
+is_deeply $build->hash, { foo => 1 }, 'Property "hash" should be default';
+is $build->hash('foo'), 1, 'Should be able to get key in hash';
+ok $build->hash( bar => 3 ), 'Add a key to the hash prop';
+is_deeply $build->hash, { foo => 1, bar => 3 }, 'New key should be in hash';
+
+eval { $build->hash({ bar => 3 }) };
+ok $err = $@, 'Should get exception for assigning invalid hash';
+like $err, qr/^ERROR: hash is invalid/, 'It should be the correct error';
+
+eval { $build->hash( []) };
+ok $err = $@, 'Should get exception for assigning an array for a hash';
+like $err, qr/^Unexpected arguments for property 'hash'/,
+ 'It should be the proper error';
+is $build->hash(undef), undef, 'Should be able to set hash to undef';
+
+# Check core properties.
+is $build->installdirs, 'site', 'Property "installdirs" should be default';
+ok $build->installdirs('core'), 'Set "installdirst" to "core"';
+is $build->installdirs, 'core', 'Now "installdirs" should be "core"';
+
+eval { $build->installdirs('perl') };
+ok $err = $@, 'Should have caught exception setting "installdirs" to "perl"';
+like $err, qr/^ERROR: Perhaps you meant installdirs to be "core" rather than "perl"\?/,
+ 'And it should suggest "core" in the error message';
+
+eval { $build->installdirs('foo') };
+ok $err = $@, 'Should catch exception for invalid "installdirs" value';
+like $err, qr/ERROR: installdirs must be one of "core", "site", or "vendor"/,
+ 'And it should suggest the proper values in the error message';
diff -urN perl-5.10.0.orig/lib/Module/Build/t/basic.t perl-5.10.0/lib/Module/Build/t/basic.t
--- perl-5.10.0.orig/lib/Module/Build/t/basic.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/basic.t 2009-03-10 16:45:37.000000000 +0100
@@ -4,27 +4,20 @@
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
use MBTest tests => 52;
-use Cwd ();
-my $cwd = Cwd::cwd;
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
+
my $tmp = MBTest->tmpdir;
use DistGen;
my $dist = DistGen->new( dir => $tmp );
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
#########################
-use_ok 'Module::Build';
-
-SKIP: {
- skip "no blib in core", 1 if $ENV{PERL_CORE};
- like $INC{'Module/Build.pm'}, qr/\bblib\b/, "Make sure Module::Build was loaded from blib/";
-}
-
-
# Test object creation
{
my $mb = Module::Build->new( module_name => $dist->name );
@@ -112,7 +105,7 @@
$mb->add_to_cleanup('save_out');
# Use uc() so we don't confuse the current test output
like uc(stdout_of( sub {$mb->dispatch('test', verbose => 1)} )), qr/^OK \d/m;
- like uc(stdout_of( sub {$mb->dispatch('test', verbose => 0)} )), qr/\.\.OK/;
+ like uc(stdout_of( sub {$mb->dispatch('test', verbose => 0)} )), qr/\.\. ?OK/;
$mb->dispatch('realclean');
$dist->clean;
@@ -170,11 +163,10 @@
is $args{foo}, 1;
# revert test distribution to pristine state because we modified a file
- chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
$dist = DistGen->new( dir => $tmp );
$dist->regen;
- chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+ $dist->chdir_in;
}
# Test author stuff
@@ -213,8 +205,4 @@
# cleanup
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
diff -urN perl-5.10.0.orig/lib/Module/Build/t/bundled/Tie/CPHash.pm perl-5.10.0/lib/Module/Build/t/bundled/Tie/CPHash.pm
--- perl-5.10.0.orig/lib/Module/Build/t/bundled/Tie/CPHash.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/bundled/Tie/CPHash.pm 2009-03-10 16:45:37.000000000 +0100
@@ -5,7 +5,7 @@
#
# Author: Christopher J. Madsen <cjm@pobox.com>
# Created: 08 Nov 1997
-# $Revision: 5841 $ $Date: 2006-03-21 07:27:29 -0600 (Tue, 21 Mar 2006) $
+# $Revision: 5841 $ $Date: 2006-03-21 05:27:29 -0800 (Tue, 21 Mar 2006) $
#
# This program is free software; you can redistribute it and/or modify
# it under the same terms as Perl itself.
diff -urN perl-5.10.0.orig/lib/Module/Build/t/compat/exit.t perl-5.10.0/lib/Module/Build/t/compat/exit.t
--- perl-5.10.0.orig/lib/Module/Build/t/compat/exit.t 1970-01-01 01:00:00.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/compat/exit.t 2009-03-10 16:50:35.000000000 +0100
@@ -0,0 +1,52 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
+use MBTest tests => 5;
+
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
+
+#########################
+
+my $tmp = MBTest->tmpdir;
+
+# Create test distribution; set requires and build_requires
+use DistGen;
+my $dist = DistGen->new( dir => $tmp );
+
+$dist->regen;
+
+$dist->chdir_in;
+
+#########################
+
+my $mb; stdout_of(sub{ $mb = Module::Build->new_from_context});
+
+use Module::Build::Compat;
+
+$dist->regen;
+
+Module::Build::Compat->create_makefile_pl('passthrough', $mb);
+
+# as silly as all of this exit(0) business is, that is what the cpan
+# testers have instructed everybody to do so...
+$dist->change_file('Build.PL' =>
+ "warn qq(you have no libthbbt\n); exit;\n" . $dist->get_file('Build.PL')
+);
+
+$dist->regen;
+
+stdout_of(sub{ $mb->ACTION_realclean });
+
+my $result;
+my ($stdout, $stderr ) = stdout_stderr_of (sub {
+ $result = $mb->run_perl_script('Makefile.PL');
+});
+ok $result, "Makefile.PL exit";
+like $stdout, qr/running Build\.PL/;
+like $stderr, qr/you have no libthbbt$/;
+#warn "out: $stdout"; warn "err: $stderr";
+
+# vim:ts=2:sw=2:et:sta
diff -urN perl-5.10.0.orig/lib/Module/Build/t/compat.t perl-5.10.0/lib/Module/Build/t/compat.t
--- perl-5.10.0.orig/lib/Module/Build/t/compat.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/compat.t 2009-03-10 16:50:35.000000000 +0100
@@ -13,19 +13,24 @@
delete @ENV{@makefile_keys};
my @makefile_types = qw(small passthrough traditional);
-my $tests_per_type = 14;
-if ( $Config{make} && find_in_path($Config{make}) ) {
- plan tests => 38 + @makefile_types*$tests_per_type*2;
+my $tests_per_type = 15;
+
+#find_in_path does not understand VMS.
+
+if ( $Config{make} && $^O ne 'VMS' ? find_in_path($Config{make}) : 1 ) {
+ plan 'no_plan';
} else {
plan skip_all => "Don't know how to invoke 'make'";
}
-ok 1, "Loaded";
+
+my $is_vms_mms = ($^O eq 'VMS') && ($Config{make} =~ /MM[SK]/i);
+
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
#########################
-use Cwd ();
-my $cwd = Cwd::cwd;
my $tmp = MBTest->tmpdir;
# Create test distribution; set requires and build_requires
@@ -33,7 +38,7 @@
my $dist = DistGen->new( dir => $tmp );
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
#########################
@@ -45,13 +50,21 @@
my @make = $Config{make} eq 'nmake' ? ('nmake', '-nologo') : ($Config{make});
+my $makefile = 'Makefile';
+
+# VMS MMK/MMS by convention use Descrip.MMS
+if ($is_vms_mms) {
+ $makefile = 'Descrip.MMS';
+}
+
+
#########################
# Test without requires
test_makefile_types();
-# Test with requires
+# Test with requires and PL_files
my $distname = $dist->name;
$dist->change_build_pl({
@@ -64,15 +77,26 @@
build_requires => {
'Test::More' => 0,
},
+ PL_files => { 'foo.PL' => 'foo' },
});
+$dist->add_file("foo.PL", <<'END');
+open my $fh, ">$ARGV[0]" or die $!;
+print $fh "foo\n";
+END
+
$dist->regen;
-test_makefile_types( requires => {
- 'perl' => $],
- 'File::Spec' => 0,
- 'Test::More' => 0,
-});
+test_makefile_types(
+ requires => {
+ 'perl' => $],
+ 'File::Spec' => 0,
+ 'Test::More' => 0,
+ },
+ PL_files => {
+ 'foo.PL' => 'foo',
+ },
+);
######################
@@ -95,7 +119,8 @@
# in older-generated Makefile.PLs
my $warning = '';
local $SIG{__WARN__} = sub { $warning = shift; };
- my $maketext = eval { Module::Build::Compat->fake_makefile(makefile => 'Makefile') };
+
+ my $maketext = eval { Module::Build::Compat->fake_makefile(makefile => $makefile) };
is $@, '', "fake_makefile lived";
like $maketext, qr/^realclean/m, "found 'realclean' in fake_makefile output";
like $warning, qr/build_class/, "saw warning about 'build_class'";
@@ -142,7 +167,7 @@
# Make sure various Makefile.PL arguments are supported
Module::Build::Compat->create_makefile_pl('passthrough', $mb);
- my $libdir = File::Spec->catdir( $cwd, 't', 'libdir' );
+ my $libdir = File::Spec->catdir( $tmp, 'libdir' );
my $result;
stdout_of( sub {
$result = $mb->run_perl_script('Makefile.PL', [],
@@ -171,20 +196,58 @@
like $output, qr/(?:# ok \d+\s+)+/, 'Should be verbose';
# Make sure various Makefile arguments are supported
- $output = stdout_of( sub { $ran_ok = $mb->do_system(@make, 'test', 'TEST_VERBOSE=0') } );
+ my $make_macro = 'TEST_VERBOSE=0';
+
+ # VMS MMK/MMS macros use different syntax.
+ if ($is_vms_mms) {
+ $make_macro = '/macro=("' . $make_macro . '")';
+ }
+
+ $output = stdout_of( sub {
+ local $ENV{HARNESS_TIMER}; # RT#39635 - timer messes with output
+ $ran_ok = $mb->do_system(@make, 'test', $make_macro)
+ } );
+
ok $ran_ok, "make test without verbose ran ok";
$output =~ s/^/# /gm; # Don't confuse our own test output
- like $output, qr/(?:# .+basic\.+ok\s+(?:[\d.]+\s*m?s\s*)?)# All tests/,
- 'Should be non-verbose';
+ like $output,
+ qr/# .+basic(\.t)?[.\s#]+ok[.\s#]+All tests successful/,
+ 'Should be non-verbose';
+
+ (my $libdir2 = $libdir) =~ s/libdir/lbiidr/;
+
+ SKIP: {
+ require ExtUtils::Install;
+ skip "Needs ExtUtils::Install 1.32 or later", 2
+ if ExtUtils::Install->VERSION < 1.32;
+
+ my @make_args = ('INSTALLDIRS=vendor', "INSTALLVENDORLIB=$libdir2");
+
+ if ($is_vms_mms) { # VMS MMK/MMS macros use different syntax.
+ $make_args[0] = '/macro=("' . join('","',@make_args) . '")';
+ pop @make_args while scalar(@make_args) > 1;
+ }
+
+ ($output) = stdout_stderr_of(
+ sub {
+ $ran_ok = $mb->do_system(@make, 'fakeinstall', @make_args);
+ }
+ );
- $mb->delete_filetree($libdir);
- ok ! -e $libdir, "Sample installation directory should be cleaned up";
+ ok $ran_ok, "make fakeinstall with INSTALLDIRS=vendor ran ok";
+ $output =~ s/^/# /gm; # Don't confuse our own test output
+ like $output,
+ qr/\Q$libdir2\E .* Simple\.pm/x,
+ 'Should have installdirs=vendor';
+ }
stdout_of( sub { $mb->do_system(@make, 'realclean'); } );
- ok ! -e 'Makefile', "Makefile shouldn't exist";
+ ok ! -e $makefile, "$makefile shouldn't exist";
1 while unlink 'Makefile.PL';
ok ! -e 'Makefile.PL', "Makefile.PL cleaned up";
+
+ 1 while unlink $libdir, $libdir2;
}
{ # Make sure tilde-expansion works
@@ -202,17 +265,21 @@
unlike $b2->install_base, qr/^~/, "Tildes should be expanded";
stdout_of( sub { $mb->do_system(@make, 'realclean'); } );
- ok ! -e 'Makefile', "Makefile shouldn't exist";
+ ok ! -e $makefile, "$makefile shouldn't exist";
1 while unlink 'Makefile.PL';
ok ! -e 'Makefile.PL', "Makefile.PL cleaned up";
}
+# cleanup
+$dist->remove;
+
#########################################################
sub test_makefile_types {
my %opts = @_;
$opts{requires} ||= {};
+ $opts{PL_files} ||= {};
foreach my $type (@makefile_types) {
# Create M::B instance
@@ -228,6 +295,7 @@
test_makefile_pl_requires_perl( $opts{requires}{perl} );
test_makefile_creation($mb);
test_makefile_prereq_pm( $opts{requires} );
+ test_makefile_pl_files( $opts{PL_files} ) if $type eq 'traditional';
my ($output,$success);
# Capture output to keep our STDOUT clean
@@ -236,6 +304,10 @@
});
ok $success, "make ran without error";
+ for my $file (values %{ $opts{PL_files} }) {
+ ok -e $file, "PL_files generated - $file";
+ }
+
# Can't let 'test' STDOUT go to our STDOUT, or it'll confuse Test::Harness.
$output = stdout_of( sub {
$success = $mb->do_system(@make, 'test');
@@ -269,13 +341,13 @@
$label .= " (postargs: $postargs)";
}
ok $result, $label;
- ok -e 'Makefile', "Makefile exists";
+ ok -e $makefile, "$makefile exists";
if ($cleanup) {
$output = stdout_of( sub {
$build->do_system(@make, 'realclean');
});
- ok ! -e 'Makefile', "Makefile cleaned up";
+ ok ! -e '$makefile', "$makefile cleaned up";
}
else {
pass '(skipping cleanup)'; # keep test count constant
@@ -286,10 +358,21 @@
my %requires = %{ $_[0] };
delete $requires{perl}; # until EU::MM supports this
SKIP: {
- skip 'Makefile not found', 1 unless -e 'Makefile';
- my $prereq_pm = find_makefile_prereq_pm();
+ skip "$makefile not found", 1 unless -e $makefile;
+ my $prereq_pm = find_params_in_makefile()->{PREREQ_PM} || {};
is_deeply $prereq_pm, \%requires,
- "Makefile has correct PREREQ_PM line";
+ "$makefile has correct PREREQ_PM line";
+ }
+}
+
+sub test_makefile_pl_files {
+ my $expected = shift;
+
+ SKIP: {
+ skip "$makefile not found", 1 unless -e $makefile;
+ my $pl_files = find_params_in_makefile()->{PL_FILES} || {};
+ is_deeply $pl_files, $expected,
+ "$makefile has correct PL_FILES line";
}
}
@@ -309,37 +392,28 @@
}
}
-# Following subroutine adapted from code in CPAN.pm
-# by Andreas Koenig and A. Speer.
-sub find_makefile_prereq_pm {
- my $fh = IO::File->new( 'Makefile', 'r' )
- or die "Can't read Makefile: $!";
- my $req = {};
+sub find_params_in_makefile {
+ my $fh = IO::File->new( $makefile, 'r' )
+ or die "Can't read $makefile: $!";
local($/) = "\n";
+
+ my %params;
while (<$fh>) {
- # locate PREREQ_PM
- last if /MakeMaker post_initialize section/;
- my($p) = m{^[\#]
- \s+PREREQ_PM\s+=>\s+(.+)
- }x;
- next unless $p;
+ # Blank line after params.
+ last if keys %params and !/\S+/;
+
+ next unless m{^\# \s+ ( [A-Z_]+ ) \s+ => \s+ ( .* )$}x;
- # extract modules
- while ( $p =~ m/(?:\s)([\w\:]+)=>(q\[.*?\]|undef),?/g ){
+ my($key, $val) = ($1, $2);
+ # extract keys and values
+ while ( $val =~ m/(?:\s)(\S+)=>(q\[.*?\]|undef),?/g ) {
my($m,$n) = ($1,$2);
if ($n =~ /^q\[(.*?)\]$/) {
$n = $1;
}
- $req->{$m} = $n;
+ $params{$key}{$m} = $n;
}
- last;
}
- return $req;
-}
-# cleanup
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
-$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
+ return \%params;
+}
diff -urN perl-5.10.0.orig/lib/Module/Build/t/destinations.t perl-5.10.0/lib/Module/Build/t/destinations.t
--- perl-5.10.0.orig/lib/Module/Build/t/destinations.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/destinations.t 2009-03-10 16:45:37.000000000 +0100
@@ -2,17 +2,18 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest tests => 113;
+use MBTest tests => 115;
+
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
-use Cwd ();
-my $cwd = Cwd::cwd;
my $tmp = MBTest->tmpdir;
use DistGen;
my $dist = DistGen->new( dir => $tmp );
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
use Config;
@@ -23,7 +24,6 @@
# We need to create a well defined environment to test install paths.
# We do this by setting up appropriate Config entries.
-use Module::Build;
my @installstyle = qw(lib perl5);
my $mb = Module::Build->new_from_context(
installdirs => 'site',
@@ -321,8 +321,4 @@
}
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
diff -urN perl-5.10.0.orig/lib/Module/Build/t/ext.t perl-5.10.0/lib/Module/Build/t/ext.t
--- perl-5.10.0.orig/lib/Module/Build/t/ext.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/ext.t 2009-03-10 16:50:35.000000000 +0100
@@ -4,10 +4,15 @@
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
use MBTest;
+use Module::Build;
+
my @unix_splits =
(
{ q{one t'wo th'ree f"o\"ur " "five" } => [ 'one', 'two three', 'fo"ur ', 'five' ] },
{ q{ foo bar } => [ 'foo', 'bar' ] },
+ { q{ D\'oh f\{g\'h\"i\]\* } => [ "D'oh", "f{g'h\"i]*" ] },
+ { q{ D\$foo } => [ 'D$foo' ] },
+ { qq{one\\\ntwo} => [ "one\ntwo" ] }, # TODO
);
my @win_splits =
@@ -53,12 +58,11 @@
{ 'a " b " c' => [ 'a', ' b ', 'c' ] },
);
-plan tests => 10 + 2*@unix_splits + 2*@win_splits;
+plan tests => 10 + 4*@unix_splits + 4*@win_splits;
-#########################
+ensure_blib('Module::Build');
-use Module::Build;
-ok(1);
+#########################
# Should always return an array unscathed
foreach my $platform ('', '::Platform::Unix', '::Platform::Windows') {
@@ -68,8 +72,13 @@
is "@result", "foo bar baz", "Split using $pkg";
}
+# I think 3.24 isn't actually the majik version, my 3.23 seems to pass...
+my $low_TPW_version = Text::ParseWords->VERSION < 3.24;
use Module::Build::Platform::Unix;
foreach my $test (@unix_splits) {
+ # Text::ParseWords bug:
+ local $TODO = $low_TPW_version && ((keys %$test)[0] =~ m{\\\n});
+
do_split_tests('Module::Build::Platform::Unix', $test);
}
@@ -94,13 +103,43 @@
}
{
+ # Make sure data can make a round-trip through an external perl
+ # process, which can involve the shell command line
+
+ # silence the printing for easier matching
+ local *Module::Build::log_info = sub {};
+
+ my @data = map values(%$_), @unix_splits, @win_splits;
+ for my $d (@data) {
+ my $out = stdout_of
+ ( sub {
+ Module::Build->run_perl_script('-le', [], ['print join " ", map "{$_}", @ARGV', @$d]);
+ } );
+ chomp $out;
+ is($out, join(' ', map "{$_}", @$d), "perl round trip for ".join('',map "{$_}", @$d));
+ }
+}
+
+{
+ # Make sure data can make a round-trip through an external backtick
+ # process, which can involve the shell command line
+
+ # silence the printing for easier matching
+ local *Module::Build::log_info = sub {};
+
+ my @data = map values(%$_), @unix_splits, @win_splits;
+ for my $d (@data) {
+ chomp(my $out = Module::Build->_backticks('perl', '-le', 'print join " ", map "{$_}", @ARGV', @$d));
+ is($out, join(' ', map "{$_}", @$d), "backticks round trip for ".join('',map "{$_}", @$d));
+ }
+}
+
+{
# Make sure run_perl_script() propagates @INC
- my $dir = 'whosiewhatzit';
- mkdir $dir, 0777;
+ my $dir = MBTest->tmpdir;
local @INC = ($dir, @INC);
- my $output = stdout_of( sub { Module::Build->run_perl_script('', ['-le', 'print for @INC']) } );
- like $output, qr{^$dir}m;
- rmdir $dir;
+ my $output = stdout_of( sub { Module::Build->run_perl_script('-le', [], ['print for @INC']) } );
+ like $output, qr{^\Q$dir\E}m;
}
##################################################################
@@ -112,5 +151,7 @@
is( 0 + grep( !defined(), @result ), # all defined
0,
"'$string' result all defined" );
- is_deeply(\@result, $expected);
+ is_deeply(\@result, $expected) or
+ diag("$package split_like_shell error \n" .
+ ">$string< is not splitting as >" . join("|", @$expected) . '<');
}
diff -urN perl-5.10.0.orig/lib/Module/Build/t/extend.t perl-5.10.0/lib/Module/Build/t/extend.t
--- perl-5.10.0.orig/lib/Module/Build/t/extend.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/extend.t 2009-03-10 16:45:37.000000000 +0100
@@ -2,23 +2,21 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest tests => 65;
+use MBTest tests => 66;
+
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
-use Cwd ();
-my $cwd = Cwd::cwd;
my $tmp = MBTest->tmpdir;
use DistGen;
my $dist = DistGen->new( dir => $tmp );
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
#########################
-use Module::Build;
-ok 1;
-
# Here we make sure actions are only called once per dispatch()
$::x = 0;
my $mb = Module::Build->subclass
@@ -276,8 +274,4 @@
}
# cleanup
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
diff -urN perl-5.10.0.orig/lib/Module/Build/t/files.t perl-5.10.0/lib/Module/Build/t/files.t
--- perl-5.10.0.orig/lib/Module/Build/t/files.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/files.t 2009-03-10 16:50:35.000000000 +0100
@@ -4,49 +4,36 @@
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
use MBTest tests => 6;
-use Cwd ();
-my $cwd = Cwd::cwd;
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
+
+use IO::File;
my $tmp = MBTest->tmpdir;
use DistGen;
my $dist = DistGen->new( dir => $tmp );
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
-
-use IO::File;
-
-
-use Module::Build;
my $mb = Module::Build->new_from_context;
-my @files;
{
# Make sure copy_if_modified() can handle spaces in filenames
my @tmp;
- foreach (1..2) {
- my $tmp = File::Spec->catdir('t', "tmp$_");
- $mb->add_to_cleanup($tmp);
- push @files, $tmp;
- unless (-d $tmp) {
- mkdir($tmp, 0777) or die "Can't create $tmp: $!";
- }
- ok -d $tmp;
- $tmp[$_] = $tmp;
- }
+ push @tmp, MBTest->tmpdir for (0 .. 1);
my $filename = 'file with spaces.txt';
- my $file = File::Spec->catfile($tmp[1], $filename);
+ my $file = File::Spec->catfile($tmp[0], $filename);
my $fh = IO::File->new($file, '>') or die "Can't create $file: $!";
print $fh "Foo\n";
$fh->close;
ok -e $file;
- my $file2 = $mb->copy_if_modified(from => $file, to_dir => $tmp[2]);
+ my $file2 = $mb->copy_if_modified(from => $file, to_dir => $tmp[1]);
ok $file2;
ok -e $file2;
}
@@ -60,8 +47,4 @@
}
# cleanup
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
diff -urN perl-5.10.0.orig/lib/Module/Build/t/help.t perl-5.10.0/lib/Module/Build/t/help.t
--- perl-5.10.0.orig/lib/Module/Build/t/help.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/help.t 2009-03-10 16:45:37.000000000 +0100
@@ -2,7 +2,10 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest 'no_plan';#tests => 0;
+use MBTest tests => 25;
+
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
use Cwd ();
use File::Path ();
@@ -31,8 +34,6 @@
chdir($dist->dirname) or die "Can't chdir to '@{[$dist->dirname]}': $!";
-use_ok 'Module::Build';
-
########################################################################
{ # check the =item style
my $mb = Module::Build->subclass(
diff -urN perl-5.10.0.orig/lib/Module/Build/t/install.t perl-5.10.0/lib/Module/Build/t/install.t
--- perl-5.10.0.orig/lib/Module/Build/t/install.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/install.t 2009-03-10 16:45:37.000000000 +0100
@@ -2,8 +2,12 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest tests => 34;
+use MBTest tests => 36;
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
+
+use Config;
use Cwd ();
my $cwd = Cwd::cwd;
my $tmp = MBTest->tmpdir;
@@ -11,14 +15,10 @@
use DistGen;
my $dist = DistGen->new( dir => $tmp );
$dist->regen;
-
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
#########################
-use Module::Build;
-use Config;
-
$dist->add_file( 'script', <<'---' );
#!perl -w
@@ -225,11 +225,10 @@
is keys %$pms, 0;
# revert to pristine state
- chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
$dist = DistGen->new( dir => $tmp );
$dist->regen;
- chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+ $dist->chdir_in;
}
sub strip_volume {
@@ -246,8 +245,4 @@
# cleanup
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
diff -urN perl-5.10.0.orig/lib/Module/Build/t/lib/DistGen.pm perl-5.10.0/lib/Module/Build/t/lib/DistGen.pm
--- perl-5.10.0.orig/lib/Module/Build/t/lib/DistGen.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/lib/DistGen.pm 2009-03-10 16:50:35.000000000 +0100
@@ -8,6 +8,8 @@
$VERBOSE = 0;
+use Carp;
+
use Cwd ();
use File::Basename ();
use File::Find ();
@@ -18,11 +20,11 @@
use Data::Dumper;
BEGIN {
- if( $^O eq 'VMS' ) {
- # For things like vmsify()
- require VMS::Filespec;
- VMS::Filespec->import;
- }
+ if( $^O eq 'VMS' ) {
+ # For things like vmsify()
+ require VMS::Filespec;
+ VMS::Filespec->import;
+ }
}
BEGIN {
require Exporter;
@@ -32,6 +34,16 @@
);
}
+sub undent {
+ my ($string) = @_;
+
+ my ($space) = $string =~ m/^(\s+)/;
+ $string =~ s/^$space//gm;
+
+ return($string);
+}
+########################################################################
+
sub new {
my $package = shift;
my %options = @_;
@@ -46,6 +58,9 @@
);
my $self = bless( \%data, $package );
+ # So we can clean up later even if the caller chdir()s
+ $self->{dir} = File::Spec->rel2abs($self->{dir});
+
tie %{$self->{filedata}}, 'Tie::CPHash';
tie %{$self->{pending}{change}}, 'Tie::CPHash';
@@ -60,16 +75,6 @@
return $self;
}
-# not a method
-sub undent {
- my ($string) = @_;
-
- my ($space) = $string =~ m/^(\s+)/;
- $string =~ s/^$space//gm;
-
- return($string);
-}
-
sub _gen_default_filedata {
my $self = shift;
@@ -180,14 +185,14 @@
OUTPUT:
RETVAL
- char *
+ const char *
xs_version()
CODE:
RETVAL = XS_VERSION;
OUTPUT:
RETVAL
- char *
+ const char *
version()
CODE:
RETVAL = VERSION;
@@ -195,6 +200,11 @@
RETVAL
---
+ # 5.6 is missing const char * in its typemap
+ $self->$add_unless('typemap', undent(<<" ---"));
+ const char * T_PV
+ ---
+
$self->$add_unless('t/basic.t', undent(<<" ---"));
use Test::More tests => 2;
use strict;
@@ -358,7 +368,11 @@
sub remove {
my $self = shift;
- File::Path::rmtree( File::Spec->canonpath($self->dirname) );
+ croak("invalid usage -- remove()") if(@_);
+ $self->chdir_original if($self->did_chdir);
+ File::Path::rmtree( $self->dirname );
+ # might as well check
+ croak("\nthis test should have used chdir_in()") unless(Cwd::getcwd);
}
sub revert {
@@ -391,6 +405,12 @@
use strict;
use Module::Build;
my \$b = Module::Build->new(
+ # Some CPANPLUS::Dist::Build versions need to allow mismatches
+ # On logic: thanks to Module::Install, CPAN.pm must set both keys, but
+ # CPANPLUS sets only the one
+ allow_mb_mismatch => (
+ \$ENV{PERL5_CPANPLUS_IS_RUNNING} && ! \$ENV{PERL5_CPAN_IS_RUNNING} ? 1 : 0
+ ),
$args
);
\$b->create_build_script();
@@ -405,6 +425,38 @@
$self->{pending}{change}{$file} = 1;
}
+sub get_file {
+ my $self = shift;
+ my $file = shift;
+ exists($self->{filedata}{$file}) or croak("no such entry: '$file'");
+ return $self->{filedata}{$file};
+}
+
+sub chdir_in {
+ my $self = shift;
+
+ $self->{original_dir} ||= Cwd::cwd; # only once
+ my $dir = $self->dirname;
+ chdir($dir) or die "Can't chdir to '$dir': $!";
+}
+########################################################################
+
+sub did_chdir {
+ my $self = shift;
+
+ return exists($self->{original_dir});
+}
+########################################################################
+
+sub chdir_original {
+ my $self = shift;
+
+ croak("never called chdir_in()") unless($self->{original_dir});
+ my $dir = $self->{original_dir};
+ chdir($dir) or die "Can't chdir to '$dir': $!";
+}
+########################################################################
+
1;
__END__
@@ -482,6 +534,19 @@
If the optional C<clean> argument is given, it also removes any
extraneous files that do not belong to the distribution.
+=head2 chdir_in
+
+Change directory into the dist root.
+
+ $dist->chdir_in;
+
+=head2 chdir_original
+
+Returns to whatever directory you were in before chdir_in() (regardless
+of the cwd.)
+
+ $dist->chdir_original;
+
=head3 clean()
Removes any files that are not part of the distribution.
diff -urN perl-5.10.0.orig/lib/Module/Build/t/lib/MBTest.pm perl-5.10.0/lib/Module/Build/t/lib/MBTest.pm
--- perl-5.10.0.orig/lib/Module/Build/t/lib/MBTest.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/lib/MBTest.pm 2009-03-10 16:50:35.000000000 +0100
@@ -3,23 +3,61 @@
use strict;
use File::Spec;
+use File::Temp ();
use File::Path ();
+
+# Setup the code to clean out %ENV
+BEGIN {
+ # Environment variables which might effect our testing
+ my @delete_env_keys = qw(
+ DEVEL_COVER_OPTIONS
+ MODULEBUILDRC
+ HARNESS_TIMER
+ HARNESS_OPTIONS
+ HARNESS_VERBOSE
+ PREFIX
+ INSTALL_BASE
+ INSTALLDIRS
+ );
+
+ # Remember the ENV values because on VMS %ENV is global
+ # to the user, not the process.
+ my %restore_env_keys;
+
+ sub clean_env {
+ for my $key (@delete_env_keys) {
+ if( exists $ENV{$key} ) {
+ $restore_env_keys{$key} = delete $ENV{$key};
+ }
+ else {
+ delete $ENV{$key};
+ }
+ }
+ }
+
+ END {
+ while( my($key, $val) = each %restore_env_keys ) {
+ $ENV{$key} = $val;
+ }
+ }
+}
+
+
BEGIN {
- # Make sure none of our tests load the users ~/.modulebuildrc file
- $ENV{MODULEBUILDRC} = 'NONE';
+ clean_env();
- # In case the test wants to use Test::More or our other bundled
- # modules, make sure they can be loaded. They'll still do "use
- # Test::More" in the test script.
+ # In case the test wants to use our other bundled
+ # modules, make sure they can be loaded.
my $t_lib = File::Spec->catdir('t', 'bundled');
unless ($ENV{PERL_CORE}) {
push @INC, $t_lib; # Let user's installed version override
} else {
- # We change directories, so expand @INC to absolute paths
+ # We change directories, so expand @INC and $^X to absolute paths
# Also add .
@INC = (map(File::Spec->rel2abs($_), @INC), ".");
+ $^X = File::Spec->rel2abs($^X);
# we are in 't', go up a level so we don't create t/t/_tmp
chdir '..' or die "Couldn't chdir to ..";
@@ -54,22 +92,22 @@
find_in_path
check_compiler
have_module
+ ensure_blib
);
push @EXPORT, @extra_exports;
__PACKAGE__->export(scalar caller, @extra_exports);
# XXX ^-- that should really happen in import()
+
+
########################################################################
-{ # Setup a temp directory if it doesn't exist
+# always return to the current directory
+{
my $cwd = Cwd::cwd;
- my $tmp = File::Spec->catdir( $cwd, 't', '_tmp' . $$);
- mkdir $tmp, 0777 unless -d $tmp;
- sub tmpdir { $tmp }
END {
- if(-d $tmp) {
- File::Path::rmtree($tmp) or warn "cannot clean dir '$tmp'";
- }
+ # Go back to where you came from!
+ chdir $cwd or die "Couldn't chdir to $cwd";
}
}
########################################################################
@@ -83,6 +121,13 @@
}
########################################################################
+# Setup a temp directory
+sub tmpdir {
+ return File::Temp::tempdir( 'MB-XXXXXXXX',
+ CLEANUP => 1, DIR => File::Spec->tmpdir
+ );
+}
+
sub save_handle {
my ($handle, $subr) = @_;
my $outfile = temp_file_name();
@@ -163,5 +208,20 @@
return eval "use $module; 1";
}
+sub ensure_blib {
+ # Make sure the given module was loaded from blib/, not the larger system
+ my $mod = shift;
+ (my $path = $mod) =~ s{::}{/}g;
+
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+ SKIP: {
+ skip "no blib in core", 1 if $ENV{PERL_CORE};
+ like $INC{"$path.pm"}, qr/\bblib\b/, "Make sure $mod was loaded from blib/"
+ or diag "PERL5LIB: " . ($ENV{PERL5LIB} || '') . "\n" .
+ "PERL5OPT: " . ($ENV{PERL5OPT} || '') . "\n" .
+ "\@INC contains:\n " . join("\n ", @INC) . "\n";
+ }
+}
+
1;
# vim:ts=2:sw=2:et:sta
diff -urN perl-5.10.0.orig/lib/Module/Build/t/manifypods.t perl-5.10.0/lib/Module/Build/t/manifypods.t
--- perl-5.10.0.orig/lib/Module/Build/t/manifypods.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/manifypods.t 2009-03-10 16:45:37.000000000 +0100
@@ -7,10 +7,12 @@
use Module::Build::ConfigData;
if ( Module::Build::ConfigData->feature('manpage_support') ) {
- plan tests => 21;
+ plan tests => 22;
} else {
plan skip_all => 'manpage_support feature is not enabled';
}
+ensure_blib('Module::Build');
+
#########################
@@ -55,7 +57,7 @@
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
use File::Spec::Functions qw( catdir );
my $destdir = catdir($cwd, 't', 'install_test' . $$);
@@ -137,11 +139,10 @@
# revert to a pristine state
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
$dist = DistGen->new( dir => $tmp );
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
my $mb2 = Module::Build->new(
@@ -164,8 +165,4 @@
# cleanup
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
diff -urN perl-5.10.0.orig/lib/Module/Build/t/mbyaml.t perl-5.10.0/lib/Module/Build/t/mbyaml.t
--- perl-5.10.0.orig/lib/Module/Build/t/mbyaml.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/mbyaml.t 2009-03-10 16:45:37.000000000 +0100
@@ -4,12 +4,14 @@
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
use MBTest 'no_plan';
+use_ok 'Module::Build::YAML';
+ensure_blib('Module::Build::YAML');
+
my ($dir);
$dir = ".";
$dir = "t" if (-d "t");
{
- use_ok("Module::Build::YAML");
my ($expected, $got, $var);
##########################################################
# Test a typical-looking Module::Build structure (alphabetized)
diff -urN perl-5.10.0.orig/lib/Module/Build/t/metadata.t perl-5.10.0/lib/Module/Build/t/metadata.t
--- perl-5.10.0.orig/lib/Module/Build/t/metadata.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/metadata.t 2009-03-10 16:45:37.000000000 +0100
@@ -2,14 +2,13 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest tests => 49;
+use MBTest tests => 51;
-use Cwd ();
-my $cwd = Cwd::cwd;
-my $tmp = MBTest->tmpdir;
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
+my $tmp = MBTest->tmpdir;
-use Module::Build;
use Module::Build::ConfigData;
my %metadata =
@@ -45,7 +44,7 @@
}
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
use Module::Build;
my $mb = Module::Build->new_from_context;
@@ -582,8 +581,4 @@
############################################################
# cleanup
-chdir( $cwd ) or die "Can't chdir to '$cwd': $!";
$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
diff -urN perl-5.10.0.orig/lib/Module/Build/t/metadata2.t perl-5.10.0/lib/Module/Build/t/metadata2.t
--- perl-5.10.0.orig/lib/Module/Build/t/metadata2.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/metadata2.t 2009-03-10 16:45:37.000000000 +0100
@@ -2,13 +2,13 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest tests => 18;
+use MBTest tests => 20;
+
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
-use Cwd ();
-my $cwd = Cwd::cwd;
my $tmp = MBTest->tmpdir;
-use Module::Build;
use Module::Build::ConfigData;
use DistGen;
@@ -22,7 +22,7 @@
my $dist = DistGen->new( dir => $tmp, skip_manifest => 1 );
$dist->regen;
- chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+ $dist->chdir_in;
ok ! -e 'MANIFEST';
@@ -36,7 +36,6 @@
ok -e 'META.yml';
- chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
}
@@ -74,7 +73,7 @@
});
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
# .pm File with pod
@@ -143,8 +142,4 @@
############################################################
# cleanup
-chdir( $cwd ) or die "Can't chdir to '$cwd': $!";
$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
diff -urN perl-5.10.0.orig/lib/Module/Build/t/moduleinfo.t perl-5.10.0/lib/Module/Build/t/moduleinfo.t
--- perl-5.10.0.orig/lib/Module/Build/t/moduleinfo.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/moduleinfo.t 2009-03-10 16:45:37.000000000 +0100
@@ -1,24 +1,24 @@
#!/usr/bin/perl -w
+# -*- mode: cperl; tab-width: 8; indent-tabs-mode: nil; basic-offset: 2 -*-
+# vim:ts=8:sw=2:et:sta:sts=2
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest tests => 81;
+use MBTest tests => 82;
+
+use_ok 'Module::Build::ModuleInfo';
+ensure_blib('Module::Build::ModuleInfo');
-use Cwd ();
-my $cwd = Cwd::cwd;
my $tmp = MBTest->tmpdir;
use DistGen;
my $dist = DistGen->new( dir => $tmp );
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
#########################
-
-use_ok( 'Module::Build::ModuleInfo' );
-
# class method C<find_module_by_name>
my $module = Module::Build::ModuleInfo->find_module_by_name(
'Module::Build::ModuleInfo' );
@@ -199,11 +199,10 @@
}
# revert to pristine state
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
$dist = DistGen->new( dir => $tmp );
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
# Find each package only once
@@ -258,11 +257,10 @@
ok( $pm_info->version > 1.23, 'alpha version greater than non');
# revert to pristine state
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
$dist = DistGen->new( dir => $tmp );
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
# parse $VERSION lines scripts for package main
@@ -427,8 +425,4 @@
# cleanup
-chdir( $cwd ) or die "Can't chdir to '$cwd': $!";
$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
diff -urN perl-5.10.0.orig/lib/Module/Build/t/new_from_context.t perl-5.10.0/lib/Module/Build/t/new_from_context.t
--- perl-5.10.0.orig/lib/Module/Build/t/new_from_context.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/new_from_context.t 2009-03-10 16:45:37.000000000 +0100
@@ -2,10 +2,12 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest tests => 2;
+use MBTest tests => 4;
-use Cwd ();
-my $cwd = Cwd::cwd;
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
+
+use IO::File;
my $tmp = MBTest->tmpdir;
use DistGen;
@@ -15,10 +17,8 @@
$dist->add_file("$libdir/Build.PL", 'die');
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
-use IO::File;
-use Module::Build;
unshift(@INC, $libdir);
my $mb = eval { Module::Build->new_from_context};
@@ -26,10 +26,6 @@
ok($mb);
# cleanup
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
-use File::Path;
-rmtree( $tmp );
-
# vim:ts=2:sw=2:et:sta
diff -urN perl-5.10.0.orig/lib/Module/Build/t/notes.t perl-5.10.0/lib/Module/Build/t/notes.t
--- perl-5.10.0.orig/lib/Module/Build/t/notes.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/notes.t 2009-03-10 16:45:37.000000000 +0100
@@ -2,20 +2,19 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest tests => 11;
+use MBTest tests => 13;
+
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
-use Cwd ();
-my $cwd = Cwd::cwd;
my $tmp = MBTest->tmpdir;
use DistGen;
my $dist = DistGen->new( dir => $tmp );
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
-
+$dist->chdir_in;
-use Module::Build;
###################################
$dist->change_file( 'Build.PL', <<"---" );
@@ -68,8 +67,4 @@
# cleanup
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
diff -urN perl-5.10.0.orig/lib/Module/Build/t/parents.t perl-5.10.0/lib/Module/Build/t/parents.t
--- perl-5.10.0.orig/lib/Module/Build/t/parents.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/parents.t 2009-03-10 16:45:37.000000000 +0100
@@ -2,12 +2,12 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest tests => 27;
+use MBTest tests => 28;
-#########################
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
-use Module::Build;
-ok(1);
+#########################
package Foo;
sub foo;
diff -urN perl-5.10.0.orig/lib/Module/Build/t/pod_parser.t perl-5.10.0/lib/Module/Build/t/pod_parser.t
--- perl-5.10.0.orig/lib/Module/Build/t/pod_parser.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/pod_parser.t 2009-03-10 16:45:37.000000000 +0100
@@ -2,15 +2,13 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest tests => 7;
+use MBTest tests => 8;
-use Cwd ();
-my $cwd = Cwd::cwd;
+use_ok 'Module::Build::PodParser';
+ensure_blib('Module::Build::PodParser');
#########################
-use_ok 'Module::Build::PodParser';
-
{
package IO::StringBased;
diff -urN perl-5.10.0.orig/lib/Module/Build/t/ppm.t perl-5.10.0/lib/Module/Build/t/ppm.t
--- perl-5.10.0.orig/lib/Module/Build/t/ppm.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/ppm.t 2009-03-10 16:45:37.000000000 +0100
@@ -3,13 +3,13 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
use MBTest;
+
use Module::Build;
use Module::Build::ConfigData;
my $manpage_support = Module::Build::ConfigData->feature('manpage_support');
my $HTML_support = Module::Build::ConfigData->feature('HTML_support');
-
{
my ($have_c_compiler, $C_support_feature) = check_compiler();
if (! $C_support_feature) {
@@ -23,13 +23,12 @@
} elsif ( $^O eq 'VMS' ) {
plan skip_all => "Needs porting work on VMS";
} else {
- plan tests => 12;
+ plan tests => 13;
}
}
+ensure_blib('Module::Build');
-use Cwd ();
-my $cwd = Cwd::cwd;
my $tmp = MBTest->tmpdir;
@@ -60,7 +59,7 @@
});
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
use File::Spec::Functions qw(catdir);
@@ -183,12 +182,8 @@
}
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
-use File::Path;
-rmtree( $tmp );
-
########################################
diff -urN perl-5.10.0.orig/lib/Module/Build/t/runthrough.t perl-5.10.0/lib/Module/Build/t/runthrough.t
--- perl-5.10.0.orig/lib/Module/Build/t/runthrough.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/runthrough.t 2009-03-10 16:45:37.000000000 +0100
@@ -3,15 +3,15 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
use MBTest tests => 32;
-use Module::Build;
-use Module::Build::ConfigData;
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
+
+use Module::Build::ConfigData;
my $have_yaml = Module::Build::ConfigData->feature('YAML_support');
#########################
-use Cwd ();
-my $cwd = Cwd::cwd;
my $tmp = MBTest->tmpdir;
use DistGen;
@@ -55,17 +55,8 @@
---
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
-
-#########################
+$dist->chdir_in;
-use Module::Build;
-ok(1);
-
-SKIP: {
- skip "no blib in core", 1 if $ENV{PERL_CORE};
- like $INC{'Module/Build.pm'}, qr/\bblib\b/, "Make sure version from blib/ is loaded";
-}
#########################
@@ -149,7 +140,7 @@
SKIP: {
skip( "not sure if we can create a tarball on this platform", 1 )
- unless $mb->check_installed_status('Archive::Tar', 0) ||
+ unless $mb->check_installed_version('Archive::Tar', 0) ||
$mb->isa('Module::Build::Platform::Unix');
$mb->add_to_cleanup($mb->dist_dir . ".tar.gz");
@@ -206,7 +197,6 @@
ok ! -e $mb->config_dir;
ok ! -e $mb->dist_dir;
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
SKIP: {
@@ -227,7 +217,7 @@
$dist->add_file( 'bin/script.bat', $script_data );
$dist->regen;
- chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+ $dist->chdir_in;
$mb = Module::Build->new_from_context;
ok $mb;
@@ -241,13 +231,8 @@
my $out = slurp( $script_file );
is $out, $script_data, ' unmodified by pl2bat';
- chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
}
# cleanup
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
diff -urN perl-5.10.0.orig/lib/Module/Build/t/script_dist.t perl-5.10.0/lib/Module/Build/t/script_dist.t
--- perl-5.10.0.orig/lib/Module/Build/t/script_dist.t 1970-01-01 01:00:00.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/script_dist.t 2009-03-10 16:45:37.000000000 +0100
@@ -0,0 +1,79 @@
+#!/usr/bin/perl -w
+# -*- mode: cperl; tab-width: 8; indent-tabs-mode: nil; basic-offset: 2 -*-
+# vim:ts=8:sw=2:et:sta:sts=2
+
+use strict;
+use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
+use MBTest 'no_plan';
+
+use DistGen qw(undent);
+
+use Module::Build;
+
+# XXX DistGen shouldn't be assuming module-ness?
+my $dist = DistGen->new(dir => MBTest->tmpdir);
+$dist->add_file('bin/foo', undent(<<' ---'));
+ #!/usr/bin/perl
+
+ package bin::foo;
+ $VERSION = 0.01;
+
+ =head1 NAME
+
+ foo - does stuff
+
+ =head1 AUTHOR
+
+ A. U. Thor, a.u.thor@a.galaxy.far.far.away
+
+ =cut
+
+ print "hello world\n";
+ ---
+
+my %details = (
+ dist_name => 'bin-foo',
+ dist_version_from => 'bin/foo',
+ dist_author => ['A. U. Thor, a.u.thor@a.galaxy.far.far.away'],
+ dist_version => '0.01',
+);
+my %meta_provides = (
+ 'bin-foo' => {
+ file => 'bin/foo',
+ version => '0.01',
+ }
+);
+$dist->change_build_pl({
+ # TODO need to get all of this data out of the program itself
+ ! $ENV{EXTRA_TEST} ? (
+ %details, meta_merge => { provides => \%meta_provides, },
+ ) : (),
+ program_name => 'bin/foo',
+ license => 'perl',
+});
+
+# hmm... the old assumption of what a dist looks like is wrong here
+$dist->remove_file('lib/Simple.pm'); $dist->regen;
+
+$dist->chdir_in;
+rmdir('lib');
+
+#system('konsole');
+my $mb = Module::Build->new_from_context;
+ok($mb);
+is($mb->program_name, 'bin/foo');
+is($mb->license, 'perl');
+is($mb->dist_name, 'bin-foo');
+is($mb->dist_version, '0.01');
+is_deeply($mb->dist_author,
+ ['A. U. Thor, a.u.thor@a.galaxy.far.far.away']);
+ok $mb->dispatch('distmeta');
+
+use Module::Build::ConfigData;
+SKIP: {
+ skip( 'YAML_support feature is not enabled', 1 )
+ unless Module::Build::ConfigData->feature('YAML_support');
+ require YAML;
+ my $yml = YAML::LoadFile('META.yml');
+ is_deeply($yml->{provides}, \%meta_provides);
+}
diff -urN perl-5.10.0.orig/lib/Module/Build/t/test_file_exts.t perl-5.10.0/lib/Module/Build/t/test_file_exts.t
--- perl-5.10.0.orig/lib/Module/Build/t/test_file_exts.t 1970-01-01 01:00:00.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/test_file_exts.t 2009-03-10 16:45:37.000000000 +0100
@@ -0,0 +1,45 @@
+#!/usr/bin/perl -w
+
+use strict;
+use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
+use MBTest tests => 5;
+use DistGen;
+
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
+
+my $tmp = MBTest->tmpdir;
+my $dist = DistGen->new( dir => $tmp );
+
+$dist->add_file('t/mytest.s', <<'---' );
+#!perl
+use Test::More tests => 2;
+ok(1, 'first mytest.s');
+ok(1, 'second mytest.s');
+---
+
+$dist->regen;
+$dist->chdir_in;
+
+#########################
+
+# So make sure that the test gets run with the alternate extension.
+ok my $mb = Module::Build->new(
+ module_name => $dist->name,
+ test_file_exts => ['.s'],
+ quiet => 1,
+), 'Construct build object with test_file_exts parameter';
+
+$mb->add_to_cleanup('save_out');
+# Use uc() so we don't confuse the current test output
+my $out = uc(stdout_of(
+ sub {$mb->dispatch('test', verbose => 1)}
+));
+
+like $out, qr/^OK 1 - FIRST MYTEST[.]S/m, 'Should see first test output';
+like $out, qr/^OK 2 - SECOND MYTEST[.]S/m, 'Should see second test output';
+
+# Cleanup.
+$dist->remove;
+
+# vim:ts=4:sw=4:et:sta
diff -urN perl-5.10.0.orig/lib/Module/Build/t/test_type.t perl-5.10.0/lib/Module/Build/t/test_type.t
--- perl-5.10.0.orig/lib/Module/Build/t/test_type.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/test_type.t 2009-03-10 16:45:37.000000000 +0100
@@ -9,10 +9,11 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest tests => 8;
+use MBTest tests => 9;
+
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
-use Cwd ();
-my $cwd = Cwd::cwd;
my $tmp = MBTest->tmpdir;
use DistGen;
@@ -29,12 +30,10 @@
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
#########################
-use_ok 'Module::Build';
-
# Here we make sure we can define an action that will test a particular type
$::x = 0;
my $mb = Module::Build->subclass(
@@ -69,11 +68,10 @@
my $output = uc(stdout_of(
sub {$mb->dispatch('testspecial', verbose => 0)}
));
-like($output, qr/\.\.OK/);
+like($output, qr/\.\. ?OK/);
is($::x, 3, "called a third time");
-chdir( $cwd ) or die "Can't chdir to '$cwd': $!";
$dist->remove;
# vim:ts=4:sw=4:et:sta
diff -urN perl-5.10.0.orig/lib/Module/Build/t/test_types.t perl-5.10.0/lib/Module/Build/t/test_types.t
--- perl-5.10.0.orig/lib/Module/Build/t/test_types.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/test_types.t 2009-03-10 16:45:37.000000000 +0100
@@ -2,10 +2,11 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest tests => 14 + 12;
+use MBTest tests => 15 + 12;
+
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
-use Cwd ();
-my $cwd = Cwd::cwd();
my $tmp = MBTest->tmpdir;
use DistGen;
@@ -33,13 +34,9 @@
---
$dist->regen;
-
-chdir($dist->dirname) or die "Can't chdir to '@{[$dist->dirname]}': $!";
-
+$dist->chdir_in;
#########################
-use_ok 'Module::Build';
-
my $mb = Module::Build->subclass(
code => q#
sub ACTION_testspecial {
@@ -101,7 +98,6 @@
is(scalar(@{[$all_output =~ m/OK/mg]}), 8 );
is(scalar(@{[$all_output =~ m/ALL TESTS SUCCESSFUL\./mg]}), 1);
-chdir($cwd) or die "Can't chdir to '$cwd': $!";
$dist->remove;
{ # once-again
@@ -118,8 +114,7 @@
ok 1;
---
$dist->regen;
-
-chdir($dist->dirname) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
my $mb = Module::Build->subclass(
code => q#
@@ -179,7 +174,6 @@
is(scalar(@{[$all_output =~ m/(OK 1)/mg]}), 5 );
is(scalar(@{[$all_output =~ m/(OK)/mg]}), 13 );
-chdir($cwd) or die "Can't chdir to '$cwd': $!";
$dist->remove;
} # end once-again
diff -urN perl-5.10.0.orig/lib/Module/Build/t/tilde.t perl-5.10.0/lib/Module/Build/t/tilde.t
--- perl-5.10.0.orig/lib/Module/Build/t/tilde.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/tilde.t 2009-03-10 16:45:37.000000000 +0100
@@ -4,20 +4,19 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest tests => 15;
+use MBTest tests => 18;
+
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
-use Cwd ();
-my $cwd = Cwd::cwd;
my $tmp = MBTest->tmpdir;
use DistGen;
my $dist = DistGen->new( dir => $tmp );
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
-
+$dist->chdir_in;
-use Module::Build;
sub run_sample {
my @args = @_;
@@ -39,10 +38,16 @@
SKIP: {
my $home = $ENV{HOME} ? $ENV{HOME} : undef;
- skip "Needs case and syntax tweaks for VMS", 14 if $^O eq 'VMS';
+
+ if ($^O eq 'VMS') {
+ # Convert the path to UNIX format, trim off the trailing slash
+ $home = VMS::Filespec::unixify($home);
+ $home =~ s#/$##;
+ }
+
unless (defined $home) {
my @info = eval { getpwuid $> };
- skip "No home directory for tilde-expansion tests", 14 if $@;
+ skip "No home directory for tilde-expansion tests", 15 if $@;
$home = $info[7];
}
@@ -63,6 +68,13 @@
is( run_sample( prefix => '~' )->prefix,
$home );
+ # Test when HOME is different from getpwuid(), as in sudo.
+ {
+ local $ENV{HOME} = '/wibble/whomp';
+
+ is( run_sample( $p => '~' )->$p(), "/wibble/whomp" );
+ }
+
my $mb = run_sample( install_path => { html => '~/html',
lib => '~/lib' }
);
@@ -83,18 +95,22 @@
# Again, with named users
SKIP: {
- skip "Needs case and syntax tweaks for VMS", 1 if $^O eq 'VMS';
my @info = eval { getpwuid $> };
skip "No home directory for tilde-expansion tests", 1 if $@;
my ($me, $home) = @info[0,7];
- is( run_sample( $p => "~$me/foo")->$p(), "$home/foo" );
+ my $expected = "$home/foo";
+
+ if ($^O eq 'VMS') {
+ # Convert the path to UNIX format and trim off the trailing slash
+ $home = VMS::Filespec::unixify($home);
+ $home =~ s#/$##;
+ $expected = $home . '/../[^/]+' . '/foo';
+ }
+
+ like( run_sample( $p => "~$me/foo")->$p(), qr($expected)i );
}
# cleanup
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
diff -urN perl-5.10.0.orig/lib/Module/Build/t/use_tap_harness.t perl-5.10.0/lib/Module/Build/t/use_tap_harness.t
--- perl-5.10.0.orig/lib/Module/Build/t/use_tap_harness.t 1970-01-01 01:00:00.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/use_tap_harness.t 2009-03-10 16:50:35.000000000 +0100
@@ -0,0 +1,61 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Test::More;
+use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
+if (eval { require TAP::Harness } && TAP::Harness->VERSION >= 3) {
+ plan tests => 8;
+} else {
+ plan skip_all => 'TAP::Harness 3+ not installed'
+}
+
+use MBTest;
+use DistGen;
+
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
+my $tmp = MBTest->tmpdir;
+my $dist = DistGen->new( dir => $tmp );
+$dist->regen;
+
+$dist->chdir_in;
+#########################
+
+# Make sure that TAP::Harness properly does its thing.
+ok my $mb = Module::Build->new(
+ module_name => $dist->name,
+ use_tap_harness => 1,
+ quiet => 1,
+), 'Construct build object with test_file_exts parameter';
+
+$mb->add_to_cleanup('save_out');
+# Use uc() so we don't confuse the current test output
+my $out = uc(stdout_of(
+ sub {$mb->dispatch('test', verbose => 1)}
+));
+
+like $out, qr/^OK 1/m, 'Should see first test output';
+like $out, qr/^ALL TESTS SUCCESSFUL/m, 'Should see test success message';
+
+#########################
+
+# Make sure that arguments are passed through to TAP::Harness.
+ok $mb = Module::Build->new(
+ module_name => $dist->name,
+ use_tap_harness => 1,
+ tap_harness_args => { verbosity => 0 },
+ quiet => 1,
+), 'Construct build object with test_file_exts parameter';
+
+$mb->add_to_cleanup('save_out');
+# Use uc() so we don't confuse the current test output
+$out = uc(stdout_of(
+ sub {$mb->dispatch('test', verbose => 1)}
+));
+
+unlike $out, qr/^OK 1/m, 'Should not see first test output';
+like $out, qr/^ALL TESTS SUCCESSFUL/m, 'Should see test success message';
+
+$dist->remove;
+
+# vim:ts=4:sw=4:et:sta
diff -urN perl-5.10.0.orig/lib/Module/Build/t/versions.t perl-5.10.0/lib/Module/Build/t/versions.t
--- perl-5.10.0.orig/lib/Module/Build/t/versions.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/versions.t 2009-03-10 16:45:37.000000000 +0100
@@ -2,10 +2,11 @@
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
-use MBTest tests => 2;
+use MBTest tests => 4;
+
+use_ok 'Module::Build';
+ensure_blib('Module::Build');
-use Cwd ();
-my $cwd = Cwd::cwd;
my $tmp = MBTest->tmpdir;
use DistGen;
@@ -14,8 +15,6 @@
#########################
-use Module::Build;
-
my @mod = split( /::/, $dist->name );
my $file = File::Spec->catfile( $dist->dirname, 'lib', @mod ) . '.pm';
is( Module::Build->version_from_file( $file ), '0.01', 'version_from_file' );
@@ -25,6 +24,3 @@
# cleanup
$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
diff -urN perl-5.10.0.orig/lib/Module/Build/t/xs.t perl-5.10.0/lib/Module/Build/t/xs.t
--- perl-5.10.0.orig/lib/Module/Build/t/xs.t 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build/t/xs.t 2009-03-10 16:45:37.000000000 +0100
@@ -15,22 +15,23 @@
} elsif ( $^O eq 'VMS' ) {
plan skip_all => 'Child test output confuses harness';
} else {
- plan tests => 22;
+ plan tests => 23;
}
}
+ensure_blib('Module::Build');
+
+
#########################
-use Cwd ();
-my $cwd = Cwd::cwd;
my $tmp = MBTest->tmpdir;
use DistGen;
my $dist = DistGen->new( dir => $tmp, xs => 1 );
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
my $mb = Module::Build->new_from_context;
@@ -103,7 +104,6 @@
# cleanup
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
@@ -114,7 +114,7 @@
$dist = DistGen->new( name => 'Simple::With::Deep::Name',
dir => $tmp, xs => 1 );
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
$mb = Module::Build->new_from_context;
is $@, '';
@@ -129,7 +129,6 @@
is $@, '';
# cleanup
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
@@ -208,7 +207,7 @@
---
$dist->regen;
-chdir( $dist->dirname ) or die "Can't chdir to '@{[$dist->dirname]}': $!";
+$dist->chdir_in;
$mb = Module::Build->new_from_context;
@@ -224,8 +223,4 @@
is $@, '';
# cleanup
-chdir( $cwd ) or die "Can''t chdir to '$cwd': $!";
$dist->remove;
-
-use File::Path;
-rmtree( $tmp );
diff -urN perl-5.10.0.orig/lib/Module/Build.pm perl-5.10.0/lib/Module/Build.pm
--- perl-5.10.0.orig/lib/Module/Build.pm 2009-02-20 18:22:32.000000000 +0100
+++ perl-5.10.0/lib/Module/Build.pm 2009-03-10 16:49:12.000000000 +0100
@@ -15,7 +15,7 @@
use vars qw($VERSION @ISA);
@ISA = qw(Module::Build::Base);
-$VERSION = '0.2808_01';
+$VERSION = '0.32';
$VERSION = eval $VERSION;
# Okay, this is the brute-force method of finding out what kind of
@@ -30,15 +30,18 @@
dynixptx Unix
freebsd Unix
linux Unix
+ haiku Unix
hpux Unix
irix Unix
darwin Unix
machten Unix
midnightbsd Unix
+ mirbsd Unix
next Unix
openbsd Unix
netbsd Unix
dec_osf Unix
+ nto Unix
svr4 Unix
svr5 Unix
sco_sv Unix
@@ -49,7 +52,9 @@
cygwin Unix
os2 Unix
interix Unix
-
+ gnu Unix
+ gnukfreebsd Unix
+
dos Windows
MSWin32 Windows
@@ -156,11 +161,11 @@
'actions'. In this case the actions run are 'build' (the default
action), 'test', and 'install'. Other actions defined so far include:
- build manifest
- clean manpages
- code pardist
- config_data ppd
- diff ppmdist
+ build manpages
+ clean pardist
+ code ppd
+ config_data ppmdist
+ diff prereq_data
dist prereq_report
distcheck pure_install
distclean realclean
@@ -173,6 +178,7 @@
help testpod
html testpodcoverage
install versioninstall
+ manifest
You can run the 'help' action for a complete list of actions.
@@ -508,6 +514,14 @@
output, so you can supply C<tar> and/or C<gzip> parameters to affect
the result.
+=item prereq_data
+
+[version 0.32]
+
+This action prints out a Perl data structure of all prerequsites and the versions
+required. The output can be loaded again using C<eval()>. This can be useful for
+external tools that wish to query a Build script for prerequisites.
+
=item prereq_report
[version 0.28]
@@ -557,10 +571,10 @@
[version 0.01]
-This will use C<Test::Harness> to run any regression tests and report
-their results. Tests can be defined in the standard places: a file
-called C<test.pl> in the top-level directory, or several files ending
-with C<.t> in a C<t/> directory.
+This will use C<Test::Harness> or C<TAP::Harness> to run any regression
+tests and report their results. Tests can be defined in the standard
+places: a file called C<test.pl> in the top-level directory, or several
+files ending with C<.t> in a C<t/> directory.
If you want tests to be 'verbose', i.e. show details of test execution
rather than just summary information, pass the argument C<verbose=1>.
@@ -568,6 +582,14 @@
If you want to run tests under the perl debugger, pass the argument
C<debugger=1>.
+If you want to have Module::Build find test files with different file
+name extensions, pass the C<test_file_exts> argument with an array
+of extensions, such as C<[qw( .t .s .z )]>.
+
+If you want test to be run by C<TAP::Harness>, rather than C<Test::Harness>,
+pass the argument C<tap_harness_args> as an array reference of arguments to
+pass to the TAP::Harness constructor.
+
In addition, if a file called C<visual.pl> exists in the top-level
directory, this file will be executed as a Perl script and its output
will be shown to the user. This is a good place to put speed tests or
@@ -611,7 +633,7 @@
...
test_types => {
special => '.st',
- author => '.at',
+ author => ['.at', '.pt' ],
},
...