#!/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); }