#!/usr/bin/perl
# A simple script for making releases of the pciutils
# (c) 2003--2012 Martin Mares <mj@ucw.cz>

use strict;
use warnings;
require "maint/release.pm";

# Check API version
my $apiver = "???";
open X, "lib/pci.h" or die;
while (<X>) {
	/^#define PCI_LIB_VERSION 0x(.{6})$/ and $apiver = $1;
}
print "API version is $apiver ... <confirm> "; <STDIN>;

#print "Updating public GIT tree\n";
#`git push --tags public`; die if $?;

my $r = new UCW::Release("pciutils");
my $ver = $r->GetVersionFromFile("Makefile", "VERSION=(.*)");
$r->GetVersionsFromChangelog("ChangeLog", "Released as (.*)\.");
push @{$r->{"rules"}}, '^win32/config.h' => 's';
if ($ver =~ /-/) {
	$r->{"ALPHADIR"} = "alpha/";
	$r->{"conditions"}->{"ALPHA_VERSION"} = 1;
} else {
	$r->{"ALPHADIR"} = "";
	$r->{"conditions"}->{"ALPHA_VERSION"} = -1;
}
push @{$r->{"uploads"}}, {
	"url" => "scp://atrey.karlin.mff.cuni.cz/~ftp/pub/linux/pci/" . $r->{"ALPHADIR"}
##	},{
##	"url" => "scp://master.kernel.org/pub/software/utils/pciutils/" . $r->{"ALPHADIR"}
	};
$r->ParseOptions;
$r->InitDist("maint/dist");
my $reldir = $r->GenPackage;
$r->GenFile("README");
$r->GenFile("pciutils.lsm");
$r->Dispatch;
if ($r->{"do_upload"}) {
	print "Uploading pci.ids to Jabberwock\n";
	`scp -C pci.ids pciids\@jabberwock.ucw.cz:05-pciutils.new`; die if $?;
	`ssh pciids\@jabberwock.ucw.cz mv 05-pciutils.new origs/05-pciutils`; die if $?;
}

# Hacks for kernel.org
print "Preparing kernel.org package\n";
my $dd = $r->{"DISTDIR"};
my $pkg = $r->{"PKG"};
`gzip -d <$dd/$pkg.tar.gz >$dd/$pkg.tar`; die if $?;
system "gpg", "--armor", "--detach-sig", "-o", "$dd/$pkg.tar.sig", "$dd/$pkg.tar"; die if $?;
if ($r->{"do_upload"}) {
	print "Uploading to kernel.org\n";
	print "<confirm> "; <STDIN>;
	system '/home/mj/tree/kup/kup', 'put', "$dd/$pkg.tar", "$dd/$pkg.tar.sig", "/pub/software/utils/pciutils/$pkg.tar.gz"; die if $?;
}
