26b7a08961
- 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
5716 lines
172 KiB
Diff
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' ],
|
|
},
|
|
...
|
|
|