# This Makefile.PL for Rex was generated by
# Dist::Zilla::Plugin::MakeMaker::Awesome 0.49.
# Don't edit it but the dist.ini and plugins used to construct it.

use strict;
use warnings;

use 5.014004;
use ExtUtils::MakeMaker 7.1101;

if ( $^O eq 'MSWin32' ) {
  my ( undef, $major, $minor ) = Win32::GetOSVersion();

  if ( $major < 6 ) {
    die 'OS unsupported';
  }
  elsif ( $major == 6 && $minor < 2 ) {
    die 'OS unsupported';
  }
}

use File::ShareDir::Install;
$File::ShareDir::Install::INCLUDE_DOTFILES = 1;
$File::ShareDir::Install::INCLUDE_DOTDIRS = 1;
install_share dist => "share";

my %WriteMakefileArgs = (
  "ABSTRACT" => "the friendly automation framework",
  "AUTHOR" => "Jan Gehring <jfried\@rexify.org>",
  "CONFIGURE_REQUIRES" => {
    "CPAN::Meta::Requirements" => "2.120620",
    "ExtUtils::MakeMaker" => "7.1101",
    "File::ShareDir::Install" => "0.06",
    "Module::Metadata" => 0
  },
  "DISTNAME" => "Rex",
  "EXE_FILES" => [
    "bin/rex",
    "bin/rexify"
  ],
  "LICENSE" => "apache",
  "MIN_PERL_VERSION" => "5.014004",
  "NAME" => "Rex",
  "PREREQ_PM" => {
    "AWS::Signature4" => 0,
    "Carp" => 0,
    "Cwd" => 0,
    "Data::Dumper" => 0,
    "Data::Validate::IP" => 0,
    "Devel::Caller" => 0,
    "Digest::HMAC_SHA1" => 0,
    "Digest::MD5" => 0,
    "English" => 0,
    "Exporter" => 0,
    "Fcntl" => 0,
    "File::Basename" => 0,
    "File::Spec" => 0,
    "File::Spec::Unix" => 0,
    "File::Spec::Win32" => 0,
    "FindBin" => 0,
    "HTTP::Request" => 0,
    "HTTP::Request::Common" => 0,
    "Hash::Merge" => 0,
    "IO::File" => 0,
    "IO::Select" => 0,
    "IO::Socket" => 0,
    "IPC::Open3" => 0,
    "JSON::MaybeXS" => 0,
    "LWP::UserAgent" => 0,
    "List::Util" => "1.45",
    "MIME::Base64" => 0,
    "Module::Load::Conditional" => 0,
    "Net::OpenSSH::ShellQuoter" => 0,
    "POSIX" => 0,
    "Scalar::Util" => 0,
    "Sort::Naturally" => 0,
    "Storable" => 0,
    "Symbol" => 0,
    "Term::ANSIColor" => 0,
    "Term::ReadKey" => 0,
    "Test::Builder::Module" => 0,
    "Text::Glob" => 0,
    "Text::Wrap" => ">= 0, != 2023.0509",
    "Time::HiRes" => 0,
    "UNIVERSAL" => 0,
    "URI" => 0,
    "URI::QueryParam" => 0,
    "XML::Simple" => 0,
    "YAML" => ">= 0, != 1.25",
    "attributes" => 0,
    "base" => 0,
    "constant" => 0,
    "if" => 0,
    "lib" => 0,
    "overload" => 0,
    "strict" => 0,
    "vars" => 0,
    "version" => 0,
    "warnings" => 0
  },
  "TEST_REQUIRES" => {
    "File::Find" => 0,
    "File::Temp" => 0,
    "String::Escape" => 0,
    "Sub::Override" => 0,
    "Test::Deep" => 0,
    "Test::Exception" => 0,
    "Test::More" => 0,
    "Test::Output" => 0,
    "Test::UseAllModules" => 0,
    "Test::Warnings" => 0,
    "autodie" => 0,
    "utf8" => 0
  },
  "VERSION" => "1.16.0",
  "test" => {
    "TESTS" => "t/*.t t/commands/*.t t/issue/*.t t/scm/*.t"
  }
);

my %FallbackPrereqs = (
  "AWS::Signature4" => 0,
  "Carp" => 0,
  "Cwd" => 0,
  "Data::Dumper" => 0,
  "Data::Validate::IP" => 0,
  "Devel::Caller" => 0,
  "Digest::HMAC_SHA1" => 0,
  "Digest::MD5" => 0,
  "English" => 0,
  "Exporter" => 0,
  "Fcntl" => 0,
  "File::Basename" => 0,
  "File::Find" => 0,
  "File::Spec" => 0,
  "File::Spec::Unix" => 0,
  "File::Spec::Win32" => 0,
  "File::Temp" => 0,
  "FindBin" => 0,
  "HTTP::Request" => 0,
  "HTTP::Request::Common" => 0,
  "Hash::Merge" => 0,
  "IO::File" => 0,
  "IO::Select" => 0,
  "IO::Socket" => 0,
  "IPC::Open3" => 0,
  "JSON::MaybeXS" => 0,
  "LWP::UserAgent" => 0,
  "List::Util" => "1.45",
  "MIME::Base64" => 0,
  "Module::Load::Conditional" => 0,
  "Net::OpenSSH::ShellQuoter" => 0,
  "POSIX" => 0,
  "Scalar::Util" => 0,
  "Sort::Naturally" => 0,
  "Storable" => 0,
  "String::Escape" => 0,
  "Sub::Override" => 0,
  "Symbol" => 0,
  "Term::ANSIColor" => 0,
  "Term::ReadKey" => 0,
  "Test::Builder::Module" => 0,
  "Test::Deep" => 0,
  "Test::Exception" => 0,
  "Test::More" => 0,
  "Test::Output" => 0,
  "Test::UseAllModules" => 0,
  "Test::Warnings" => 0,
  "Text::Glob" => 0,
  "Text::Wrap" => ">= 0, != 2023.0509",
  "Time::HiRes" => 0,
  "UNIVERSAL" => 0,
  "URI" => 0,
  "URI::QueryParam" => 0,
  "XML::Simple" => 0,
  "YAML" => ">= 0, != 1.25",
  "attributes" => 0,
  "autodie" => 0,
  "base" => 0,
  "constant" => 0,
  "if" => 0,
  "lib" => 0,
  "overload" => 0,
  "strict" => 0,
  "utf8" => 0,
  "vars" => 0,
  "version" => 0,
  "warnings" => 0
);

# inserted by Dist::Zilla::Plugin::DynamicPrereqs 0.040
requires('IPC::Shareable')
  if has_module('IPC::Shareable')
    || prompt('install Support custom output formatters? [y/N]', 'N') =~ /^y/i;
requires('DBI')
  if has_module('DBI')
    || prompt('install Support database tasks and describing host groups in a database? [y/N]', 'N') =~ /^y/i;
requires('XML::LibXML')
  if has_module('XML::LibXML')
    || prompt('install Support describing host groups in XML format? [y/N]', 'N') =~ /^y/i;

requires('Expect')
  if has_module('Expect')
    || prompt('install Support rsync tasks? [y/N]', 'N') =~ /^y/i;

unless ( eval { ExtUtils::MakeMaker->VERSION('6.63_03') } ) {
  delete $WriteMakefileArgs{TEST_REQUIRES};
  delete $WriteMakefileArgs{BUILD_REQUIRES};
  $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
}

delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
  unless eval { ExtUtils::MakeMaker->VERSION(6.52) };

if ( $^O !~ /MSWin/i ) {
	$WriteMakefileArgs{PREREQ_PM}{'IO::Pty'} = $FallbackPrereqs{'IO::Pty'} = '0';
	$WriteMakefileArgs{PREREQ_PM}{'Net::OpenSSH'} = $FallbackPrereqs{'Net::OpenSSH'} = '0';
	$WriteMakefileArgs{PREREQ_PM}{'Net::SFTP::Foreign'} = $FallbackPrereqs{'Net::SFTP::Foreign'} = '0';
}

if ( $^O =~ /MSWin/i ) {
	$WriteMakefileArgs{PREREQ_PM}{'Net::SSH2'} = $FallbackPrereqs{'Net::SSH2'} = '0';
	$WriteMakefileArgs{PREREQ_PM}{'Win32::Console::ANSI'} = $FallbackPrereqs{'Win32::Console::ANSI'} = '0';
}

if ( $^O eq 'darwin' ) {
	$WriteMakefileArgs{PREREQ_PM}{'IO::Pty'} = $FallbackPrereqs{'IO::Pty'} = '!= 1.18';
}

WriteMakefile(%WriteMakefileArgs);

{
package
MY;
use File::ShareDir::Install qw(postamble);
}

# inserted by Dist::Zilla::Plugin::DynamicPrereqs 0.040
sub _add_prereq {
  my ($mm_key, $module, $version_or_range) = @_;
  $version_or_range ||= 0;
  warn "$module already exists in $mm_key (at version $WriteMakefileArgs{$mm_key}{$module}) -- need to do a sane metamerge!"
    if exists $WriteMakefileArgs{$mm_key}{$module}
      and $WriteMakefileArgs{$mm_key}{$module} ne '0'
      and $WriteMakefileArgs{$mm_key}{$module} ne $version_or_range;
  warn "$module already exists in FallbackPrereqs (at version $FallbackPrereqs{$module}) -- need to do a sane metamerge!"
    if exists $FallbackPrereqs{$module} and $FallbackPrereqs{$module} ne '0'
        and $FallbackPrereqs{$module} ne $version_or_range;
  $WriteMakefileArgs{$mm_key}{$module} = $FallbackPrereqs{$module} = $version_or_range;
  return;
}

sub has_module {
  my ($module, $version_or_range) = @_;
  require Module::Metadata;
  my $mmd = Module::Metadata->new_from_module($module);
  return undef if not $mmd;
  return $mmd->version($module) if not defined $version_or_range;

  require CPAN::Meta::Requirements;
  my $req = CPAN::Meta::Requirements->new;
  $req->add_string_requirement($module => $version_or_range);
  return 1 if $req->accepts_module($module => $mmd->version($module));
  return 0;
}

sub requires { goto &runtime_requires }

sub runtime_requires {
  my ($module, $version_or_range) = @_;
  _add_prereq(PREREQ_PM => $module, $version_or_range);
}