#!/usr/bin/perl

use strict;
use Getopt::Std;

# ChangeLog
# 1.03  Revamp to Perl. Support for RPM's spec files.
# 1.02	-V shows more info.
# 1.01	-V flag implemented
# 1.00	First version

my $VER=1.03;
my %opts;

# Show usage and stop.
sub usage () {
    die ("\n",
	 "Copyright (c) e-tunity 2000 ff. All rights reserved.\n",
	 "Contact e-tunity <info\@e-tunity.com> for more info.\n",
	 "Usage: e-ver file(s) VERSION\n",
	 "The files are checked for ChangeLog-style entries or RPM-style\n",
	 "entries. The stated versions must match VERSION.\n\n");
}

# Check a version in a file.
sub checkversion ($$) {
    my $f = shift;
    my $v = shift;

    open (IF, $f) or die ("e-ver: cannot read $f: $!\n");
    while (<IF>) {
	chomp ();
	if (/^[0-9]/) {
	    # ChangeLog style entry.
	    my $curver = sprintf ("%g", $_);
	    die ("e-ver: ChangeLog-style version $curver is not the\n",
		 "       required $v. You should probably update $f\n")
		if ($curver != $v);
	    close (IF);
	    return;
	}

	if (/^Version: */) {
	    s/^Version: *//;
	    my $curver = sprintf ("%g", $_);
	    die ("e-ver: RPM-spec style version $curver is not the\n",
		 "       required $v. You should probably update $f.\n")
		if ($curver != $v);
	    close (IF);
	    return;
	}
    }

    close (IF);
    die ("e-ver: failed to find version ID in $f, cannot check\n");
}

# Main starts here.
usage() unless (getopts ("V", \%opts));
if ($opts{V}) {
    print ("$VER Version ID Checker\n");
    exit (0);
}
usage() if ($#ARGV < 1);

my $version_to_check = pop (@ARGV);
foreach my $f (@ARGV) {
    die ("e-ver: no such file $f\n") unless (-f $f);
    checkversion ($f, $version_to_check);
}
