Sys-Info-Driver-OSX
view release on metacpan or search on metacpan
lib/Sys/Info/Driver/OSX/OS.pm view on Meta::CPAN
license => '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.html',
server_version => '/System/Library/CoreServices/ServerVersion.plist',
cdis => '/var/log/CDIS.custom',
);
my $XEDITION = {
# taken from Wikipedia
0 => 'Cheetah',
1 => 'Puma',
2 => 'Jaguar',
3 => 'Panther',
4 => 'Tiger',
5 => 'Leopard',
6 => 'Snow Leopard',
7 => 'Lion',
8 => 'Mountain Lion',
9 => 'Mavericks',
10 => 'Yosemite',
11 => 'El Capitan',
12 => 'Sierra',
13 => 'High Sierra',
14 => 'Mojave',
15 => 'Catalina',
};
my $MACOS = {
11 => 'Big Sur',
12 => 'Monterey',
13 => 'Ventura',
14 => 'Sonoma',
15 => 'Sequoia',
};
# unimplemented
sub logon_server {}
sub edition {
my $self = shift->_populate_osversion;
return $OSVERSION{RAW}->{EDITION};
}
sub tz {
my $self = shift;
return POSIX::strftime('%Z', localtime);
}
sub meta {
my $self = shift;
$self->_populate_osversion;
require POSIX;
require Sys::Info::Device;
my $cpu = Sys::Info::Device->new('CPU');
my $arch = ($cpu->identify)[0]->{architecture};
my %swap = $self->_probe_swap;
my %vm_stat = vm_stat();
my %info;
# http://jaharmi.com/2007/05/11/read_the_mac_os_x_edition_and_version_from_prope
# desktop: /System/Library/CoreServices/SystemVersion.plist
my $has_server = -e $FILE{server_version};
$info{manufacturer} = 'Apple Inc.';
$info{build_type} = $has_server ? 'Server' : 'Desktop';
$info{owner} = undef;
$info{organization} = undef;
$info{product_id} = undef;
$info{install_date} = $self->_install_date;
$info{boot_device} = undef;
$info{physical_memory_total} = fsysctl('hw.memsize');
$info{physical_memory_available} = $vm_stat{memory_free};
$info{page_file_total} = $swap{total};
$info{page_file_available} = $swap{free};
# windows specific
$info{windows_dir} = undef;
$info{system_dir} = undef;
$info{system_manufacturer} = 'Apple Inc.';
$info{system_model} = undef; # iMac/MacBook ???
$info{system_type} = sprintf '%s based Computer', $arch;
$info{page_file_path} = $swap{path};
return %info;
}
sub tick_count {
my $self = shift;
return time - $self->uptime;
}
sub name {
my($self, @args) = @_;
$self->_populate_osversion;
my %opt = @args % 2 ? () : @args;
my $id = $opt{long} ? ($opt{edition} ? 'LONGNAME_EDITION' : 'LONGNAME')
: ($opt{edition} ? 'NAME_EDITION' : 'NAME' )
;
return $OSVERSION{ $id };
}
sub version { shift->_populate_osversion(); return $OSVERSION{VERSION} }
sub build { shift->_populate_osversion(); return $OSVERSION{RAW}->{BUILD} }
sub uptime {
my $key = 'kern.boottime';
my $value = fsysctl $key;
my $sec = _parse_uptime( $value, $key );
croak "Bogus data returned from $key: $value" if ! $sec;
return $sec;
}
sub _parse_uptime {
my($value, $key, $use_gmtime) = @_;
if ( my @m = $value =~ m<\A[{](.+?)[}]\s+?(.+?)\z>xms ) {
my($data, $stamp) = @m;
( run in 1.107 second using v1.01-cache-2.11-cpan-39bf76dae61 )