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 )