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   143216 use strict;
  6         28  
  6         180  
4 6     6   36 use warnings;
  6         18  
  6         170  
5              
6 6     6   29 use vars qw($VERSION);
  6         19  
  6         3305  
7             $VERSION = '1.00';
8              
9             #-------------------------------------------------------------------------------
10              
11             sub new {
12 2     2 1 8658 my ($class) = @_;
13 2         7 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 12041 my $self = shift;
23 6         40 $self->{info}{osname} = 'Mac';
24 6         23 $self->{info}{osflag} = $^O;
25              
26 6         17 my $uname_s = $self->_command('uname -s');
27 6 100       300 if ($uname_s =~ /Darwin/i) {
28 4         50 $self->{info}{oslabel} = 'OS X';
29              
30 4         22 my $productversion = $self->_command('sw_vers -productVersion');
31 4 50       221 if ($productversion =~ /((\d+)\.(\d+)(\.(\d+))?)/) {
32 4         18 my ($version, $major, $minor) = ($1, $2, $3);
33 4         10 my $versions = _macos_versions();
34 4 50       17 if (my $codename = $versions->{"$major.$minor"}) {
35 4         9 $self->{info}{codename} = $codename;
36 4         18 $self->{info}{osvers} = $version;
37             }
38             }
39             }
40              
41 6 100       16 if (my $arch = $self->_command('uname -p')) {
42 5         193 chomp $arch;
43 5         10 $self->{info}{archname} = $arch;
44 5 50       27 $self->{info}{is32bit} = $arch !~ /_(64)$/ ? 1 : 0;
45 5 50       17 $self->{info}{is64bit} = $arch =~ /_(64)$/ ? 1 : 0;
46             }
47              
48 6 100       75 if (my $unamev = $self->_command('uname -v')) {
49 5         214 chomp $unamev;
50 5         12 $self->{info}{kernel} = $unamev;
51             }
52              
53 6         77 $self->_command('uname -a');
54              
55 6         249 return $self->{info};
56             }
57              
58              
59             #-------------------------------------------------------------------------------
60              
61             sub _command {
62 9     9   13 my $self = shift;
63 9         15 my $command = shift;
64 9         19 my $result = `$command`;
65 9         26 chomp $result;
66              
67 9         20 $self->{info}{source}{$command} = $result;
68              
69 9         20 return $result;
70             }
71              
72             #-------------------------------------------------------------------------------
73              
74             sub _macos_versions {
75             return {
76 4     4   36 '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__