summaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorBen Laurie <ben@links.org>2013-03-04 16:56:18 +0000
committerBen Laurie <ben@links.org>2013-03-04 16:56:18 +0000
commit654d227a86618dea258a3a8cfa23866f2f410148 (patch)
treee49c446914997f85758349e30b641cd5f4accf42 /util
parent2f297fce734aa1ba38836e1a75f65e0a48bfa0c7 (diff)
Only copy headers if they've changed.
Diffstat (limited to 'util')
-rwxr-xr-xutil/copy-if-different.pl81
-rwxr-xr-xutil/mk1mf.pl2
2 files changed, 82 insertions, 1 deletions
diff --git a/util/copy-if-different.pl b/util/copy-if-different.pl
new file mode 100755
index 0000000000..47bc0abd32
--- /dev/null
+++ b/util/copy-if-different.pl
@@ -0,0 +1,81 @@
+#!/usr/local/bin/perl
+
+use strict;
+
+use Fcntl;
+
+
+# copy-if-different.pl
+
+# Copy to the destination if the source is not the same as it.
+
+my $stripcr = 0;
+
+my @filelist;
+
+foreach my $arg (@ARGV) {
+ $arg =~ s|\\|/|g; # compensate for bug/feature in cygwin glob...
+ foreach (glob $arg)
+ {
+ push @filelist, $_;
+ }
+}
+
+my $fnum = @filelist;
+
+if ($fnum <= 1)
+ {
+ die "Need at least two filenames";
+ }
+
+my $dest = pop @filelist;
+
+if ($fnum > 2 && ! -d $dest)
+ {
+ die "Destination must be a directory";
+ }
+
+foreach (@filelist)
+ {
+ my $dfile;
+ if (-d $dest)
+ {
+ $dfile = $_;
+ $dfile =~ s|^.*[/\\]([^/\\]*)$|$1|;
+ $dfile = "$dest/$dfile";
+ }
+ else
+ {
+ $dfile = $dest;
+ }
+
+ my $buf;
+ if (-f $dfile)
+ {
+ sysopen(IN, $_, O_RDONLY|O_BINARY) || die "Can't Open $_";
+ sysopen(OUT, $dfile, O_RDONLY|O_BINARY)
+ || die "Can't Open $dfile";
+ while (sysread IN, $buf, 10240)
+ {
+ my $b2;
+ goto copy if !sysread(OUT, $b2, 10240) || $buf ne $b2;
+ }
+ goto copy if sysread(OUT, $buf, 1);
+ close(IN);
+ close(OUT);
+ print "NOT copying: $_ to $dfile\n";
+ next;
+ }
+ copy:
+ sysopen(IN, $_, O_RDONLY|O_BINARY) || die "Can't Open $_";
+ sysopen(OUT, $dfile, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY)
+ || die "Can't Open $dfile";
+ while (sysread IN, $buf, 10240)
+ {
+ syswrite(OUT, $buf, length($buf));
+ }
+ close(IN);
+ close(OUT);
+ print "Copying: $_ to $dfile\n";
+ }
+
diff --git a/util/mk1mf.pl b/util/mk1mf.pl
index 24ee3120dc..e0e8d57243 100755
--- a/util/mk1mf.pl
+++ b/util/mk1mf.pl
@@ -1353,7 +1353,7 @@ sub do_copy_rule
if ($n =~ /bss_file/)
{ $pp=".c"; }
else { $pp=$p; }
- $ret.="$to${o}$n$pp: \$(SRC_D)$o$_$pp $to\n\t\$(CP) \"\$(SRC_D)$o$_$pp\" \"$to${o}$n$pp\"\n\n";
+ $ret.="$to${o}$n$pp: \$(SRC_D)$o$_$pp $to\n\t\$(SRC_D)${o}util${o}copy-if-different.pl \"\$(SRC_D)$o$_$pp\" \"$to${o}$n$pp\"\n\n";
}
return($ret);
}