package Module::Install::With;

# See POD at end for docs

use strict;
use Module::Install::Base ();

use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
	$VERSION = '1.19';
	@ISA     = 'Module::Install::Base';
	$ISCORE  = 1;
}

=pod

=head1 NAME

Module::Install::With - find environnement for Module::Install

=cut

#####################################################################
# Installer Target

# Are we targeting ExtUtils::MakeMaker (running as Makefile.PL)
sub eumm {
	!! ($0 =~ /Makefile.PL$/i);
}

# You should not be using this, but we'll keep the hook anyways
sub mb {
	!! ($0 =~ /Build.PL$/i);
}





#####################################################################
# Testing and Configuration Contexts

=pod

=head2 interactive

The C<interactive> function tests for an install that has a user present
(or at least, one in which it is reasonable for us to present prompts
and other similar types of things).

Returns true if in an interactive environment, or false otherwise.

=cut

sub interactive {
	# Treat things interactively ONLY based on input
	!! (-t STDIN and ! automated_testing());
}

=pod

=head2 automated_testing

Are we currently running in an automated testing environment, such as
CPAN Testers.

This is primarily a cleaner and more human-readable equivalent of
checking $ENV{AUTOMATED_TESTING} yourself, but may be improved in line
with best practices at a later date.

=cut

sub automated_testing {
	!! $ENV{AUTOMATED_TESTING};
}

=pod

=head2 release_testing

Are we currently running in an release testing environment. That is,
are we in the process of running in a potential highly-intensive and
high dependency bloat testing process prior to packaging a module for
release.

This is primarily a cleaner and more human-readable equivalent of
checking $ENV{RELEASE_TESTING} yourself, but may be improved in line
with best practices at a later date.

=cut

sub release_testing {
	!! $ENV{RELEASE_TESTING};
}

sub author_context {
	!! $Module::Install::AUTHOR;
}





#####################################################################
# Operating System Convenience

=pod

=head2 win32

The C<win32> function tests if the Makefile.PL is currently running in a
native Microsoft Windows Perl, such as ActivePerl or Strawberry Perl.

This is primarily a cleaner and more human-readable equivalent of
checking C<$^O eq 'MSWin32'> yourself, but may be improved in line
with best practices at a later date.

=cut

sub win32 {
	!! ($^O eq 'MSWin32');
}

=pod

=head2 winlike

The C<winlike> function tests if the Makefile.PL is currently running
in a Microsoft Windows Perl, under either cygwin or a native Win32 Perl.

This is primarily a cleaner and more human-readable equivalent of
checking C<$^O eq 'MSWin32' or $^O eq 'cygwin'>yourself, but may be
improved in line with best practices at a later date.

=cut

sub winlike {
	!! ($^O eq 'MSWin32' or $^O eq 'cygwin');
}

1;

=pod

=head1 SEE ALSO

L<Module::Install>

=head1 AUTHORS

Adam Kennedy E<lt>adamk@cpan.orgE<gt>

=head1 COPYRIGHT

Copyright 2007 - 2012 Adam Kennedy.

This program is free software; you can redistribute
it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the
LICENSE file included with this module.

=cut