#!/usr/bin/perl -w

my $kalyptusdir = "../../../tdebindings/kalyptus";

use File::Basename;

my $here = `pwd`;
chomp $here;
my $outdir = $here . "/generate.pl.tmpdir";
my $finaloutdir = $here;

## Note: outdir and finaloutdir should NOT be the same dir!

if (! -d $outdir) { mkdir $outdir; }

mkdir $finaloutdir unless (-d $finaloutdir);


# Need to cd to kalyptus's directory so that perl finds Ast.pm etc.
chdir "$kalyptusdir" or die "Couldn't go to $kalyptusdir (edit script to change dir)\n";

# Find out which header files we need to parse
my %excludes = (
);

# List headers, and exclude the ones listed above
my @headers = ();
my $incdir=$here;
opendir (INCS, $incdir) or die "Couldn't find $incdir";
foreach $filename (readdir(INCS)) {
    $entry = $incdir."/".$filename;
    if ( ( -e $entry or -l $entry )         # A real file or a symlink
        && ( ! -d _ ) )                     # Not a symlink to a dir though
    {
        push(@headers, $entry)
          if ( !defined $excludes{$filename} # Not excluded
	      && $filename =~ /\.h$/ ); # Not a backup file etc. Only headers.
    }
}
closedir INCS;

# Launch kalyptus
system "perl kalyptus @ARGV -fECMA --name=ksvg --outputdir=$outdir @headers";
my $exit = $? >> 8;
exit $exit if ($exit);

# Generate diff for generateddata.cpp
if ( -e "$finaloutdir/generateddata.cpp" ) { 
  system "diff -u $finaloutdir/generateddata.cpp $outdir/generateddata.cpp > $outdir/generateddata.cpp.diff";
}

# Copy changed or new files to finaloutdir
#opendir (OUT, $outdir) or die "Couldn't opendir $outdir";
#foreach $filename (readdir(OUT)) {
my $filename = "generateddata.cpp";
  #next if ( -d "$outdir/$filename" ); # only files, not dirs
  my $docopy = 1;
  if ( -f "$finaloutdir/$filename" ) {
    # How can I do a fast file compare in perl?
    system "cmp -s $outdir/$filename $finaloutdir/$filename";
    $docopy = ($?>>8);  # 0 if files identical, 1 if different
  }
  if ($docopy) {
      #print STDERR "Updating $filename...\n";
      system "cp -f $outdir/$filename $finaloutdir/$filename";
  }

# Delete outdir
system "rm -rf $outdir";
