use v5;
use strict;
use warnings;

use Config;
use Module::Build;
use XS::Parse::Keyword::Builder;
use XS::Parse::Sublike::Builder;

my @extra_compiler_flags = qw( -Ihax );

# MSWin32 needs NO_XSLOCKS to make longjmp work. I have no idea what this is
# about, I just stole it from Scope::Escape
#   https://metacpan.org/source/ZEFRAM/Scope-Escape-0.005/Build.PL#L25
if( $^O eq "MSWin32" ) {
   push @extra_compiler_flags, "-DNO_XSLOCKS=1";
}

# Thready perls before 5.22 are known to massively fail. For now lets just
# declare such perls unsupported
#   https://rt.cpan.org/Ticket/Display.html?id=124351
die "OS unsupported - threaded perl earlier than 5.22 (RT124351)"
   if $] < 5.022 and ( $Config{usethreads} || "" ) eq "define";

my $build = Module::Build->new(
   module_name => 'Future::AsyncAwait',
   requires => {
      'Future' => '0.48',
      'perl' => '5.016', # PL_keyword_plugin, pad_new(), CvDYNFILE, many tests fail on 5.14
      'XS::Parse::Keyword' => '0.13',
      'XS::Parse::Sublike' => '0.14',
   },
   test_requires => {
      'Test::Fatal' => 0,
      'Test::Future::Deferred' => 0,
      'Test::More' => '0.88', # done_testing
      'Test::Refcount' => '0.09',
   },
   configure_requires => {
      'Module::Build' => '0.4004', # test_requires
      'XS::Parse::Keyword::Builder' => '0.13',
      'XS::Parse::Sublike::Builder' => '0.14',
   },
   license => 'perl',
   create_license => 1,
   create_readme  => 1,
   meta_merge => {
      resources => {
         x_IRC => "irc://irc.perl.org/#io-async",
      },
   },

   extra_compiler_flags => \@extra_compiler_flags,
);

XS::Parse::Keyword::Builder->extend_module_build( $build );
XS::Parse::Sublike::Builder->extend_module_build( $build );

if( eval { require Devel::MAT::Dumper::Helper and
            Devel::MAT::Dumper::Helper->VERSION( '0.44' ) } ) {
   Devel::MAT::Dumper::Helper->extend_module_build( $build );
}

$build->create_build_script;