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