Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

package BioGrepSkip;
use English qw( -no_match_vars );
sub check_prereq {
# check if some backend is found
my %res = ( backend => 0, bioperl => 0, bioperl_run => 0, emboss => 0 );
my @backends = qw(vmatch guugle agrep );
BACKEND:
for my $backend (@backends) {
if (find_binary_in_path($backend) ne '') {
$res{backend} = 1;
last BACKEND;
}
}
eval { require Bio::Root::Root; };
$res{bioperl} = !$EVAL_ERROR;
eval { require Bio::Factory::EMBOSS; };
$res{bioperl_run} = !$EVAL_ERROR;
$res{emboss} = 1 if find_binary_in_path('needle') ne '';
return %res;
}
sub skip_all {
my %prereq = check_prereq();
my $binary = shift;
if (defined $binary) {
set_path($binary);
if (!find_binary_in_path( $binary ) ) {
return (1, "$binary not in path");
}
}
if ( !$prereq{bioperl} ) {
return (1, 'Bioperl not found');
}
elsif ( !$prereq{bioperl_run} ) {
return (1, 'Bioperl-run not found');
}
else {
return (0, '');
}
}
sub find_binary_in_path {
my ( $name ) = @_;
my @PATH = File::Spec->path();
foreach my $path (@PATH) {
if ( -e $path . "/$name" && !-d $path . "/$name") {
return $path ;
}
}
return '';
}
sub set_path {
my ( @execs) = @_;
my @paths = ( '/bin', '/usr/bin' );
foreach my $exec (@execs) {
my $path = find_binary_in_path($exec);
push @paths, $path if $path ne '';
}
( $ENV{PATH} ) = join(':', @paths) =~ /(.*)/;
}
1;