xref: /trunk/main/solenv/bin/modules/installer/windows/patch.pm (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir#*************************************************************************
2*cdf0e10cSrcweir#
3*cdf0e10cSrcweir# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir#
5*cdf0e10cSrcweir# Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir#
7*cdf0e10cSrcweir# OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir#
9*cdf0e10cSrcweir# This file is part of OpenOffice.org.
10*cdf0e10cSrcweir#
11*cdf0e10cSrcweir# OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir# it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir# only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir#
15*cdf0e10cSrcweir# OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir# but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir# GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir# (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir#
21*cdf0e10cSrcweir# You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir# version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir# <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir# for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir#
26*cdf0e10cSrcweir#*************************************************************************
27*cdf0e10cSrcweir
28*cdf0e10cSrcweirpackage installer::windows::patch;
29*cdf0e10cSrcweir
30*cdf0e10cSrcweiruse installer::exiter;
31*cdf0e10cSrcweiruse installer::files;
32*cdf0e10cSrcweiruse installer::globals;
33*cdf0e10cSrcweiruse installer::windows::idtglobal;
34*cdf0e10cSrcweir
35*cdf0e10cSrcweir####################################################################################
36*cdf0e10cSrcweir# Creating the file Upgrade.idt dynamically
37*cdf0e10cSrcweir# Content:
38*cdf0e10cSrcweir# UpgradeCode VersionMin VersionMax Language Attributes Remove ActionProperty
39*cdf0e10cSrcweir####################################################################################
40*cdf0e10cSrcweir
41*cdf0e10cSrcweirsub update_patch_tables
42*cdf0e10cSrcweir{
43*cdf0e10cSrcweir    my ($basedir, $allvariables) = @_;
44*cdf0e10cSrcweir
45*cdf0e10cSrcweir    my $reglocatfile = "";
46*cdf0e10cSrcweir    my $appsearchfile = "";
47*cdf0e10cSrcweir
48*cdf0e10cSrcweir    my $reglocatfilename = $basedir . $installer::globals::separator . "RegLocat.idt";
49*cdf0e10cSrcweir    my $appsearchfilename = $basedir . $installer::globals::separator . "AppSearc.idt";
50*cdf0e10cSrcweir    my $signaturefilename = $basedir . $installer::globals::separator . "Signatur.idt";
51*cdf0e10cSrcweir
52*cdf0e10cSrcweir    if ( -f $reglocatfilename )
53*cdf0e10cSrcweir    {
54*cdf0e10cSrcweir        $reglocatfile = installer::files::read_file($reglocatfilename);
55*cdf0e10cSrcweir    }
56*cdf0e10cSrcweir    else
57*cdf0e10cSrcweir    {
58*cdf0e10cSrcweir        my @reglocattable = ();
59*cdf0e10cSrcweir        $reglocatfile = \@reglocattable;
60*cdf0e10cSrcweir        installer::windows::idtglobal::write_idt_header($reglocatfile, "reglocat");
61*cdf0e10cSrcweir    }
62*cdf0e10cSrcweir
63*cdf0e10cSrcweir    if ( -f $appsearchfilename )
64*cdf0e10cSrcweir    {
65*cdf0e10cSrcweir        $appsearchfile = installer::files::read_file($appsearchfilename);
66*cdf0e10cSrcweir    }
67*cdf0e10cSrcweir    else
68*cdf0e10cSrcweir    {
69*cdf0e10cSrcweir        my @appsearchtable = ();
70*cdf0e10cSrcweir        $appsearchfile = \@appsearchtable;
71*cdf0e10cSrcweir        installer::windows::idtglobal::write_idt_header($appsearchfile, "appsearch");
72*cdf0e10cSrcweir    }
73*cdf0e10cSrcweir
74*cdf0e10cSrcweir    if ( -f $signaturefilename )
75*cdf0e10cSrcweir    {
76*cdf0e10cSrcweir        $signaturefile = installer::files::read_file($signaturefilename);
77*cdf0e10cSrcweir    }
78*cdf0e10cSrcweir    else
79*cdf0e10cSrcweir    {
80*cdf0e10cSrcweir        my @signaturetable = ();
81*cdf0e10cSrcweir        $signaturefile = \@signaturetable;
82*cdf0e10cSrcweir        installer::windows::idtglobal::write_idt_header($signaturefile, "signatur");
83*cdf0e10cSrcweir    }
84*cdf0e10cSrcweir
85*cdf0e10cSrcweir    # Writing content into this tables
86*cdf0e10cSrcweir
87*cdf0e10cSrcweir    if ( ! $allvariables->{'PATCHCODEFILE'} ) { installer::exiter::exit_program("ERROR: Variable PATCHCODEFILE must be defined for Windows patches!", "update_patch_tables"); }
88*cdf0e10cSrcweir    my $patchcodesfilename = $installer::globals::idttemplatepath  . $installer::globals::separator . $allvariables->{'PATCHCODEFILE'};
89*cdf0e10cSrcweir    my $patchcodefile = installer::files::read_file($patchcodesfilename);
90*cdf0e10cSrcweir
91*cdf0e10cSrcweir    my $number = 0;
92*cdf0e10cSrcweir
93*cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$patchcodefile}; $i++ )
94*cdf0e10cSrcweir    {
95*cdf0e10cSrcweir        my $oneline = ${$patchcodefile}[$i];
96*cdf0e10cSrcweir
97*cdf0e10cSrcweir        if ( $oneline =~ /^\s*\#/ ) { next; }   # this is a comment line
98*cdf0e10cSrcweir        if ( $oneline =~ /^\s*$/ ) { next; }
99*cdf0e10cSrcweir
100*cdf0e10cSrcweir        my $code = "";
101*cdf0e10cSrcweir        if ( $oneline =~ /^\s*(\S+)\s/ ) { $code = $1; }
102*cdf0e10cSrcweir
103*cdf0e10cSrcweir        foreach my $name ( sort keys %installer::globals::installlocations )
104*cdf0e10cSrcweir        {
105*cdf0e10cSrcweir            $number++;
106*cdf0e10cSrcweir            my $signature = "dir" . $number . "user";
107*cdf0e10cSrcweir            my $rootvalue = "1";
108*cdf0e10cSrcweir            my $registryname = "";
109*cdf0e10cSrcweir            my $registryversion = "";
110*cdf0e10cSrcweir
111*cdf0e10cSrcweir            if ( $allvariables->{'SEARCHPRODUCTNAME'} ) { $registryname = $allvariables->{'SEARCHPRODUCTNAME'}; }
112*cdf0e10cSrcweir            else { $registryname = $allvariables->{'PRODUCTNAME'}; }
113*cdf0e10cSrcweir
114*cdf0e10cSrcweir            if ( $allvariables->{'SEARCHPRODUCTVERSION'} ) { $registryversion = $allvariables->{'SEARCHPRODUCTVERSION'}; }
115*cdf0e10cSrcweir            else { $registryversion = $allvariables->{'PRODUCTVERSION'}; }
116*cdf0e10cSrcweir
117*cdf0e10cSrcweir            my $key = "Software\\" . $allvariables->{'MANUFACTURER'} . "\\" . $registryname . "\\" . $registryversion . "\\" . $code;
118*cdf0e10cSrcweir
119*cdf0e10cSrcweir            my $type = 2;
120*cdf0e10cSrcweir            my $property = $name;
121*cdf0e10cSrcweir
122*cdf0e10cSrcweir            $oneline = $signature . "\t" . $rootvalue . "\t" . $key . "\t" . $name . "\t" . $type . "\n";
123*cdf0e10cSrcweir            push(@{$reglocatfile}, $oneline);
124*cdf0e10cSrcweir
125*cdf0e10cSrcweir            $oneline = $property . "\t" . $signature . "\n";
126*cdf0e10cSrcweir            push(@{$appsearchfile}, $oneline);
127*cdf0e10cSrcweir
128*cdf0e10cSrcweir            $signature = "dir" . $number . "mach";
129*cdf0e10cSrcweir            $rootvalue = "2";
130*cdf0e10cSrcweir
131*cdf0e10cSrcweir            $oneline = $signature . "\t" . $rootvalue . "\t" . $key . "\t" . $name . "\t" . $type . "\n";
132*cdf0e10cSrcweir            push(@{$reglocatfile}, $oneline);
133*cdf0e10cSrcweir
134*cdf0e10cSrcweir            $oneline = $property . "\t" . $signature . "\n";
135*cdf0e10cSrcweir            push(@{$appsearchfile}, $oneline);
136*cdf0e10cSrcweir        }
137*cdf0e10cSrcweir    }
138*cdf0e10cSrcweir
139*cdf0e10cSrcweir    # Saving the files
140*cdf0e10cSrcweir
141*cdf0e10cSrcweir    installer::files::save_file($reglocatfilename ,$reglocatfile);
142*cdf0e10cSrcweir    my $infoline = "Updated idt file: $reglocatfilename\n";
143*cdf0e10cSrcweir    push(@installer::globals::logfileinfo, $infoline);
144*cdf0e10cSrcweir
145*cdf0e10cSrcweir    installer::files::save_file($appsearchfilename ,$appsearchfile);
146*cdf0e10cSrcweir    $infoline = "Updated idt file: $appsearchfilename\n";
147*cdf0e10cSrcweir    push(@installer::globals::logfileinfo, $infoline);
148*cdf0e10cSrcweir
149*cdf0e10cSrcweir    installer::files::save_file($signaturefilename ,$signaturefile);
150*cdf0e10cSrcweir    $infoline = "Updated idt file: $signaturefilename\n";
151*cdf0e10cSrcweir    push(@installer::globals::logfileinfo, $infoline);
152*cdf0e10cSrcweir
153*cdf0e10cSrcweir}
154*cdf0e10cSrcweir
155*cdf0e10cSrcweir1;
156