AIX-LPP
view release on metacpan or search on metacpan
LPP/lpp_name.pm view on Meta::CPAN
my $fh = shift;
my $self = {};
bless $self, $class;
chomp (my $line = <$fh>);
my ($format,$platform,$type,$name,$token) = split / /, $line;
$self->lpp(NAME => $name, FORMAT => $format, TYPE => $type,
PLATFORM => $platform);
chomp ($line = <$fh>);
# add while loop here to process fileset headers
my ($fsn,$vrmf,$disk,$bosboot,$content,$lang,@desc) = split / /, $line;
$self->fileset($fsn, NAME => $fsn,VRMF => $vrmf,DISK => $disk,
BOSBOOT => $bosboot, CONTENT => $content, LANG => $lang,
DESCRIPTION => join ' ', @desc);
chomp ($line = <$fh>) until $line =~ /^\[/;
chomp ($line = <$fh>);
FSDATA: { do {
chomp $line;
my @reqs;
last if $line =~ /^\]/;
REQS: { do {
push @reqs, [ split (/ /, $line) ];
chomp ($line = <$fh>);
} until $line =~ /^%/; }
$self->requisites($fsn,\@reqs);
chomp ($line = <$fh>);
SIZEINFO: { do {
my ($loc,@size) = split (/ /, $line);
$self->{FILESET}{$fsn}{SIZEINFO}{$loc} = join ' ', @size;
chomp ($line = <$fh>);
} until $line =~ /^%/; }
chomp ($line = <$fh>);
THIRD: { do {
} until $line =~ /^%/; }
chomp ($line = <$fh>);
FOURTH: { do {
} until $line =~ /^%/; }
chomp ($line = <$fh>);
FIFTH: { do {
} until $line =~ /^%/; }
} while ($line = <$fh>); }
return $self;
}
sub write {
my $self = shift;
my $fh = shift;
print $fh join ' ', $self->{FORMAT}, $self->{PLATFORM}, $self->{TYPE},
$self->{NAME}, "{\n";
foreach my $fileset (keys %{$self->{FILESET}} ) {
print $fh join ' ', $self->{FILESET}{$fileset}{NAME},
$self->{FILESET}{$fileset}{VRMF},
$self->{FILESET}{$fileset}{DISK},
$self->{FILESET}{$fileset}{BOSBOOT},
$self->{FILESET}{$fileset}{CONTENT},
$self->{FILESET}{$fileset}{LANG},
$self->{FILESET}{$fileset}{DESCRIPTION}, "\n[\n";
for my $i ( 0 .. $#{$self->{FILESET}{$fileset}{REQ}} ) {
print $fh join ' ',@{${$self->{FILESET}{$fileset}{REQ}}[$i]},"\n";
}
print $fh "%\n";
foreach my $key (sort keys %{$self->{FILESET}{$fileset}{SIZEINFO}}) {
print $fh join ' ', $key,
$self->{FILESET}{$fileset}{SIZEINFO}{$key}, "\n";
}
print $fh "%\n%\n%\n%\n]\n";
}
print $fh "}";
}
1;
__END__
=head1 NAME
AIX::LPP::lpp_name - Perl module for manipulation of an AIX lpp_name file
=head1 SYNOPSIS
use AIX::LPP::lpp_name;
$x = lpp_name->new();
$x->lpp(NAME => 'test.lpp',TYPE => 'I',PLATFORM => 'R',FORMAT => '4');
$x->fileset('test.lpp.rte', VRMF => '1.0.0.0',DISK => '01',BOSBOOT => 'N',
CONTENT => 'I', LANG => 'en_US', DESCRIPTION => 'test.lpp description',
COMMENTS => '');
my @reqs = [ ['*prereq','bos.rte','4.3.3.0'] ];
$x->requisites('test.lpp.rte', \@reqs);
my %sizes = { '/usr' => '5', '/etc' => '1' };
$x->sizeinfo('test.lpp.rte', \%sizes);
$x->write(\*out_fh);
or
$x = lpp_name->read(\*in_fh);
my %lppdata = $x->lpp();
my %fsdata = $x->fileset('test.lpp.rte');
my $req_ref = $x->requisites('test.lpp.rte');
my $size_ref = $x->sizeinfo('test.lpp.rte');
=head1 DESCRIPTION
AIX::LPP::lpp_name is a class module for reading, creating, and modifying
AIX lpp_name files. The lpp_name file is an internal component of AIX
packages (called LPPs). LPPs consist of filesets and information about
installing them. This information can include: prerequisites, filesystem
requirements, copywrites, etc..
=head1 CONSTRUCTOR METHODS
=over 4
=item $x = lpp_name->new();
The simple form of the new constructor method creates an empty lpp_name
object. This object is then modified using lpp() and fileset() object
methods. Basic LPP information can also be passed to new() as follows: ...
=item $x = lpp_name->read(\*in_fh);
Alternatively, a new lpp_name object can be create by reading data from
an lpp_name formatted file. read() is both a class method and an instance
method (or it will be when I'm finished).
=head1 OBJECT METHODS
=over 4
=item lpp()
( run in 0.903 second using v1.01-cache-2.11-cpan-5a3173703d6 )