=head1 NAME

List::MoreUtils::Contributing - Gives rough introduction into contributing to List::MoreUtils

=head1 DESCRIPTION

List::Moreutils has a turbulent history and a strong approach. Before
going further, please step to
L<Open Source Contribution Etiquette|http://tirania.org/blog/archive/2010/Dec-31.html>
and then come back.

The current distribution is a balance between finishing the history and
claiming for future requirements. Therefore some components will receive
a rewrite on purpose - others wont.

For the moment - it's not the primary goal to clean up the configuration
stage, until the primary goals and prerequisites are done.

To contribute to List::MoreUtils, one has to arrange with the current
situation, dig into details and ask for clarifying when parts are
incomprehensible.

=head2 Primary Goals

The very first primary goal is to clear the backlog. These are primarily
the open issues, feature requests and missing infrastructure elements.

As example see RT#93207 or RT#75672 for missing configure time checks,
while RT#93207 radiates until test - but doesn't affect runtime nor
installation (beside test failures).

=head2 Secondary Goals

Secondary goals are harmonizing the function names and calling convention
(see RT#102673), tidying the infrastructure of the distribution and remove
unnecessary complexity (while protecting the necessary).

One example of removing unnessesary infrastructure could be to move
L<Data::Tumbler> and L<Test::WriteVariants> into authoring mode, when
imrpoved test for RT#93207 could be reasonably done by a module which
is recommended for test. The recommendation of
L<Graham Knop's Makefile.PL#L82|https://github.com/haarg/List-MoreUtils/blob/dd877f963deead742fc90005636c72c6be9060fc/Makefile.PL#L82>
in L<PR#9|https://github.com/perl5-utils/List-MoreUtils/pull/9> a desirable
one.

=head2 Orientation Guide

List::MoreUtils configuration stage heavily depends on L<Config::AutoConf>
and L<Data::Tumbler>. A few prerequisites of both modules aren't available
for Perl 5.6 - which leads to a tiny emulation layer t the begin of
C<Makefile.PL>.

The reason for L<Config::AutoConf> is quite simple - the opportunities
for checking the environment cover a much wider range than a simple test
whether there is a working compiler. It requires a lot of improvements
since it's fundament L<ExtUtils::CBuilder> was never designed to support
that kind of solutions - but there is I<Work In Progress>. To finally
solve issues as RT#75672 even in cross-compile environments - there is
no way around such a checking tool.

The reason for L<Data::Tumbler> in combination with L<Test::WriteVariants>
are extensible tests with reasonable effort and easy figuring out which
extra condition causes failures. Also - missing pre-conditions should
result in failing tests i some cases - what is fully supported by the
logic behind L<Data::Tumbler> in combination with L<Test::WriteVariants>.

Finally - L<inc::latest> glues the stuff in a bundle together to allow
people with older toolchains to use List::MoreUtils out of the box (maybe
with reduced quantity but full quality).

=head1 SEE ALSO

L<Config::AutoConf>, L<Data::Tumbler>, L<Test::WriteVariants>,
L<ExtUtils::MakeMaker::Extensions>

=head1 AUTHOR

Jens Rehsack E<lt>rehsack AT cpan.orgE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright 2015,2016 by Jens Rehsack

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.4 or,
at your option, any later version of Perl 5 you may have available.

=cut
