# # TLP.pm # module for using tlp files # Copyright 2007 Norbert Preining # # This file is licensed under the GNU General Public Licence version 2 # or any later version package TLP; sub new { my $class = shift; my %params = @_; my $self = { name => $params{'name'}, shortdesc => $params{'shortdesc'}, longdesc => $params{'longdesc'}, catalogue => $params{'catalogue'}, runfiles => defined($params{'runfiles'}) ? $params{'runfiles'} : [], srcfiles => defined($params{'srcfiles'}) ? $params{'srcfiles'} : [], docfiles => defined($params{'docfiles'}) ? $params{'docfiles'} : [], binfiles => defined($params{'binfiles'}) ? $params{'binfiles'} : [], executes => defined($params{'executes'}) ? $params{'executes'} : [], depends => defined($params{'depends'}) ? $params{'depends'} : [], revision => $params{'revision'}, }; bless $self, $class; return $self; } sub from_file { my $self = shift; if (@_ != 1) { die("Need a filename for initialization!"); } open(TMP,"<$_[0]") || die("Cannot open tlp file: $_[0]"); my @lines = ; close(TMP); my $started = 0; my $finished = 0; my $lastcmd = ""; foreach my $line (@lines) { $line =~ /^\s*#/ && next; # skip comment lines if ($line =~ /^\s*$/) { if (!$started) { next; } if ($finished) { next; } die("No empty line allowed within tlp files!"); } if ($line =~ /^ /) { if ( ($lastcmd eq "longdesc") || ($lastcmd eq "runfiles") || ($lastcmd eq "binfiles") || ($lastcmd eq "docfiles") || ($lastcmd eq "srcfiles") || ($lastcmd eq "executes") || ($lastcmd eq "depend") ) { $line =~ s/^ /$lastcmd /; } else { die("Continuation of $lastcmd not allowed, please fix tlp!\n"); } } if ($line =~ /^name\s*(\w+)$/) { $name = "$1"; $lastcmd = "name"; $self->name("$name"); $started && die("Cannot have two name directives!"); $started = 1; } else { $started || die("First directive needs to be 'name'"); if ($line =~ /^shortdesc\s+(.*)$/) { $self->{'shortdesc'} .= "$1 "; $lastcmd = "shortdesc"; next; } elsif ($line =~ /^longdesc\s+(.*)$/) { $self->{'longdesc'} .= "$1 "; $lastcmd = "longdesc"; next; } elsif ($line =~ /^catalogue\s+(.*)$/) { $self->catalogue("$1"); $lastcmd = "catalogue"; next; } elsif ($line =~ /^runfiles\s+(.*)$/) { push @{$self->{'runfiles'}}, "$1" unless "$1" eq ""; $lastcmd = "runfiles"; next; } elsif ($line =~ /^srcfiles\s+(.*)$/) { push @{$self->{'srcfiles'}}, "$1" unless "$1" eq ""; $lastcmd = "srcfiles"; next; } elsif ($line =~ /^docfiles\s+(.*)$/) { push @{$self->{'docfiles'}}, "$1" unless "$1" eq ""; $lastcmd = "docfiles"; next; } elsif ($line =~ /^binfiles\s+(.*)$/) { push @{$self->{'binfiles'}}, "$1" unless "$1" eq ""; $lastcmd = "binfiles"; next; } elsif ($line =~ /^execute\s*(.*)$/) { push @{$self->{'executes'}}, "$1" unless "$1" eq ""; $lastcmd = "execute"; next; } elsif ($line =~ /^depend\s*(.*)$/) { push @{$self->{'depends'}}, "$1" unless "$1" eq ""; $lastcmd = "depend"; next; } else { die("Unknown directive ...$line... in $tldb, please fix it!"); } } } } sub writeout { my $self = shift; my $fd = (@_ ? $_[0] : STDOUT); print $fd "name ", $self->name, "\n"; defined($self->{'revision'}) && print $fd "revision $self->{'revision'}\n"; defined($self->{'catalogue'}) && print $fd "catalogue $self->{'catalogue'}\n"; defined($self->{'shortdesc'}) && print $fd "shortdesc $self->{'shortdesc'}\n"; defined($self->{'longdesc'}) && print $fd "longdesc $self->{'longdesc'}\n"; if (defined($self->{'depends'})) { foreach (@{$self->{'depends'}}) { print $fd "depend $_\n"; } } if (defined($self->{'executes'})) { foreach (@{$self->{'executes'}}) { print $fd "execute $_\n"; } } if (defined($self->{'srcfiles'}) && (@{$self->{'srcfiles'}})) { print $fd "srcfiles\n"; foreach (sort @{$self->{'srcfiles'}}) { print $fd " $_\n"; } } if (defined($self->{'runfiles'}) && (@{$self->{'runfiles'}})) { print $fd "runfiles\n"; foreach (sort @{$self->{'runfiles'}}) { print $fd " $_\n"; } } if (defined($self->{'docfiles'}) && (@{$self->{'docfiles'}})) { print $fd "docfiles\n"; foreach (sort @{$self->{'docfiles'}}) { print $fd " $_\n"; } } if (defined($self->{'binfiles'}) && (@{$self->{'binfiles'}})) { print $fd "binfiles\n"; foreach (sort @{$self->{'binfiles'}}) { print $fd " $_\n"; } } } # # member access functions # sub name { my $self = shift; if (@_) { $self->{'name'} = shift } return $self->{'name'}; } sub shortdesc { my $self = shift; if (@_) { $self->{'shortdesc'} = shift } return $self->{'shortdesc'}; } sub longdesc { my $self = shift; if (@_) { $self->{'longdesc'} = shift } return $self->{'longdesc'}; } sub revision { my $self = shift; if (@_) { $self->{'revision'} = shift } return $self->{'revision'}; } sub catalogue { my $self = shift; if (@_) { $self->{'catalogue'} = shift } return $self->{'catalogue'}; } sub srcfiles { my $self = shift; if (@_) { @{ $self->{'srcfiles'} } = @_ } return @{ $self->{'srcfiles'} }; } sub add_srcfiles { my ($self,@files) = @_; push @{ $self->{'srcfiles'} }, @files; } sub docfiles { my $self = shift; if (@_) { @{ $self->{'docfiles'} } = @_ } return @{ $self->{'docfiles'} }; } sub add_docfiles { my ($self,@files) = @_; push @{ $self->{'docfiles'} }, @files; } sub binfiles { my $self = shift; if (@_) { @{ $self->{'binfiles'} } = @_ } return @{ $self->{'binfiles'} }; } sub add_binfiles { my ($self,@files) = @_; push @{ $self->{'binfiles'} }, @files; } sub runfiles { my $self = shift; if (@_) { @{ $self->{'runfiles'} } = @_ } return @{ $self->{'runfiles'} }; } sub add_runfiles { my ($self,@files) = @_; push @{ $self->{'runfiles'} }, @files; } sub add_files { my ($self,$type,@files) = @_; push @{ $self->{$type} }, @files; } sub depends { my $self = shift; if (@_) { @{ $self->{'depends'} } = @_ } return @{ $self->{'depends'} }; } sub executes { my $self = shift; if (@_) { @{ $self->{'executes'} } = @_ } return @{ $self->{'executes'} }; } 1; ###### Formats format TLP = ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $tlpline ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~ $tlpline . ### Local Variables: ### perl-indent-level: 4 ### tab-width: 4 ### indent-tabs-mode: t ### End: # vim:set tabstop=4: #