#!/usr/bin/perl -w my $kalyptusdir = "../../../kdebindings/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";