summaryrefslogtreecommitdiff
path: root/lib/Task/Weaken.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Task/Weaken.pm')
-rw-r--r--lib/Task/Weaken.pm94
1 files changed, 94 insertions, 0 deletions
diff --git a/lib/Task/Weaken.pm b/lib/Task/Weaken.pm
new file mode 100644
index 0000000..e4618d6
--- /dev/null
+++ b/lib/Task/Weaken.pm
@@ -0,0 +1,94 @@
+package Task::Weaken;
+
+use 5.005;
+use strict;
+
+use vars qw{$VERSION};
+BEGIN {
+ $VERSION = '1.04';
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+Task::Weaken - Ensure that a platform has weaken support
+
+=head1 DESCRIPTION
+
+One recurring problem in modules that use L<Scalar::Util>'s C<weaken>
+function is that it is not present in the pure-perl variant.
+
+While this isn't necesarily always a problem in a straight CPAN-based
+Perl environment, some operating system distributions only include the
+pure-Perl versions, don't include the XS version, and so weaken is
+then "missing" from the platform, B<despite> passing a dependency on
+L<Scalar::Util> successfully.
+
+Most notably this is RedHat Linux at time of writing, but other come
+and go and do the same thing, hence "recurring problem".
+
+The normal solution is to manually write tests in each distribution
+to ensure that C<weaken> is available.
+
+This restores the functionality testing to a dependency you do once
+in your F<Makefile.PL>, rather than something you have to write extra
+tests for each time you write a module.
+
+It should also help make the package auto-generators for the various
+operating systems play more nicely, because it introduces a dependency
+that they B<have> to have a proper weaken in order to work.
+
+=head2 How this Task works
+
+Part of the problem seems to stem from the fact that some distributions
+continue to include modules even if they fail some of their tests.
+
+To get around that for this module, it will do a few dirty tricks.
+
+If L<Scalar::Util> is not available at all, it will issue a normal
+dependency on the module. However, if L<Scalar::Util> is relatively
+new ( it is E<gt>= 1.19 ) and the module does B<not> have weaken, the
+install will bail out altogether with a long error encouraging the
+user to seek support from their vendor (this problem happens most
+often in vendor-packaged Perl versions).
+
+This distribution also contains tests to ensure that weaken is
+available using more normal methods.
+
+So if your module uses C<weaken>, you can just add the following to
+your L<Module::Install>-based F<Makefile.PL> (or equivalent).
+
+ requires 'Task::Weaken' => 0;
+
+=head1 SUPPORT
+
+Bugs should be always be reported via the CPAN bug tracker at
+
+L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Task-Weaken>
+
+For other issues,contact the author.
+
+=head1 AUTHOR
+
+Adam Kennedy E<lt>adamk@cpan.orgE<gt>
+
+=head1 SEE ALSO
+
+L<Task>, L<Scalar::Util>, L<http://ali.as/>
+
+=head1 COPYRIGHT
+
+Copyright 2006 - 2011 Adam Kennedy.
+
+This program is free software; you can redistribute
+it and/or modify it under the same terms as Perl itself.
+
+The full text of the license can be found in the
+LICENSE file included with this module.
+
+=cut