[Bioperl-l] hardcoded paths in test scripts (II)

Todd Richmond todd@andrew2.stanford.edu
Tue, 27 Feb 2001 18:22:37 -0800


On 2/27/01 12:39 PM, "Hilmar Lapp" <hilmarl@yahoo.com> wrote:

> Gave it a second pass, and now hopefully none of these escaped
> anymore. Blast.t, Index.t, Variation_IO.t needed manual tuning,
> but now all tests pass.
> 
> If you're testing on a non-Unix platform (Todd, Shelly?), please
> make sure you get a fresh CVS update (allow 2 hrs for the next
> sync between anonymous cvs and development tree, if you use
> anonymous cvs for checkouts). Cross-platform problems due to a
> test script not finding its input file should be gone by now.
> 

Rooting around in the Root::IO.pm ...

    eval {
    require File::Spec;
    $FILESPECLOADED = 1;
    $TEMPDIR = File::Spec->tmpdir();
    $ROOTDIR = File::Spec->rootdir();
    require File::Temp; # tempfile creation
    };

This is a bad idea for now. File::Spec works just fine on MacOS so $TEMPDIR
and $ROOTDIR are set properly. File::Temp on the other hand, doesn't work
and so probably shouldn't be lumped into this eval.

Meanwhile the fix for cross-compatibility completely broke things on a Mac
:)

Here's a fix for Bio::Root::IO->catfile

sub catfile {
    my ($self, @args) = @_;

    if ($^O =~ /macos/i) {
        my $file = ':'. File::Spec->catfile(@args);
        return $file;
    }
    return File::Spec->catfile(@args) if(exists($INC{"File/Spec.pm"}));
    # this is clumsy and not very appealing, but how do we specify the
    # root directory?
    if($args[0] eq '/') {
    $args[0] = $ROOTDIR;
    }
    return join($PATHSEP, @args);
}

By the way, does if(exists($INC{"File/Spec.pm"})) actually work on Unix? In
certainly doesn't work on Macs - even if you change the '/' to ':' or '::'
I didn't worry about it because I'm pretty sure File::Spec is standard on
MacOS.

-- 
Dr Todd Richmond                 http://cellwall.stanford.edu/todd
Carnegie Institution             email: todd@andrew2.stanford.edu
Department of Plant Biology      fax: 1-650-325-6857
260 Panama Street                phone: 1-650-325-1521 x431
Stanford, CA 94305