diff options
Diffstat (limited to 'Master/tlpkg/tlperl/site/lib/Canary/Stability.pm')
-rw-r--r-- | Master/tlpkg/tlperl/site/lib/Canary/Stability.pm | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/site/lib/Canary/Stability.pm b/Master/tlpkg/tlperl/site/lib/Canary/Stability.pm new file mode 100644 index 00000000000..21d7c659736 --- /dev/null +++ b/Master/tlpkg/tlperl/site/lib/Canary/Stability.pm @@ -0,0 +1,207 @@ +=head1 NAME + +Canary::Stability - canary to check perl compatibility for schmorp's modules + +=head1 SYNOPSIS + + # in Makefile.PL + use Canary::Stability DISTNAME => 2001, MINIMUM_PERL_VERSION; + +=head1 DESCRIPTION + +This module is used by Schmorp's modules during configuration stage to +test the installed perl for compatibility with his modules. + +It's not, at this stage, meant as a tool for other module authors, +although in principle nothing prevents them from subscribing to the same +ideas. + +See the F<Makefile.PL> in L<Coro> or L<AnyEvent> for usage examples. + +=cut + +package Canary::Stability; + +BEGIN { + $VERSION = 2012; +} + +sub sgr { + # we just assume ANSI almost everywhere + # red 31, yellow 33, green 32 + local $| = 1; + + $ENV{PERL_CANARY_STABILITY_COLOUR} ne 0 + and ((-t STDOUT and length $ENV{TERM}) or $ENV{PERL_CANARY_STABILITY_COLOUR}) + and print "\e[$_[0]m"; +} + +sub import { + my (undef, $distname, $minvers, $minperl) = @_; + + $ENV{PERL_CANARY_STABILITY_DISABLE} + and return; + + $minperl ||= 5.008002; + + print <<EOF; + +*** +*** Canary::Stability COMPATIBILITY AND SUPPORT CHECK +*** ================================================= +*** +*** Hi! +*** +*** I do my best to provide predictable and reliable software. +*** +*** However, in recent releases, P5P (who maintain perl) have been +*** introducing regressions that are sometimes subtle and at other times +*** catastrophic, often for personal preferences with little or no concern +*** for existing code, most notably CPAN. +*** +*** For this reason, it has become very hard for me to maintain the level +*** of reliability and support I have committed myself to in the past, at +*** least with some perl versions: I simply can't keep up working around new +*** bugs or gratituous incompatibilities, and in turn you might suffer from +*** unanticipated problems. +*** +*** Therefore I have introduced a support and compatibility check, the results +*** of which follow below, together with a FAQ and some recommendations. +*** +*** This check is just to let you know that there might be a risk, so you can +*** make judgement calls on how to proceed - it will not keep the module from +*** installing or working. +*** +EOF + + if ($minvers > $VERSION) { + sgr 33; + print <<EOF; +*** The stability canary says: (nothing, it died of old age). +*** +*** Your Canary::Stability module (used by $distname) is too old. +*** This is not a fatal problem - while you might want to upgrade to version +*** $minvers (currently installed version: $VERSION) to get better support +*** status testing, you might also not want to care at all, and all will +*** be well as long $distname works well enough for you, as the stability +*** canary is only used when installing the distribution. +EOF + } elsif ($] < $minperl) { + + sgr 33; + print <<EOF; +*** The stability canary says: chirp (it seems concerned about something). +*** +*** Your perl version ($]) is older than the $distname distribution +*** likes ($minperl). This is not a fatal problem - the module might work +*** well with your version of perl, but it does mean the author likely +*** won't do anything to make it work if it breaks. +EOF + } elsif (defined $Internals::StabilityBranchVersion) { + # note to people studying this modules sources: + # the above test is not considered a clean or stable way to + # test for the stability branch. + + sgr 32; + print <<EOF; +*** The stability canary says: chirp! chirp! (it seems to be quite excited) +*** +*** It seems you are running schmorp's stability branch of perl. +*** All should be well, and if it isn't, you should report this as a bug +*** to the $distname author. +EOF + } elsif ($] < 5.021) { + #sgr 32; + print <<EOF; +*** The stability canary says: chirp! chirp! (it seems to be quite happy) +*** +*** Your version of perl ($]) is quite supported by $distname, nothing +*** else to be said, hope it comes in handy. +EOF + } else { + sgr 31; + print <<EOF; +*** The stability canary says: (nothing, it was driven away by harsh weather) +*** +*** It seems you are running perl version $], likely the "official" or +*** "standard" version. While there is nothing wrong with doing that, +*** standard perl versions 5.022 and up are not supported by $distname. +*** While this might be fatal, it might also be all right - if you run into +*** problems, you might want to downgrade your perl or switch to the +*** stability branch. +*** +*** If everything works fine, you can ignore this message. +EOF + sgr 0; + print <<EOF; +*** +*** Stability canary mini-FAQ: +*** +*** Do I need to do anything? +*** With luck, no. While some distributions are known to fail +*** already, most should probably work. This message is here +*** to alert you that your perl is not supported by $distname, +*** and if things go wrong, you either need to downgrade, or +*** sidegrade to the stability variant of your perl version, +*** or simply live with the consequences. +*** +*** What is this canary thing? +*** It's purpose is to check support status of $distname with +*** respect to your perl version. +*** +*** What is this "stability branch"? +*** It's a branch or fork of the official perl, by schmorp, to +*** improve stability and compatibility with existing modules. +*** +*** How can I skip this prompt on automated installs? +*** Set PERL_CANARY_STABILITY_NOPROMPT=1 in your environment. +*** More info is in the Canary::Stability manpage. +*** +*** Long version of this FAQ: http://stableperl.schmorp.de/faq.html +*** Stability Branch homepage: http://stableperl.schmorp.de/ +*** + +EOF + + unless ($ENV{PERL_CANARY_STABILITY_NOPROMPT}) { + require ExtUtils::MakeMaker; + + ExtUtils::MakeMaker::prompt ("Continue anyways? ", "y") =~ /^y/i + or die "FATAL: User aborted configuration of $distname.\n"; + } + } + + sgr 0; +} + +=head1 ENVIRONMENT VARIABLES + +=over 4 + +=item C<PERL_CANARY_STABILITY_NOPROMPT=1> + +Do not prompt the user on alert messages. + +=item C<PERL_CANARY_STABILITY_COLOUR=0> + +Disable use of colour. + +=item C<PERL_CANARY_STABILITY_COLOUR=1> + +Force use of colour. + +=item C<PERL_CANARY_STABILITY_DISABLE=1> + +Disable this modules functionality completely. + +=back + +=head1 AUTHOR + + Marc Lehmann <schmorp@schmorp.de> + http://software.schmorp.de/pkg/Canary-Stability.html + +=cut + +1 + |