instsetoo_native/inc_openoffice/windows/msi_templates/Property.idt |    1 
 scp2/source/ooo/vc_redist.scp                                      |    4 
 solenv/bin/modules/installer/windows/mergemodule.pm                |   56 
+++++++++-
 3 files changed, 60 insertions(+), 1 deletion(-)

New commits:
commit 80a921e88a036d42b4b884bb3e0b651fc083c1cd
Author: Andras Timar <ati...@suse.com>
Date:   Mon May 14 22:08:38 2012 +0200

    fdo#46519 workaround of MSI installer error 1935
    
    In some circumstances installation of embedded VC++ runtime
    fails with error code 1935. This usually occurs, when there are
    many different versions of VC++ runtimes installed on the computer,
    including beta versions. We can workaround this Microsoft bug, if we
    don't install our VC++ runtime. A new property was introduced. It is
    called VC_REDIST, and installation of VC++ runtime depends on its
    value. (BTW the solution is general, ComponentCondition can be used
    for any merge module, now we have only the VC++ runtime merge module.)
    When the user experiences error code 1935, he should try to install
    LibreOffice with the following command line:
    msiexec /i <msi file name> VC_REDIST=0
    The patch fixes another minor issue. 64-bit VC++ runtime will
    not be installed on 32-bit systems any more.
    
    Change-Id: I I6c5e066c6e60b011235e6019a8a35c9e953209bc

diff --git a/instsetoo_native/inc_openoffice/windows/msi_templates/Property.idt 
b/instsetoo_native/inc_openoffice/windows/msi_templates/Property.idt
index 188f344..920251e 100644
--- a/instsetoo_native/inc_openoffice/windows/msi_templates/Property.idt
+++ b/instsetoo_native/inc_openoffice/windows/msi_templates/Property.idt
@@ -59,3 +59,4 @@ STR_MS_POWERPOINT_TEMPLATE    OOO_STR_MS_POWERPOINT_TEMPLATE
 STR_MS_POWERPOINT_SHOW OOO_STR_MS_POWERPOINT_SHOW
 STR_INSTALLATION_WIZARD        OOO_STR_INSTALLATION_WIZARD
 UpgradeCode    UPGRADECODETEMPLATE
+VC_REDIST      1
diff --git a/scp2/source/ooo/vc_redist.scp b/scp2/source/ooo/vc_redist.scp
index a01f891..5ec433c 100644
--- a/scp2/source/ooo/vc_redist.scp
+++ b/scp2/source/ooo/vc_redist.scp
@@ -33,12 +33,14 @@ MergeModule gid_MergeModule_Microsoft_VC90_CRT_x86
     Feature = gm_Root;
     Name = "Microsoft_VC90_CRT_x86.msm";
     RootDir = "TARGETDIR";
+    ComponentCondition = "VC_REDIST=1";
 End
 
 MergeModule gid_MergeModule_policy_9_0_Microsoft_VC90_CRT_x86
     Feature = gm_Root;
     Name = "policy_9_0_Microsoft_VC90_CRT_x86.msm";
     RootDir = "TARGETDIR";
+    ComponentCondition = "VC_REDIST=1";
 End
 
 #if defined(BUILD_X64)
@@ -47,12 +49,14 @@ MergeModule gid_MergeModule_Microsoft_VC90_CRT_x86_x64
     Feature = gm_Root;
     Name = "Microsoft_VC90_CRT_x86_x64.msm";
     RootDir = "TARGETDIR";
+    ComponentCondition = "(VC_REDIST=1) AND VersionNT64";
 End
 
 MergeModule gid_MergeModule_policy_9_0_Microsoft_VC90_CRT_x86_x64
     Feature = gm_Root;
     Name = "policy_9_0_Microsoft_VC90_CRT_x86_x64.msm";
     RootDir = "TARGETDIR";
+    ComponentCondition = "(VC_REDIST=1) AND VersionNT64";
 End
 
 #endif
diff --git a/solenv/bin/modules/installer/windows/mergemodule.pm 
b/solenv/bin/modules/installer/windows/mergemodule.pm
index b9591c4..7faa4b5 100755
--- a/solenv/bin/modules/installer/windows/mergemodule.pm
+++ b/solenv/bin/modules/installer/windows/mergemodule.pm
@@ -302,6 +302,7 @@ sub merge_mergemodules_into_msi_database
                 $onemergemodulehash{'cabinetfile'} = $workdir . 
$installer::globals::separator . $cabinetfile;
                 $onemergemodulehash{'filenumber'} = $filecounter;
                 $onemergemodulehash{'componentnames'} = \%componentnames;
+                $onemergemodulehash{'componentcondition'} = 
$mergemodule->{'ComponentCondition'};
                 $onemergemodulehash{'cabfilename'} = $cabfilename;
                 $onemergemodulehash{'feature'} = $mergemodule->{'Feature'};
                 $onemergemodulehash{'rootdir'} = $mergemodule->{'RootDir'};
@@ -404,6 +405,7 @@ sub merge_mergemodules_into_msi_database
             if ( -f "FeatureC.idt" ) { 
installer::systemactions::rename_one_file("FeatureC.idt", 
"old.FeatureC.idt.$counter"); }
             if ( -f "MsiAssembly.idt" ) { 
installer::systemactions::rename_one_file("MsiAssembly.idt", 
"old.MsiAssembly.idt.$counter"); }
             if ( -f "MsiAssem.idt" ) { 
installer::systemactions::rename_one_file("MsiAssem.idt", 
"old.MsiAssem.idt.$counter"); }
+            if ( -f "Componen.idt" ) { 
installer::systemactions::rename_one_file("Componen.idt", 
"old.Componen.idt.$counter"); }
 
             # Extracting tables
 
@@ -412,6 +414,7 @@ sub merge_mergemodules_into_msi_database
             my $workingtables = "File Media Directory FeatureComponents"; # 
required tables
             # Optional tables can be added now
             if ( $mergemodulehash->{'hasmsiassemblies'} ) { $workingtables = 
$workingtables . " MsiAssembly"; }
+            if ( $mergemodulehash->{'componentcondition'} ) { $workingtables = 
$workingtables . " Component"; }
 
             # Table "Feature" has to be exported, but it is not necessary to 
import it.
             if ( $^O =~ /cygwin/i ) {
@@ -451,8 +454,9 @@ sub merge_mergemodules_into_msi_database
             if ( -f "Directory.idt" ) { 
installer::systemactions::rename_one_file("Directory.idt", "Director.idt"); }
             if ( -f "FeatureComponents.idt" ) { 
installer::systemactions::rename_one_file("FeatureComponents.idt", 
"FeatureC.idt"); }
             if ( -f "MsiAssembly.idt" ) { 
installer::systemactions::rename_one_file("MsiAssembly.idt", "MsiAssem.idt"); }
+            if ( -f "Component.idt" ) { 
installer::systemactions::rename_one_file("Component.idt", "Componen.idt"); }
 
-            # Changing content of tables: File, Media, Directory, 
FeatureComponent, MsiAssembly
+            # Changing content of tables: File, Media, Directory, 
FeatureComponent, MsiAssembly, Component
             installer::logger::include_timestamp_into_logfile("\nPerformance 
Info: Changing Media table");
             change_media_table($mergemodulehash, $workdir, $mergemodulegid, 
$allupdatelastsequences, $allupdatediskids);
             installer::logger::include_timestamp_into_logfile("\nPerformance 
Info: Changing File table");
@@ -467,6 +471,12 @@ sub merge_mergemodules_into_msi_database
                 change_msiassembly_table($mergemodulehash, $workdir);
             }
 
+            if ( $mergemodulehash->{'componentcondition'} )
+            {
+                
installer::logger::include_timestamp_into_logfile("\nPerformance Info: Changing 
Component table");
+                change_component_table($mergemodulehash, $workdir);
+            }
+
             # msidb.exe does not merge InstallExecuteSequence, 
AdminExecuteSequence and AdvtExecuteSequence. Instead it creates
             # new tables ModuleInstallExecuteSequence, 
ModuleAdminExecuteSequence and ModuleAdvtExecuteSequence that need to be
             # merged into the three ExecuteSequences with the following 
process (also into InstallUISequence.idt).
@@ -1365,6 +1375,50 @@ sub change_featurecomponent_table
     installer::files::save_file($idtfilename, $filecontent);
 }
 
+###############################################################################
+# In the components table, the conditions of merge modules should be updated
+###############################################################################
+
+sub change_component_table
+{
+    my ($mergemodulehash, $workdir) = @_;
+
+    my $infoline = "Changing content of table \"Component\"\n";
+    push( @installer::globals::logfileinfo, $infoline);
+
+    my $idtfilename = "Componen.idt";
+    if ( ! -f $idtfilename ) { installer::exiter::exit_program("ERROR: Could 
not find file \"$idtfilename\" in \"$workdir\" !", "change_component_table"); }
+
+    my $filecontent = installer::files::read_file($idtfilename);
+
+    for ( my $i = 0; $i <= $#{$filecontent}; $i++ )
+    {
+        my $component;
+        foreach $component ( keys %{$mergemodulehash->{'componentnames'}} )
+        {
+            if ( ${$filecontent}[$i] =~ /^\s*$component/)
+            {
+                if ( ${$filecontent}[$i] =~ 
/^\s*(.+?)\t(.*?)\t(.+?)\t(.+?)\t(.*?)\t(.*?)\s*$/ )
+                {
+                    $infoline = "Adding condition ($5) from scp to component 
$1\n";
+                    push( @installer::globals::logfileinfo, $infoline);
+                    if ($5)
+                    {
+                        ${$filecontent}[$i] = "$1\t$2\t$3\t$4\t($5) AND 
($mergemodulehash->{'componentcondition'})\t$6\n";
+                    }
+                    else
+                    {
+                        ${$filecontent}[$i] = 
"$1\t$2\t$3\t$4\t$mergemodulehash->{'componentcondition'}\t$6\n";
+                    }
+                }
+            }
+        }
+    }
+
+    # saving file
+    installer::files::save_file($idtfilename, $filecontent);
+}
+
 #########################################################################
 # In the directory table, the directory parent has to be changed,
 # if it is not TARGETDIR.
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to