diff options
author | Ivo Hinkelmann <ihi@openoffice.org> | 2007-07-12 10:17:01 +0000 |
---|---|---|
committer | Ivo Hinkelmann <ihi@openoffice.org> | 2007-07-12 10:17:01 +0000 |
commit | 05a4d228c8443f3c8fcf43786824ee6bf9a48353 (patch) | |
tree | f86fc1e5fcc9218d8755eb332cb21429aa65d47b /solenv | |
parent | 80ea55e213886dc3a616b9242614aef37e2351e3 (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.pm | 77 |
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"); + } } } |