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   33441 use strict;
  6         10  
  6         144  
4 6     6   21 use warnings;
  6         5  
  6         137  
5              
6 6     6   18 use vars qw($VERSION);
  6         7  
  6         2142  
7             $VERSION = '0.16';
8              
9             #-------------------------------------------------------------------------------
10              
11             sub new {
12 2     2 1 7831 my ($class) = @_;
13 2         5 my $self = {};
14 2         4 bless $self, $class;
15              
16 2         5 return $self;
17             }
18              
19             #-------------------------------------------------------------------------------
20              
21             sub get_info {
22 6     6 1 9488 my $self = shift;
23 6         23 $self->{info}{osname} = 'Mac';
24 6         14 $self->{info}{osflag} = $^O;
25              
26 6         14 my $uname_s = $self->_command('uname -s');
27 6 100       196 if ($uname_s =~ /Darwin/i) {
28 4         9 $self->{info}{oslabel} = 'OS X';
29              
30 4         9 my $productversion = $self->_command('sw_vers -productVersion');
31 4 50       131 if ($productversion =~ /((\d+)\.(\d+)(\.(\d+))?)/) {
32 4         11 my ($version, $major, $minor) = ($1, $2, $3);
33 4         8 my $versions = _macos_versions();
34 4 50       13 if (my $codename = $versions->{"$major.$minor"}) {
35 4         5 $self->{info}{codename} = $codename;
36 4         15 $self->{info}{osvers} = $version;
37             }
38             }
39             }
40              
41 6 100       13 if (my $arch = $self->_command('uname -p')) {
42 5         119 chomp $arch;
43 5         8 $self->{info}{archname} = $arch;
44 5 50       14 $self->{info}{is32bit} = $arch !~ /_(64)$/ ? 1 : 0;
45 5 50       10 $self->{info}{is64bit} = $arch =~ /_(64)$/ ? 1 : 0;
46             }
47              
48 6 100       58 if (my $unamev = $self->_command('uname -v')) {
49 5         111 chomp $unamev;
50 5         20 $self->{info}{kernel} = $unamev;
51             }
52              
53 6         54 $self->_command('uname -a');
54              
55 6         169 return $self->{info};
56             }
57              
58              
59             #-------------------------------------------------------------------------------
60              
61             sub _command {
62 9     9   7 my $self = shift;
63 9         8 my $command = shift;
64 9         10 my $result = `$command`;
65 9         16 chomp $result;
66              
67 9         11 $self->{info}{source}{$command} = $result;
68              
69 9         14 return $result;
70             }
71              
72             #-------------------------------------------------------------------------------
73              
74             sub _macos_versions {
75             return {
76 4     4   32 '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             '10.11' => 'El Capitan',
88             };
89             }
90              
91             #-------------------------------------------------------------------------------
92              
93             1;
94              
95             __END__