summaryrefslogtreecommitdiff
path: root/solenv
diff options
context:
space:
mode:
authorIvo Hinkelmann <ihi@openoffice.org>2007-07-12 10:17:01 +0000
committerIvo Hinkelmann <ihi@openoffice.org>2007-07-12 10:17:01 +0000
commit05a4d228c8443f3c8fcf43786824ee6bf9a48353 (patch)
treef86fc1e5fcc9218d8755eb332cb21429aa65d47b /solenv
parent80ea55e213886dc3a616b9242614aef37e2351e3 (diff)
INTEGRATION: CWS native97 (1.39.84); FILE MERGED
2007/07/09 09:55:22 is 1.39.84.2: #148088# return value of new msitran.exe 2007/07/06 14:05:47 is 1.39.84.1: #148088# return value of new msitran.exe
Diffstat (limited to 'solenv')
-rw-r--r--solenv/bin/modules/installer/windows/msiglobal.pm77
1 files changed, 72 insertions, 5 deletions
diff --git a/solenv/bin/modules/installer/windows/msiglobal.pm b/solenv/bin/modules/installer/windows/msiglobal.pm
index 1ed7a5a50e58..de8e95617b43 100644
--- a/solenv/bin/modules/installer/windows/msiglobal.pm
+++ b/solenv/bin/modules/installer/windows/msiglobal.pm
@@ -4,9 +4,9 @@
#
# $RCSfile: msiglobal.pm,v $
#
-# $Revision: 1.39 $
+# $Revision: 1.40 $
#
-# last change: $Author: kz $ $Date: 2007-05-21 10:40:48 $
+# last change: $Author: ihi $ $Date: 2007-07-12 11:17:01 $
#
# The Contents of this file are made available subject to
# the terms of GNU Lesser General Public License Version 2.1.
@@ -36,6 +36,7 @@
package installer::windows::msiglobal;
use Cwd;
+use Digest::MD5;
use installer::converter;
use installer::exiter;
use installer::files;
@@ -725,9 +726,9 @@ sub create_transforms
# Iterating over all files
- for ( my $i = 0; $i <= $#{$languagesarray}; $i++ )
+ foreach ( @{$languagesarray} )
{
- my $onelanguage = ${$languagesarray}[$i];
+ my $onelanguage = $_;
if ( $onelanguage eq $defaultlanguage ) { next; }
@@ -743,6 +744,64 @@ sub create_transforms
my $infoline = "Systemcall: $systemcall\n";
push( @installer::globals::logfileinfo, $infoline);
+ # Problem: msitran.exe in version 4.0 always returns "1", even if no failure occured.
+ # Therefore it has to be checked, if this is version 4.0. If yes, if the mst file
+ # exists and if it is larger than 0 bytes. If this is true, then no error occured.
+ # File Version of msitran.exe: 4.0.6000.16384 has checksum: "b66190a70145a57773ec769e16777b29"
+
+ if ($returnvalue)
+ {
+ $infoline = "WARNING: Returnvalue of $msitran is not 0. Checking version of $msitran!\n";
+ push( @installer::globals::logfileinfo, $infoline);
+
+ open(FILE, "<$msitran") or die "ERROR: Can't open $msitran for creating file hash";
+ binmode(FILE);
+ my $digest = Digest::MD5->new->addfile(*FILE)->hexdigest;
+ close(FILE);
+
+ my $problemchecksum = "b66190a70145a57773ec769e16777b29"; # File MsiTran.exe in version 4.0.6000.16384
+
+ $infoline = "Checksum of problematic MsiTran.exe (4.0.6000.16384): $problemchecksum\n";
+ push( @installer::globals::logfileinfo, $infoline);
+ $infoline = "Checksum of used MsiTran.exe: $digest\n";
+ push( @installer::globals::logfileinfo, $infoline);
+
+ if ( $digest eq $problemchecksum )
+ {
+ # Check existence of mst
+ if ( -f $transformfile )
+ {
+ $infoline = "File $transformfile exists.\n";
+ push( @installer::globals::logfileinfo, $infoline);
+ my $filesize = (stat($transformfile))[7];
+ $infoline = "Size of $transformfile: $filesize\n";
+ push( @installer::globals::logfileinfo, $infoline);
+
+ if ( $filesize > 0 )
+ {
+ $infoline = "Info: Returnvalue $returnvalue of $msitran is no problem :-) .\n";
+ push( @installer::globals::logfileinfo, $infoline);
+ $returnvalue = 0; # reset the error
+ }
+ else
+ {
+ $infoline = "Filesize indicates that an error occured.\n";
+ push( @installer::globals::logfileinfo, $infoline);
+ }
+ }
+ else
+ {
+ $infoline = "File $transformfile does not exist -> An error occured.\n";
+ push( @installer::globals::logfileinfo, $infoline);
+ }
+ }
+ else
+ {
+ $infoline = "This is not a problematic version of msitran.exe. Therefore the error is not caused by problematic msitran.exe.\n";
+ push( @installer::globals::logfileinfo, $infoline);
+ }
+ }
+
if ($returnvalue)
{
$infoline = "ERROR: Could not execute $msitran!\n";
@@ -756,7 +815,15 @@ sub create_transforms
# The reference database can be deleted
- unlink($referencedbname);
+ my $result = unlink($referencedbname);
+ # $result contains the number of deleted files
+
+ if ( $result == 0 )
+ {
+ $infoline = "ERROR: Could not remove file $$referencedbname !\n";
+ push( @installer::globals::logfileinfo, $infoline);
+ installer::exiter::exit_program($infoline, "create_transforms");
+ }
}
}