31 lines
740 B
Perl
31 lines
740 B
Perl
#!/usr/bin/perl
|
|
|
|
# A replacement for "cmake -E copy_if_different" that supports multiple files,
|
|
# which old cmake versions do not support
|
|
|
|
# Usage: copy-if-different.pl src-file [src-file...] dest-dir
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Digest::SHA;
|
|
use File::Basename;
|
|
use File::Copy;
|
|
|
|
sub sha_file {
|
|
my $filename = shift;
|
|
my $sha = Digest::SHA->new(256);
|
|
$sha->addfile($filename);
|
|
return $sha->hexdigest;
|
|
}
|
|
|
|
my $dest_dir = pop @ARGV or die "no destination dir";
|
|
-d $dest_dir or die "not a directory: $dest_dir";
|
|
my @src_files = @ARGV or die "no source files";
|
|
|
|
foreach my $file (@src_files) {
|
|
my $dest = "$dest_dir/" . basename($file);
|
|
next if -f $dest && sha_file($file) eq sha_file($dest);
|
|
copy($file, $dest);
|
|
}
|