| Index: third_party/xdg-utils/tests/include/linux_distro
|
| ===================================================================
|
| --- third_party/xdg-utils/tests/include/linux_distro (revision 0)
|
| +++ third_party/xdg-utils/tests/include/linux_distro (revision 0)
|
| @@ -0,0 +1,209 @@
|
| +#!/usr/bin/perl
|
| +
|
| +
|
| +########################################################################
|
| +
|
| +package Linux::Distribution;
|
| +
|
| +use 5.006000;
|
| +use strict;
|
| +use warnings;
|
| +
|
| +require Exporter;
|
| +
|
| +our @ISA = qw(Exporter);
|
| +
|
| +our @EXPORT_OK = qw( distribution_name distribution_version );
|
| +
|
| +our $VERSION = '0.14.1';
|
| +
|
| +our $standard_release_file = 'lsb-release';
|
| +
|
| +our %primary_release_files = (
|
| + 'debian_version' => 'debian',
|
| + 'debian_release' => 'debian',
|
| + 'redhat-release' => 'redhat',
|
| + 'redhat_version' => 'redhat',
|
| +);
|
| +
|
| +our %secondary_release_files = (
|
| + 'gentoo-release' => 'gentoo',
|
| + 'fedora-release' => 'fedora',
|
| + 'turbolinux-release' => 'turbolinux',
|
| + 'mandrake-release' => 'mandrake',
|
| + 'mandrakelinux-release' => 'mandrakelinux',
|
| + 'mandriva-release' => 'mandriva',
|
| + 'SuSE-release' => 'suse',
|
| + 'knoppix-version' => 'knoppix',
|
| + 'yellowdog-release' => 'yellowdog',
|
| + 'slackware-version' => 'slackware',
|
| + 'slackware-release' => 'slackware',
|
| + 'redflag-release' => 'redflag',
|
| + 'conectiva-release' => 'conectiva',
|
| + 'immunix-release' => 'immunix',
|
| + 'tinysofa-release' => 'tinysofa',
|
| + 'trustix-release' => 'trustix',
|
| + 'adamantix_version' => 'adamantix',
|
| + 'yoper-release' => 'yoper',
|
| + 'arch-release' => 'arch',
|
| + 'libranet_version' => 'libranet',
|
| + 'va-release' => 'va-linux',
|
| + 'xandros-desktop-version' => 'xandros',
|
| +);
|
| +
|
| +our %version_match = (
|
| + 'gentoo' => 'Gentoo Base System version (.*)',
|
| + 'debian' => '(.+)',
|
| + 'suse' => 'VERSION = (.*)',
|
| + 'fedora' => 'Fedora Core release (\d+) \(',
|
| + 'redflag' => 'Red Flag (?:Desktop|Linux) (?:release |\()(.*?)(?: \(.+)?\)',
|
| + 'redhat' => 'Red Hat (?:Desktop|Linux) release (.*) \(',
|
| + 'slackware' => '^Slackware (.+)$',
|
| + 'mandriva' => 'Mandriva Linux release (\d+.\d+) \(',
|
| + 'arch' => 'Arch Linux (.*) \(',
|
| + 'xandros' => 'Version: Xandros Desktop OS (.+)'
|
| +);
|
| +
|
| +
|
| +if ($^O ne 'linux') {
|
| + require Carp;
|
| + Carp::croak 'you are trying to use a linux specific module on a different OS';
|
| +}
|
| +
|
| +sub new {
|
| + my %self = (
|
| + 'DISTRIB_ID' => '',
|
| + 'DISTRIB_RELEASE' => '',
|
| + 'DISTRIB_CODENAME' => '',
|
| + 'DISTRIB_DESCRIPTION' => '',
|
| + 'release_file' => '',
|
| + 'pattern' => ''
|
| + );
|
| +
|
| + return bless \%self;
|
| +}
|
| +
|
| +sub distribution_name {
|
| + my $self = shift || new();
|
| + my $distro;
|
| + if ($distro = $self->_get_lsb_info()){
|
| + return $distro if ($distro);
|
| + }
|
| + foreach (keys %secondary_release_files) {
|
| + if (-f "/etc/$_" && !-l "/etc/$_"){
|
| + if (-f "/etc/$_" && !-l "/etc/$_"){
|
| + $self->{'DISTRIB_ID'} = $secondary_release_files{$_};
|
| + $self->{'release_file'} = $_;
|
| + return $self->{'DISTRIB_ID'};
|
| + }
|
| + }
|
| + }
|
| + foreach (keys %primary_release_files) {
|
| + if (-f "/etc/$_" && !-l "/etc/$_"){
|
| + if (-f "/etc/$_" && !-l "/etc/$_"){
|
| + $self->{'DISTRIB_ID'} = $primary_release_files{$_};
|
| + $self->{'release_file'} = $_;
|
| + return $self->{'DISTRIB_ID'};
|
| + }
|
| + }
|
| + }
|
| + undef
|
| +}
|
| +
|
| +sub distribution_version {
|
| + my $self = shift || new();
|
| + my $release;
|
| + return $release if ($release = $self->_get_lsb_info('DISTRIB_RELEASE'));
|
| + if (! $self->{'DISTRIB_ID'}){
|
| + $self->distribution_name() or die 'No version because no distro.';
|
| + }
|
| + $self->{'pattern'} = $version_match{$self->{'DISTRIB_ID'}};
|
| + return "unknown" if (! $self->{'pattern'});
|
| + return "unknown" if (! ($release = $self->_get_file_info()));
|
| + $self->{'DISTRIB_RELEASE'} = $release;
|
| + return $release;
|
| +}
|
| +
|
| +sub _get_lsb_info {
|
| + my $self = shift;
|
| + my $field = shift || 'DISTRIB_ID';
|
| + my $tmp = $self->{'release_file'};
|
| + if ( -r '/etc/' . $standard_release_file ) {
|
| + $self->{'release_file'} = $standard_release_file;
|
| + $self->{'pattern'} = $field . '=(.+)';
|
| + my $info = $self->_get_file_info();
|
| + if ($info){
|
| + $self->{$field} = $info;
|
| + return $info
|
| + }
|
| + }
|
| + $self->{'release_file'} = $tmp;
|
| + $self->{'pattern'} = '';
|
| + undef;
|
| +}
|
| +
|
| +sub _get_file_info {
|
| + my $self = shift;
|
| + open FH, '/etc/' . $self->{'release_file'} or die 'Cannot open file: /etc/' . $self->{'release_file'};
|
| + my $info = '';
|
| + while (<FH>){
|
| + chomp $_;
|
| + ($info) = $_ =~ m/$self->{'pattern'}/;
|
| + return "\L$info" if $info;
|
| + }
|
| + undef;
|
| +}
|
| +
|
| +1;
|
| +
|
| +
|
| +# Simple script to use the above perl module to print the distro name
|
| +if (my $distro = distribution_name) {
|
| + my $version = distribution_version();
|
| + print "$distro $version\n";
|
| +} else {
|
| + print "distribution unknown\n";
|
| +}
|
| +
|
| +
|
| +
|
| +__END__
|
| +
|
| +
|
| +=head1 NAME
|
| +
|
| +linux_distro - tool for printing the current linux distribution
|
| +
|
| +=head1 SYNOPSIS
|
| +
|
| + linux_distro
|
| +
|
| +=head1 DESCRIPTION
|
| +
|
| +This is a simple tool that tries to guess on what linux distribution we are running by looking for release's files in /etc. It now looks for 'lsb-release' first as that should be the most correct and adds ubuntu support. Secondly, it will look for the distro specific files.
|
| +
|
| +It currently recognizes slackware, debian, suse, fedora, redhat, turbolinux, yellowdog, knoppix, mandrake, conectiva, immunix, tinysofa, va-linux, trustix, adamantix, yoper, arch-linux, libranet, gentoo, ubuntu, redflag and xandros.
|
| +
|
| +It has function to get the version for debian, suse, redhat, gentoo, slackware, redflag and ubuntu(lsb). People running unsupported distro's are greatly encouraged to submit patches :-)
|
| +
|
| +=head2 EXPORT
|
| +
|
| +None by default.
|
| +
|
| +=head1 TODO
|
| +
|
| +Add the capability of recognize the version of the distribution for all recognized distributions.
|
| +
|
| +=head1 AUTHORS
|
| +
|
| +Alberto Re, E<lt>alberto@accidia.netE<gt>
|
| +Judith Lebzelter, E<lt>judith@osdl.orgE<gt>
|
| +
|
| +=head1 COPYRIGHT AND LICENSE
|
| +
|
| +This library is free software; you can redistribute it and/or modify
|
| +it under the same terms as Perl itself, either Perl version 5.8.5 or,
|
| +at your option, any later version of Perl 5 you may have available.
|
| +
|
| +=cut
|
| +
|
|
|
| Property changes on: third_party/xdg-utils/tests/include/linux_distro
|
| ___________________________________________________________________
|
| Name: svn:executable
|
| + *
|
|
|
|
|