#!/usr/bin/perl

use Mysql;
use Getopt::Long;

use Env qw(LSBUSER LSBDBPASSWD LSBDB LSBDBHOST);

sub usage()
{
print STDERR "Usage: mktagtbl -v <lsbversion(s)>\n";
print STDERR "    LSB versions should be comma-separated.\n";
die;
}

GetOptions("v=s" => \$lsbversion);
if( !$lsbversion ) { usage(); }

$Dbh = Mysql->connect($LSBDBHOST,$LSBDB,$LSBUSER, $LSBDBPASSWD) || die $Mysql::db_errstr;

sub
dumptable($$$)
{
local($condition,$tname,$lsbver)=@_;

$select = "SELECT DISTINCT * FROM RpmTag ";
$select.= "WHERE (Rgroup='Private' OR ".$condition.") ";
$select.= "AND (Rappearedin IS NOT NULL and Rappearedin <= '$lsbver' and Rappearedin<>'') ";
$select.= "AND (Rwithdrawnin IS NULL OR Rwithdrawnin > '$lsbver') ";
$select.= "ORDER BY Rgroup,Rtag ";

#print "$select\n";

$sth = $Dbh->query($select) || die $Dbh->errmsg();

printf "RpmIdxTagFuncRec %s[] = {\n", $tname;

for(1..$sth->numrows) {
	%entry=$sth->fetchhash;
	printf "\t{%s,\t", $entry{'Rname'};
	printf "\"%s\",\t", $entry{'Rname'};
	printf "%s,\t", $entry{'Rtype'};
	printf "%s,\t", $entry{'Rcount'};
	split('_',$entry{'Rname'});
	$tagname=@_[1];
	printf "checkRpmIdx%s,\t", $tagname;
	printf "%s,\t", $entry{'Rstatus'};
	printf "NotSeen},\n";
	}
printf "};\n\n", $tname;
}

print "/* Generated file - Do Not Edit */\n\n";
print "#include \"rpmchk.h\"\n";
print "#include \"tagfuncs.h\"\n\n";

@lsbversions = sort split(/,/, $lsbversion);
@lsbvernames = @lsbversions;
for ($i = 0; $i <= $#lsbvernames; $i++) {
	$lsbvernames[$i] =~ s/\.//g;
}

foreach $ver (@lsbversions) {
	$suffix = "_LSB$ver";
	$suffix =~ s/\.//g;
	dumptable("Rgroup LIKE 'Sig%'","SigTags$suffix",$ver);
	print "int numSigIdxTags$suffix = sizeof(SigTags$suffix)/sizeof(RpmIdxTagFuncRec);\n\n";
}

print "RpmIdxTagFuncRec* SigTags[] = {SigTags_LSB".join(", SigTags_LSB", @lsbvernames)."};\n";
print "int numSigIdxTags[] = {sizeof(SigTags_LSB".join(")/sizeof(RpmIdxTagFuncRec), sizeof(SigTags_LSB", @lsbvernames).")/sizeof(RpmIdxTagFuncRec)};\n\n";

foreach $ver (@lsbversions) {
	$suffix = "_LSB$ver";
	$suffix =~ s/\.//g;
	dumptable("(Rgroup NOT LIKE 'Sig%' AND Rgroup!='Ignore')","HdrTags$suffix",$ver);
	print "int numHdrIdxTags$suffix = sizeof(HdrTags$suffix)/sizeof(RpmIdxTagFuncRec);\n\n";
}

print "RpmIdxTagFuncRec* HdrTags[] = {HdrTags_LSB".join(", HdrTags_LSB", @lsbvernames)."};\n";
print "int numHdrIdxTags[] = {sizeof(HdrTags_LSB".join(")/sizeof(RpmIdxTagFuncRec), sizeof(HdrTags_LSB", @lsbvernames).")/sizeof(RpmIdxTagFuncRec)};\n\n";
