Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / perl-5.8.0 / lib / site_perl / 5.8.0 / Psh / Strategy / Darwin_apps.pm
CommitLineData
86530b38
AT
1package Psh::Strategy::Darwin_apps;
2
3
4=item * C<darwin_apps>
5
6This strategy will search for Mac OS X/Darwin .app bundles and
7execute them using the system 'open' command'
8
9=cut
10
11require Psh::Strategy;
12
13@Psh::Strategy::Darwin_apps::ISA=('Psh::Strategy');
14
15sub consumes {
16 return Psh::Strategy::CONSUME_TOKENS;
17}
18
19sub runs_before {
20 return qw(eval);
21}
22
23sub _recursive_search {
24 my $file= shift;
25 my $dir= shift;
26 my $lvl= shift;
27
28 opendir( DIR, $dir) || return ();
29 my @files= readdir(DIR);
30 closedir( DIR);
31 my @result= map { Psh::OS::catdir($dir,$_) }
32 grep { lc("$file.app") eq lc($_) } @files;
33 return $result[0] if @result;
34 if ($lvl<10) {
35 foreach my $tmp (@files) {
36 my $tmpdir= Psh::OS::catdir($dir,$tmp);
37 next if ! -d $tmpdir || !Psh::OS::no_upwards($tmp);
38 next if index($tmpdir,'.')>=0;
39 push @result, _recursive_search($file, $tmpdir, $lvl+1);
40 }
41 }
42 return $result[0] if @result;
43}
44
45
46sub applies {
47 my $com= @{$_[2]}->[0];
48 if ($com !~ m/$Psh::which_regexp/) { return ''; }
49 my $path=$ENV{APP_PATH}||'/Applications';
50 my @path= split /:/, $path;
51 my $executable;
52 foreach (@path) {
53 $executable= _recursive_search($com,$_,1);
54 last if $executable;
55 }
56 return $executable if defined $executable;
57 return '';
58}
59
60sub execute {
61 my $executable= $_[3];
62 my $tmp= CORE::system("/usr/bin/open $executable");
63 $tmp= $tmp/256;
64 return ($tmp==0, undef, undef, $tmp);
65}
66
671;