Debian::Control - manage Debian source package control files


DhMakePerl documentation Contained in the DhMakePerl distribution.

Index


Code Index:

NAME

Top

Debian::Control - manage Debian source package control files

SYNOPSIS

Top

    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"
    );

DESCRIPTION

Top

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.

FIELDS

Top

source

An instance of Debian::Control::Stanza::Source class. Contains the source stanza of the Debian source package control file.

binary

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.

CONSTRUCTOR

Top

new

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.

METHODS

Top

read file

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.

write file

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.

is_arch_dep

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.

SEE ALSO

Top

Debian::Control::Stanza::Source, Debian::Control::Stanza::Binary, Debian::Control::FromCPAN

COPYRIGHT & LICENSE

Top


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;