| DhMakePerl documentation | Contained in the DhMakePerl distribution. |
Debian::Control - manage Debian source package control files
my $c = Debian::Control->new(); # construct a new
$c->read($file); # parse debian/control file
$c->write($file); # write to file
print $c->source->Source;
print $c->source->Build_Depends; # Debian::Dependencies object
$c->binary->{'libfoo-perl'}->Description(
"Foo Perl module\n" .
" Foo makes this and that"
);
Debian::Control can be used for representation and manipulation of Debian source package control files in an object-oriented way. It provides easy reading and writing of the debian/control file found in Debian source packages.
An instance of Debian::Control::Stanza::Source class. Contains the source stanza of the Debian source package control file.
A hash reference (actually Tie::IxHash instance) with keys being binary package names and values instances of Debian::Control::Stanza::Binary class. Contains the information of the binary package stanzas of Debian source package control file.
Constructs a new Debian::Control instance.
The source field is initialized with an empty instance of
Debian::Control::Stanza::Source and binary field is initialized with an
empty instance of Tie::IxHash.
Parse control in debian and populate source and binary accessors.
file can be either a file name, an opened file handle or a string scalar reference.
Writes a debian/control-like file in file with the contents defined in the
source and binary fields.
file can be either a file name, an opened file handle or a string scalar reference.
All dependency lists are sorted before writing.
Returns true if the package is architecture-dependent. This is determined by
the Architecture field of the first binary package. If it equals to all,
then the package is architecture-independent; otherwise it is
architecture-dependent.
Returns undef if it is not possible to determine whether the package is
architecture-dependent or not. This is the case when there are no binary
package stanzas present or the first has no Archiitecture field.
Copyright (C) 2009 Damyan Ivanov dmn@debian.org
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
| DhMakePerl documentation | Contained in the DhMakePerl distribution. |
package Debian::Control; use base 'Class::Accessor'; use strict; __PACKAGE__->mk_accessors(qw( source binary _parser )); use Parse::DebControl; use Debian::Control::Stanza::Source; use Debian::Control::Stanza::Binary;
sub new { my $class = shift; my $self = $class->SUPER::new(); $self->_parser( Parse::DebControl->new ); $self->binary( Tie::IxHash->new ); $self->source( Debian::Control::Stanza::Source->new ); return $self; }
sub read { my ( $self, $file ) = @_; my $parser_method = 'parse_file'; if ( ref($file) ) { $file = $$file; $parser_method = 'parse_mem'; } my $stanzas = $self->_parser->$parser_method( $file, { useTieIxHash => 1, verbMultiLine => 1 } ); for (@$stanzas) { if ( $_->{Source} ) { $self->source( Debian::Control::Stanza::Source->new($_) ); } elsif ( $_->{Package} ) { $self->binary->Push( $_->{Package} => Debian::Control::Stanza::Binary->new($_) ); } else { die "Got control stanza with neither Source nor Package field\n"; } } }
sub write { my ( $self, $file ) = @_; for my $s ( $self->source, $self->binary->Values ) { for ( $s->fields ) { $s->$_->sort if $s->is_dependency_list($_); } } if ( ref($file) and ref($file) eq 'SCALAR' ) { $$file = join( "\n", $self->source, $self->binary->Values ); } elsif ( ref($file) and ref($file) eq 'GLOB' ) { $file->print( join( "\n", $self->source, $self->binary->Values ) ); } else { my $fh; open $fh, '>', $file or die "Unable to open '$file' for writing: $!"; print $fh join( "\n", $self->source, $self->binary->Values ); } }
sub is_arch_dep { my $self = shift; my $bin = $self->binary->Values(0); return undef unless $bin; my $arch = $bin->Architecture; return undef unless defined($arch); return ( $arch ne 'all' ); }
1;