#!/usr/bin/perl

=head1 NAME

deb-control-prefix-perl - prefix all perl packages with custom prefix in F<debian/control> file

=head1 SYNOPSIS

	deb-control-prefix-perl
		"--prefix=opt-"
		--maintainer=local@localhost
		--to-prefix='lib \S+ perl | perl | perl-base | perl-modules | perl5 | perl5-base | libperl5.10 | libperl-dev | libapache2-mod-perl2 | libapreq2'
		debian/control

=head1 DESCRIPTION

Requested prefix is added to all C<Source>, C<Package> lines and to all
perl dependencies in C<Build-Depends>, C<Build-Conflicts>, C<Pre-Depends>,
C<Conflicts>, C<Replaces>, C<Provides>, C<Suggests>.

=cut


use strict;
use warnings;

use Getopt::Long;
use Pod::Usage;
use Parse::Deb::Control;

exit main();

sub main {
    my $help;
    my $prefix;
    my $maintainer = 'repackaging@with-prefix';
    my $uploaders;
    my $description;
    my $to_prefix = 'lib \S+ perl | perl | perl-base | perl-modules | perl5 | perl5-base | libperl5.10 | libperl-dev | libapache2-mod-perl2 | libapreq2 | perl-doc | podlators-perl | cdbs | debhelper';
    GetOptions(
        'help|h'          => \$help,
        'prefix|p=s'      => \$prefix,
        'to-prefix|t=s'   => \$to_prefix,
        'maintainer|m=s'  => \$maintainer,
        'uploaders|u=s'   => \$uploaders,
        'description|d=s' => \$description,
    ) or pod2usage;
    pod2usage if $help;
    pod2usage if not $prefix;
    
    $uploaders ||= $maintainer;
    $description = 'repackaged with "'.$prefix.'" prefix'
    	if not defined $description;
    
    my $control_txt = ''; while (my $line = <>) { $control_txt .= $line; };
    my $parser = Parse::Deb::Control->new($control_txt);

	# modify Maintainer
	foreach my $src_pkg ($parser->get_keys(qw{ Maintainer })) {
		${$src_pkg->{'value'}} =~ s/^ (\s*) (\S.*) $/ $maintainer\n/xms;
	}
	# modify Uploaders
	foreach my $src_pkg ($parser->get_keys(qw{ Uploaders })) {
		${$src_pkg->{'value'}} =~ s/^ (\s*) (\S.*) $/ $uploaders\n/xms;
	}
    
	# modify Source and Package name
	foreach my $src_pkg ($parser->get_keys(qw{ Source Package })) {
		${$src_pkg->{'value'}} =~ s/^ (\s*) (\S+) (\s*) $/$1$prefix$2$3/xms;
	}
	# modify dependencies
	foreach my $dependecies ($parser->get_keys(qw{ Build-Depends Build-Depends-Indep Build-Conflicts Pre-Depends Depends Conflicts Replaces Provides Suggests Recommends })) {
		${$dependecies->{'value'}} =~ s/(\s|,|:) ($to_prefix) (\s|,)/$1$prefix$2$3/xmsg;
	}
	
	# add text to description
	if ($description) {
		foreach my $desc ($parser->get_keys(qw{ Description })) {
			${$desc->{'value'}} .= qq{ .\n $description\n};
		}
	}
	
	print $parser->control;
    
    return 0;
}