Debian::Control::Stanza::Binary - binary stanza of Debian source package control file


DhMakePerl documentation Contained in the DhMakePerl distribution.

Index


Code Index:

NAME

Top

Debian::Control::Stanza::Binary - binary stanza of Debian source package control file

SYNOPSIS

Top

    my $src = Debian::Control::Stanza::Binary->new(\%data);
    print $src;                         # auto-stringification
    print $src->Depends;                # Debian::Dependencies object

DESCRIPTION

Top

Debian::Control::Stanza::Binary can be used for representation and manipulation of Package: stanza of Debian source package control files in an object-oriented way. Converts itself to a textual representation in string context.

FIELDS

Top

The supported fields for binary stanzas are listed below. For more information about each field's meaning, consult the section named Source package control files -- debian/control of the Debian Policy Manual at http://www.debian.org/doc/debian-policy/

Note that real control fields may contain dashes in their names. These are replaced with underscores.

Package
Architecture
Section
Priority
Essential
Depends
Recommends
Suggests
Enhances
Replaces
Pre_Depends
Conflicts
Breaks
Provides
Description

Depends, Conflicts Breaks, Recommends, Suggests, Enhances, Replaces, and Pre_Depends fields are converted to objects of Debian::Dependencies class upon construction.

Two more accessor methods are provided for easier handling of package's short and long description.

short_description
long_description

Setting them transparently modifies Description. Note that the value of long_description is "unmangled", that is without leading spaces, and empty lines are empty. Description on the other hand is just as it looks in a regular debian/control file - the long part is indented with a single space and empty lines are replaced with dots.

CONSTRUCTOR

Top

new
new( { field => value, ... } )

Creates a new Debian::Control::Stanza::Binary object and optionally initializes it with the supplied data.

SEE ALSO

Top

Debian::Control::Stanza::Source inherits most of its functionality from Debian::Control::Stanza

COPYRIGHT & LICENSE

Top


DhMakePerl documentation Contained in the DhMakePerl distribution.
package Debian::Control::Stanza::Binary;

use strict;

use base 'Debian::Control::Stanza';

use constant fields => qw(
    Package Architecture Section Priority Essential Depends Recommends Suggests
    Enhances Replaces Pre_Depends Conflicts Breaks Provides Description
    _short_description _long_description
);

sub set {
    my ( $self, $field, @value ) = @_;

    my $res = $self->SUPER::set( $field, @value );

    # re-split description in it was set
    if ( $field eq 'Description' ) {
        $self->_split_description;
    }
    elsif ( $field eq '_short_description' or $field eq '_long_description' ) {
        $self->_format_description;
    }

    $res;
}

sub short_description {
    shift->_short_description(@_);
}

sub long_description {
    shift->_long_description(@_);
}

sub _format_description {
    my $self = shift;

    my $short = $self->_short_description;
    my $long  = $self->_long_description;

    if( defined($long) ) {
        $long =~ s/\n\n/\n.\n/sg;       # add spacing between paragraphs
        $long =~ s/^/ /mg;              # prepend every line with a space
    }

    # use SUPER::set to not trigger our implementation, which would cause
    # endless loop (setting short_description updates Description, which is
    # then split)
    $self->SUPER::set( 'Description',
        join( "\n", map { $_ // () } ( $short, $long ) ) );
}

sub _split_description {
    my $self = shift;

    my ( $short, $long ) = split( /\n/, $self->Description, 2 );

    $long =~ s/^ //mg;
    $long =~ s/^ \.$//mg;

    # use SUPER::set to not trigger our implementation, which would cause
    # endless loop (setting short_description updates Description, which is
    # then split)
    $self->SUPER::set( '_short_description', $short );
    $self->SUPER::set( '_long_description', $long );
}

1;