annotate variant_effect_predictor/Bio/EnsEMBL/Analysis/Programs.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 package Bio::EnsEMBL::Analysis::Programs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 use vars qw( %Program_Paths );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 use Carp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 use Cwd;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 use Sys::Hostname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 use Bio::EnsEMBL::Utils::Exception qw ( throw ) ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 sub import {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 my $pkg = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 foreach (@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 #print STDERR "importing: $_\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 $Program_Paths{ $_ } = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 my( $home, @PATH, @missing );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 $home = cwd() or die "Can't save cwd";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 my $H = [ $home, 1 ];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 @PATH = split /:/, $ENV{'PATH'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 foreach (@PATH) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 s|/?$|/|; # Append / to each path
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 # For each program, check there is an executable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 foreach my $program (keys %Program_Paths) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 # Deal with paths
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 if ($program =~ m|/|) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 _go_home( $H );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 my $path = $program;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 # Deal with tildes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 $path =~ s{^~([^/]*)}{ $1 ? (getpwnam($1))[7]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 : (getpwuid($>))[7] }e;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 if (my $real = _is_prog( $H, $path )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 $Program_Paths{ $program } = $real;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 # Or search through all paths
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 foreach my $path (@PATH) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 _go_home( $H );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 if (my $real = _is_prog( $H, $path, $program )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 $Program_Paths{ $program } = $real;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 _go_home( $H ); # Return to home directory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 # Make a list of all missing programs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 foreach my $program (keys %Program_Paths) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 push( @missing, $program ) unless $Program_Paths{ $program };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 # Give informative death message if programs weren't found
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 if (@missing) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 throw("Unable to locate the following programs as '". (getpwuid($<))[0]. "' on host '". hostname(). "' :\t".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 join ( " --> " , @missing )) ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 # Recursive function which follows links, or tests final destination
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 sub _is_prog {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 my( $h, $path, $prog ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 # Need to split path if $prog not provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 unless ($prog) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 ($path, $prog) = $path =~ m|(.*?)([^/]+)$|;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 if (-l "$path$prog") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 # Follow link
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 _follow( $h, $path ) or return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 unless (-x readlink($prog)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 confess "Can't read link '$path$prog' : $!";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 my $link = $prog;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 $path = cwd() or confess "Can't determine cwd";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 return "$path/$prog";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 } elsif (-f _ and -x _) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 # Return full path
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 _follow( $h, $path ) or return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 $path = cwd() or confess "Can't determine cwd";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 return "$path/$prog";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 # Not a link or an executable plain file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 # To avoid unnecessary chdir'ing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 sub _follow {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 my( $H, $path ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 # Chdir without arguments goes to home dir.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 # Can't use defined in test since $path may contain
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 # a real null string.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 if ( ! $path and $path ne '0' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 } elsif (chdir($path)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 $H->[1] = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 sub _go_home {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 my( $H ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 # Go home unless we're already there
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 if ($H->[1] == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 if (chdir( $H->[0] )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 $H->[1] = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 confess "Can't go home to [ ", $H->[0], ' ]';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 __END__
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 =head1 NAME Programs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 =head1 SYSNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 use Bio::EnsEMBL::Analysis::Programs qw( efetch getz est2genome
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 /usr/local/bin/this_one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 ~me/some/path/my_prog
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 ~/../jane/bin/her_prog );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 # Can also do at run time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 Bio::EnsEMBL::Analysis::Programs->import( $someProg );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 $path_to_prog = $Bio::EnsEMBL::Analysis::Programs::Program_Paths{ $prog };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 B<Programs> is used to check at compile time for the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 presence of executables which will be called from your
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 script. Arguments passed via the use statement
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 can be just the program name, or an absolute or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 relative path to the program. Tildes are expanded
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 correctly (I<not> using "glob"). Failure to find any
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 one program is fatal, and a list of all failures is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 printed, along with the host''s name.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 If you want to check for a program during run time,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 the import funtion can be called directly, as shown above.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 The paths to each program found are stored in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 B<%Program_Paths> hash, which is keyed on the original
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 arguments passed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 =head1 BUGS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 If the executable is in the root directory, then it''s found
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 path will appear as "//prog" in %Program_Paths, not "/prog".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 =head1 AUTHOR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 B<James Gilbert> Email jgrg@sanger.ac.uk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196