#!/usr/bin/perl

# BEGIN DATAPACK CODE
{
    my $toc;
    my $data_linepos = 1;
    unshift @INC, sub {
        $toc ||= do {

            my $fh = \*DATA;

        my $header_line;
        my $header_found;
        while (1) {
            my $header_line = <$fh>;
            defined($header_line)
                or die "Unexpected end of data section while reading header line";
            chomp($header_line);
            if ($header_line eq 'Data::Section::Seekable v1') {
                $header_found++;
                last;
            }
        }
        die "Can't find header 'Data::Section::Seekable v1'"
            unless $header_found;

        my %toc;
        my $i = 0;
        while (1) {
            $i++;
            my $toc_line = <$fh>;
            defined($toc_line)
                or die "Unexpected end of data section while reading TOC line #$i";
            chomp($toc_line);
            $toc_line =~ /\S/ or last;
            $toc_line =~ /^([^,]+),(\d+),(\d+)(?:,(.*))?$/
                or die "Invalid TOC line #$i in data section: $toc_line";
            $toc{$1} = [$2, $3, $4];
        }
        my $pos = tell $fh;
        $toc{$_}[0] += $pos for keys %toc;


            # calculate the line number of data section
            my $data_pos = tell(DATA);
            seek DATA, 0, 0;
            my $pos = 0;
            while (1) {
                my $line = <DATA>;
                $pos += length($line);
                $data_linepos++;
                last if $pos >= $data_pos;
            }
            seek DATA, $data_pos, 0;

            \%toc;
        };
        if ($toc->{$_[1]}) {
            seek DATA, $toc->{$_[1]}[0], 0;
            read DATA, my($content), $toc->{$_[1]}[1];
            my ($order, $lineoffset) = split(';', $toc->{$_[1]}[2]);
            $content =~ s/^#//gm;
            $content = "# line ".($data_linepos + $order+1 + $lineoffset)." \"".__FILE__."\"\n" . $content;
            open my $fh, '<', \$content
                or die "DataPacker error loading $_[1]: $!";
            return $fh;
        }
        return;
    };
}
# END DATAPACK CODE

require Data::Dumper;
require Devel::Platform::Info;

print Data::Dumper::Dumper(Devel::Platform::Info->new->get_info);

# ABSTRACT: Print platform information gathered by Devel::Platform::Info
# PODNAME: platform-info

__END__

=pod

=encoding UTF-8

=head1 NAME

platform-info - Print platform information gathered by Devel::Platform::Info

=head1 VERSION

This document describes version 0.001 of platform-info (from Perl distribution App-PlatformInfo), released on 2016-04-10.

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/App-PlatformInfo>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-App-PlatformInfo>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=App-PlatformInfo>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 AUTHOR

perlancar <perlancar@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2016 by perlancar@cpan.org.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut

__DATA__
Data::Section::Seekable v1
App/PlatformInfo.pm,28,137,0;0
Devel/Platform/Info.pm,196,2134,1;10
Devel/Platform/Info/BSD.pm,2365,1392,2;107
Devel/Platform/Info/BeOS.pm,3793,1527,3;163
Devel/Platform/Info/Irix.pm,5356,1316,4;227
Devel/Platform/Info/Linux.pm,6709,16943,5;283
Devel/Platform/Info/Mac.pm,23687,1971,6;704
Devel/Platform/Info/SCO.pm,25693,2502,7;794
Devel/Platform/Info/Solaris.pm,28234,1574,8;863
Devel/Platform/Info/Win32.pm,29845,3303,9;924

### App/PlatformInfo.pm ###
#package App::PlatformInfo;
#
#our $DATE = '2016-04-10'; 
#our $DIST = 'App-PlatformInfo'; 
#our $VERSION = '0.001'; 
#
#1;
#
#__END__
#
### Devel/Platform/Info.pm ###
#package Devel::Platform::Info;
#
#use strict;
#use warnings;
#
#use vars qw($VERSION);
#$VERSION = '0.15';
#
#
#my %map = (
#    'freebsd'       => 'BSD',
#    'openbsd'       => 'BSD',
#    'netbsd'        => 'BSD',
#    'mirbsd'        => 'BSD',
#    'dragonfly'     => 'BSD',
#    'midnightbsd'   => 'BSD',
#    
#    'irix'          => 'Irix',
#    
#    'linux'         => 'Linux',
#    'aix'           => 'Linux',
#    'bsdos'         => 'Linux',
#    'dgux'          => 'Linux',
#    'dynixptx'      => 'Linux',
#    'hpux'          => 'Linux',
#    'dec_osf'       => 'Linux',
#    'svr4'          => 'Linux',
#    'unicos'        => 'Linux',
#    'unicosmk'      => 'Linux',
#    'ultrix'        => 'Linux',
#    
#    'sco_sv'        => 'SCO',
#    'sco3'          => 'SCO',
#    'sco'           => 'SCO',
#
#    'solaris'       => 'Solaris',
#    'sunos'         => 'Solaris',
#
#    'beos'          => 'BeOS',
#
#    'dos'           => 'Win32',
#    'os2'           => 'Win32',
#    'mswin32'       => 'Win32',
#    'netware'       => 'Win32',
#    'cygwin'        => 'Win32',
#
#    'macos'         => 'Mac',
#    'rhapsody'      => 'Mac',
#    'darwin'        => 'Mac',
#
#    'vms'           => 'Linux',
#    'vos'           => 'Linux',
#    'os390'         => 'Linux',
#    'vmesa'         => 'Linux',
#    'riscos'        => 'Linux',
#    'amigaos'       => 'Linux',
#    'beos'          => 'Linux',
#    'machten'       => 'Linux',
#    'mpeix'         => 'Linux',
#    'bitrig'        => 'Linux',
#    'minix'         => 'Linux',
#    'nto'           => 'Linux',
#);
#
#
#sub new {
#    my ($class) = @_;
#    my $self    = {};
#    bless  $self, $class;
#    return $self;
#}
#
#sub get_info {
#    my $self  = shift;
#    my $data;
#
#    my $plugin = $map{ lc $^O } || 'Linux';
#
#    my $driver = 'Devel::Platform::Info::' . $plugin;
#    my $require = "$driver.pm";
#    $require =~ s!::!/!g;
#
#    eval {
#        require $require;
#        $self->{driver} = $driver->new();
#        $data = $self->{driver}->get_info();
#    };
#
#    $data->{error} = $@ if($@);
#
#    return $data;
#}
#
#1;
#
#__END__
#
### Devel/Platform/Info/BSD.pm ###
#package Devel::Platform::Info::BSD;
#
#use strict;
#use warnings;
#
#use vars qw($VERSION);
#$VERSION = '0.15';
#
#
#my %commands = (
#    '_uname1'   => 'uname -a',
#    '_uname2'   => 'uname -mrr',
#    'kname'     => 'uname -s',
#    'kvers'     => 'uname -r',
#    'osname'    => 'uname -o',
#    'archname'  => 'uname -m',
#);
#
#
#sub new {
#    my ($class) = @_;
#    my $self = {};
#    bless $self, $class;
#
#    return $self;
#}
#
#sub get_info {
#    my $self  = shift;
#
#    for my $cmd (keys %commands) {
#        $self->{cmds}{$cmd} = `$commands{$cmd} 2>/dev/null`;
#        $self->{cmds}{$cmd} =~ s/\s+$//s;
#        $self->{info}{$cmd} = $self->{cmds}{$cmd}   if($cmd !~ /^_/);
#    }
#
#    $self->{info}{osflag}   = $^O;
#    $self->{info}{kvers}    = lc $self->{info}{kvers};
#    $self->{info}{kernel}   = lc($self->{info}{kname}) . '-' . $self->{info}{kvers};
#    $self->{info}{osname}   = $self->{info}{kname};
#    $self->{info}{oslabel}  = $self->{info}{kname};
#    $self->{info}{osvers}   = $self->{info}{kvers};
#    $self->{info}{osvers}   =~ s/-release.*//;
#    $self->{info}{is32bit}  = $self->{info}{archname} !~ /(64|alpha)/ ? 1 : 0;
#    $self->{info}{is64bit}  = $self->{info}{archname} =~ /(64|alpha)/ ? 1 : 0;
#
#
#    $self->{info}{source}{$commands{$_}} = $self->{cmds}{$_}    for(keys %commands);
#    return $self->{info};
#}
#
#
#1;
#
#__END__
#
### Devel/Platform/Info/BeOS.pm ###
#package Devel::Platform::Info::BeOS;
#
#use strict;
#use warnings;
#
#use vars qw($VERSION);
#$VERSION = '0.15';
#
#
#my %commands = (
#    '_uname1'   => 'uname -a',
#    '_uname2'   => 'uname -mrr',
#    'kname'     => 'uname -s',
#    'kvers'     => 'uname -r',
#    'osname'    => 'uname -o',
#    'archname'  => 'uname -m',
#);
#
#
#sub new {
#    my ($class) = @_;
#    my $self = {};
#    bless $self, $class;
#
#    return $self;
#}
#
#sub get_info {
#    my $self  = shift;
#
#    for my $cmd (keys %commands) {
#        $self->{cmds}{$cmd} = `$commands{$cmd} 2>/dev/null`;
#        $self->{cmds}{$cmd} =~ s/\s+$//s;
#        $self->{info}{$cmd} = $self->{cmds}{$cmd}   if($cmd !~ /^_/);
#    }
#
#    $self->{info}{osflag}   = $^O;
#    $self->{info}{kvers}    = lc $self->{info}{kvers};
#    $self->{info}{kernel}   = lc($self->{info}{kname}) . '-' . $self->{info}{kvers};
#    $self->{info}{osname}   = $self->{info}{kname};
#    $self->{info}{oslabel}  = $self->{info}{kname};
#    $self->{info}{osvers}   = $self->{info}{kvers};
#    $self->{info}{osvers}   =~ s/-release.*//;
#    $self->{info}{is32bit}  = $self->{info}{archname} !~ /(64|alpha)/ ? 1 : 0;
#    $self->{info}{is64bit}  = $self->{info}{archname} =~ /(64|alpha)/ ? 1 : 0;
#
#    $self->{info}{source}{$commands{$_}} = $self->{cmds}{$_}    for(keys %commands);
#    return $self->{info};
#}
#
#sub _beos_versions {
#    return {
#        'R4.5'  => 'Genki',
#        'R5'    => 'Maui',
#        'R5.1'  => 'Dano',
#    };
#}
#
#
#
#1;
#
#__END__
#
### Devel/Platform/Info/Irix.pm ###
#package Devel::Platform::Info::Irix;
#
#use strict;
#use warnings;
#
#use vars qw($VERSION);
#$VERSION = '0.15';
#
#
#my %commands = (
#    '_issue1'   => 'cat /etc/issue',
#    '_issue2'   => 'cat /etc/.issue',
#    '_uname'    => 'uname -a',
#    'kname'     => 'uname -s',
#    'kvers'     => 'uname -r',
#    'osname'    => 'uname -o',
#    'archname'  => 'uname -m',
#
#    '_irix1'   => 'uname -R',   
#);
#
#
#sub new {
#    my ($class) = @_;
#    my $self = {};
#    bless $self, $class;
#
#    return $self;
#}
#
#sub get_info {
#    my $self  = shift;
#
#    for my $cmd (keys %commands) {
#        $self->{cmds}{$cmd} = `$commands{$cmd} 2>/dev/null`;
#        $self->{cmds}{$cmd} =~ s/\s+$//s;
#        $self->{info}{$cmd} = $self->{cmds}{$cmd}   if($cmd !~ /^_/);
#    }
#
#    $self->{info}{osflag}   = $^O;
#    $self->{info}{kernel}   = lc($self->{info}{kname}) . '-' . $self->{info}{kvers};
#    $self->{info}{osname}   = 'IRIX';
#    $self->{info}{oslabel}  = 'IRIX';
#    $self->{info}{osvers}   = $self->{info}{kvers};
#    $self->{info}{is32bit}  = $self->{info}{kname} !~ /64/ ? 1 : 0;
#    $self->{info}{is64bit}  = $self->{info}{kname} =~ /64/ ? 1 : 0;
#
#    $self->{info}{source}{$commands{$_}} = $self->{cmds}{$_}    for(keys %commands);
#    return $self->{info};
#}
#
#
#1;
#
#__END__
#
### Devel/Platform/Info/Linux.pm ###
#package Devel::Platform::Info::Linux;
#
#use strict;
#use warnings;
#
#use vars qw($VERSION);
#$VERSION = '0.15';
#
#
#
#my %commands = (
#    '_issue1'   => 'cat /etc/issue',
#    '_issue2'   => 'cat /etc/.issue',
#    '_uname'    => 'uname -a',
#    '_lsb'      => 'lsb_release -a',
#    'kname'     => 'uname -s',
#    'kvers'     => 'uname -r',
#    'osname'    => 'uname -o',
#    'archname'  => 'uname -m',
#);
#
#my %default = ();
#
#my %archlinux = (
#    '0.1'           => 'Homer',
#    '0.2'           => 'Vega',
#    '0.3'           => 'Firefly',
#    '0.4'           => 'Dragon',
#    '0.5'           => 'Nova',
#    '0.6'           => 'Widget',
#    '0.7'           => 'Wombat',
#    '0.8'           => 'Voodoo',
#    '2007.05'       => 'Duke',
#    '2007.08'       => "Don't Panic",
#    '2008.06'       => 'Overlord',
#    '2009.02'       => '2009.02',
#    '2009.08'       => '2009.08',
#    '2010.05'       => '2010.05',
#    '2011.08.19'    => '2011.08.19',
#);
#
#
#my %crunch = (
#    '8.04.02'       => 'Back in Black',
#    '10'            => 'Statler',
#    '11'            => 'Waldorf',
#);
#
#my %debian = (
#    '1.1'       => 'buzz',
#    '1.2'       => 'rex',
#    '1.3'       => 'bo',
#    '2.0'       => 'hamm',
#    '2.1'       => 'slink',
#    '2.2'       => 'potato',
#    '3.0'       => 'woody',
#    '3.1'       => 'sarge',
#    '4.0'       => 'etch',
#    '5.0'       => 'lenny',
#    '6.0'       => 'squeeze',
#    '7.0'       => 'wheezy',
#    '8.0'       => 'jessie',
#);
#
#
#my %fedora = (
#    '1'         => 'Yarrow',
#    '2'         => 'Tettnang',
#    '3'         => 'Heidelberg',
#    '4'         => 'Stentz',
#    '5'         => 'Bordeaux',
#    '6'         => 'Zod',
#    '7'         => 'Moonshine',
#    '8'         => 'Werewolf',
#    '9'         => 'Sulphur',
#    '10'        => 'Cambridge',
#    '11'        => 'Leonidas',
#    '12'        => 'Constantine',
#    '13'        => 'Goddard',
#    '14'        => 'Laughlin',
#    '15'        => 'Lovelock',
#    '16'        => 'Verne',
#    '17'        => 'Beefy Miracle',
#    '18'        => 'Spherical Cow',
#    '19'        => q[Schrdinger's Cat],
#    '20'        => 'Heisenbug',
#);
#
#my %mandriva = (
#    '5.1'       => 'Venice',
#    '5.2'       => 'Leeloo',
#    '5.3'       => 'Festen',
#    '6.0'       => 'Venus',
#    '6.1'       => 'Helios',
#    '7.0'       => 'Air',
#    '7.1'       => 'Helium',
#    '7.2'       => 'Odyssey (called Ulysses during beta)',
#    '8.0'       => 'Traktopel',
#    '8.1'       => 'Vitamin',
#    '8.2'       => 'Bluebird',
#    '9.0'       => 'Dolphin',
#    '9.1'       => 'Bamboo',
#    '9.2'       => 'FiveStar',
#    '10.0'      => 'Community and Official',
#    '10.1'      => 'Community',
#    '10.1'      => 'Official',
#    '10.2'      => 'Limited Edition 2005',
#    '2006.0'    => 'Mandriva Linux 2006',
#    '2007'      => 'Mandriva Linux 2007',
#    '2007.1'    => 'Mandriva Linux 2007 Spring',
#    '2008.0'    => 'Mandriva Linux 2008',
#    '2008.1'    => 'Mandriva Linux 2008 Spring',
#    '2009.0'    => 'Mandriva Linux 2009',
#    '2009.1'    => 'Mandriva Linux 2009 Spring',
#    '2010.0'    => 'Mandriva Linux 2010 (Adlie)',
#    '2010.1'    => 'Mandriva Linux 2010 Spring',
#    '2010.2'    => 'Mandriva Linux 2010.2',
#    '2011.0'    => 'Hydrogen',
#);
#
#my %redhat = (
#    '0.8'       => 'Preview',
#    '0.9'       => 'Halloween',
#    '1.0'       => q{Mother's Day},
#    '1.1'       => q{Mother's Day+0.1},
#    '2.0'       => '',
#    '2.1'       => '',
#    '3.0.3'     => 'Picasso',
#    '3.95'      => 'Rembrandt',
#    '4.0'       => 'Colgate',
#    '4.1'       => 'Vanderbilt',
#    '4.2'       => 'Biltmore',
#    '4.95'      => 'Thunderbird',
#    '4.96'      => 'Mustang',
#    '5.0'       => 'Hurricane',
#    '5.1'       => 'Manhattan',
#    '5.2'       => 'Apollo',
#    '5.9'       => 'Starbuck',
#    '6.0'       => 'Hedwig',
#    '6.0.95'    => 'Lorax',
#    '6.1'       => 'Cartman',
#    '6.1.95'    => 'Piglet',
#    '6.2'       => 'Zoot',
#    '6.2.98'    => 'Pinstripe',
#    '7'         => 'Guinness',
#    '7.0.90'    => 'Fisher',
#    '7.0.91'    => 'Wolverine',
#    '7.1'       => 'Seawolf',
#    '7.1.92'    => 'Roswell',
#    '7.2'       => 'Enigma',
#    '7.2.92'    => 'Skipjack',
#    '7.3'       => 'Valhalla',
#    '7.3.92'    => 'Limbo',
#    '7.3.93'    => 'Limbo',
#    '7.3.94'    => 'Null',
#    '8.0'       => 'Psyche',
#    '8.0.93'    => 'Phoebe',
#    '9'         => 'Shrike',
#    '9.0.93'    => 'Severn',
#);
#
#my %rhel = (
#    '2.1 AS'    => 'Pensacola',
#    '2.1'       => 'Pensacola',
#    '2.1.1'     => 'Pensacola',
#    '2.1.2'     => 'Pensacola',
#    '2.1.3'     => 'Pensacola',
#    '2.1.4'     => 'Pensacola',
#    '2.1.5'     => 'Pensacola',
#    '2.1.6'     => 'Pensacola',
#    '2.1.7'     => 'Pensacola',
#    '2.1 ES'    => 'Panama',
#    '3'         => 'Taroon',
#    '3.0'       => 'Taroon',
#    '3.1'       => 'Taroon',
#    '3.2'       => 'Taroon',
#    '3.3'       => 'Taroon',
#    '3.4'       => 'Taroon',
#    '3.5'       => 'Taroon',
#    '3.6'       => 'Taroon',
#    '3.7'       => 'Taroon',
#    '3.8'       => 'Taroon',
#    '3.9'       => 'Taroon',
#    '4'         => 'Nahant',
#    '4.1'       => 'Nahant',
#    '4.2'       => 'Nahant',
#    '4.3'       => 'Nahant',
#    '4.4'       => 'Nahant',
#    '4.5'       => 'Nahant',
#    '4.6'       => 'Nahant',
#    '4.7'       => 'Nahant',
#    '4.8'       => 'Nahant',
#    '4.9'       => 'Nahant',
#    '5'         => 'Tikanga',
#    '5.1'       => 'Tikanga',
#    '5.2'       => 'Tikanga',
#    '5.3'       => 'Tikanga',
#    '5.4'       => 'Tikanga',
#    '5.5'       => 'Tikanga',
#    '5.6'       => 'Tikanga',
#    '5.7'       => 'Tikanga',
#    '5.8'       => 'Tikanga',
#    '6'         => 'Santiago',
#    '6.1'       => 'Santiago',
#    '6.2'       => 'Santiago',
#    '6.3'       => 'Santiago',
#    '6.4'       => 'Santiago',
#    '6.5'       => 'Santiago',
#    '7'         => 'Maipo',
#);
#
#my %scientific = (
#    '3.0.1'     => 'Feynman',
#    '3.0.2'     => 'Feynman',
#    '3.0.3'     => 'Feynman',
#    '3.0.4'     => 'Feynman',
#    '3.0.5'     => 'Feynman',
#    '3.0.6'     => 'Feynman',
#    '3.0.7'     => 'Feynman',
#    '3.0.8'     => 'Feynman',
#    '3.0.9'     => 'Legacy',
#    '4.0'       => 'Beryllium',
#    '4.1'       => 'Beryllium',
#    '4.2'       => 'Beryllium',
#    '4.3'       => 'Beryllium',
#    '4.4'       => 'Beryllium',
#    '4.5'       => 'Beryllium',
#    '4.6'       => 'Beryllium',
#    '4.7'       => 'Beryllium',
#    '4.8'       => 'Beryllium',
#    '4.9'       => 'Beryllium',
#    '5.0'       => 'Boron',
#    '5.1'       => 'Boron',
#    '5.2'       => 'Boron',
#    '5.3'       => 'Boron',
#    '5.4'       => 'Boron',
#    '5.5'       => 'Boron',
#    '5.6'       => 'Boron',
#    '5.7'       => 'Boron',
#    '5.8'       => 'Boron',
#    '5.9'       => 'Boron',
#    '6.0'       => 'Carbon',
#    '6.1'       => 'Carbon',
#    '6.2'       => 'Carbon',
#    '6.3'       => 'Carbon',
#);
#
#my %ubuntu = (
#    '4.10'      => 'Warty Warthog',
#    '5.04'      => 'Hoary Hedgehog',
#    '5.10'      => 'Breezy Badger',
#    '6.06'      => 'Dapper Drake',
#    '6.10'      => 'Edgy Eft',
#    '7.04'      => 'Feisty Fawn',
#    '7.10'      => 'Gutsy Gibbon',
#    '8.04'      => 'Hardy Heron',
#    '8.10'      => 'Intrepid Ibex',
#    '9.04'      => 'Jaunty Jackalope',
#    '9.10'      => 'Karmic Koala',
#    '10.04'     => 'Lucid Lynx',
#    '10.10'     => 'Maverick Meerkat',
#    '11.04'     => 'Natty Narwhal',
#    '11.10'     => 'Oneiric Ocelot',
#    '12.04'     => 'Precise Pangolin',
#    '12.10'     => 'Quantal Quetzal',
#    '13.04'     => 'Raring Ringtail',
#    '13.10'     => 'Saucy Salamander',
#    '14.04'     => 'Trusty Tahr',
#    '14.10'     => 'Utopic Unicorn',
#);
#
#my %distributions = (
#    'Adamantix'                 => { codenames => \%default,                        files => [ qw( /etc/adamantix_version ) ] },
#    'Annvix'                    => { codenames => \%default,                        files => [ qw( /etc/annvix-release ) ] },
#    'Arch Linux'                => { codenames => \%archlinux,                      files => [ qw( /etc/arch-release ) ] },
#    'Arklinux'                  => { codenames => \%default,                        files => [ qw( /etc/arklinux-release ) ] },
#    'Aurox Linux'               => { codenames => \%default,                        files => [ qw( /etc/aurox-release ) ] },
#    'BlackCat'                  => { codenames => \%default,                        files => [ qw( /etc/blackcat-release ) ] },
#    'Cobalt'                    => { codenames => \%default,                        files => [ qw( /etc/cobalt-release ) ] },
#    'Conectiva'                 => { codenames => \%default,                        files => [ qw( /etc/conectiva-release ) ] },
#    'CrunchBang Linux'          => { codenames => \%crunch,                         files => [ qw( /etc/lsb-release-crunchbang /etc/lsb-release ) ] },
#    'Debian'                    => { codenames => \%debian,     key => 'debian',    files => [ qw( /etc/debian_version /etc/debian_release ) ] },
#    'Fedora Core'               => { codenames => \%fedora,     key => 'fedora',    files => [ qw( /etc/fedora-release ) ] },
#    'Gentoo Linux'              => { codenames => \%default,    key => 'gentoo',    files => [ qw( /etc/gentoo-release ) ] },
#    'Immunix'                   => { codenames => \%default,                        files => [ qw( /etc/immunix-release ) ] },
#    'Knoppix'                   => { codenames => \%default,                        files => [ qw( /etc/knoppix_version ) ] },
#    'Libranet'                  => { codenames => \%default,                        files => [ qw( /etc/libranet_version ) ] },
#    'Linux-From-Scratch'        => { codenames => \%default,                        files => [ qw( /etc/lfs-release ) ] },
#    'Linux-PPC'                 => { codenames => \%default,                        files => [ qw( /etc/linuxppc-release ) ] },
#    'Mandrake'                  => { codenames => \%mandriva,                       files => [ qw( /etc/mandrake-release ) ] },
#    'Mandriva'                  => { codenames => \%mandriva,                       files => [ qw( /etc/mandriva-release /etc/mandrake-release /etc/mandakelinux-release ) ] },
#    'Mandrake Linux'            => { codenames => \%mandriva,                       files => [ qw( /etc/mandriva-release /etc/mandrake-release /etc/mandakelinux-release ) ] },
#    'MkLinux'                   => { codenames => \%default,                        files => [ qw( /etc/mklinux-release ) ] },
#    'Novell Linux Desktop'      => { codenames => \%default,                        files => [ qw( /etc/nld-release ) ] },
#    'Pardus'                    => { codenames => \%default,    key => 'pardus',    files => [ qw( /etc/pardus-release ) ] },
#    'PLD Linux'                 => { codenames => \%default,                        files => [ qw( /etc/pld-release ) ] },
#    'Red Flag'                  => { codenames => \%default,    key => 'redflag',   files => [ qw( /etc/redflag-release ) ] },
#    'Red Hat Enterprise Linux'  => { codenames => \%rhel,       key => 'rhel',      files => [ qw( /etc/redhat-release /etc/redhat_version ) ] },
#    'Red Hat Linux'             => { codenames => \%redhat,     key => 'redhat',    files => [ qw( /etc/redhat-release /etc/redhat_version ) ] },
#    'Scientific Linux'          => { codenames => \%scientific,                     files => [ qw( /etc/lsb-release ) ] },
#    'Slackware'                 => { codenames => \%default,    key => 'slackware', files => [ qw( /etc/slackware-version /etc/slackware-release ) ] },
#    'SME Server'                => { codenames => \%default,                        files => [ qw( /etc/e-smith-release ) ] },
#    'Sun JDS'                   => { codenames => \%default,                        files => [ qw( /etc/sun-release ) ] },
#    'SUSE Linux'                => { codenames => \%default,    key => 'suse',      files => [ qw( /etc/SuSE-release /etc/novell-release ) ] },
#    'SUSE Linux ES9'            => { codenames => \%default,    key => 'suse',      files => [ qw( /etc/sles-release ) ] },
#    'Tiny Sofa'                 => { codenames => \%default,                        files => [ qw( /etc/tinysofa-release ) ] },
#    'Trustix Secure Linux'      => { codenames => \%default,                        files => [ qw( /etc/trustix-release ) ] },
#    'TurboLinux'                => { codenames => \%default,                        files => [ qw( /etc/turbolinux-release ) ] },
#    'Ubuntu Linux'              => { codenames => \%ubuntu,                         files => [ qw( /etc/lsb-release ) ] },
#    'UltraPenguin'              => { codenames => \%default,                        files => [ qw( /etc/ultrapenguin-release ) ] },
#    'UnitedLinux'               => { codenames => \%default,                        files => [ qw( /etc/UnitedLinux-release ) ] },
#    'VA-Linux/RH-VALE'          => { codenames => \%default,                        files => [ qw( /etc/va-release ) ] },
#    'Yellow Dog'                => { codenames => \%default,                        files => [ qw( /etc/yellowdog-release ) ] },
#    'Yoper'                     => { codenames => \%default,                        files => [ qw( /etc/yoper-release ) ] },
#);
#
#my %version_pattern = (
#    'gentoo'    => 'Gentoo Base System version (.*)',
#    'debian'    => '(.+)',
#    'suse'      => 'VERSION = (.*)',
#    'fedora'    => 'Fedora Core release (\d+) \(',
#    'redflag'   => 'Red Flag (?:Desktop|Linux) (?:release |\()(.*?)(?: \(.+)?\)',
#    'redhat'    => 'Red Hat Linux release (.*) \(',
#    'rhel'      => 'Red Hat Enterprise Linux(?: Server)? release (.*) \(',
#    'slackware' => '^Slackware (.+)$',
#    'pardus'    => '^Pardus (.+)$',
#);
#
#my %oslabel_pattern = (
#    'suse'      => '^(\S+)',
#    'rhel'      => '(Red Hat Enterprise Linux(?: Server)?) release (.*) \(',
#);
#
#
#sub new {
#    my ($class) = @_;
#    my $self = {};
#    bless $self, $class;
#
#    return $self;
#}
#
#sub get_info {
#    my $self  = shift;
#
#    for my $cmd (keys %commands) {
#        $self->{cmds}{$cmd} = `$commands{$cmd} 2>/dev/null`;
#        $self->{cmds}{$cmd} =~ s/\s+$//s;
#        $self->{info}{$cmd} = $self->{cmds}{$cmd}   if($cmd !~ /^_/);
#    }
#
#    $self->{info}{osflag}       = $^O;
#    $self->{info}{kernel}       = lc($self->{info}{kname}) . '-' . $self->{info}{kvers};
#
#    $self->{info}{is32bit}      = $self->{info}{archname} !~ /_(64)$/ ? 1 : 0;
#    $self->{info}{is64bit}      = $self->{info}{archname} =~ /_(64)$/ ? 1 : 0;
#
#    if($self->{cmds}{'_lsb'}) {
#        ($self->{info}{oslabel})    = $self->{cmds}{'_lsb'} =~ /Distributor ID:\s*(.*?)\n/si;
#        ($self->{info}{osvers})     = $self->{cmds}{'_lsb'} =~ /Release:\s*(.*?)\n/si;
#        ($self->{info}{codename})   = $self->{cmds}{'_lsb'} =~ /Codename:\s*(.*)\n?/si;
#    } else {
#        $self->_release_version();
#    }
#
#    $self->{info}{source}{$commands{$_}} = $self->{cmds}{$_}    for(keys %commands);
#    return $self->{info};
#}
#
#
#sub _release_version {
#    my $self = shift;
#
#    for my $label (keys %distributions) {
#        for my $file (@{ $distributions{$label}->{files} }) {
#            next    unless(-f $file);
#            my $line = `cat $file 2>/dev/null`;
#
#            my ($version,$oslabel);
#            if($distributions{$label}->{key}) {
#                if($version_pattern{ $distributions{$label}->{key} }) {
#                    ($version) = $line =~ /$version_pattern{ $distributions{$label}->{key} }/si;
#                }
#                if($oslabel_pattern{ $distributions{$label}->{key} }) {
#                    ($oslabel) = $line =~ /$oslabel_pattern{ $distributions{$label}->{key} }/si;
#                }
#            }
#
#            $version = $line    unless($version);
#            $version =~ s/\s*$//;
#
#            unless($oslabel) {
#                if($self->{cmds}{'_issue1'}) {
#                    ($oslabel) = $self->{cmds}{'_issue1'} =~ /^(\S*)/;
#                } elsif($self->{cmds}{'_issue2'}) {
#                    ($oslabel) = $self->{cmds}{'_issue2'} =~ /^(\S*)/;
#                }
#                $oslabel ||= $label;    
#            }
#
#            $self->{info}{oslabel}  = $oslabel;
#            $self->{info}{osvers}   = $version;
#            $commands{'_cat'} = "cat $file";
#            $self->{cmds}{'_cat'}  = $line;
#
#            for my $vers (keys %{ $distributions{$label}->{codenames} }) {
#                if($version =~ /^$vers\b/) {
#                    $self->{info}{codename} = $distributions{$label}->{codenames}{$vers};
#                    return;
#                }
#            }
#
#            return;
#        }
#    }
#}
#
#1;
#
#__END__
#
### Devel/Platform/Info/Mac.pm ###
#package Devel::Platform::Info::Mac;
#
#use strict;
#use warnings;
#
#use vars qw($VERSION);
#$VERSION = '0.15';
#
#
#sub new {
#    my ($class) = @_;
#    my $self = {};
#    bless $self, $class;
#
#    return $self;
#}
#
#
#sub get_info {
#    my $self = shift;
#    $self->{info}{osname} = 'Mac';
#    $self->{info}{osflag} = $^O;
#
#    my $uname_s = $self->_command('uname -s');
#    if ($uname_s =~ /Darwin/i) {
#        $self->{info}{oslabel} = 'OS X';
#
#        my $productversion = $self->_command('sw_vers -productVersion');
#        if ($productversion =~ /((\d+)\.(\d+)(\.(\d+))?)/) {
#            my ($version, $major, $minor) = ($1, $2, $3);
#            my $versions = _macos_versions();
#            if (my $codename = $versions->{"$major.$minor"}) {
#                $self->{info}{codename} = $codename;
#                $self->{info}{osvers}  = $version;
#            }
#        }
#    }
#
#    if (my $arch = $self->_command('uname -p')) {
#        chomp $arch;
#        $self->{info}{archname} = $arch;
#        $self->{info}{is32bit}  = $arch !~ /_(64)$/ ? 1 : 0;
#        $self->{info}{is64bit}  = $arch =~ /_(64)$/ ? 1 : 0;
#    }
#
#    if (my $unamev = $self->_command('uname -v')) {
#        chomp $unamev;
#        $self->{info}{kernel} = $unamev;
#    }
#
#    $self->_command('uname -a');
#
#    return $self->{info};
#}
#
#
#
#sub _command {
#    my $self    = shift;
#    my $command = shift;
#    my $result  = `$command`;
#    chomp $result;
#
#    $self->{info}{source}{$command} = $result;
#
#    return $result;
#}
#
#
#sub _macos_versions {
#    return {
#        '10.0'  => 'Cheetah',
#        '10.1'  => 'Puma',
#        '10.2'  => 'Jaguar',
#        '10.3'  => 'Panther',
#        '10.4'  => 'Tiger',
#        '10.5'  => 'Leopard',
#        '10.6'  => 'Snow Leopard',
#        '10.7'  => 'Lion',
#        '10.8'  => 'Mountain Lion',
#        '10.9'  => 'Mavericks',
#        '10.10' => 'Yosemite',
#    };
#}
#
#
#1;
#
#__END__
#
### Devel/Platform/Info/SCO.pm ###
#package Devel::Platform::Info::SCO;
#
#use strict;
#use warnings;
#
#use vars qw($VERSION);
#$VERSION = '0.15';
#
#
#my %commands = (
#    '_uname'    => 'uname -a',
#    '_lsb'      => 'uname -X',
#    'kname'     => 'uname -s',
#    'kvers'     => 'uname -r',
#    'archname'  => 'uname -m',
#);
#
#my %releases = (
#    '3.2.0'     => { oslabel => 'SCO UNIX System V/386',    codename => '' },
#    '3.2.1'     => { oslabel => 'Open Desktop 1.0',         codename => '' },
#    '3.2v2.0'   => { oslabel => 'Open Desktop 1.1',         codename => '' },
#    '3.2v4.0'   => { oslabel => 'SCO UNIX',                 codename => '' },
#    '3.2v4.1'   => { oslabel => 'Open Desktop 2.0',         codename => 'Phoenix' },
#    '3.2v4.2'   => { oslabel => 'Open Desktop/Server 3.0',  codename => 'Tbird' },
#    '3.2v5.0'   => { oslabel => 'OpenServer 5.0',           codename => 'Everest' },
#    '3.2v5.0.2' => { oslabel => 'OpenServer 5.0.2',         codename => '' },
#    '3.2v5.0.4' => { oslabel => 'OpenServer 5.0.4',         codename => 'Comet' },
#    '3.2v5.0.5' => { oslabel => 'OpenServer 5.0.5',         codename => 'Davenport' },
#    '3.2v5.0.6' => { oslabel => 'OpenServer 5.0.6',         codename => 'Freedom' },
#    '3.2v5.0.7' => { oslabel => 'OpenServer 5.0.7',         codename => 'Harvey West' },
#    '5'         => { oslabel => 'OpenServer 6.0',           codename => 'Legend' },
#);
#
#
#sub new {
#    my ($class) = @_;
#    my $self = {};
#    bless $self, $class;
#
#    return $self;
#}
#
#sub get_info {
#    my $self  = shift;
#
#    for my $cmd (keys %commands) {
#        $self->{cmds}{$cmd} = `$commands{$cmd} 2>/dev/null`;
#        $self->{cmds}{$cmd} =~ s/\s+$//s;
#        $self->{info}{$cmd} = $self->{cmds}{$cmd}   if($cmd !~ /^_/);
#    }
#
#    $self->{info}{osflag}       = $^O;
#    $self->{info}{osname}       = 'SCO';
#    $self->{info}{kernel}       = lc($self->{info}{kname}) . '-' . $self->{info}{kvers};
#    ($self->{info}{osvers})     = $self->{cmds}{'_lsb'} =~ /Release\s*=\s*(.*?)\n/s;
#    ($self->{info}{oslabel})    = $releases{ $self->{info}{osvers} }->{oslabel};
#    ($self->{info}{codename})   = $releases{ $self->{info}{osvers} }->{codename};
#
#    $self->{info}{is32bit}      = $self->{info}{archname} !~ /_(64)$/ ? 1 : 0;
#    $self->{info}{is64bit}      = $self->{info}{archname} =~ /_(64)$/ ? 1 : 0;
#
#    $self->{info}{source}{$commands{$_}} = $self->{cmds}{$_}    for(keys %commands);
#    return $self->{info};
#}
#
#1;
#
#__END__
#
### Devel/Platform/Info/Solaris.pm ###
#package Devel::Platform::Info::Solaris;
#
#use strict;
#use warnings;
#
#use vars qw($VERSION);
#$VERSION = '0.15';
#
#
#my %commands = (
#    '_uname1'   => 'uname -a',
#    '_showrev'  => 'showrev -a | grep -v "^Patch"',
#    '_release'  => 'cat /etc/release',
#    '_isainfo'  => '/usr/bin/isainfo -kv',
#    'kname'     => 'uname -s',
#    'kvers'     => 'uname -r',
#    'archname'  => 'uname -m',
#);
#
#
#sub new {
#    my ($class) = @_;
#    my $self = {};
#    bless $self, $class;
#
#    return $self;
#}
#
#sub get_info {
#    my $self  = shift;
#
#    for my $cmd (keys %commands) {
#        $self->{cmds}{$cmd} = `$commands{$cmd} 2>/dev/null`;
#        $self->{cmds}{$cmd} =~ s/\s+$//s;
#        $self->{info}{$cmd} = $self->{cmds}{$cmd}   if($cmd !~ /^_/);
#    }
#
#    $self->{info}{osflag}   = $^O;
#    $self->{info}{kernel}   = lc($self->{info}{kname}) . '-' . $self->{info}{kvers};
#    $self->{info}{is32bit}  = $self->{cmds}{_isainfo} !~ /64-bit/s ? 1 : 0;
#    $self->{info}{is64bit}  = $self->{cmds}{_isainfo} =~ /64-bit/s ? 1 : 0;
#
#    ($self->{info}{osname}) = $self->{cmds}{_release} =~ /((?:Open)?Solaris|SunOS|OpenIndiana)/is;
#    $self->{info}{oslabel}  = $self->{info}{osname};
#    $self->{info}{osvers}   = $self->{info}{kvers};
#
#    if($self->{info}{osname} =~ /Solaris/) {
#        $self->{info}{osvers} =~ s/^5\.([0123456]\b)/2.$1/;
#        $self->{info}{osvers} =~ s/^5\.(\d+)/$1/;
#    }
#
#
#    $self->{info}{source}{$commands{$_}} = $self->{cmds}{$_}    for(keys %commands);
#    return $self->{info};
#}
#
#
#1;
#
#__END__
#
### Devel/Platform/Info/Win32.pm ###
#package Devel::Platform::Info::Win32;
#
#use strict;
#use warnings;
#use POSIX;
#
#use vars qw($VERSION);
#$VERSION = '0.15';
#
#
#sub new {
#    my ($class) = @_;
#    my $self = {};
#    bless $self, $class;
#
#    return $self;
#}
#
#sub get_info {
#    my $self  = shift;
#
#    $self->{info}{osflag}       = $^O;
#    my $inf = $self->_GetArchName();
#    $self->{info}{oslabel} = $inf->{osLabel};
#    $self->{info}{osvers} = $inf->{version};
#    $self->{info}{archname} = $inf->{archname};
#    $self->{info}{is32bit} = $self->{info}{archname} !~ /64/ ? 1 : 0;
#    $self->{info}{is64bit} = $self->{info}{archname} =~ /64/ ? 1 : 0;
#    $self->{info}{source} = $inf->{source};
#    $self->{info}{wow64} = $inf->{wow64};
#
#    return $self->{info};
#}
#
#sub _GetArchName
#{
#    my $self = shift;
#    my @uname = POSIX::uname();
#    my @versions = Win32::GetOSVersion();
#    my $info = $self->_InterpretWin32Info(@versions);
#    $self->_AddPOSIXInfo($info, \@uname);
#    return $info;
#}
#
#sub _AddPOSIXInfo
#{
#    my $self = shift;
#    my $info = shift;
#    my $uname = shift;
#    my $arch = $uname->[4];
#    $info->{archname} = $arch;
#    $info->{source} = {
#        uname => $uname,
#        GetOSVersion => $info->{source},
#    };
#    if($ENV{'PROCESSOR_ARCHITEW6432'})
#    {
#        $info->{wow64} = 1;
#    }
#    else
#    {
#        $info->{wow64} = 0;
#    }
#}
#
#sub _InterpretWin32Info
#{
#    my $self = shift;
#    my @versionInfo = @_;
#    my ($string, $major, $minor, $build, $id, $spmajor, $spminor, $suitemask, $producttype, @extra)  = @versionInfo;
#    my ($osname, $oslabel, $version, $source);
#    my %info;
#    my $NTWORKSTATION = 1;
#    if($major == 5 && $minor == 2 && $producttype == $NTWORKSTATION)
#    {
#        $osname = 'Windows XP Pro 64';
#    } elsif($major == 5 && $minor == 2 && $producttype != $NTWORKSTATION)
#    {
#        $osname = 'Windows Server 2003';
#    } elsif($major == 5 && $minor == 1)
#    {
#        $osname = 'Windows XP';
#    } elsif($major == 5 && $minor == 0)
#    {
#        $osname = 'Windows 2000';
#    } elsif($major == 6 && $minor == 1 && $producttype == $NTWORKSTATION)
#    {
#        $osname = 'Windows 7';
#    } elsif($major == 6 && $minor == 1 && $producttype != $NTWORKSTATION)
#    {
#        $osname = 'Windows Server 2008 R2';
#    } elsif($major == 6 && $minor == 0 && $producttype == $NTWORKSTATION)
#    {
#        $osname = 'Windows Vista';
#    } elsif($major == 6 && $minor == 0 && $producttype != $NTWORKSTATION)
#    {
#        $osname = 'Windows Server 2008';
#    } elsif($major == 4 && $minor == 0 && $id == 1)
#    {
#        $osname = "Windows 95";
#    } elsif($major == 4 && $minor == 10)
#    {
#        $osname = "Windows 98";
#    } elsif($major == 4 && $minor == 90)
#    {
#        $osname = "Windows Me";
#    } elsif($major == 4 && $minor == 0)
#    {
#        $osname = 'Windows NT 4';
#    } elsif($major == 3 && $minor == 51)
#    {
#        $osname = "Windows NT 3.51";
#    } else
#    {
#        $osname = 'Unrecognised - please file an RT case';
#    }
#    my $info =
#    {
#        osName => 'Windows',
#        osLabel => $osname,
#        version => "$major.$minor.$build.$id",
#        source => \@versionInfo,
#    };
#    return $info;
#}
#
#
#1;
#
#__END__
#
