--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/compress_zips.pl Mon Jan 18 21:35:57 2010 +0200
@@ -0,0 +1,171 @@
+#
+# Copyright (c) 2006 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:
+#
+
+use strict;
+use File::Find; # for finding
+use File::Basename; # for fileparse
+use File::Path;
+use File::Copy;
+use Getopt::Long;
+use Cwd;
+
+my ($back_up);
+my (@zips, @temp_paths);
+my (%zips_files, %zips_paths);
+
+my $temp_dir = "\\compress_temp\\";
+my $version = "1.0";
+
+info();
+
+if ( !GetOptions(
+ 'backup' => \$back_up,
+ 'z=s' => \@zips))
+{
+ &error_msg("Invalid arguments!\n");
+}
+
+if (! scalar (@zips)) {
+ &error_msg("Invalid arguments!\n");
+}
+
+if (scalar (@zips) == 1) {
+ &error_msg("More that one input file is needed!\n");
+}
+
+foreach (@zips) {
+ if (! -e $_) {
+ &error_msg("File not found : $_\n");
+ }
+}
+
+foreach (@zips) {
+ unzip_temp($_);
+}
+
+rezip();
+
+rmtree($temp_dir);
+
+sub unzip_temp {
+ my $zip_file = shift;
+
+ my($n, $d, $ext) = fileparse($zip_file, '\..*');
+
+ mkpath ($temp_dir.$n);
+ push @temp_paths, $n;
+ $zips_paths{$n}=$d;
+
+ my $extrCmd = "7za.exe x -y ${zip_file} -o${temp_dir}${n}";
+ print "$extrCmd";
+ system ("$extrCmd");
+
+ if ($back_up) {
+ print "rename ${zip_file} to ${d}${n}_orig${ext}\n";
+ my $backup_name = ${d}.${n}."_orig".${ext};
+ rename (${zip_file}, ${backup_name});
+ }
+
+ unlink (${zip_file});
+
+
+ if (-e "${temp_dir}${n}\\checksum.md5") {
+ unlink ("${temp_dir}${n}\\checksum.md5");
+ }
+
+ print "\\epoc32\\tools\\evalid.pl -g ${temp_dir}${n} ${temp_dir}${n}\\checksum.md5";
+ system ("\\epoc32\\tools\\evalid.pl -g ${temp_dir}${n} ${temp_dir}${n}\\checksum.md5");
+
+ open (MD5_FILE,"${temp_dir}${n}\\checksum.md5") or &error_msg("Cannot open ${temp_dir}${n}\\checksum.md5");
+
+ while (<MD5_FILE>) {
+ chomp;
+ next if (/^\/\//); # Skip comment lines
+ next if (/^#/); # Skip comment lines
+ next if (/^ *$/); # Skip empty lines
+ $_ =~ s/\//\\/g; #Change / marks to \
+
+ next if !/(TYPE=)/i;
+
+ my $file_name = $_;
+ $file_name =~ s/( TYPE=).*//i;
+
+ $_ =~ s/.*MD5=//i;
+
+ $file_name = lc $file_name;
+ $file_name =~ s/\\/\//g; #Change / marks to \
+
+ my %temp;
+ $temp{$_}=1;
+ if (!exists $zips_files{$file_name}) {
+ $zips_files{$file_name}={%temp};
+ }
+ else {
+# print "$zips_files{$file_name}{$_}\t $_ \n";
+ if (exists $zips_files{$file_name}{$_}) {
+ $zips_files{$file_name}->{$_}=$zips_files{$file_name}->{$_}+1;
+ }
+ }
+ }
+
+ close MD5_FILE;
+}
+
+sub rezip {
+ my $given_files = scalar (@zips);
+ my @zip_list;
+ print "\nrezip $given_files \n";
+
+ foreach my $key (keys %zips_files) {
+ foreach my $key2 (keys %{$zips_files{$key}}) {
+ if ($zips_files{$key}{$key2} != $given_files) {
+ $key =~ s/\//\\/g; #Change / marks to \
+ push @zip_list, $key."\n";
+ }
+ }
+ }
+
+ my $current_dir = cwd();
+ foreach my $zip_name (keys %zips_paths) {
+ my $name=$zips_paths{$zip_name}.$zip_name.".zip";
+ chdir(${temp_dir}.${zip_name});
+ open (ZIP,"| zip -r $name -@");
+ print ZIP @zip_list;
+ close ZIP;
+ chdir($current_dir);
+ }
+}
+
+
+sub info {
+ print "compress_zips.pl version $version \n";
+ print "Remove files that are same in each given zipfile.\n";
+ print "Uses evalid to compare files inside zips.\n";
+}
+
+sub error_msg ($){
+ my($ErrorMsg);
+ ($ErrorMsg)=@_;
+ my $given_command=$0;
+ $given_command =~ s/.*\\(\w+\.\w+)$/$1/;
+ print "Error: $ErrorMsg \n";
+ print "Usage: \n$given_command -z \\zips\\delta_western.zip -z \\zips\\delta_china.zip -z \\zips\\delta_japan.zip -backup\n";
+ print " -z <zipfile> zipfiles that should compress, two or more are needed\n";
+ print " -backup rename original zip files adding '_orig' end of the filename \n";
+ print "Example: \n$given_command -z \\zips\\delta_western.zip -z \\zips\\delta_china.zip -z \\zips\\delta_japan.zip -backup\n";
+ print "\n";
+ die "\n";
+}
\ No newline at end of file