summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/site/lib/Canary/Stability.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/site/lib/Canary/Stability.pm')
-rw-r--r--Master/tlpkg/tlperl/site/lib/Canary/Stability.pm207
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
+