#!/usr/bin/perl

=head1 NAME

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

=head1 SYNOPSIS

	deb-control-prefix-perl "--prefix=mms-" 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;
    GetOptions(
        'help|h'          => \$help,
        'prefix|p=s'      => \$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-Conflicts Pre-Depends Conflicts Replaces Provides Suggests })) {
		${$dependecies->{'value'}} =~ s/\b (lib \S+ perl | perl | perl-modules | perl5-base | libperl5.8) \b/mms-$1/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;
}
