use strict;
use warnings;
use lib "install_util";
use File::Spec;
use File::Basename;
use FindBin;
use Module::Build;
use Test::More 'no_plan';
use Capture::Tiny qw/ capture /;
compiles_ok( $_ ) for files_to_check();
############# subs ################
sub files_to_check {
unless( -d 'cgi-bin' && -d 'bin' ) {
chdir File::Spec->catfile( $FindBin::Bin, File::Spec->updir );
}
return
map { glob "$_/*" }
'cgi-bin', 'bin';
}
sub compiles_ok {
my @abspath = @_;
my $basename = $abspath[-1];
my $cat_path = File::Spec->catfile( @abspath );
SKIP: {
skip "explicitly skipping $cat_path", 1 if skip_file($cat_path);
my ($stdout, $stderr) = capture {
system $^X, '-cw', $cat_path
};
if ( $? == 0 ) {
ok( 1, "$cat_path compiled ok" )
or diag $stderr;
like( $stderr, qr/syntax OK\n$/, qq|$cat_path stderr said "syntax OK"| )
or diag $stderr;
} elsif ( $stderr =~ /^Can't locate (\S+) in \@INC/ && missing_recommend($1) ) {
ok( 1, "$cat_path does not compile due to missing recommend" );
} else {
ok( 0, "$cat_path compiled ok" );
diag "stdout: $stdout";
diag "stderr: $stderr";
}
chomp $stdout;
is( $stdout, '', "$cat_path nothing on stdout" );
}
}
my $missing_recommends;
sub missing_recommend {
my $modname = shift;
$modname =~ s/\.pm$//;
$modname =~ s![\\/]!::!g;
$missing_recommends
||= Module::Build->current->prereq_failures ? Module::Build->current->prereq_failures->{recommends}
: {};
return $missing_recommends->{$modname};
}
sub skip_file {
my $file = shift;
my %skip = map { $_ => 1 }
qw(
gbrowse_netinstall.pl
gbrowse_netinstall2.pl
process_wormbase.pl
gbrowse_gmap
make_das_conf.pl
);
return $skip{ basename($file) };
}