--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bldsystemtools/commonbldutils/BxCopy.pm Tue Feb 02 01:39:43 2010 +0200
@@ -0,0 +1,148 @@
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# This module implements the MD5 version of the Evalid's comapre
+#
+#
+
+package BxCopy;
+
+use strict;
+use File::Copy;
+use File::Find;
+use File::Path;
+
+# FilterDir
+#
+# Inputs
+# $iDir - Directory to process
+# $iExclude - Reference to array of regular expression patterns to exclude
+# $iInclude - Reference to array of regular expression patterns to include
+#
+# Outputs
+# @iFinalFileList - Filtered list relative filenames
+#
+# Description
+# This function produces a filtered list of filenames in the specified directory
+
+sub FilterDir
+{
+ my ($iDir,$iExclude,$iInclude) = @_;
+
+ my (@iFileList, @iFinalFileList);
+ my ($iExcludeCount, $iIncludeCount);
+
+ # Produce full filelist listing without directory names
+ # Remove the specified directory path from the front of the filename
+ find sub {
+ if (!-d)
+ {
+ my $filepath = $File::Find::name;
+ $filepath=~ s#^$iDir/##i;
+ push @iFileList, $filepath;
+ }
+ }, $iDir;
+
+ #Calculate the number of regex includes and excludes to optimise the filtering
+ if (defined $iExclude){
+ $iExcludeCount = scalar(@$iExclude);
+ } else {
+ $iExcludeCount = 0;
+ }
+
+ if (defined $iInclude){
+ $iIncludeCount = scalar(@$iInclude);
+ } else {
+ $iIncludeCount = 0;
+ }
+
+ # return unmodified list of files if there are no regexs to fitler it by
+ return \@iFileList if (($iExcludeCount == 0) && ($iIncludeCount == 0));
+
+ foreach my $iFile ( @iFileList)
+ {
+ my $iExcludeFile = 0;
+
+ # Process all Exclude RegEx to see if this file matches
+ foreach my $iExcludeRegEx (@$iExclude)
+ {
+ if ($iFile =~ /$iExcludeRegEx/i)
+ {
+ # Mark this file to be excluded from the final list
+ $iExcludeFile = 1;
+ }
+ }
+
+ # Process all Include RegEx to see if this file matches
+ foreach my $iIncludeRegEx (@$iInclude)
+ {
+ if ($iFile =~ /$iIncludeRegEx/i)
+ {
+ # Mark this file to be Included in the final list
+ $iExcludeFile = 0;
+ }
+ }
+
+ # Added the file to the final list based on the flag
+ push @iFinalFileList, $iFile unless $iExcludeFile;
+ }
+
+ return \@iFinalFileList;
+
+}
+
+# CopyFiles
+#
+# Inputs
+# $iSource - Directory to copy from
+# $iTarget - Directory to copy to
+# $iCopyFiles - Reference to an array of relative filenames to copy
+#
+# Outputs
+#
+# Description
+# This function copies files from one dir to another
+
+sub CopyFiles
+{
+ my ($iSource, $iTarget, $iCopyFiles, $iVerbose, $iNoAction) = @_;
+
+ print "No Copy specified, would have performed:-\n" if (defined $iNoAction);
+
+ #Loop through the list of files
+ my ($j);
+ for($j = 0; $j < scalar(@$iCopyFiles); $j++)
+ {
+ my ($iFile) = $$iCopyFiles[$j];
+ #Check if the to final directory exists, if not create it
+ my ($iDir) = $iFile =~ m#(.*)/.*#;
+
+ if (defined $iVerbose)
+ {
+ print $iSource."/".$iFile." => ".$iTarget."/".$iFile."\n";
+ }
+
+ if (!defined $iNoAction)
+ {
+ if (!-d $iTarget."/".$iDir)
+ {
+ mkpath ($iTarget."/".$iDir) || die "ERROR: Cannot create ".$iTarget."/".$iDir;
+ }
+ copy($iSource."/".$iFile,$iTarget."/".$iFile) || die "ERROR: Failed to copy ".$iSource."/".$iFile." to ".$iTarget."/".$iFile." $!";
+ }
+ }
+
+ print "$j files processed\n";
+}
+
+1;