Make
view release on metacpan or search on metacpan
lib/Make.pm view on Meta::CPAN
package Make;
use strict;
use warnings;
our $VERSION = '2.011';
use Carp qw(confess croak);
use Config;
use Cwd;
use File::Spec;
use Make::Target ();
use Make::Rule ();
use File::Temp;
use Text::Balanced qw(extract_bracketed);
use Text::ParseWords qw(parse_line);
use File::Spec::Functions qw(file_name_is_absolute);
## no critic (ValuesAndExpressions::ProhibitConstantPragma)
use constant DEBUG => $ENV{MAKE_DEBUG};
## use critic
require Make::Functions;
my $DEFAULTS_AST;
my %date;
my %fs_function_map = (
glob => sub { glob $_[0] },
fh_open => sub { open my $fh, $_[0], $_[1] or confess "open @_: $!"; $fh },
fh_write => sub { my $fh = shift; print {$fh} @_ },
file_readable => sub { -r $_[0] },
mtime => sub { ( stat $_[0] )[9] },
is_abs => sub { goto &file_name_is_absolute },
);
my @RECMAKE_FINDS = ( \&_find_recmake_cd, );
sub _find_recmake_cd {
my ($cmd) = @_;
return unless $cmd =~ /\bcd\s+([^\s;&]+)\s*(?:;|&&)\s*make\s*(.*)/;
my ( $dir, $makeargs ) = ( $1, $2 );
require Getopt::Long;
local @ARGV = Text::ParseWords::shellwords($makeargs);
Getopt::Long::GetOptions( "f=s" => \my $makefile );
my ( $vars, $targets ) = parse_args(@ARGV);
return ( $dir, $makefile, $vars, $targets );
}
## no critic (Subroutines::RequireArgUnpacking Subroutines::RequireFinalReturn)
sub load_modules {
for (@_) {
my $pkg = $_; # to not mutate inputs
$pkg =~ s#::#/#g;
## no critic (Modules::RequireBarewordIncludes)
eval { require "$pkg.pm"; 1 } or die;
## use critic
}
}
sub phony {
my ( $self, $name ) = @_;
return exists $self->{PHONY}{$name};
}
sub suffixes {
my ($self) = @_;
## no critic (Subroutines::ProhibitReturnSort)
return sort keys %{ $self->{'SUFFIXES'} };
## use critic
}
sub target {
my ( $self, $target ) = @_;
unless ( exists $self->{Depend}{$target} ) {
my $t = $self->{Depend}{$target} = Make::Target->new( $target, $self );
if ( $target =~ /%/ ) {
$self->{Pattern}{$target} = $t;
}
elsif ( $target =~ /^\./ ) {
$self->{Dot}{$target} = $t;
}
}
return $self->{Depend}{$target};
}
sub has_target {
my ( $self, $target ) = @_;
confess "Trying to has_target undef value" unless defined $target;
return exists $self->{Depend}{$target};
}
sub targets {
my ($self) = @_;
## no critic ( BuiltinFunctions::RequireBlockGrep )
return grep !/%|^\./, keys %{ $self->{Depend} };
## use critic
}
# Utility routine for patching %.o type 'patterns'
my %pattern_cache;
sub patmatch {
my ( $pat, $target ) = @_;
( run in 1.494 second using v1.01-cache-2.11-cpan-5a3173703d6 )