File Coverage

blib/lib/Devel/Platform/Info/Mac.pm
Criterion Covered Total %
statement 43 43 100.0
branch 10 14 71.4
condition n/a
subroutine 7 7 100.0
pod 2 2 100.0
total 62 66 93.9


line stmt bran cond sub pod time code
1             package Devel::Platform::Info::Mac;
2              
3 6     6   36277 use strict;
  6         8  
  6         180  
4 6     6   20 use warnings;
  6         8  
  6         158  
5              
6 6     6   20 use vars qw($VERSION);
  6         6  
  6         2497  
7             $VERSION = '0.15';
8              
9             #-------------------------------------------------------------------------------
10              
11             sub new {
12 2     2 1 6403 my ($class) = @_;
13 2         5 my $self = {};
14 2         4 bless $self, $class;
15              
16 2         4 return $self;
17             }
18              
19             #-------------------------------------------------------------------------------
20              
21             sub get_info {
22 6     6 1 7202 my $self = shift;
23 6         29 $self->{info}{osname} = 'Mac';
24 6         16 $self->{info}{osflag} = $^O;
25              
26 6         12 my $uname_s = $self->_command('uname -s');
27 6 100       211 if ($uname_s =~ /Darwin/i) {
28 4         8 $self->{info}{oslabel} = 'OS X';
29              
30 4         11 my $productversion = $self->_command('sw_vers -productVersion');
31 4 50       139 if ($productversion =~ /((\d+)\.(\d+)(\.(\d+))?)/) {
32 4         13 my ($version, $major, $minor) = ($1, $2, $3);
33 4         7 my $versions = _macos_versions();
34 4 50       16 if (my $codename = $versions->{"$major.$minor"}) {
35 4         7 $self->{info}{codename} = $codename;
36 4         16 $self->{info}{osvers} = $version;
37             }
38             }
39             }
40              
41 6 100       13 if (my $arch = $self->_command('uname -p')) {
42 5         131 chomp $arch;
43 5         8 $self->{info}{archname} = $arch;
44 5 50       15 $self->{info}{is32bit} = $arch !~ /_(64)$/ ? 1 : 0;
45 5 50       11 $self->{info}{is64bit} = $arch =~ /_(64)$/ ? 1 : 0;
46             }
47              
48 6 100       56 if (my $unamev = $self->_command('uname -v')) {
49 5         123 chomp $unamev;
50 5         8 $self->{info}{kernel} = $unamev;
51             }
52              
53 6         53 $self->_command('uname -a');
54              
55 6         166 return $self->{info};
56             }
57              
58              
59             #-------------------------------------------------------------------------------
60              
61             sub _command {
62 9     9   9 my $self = shift;
63 9         9 my $command = shift;
64 9         14 my $result = `$command`;
65 9         17 chomp $result;
66              
67 9         15 $self->{info}{source}{$command} = $result;
68              
69 9         18 return $result;
70             }
71              
72             #-------------------------------------------------------------------------------
73              
74             sub _macos_versions {
75             return {
76 4     4   30 '10.0' => 'Cheetah',
77             '10.1' => 'Puma',
78             '10.2' => 'Jaguar',
79             '10.3' => 'Panther',
80             '10.4' => 'Tiger',
81             '10.5' => 'Leopard',
82             '10.6' => 'Snow Leopard',
83             '10.7' => 'Lion',
84             '10.8' => 'Mountain Lion',
85             '10.9' => 'Mavericks',
86             '10.10' => 'Yosemite',
87             };
88             }
89              
90             #-------------------------------------------------------------------------------
91              
92             1;
93              
94             __END__