#! /usr/bin/perl
##
## A code check script that evaluates the differences with COIN.
##

if (! @ARGV) {
   print "coin <logfile>\n";
   exit(1);
}
#
# Checkout the latest version of COIN
#
`rm -Rf COIN`;
system("cvs -Q -d :pserver:anonymous\@www.coin-or.org:2401/home/coin/coincvs checkout Osi Cgl Clp");


$coindir="packages/tpl/coin/COIN_2006Sep06/";
open(LOGFILE,">$ARGV[0]") || die "Error opening $ARGV[0]";
#
# Find the COIN are source directories
#
$packages=`ls COIN`;
@dirs = split(/\n/,$packages);
#
# For each source directory, collect the source lines info.
#
foreach $dir (@dirs) {
  if (($dir ne "CVS") && ($dir ne "Makefiles") && ($dir ne "Win") && (-d "COIN/$dir")) {
     $tmp = `diff -r COIN/$dir $coindir/$dir`;
     print LOGFILE "\n";
     print LOGFILE "COIN DIFF SUMMARY: COIN/$dir\n";
     print LOGFILE "\n";
     print LOGFILE "$tmp\n";
     print LOGFILE "\n";
     @lines = split(/\n/,$tmp);
     @onlylines1 = grep(/^Only/,@lines);
     @onlylines2 = grep(!/CVS/,@onlylines1);
     @difflines1 = grep(/^diff/,@lines);
     @difflines2 = grep(!/CVS/,@difflines1);
     print "    <Measurement>\n";
     print "      <Name>$dir</Name>\n";
     print "      <Value>" . ($#difflines2 + 1 + $#onlylines2 + 1) . "</Value>\n";
     foreach $line (@difflines2) {
       $filename = (split(/ /,$line))[2];
       print "      <FileDifference>$filename</FileDifference>\n";
       }
     foreach $line (@onlylines2) {
       $filepath = (split(/ /,$line))[2];
       $filepath =~ s/://;
       $filename = (split(/ /,$line))[3];
       print "      <FileAdditionOrDeletion>$filepath/$filename</FileAdditionOrDeletion>\n";
       }
     print "    </Measurement>\n";
     }
  }

close(LOGFILE);
