#!/usr/bin/perl -w

#use strict;
use warnings;
use Carp;
use Getopt::Long;
use File::Basename;
use RPM::Source::Editor;

my ($rpm,$spec,$hook,$changelog,$release);
my $packager='';
my $verbose=1;
my $cleanup=1;
my $outputdir='.';
my $patchdir=dirname($0)."/patches";

my $result = GetOptions ("rpm=s" => \$rpm,
		      "spec=s" => \$spec,
		      "outdir=s"   => \$outputdir,
		      "packager=s"   => \$packager,
		      "hook=s"   => \$hook,
		      "changelog=s"   => \$changelog,
		      "cleanup!"   => \$cleanup,
		      "release=s"   => \$release,
		      "verbose+"  => \$verbose);
if (! $rpm && ! $spec) {
    print "ERROR: one of --rpm | --spec is required!\n";
    print "options:
--rpm /path/to/altlinux.src.rpm
--spec /path/to/altlinux.spec
--hook /path/to/hook to be called on resulting spec file
--out /path/to/output_dir
--changelog '- message'
--release 'release' - if we need to adjust the package's release
";
    exit (64);
}

my $alt=RPM::Source::Editor->new(
    SOURCERPM => $rpm, 
    SPECFILE=> $spec, 
    OUTPUTDIR=> $outputdir, 
    PATCHDIR=>$patchdir, 
    VERBOSE=> $verbose,
    CLEANUP=> $cleanup,
    CHANGELOG=>'- NMU for unknown reason:
  the person above was too neglectant to add --changelog "- NMU: <reason>" option.',
);

my $rel = $alt->get_section('package','')->get_tag('Release');

# our -- hack ?
our $jpptoolsdir=dirname($0);
# for cross-references in hooks
push @INC, $jpptoolsdir."/hooks";

if (not $hook) {
    # looking for default hook
    my $name = $alt->get_section('package','')->get_tag('Name');
    my $defhook="$jpptoolsdir/hooks/$name.pl";
    # macro_expansion should be here
    #print "looking for default hook $defhook\n";
    $hook = $defhook if (-e $defhook);
}


my $newrel = $rel.".1";

$newrel=$release if ($release);
$alt->get_section('package','')->set_tag('Release',$newrel);

our @SPECHOOKS;

if ($hook) {
    require $hook;
    die "script $hook does not have a valid hook!\n" unless @SPECHOOKS;
    if (@SPECHOOKS) {
	$alt->{WARN_NOTAPPLIED}++;
	map {&$_($alt)} @SPECHOOKS;
	$alt->{WARN_NOTAPPLIED}--;
    }
}

if ($rpm || $spec) {
    $alt->get_section('changelog')->set_body($alt->get_section('changelog')->get_body());
}

if ($changelog) {
    $alt->set_changelog($changelog);
}

if ($packager eq 'auto') {
    $packager=$alt->macros()->macro_subst('%{packager}');
}

if ($packager) {
    if ($packager ne 'none') {
	$alt->get_section('package','')->set_tag('Packager',$packager);
    } else {
	$alt->get_section('package','')->clear_tag('Packager');
    }
}

print $alt->get_spec() if $spec or $verbose>2;
$alt->write_rpm() if $rpm;
$alt->cleanup();

