summaryrefslogtreecommitdiff
path: root/Build.PL
diff options
context:
space:
mode:
Diffstat (limited to 'Build.PL')
-rw-r--r--Build.PL87
1 files changed, 87 insertions, 0 deletions
diff --git a/Build.PL b/Build.PL
new file mode 100644
index 0000000..d3b1d2f
--- /dev/null
+++ b/Build.PL
@@ -0,0 +1,87 @@
+use strict;
+use warnings;
+
+use Module::Build;
+
+# This version of Future contains an important bugfix around weak references
+# in sequence Futures. Unfortunately, a lot of existing CPAN code is known to
+# rely on this behaviour, and will break if this module is upgraded.
+#
+# Abort if any of the following modules are installed at versions less than
+# the first known-working version. They must be updated before Future can be
+# installed.
+my %FIXED = (
+ 'IO::Async' => '0.62',
+ 'IO::Async::SSL' => '0.14',
+ 'Net::Async::CassandraCQL' => '0.11',
+ 'Net::Async::FTP' => '0.08',
+ 'Net::Async::HTTP' => '0.34',
+ 'Net::Async::WebSocket' => '0.08',
+);
+
+my $printed;
+foreach my $module ( sort keys %FIXED ) {
+ my $needsver = $FIXED{$module};
+ ( my $modfile = "$module.pm" ) =~ s{::}{/}g;
+
+ next unless eval { require $modfile };
+ next if ( my $instver = $module->VERSION ) >= $needsver;
+
+ print STDERR "Installing this version of Future will fix a bug that the following installed\n".
+ "modules rely on. You must upgrade these modules to a later version after\n".
+ "Future is installed, or they will not work correctly.\n\n" unless $printed;
+
+ print STDERR " * $module (installed $instver; need at least $needsver)\n";
+ $printed++;
+}
+print STDERR "\n" if $printed;
+
+if( $printed and -t STDIN ) {
+ # Attended update; might as well ask the user to confirm and exit if not
+ my $reply = Module::Build->prompt(
+ "Are you still sure you wish to go ahead with this upgrade?\n" .
+ "[enter 'yes' to continue]: ",
+ "no"
+ );
+
+ die "Aborting install due to broken dependent modules\n" unless $reply =~ m/^y/i;
+}
+
+my $build = Module::Build->new(
+ module_name => 'Future',
+ test_requires => {
+ 'Test::Identity' => 0,
+ 'Test::Fatal' => 0,
+ 'Test::More' => '0.88', # done_testing
+ 'Test::Refcount' => 0,
+ },
+ requires => {
+ 'perl' => '5.008', # fails on 5.6 smokers; no idea why
+ 'Carp' => '1.25', # new message format with trailing period
+ 'Test::Builder::Module' => 0,
+ 'Time::HiRes' => 0,
+ },
+ meta_merge => {
+ # It's unlikely at the time of writing that any CPAN client actually
+ # pays attention to this field, but it's nice to declare it on CPAN
+ # anyway so people will know I want to use it; maybe one day clients
+ # will follow it...
+ x_breaks => { do {
+ map { $_ => "< $FIXED{$_}" } keys %FIXED
+ }},
+ },
+ configure_requires => {
+ 'Module::Build' => '0.4004', # test_requires
+ },
+ license => 'perl',
+ create_makefile_pl => 'traditional',
+ create_license => 1,
+ create_readme => 1,
+ meta_merge => {
+ resources => {
+ x_IRC => "irc://irc.perl.org/#io-async",
+ },
+ },
+);
+
+$build->create_build_script;