1*b1cdbd2cSJim Jagielski#**************************************************************
2*b1cdbd2cSJim Jagielski#
3*b1cdbd2cSJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski#  or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski#  distributed with this work for additional information
6*b1cdbd2cSJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski#  to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski#  "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski#  with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski#
11*b1cdbd2cSJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski#
13*b1cdbd2cSJim Jagielski#  Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski#  software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski#  KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski#  specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski#  under the License.
19*b1cdbd2cSJim Jagielski#
20*b1cdbd2cSJim Jagielski#**************************************************************
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielskipackage installer::javainstaller;
24*b1cdbd2cSJim Jagielski
25*b1cdbd2cSJim Jagielskiuse Cwd;
26*b1cdbd2cSJim Jagielskiuse installer::exiter;
27*b1cdbd2cSJim Jagielskiuse installer::files;
28*b1cdbd2cSJim Jagielskiuse installer::globals;
29*b1cdbd2cSJim Jagielskiuse installer::languages;
30*b1cdbd2cSJim Jagielskiuse installer::pathanalyzer;
31*b1cdbd2cSJim Jagielskiuse installer::scriptitems;
32*b1cdbd2cSJim Jagielskiuse installer::systemactions;
33*b1cdbd2cSJim Jagielskiuse installer::worker;
34*b1cdbd2cSJim Jagielskiuse installer::logger;
35*b1cdbd2cSJim Jagielski
36*b1cdbd2cSJim Jagielski##############################################################
37*b1cdbd2cSJim Jagielski# Returning a specific language string from the block
38*b1cdbd2cSJim Jagielski# of all translations
39*b1cdbd2cSJim Jagielski##############################################################
40*b1cdbd2cSJim Jagielski
41*b1cdbd2cSJim Jagielskisub get_language_string_from_language_block
42*b1cdbd2cSJim Jagielski{
43*b1cdbd2cSJim Jagielski	my ($language_block, $language, $oldstring) = @_;
44*b1cdbd2cSJim Jagielski
45*b1cdbd2cSJim Jagielski	my $newstring = "";
46*b1cdbd2cSJim Jagielski
47*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$language_block}; $i++ )
48*b1cdbd2cSJim Jagielski	{
49*b1cdbd2cSJim Jagielski		if ( ${$language_block}[$i] =~ /^\s*$language\s*\=\s*\"(.*)\"\s*$/ )
50*b1cdbd2cSJim Jagielski		{
51*b1cdbd2cSJim Jagielski			$newstring = $1;
52*b1cdbd2cSJim Jagielski			last;
53*b1cdbd2cSJim Jagielski		}
54*b1cdbd2cSJim Jagielski	}
55*b1cdbd2cSJim Jagielski
56*b1cdbd2cSJim Jagielski	if ( $newstring eq "" )
57*b1cdbd2cSJim Jagielski	{
58*b1cdbd2cSJim Jagielski		$language = "en-US"; 	# defaulting to english
59*b1cdbd2cSJim Jagielski
60*b1cdbd2cSJim Jagielski		for ( my $i = 0; $i <= $#{$language_block}; $i++ )
61*b1cdbd2cSJim Jagielski		{
62*b1cdbd2cSJim Jagielski			if ( ${$language_block}[$i] =~ /^\s*$language\s*\=\s*\"(.*)\"\s*$/ )
63*b1cdbd2cSJim Jagielski			{
64*b1cdbd2cSJim Jagielski				$newstring = $1;
65*b1cdbd2cSJim Jagielski				last;
66*b1cdbd2cSJim Jagielski			}
67*b1cdbd2cSJim Jagielski		}
68*b1cdbd2cSJim Jagielski	}
69*b1cdbd2cSJim Jagielski
70*b1cdbd2cSJim Jagielski	return $newstring;
71*b1cdbd2cSJim Jagielski}
72*b1cdbd2cSJim Jagielski
73*b1cdbd2cSJim Jagielski##############################################################
74*b1cdbd2cSJim Jagielski# Returning the complete block in all languages
75*b1cdbd2cSJim Jagielski# for a specified string
76*b1cdbd2cSJim Jagielski##############################################################
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielskisub get_language_block_from_language_file
79*b1cdbd2cSJim Jagielski{
80*b1cdbd2cSJim Jagielski	my ($searchstring, $languagefile) = @_;
81*b1cdbd2cSJim Jagielski
82*b1cdbd2cSJim Jagielski	my @language_block = ();
83*b1cdbd2cSJim Jagielski
84*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$languagefile}; $i++ )
85*b1cdbd2cSJim Jagielski	{
86*b1cdbd2cSJim Jagielski		if ( ${$languagefile}[$i] =~ /^\s*\[\s*$searchstring\s*\]\s*$/ )
87*b1cdbd2cSJim Jagielski		{
88*b1cdbd2cSJim Jagielski			my $counter = $i;
89*b1cdbd2cSJim Jagielski
90*b1cdbd2cSJim Jagielski			push(@language_block, ${$languagefile}[$counter]);
91*b1cdbd2cSJim Jagielski			$counter++;
92*b1cdbd2cSJim Jagielski
93*b1cdbd2cSJim Jagielski			while (( $counter <= $#{$languagefile} ) && (!( ${$languagefile}[$counter] =~ /^\s*\[/ )))
94*b1cdbd2cSJim Jagielski			{
95*b1cdbd2cSJim Jagielski				push(@language_block, ${$languagefile}[$counter]);
96*b1cdbd2cSJim Jagielski				$counter++;
97*b1cdbd2cSJim Jagielski			}
98*b1cdbd2cSJim Jagielski
99*b1cdbd2cSJim Jagielski			last;
100*b1cdbd2cSJim Jagielski		}
101*b1cdbd2cSJim Jagielski	}
102*b1cdbd2cSJim Jagielski
103*b1cdbd2cSJim Jagielski	return \@language_block;
104*b1cdbd2cSJim Jagielski}
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski#######################################################
107*b1cdbd2cSJim Jagielski# Searching for the module name and description in the
108*b1cdbd2cSJim Jagielski# modules collector
109*b1cdbd2cSJim Jagielski#######################################################
110*b1cdbd2cSJim Jagielski
111*b1cdbd2cSJim Jagielskisub get_module_name_description
112*b1cdbd2cSJim Jagielski{
113*b1cdbd2cSJim Jagielski	my ($modulesarrayref, $onelanguage, $gid, $type) = @_;
114*b1cdbd2cSJim Jagielski
115*b1cdbd2cSJim Jagielski	my $found = 0;
116*b1cdbd2cSJim Jagielski
117*b1cdbd2cSJim Jagielski	my $newstring = "";
118*b1cdbd2cSJim Jagielski
119*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$modulesarrayref}; $i++ )
120*b1cdbd2cSJim Jagielski	{
121*b1cdbd2cSJim Jagielski		my $onemodule = ${$modulesarrayref}[$i];
122*b1cdbd2cSJim Jagielski
123*b1cdbd2cSJim Jagielski		if ( $onemodule->{'gid'} eq $gid )
124*b1cdbd2cSJim Jagielski		{
125*b1cdbd2cSJim Jagielski			my $typestring = $type . " " . "(" . $onelanguage . ")";
126*b1cdbd2cSJim Jagielski			if ( $onemodule->{$typestring} ) { $newstring = $onemodule->{$typestring}; }
127*b1cdbd2cSJim Jagielski			$found = 1;
128*b1cdbd2cSJim Jagielski		}
129*b1cdbd2cSJim Jagielski
130*b1cdbd2cSJim Jagielski		if ( $found ) { last; }
131*b1cdbd2cSJim Jagielski	}
132*b1cdbd2cSJim Jagielski
133*b1cdbd2cSJim Jagielski	# defaulting to english
134*b1cdbd2cSJim Jagielski
135*b1cdbd2cSJim Jagielski	if ( ! $found )
136*b1cdbd2cSJim Jagielski	{
137*b1cdbd2cSJim Jagielski		my $defaultlanguage = "en-US";
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski		for ( my $i = 0; $i <= $#{$modulesarrayref}; $i++ )
140*b1cdbd2cSJim Jagielski		{
141*b1cdbd2cSJim Jagielski			my $onemodule = ${$modulesarrayref}[$i];
142*b1cdbd2cSJim Jagielski
143*b1cdbd2cSJim Jagielski			if ( $onemodule->{'gid'} eq $gid )
144*b1cdbd2cSJim Jagielski			{
145*b1cdbd2cSJim Jagielski				my $typestring = $type . " " . "(" . $defaultlanguage . ")";
146*b1cdbd2cSJim Jagielski				if ( $onemodule->{$typestring} ) { $newstring = $onemodule->{$typestring}; }
147*b1cdbd2cSJim Jagielski				$found = 1;
148*b1cdbd2cSJim Jagielski			}
149*b1cdbd2cSJim Jagielski
150*b1cdbd2cSJim Jagielski			if ( $found ) { last; }
151*b1cdbd2cSJim Jagielski		}
152*b1cdbd2cSJim Jagielski	}
153*b1cdbd2cSJim Jagielski
154*b1cdbd2cSJim Jagielski	return $newstring;
155*b1cdbd2cSJim Jagielski}
156*b1cdbd2cSJim Jagielski
157*b1cdbd2cSJim Jagielski#######################################################
158*b1cdbd2cSJim Jagielski# Setting the productname and productversion
159*b1cdbd2cSJim Jagielski#######################################################
160*b1cdbd2cSJim Jagielski
161*b1cdbd2cSJim Jagielskisub set_productname_and_productversion
162*b1cdbd2cSJim Jagielski{
163*b1cdbd2cSJim Jagielski	my ($templatefile, $variableshashref) = @_;
164*b1cdbd2cSJim Jagielski
165*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print("\n");
166*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print("Setting product name and product version in Java template file\n");
167*b1cdbd2cSJim Jagielski
168*b1cdbd2cSJim Jagielski	my $productname = $variableshashref->{'PRODUCTNAME'};
169*b1cdbd2cSJim Jagielski	my $productversion = $variableshashref->{'PRODUCTVERSION'};
170*b1cdbd2cSJim Jagielski
171*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$templatefile}; $i++ )
172*b1cdbd2cSJim Jagielski	{
173*b1cdbd2cSJim Jagielski		${$templatefile}[$i] =~ s/\{PRODUCTNAME\}/$productname/g;
174*b1cdbd2cSJim Jagielski		${$templatefile}[$i] =~ s/\{PRODUCTVERSION\}/$productversion/g;
175*b1cdbd2cSJim Jagielski	}
176*b1cdbd2cSJim Jagielski
177*b1cdbd2cSJim Jagielski	$infoline = "End of: Setting product name and product version in Java template file\n\n";
178*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
179*b1cdbd2cSJim Jagielski}
180*b1cdbd2cSJim Jagielski
181*b1cdbd2cSJim Jagielski#######################################################
182*b1cdbd2cSJim Jagielski# Setting the localized Module name and description
183*b1cdbd2cSJim Jagielski#######################################################
184*b1cdbd2cSJim Jagielski
185*b1cdbd2cSJim Jagielskisub set_component_name_and_description
186*b1cdbd2cSJim Jagielski{
187*b1cdbd2cSJim Jagielski	my ($templatefile, $modulesarrayref, $onelanguage) = @_;
188*b1cdbd2cSJim Jagielski
189*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print("\n");
190*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print("Setting component names and description in Java template file\n");
191*b1cdbd2cSJim Jagielski
192*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$templatefile}; $i++ )
193*b1cdbd2cSJim Jagielski	{
194*b1cdbd2cSJim Jagielski		# OOO_gid_Module_Prg_Wrt_Name
195*b1cdbd2cSJim Jagielski		# OOO_gid_Module_Prg_Wrt_Description
196*b1cdbd2cSJim Jagielski
197*b1cdbd2cSJim Jagielski		my $oneline = ${$templatefile}[$i];
198*b1cdbd2cSJim Jagielski		my $oldstring = "";
199*b1cdbd2cSJim Jagielski		my $gid = "";
200*b1cdbd2cSJim Jagielski		my $type = "";
201*b1cdbd2cSJim Jagielski
202*b1cdbd2cSJim Jagielski		if ( $oneline =~ /\b(OOO_gid_\w+)\b/ )
203*b1cdbd2cSJim Jagielski		{
204*b1cdbd2cSJim Jagielski			$oldstring = $1;
205*b1cdbd2cSJim Jagielski
206*b1cdbd2cSJim Jagielski			$infoline = "Found: $oldstring\n";
207*b1cdbd2cSJim Jagielski			$installer::logger::Lang->print($infoline);
208*b1cdbd2cSJim Jagielski
209*b1cdbd2cSJim Jagielski			if ( $oldstring =~ /^\s*OOO_(gid_\w+)_(\w+?)\s*$/ )
210*b1cdbd2cSJim Jagielski			{
211*b1cdbd2cSJim Jagielski				$gid = $1;
212*b1cdbd2cSJim Jagielski				$type = $2;
213*b1cdbd2cSJim Jagielski			}
214*b1cdbd2cSJim Jagielski
215*b1cdbd2cSJim Jagielski			my $newstring = get_module_name_description($modulesarrayref, $onelanguage, $gid, $type);
216*b1cdbd2cSJim Jagielski
217*b1cdbd2cSJim Jagielski			$infoline = "\tReplacing (language $onelanguage): OLDSTRING: $oldstring NEWSTRING $newstring\n";
218*b1cdbd2cSJim Jagielski			$installer::logger::Lang->print($infoline);
219*b1cdbd2cSJim Jagielski
220*b1cdbd2cSJim Jagielski			${$templatefile}[$i] =~ s/$oldstring/$newstring/;	# always substitute, even if $newstring eq ""
221*b1cdbd2cSJim Jagielski		}
222*b1cdbd2cSJim Jagielski	}
223*b1cdbd2cSJim Jagielski
224*b1cdbd2cSJim Jagielski	$infoline = "End of: Setting component names and description in Java template file\n\n";
225*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
226*b1cdbd2cSJim Jagielski}
227*b1cdbd2cSJim Jagielski
228*b1cdbd2cSJim Jagielski#######################################################
229*b1cdbd2cSJim Jagielski# Translating the Java file
230*b1cdbd2cSJim Jagielski#######################################################
231*b1cdbd2cSJim Jagielski
232*b1cdbd2cSJim Jagielskisub translate_javafile
233*b1cdbd2cSJim Jagielski{
234*b1cdbd2cSJim Jagielski	my ($templatefile, $languagefile, $onelanguage) = @_;
235*b1cdbd2cSJim Jagielski
236*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$templatefile}; $i++ )
237*b1cdbd2cSJim Jagielski	{
238*b1cdbd2cSJim Jagielski		my @allstrings = ();
239*b1cdbd2cSJim Jagielski
240*b1cdbd2cSJim Jagielski		my $oneline = ${$templatefile}[$i];
241*b1cdbd2cSJim Jagielski
242*b1cdbd2cSJim Jagielski		while ( $oneline =~ /\b(OOO_\w+)\b/ )
243*b1cdbd2cSJim Jagielski		{
244*b1cdbd2cSJim Jagielski			my $replacestring = $1;
245*b1cdbd2cSJim Jagielski			push(@allstrings, $replacestring);
246*b1cdbd2cSJim Jagielski			$oneline =~ s/$replacestring//;
247*b1cdbd2cSJim Jagielski		}
248*b1cdbd2cSJim Jagielski
249*b1cdbd2cSJim Jagielski		my $oldstring;
250*b1cdbd2cSJim Jagielski
251*b1cdbd2cSJim Jagielski		foreach $oldstring (@allstrings)
252*b1cdbd2cSJim Jagielski		{
253*b1cdbd2cSJim Jagielski			my $language_block = get_language_block_from_language_file($oldstring, $languagefile);
254*b1cdbd2cSJim Jagielski			my $newstring = get_language_string_from_language_block($language_block, $onelanguage, $oldstring);
255*b1cdbd2cSJim Jagielski
256*b1cdbd2cSJim Jagielski			$newstring =~ s/\"/\\\"/g;	# masquerading the "
257*b1cdbd2cSJim Jagielski			$newstring =~ s/\\\\\"/\\\"/g;	# unmasquerading if \" was converted to \\"	(because " was already masked)
258*b1cdbd2cSJim Jagielski
259*b1cdbd2cSJim Jagielski			# if (!( $newstring eq "" )) { ${$idtfile}[$i] =~ s/$oldstring/$newstring/; }
260*b1cdbd2cSJim Jagielski			${$templatefile}[$i] =~ s/$oldstring/$newstring/;	# always substitute, even if $newstring eq ""
261*b1cdbd2cSJim Jagielski		}
262*b1cdbd2cSJim Jagielski	}
263*b1cdbd2cSJim Jagielski}
264*b1cdbd2cSJim Jagielski
265*b1cdbd2cSJim Jagielski###########################################################
266*b1cdbd2cSJim Jagielski# Returning the license file name for a defined language
267*b1cdbd2cSJim Jagielski###########################################################
268*b1cdbd2cSJim Jagielski
269*b1cdbd2cSJim Jagielskisub get_licensefilesource
270*b1cdbd2cSJim Jagielski{
271*b1cdbd2cSJim Jagielski	my ($language, $includepatharrayref) = @_;
272*b1cdbd2cSJim Jagielski
273*b1cdbd2cSJim Jagielski	my $licensefilename = "LICENSE_" . $language;
274*b1cdbd2cSJim Jagielski
275*b1cdbd2cSJim Jagielski	my $licenseref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$licensefilename, $includepatharrayref, 0);
276*b1cdbd2cSJim Jagielski	if ($$licenseref eq "") { installer::exiter::exit_program("ERROR: Could not find License file $licensefilename!", "get_licensefilesource"); }
277*b1cdbd2cSJim Jagielski
278*b1cdbd2cSJim Jagielski	my $infoline = "Found licensefile $licensefilename: $$licenseref \n";
279*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
280*b1cdbd2cSJim Jagielski
281*b1cdbd2cSJim Jagielski	return $$licenseref;
282*b1cdbd2cSJim Jagielski}
283*b1cdbd2cSJim Jagielski
284*b1cdbd2cSJim Jagielski#######################################################
285*b1cdbd2cSJim Jagielski# Converting the license string into the
286*b1cdbd2cSJim Jagielski# Java specific encoding.
287*b1cdbd2cSJim Jagielski#######################################################
288*b1cdbd2cSJim Jagielski
289*b1cdbd2cSJim Jagielskisub convert_licenstring
290*b1cdbd2cSJim Jagielski{
291*b1cdbd2cSJim Jagielski	my ($licensefile, $includepatharrayref, $javadir, $onelanguage) = @_;
292*b1cdbd2cSJim Jagielski
293*b1cdbd2cSJim Jagielski	my $licensedir = $javadir . $installer::globals::separator . "license";
294*b1cdbd2cSJim Jagielski	installer::systemactions::create_directory($licensedir);
295*b1cdbd2cSJim Jagielski
296*b1cdbd2cSJim Jagielski	# saving the original license file
297*b1cdbd2cSJim Jagielski
298*b1cdbd2cSJim Jagielski	my $licensefilename = $licensedir . $installer::globals::separator . "licensefile.txt";
299*b1cdbd2cSJim Jagielski	installer::files::save_file($licensefilename, $licensefile);
300*b1cdbd2cSJim Jagielski
301*b1cdbd2cSJim Jagielski	# creating the ulf file from the license file
302*b1cdbd2cSJim Jagielski
303*b1cdbd2cSJim Jagielski	$licensefilename = $licensedir . $installer::globals::separator . "licensefile.ulf";
304*b1cdbd2cSJim Jagielski	my @licensearray = ();
305*b1cdbd2cSJim Jagielski
306*b1cdbd2cSJim Jagielski	my $section = "\[TRANSLATE\]\n";
307*b1cdbd2cSJim Jagielski	push(@licensearray, $section);
308*b1cdbd2cSJim Jagielski
309*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$licensefile}; $i++ )
310*b1cdbd2cSJim Jagielski	{
311*b1cdbd2cSJim Jagielski		my $oneline = ${$licensefile}[$i];
312*b1cdbd2cSJim Jagielski
313*b1cdbd2cSJim Jagielski		if ($i == 0) { $oneline =~ s/^\s*\�\�\�//; }
314*b1cdbd2cSJim Jagielski
315*b1cdbd2cSJim Jagielski		$oneline =~ s/\s*$//;
316*b1cdbd2cSJim Jagielski		$oneline =~ s/\"/\\\"/g;	# masquerading the "
317*b1cdbd2cSJim Jagielski		$oneline =~ s/\'/\\\'/g;	# masquerading the '
318*b1cdbd2cSJim Jagielski
319*b1cdbd2cSJim Jagielski		$oneline =~ s/\$\{/\{/g;	# replacement of variables, only {PRODUCTNAME}, not ${PRODUCTNAME}
320*b1cdbd2cSJim Jagielski
321*b1cdbd2cSJim Jagielski		my $ulfstring = $onelanguage . " = " . "\"" . $oneline . "\"\n";
322*b1cdbd2cSJim Jagielski		push(@licensearray, $ulfstring);
323*b1cdbd2cSJim Jagielski	}
324*b1cdbd2cSJim Jagielski
325*b1cdbd2cSJim Jagielski	installer::files::save_file($licensefilename, \@licensearray);
326*b1cdbd2cSJim Jagielski
327*b1cdbd2cSJim Jagielski	# converting the ulf file to the jlf file with ulfconv
328*b1cdbd2cSJim Jagielski
329*b1cdbd2cSJim Jagielski	@licensearray = ();
330*b1cdbd2cSJim Jagielski
331*b1cdbd2cSJim Jagielski	my $converter = "ulfconv";
332*b1cdbd2cSJim Jagielski
333*b1cdbd2cSJim Jagielski	my $converterref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$converter, $includepatharrayref, 0);
334*b1cdbd2cSJim Jagielski	if ($$converterref eq "") { installer::exiter::exit_program("ERROR: Could not find converter $converter!", "convert_licenstring"); }
335*b1cdbd2cSJim Jagielski
336*b1cdbd2cSJim Jagielski	my $infoline = "Found converter file $converter: $$converterref \n";
337*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
338*b1cdbd2cSJim Jagielski
339*b1cdbd2cSJim Jagielski	my $systemcall = "$$converterref $licensefilename |";
340*b1cdbd2cSJim Jagielski	open (CONV, "$systemcall");
341*b1cdbd2cSJim Jagielski	@licensearray = <CONV>;
342*b1cdbd2cSJim Jagielski	close (CONV);
343*b1cdbd2cSJim Jagielski
344*b1cdbd2cSJim Jagielski	$licensefilename = $licensedir . $installer::globals::separator . "licensefile.jlf";
345*b1cdbd2cSJim Jagielski	installer::files::save_file($licensefilename, \@licensearray);
346*b1cdbd2cSJim Jagielski
347*b1cdbd2cSJim Jagielski	# creating the license string from the jlf file
348*b1cdbd2cSJim Jagielski
349*b1cdbd2cSJim Jagielski	$licensestring = "";
350*b1cdbd2cSJim Jagielski
351*b1cdbd2cSJim Jagielski	for ( my $i = 1; $i <= $#licensearray; $i++ )	# not the first line!
352*b1cdbd2cSJim Jagielski	{
353*b1cdbd2cSJim Jagielski		my $oneline = $licensearray[$i];
354*b1cdbd2cSJim Jagielski		$oneline =~ s/^\s*$onelanguage\s*\=\s*\"//;
355*b1cdbd2cSJim Jagielski		$oneline =~ s/\"\s*$//;
356*b1cdbd2cSJim Jagielski		$licensestring = $licensestring . $oneline . "\\n";
357*b1cdbd2cSJim Jagielski	}
358*b1cdbd2cSJim Jagielski
359*b1cdbd2cSJim Jagielski	$infoline = "Systemcall: $systemcall\n";
360*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
361*b1cdbd2cSJim Jagielski
362*b1cdbd2cSJim Jagielski	if ( $licensestring eq "" )
363*b1cdbd2cSJim Jagielski	{
364*b1cdbd2cSJim Jagielski		$infoline = "ERROR: Could not convert $licensefilename !\n";
365*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
366*b1cdbd2cSJim Jagielski	}
367*b1cdbd2cSJim Jagielski
368*b1cdbd2cSJim Jagielski	return $licensestring;
369*b1cdbd2cSJim Jagielski}
370*b1cdbd2cSJim Jagielski
371*b1cdbd2cSJim Jagielski#######################################################
372*b1cdbd2cSJim Jagielski# Adding the license file into the java file
373*b1cdbd2cSJim Jagielski# In the template java file there are two
374*b1cdbd2cSJim Jagielski# occurences of INSTALLSDK_GUI_LICENSE
375*b1cdbd2cSJim Jagielski# and INSTALLSDK_CONSOLE_LICENSE
376*b1cdbd2cSJim Jagielski#######################################################
377*b1cdbd2cSJim Jagielski
378*b1cdbd2cSJim Jagielskisub add_license_file_into_javafile
379*b1cdbd2cSJim Jagielski{
380*b1cdbd2cSJim Jagielski	my ( $templatefile, $licensefile, $includepatharrayref, $javadir, $onelanguage ) = @_;
381*b1cdbd2cSJim Jagielski
382*b1cdbd2cSJim Jagielski	my $licensestring = convert_licenstring($licensefile, $includepatharrayref, $javadir, $onelanguage);
383*b1cdbd2cSJim Jagielski
384*b1cdbd2cSJim Jagielski	# saving the licensestring in an ulf file
385*b1cdbd2cSJim Jagielski	# converting the file using "ulfconv license.ulf"
386*b1cdbd2cSJim Jagielski	# including the new string into the java file
387*b1cdbd2cSJim Jagielski
388*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$templatefile}; $i++ )
389*b1cdbd2cSJim Jagielski	{
390*b1cdbd2cSJim Jagielski		${$templatefile}[$i] =~ s/INSTALLSDK_GUI_LICENSE/$licensestring/;
391*b1cdbd2cSJim Jagielski		${$templatefile}[$i] =~ s/INSTALLSDK_CONSOLE_LICENSE/$licensestring/;
392*b1cdbd2cSJim Jagielski	}
393*b1cdbd2cSJim Jagielski}
394*b1cdbd2cSJim Jagielski
395*b1cdbd2cSJim Jagielski#######################################################
396*b1cdbd2cSJim Jagielski# Executing one system call
397*b1cdbd2cSJim Jagielski#######################################################
398*b1cdbd2cSJim Jagielski
399*b1cdbd2cSJim Jagielskisub make_systemcall
400*b1cdbd2cSJim Jagielski{
401*b1cdbd2cSJim Jagielski	my ( $systemcall, $logreturn ) = @_;
402*b1cdbd2cSJim Jagielski
403*b1cdbd2cSJim Jagielski	my @returns = ();
404*b1cdbd2cSJim Jagielski
405*b1cdbd2cSJim Jagielski    $installer::logger::Info->printf("... %s ...\n", $systemcall);
406*b1cdbd2cSJim Jagielski
407*b1cdbd2cSJim Jagielski	open (REG, "$systemcall");
408*b1cdbd2cSJim Jagielski	while (<REG>) {push(@returns, $_); }
409*b1cdbd2cSJim Jagielski	close (REG);
410*b1cdbd2cSJim Jagielski
411*b1cdbd2cSJim Jagielski	my $returnvalue = $?;	# $? contains the return value of the systemcall
412*b1cdbd2cSJim Jagielski
413*b1cdbd2cSJim Jagielski	my $infoline = "Systemcall: $systemcall\n";
414*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
415*b1cdbd2cSJim Jagielski
416*b1cdbd2cSJim Jagielski	if ( $logreturn )
417*b1cdbd2cSJim Jagielski	{
418*b1cdbd2cSJim Jagielski		foreach my $line (@returns)
419*b1cdbd2cSJim Jagielski        {
420*b1cdbd2cSJim Jagielski            $installer::logger::Lang->printf($line);
421*b1cdbd2cSJim Jagielski        }
422*b1cdbd2cSJim Jagielski	}
423*b1cdbd2cSJim Jagielski
424*b1cdbd2cSJim Jagielski	if ($returnvalue)
425*b1cdbd2cSJim Jagielski	{
426*b1cdbd2cSJim Jagielski		$infoline = "ERROR: $systemcall\n";
427*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
428*b1cdbd2cSJim Jagielski		$error_occured = 1;
429*b1cdbd2cSJim Jagielski	}
430*b1cdbd2cSJim Jagielski	else
431*b1cdbd2cSJim Jagielski	{
432*b1cdbd2cSJim Jagielski		$infoline = "SUCCESS: $systemcall\n";
433*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
434*b1cdbd2cSJim Jagielski	}
435*b1cdbd2cSJim Jagielski
436*b1cdbd2cSJim Jagielski	return \@returns;
437*b1cdbd2cSJim Jagielski}
438*b1cdbd2cSJim Jagielski
439*b1cdbd2cSJim Jagielski#######################################################
440*b1cdbd2cSJim Jagielski# Setting the class path for the Installer SDK
441*b1cdbd2cSJim Jagielski#######################################################
442*b1cdbd2cSJim Jagielski
443*b1cdbd2cSJim Jagielskisub set_classpath_for_install_sdk
444*b1cdbd2cSJim Jagielski{
445*b1cdbd2cSJim Jagielski	my ( $directory ) = @_;
446*b1cdbd2cSJim Jagielski
447*b1cdbd2cSJim Jagielski	my $installsdk = "";
448*b1cdbd2cSJim Jagielski    my $solarVersion = "";
449*b1cdbd2cSJim Jagielski    my $inPath = "";
450*b1cdbd2cSJim Jagielski    my $updMinorExt = "";
451*b1cdbd2cSJim Jagielski
452*b1cdbd2cSJim Jagielski    if ( defined( $ENV{ 'SOLARVERSION' } ) ) { $solarVersion =  $ENV{'SOLARVERSION'}; }
453*b1cdbd2cSJim Jagielski	else { installer::exiter::exit_program("ERROR: Environment variable \"SOLARVERSION\" not set!", "set_classpath_for_install_sdk"); }
454*b1cdbd2cSJim Jagielski
455*b1cdbd2cSJim Jagielski    if ( defined( $ENV{ 'INPATH' } ) ) { $inPath =  $ENV{'INPATH'}; }
456*b1cdbd2cSJim Jagielski	else { installer::exiter::exit_program("ERROR: Environment variable \"INPATH\" not set!", "set_classpath_for_install_sdk"); }
457*b1cdbd2cSJim Jagielski
458*b1cdbd2cSJim Jagielski    if ( defined( $ENV{ 'UPDMINOREXT' } ) ) { $updMinorExt =  $ENV{'UPDMINOREXT'}; }
459*b1cdbd2cSJim Jagielski
460*b1cdbd2cSJim Jagielski	$installsdk = $solarVersion .  $installer::globals::separator . $inPath . $installer::globals::separator . "bin" . $updMinorExt;
461*b1cdbd2cSJim Jagielski	$installsdk = $installsdk . $installer::globals::separator . "javainstaller";
462*b1cdbd2cSJim Jagielski
463*b1cdbd2cSJim Jagielski	if ( $ENV{'INSTALLSDK_SOURCE'} ) { $installsdk = $ENV{'INSTALLSDK_SOURCE'}; }	# overriding the Install SDK with INSTALLSDK_SOURCE
464*b1cdbd2cSJim Jagielski
465*b1cdbd2cSJim Jagielski	# The variable CLASSPATH has to contain:
466*b1cdbd2cSJim Jagielski	# $installsdk/classes:$installsdk/classes/setupsdk.jar:
467*b1cdbd2cSJim Jagielski	# $installsdk/classes/parser.jar:$installsdk/classes/jaxp.jar:
468*b1cdbd2cSJim Jagielski	# $installsdk/classes/ldapjdk.jar:$directory
469*b1cdbd2cSJim Jagielski
470*b1cdbd2cSJim Jagielski	my @additional_classpath = ();
471*b1cdbd2cSJim Jagielski	push(@additional_classpath, "$installsdk\/classes");
472*b1cdbd2cSJim Jagielski	push(@additional_classpath, "$installsdk\/installsdk.jar");
473*b1cdbd2cSJim Jagielski	push(@additional_classpath, "$installsdk\/classes\/parser.jar");
474*b1cdbd2cSJim Jagielski	push(@additional_classpath, "$installsdk\/classes\/jaxp.jar");
475*b1cdbd2cSJim Jagielski	push(@additional_classpath, "$directory");
476*b1cdbd2cSJim Jagielski
477*b1cdbd2cSJim Jagielski	my $newclasspathstring = "";
478*b1cdbd2cSJim Jagielski	my $oldclasspathstring = "";
479*b1cdbd2cSJim Jagielski	if ( $ENV{'CLASSPATH'} ) { $oldclasspathstring = $ENV{'CLASSPATH'}; }
480*b1cdbd2cSJim Jagielski	else { $oldclasspathstring = "\."; }
481*b1cdbd2cSJim Jagielski
482*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#additional_classpath; $i++ )
483*b1cdbd2cSJim Jagielski	{
484*b1cdbd2cSJim Jagielski		$newclasspathstring = $newclasspathstring . $additional_classpath[$i] . ":";
485*b1cdbd2cSJim Jagielski	}
486*b1cdbd2cSJim Jagielski
487*b1cdbd2cSJim Jagielski	$newclasspathstring = $newclasspathstring . $oldclasspathstring;
488*b1cdbd2cSJim Jagielski
489*b1cdbd2cSJim Jagielski	$ENV{'CLASSPATH'} = $newclasspathstring;
490*b1cdbd2cSJim Jagielski
491*b1cdbd2cSJim Jagielski	my $infoline = "Setting CLASSPATH to $ENV{'CLASSPATH'}\n";
492*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
493*b1cdbd2cSJim Jagielski}
494*b1cdbd2cSJim Jagielski
495*b1cdbd2cSJim Jagielski#######################################################
496*b1cdbd2cSJim Jagielski# Setting the class file name in the Java locale file
497*b1cdbd2cSJim Jagielski#######################################################
498*b1cdbd2cSJim Jagielski
499*b1cdbd2cSJim Jagielskisub set_classfilename
500*b1cdbd2cSJim Jagielski{
501*b1cdbd2cSJim Jagielski	my ($templatefile, $classfilename, $searchstring) = @_;
502*b1cdbd2cSJim Jagielski
503*b1cdbd2cSJim Jagielski	for ( my $j = 0; $j <= $#{$templatefile}; $j++ )
504*b1cdbd2cSJim Jagielski	{
505*b1cdbd2cSJim Jagielski		if ( ${$templatefile}[$j] =~ /\Q$searchstring\E/ )
506*b1cdbd2cSJim Jagielski		{
507*b1cdbd2cSJim Jagielski			${$templatefile}[$j] =~ s/$searchstring/$classfilename/;
508*b1cdbd2cSJim Jagielski			last;
509*b1cdbd2cSJim Jagielski		}
510*b1cdbd2cSJim Jagielski	}
511*b1cdbd2cSJim Jagielski}
512*b1cdbd2cSJim Jagielski
513*b1cdbd2cSJim Jagielski#######################################################
514*b1cdbd2cSJim Jagielski# Substituting one variable in the xml file
515*b1cdbd2cSJim Jagielski#######################################################
516*b1cdbd2cSJim Jagielski
517*b1cdbd2cSJim Jagielskisub replace_one_variable
518*b1cdbd2cSJim Jagielski{
519*b1cdbd2cSJim Jagielski	my ($xmlfile, $variable, $searchstring) = @_;
520*b1cdbd2cSJim Jagielski
521*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$xmlfile}; $i++ )
522*b1cdbd2cSJim Jagielski	{
523*b1cdbd2cSJim Jagielski		${$xmlfile}[$i] =~ s/\$\{$searchstring\}/$variable/g;
524*b1cdbd2cSJim Jagielski	}
525*b1cdbd2cSJim Jagielski}
526*b1cdbd2cSJim Jagielski
527*b1cdbd2cSJim Jagielski#######################################################
528*b1cdbd2cSJim Jagielski# Substituting the variables in the xml file
529*b1cdbd2cSJim Jagielski#######################################################
530*b1cdbd2cSJim Jagielski
531*b1cdbd2cSJim Jagielskisub substitute_variables
532*b1cdbd2cSJim Jagielski{
533*b1cdbd2cSJim Jagielski	my ($xmlfile, $variableshashref) = @_;
534*b1cdbd2cSJim Jagielski
535*b1cdbd2cSJim Jagielski	my $key;
536*b1cdbd2cSJim Jagielski
537*b1cdbd2cSJim Jagielski	foreach $key (keys %{$variableshashref})
538*b1cdbd2cSJim Jagielski	{
539*b1cdbd2cSJim Jagielski		my $value = $variableshashref->{$key};
540*b1cdbd2cSJim Jagielski		replace_one_variable($xmlfile, $value, $key);
541*b1cdbd2cSJim Jagielski	}
542*b1cdbd2cSJim Jagielski}
543*b1cdbd2cSJim Jagielski
544*b1cdbd2cSJim Jagielski##########################################################
545*b1cdbd2cSJim Jagielski# Finding the line number in xml file of a special
546*b1cdbd2cSJim Jagielski# component
547*b1cdbd2cSJim Jagielski##########################################################
548*b1cdbd2cSJim Jagielski
549*b1cdbd2cSJim Jagielskisub find_component_line
550*b1cdbd2cSJim Jagielski{
551*b1cdbd2cSJim Jagielski	my ($xmlfile, $componentname) = @_;
552*b1cdbd2cSJim Jagielski
553*b1cdbd2cSJim Jagielski	my $linenumber = 0;
554*b1cdbd2cSJim Jagielski
555*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$xmlfile}; $i++ )
556*b1cdbd2cSJim Jagielski	{
557*b1cdbd2cSJim Jagielski		if ( ${$xmlfile}[$i] =~ /name\s*\=\'\s*$componentname/ )
558*b1cdbd2cSJim Jagielski		{
559*b1cdbd2cSJim Jagielski			$linenumber = $i;
560*b1cdbd2cSJim Jagielski			last;
561*b1cdbd2cSJim Jagielski		}
562*b1cdbd2cSJim Jagielski	}
563*b1cdbd2cSJim Jagielski
564*b1cdbd2cSJim Jagielski	return $linenumber;
565*b1cdbd2cSJim Jagielski}
566*b1cdbd2cSJim Jagielski
567*b1cdbd2cSJim Jagielski##########################################################
568*b1cdbd2cSJim Jagielski# Removing one package from the xml file
569*b1cdbd2cSJim Jagielski##########################################################
570*b1cdbd2cSJim Jagielski
571*b1cdbd2cSJim Jagielskisub remove_package
572*b1cdbd2cSJim Jagielski{
573*b1cdbd2cSJim Jagielski	my ($xmlfile, $packagename) = @_;
574*b1cdbd2cSJim Jagielski
575*b1cdbd2cSJim Jagielski	my $searchstring = $packagename;
576*b1cdbd2cSJim Jagielski	if ( $searchstring =~ /\-(\S+?)\s*$/ ) { $searchstring = $1; } # "SUNW%PRODUCTNAME-mailcap" -> "mailcap"
577*b1cdbd2cSJim Jagielski
578*b1cdbd2cSJim Jagielski	my $packagestring = "";
579*b1cdbd2cSJim Jagielski	my $namestring = "";
580*b1cdbd2cSJim Jagielski	my $infoline = "";
581*b1cdbd2cSJim Jagielski
582*b1cdbd2cSJim Jagielski	if ( $installer::globals::issolarispkgbuild )
583*b1cdbd2cSJim Jagielski	{
584*b1cdbd2cSJim Jagielski		$packagestring = "\<pkgunit";
585*b1cdbd2cSJim Jagielski		$namestring = "pkgName";
586*b1cdbd2cSJim Jagielski	}
587*b1cdbd2cSJim Jagielski	elsif ( $installer::globals::islinuxrpmbuild )
588*b1cdbd2cSJim Jagielski	{
589*b1cdbd2cSJim Jagielski		$packagestring = "\<rpmunit";
590*b1cdbd2cSJim Jagielski		$namestring = "rpmUniqueName";
591*b1cdbd2cSJim Jagielski	}
592*b1cdbd2cSJim Jagielski
593*b1cdbd2cSJim Jagielski	my $removed_packge = 0;
594*b1cdbd2cSJim Jagielski
595*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$xmlfile}; $i++ )
596*b1cdbd2cSJim Jagielski	{
597*b1cdbd2cSJim Jagielski		if ( ${$xmlfile}[$i] =~ /^\s*\Q$packagestring\E/ )
598*b1cdbd2cSJim Jagielski		{
599*b1cdbd2cSJim Jagielski			# this is a package, but is it the correct one?
600*b1cdbd2cSJim Jagielski
601*b1cdbd2cSJim Jagielski			my $do_delete = 0;
602*b1cdbd2cSJim Jagielski			my $linecounter = 1;
603*b1cdbd2cSJim Jagielski			my $startline = $i+1;
604*b1cdbd2cSJim Jagielski			my $line = ${$xmlfile}[$startline];
605*b1cdbd2cSJim Jagielski			if (($line =~ /^\s*\Q$namestring\E\s*\=/) && ($line =~ /\-\Q$searchstring\E/)) { $do_delete = 1; }
606*b1cdbd2cSJim Jagielski
607*b1cdbd2cSJim Jagielski			# but not deleting fonts package in language packs
608*b1cdbd2cSJim Jagielski			if ( $line =~ /-ONELANGUAGE-/ ) { $do_delete = 0; }
609*b1cdbd2cSJim Jagielski
610*b1cdbd2cSJim Jagielski			my $endcounter = 0;
611*b1cdbd2cSJim Jagielski
612*b1cdbd2cSJim Jagielski			while ((!( $line =~ /\/\>/ )) && ( $startline <= $#{$xmlfile} ))
613*b1cdbd2cSJim Jagielski			{
614*b1cdbd2cSJim Jagielski				$linecounter++;
615*b1cdbd2cSJim Jagielski				$startline++;
616*b1cdbd2cSJim Jagielski				$line = ${$xmlfile}[$startline];
617*b1cdbd2cSJim Jagielski				if (($line =~ /^\s*\Q$namestring\E\s*\=/) && ($line =~ /\-\Q$searchstring\E/)) { $do_delete = 1; }
618*b1cdbd2cSJim Jagielski			}
619*b1cdbd2cSJim Jagielski
620*b1cdbd2cSJim Jagielski			$linecounter = $linecounter + 1;
621*b1cdbd2cSJim Jagielski
622*b1cdbd2cSJim Jagielski			if ( $do_delete )
623*b1cdbd2cSJim Jagielski			{
624*b1cdbd2cSJim Jagielski				my $infoline = "\tReally removing package $packagename from xml file.\n";
625*b1cdbd2cSJim Jagielski				$installer::logger::Lang->print($infoline);
626*b1cdbd2cSJim Jagielski				splice(@{$xmlfile},$i, $linecounter);	# removing $linecounter lines, beginning in line $i
627*b1cdbd2cSJim Jagielski				$removed_packge = 1;
628*b1cdbd2cSJim Jagielski				last;
629*b1cdbd2cSJim Jagielski			}
630*b1cdbd2cSJim Jagielski		}
631*b1cdbd2cSJim Jagielski	}
632*b1cdbd2cSJim Jagielski
633*b1cdbd2cSJim Jagielski	if ( $removed_packge )
634*b1cdbd2cSJim Jagielski	{
635*b1cdbd2cSJim Jagielski		$infoline = "Package $packagename successfully removed from xml file.\n";
636*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
637*b1cdbd2cSJim Jagielski	}
638*b1cdbd2cSJim Jagielski	else
639*b1cdbd2cSJim Jagielski	{
640*b1cdbd2cSJim Jagielski		$infoline = "Did not find package $packagename in xml file.\n";
641*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
642*b1cdbd2cSJim Jagielski	}
643*b1cdbd2cSJim Jagielski
644*b1cdbd2cSJim Jagielski}
645*b1cdbd2cSJim Jagielski
646*b1cdbd2cSJim Jagielski##########################################################
647*b1cdbd2cSJim Jagielski# Removing one component from the xml file
648*b1cdbd2cSJim Jagielski##########################################################
649*b1cdbd2cSJim Jagielski
650*b1cdbd2cSJim Jagielskisub remove_component
651*b1cdbd2cSJim Jagielski{
652*b1cdbd2cSJim Jagielski	my ($xmlfile, $componentname) = @_;
653*b1cdbd2cSJim Jagielski
654*b1cdbd2cSJim Jagielski	my @removed_lines = ();
655*b1cdbd2cSJim Jagielski
656*b1cdbd2cSJim Jagielski	push(@removed_lines, "\n");
657*b1cdbd2cSJim Jagielski
658*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$xmlfile}; $i++ )
659*b1cdbd2cSJim Jagielski	{
660*b1cdbd2cSJim Jagielski		if ( ${$xmlfile}[$i] =~ /name\s*\=\'\s*$componentname/ )
661*b1cdbd2cSJim Jagielski		{
662*b1cdbd2cSJim Jagielski			# Counting the lines till the second "</component>"
663*b1cdbd2cSJim Jagielski
664*b1cdbd2cSJim Jagielski			push(@removed_lines, ${$xmlfile}[$i]);
665*b1cdbd2cSJim Jagielski			my $linecounter = 1;
666*b1cdbd2cSJim Jagielski			my $startline = $i+1;
667*b1cdbd2cSJim Jagielski			my $line = ${$xmlfile}[$startline];
668*b1cdbd2cSJim Jagielski			push(@removed_lines, $line);
669*b1cdbd2cSJim Jagielski			my $endcounter = 0;
670*b1cdbd2cSJim Jagielski
671*b1cdbd2cSJim Jagielski			while ((!( $line =~ /^\s*\<\/component\>\s*$/ )) && ( $startline <= $#{$xmlfile} ))
672*b1cdbd2cSJim Jagielski			{
673*b1cdbd2cSJim Jagielski				$linecounter++;
674*b1cdbd2cSJim Jagielski				$startline++;
675*b1cdbd2cSJim Jagielski				$line = ${$xmlfile}[$startline];
676*b1cdbd2cSJim Jagielski				push(@removed_lines, $line);
677*b1cdbd2cSJim Jagielski			}
678*b1cdbd2cSJim Jagielski
679*b1cdbd2cSJim Jagielski			$linecounter = $linecounter + 2;	 # last line and following empty line
680*b1cdbd2cSJim Jagielski
681*b1cdbd2cSJim Jagielski			splice(@{$xmlfile},$i, $linecounter);	# removing $linecounter lines, beginning in line $i
682*b1cdbd2cSJim Jagielski			last;
683*b1cdbd2cSJim Jagielski		}
684*b1cdbd2cSJim Jagielski	}
685*b1cdbd2cSJim Jagielski
686*b1cdbd2cSJim Jagielski	return \@removed_lines;
687*b1cdbd2cSJim Jagielski}
688*b1cdbd2cSJim Jagielski
689*b1cdbd2cSJim Jagielski##########################################################
690*b1cdbd2cSJim Jagielski# If this is an installation set without language packs
691*b1cdbd2cSJim Jagielski# the language pack module can be removed
692*b1cdbd2cSJim Jagielski##########################################################
693*b1cdbd2cSJim Jagielski
694*b1cdbd2cSJim Jagielskisub remove_languagepack_from_xmlfile
695*b1cdbd2cSJim Jagielski{
696*b1cdbd2cSJim Jagielski	my ($xmlfile) = @_;
697*b1cdbd2cSJim Jagielski
698*b1cdbd2cSJim Jagielski	# Component begins with "<component selected="true" name='module_languagepacks' componentVersion="${PRODUCTVERSION}">"
699*b1cdbd2cSJim Jagielski	# and ends with "</component>" (the second "</component>" !)
700*b1cdbd2cSJim Jagielski
701*b1cdbd2cSJim Jagielski	remove_component($xmlfile, "languagepack_DEFAULT");
702*b1cdbd2cSJim Jagielski	remove_component($xmlfile, "languagepack_ONELANGUAGE");
703*b1cdbd2cSJim Jagielski	remove_component($xmlfile, "module_languagepacks");
704*b1cdbd2cSJim Jagielski}
705*b1cdbd2cSJim Jagielski
706*b1cdbd2cSJim Jagielski##########################################################
707*b1cdbd2cSJim Jagielski# Duplicating a component
708*b1cdbd2cSJim Jagielski##########################################################
709*b1cdbd2cSJim Jagielski
710*b1cdbd2cSJim Jagielskisub duplicate_component
711*b1cdbd2cSJim Jagielski{
712*b1cdbd2cSJim Jagielski	my ( $arrayref ) = @_;
713*b1cdbd2cSJim Jagielski
714*b1cdbd2cSJim Jagielski	@newarray = ();
715*b1cdbd2cSJim Jagielski
716*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
717*b1cdbd2cSJim Jagielski	{
718*b1cdbd2cSJim Jagielski		push(@newarray, ${$arrayref}[$i]);
719*b1cdbd2cSJim Jagielski	}
720*b1cdbd2cSJim Jagielski
721*b1cdbd2cSJim Jagielski	return \@newarray;
722*b1cdbd2cSJim Jagielski}
723*b1cdbd2cSJim Jagielski
724*b1cdbd2cSJim Jagielski##########################################################
725*b1cdbd2cSJim Jagielski# Including a component into the xml file
726*b1cdbd2cSJim Jagielski# at a specified line
727*b1cdbd2cSJim Jagielski##########################################################
728*b1cdbd2cSJim Jagielski
729*b1cdbd2cSJim Jagielskisub include_component_at_specific_line
730*b1cdbd2cSJim Jagielski{
731*b1cdbd2cSJim Jagielski	my ($xmlfile, $unit, $line) = @_;
732*b1cdbd2cSJim Jagielski
733*b1cdbd2cSJim Jagielski	splice(@{$xmlfile},$line, 0, @{$unit});
734*b1cdbd2cSJim Jagielski}
735*b1cdbd2cSJim Jagielski
736*b1cdbd2cSJim Jagielski##########################################################
737*b1cdbd2cSJim Jagielski# Font packages do not exist for all languages.
738*b1cdbd2cSJim Jagielski##########################################################
739*b1cdbd2cSJim Jagielski
740*b1cdbd2cSJim Jagielskisub remove_font_package_from_unit
741*b1cdbd2cSJim Jagielski{
742*b1cdbd2cSJim Jagielski	my ( $unitcopy, $onelanguage ) = @_;
743*b1cdbd2cSJim Jagielski
744*b1cdbd2cSJim Jagielski	my $searchstring = "-fonts";
745*b1cdbd2cSJim Jagielski
746*b1cdbd2cSJim Jagielski	my $packagestring = "";
747*b1cdbd2cSJim Jagielski	my $namestring = "";
748*b1cdbd2cSJim Jagielski
749*b1cdbd2cSJim Jagielski	if ( $installer::globals::issolarispkgbuild )
750*b1cdbd2cSJim Jagielski	{
751*b1cdbd2cSJim Jagielski		$packagestring = "\<pkgunit";
752*b1cdbd2cSJim Jagielski		$namestring = "pkgName";
753*b1cdbd2cSJim Jagielski	}
754*b1cdbd2cSJim Jagielski	elsif ( $installer::globals::islinuxrpmbuild )
755*b1cdbd2cSJim Jagielski	{
756*b1cdbd2cSJim Jagielski		$packagestring = "\<rpmunit";
757*b1cdbd2cSJim Jagielski		$namestring = "rpmUniqueName";
758*b1cdbd2cSJim Jagielski	}
759*b1cdbd2cSJim Jagielski
760*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$unitcopy}; $i++ )
761*b1cdbd2cSJim Jagielski	{
762*b1cdbd2cSJim Jagielski		if ( ${$unitcopy}[$i] =~ /^\s*\Q$packagestring\E/ )
763*b1cdbd2cSJim Jagielski		{
764*b1cdbd2cSJim Jagielski			# this is a package, but is it the correct one?
765*b1cdbd2cSJim Jagielski
766*b1cdbd2cSJim Jagielski			my $do_delete = 0;
767*b1cdbd2cSJim Jagielski			my $linecounter = 1;
768*b1cdbd2cSJim Jagielski			my $startline = $i+1;
769*b1cdbd2cSJim Jagielski			my $line = ${$unitcopy}[$startline];
770*b1cdbd2cSJim Jagielski			if (($line =~ /^\s*\Q$namestring\E\s*\=/) && ($line =~ /\Q$searchstring\E/)) { $do_delete = 1; }
771*b1cdbd2cSJim Jagielski
772*b1cdbd2cSJim Jagielski			my $endcounter = 0;
773*b1cdbd2cSJim Jagielski
774*b1cdbd2cSJim Jagielski			while ((!( $line =~ /\/\>/ )) && ( $startline <= $#{$unitcopy} ))
775*b1cdbd2cSJim Jagielski			{
776*b1cdbd2cSJim Jagielski				$linecounter++;
777*b1cdbd2cSJim Jagielski				$startline++;
778*b1cdbd2cSJim Jagielski				$line = ${$unitcopy}[$startline];
779*b1cdbd2cSJim Jagielski				if (($line =~ /^\s*\Q$namestring\E\s*\=/) && ($line =~ /\Q$searchstring\E/)) { $do_delete = 1; }
780*b1cdbd2cSJim Jagielski			}
781*b1cdbd2cSJim Jagielski
782*b1cdbd2cSJim Jagielski			$linecounter = $linecounter + 1;
783*b1cdbd2cSJim Jagielski
784*b1cdbd2cSJim Jagielski			if ( $do_delete )
785*b1cdbd2cSJim Jagielski			{
786*b1cdbd2cSJim Jagielski				splice(@{$unitcopy},$i, $linecounter);	# removing $linecounter lines, beginning in line $i
787*b1cdbd2cSJim Jagielski				last;
788*b1cdbd2cSJim Jagielski			}
789*b1cdbd2cSJim Jagielski		}
790*b1cdbd2cSJim Jagielski	}
791*b1cdbd2cSJim Jagielski}
792*b1cdbd2cSJim Jagielski
793*b1cdbd2cSJim Jagielski##########################################################
794*b1cdbd2cSJim Jagielski# If this is an installation set with language packs,
795*b1cdbd2cSJim Jagielski# modules for each language pack have to be created
796*b1cdbd2cSJim Jagielski# dynamically
797*b1cdbd2cSJim Jagielski##########################################################
798*b1cdbd2cSJim Jagielski
799*b1cdbd2cSJim Jagielskisub duplicate_languagepack_in_xmlfile
800*b1cdbd2cSJim Jagielski{
801*b1cdbd2cSJim Jagielski	my ($xmlfile, $languagesarrayref) = @_;
802*b1cdbd2cSJim Jagielski
803*b1cdbd2cSJim Jagielski	my $unit = remove_component($xmlfile, "languagepack_ONELANGUAGE");
804*b1cdbd2cSJim Jagielski	my $startline = find_component_line($xmlfile, "module_languagepacks");
805*b1cdbd2cSJim Jagielski	my $infoline = "";
806*b1cdbd2cSJim Jagielski	$startline = $startline + 1;
807*b1cdbd2cSJim Jagielski
808*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$languagesarrayref}; $i++ )
809*b1cdbd2cSJim Jagielski	{
810*b1cdbd2cSJim Jagielski		my $onelanguage = ${$languagesarrayref}[$i];
811*b1cdbd2cSJim Jagielski		my $unitcopy = duplicate_component($unit);
812*b1cdbd2cSJim Jagielski
813*b1cdbd2cSJim Jagielski		# replacing string ONELANGUAGE in the unit copy
814*b1cdbd2cSJim Jagielski		for ( my $j = 0; $j <= $#{$unitcopy}; $j++ ) { ${$unitcopy}[$j] =~ s/ONELANGUAGE/$onelanguage/g; }
815*b1cdbd2cSJim Jagielski
816*b1cdbd2cSJim Jagielski		# including the unitcopy into the xml file
817*b1cdbd2cSJim Jagielski		include_component_at_specific_line($xmlfile, $unitcopy, $startline);
818*b1cdbd2cSJim Jagielski		$startline = $startline + $#{$unitcopy} + 1;
819*b1cdbd2cSJim Jagielski	}
820*b1cdbd2cSJim Jagielski
821*b1cdbd2cSJim Jagielski	# adding the default language as language pack, too
822*b1cdbd2cSJim Jagielski    $unit = remove_component($xmlfile, "languagepack_DEFAULT");
823*b1cdbd2cSJim Jagielski	$startline = find_component_line($xmlfile, "module_languagepacks");
824*b1cdbd2cSJim Jagielski	$startline = $startline + 1;
825*b1cdbd2cSJim Jagielski
826*b1cdbd2cSJim Jagielski	$onelanguage = ${$languagesarrayref}[0];
827*b1cdbd2cSJim Jagielski	$unitcopy = duplicate_component($unit);
828*b1cdbd2cSJim Jagielski
829*b1cdbd2cSJim Jagielski    # replacing string DEFAULT in the unit copy
830*b1cdbd2cSJim Jagielski    for ( my $j = 0; $j <= $#{$unitcopy}; $j++ ) { ${$unitcopy}[$j] =~ s/DEFAULT/$onelanguage/g; }
831*b1cdbd2cSJim Jagielski
832*b1cdbd2cSJim Jagielski	# including the unitcopy into the xml file
833*b1cdbd2cSJim Jagielski	include_component_at_specific_line($xmlfile, $unitcopy, $startline);
834*b1cdbd2cSJim Jagielski	$startline = $startline + $#{$unitcopy} + 1;
835*b1cdbd2cSJim Jagielski}
836*b1cdbd2cSJim Jagielski
837*b1cdbd2cSJim Jagielski#######################################################
838*b1cdbd2cSJim Jagielski# Removing empty packages from xml file. The names
839*b1cdbd2cSJim Jagielski# are stored in @installer::globals::emptypackages
840*b1cdbd2cSJim Jagielski#######################################################
841*b1cdbd2cSJim Jagielski
842*b1cdbd2cSJim Jagielskisub remove_empty_packages_in_xmlfile
843*b1cdbd2cSJim Jagielski{
844*b1cdbd2cSJim Jagielski	my ($xmlfile) = @_;
845*b1cdbd2cSJim Jagielski
846*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#installer::globals::emptypackages; $i++ )
847*b1cdbd2cSJim Jagielski	{
848*b1cdbd2cSJim Jagielski		my $packagename = $installer::globals::emptypackages[$i];
849*b1cdbd2cSJim Jagielski		my $infoline = "Try to remove package $packagename from xml file.\n";
850*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
851*b1cdbd2cSJim Jagielski		remove_package($xmlfile, $packagename);
852*b1cdbd2cSJim Jagielski	}
853*b1cdbd2cSJim Jagielski}
854*b1cdbd2cSJim Jagielski
855*b1cdbd2cSJim Jagielski#######################################################
856*b1cdbd2cSJim Jagielski# Preparing the language packs in the xml file
857*b1cdbd2cSJim Jagielski#######################################################
858*b1cdbd2cSJim Jagielski
859*b1cdbd2cSJim Jagielskisub prepare_language_pack_in_xmlfile
860*b1cdbd2cSJim Jagielski{
861*b1cdbd2cSJim Jagielski	my ($xmlfile, $languagesarrayref) = @_;
862*b1cdbd2cSJim Jagielski
863*b1cdbd2cSJim Jagielski	# if ( ! $installer::globals::is_unix_multi )
864*b1cdbd2cSJim Jagielski	# {
865*b1cdbd2cSJim Jagielski	# 	remove_languagepack_from_xmlfile($xmlfile);
866*b1cdbd2cSJim Jagielski	# }
867*b1cdbd2cSJim Jagielski	# else
868*b1cdbd2cSJim Jagielski	# {
869*b1cdbd2cSJim Jagielski		duplicate_languagepack_in_xmlfile($xmlfile, $languagesarrayref);
870*b1cdbd2cSJim Jagielski	# }
871*b1cdbd2cSJim Jagielski
872*b1cdbd2cSJim Jagielski}
873*b1cdbd2cSJim Jagielski
874*b1cdbd2cSJim Jagielski#######################################################
875*b1cdbd2cSJim Jagielski# Returning a rpm unit from a xml file
876*b1cdbd2cSJim Jagielski#######################################################
877*b1cdbd2cSJim Jagielski
878*b1cdbd2cSJim Jagielskisub get_rpm_unit_from_xmlfile
879*b1cdbd2cSJim Jagielski{
880*b1cdbd2cSJim Jagielski	my ($rpmname, $xmlfile) = @_;
881*b1cdbd2cSJim Jagielski
882*b1cdbd2cSJim Jagielski	my $infoline = "Searching for $rpmname in xml file.\n";
883*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
884*b1cdbd2cSJim Jagielski
885*b1cdbd2cSJim Jagielski	my @rpmunit = ();
886*b1cdbd2cSJim Jagielski	my $includeline = 0;
887*b1cdbd2cSJim Jagielski	my $record = 0;
888*b1cdbd2cSJim Jagielski	my $foundrpm = 0;
889*b1cdbd2cSJim Jagielski
890*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$xmlfile}; $i++ )
891*b1cdbd2cSJim Jagielski	{
892*b1cdbd2cSJim Jagielski		my $oneline = ${$xmlfile}[$i];
893*b1cdbd2cSJim Jagielski
894*b1cdbd2cSJim Jagielski		if ( $oneline =~ /^\s*\<rpmunit/ ) { $record = 1; }
895*b1cdbd2cSJim Jagielski
896*b1cdbd2cSJim Jagielski		if ( $record ) { push(@rpmunit, $oneline); }
897*b1cdbd2cSJim Jagielski
898*b1cdbd2cSJim Jagielski		if ( $oneline =~ /^\s*rpmUniqueName\s*=\s*\"\Q$rpmname\E\"\s*$/ ) { $foundrpm = 1; }
899*b1cdbd2cSJim Jagielski
900*b1cdbd2cSJim Jagielski		if (( $record ) && ( $oneline =~ /\/\>\s*$/ )) { $record = 0; }
901*b1cdbd2cSJim Jagielski
902*b1cdbd2cSJim Jagielski		if (( ! $foundrpm ) && ( ! $record )) { @rpmunit = (); }
903*b1cdbd2cSJim Jagielski
904*b1cdbd2cSJim Jagielski		if (( $foundrpm ) && ( ! $record )) { $includeline = $i + 1; }
905*b1cdbd2cSJim Jagielski
906*b1cdbd2cSJim Jagielski		if (( $foundrpm ) && ( ! $record )) { last; }
907*b1cdbd2cSJim Jagielski	}
908*b1cdbd2cSJim Jagielski
909*b1cdbd2cSJim Jagielski	if ( ! $foundrpm ) { installer::exiter::exit_program("ERROR: Did not find rpmunit $rpmname in xml file!", "get_rpm_unit_from_xmlfile"); }
910*b1cdbd2cSJim Jagielski
911*b1cdbd2cSJim Jagielski	$infoline = "Found $rpmname in xml file. Returning block lines: $#rpmunit + 1. Includeline: $includeline \n";
912*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
913*b1cdbd2cSJim Jagielski
914*b1cdbd2cSJim Jagielski	return (\@rpmunit, $includeline);
915*b1cdbd2cSJim Jagielski}
916*b1cdbd2cSJim Jagielski
917*b1cdbd2cSJim Jagielski#######################################################
918*b1cdbd2cSJim Jagielski# Exchanging package names in xml file
919*b1cdbd2cSJim Jagielski#######################################################
920*b1cdbd2cSJim Jagielski
921*b1cdbd2cSJim Jagielskisub exchange_name_in_rpmunit
922*b1cdbd2cSJim Jagielski{
923*b1cdbd2cSJim Jagielski	my ($rpmunit, $oldpackagename, $newpackagename) = @_;
924*b1cdbd2cSJim Jagielski
925*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$rpmunit}; $i++ )
926*b1cdbd2cSJim Jagielski	{
927*b1cdbd2cSJim Jagielski		${$rpmunit}[$i] =~ s/$oldpackagename/$newpackagename/;
928*b1cdbd2cSJim Jagielski	}
929*b1cdbd2cSJim Jagielski}
930*b1cdbd2cSJim Jagielski
931*b1cdbd2cSJim Jagielski#######################################################
932*b1cdbd2cSJim Jagielski# Preparing link RPMs in the xml file
933*b1cdbd2cSJim Jagielski#######################################################
934*b1cdbd2cSJim Jagielski
935*b1cdbd2cSJim Jagielskisub prepare_linkrpm_in_xmlfile
936*b1cdbd2cSJim Jagielski{
937*b1cdbd2cSJim Jagielski	my ($xmlfile, $rpmlist) = @_;
938*b1cdbd2cSJim Jagielski
939*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$rpmlist}; $i++ )
940*b1cdbd2cSJim Jagielski	{
941*b1cdbd2cSJim Jagielski		my $oldpackagename = "";
942*b1cdbd2cSJim Jagielski		my $newpackagename = "";
943*b1cdbd2cSJim Jagielski
944*b1cdbd2cSJim Jagielski		my $rpmline = ${$rpmlist}[$i];
945*b1cdbd2cSJim Jagielski
946*b1cdbd2cSJim Jagielski		my $infoline = "Preparing link/patch RPM: $rpmline\n";
947*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
948*b1cdbd2cSJim Jagielski
949*b1cdbd2cSJim Jagielski		if ( $rpmline =~ /^\s*(\S.*?\S)\s+(\S.*?\S)\s*$/ )
950*b1cdbd2cSJim Jagielski		{
951*b1cdbd2cSJim Jagielski			$oldpackagename = $1;
952*b1cdbd2cSJim Jagielski			$newpackagename = $2;
953*b1cdbd2cSJim Jagielski		}
954*b1cdbd2cSJim Jagielski
955*b1cdbd2cSJim Jagielski		my ($rpmunit, $includeline) = get_rpm_unit_from_xmlfile($oldpackagename, $xmlfile);
956*b1cdbd2cSJim Jagielski		exchange_name_in_rpmunit($rpmunit, $oldpackagename, $newpackagename);
957*b1cdbd2cSJim Jagielski		include_component_at_specific_line($xmlfile, $rpmunit, $includeline);
958*b1cdbd2cSJim Jagielski	}
959*b1cdbd2cSJim Jagielski}
960*b1cdbd2cSJim Jagielski
961*b1cdbd2cSJim Jagielski#######################################################################
962*b1cdbd2cSJim Jagielski# Removing w4w filter module from xml file for Solaris x86 and Linux
963*b1cdbd2cSJim Jagielski#######################################################################
964*b1cdbd2cSJim Jagielski
965*b1cdbd2cSJim Jagielskisub remove_w4w_from_xmlfile
966*b1cdbd2cSJim Jagielski{
967*b1cdbd2cSJim Jagielski	my ($xmlfile) = @_;
968*b1cdbd2cSJim Jagielski
969*b1cdbd2cSJim Jagielski	# Component begins with "<component selected='true' name='gid_Module_Prg_Wrt_Flt_W4w' componentVersion="8">"
970*b1cdbd2cSJim Jagielski	# and ends with "</component>"
971*b1cdbd2cSJim Jagielski
972*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$xmlfile}; $i++ )
973*b1cdbd2cSJim Jagielski	{
974*b1cdbd2cSJim Jagielski		if ( ${$xmlfile}[$i] =~ /name\s*\=\'\s*gid_Module_Prg_Wrt_Flt_W4w/ )
975*b1cdbd2cSJim Jagielski		{
976*b1cdbd2cSJim Jagielski			# Counting the lines till "</component>"
977*b1cdbd2cSJim Jagielski
978*b1cdbd2cSJim Jagielski			my $linecounter = 1;
979*b1cdbd2cSJim Jagielski			my $startline = $i+1;
980*b1cdbd2cSJim Jagielski			my $line = ${$xmlfile}[$startline];
981*b1cdbd2cSJim Jagielski
982*b1cdbd2cSJim Jagielski			while ((!( $line =~ /^\s*\<\/component\>\s*$/ )) && ( $startline <= $#{$xmlfile} ))
983*b1cdbd2cSJim Jagielski			{
984*b1cdbd2cSJim Jagielski				$linecounter++;
985*b1cdbd2cSJim Jagielski				$startline++;
986*b1cdbd2cSJim Jagielski				$line = ${$xmlfile}[$startline];
987*b1cdbd2cSJim Jagielski			}
988*b1cdbd2cSJim Jagielski
989*b1cdbd2cSJim Jagielski			$linecounter = $linecounter + 2;	 # last line and following empty line
990*b1cdbd2cSJim Jagielski
991*b1cdbd2cSJim Jagielski			splice(@{$xmlfile},$i, $linecounter);	# removing $linecounter lines, beginning in line $i
992*b1cdbd2cSJim Jagielski			last;
993*b1cdbd2cSJim Jagielski		}
994*b1cdbd2cSJim Jagielski	}
995*b1cdbd2cSJim Jagielski}
996*b1cdbd2cSJim Jagielski
997*b1cdbd2cSJim Jagielski#######################################################################
998*b1cdbd2cSJim Jagielski# Removing module from xml file, if not defined in scp
999*b1cdbd2cSJim Jagielski#######################################################################
1000*b1cdbd2cSJim Jagielski
1001*b1cdbd2cSJim Jagielskisub remove_scpgid_from_xmlfile
1002*b1cdbd2cSJim Jagielski{
1003*b1cdbd2cSJim Jagielski	my ($xmlfile, $scpgid) = @_;
1004*b1cdbd2cSJim Jagielski
1005*b1cdbd2cSJim Jagielski	# Component begins with "<component selected='true' name='$scpgid' componentVersion="8">"
1006*b1cdbd2cSJim Jagielski	# and ends with "</component>"
1007*b1cdbd2cSJim Jagielski
1008*b1cdbd2cSJim Jagielski	my $successfully_removed = 0;
1009*b1cdbd2cSJim Jagielski
1010*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$xmlfile}; $i++ )
1011*b1cdbd2cSJim Jagielski	{
1012*b1cdbd2cSJim Jagielski		if ( ${$xmlfile}[$i] =~ /name\s*\=\'\s*\Q$scpgid\E/ )
1013*b1cdbd2cSJim Jagielski		{
1014*b1cdbd2cSJim Jagielski			# Counting the lines till "</component>"
1015*b1cdbd2cSJim Jagielski
1016*b1cdbd2cSJim Jagielski			my $linecounter = 1;
1017*b1cdbd2cSJim Jagielski			my $startline = $i+1;
1018*b1cdbd2cSJim Jagielski			my $line = ${$xmlfile}[$startline];
1019*b1cdbd2cSJim Jagielski
1020*b1cdbd2cSJim Jagielski			while ((!( $line =~ /^\s*\<\/component\>\s*$/ )) && ( $startline <= $#{$xmlfile} ))
1021*b1cdbd2cSJim Jagielski			{
1022*b1cdbd2cSJim Jagielski				$linecounter++;
1023*b1cdbd2cSJim Jagielski				$startline++;
1024*b1cdbd2cSJim Jagielski				$line = ${$xmlfile}[$startline];
1025*b1cdbd2cSJim Jagielski			}
1026*b1cdbd2cSJim Jagielski
1027*b1cdbd2cSJim Jagielski			$linecounter = $linecounter + 2;	 # last line and following empty line
1028*b1cdbd2cSJim Jagielski
1029*b1cdbd2cSJim Jagielski			splice(@{$xmlfile},$i, $linecounter);	# removing $linecounter lines, beginning in line $i
1030*b1cdbd2cSJim Jagielski			$successfully_removed = 1;
1031*b1cdbd2cSJim Jagielski			last;
1032*b1cdbd2cSJim Jagielski		}
1033*b1cdbd2cSJim Jagielski	}
1034*b1cdbd2cSJim Jagielski
1035*b1cdbd2cSJim Jagielski	my $infoline = "";
1036*b1cdbd2cSJim Jagielski	if ($successfully_removed)
1037*b1cdbd2cSJim Jagielski	{
1038*b1cdbd2cSJim Jagielski		$infoline = "Module $scpgid successfully removed from xml file.\n";
1039*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1040*b1cdbd2cSJim Jagielski	}
1041*b1cdbd2cSJim Jagielski	else
1042*b1cdbd2cSJim Jagielski	{
1043*b1cdbd2cSJim Jagielski		$infoline = "Module $scpgid not found in xml file (no problem).\n";
1044*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1045*b1cdbd2cSJim Jagielski	}
1046*b1cdbd2cSJim Jagielski}
1047*b1cdbd2cSJim Jagielski
1048*b1cdbd2cSJim Jagielski#######################################################################
1049*b1cdbd2cSJim Jagielski# Special mechanism for removing modules for xml file, if they are
1050*b1cdbd2cSJim Jagielski# not defined in scp (introduced for onlineupdate module).
1051*b1cdbd2cSJim Jagielski#######################################################################
1052*b1cdbd2cSJim Jagielski
1053*b1cdbd2cSJim Jagielskisub remove_module_if_not_defined
1054*b1cdbd2cSJim Jagielski{
1055*b1cdbd2cSJim Jagielski	my ($xmlfile, $modulesarrayref, $scpgid) = @_;
1056*b1cdbd2cSJim Jagielski
1057*b1cdbd2cSJim Jagielski	my $infoline = "Checking existence of $scpgid in scp definition\n";
1058*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
1059*b1cdbd2cSJim Jagielski
1060*b1cdbd2cSJim Jagielski	my $found = 0;
1061*b1cdbd2cSJim Jagielski
1062*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$modulesarrayref}; $i++ )
1063*b1cdbd2cSJim Jagielski	{
1064*b1cdbd2cSJim Jagielski		my $onemodule = ${$modulesarrayref}[$i];
1065*b1cdbd2cSJim Jagielski		if ( $onemodule->{'gid'} eq $scpgid ) { $found = 1; }
1066*b1cdbd2cSJim Jagielski		if ( $found ) { last; }
1067*b1cdbd2cSJim Jagielski	}
1068*b1cdbd2cSJim Jagielski
1069*b1cdbd2cSJim Jagielski	if ( ! $found )
1070*b1cdbd2cSJim Jagielski	{
1071*b1cdbd2cSJim Jagielski		$infoline = "Module $scpgid not found -> Removing from xml file.\n";
1072*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1073*b1cdbd2cSJim Jagielski		remove_scpgid_from_xmlfile($xmlfile, $scpgid);
1074*b1cdbd2cSJim Jagielski	}
1075*b1cdbd2cSJim Jagielski}
1076*b1cdbd2cSJim Jagielski
1077*b1cdbd2cSJim Jagielski###########################################################
1078*b1cdbd2cSJim Jagielski# Preparing the package subdirectory
1079*b1cdbd2cSJim Jagielski###########################################################
1080*b1cdbd2cSJim Jagielski
1081*b1cdbd2cSJim Jagielskisub create_empty_packages
1082*b1cdbd2cSJim Jagielski{
1083*b1cdbd2cSJim Jagielski	my ( $xmlfile ) = @_;
1084*b1cdbd2cSJim Jagielski
1085*b1cdbd2cSJim Jagielski	if ( $installer::globals::issolarispkgbuild )
1086*b1cdbd2cSJim Jagielski	{
1087*b1cdbd2cSJim Jagielski		my $path = "";
1088*b1cdbd2cSJim Jagielski
1089*b1cdbd2cSJim Jagielski		for ( my $i = 0; $i <= $#{$xmlfile}; $i++ )
1090*b1cdbd2cSJim Jagielski		{
1091*b1cdbd2cSJim Jagielski			if ( ${$xmlfile}[$i] =~ /pkgRelativePath\s*\=\s*\'(.*?)\'\s*$/ )
1092*b1cdbd2cSJim Jagielski			{
1093*b1cdbd2cSJim Jagielski				$path = $1;
1094*b1cdbd2cSJim Jagielski				installer::systemactions::create_directory_structure($path);
1095*b1cdbd2cSJim Jagielski				last;	# only creating one path
1096*b1cdbd2cSJim Jagielski			}
1097*b1cdbd2cSJim Jagielski		}
1098*b1cdbd2cSJim Jagielski
1099*b1cdbd2cSJim Jagielski		for ( my $i = 0; $i <= $#{$xmlfile}; $i++ )
1100*b1cdbd2cSJim Jagielski		{
1101*b1cdbd2cSJim Jagielski			if ( ${$xmlfile}[$i] =~ /pkgName\s*\=\s*\'(.*?)\'\s*$/ )
1102*b1cdbd2cSJim Jagielski			{
1103*b1cdbd2cSJim Jagielski				my $pkgname = $1;
1104*b1cdbd2cSJim Jagielski				if ( $path ne "" ) { $pkgname = $path . $installer::globals::separator . $pkgname; }
1105*b1cdbd2cSJim Jagielski				installer::systemactions::create_directory_structure($pkgname);
1106*b1cdbd2cSJim Jagielski			}
1107*b1cdbd2cSJim Jagielski		}
1108*b1cdbd2cSJim Jagielski	}
1109*b1cdbd2cSJim Jagielski
1110*b1cdbd2cSJim Jagielski	# "-novalidate" does not work for Linux RPMs
1111*b1cdbd2cSJim Jagielski
1112*b1cdbd2cSJim Jagielski	if ( $installer::globals::islinuxrpmbuild )
1113*b1cdbd2cSJim Jagielski	{
1114*b1cdbd2cSJim Jagielski		for ( my $i = 0; $i <= $#{$xmlfile}; $i++ )
1115*b1cdbd2cSJim Jagielski		{
1116*b1cdbd2cSJim Jagielski			if ( ${$xmlfile}[$i] =~ /rpmPath\s*\=\s*\"(.*?)\"\s*$/ )
1117*b1cdbd2cSJim Jagielski			{
1118*b1cdbd2cSJim Jagielski				my $rpmpath = $1;
1119*b1cdbd2cSJim Jagielski				my $path = "";
1120*b1cdbd2cSJim Jagielski
1121*b1cdbd2cSJim Jagielski				if ( $rpmpath =~ /^\s*(.*)\/(.*?)\s*$/ )
1122*b1cdbd2cSJim Jagielski				{
1123*b1cdbd2cSJim Jagielski					$path = $1;
1124*b1cdbd2cSJim Jagielski				}
1125*b1cdbd2cSJim Jagielski
1126*b1cdbd2cSJim Jagielski				if ( $path ne "" ) { installer::systemactions::create_directory_structure($path); }
1127*b1cdbd2cSJim Jagielski
1128*b1cdbd2cSJim Jagielski				my $systemcall = "touch $rpmpath";	# creating empty rpm
1129*b1cdbd2cSJim Jagielski				system($systemcall);
1130*b1cdbd2cSJim Jagielski			}
1131*b1cdbd2cSJim Jagielski		}
1132*b1cdbd2cSJim Jagielski	}
1133*b1cdbd2cSJim Jagielski}
1134*b1cdbd2cSJim Jagielski
1135*b1cdbd2cSJim Jagielski###########################################################
1136*b1cdbd2cSJim Jagielski# Reading the archive file name from the xml file
1137*b1cdbd2cSJim Jagielski###########################################################
1138*b1cdbd2cSJim Jagielski
1139*b1cdbd2cSJim Jagielskisub get_archivefilename
1140*b1cdbd2cSJim Jagielski{
1141*b1cdbd2cSJim Jagielski	my ( $xmlfile ) = @_;
1142*b1cdbd2cSJim Jagielski
1143*b1cdbd2cSJim Jagielski	my $archivefilename = "";
1144*b1cdbd2cSJim Jagielski
1145*b1cdbd2cSJim Jagielski	for ( my $j = 0; $j <= $#{$xmlfile}; $j++ )
1146*b1cdbd2cSJim Jagielski	{
1147*b1cdbd2cSJim Jagielski		if ( ${$xmlfile}[$j] =~ /archiveFileName\s*=\s*\'(.*?)\'/ )
1148*b1cdbd2cSJim Jagielski		{
1149*b1cdbd2cSJim Jagielski			$archivefilename = $1;
1150*b1cdbd2cSJim Jagielski			last;
1151*b1cdbd2cSJim Jagielski		}
1152*b1cdbd2cSJim Jagielski	}
1153*b1cdbd2cSJim Jagielski
1154*b1cdbd2cSJim Jagielski	return $archivefilename;
1155*b1cdbd2cSJim Jagielski}
1156*b1cdbd2cSJim Jagielski
1157*b1cdbd2cSJim Jagielski#######################################################
1158*b1cdbd2cSJim Jagielski# Copying the loader locally
1159*b1cdbd2cSJim Jagielski#######################################################
1160*b1cdbd2cSJim Jagielski
1161*b1cdbd2cSJim Jagielskisub copy_setup_locally
1162*b1cdbd2cSJim Jagielski{
1163*b1cdbd2cSJim Jagielski	my ($includepatharrayref, $loadername, $newname) = @_;
1164*b1cdbd2cSJim Jagielski
1165*b1cdbd2cSJim Jagielski	my $loadernameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$loadername, $includepatharrayref, 0);
1166*b1cdbd2cSJim Jagielski
1167*b1cdbd2cSJim Jagielski	if ($$loadernameref eq "") { installer::exiter::exit_program("ERROR: Could not find Java loader $loadername!", "copy_setup_locally"); }
1168*b1cdbd2cSJim Jagielski
1169*b1cdbd2cSJim Jagielski	installer::systemactions::copy_one_file($$loadernameref, $newname);
1170*b1cdbd2cSJim Jagielski	my $localcall = "chmod 775 $newname \>\/dev\/null 2\>\&1";
1171*b1cdbd2cSJim Jagielski	system($localcall);
1172*b1cdbd2cSJim Jagielski}
1173*b1cdbd2cSJim Jagielski
1174*b1cdbd2cSJim Jagielski
1175*b1cdbd2cSJim Jagielski#######################################################
1176*b1cdbd2cSJim Jagielski# Copying the loader into the installation set
1177*b1cdbd2cSJim Jagielski#######################################################
1178*b1cdbd2cSJim Jagielski
1179*b1cdbd2cSJim Jagielskisub put_loader_into_installset
1180*b1cdbd2cSJim Jagielski{
1181*b1cdbd2cSJim Jagielski	my ($installdir, $filename) = @_;
1182*b1cdbd2cSJim Jagielski
1183*b1cdbd2cSJim Jagielski	my $installname = $installdir . $installer::globals::separator . $filename;
1184*b1cdbd2cSJim Jagielski
1185*b1cdbd2cSJim Jagielski	installer::systemactions::copy_one_file($filename, $installname);
1186*b1cdbd2cSJim Jagielski
1187*b1cdbd2cSJim Jagielski	my $localcall = "chmod 775 $installname \>\/dev\/null 2\>\&1";
1188*b1cdbd2cSJim Jagielski	system($localcall);
1189*b1cdbd2cSJim Jagielski}
1190*b1cdbd2cSJim Jagielski
1191*b1cdbd2cSJim Jagielski#################################################################
1192*b1cdbd2cSJim Jagielski# Setting for Solaris the package names in the Java translation
1193*b1cdbd2cSJim Jagielski# file. The name is used for the
1194*b1cdbd2cSJim Jagielski# This name is displayed tools like prodreg.
1195*b1cdbd2cSJim Jagielski# Unfortunately this name in the component is also used
1196*b1cdbd2cSJim Jagielski# in the translation template file for the module name
1197*b1cdbd2cSJim Jagielski# and module description translations.
1198*b1cdbd2cSJim Jagielski#################################################################
1199*b1cdbd2cSJim Jagielski
1200*b1cdbd2cSJim Jagielskisub replace_component_name_in_java_file
1201*b1cdbd2cSJim Jagielski{
1202*b1cdbd2cSJim Jagielski	my ($alljavafiles, $oldname, $newname) = @_;
1203*b1cdbd2cSJim Jagielski
1204*b1cdbd2cSJim Jagielski	# The new name must not contain white spaces
1205*b1cdbd2cSJim Jagielski
1206*b1cdbd2cSJim Jagielski	$newname =~ s/ /\_/g;
1207*b1cdbd2cSJim Jagielski
1208*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$alljavafiles}; $i++ )
1209*b1cdbd2cSJim Jagielski	{
1210*b1cdbd2cSJim Jagielski		my $javafilename = ${$alljavafiles}[$i];
1211*b1cdbd2cSJim Jagielski		my $javafile = installer::files::read_file($javafilename);
1212*b1cdbd2cSJim Jagielski
1213*b1cdbd2cSJim Jagielski		my $oldstring = "ComponentDescription-" . $oldname;
1214*b1cdbd2cSJim Jagielski		my $newstring = "ComponentDescription-" . $newname;
1215*b1cdbd2cSJim Jagielski
1216*b1cdbd2cSJim Jagielski		for ( my $j = 0; $j <= $#{$javafile}; $j++ ) { ${$javafile}[$j] =~ s/\b$oldstring\b/$newstring/; }
1217*b1cdbd2cSJim Jagielski
1218*b1cdbd2cSJim Jagielski		$oldstring = $oldname . "-install-DisplayName";
1219*b1cdbd2cSJim Jagielski		$newstring = $newname . "-install-DisplayName";
1220*b1cdbd2cSJim Jagielski
1221*b1cdbd2cSJim Jagielski		for ( my $j = 0; $j <= $#{$javafile}; $j++ ) { ${$javafile}[$j] =~ s/\b$oldstring\b/$newstring/; }
1222*b1cdbd2cSJim Jagielski
1223*b1cdbd2cSJim Jagielski		$oldstring = $oldname . "-uninstall-DisplayName";
1224*b1cdbd2cSJim Jagielski		$newstring = $newname . "-uninstall-DisplayName";
1225*b1cdbd2cSJim Jagielski
1226*b1cdbd2cSJim Jagielski		for ( my $j = 0; $j <= $#{$javafile}; $j++ ) { ${$javafile}[$j] =~ s/\b$oldstring\b/$newstring/; }
1227*b1cdbd2cSJim Jagielski
1228*b1cdbd2cSJim Jagielski		installer::files::save_file($javafilename, $javafile);
1229*b1cdbd2cSJim Jagielski		$infoline = "Changes in Java file: $javafilename : $oldname \-\> $newname\n";
1230*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1231*b1cdbd2cSJim Jagielski	}
1232*b1cdbd2cSJim Jagielski}
1233*b1cdbd2cSJim Jagielski
1234*b1cdbd2cSJim Jagielski#################################################################
1235*b1cdbd2cSJim Jagielski# Some module names are not defined in the scp project.
1236*b1cdbd2cSJim Jagielski# The names for this modules are searched in the base Java
1237*b1cdbd2cSJim Jagielski# translation file.
1238*b1cdbd2cSJim Jagielski#################################################################
1239*b1cdbd2cSJim Jagielski
1240*b1cdbd2cSJim Jagielskisub get_module_name_from_basejavafile
1241*b1cdbd2cSJim Jagielski{
1242*b1cdbd2cSJim Jagielski	my ($componentname, $javatemplateorigfile, $ulffile) = @_;
1243*b1cdbd2cSJim Jagielski
1244*b1cdbd2cSJim Jagielski	my $searchname = $componentname . "-install-DisplayName";
1245*b1cdbd2cSJim Jagielski	my $modulename = "";
1246*b1cdbd2cSJim Jagielski	my $replacename = "";
1247*b1cdbd2cSJim Jagielski
1248*b1cdbd2cSJim Jagielski	# line content: { "coremodule-install-DisplayName", "OOO_INSTALLSDK_117" },
1249*b1cdbd2cSJim Jagielski
1250*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$javatemplateorigfile}; $i++ )
1251*b1cdbd2cSJim Jagielski	{
1252*b1cdbd2cSJim Jagielski		if ( ${$javatemplateorigfile}[$i] =~ /\"\s*\Q$searchname\E\s*\"\s*\,\s*\"\s*(.*?)\s*\"\s*\}\s*\,\s*$/ )
1253*b1cdbd2cSJim Jagielski		{
1254*b1cdbd2cSJim Jagielski			$replacename = $1;
1255*b1cdbd2cSJim Jagielski			last;
1256*b1cdbd2cSJim Jagielski		}
1257*b1cdbd2cSJim Jagielski	}
1258*b1cdbd2cSJim Jagielski
1259*b1cdbd2cSJim Jagielski	if ( $replacename ne "" )
1260*b1cdbd2cSJim Jagielski	{
1261*b1cdbd2cSJim Jagielski		my $language_block = get_language_block_from_language_file($replacename, $ulffile);
1262*b1cdbd2cSJim Jagielski		$modulename = get_language_string_from_language_block($language_block, "en-US", $replacename);
1263*b1cdbd2cSJim Jagielski	}
1264*b1cdbd2cSJim Jagielski
1265*b1cdbd2cSJim Jagielski	return $modulename;
1266*b1cdbd2cSJim Jagielski}
1267*b1cdbd2cSJim Jagielski
1268*b1cdbd2cSJim Jagielski#################################################################
1269*b1cdbd2cSJim Jagielski# Setting for Solaris the package names in the xml file.
1270*b1cdbd2cSJim Jagielski# This name is displayed tools like prodreg.
1271*b1cdbd2cSJim Jagielski# Unfortunately this name in the component is also used
1272*b1cdbd2cSJim Jagielski# in the translation template file for the module name
1273*b1cdbd2cSJim Jagielski# and module description translations.
1274*b1cdbd2cSJim Jagielski#################################################################
1275*b1cdbd2cSJim Jagielski
1276*b1cdbd2cSJim Jagielskisub replace_component_names
1277*b1cdbd2cSJim Jagielski{
1278*b1cdbd2cSJim Jagielski	my ($xmlfile, $templatefilename, $modulesarrayref, $javatemplateorigfile, $ulffile) = @_;
1279*b1cdbd2cSJim Jagielski
1280*b1cdbd2cSJim Jagielski	# path in which all java languages files are located
1281*b1cdbd2cSJim Jagielski
1282*b1cdbd2cSJim Jagielski	my $javafilesdir = $templatefilename;
1283*b1cdbd2cSJim Jagielski	installer::pathanalyzer::get_path_from_fullqualifiedname(\$javafilesdir);
1284*b1cdbd2cSJim Jagielski	my $alljavafiles = installer::systemactions::find_file_with_file_extension("java", $javafilesdir);
1285*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$alljavafiles}; $i++ ) { ${$alljavafiles}[$i] = $javafilesdir . ${$alljavafiles}[$i]; }
1286*b1cdbd2cSJim Jagielski
1287*b1cdbd2cSJim Jagielski	# analyzing the xml file
1288*b1cdbd2cSJim Jagielski
1289*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$xmlfile}; $i++ )
1290*b1cdbd2cSJim Jagielski	{
1291*b1cdbd2cSJim Jagielski		my $newstring = "";
1292*b1cdbd2cSJim Jagielski		my $componentname = "";
1293*b1cdbd2cSJim Jagielski
1294*b1cdbd2cSJim Jagielski		if ( ${$xmlfile}[$i] =~ /\bcomponent\b.*\bname\s*\=\'\s*(.*?)\s*\'/ )
1295*b1cdbd2cSJim Jagielski		{
1296*b1cdbd2cSJim Jagielski			$componentname = $1;
1297*b1cdbd2cSJim Jagielski
1298*b1cdbd2cSJim Jagielski			# Getting module name from the scp files in $modulesarrayref
1299*b1cdbd2cSJim Jagielski
1300*b1cdbd2cSJim Jagielski			my $onelanguage = "en-US";
1301*b1cdbd2cSJim Jagielski			my $gid = $componentname;
1302*b1cdbd2cSJim Jagielski			my $type = "Name";
1303*b1cdbd2cSJim Jagielski
1304*b1cdbd2cSJim Jagielski			my $modulename = "";
1305*b1cdbd2cSJim Jagielski			$modulename = get_module_name_description($modulesarrayref, $onelanguage, $gid, $type);
1306*b1cdbd2cSJim Jagielski
1307*b1cdbd2cSJim Jagielski			if ( $modulename eq "" )
1308*b1cdbd2cSJim Jagielski			{
1309*b1cdbd2cSJim Jagielski				$infoline = "Info: Modulename for $gid not defined in modules collector. Looking in Java ulf file.\n";
1310*b1cdbd2cSJim Jagielski				$installer::logger::Lang->print($infoline);
1311*b1cdbd2cSJim Jagielski			}
1312*b1cdbd2cSJim Jagielski
1313*b1cdbd2cSJim Jagielski			if ( $modulename eq "" ) # the modulename can also be set in the Java ulf file
1314*b1cdbd2cSJim Jagielski			{
1315*b1cdbd2cSJim Jagielski				$modulename = get_module_name_from_basejavafile($componentname, $javatemplateorigfile, $ulffile);
1316*b1cdbd2cSJim Jagielski			}
1317*b1cdbd2cSJim Jagielski
1318*b1cdbd2cSJim Jagielski			if ( $modulename ne "" )	# only do something, if the modulename was found
1319*b1cdbd2cSJim Jagielski			{
1320*b1cdbd2cSJim Jagielski				${$xmlfile}[$i] =~ s/$componentname/$modulename/;
1321*b1cdbd2cSJim Jagielski
1322*b1cdbd2cSJim Jagielski				$infoline = "Replacement in xml file (Solaris): $componentname \-\> $modulename\n";
1323*b1cdbd2cSJim Jagielski				$installer::logger::Lang->print($infoline);
1324*b1cdbd2cSJim Jagielski
1325*b1cdbd2cSJim Jagielski				# Replacement has to be done in all Java language files
1326*b1cdbd2cSJim Jagielski				replace_component_name_in_java_file($alljavafiles, $componentname, $modulename);
1327*b1cdbd2cSJim Jagielski			}
1328*b1cdbd2cSJim Jagielski
1329*b1cdbd2cSJim Jagielski			if ( $modulename eq "" ) # the modulename can also be set in the Java ulf file
1330*b1cdbd2cSJim Jagielski			{
1331*b1cdbd2cSJim Jagielski				$infoline = "WARNING: No replacement in xml file for component: $componentname\n";
1332*b1cdbd2cSJim Jagielski				$installer::logger::Lang->print($infoline);
1333*b1cdbd2cSJim Jagielski			}
1334*b1cdbd2cSJim Jagielski		}
1335*b1cdbd2cSJim Jagielski	}
1336*b1cdbd2cSJim Jagielski}
1337*b1cdbd2cSJim Jagielski
1338*b1cdbd2cSJim Jagielski#############################################################################
1339*b1cdbd2cSJim Jagielski# Collecting all packages or rpms located in the installation directory
1340*b1cdbd2cSJim Jagielski#############################################################################
1341*b1cdbd2cSJim Jagielski
1342*b1cdbd2cSJim Jagielskisub get_all_packages_in_installdir
1343*b1cdbd2cSJim Jagielski{
1344*b1cdbd2cSJim Jagielski	my ($installdir, $subdir) = @_;
1345*b1cdbd2cSJim Jagielski
1346*b1cdbd2cSJim Jagielski	my $infoline = "";
1347*b1cdbd2cSJim Jagielski
1348*b1cdbd2cSJim Jagielski	my @allrpms = ();	# not needed for Solaris at the moment
1349*b1cdbd2cSJim Jagielski	my $allrpms = \@allrpms;
1350*b1cdbd2cSJim Jagielski
1351*b1cdbd2cSJim Jagielski	$installdir =~ s/\Q$installer::globals::separator\E\s*$//;
1352*b1cdbd2cSJim Jagielski	my $directory = $installdir . $installer::globals::separator . $subdir;
1353*b1cdbd2cSJim Jagielski	$directory =~ s/\Q$installer::globals::separator\E\s*$//;
1354*b1cdbd2cSJim Jagielski
1355*b1cdbd2cSJim Jagielski	if ( $installer::globals::islinuxrpmbuild )
1356*b1cdbd2cSJim Jagielski	{
1357*b1cdbd2cSJim Jagielski		$allrpms = installer::systemactions::find_file_with_file_extension("rpm", $directory);
1358*b1cdbd2cSJim Jagielski
1359*b1cdbd2cSJim Jagielski		# collecting rpms with the complete path
1360*b1cdbd2cSJim Jagielski
1361*b1cdbd2cSJim Jagielski		for ( my $i = 0; $i <= $#{$allrpms}; $i++ )
1362*b1cdbd2cSJim Jagielski		{
1363*b1cdbd2cSJim Jagielski			${$allrpms}[$i] = $directory . $installer::globals::separator . ${$allrpms}[$i];
1364*b1cdbd2cSJim Jagielski			$infoline = "Found RPM: ${$allrpms}[$i]\n";
1365*b1cdbd2cSJim Jagielski			$installer::logger::Lang->print($infoline);
1366*b1cdbd2cSJim Jagielski		}
1367*b1cdbd2cSJim Jagielski	}
1368*b1cdbd2cSJim Jagielski
1369*b1cdbd2cSJim Jagielski	return $allrpms;
1370*b1cdbd2cSJim Jagielski}
1371*b1cdbd2cSJim Jagielski
1372*b1cdbd2cSJim Jagielski#######################################################
1373*b1cdbd2cSJim Jagielski# Adding the values of the array
1374*b1cdbd2cSJim Jagielski#######################################################
1375*b1cdbd2cSJim Jagielski
1376*b1cdbd2cSJim Jagielskisub do_sum
1377*b1cdbd2cSJim Jagielski{
1378*b1cdbd2cSJim Jagielski	my ( $allnumbers ) = @_;
1379*b1cdbd2cSJim Jagielski
1380*b1cdbd2cSJim Jagielski	my $sum = 0;
1381*b1cdbd2cSJim Jagielski
1382*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$allnumbers}; $i++ )
1383*b1cdbd2cSJim Jagielski	{
1384*b1cdbd2cSJim Jagielski		$sum = $sum + ${$allnumbers}[$i];
1385*b1cdbd2cSJim Jagielski	}
1386*b1cdbd2cSJim Jagielski
1387*b1cdbd2cSJim Jagielski	return $sum;
1388*b1cdbd2cSJim Jagielski}
1389*b1cdbd2cSJim Jagielski
1390*b1cdbd2cSJim Jagielski#######################################################
1391*b1cdbd2cSJim Jagielski# Setting the filesize for the RPMs in the xml file
1392*b1cdbd2cSJim Jagielski#######################################################
1393*b1cdbd2cSJim Jagielski
1394*b1cdbd2cSJim Jagielskisub set_filesize_in_xmlfile
1395*b1cdbd2cSJim Jagielski{
1396*b1cdbd2cSJim Jagielski	my ($filesize, $rpmname, $xmlfile) = @_;
1397*b1cdbd2cSJim Jagielski
1398*b1cdbd2cSJim Jagielski	my $infoline = "";
1399*b1cdbd2cSJim Jagielski	my $foundrpm = 0;
1400*b1cdbd2cSJim Jagielski	my $filesizeset = 0;
1401*b1cdbd2cSJim Jagielski
1402*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$xmlfile}; $i++ )
1403*b1cdbd2cSJim Jagielski	{
1404*b1cdbd2cSJim Jagielski		my $line = ${$xmlfile}[$i];
1405*b1cdbd2cSJim Jagielski
1406*b1cdbd2cSJim Jagielski		# searching for "rpmPath="RPMS/${UNIXPRODUCTNAME}-core01-${PACKAGEVERSION}-${PACKAGEREVISION}.i586.rpm""
1407*b1cdbd2cSJim Jagielski
1408*b1cdbd2cSJim Jagielski		if (( $line =~ /rpmPath\s*=/ ) && ( $line =~ /\Q$rpmname\E\"\s*$/ ))
1409*b1cdbd2cSJim Jagielski		{
1410*b1cdbd2cSJim Jagielski			$foundrpm = 1;
1411*b1cdbd2cSJim Jagielski
1412*b1cdbd2cSJim Jagielski			my $number = $i;
1413*b1cdbd2cSJim Jagielski			$number++;
1414*b1cdbd2cSJim Jagielski
1415*b1cdbd2cSJim Jagielski			while ( ! ( ${$xmlfile}[$number] =~ /\/\>\s*$/ ))
1416*b1cdbd2cSJim Jagielski			{
1417*b1cdbd2cSJim Jagielski				if ( ${$xmlfile}[$number] =~ /FILESIZEPLACEHOLDER/ )
1418*b1cdbd2cSJim Jagielski				{
1419*b1cdbd2cSJim Jagielski					${$xmlfile}[$number] =~ s/FILESIZEPLACEHOLDER/$filesize/;
1420*b1cdbd2cSJim Jagielski					$filesizeset = 1;
1421*b1cdbd2cSJim Jagielski					$infoline = "Setting filesize for $rpmname : $filesize\n";
1422*b1cdbd2cSJim Jagielski					$installer::logger::Lang->print($infoline);
1423*b1cdbd2cSJim Jagielski					last;
1424*b1cdbd2cSJim Jagielski				}
1425*b1cdbd2cSJim Jagielski
1426*b1cdbd2cSJim Jagielski				$number++;
1427*b1cdbd2cSJim Jagielski			}
1428*b1cdbd2cSJim Jagielski
1429*b1cdbd2cSJim Jagielski			last;
1430*b1cdbd2cSJim Jagielski		}
1431*b1cdbd2cSJim Jagielski	}
1432*b1cdbd2cSJim Jagielski
1433*b1cdbd2cSJim Jagielski	if ( ! $foundrpm )
1434*b1cdbd2cSJim Jagielski	{
1435*b1cdbd2cSJim Jagielski		$infoline = "ERROR: Did not find $rpmname in xml file !\n";
1436*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1437*b1cdbd2cSJim Jagielski	}
1438*b1cdbd2cSJim Jagielski
1439*b1cdbd2cSJim Jagielski	if ( ! $filesizeset )
1440*b1cdbd2cSJim Jagielski	{
1441*b1cdbd2cSJim Jagielski		$infoline = "ERROR: Did not set filesize for $rpmname in xml file !\n";
1442*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1443*b1cdbd2cSJim Jagielski	}
1444*b1cdbd2cSJim Jagielski}
1445*b1cdbd2cSJim Jagielski
1446*b1cdbd2cSJim Jagielski############################################################
1447*b1cdbd2cSJim Jagielski# Collecting all rpmUniqueName in xml file.
1448*b1cdbd2cSJim Jagielski############################################################
1449*b1cdbd2cSJim Jagielski
1450*b1cdbd2cSJim Jagielskisub collect_uniquenames_in_xmlfile
1451*b1cdbd2cSJim Jagielski{
1452*b1cdbd2cSJim Jagielski	my ($xmlfile) = @_;
1453*b1cdbd2cSJim Jagielski
1454*b1cdbd2cSJim Jagielski	my @rpmuniquenames = ();
1455*b1cdbd2cSJim Jagielski
1456*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$xmlfile}; $i++ )
1457*b1cdbd2cSJim Jagielski	{
1458*b1cdbd2cSJim Jagielski		my $oneline = ${$xmlfile}[$i];
1459*b1cdbd2cSJim Jagielski
1460*b1cdbd2cSJim Jagielski		if ( $oneline =~ /^\s*rpmUniqueName\s*\=\s*\"(.*)\"\s*$/ )
1461*b1cdbd2cSJim Jagielski		{
1462*b1cdbd2cSJim Jagielski			my $rpmuniquename = $1;
1463*b1cdbd2cSJim Jagielski			push(@rpmuniquenames, $rpmuniquename)
1464*b1cdbd2cSJim Jagielski		}
1465*b1cdbd2cSJim Jagielski	}
1466*b1cdbd2cSJim Jagielski
1467*b1cdbd2cSJim Jagielski	return \@rpmuniquenames;
1468*b1cdbd2cSJim Jagielski}
1469*b1cdbd2cSJim Jagielski
1470*b1cdbd2cSJim Jagielski############################################################
1471*b1cdbd2cSJim Jagielski# Searching for the corresponding rpm, that fits to
1472*b1cdbd2cSJim Jagielski# the unique rpm name.
1473*b1cdbd2cSJim Jagielski# Simple mechanism: The name of the rpm starts with the
1474*b1cdbd2cSJim Jagielski# unique rpm name followed by a "-".
1475*b1cdbd2cSJim Jagielski############################################################
1476*b1cdbd2cSJim Jagielski
1477*b1cdbd2cSJim Jagielskisub find_rpmname_to_uniquename
1478*b1cdbd2cSJim Jagielski{
1479*b1cdbd2cSJim Jagielski	my ($uniquename, $listofpackages) = @_;
1480*b1cdbd2cSJim Jagielski
1481*b1cdbd2cSJim Jagielski	my @all_correct_rpms = ();
1482*b1cdbd2cSJim Jagielski	my $infoline = "";
1483*b1cdbd2cSJim Jagielski
1484*b1cdbd2cSJim Jagielski	# special handling for java RPMs, which have a very strange naming schema
1485*b1cdbd2cSJim Jagielski	my $localuniquename = $uniquename;
1486*b1cdbd2cSJim Jagielski	if ( $uniquename =~ /^\s*jre\-/ ) { $localuniquename = "jre"; }
1487*b1cdbd2cSJim Jagielski
1488*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$listofpackages}; $i++ )
1489*b1cdbd2cSJim Jagielski	{
1490*b1cdbd2cSJim Jagielski		my $completerpmname = ${$listofpackages}[$i];
1491*b1cdbd2cSJim Jagielski		my $rpmname = $completerpmname;
1492*b1cdbd2cSJim Jagielski		installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$rpmname);
1493*b1cdbd2cSJim Jagielski
1494*b1cdbd2cSJim Jagielski		if ( $rpmname =~ /^\s*\Q$localuniquename\E\-\d/ ) { push(@all_correct_rpms, $rpmname); }
1495*b1cdbd2cSJim Jagielski	}
1496*b1cdbd2cSJim Jagielski
1497*b1cdbd2cSJim Jagielski	# @all_correct_rpms has to contain exactly one value
1498*b1cdbd2cSJim Jagielski
1499*b1cdbd2cSJim Jagielski	if ( $#all_correct_rpms > 0 )
1500*b1cdbd2cSJim Jagielski	{
1501*b1cdbd2cSJim Jagielski		my $number = $#all_correct_rpms + 1;
1502*b1cdbd2cSJim Jagielski		$infoline = "There are $number RPMs for the unique name \"$uniquename\" :\n";
1503*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1504*b1cdbd2cSJim Jagielski		my $allrpmstring = "";
1505*b1cdbd2cSJim Jagielski		for ( my $i = 0; $i <= $#all_correct_rpms; $i++ ) { $allrpmstring = $allrpmstring . $all_correct_rpms[$i] . "\n"; }
1506*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($allrpmstring);
1507*b1cdbd2cSJim Jagielski		installer::exiter::exit_program("ERROR: Found $number RPMs that start with unique name \"$uniquename\". Only one allowed!", "find_rpmname_to_uniquename");
1508*b1cdbd2cSJim Jagielski	}
1509*b1cdbd2cSJim Jagielski
1510*b1cdbd2cSJim Jagielski	if ( $#all_correct_rpms < 0 )
1511*b1cdbd2cSJim Jagielski	{
1512*b1cdbd2cSJim Jagielski		$infoline = "There is no rpm for the unique name \"$uniquename\"\n";
1513*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1514*b1cdbd2cSJim Jagielski		installer::exiter::exit_program("ERROR: There is no RPM that start with unique name \"$uniquename\"!", "find_rpmname_to_uniquename");
1515*b1cdbd2cSJim Jagielski	}
1516*b1cdbd2cSJim Jagielski
1517*b1cdbd2cSJim Jagielski	if ( $#all_correct_rpms == 0 )
1518*b1cdbd2cSJim Jagielski	{
1519*b1cdbd2cSJim Jagielski		$infoline = "Found one rpm for the unique name \"$uniquename\" : $all_correct_rpms[0]\n";
1520*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1521*b1cdbd2cSJim Jagielski	}
1522*b1cdbd2cSJim Jagielski
1523*b1cdbd2cSJim Jagielski	return $all_correct_rpms[0];
1524*b1cdbd2cSJim Jagielski}
1525*b1cdbd2cSJim Jagielski
1526*b1cdbd2cSJim Jagielski#######################################################
1527*b1cdbd2cSJim Jagielski# Including the complete RPM name into the xml file
1528*b1cdbd2cSJim Jagielski#######################################################
1529*b1cdbd2cSJim Jagielski
1530*b1cdbd2cSJim Jagielskisub set_rpmname_into_xmlfile
1531*b1cdbd2cSJim Jagielski{
1532*b1cdbd2cSJim Jagielski	my ($rpmname, $uniquename, $xmlfile) = @_;
1533*b1cdbd2cSJim Jagielski
1534*b1cdbd2cSJim Jagielski	my $foundrpm = 0;
1535*b1cdbd2cSJim Jagielski	my $rpmnameset = 0;
1536*b1cdbd2cSJim Jagielski
1537*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$xmlfile}; $i++ )
1538*b1cdbd2cSJim Jagielski	{
1539*b1cdbd2cSJim Jagielski		my $oneline = ${$xmlfile}[$i];
1540*b1cdbd2cSJim Jagielski
1541*b1cdbd2cSJim Jagielski		if ( $oneline =~ /^\s*rpmUniqueName\s*\=\s*\"\Q$uniquename\E\"\s*$/ )
1542*b1cdbd2cSJim Jagielski		{
1543*b1cdbd2cSJim Jagielski			$foundrpm = 1;
1544*b1cdbd2cSJim Jagielski
1545*b1cdbd2cSJim Jagielski			my $number = $i;
1546*b1cdbd2cSJim Jagielski			$number++;
1547*b1cdbd2cSJim Jagielski
1548*b1cdbd2cSJim Jagielski			while ( ! ( ${$xmlfile}[$number] =~ /\/\>\s*$/ ))
1549*b1cdbd2cSJim Jagielski			{
1550*b1cdbd2cSJim Jagielski				if ( ${$xmlfile}[$number] =~ /RPMFILENAMEPLACEHOLDER/ )
1551*b1cdbd2cSJim Jagielski				{
1552*b1cdbd2cSJim Jagielski					${$xmlfile}[$number] =~ s/RPMFILENAMEPLACEHOLDER/$rpmname/;
1553*b1cdbd2cSJim Jagielski					$rpmnameset = 1;
1554*b1cdbd2cSJim Jagielski					$infoline = "Setting RPM name for $uniquename : $rpmname\n";
1555*b1cdbd2cSJim Jagielski					$installer::logger::Lang->print($infoline);
1556*b1cdbd2cSJim Jagielski					last;
1557*b1cdbd2cSJim Jagielski				}
1558*b1cdbd2cSJim Jagielski
1559*b1cdbd2cSJim Jagielski				$number++;
1560*b1cdbd2cSJim Jagielski			}
1561*b1cdbd2cSJim Jagielski
1562*b1cdbd2cSJim Jagielski			last;
1563*b1cdbd2cSJim Jagielski		}
1564*b1cdbd2cSJim Jagielski	}
1565*b1cdbd2cSJim Jagielski
1566*b1cdbd2cSJim Jagielski	if ( ! $foundrpm )
1567*b1cdbd2cSJim Jagielski	{
1568*b1cdbd2cSJim Jagielski		$infoline = "ERROR: Did not find $rpmname in xml file !\n";
1569*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1570*b1cdbd2cSJim Jagielski	}
1571*b1cdbd2cSJim Jagielski
1572*b1cdbd2cSJim Jagielski	if ( ! $rpmnameset )
1573*b1cdbd2cSJim Jagielski	{
1574*b1cdbd2cSJim Jagielski		$infoline = "ERROR: Did not set rpm name for $uniquename in xml file !\n";
1575*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1576*b1cdbd2cSJim Jagielski	}
1577*b1cdbd2cSJim Jagielski
1578*b1cdbd2cSJim Jagielski}
1579*b1cdbd2cSJim Jagielski
1580*b1cdbd2cSJim Jagielski############################################################
1581*b1cdbd2cSJim Jagielski# Including the rpm path dynamically into the xml file.
1582*b1cdbd2cSJim Jagielski# This is introduced, because system integration has
1583*b1cdbd2cSJim Jagielski# variable PackageVersion and PackageRevision in xml file.
1584*b1cdbd2cSJim Jagielski############################################################
1585*b1cdbd2cSJim Jagielski
1586*b1cdbd2cSJim Jagielskisub put_rpmpath_into_xmlfile
1587*b1cdbd2cSJim Jagielski{
1588*b1cdbd2cSJim Jagielski	my ($xmlfile, $listofpackages) = @_;
1589*b1cdbd2cSJim Jagielski
1590*b1cdbd2cSJim Jagielski	my $infoline = "";
1591*b1cdbd2cSJim Jagielski
1592*b1cdbd2cSJim Jagielski	my $alluniquenames = collect_uniquenames_in_xmlfile($xmlfile);
1593*b1cdbd2cSJim Jagielski
1594*b1cdbd2cSJim Jagielski	my $number = $#{$listofpackages} + 1;
1595*b1cdbd2cSJim Jagielski	$infoline = "Number of packages in installation set: $number\n";
1596*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
1597*b1cdbd2cSJim Jagielski	$number = $#{$alluniquenames} + 1;
1598*b1cdbd2cSJim Jagielski	$infoline = "Number of unique RPM names in xml file: $number\n";
1599*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
1600*b1cdbd2cSJim Jagielski
1601*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print("Packages in installation set:\n");
1602*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$listofpackages}; $i++ )
1603*b1cdbd2cSJim Jagielski	{
1604*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print(${$listofpackages}[$i] . "\n");
1605*b1cdbd2cSJim Jagielski	}
1606*b1cdbd2cSJim Jagielski
1607*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print("\n");
1608*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print("Unique RPM names in xml file:\n");
1609*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$alluniquenames}; $i++ )
1610*b1cdbd2cSJim Jagielski	{
1611*b1cdbd2cSJim Jagielski		$infoline = "${$alluniquenames}[$i]\n";
1612*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1613*b1cdbd2cSJim Jagielski	}
1614*b1cdbd2cSJim Jagielski
1615*b1cdbd2cSJim Jagielski	if ( $#{$alluniquenames} != $#{$listofpackages} ) { installer::exiter::exit_program("ERROR: xml file contains $#{$alluniquenames} unique names, but there are $#{$listofpackages} packages in installation set!", "put_rpmpath_into_xmlfile"); }
1616*b1cdbd2cSJim Jagielski
1617*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$alluniquenames}; $i++ )
1618*b1cdbd2cSJim Jagielski	{
1619*b1cdbd2cSJim Jagielski		my $uniquename = ${$alluniquenames}[$i];
1620*b1cdbd2cSJim Jagielski		my $rpmname = find_rpmname_to_uniquename($uniquename, $listofpackages);
1621*b1cdbd2cSJim Jagielski		set_rpmname_into_xmlfile($rpmname, $uniquename, $xmlfile);
1622*b1cdbd2cSJim Jagielski	}
1623*b1cdbd2cSJim Jagielski}
1624*b1cdbd2cSJim Jagielski
1625*b1cdbd2cSJim Jagielski#######################################################
1626*b1cdbd2cSJim Jagielski# Including the file size of the rpms into the
1627*b1cdbd2cSJim Jagielski# xml file
1628*b1cdbd2cSJim Jagielski#######################################################
1629*b1cdbd2cSJim Jagielski
1630*b1cdbd2cSJim Jagielskisub put_filesize_into_xmlfile
1631*b1cdbd2cSJim Jagielski{
1632*b1cdbd2cSJim Jagielski	my ($xmlfile, $listofpackages) = @_;
1633*b1cdbd2cSJim Jagielski
1634*b1cdbd2cSJim Jagielski	my $infoline = "";
1635*b1cdbd2cSJim Jagielski
1636*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$listofpackages}; $i++ )
1637*b1cdbd2cSJim Jagielski	{
1638*b1cdbd2cSJim Jagielski		my $completerpmname = ${$listofpackages}[$i];
1639*b1cdbd2cSJim Jagielski		my $rpmname = $completerpmname;
1640*b1cdbd2cSJim Jagielski		installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$rpmname);
1641*b1cdbd2cSJim Jagielski
1642*b1cdbd2cSJim Jagielski		if ( ! $installer::globals::rpmquerycommand ) { installer::exiter::exit_program("ERROR: rpm not found for querying packages!", "put_filesize_into_xmlfile"); }
1643*b1cdbd2cSJim Jagielski		my $systemcall = "$installer::globals::rpmquerycommand -qp --queryformat \"\[\%\{FILESIZES\}\\n\]\" $completerpmname 2\>\&1 |";
1644*b1cdbd2cSJim Jagielski		my $rpmout = make_systemcall($systemcall, 0);
1645*b1cdbd2cSJim Jagielski		my $filesize = do_sum($rpmout);
1646*b1cdbd2cSJim Jagielski
1647*b1cdbd2cSJim Jagielski		$infoline = "Filesize $rpmname : $filesize\n";
1648*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1649*b1cdbd2cSJim Jagielski
1650*b1cdbd2cSJim Jagielski		set_filesize_in_xmlfile($filesize, $rpmname, $xmlfile);
1651*b1cdbd2cSJim Jagielski	}
1652*b1cdbd2cSJim Jagielski}
1653*b1cdbd2cSJim Jagielski
1654*b1cdbd2cSJim Jagielski#######################################################
1655*b1cdbd2cSJim Jagielski# Creating the java installer class file dynamically
1656*b1cdbd2cSJim Jagielski#######################################################
1657*b1cdbd2cSJim Jagielski
1658*b1cdbd2cSJim Jagielskisub create_java_installer
1659*b1cdbd2cSJim Jagielski{
1660*b1cdbd2cSJim Jagielski	my ( $installdir, $newdir, $languagestringref, $languagesarrayref, $allvariableshashref, $includepatharrayref, $modulesarrayref ) = @_;
1661*b1cdbd2cSJim Jagielski
1662*b1cdbd2cSJim Jagielski	installer::logger::include_header_into_logfile("Creating Java installer:");
1663*b1cdbd2cSJim Jagielski
1664*b1cdbd2cSJim Jagielski	my $infoline = "";
1665*b1cdbd2cSJim Jagielski
1666*b1cdbd2cSJim Jagielski	# collecting all packages or rpms located in the installation directory
1667*b1cdbd2cSJim Jagielski	my $listofpackages = get_all_packages_in_installdir($installdir, $newdir);
1668*b1cdbd2cSJim Jagielski
1669*b1cdbd2cSJim Jagielski	# creating the directory
1670*b1cdbd2cSJim Jagielski	my $javadir = installer::systemactions::create_directories("javainstaller", $languagestringref);
1671*b1cdbd2cSJim Jagielski	$javadir =~ s/\/\s*$//;
1672*b1cdbd2cSJim Jagielski#	push(@installer::globals::removedirs, $javadir);
1673*b1cdbd2cSJim Jagielski
1674*b1cdbd2cSJim Jagielski	# copying the content from directory install_sdk into the java directory
1675*b1cdbd2cSJim Jagielski
1676*b1cdbd2cSJim Jagielski	my $projectroot = "";
1677*b1cdbd2cSJim Jagielski	if ( $ENV{'PRJ'} ) { $projectroot = $ENV{'PRJ'}; }
1678*b1cdbd2cSJim Jagielski	else { installer::exiter::exit_program("ERROR: Environment variable PRJ not set", "create_java_installer"); }
1679*b1cdbd2cSJim Jagielski
1680*b1cdbd2cSJim Jagielski	$projectroot =~ s/\/\s*$//;
1681*b1cdbd2cSJim Jagielski	my $sourcedir = "$projectroot/inc_global/unix/install_sdk";
1682*b1cdbd2cSJim Jagielski	installer::systemactions::copy_complete_directory_without_cvs($sourcedir, $javadir);
1683*b1cdbd2cSJim Jagielski
1684*b1cdbd2cSJim Jagielski	# determining the java template file
1685*b1cdbd2cSJim Jagielski
1686*b1cdbd2cSJim Jagielski	my $templatefilename = $javadir . $installer::globals::separator . "locale/resources/MyResources_template.java";
1687*b1cdbd2cSJim Jagielski
1688*b1cdbd2cSJim Jagielski	# Saving the content of the template file. It is used in the xml files
1689*b1cdbd2cSJim Jagielski
1690*b1cdbd2cSJim Jagielski	my $javatemplateorigfile = installer::files::read_file($templatefilename);
1691*b1cdbd2cSJim Jagielski
1692*b1cdbd2cSJim Jagielski	# determining the ulf language file
1693*b1cdbd2cSJim Jagielski
1694*b1cdbd2cSJim Jagielski	# my $ulffilename = "installsdk.ulf";
1695*b1cdbd2cSJim Jagielski	my $ulffilename = "installsdk.jlf";
1696*b1cdbd2cSJim Jagielski	$ulffilename = $installer::globals::javalanguagepath . $installer::globals::separator . $ulffilename;
1697*b1cdbd2cSJim Jagielski	my $ulffile = installer::files::read_file($ulffilename);
1698*b1cdbd2cSJim Jagielski
1699*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print("\n");
1700*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print("Reading ulf file: $ulffilename\n");
1701*b1cdbd2cSJim Jagielski
1702*b1cdbd2cSJim Jagielski	$infoline = "Translating the Java template file\n";
1703*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
1704*b1cdbd2cSJim Jagielski
1705*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$languagesarrayref}; $i++ )
1706*b1cdbd2cSJim Jagielski	{
1707*b1cdbd2cSJim Jagielski		my $onelanguage = ${$languagesarrayref}[$i];
1708*b1cdbd2cSJim Jagielski
1709*b1cdbd2cSJim Jagielski		# replacing all strings in the Java file with content of ulf files
1710*b1cdbd2cSJim Jagielski
1711*b1cdbd2cSJim Jagielski		my $templatefile = installer::files::read_file($templatefilename);
1712*b1cdbd2cSJim Jagielski
1713*b1cdbd2cSJim Jagielski		set_component_name_and_description($templatefile, $modulesarrayref, $onelanguage);
1714*b1cdbd2cSJim Jagielski		translate_javafile($templatefile, $ulffile, $onelanguage);
1715*b1cdbd2cSJim Jagielski
1716*b1cdbd2cSJim Jagielski		# adding the license file into the Java file
1717*b1cdbd2cSJim Jagielski
1718*b1cdbd2cSJim Jagielski		my $licensefilesource = get_licensefilesource($onelanguage, $includepatharrayref);
1719*b1cdbd2cSJim Jagielski		my $licensefile = installer::files::read_file($licensefilesource);
1720*b1cdbd2cSJim Jagielski		add_license_file_into_javafile($templatefile, $licensefile, $includepatharrayref, $javadir, $onelanguage);
1721*b1cdbd2cSJim Jagielski
1722*b1cdbd2cSJim Jagielski		# setting productname and productversion
1723*b1cdbd2cSJim Jagielski
1724*b1cdbd2cSJim Jagielski		set_productname_and_productversion($templatefile, $allvariableshashref);
1725*b1cdbd2cSJim Jagielski
1726*b1cdbd2cSJim Jagielski		# setting the class name in the java file ( "MyResources_TEMPLATE" -> "MyResources_en" )
1727*b1cdbd2cSJim Jagielski
1728*b1cdbd2cSJim Jagielski		# if ( $onelanguage =~ /^\s*(\w+)\-(\w+)\s*$/ ) { $onelanguage = $1; }
1729*b1cdbd2cSJim Jagielski		$onelanguage =~ s/en-US/en/;	# java file name and class name contain only "_en"
1730*b1cdbd2cSJim Jagielski		$onelanguage =~ s/\-/\_/;	 	# "pt-BR" -> "pt_BR"
1731*b1cdbd2cSJim Jagielski		my $classfilename = "MyResources_" . $onelanguage;
1732*b1cdbd2cSJim Jagielski		set_classfilename($templatefile, $classfilename, "MyResources_TEMPLATE");
1733*b1cdbd2cSJim Jagielski
1734*b1cdbd2cSJim Jagielski		# saving the new file
1735*b1cdbd2cSJim Jagielski
1736*b1cdbd2cSJim Jagielski		my $newfilename = $templatefilename;
1737*b1cdbd2cSJim Jagielski		$newfilename =~ s/_template\.java\s*$/_$onelanguage\.java/;
1738*b1cdbd2cSJim Jagielski
1739*b1cdbd2cSJim Jagielski		installer::files::save_file($newfilename, $templatefile);
1740*b1cdbd2cSJim Jagielski
1741*b1cdbd2cSJim Jagielski		$infoline = "Saving Java file: $newfilename\n";
1742*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1743*b1cdbd2cSJim Jagielski	}
1744*b1cdbd2cSJim Jagielski
1745*b1cdbd2cSJim Jagielski	# renaming one language java file to "MyResources.java"
1746*b1cdbd2cSJim Jagielski
1747*b1cdbd2cSJim Jagielski	my $baselanguage = installer::languages::get_default_language($languagesarrayref);
1748*b1cdbd2cSJim Jagielski	$baselanguage =~ s/\-/\_/;	 	# "pt-BR" -> "pt_BR"
1749*b1cdbd2cSJim Jagielski	$baselanguage =~ s/en_US/en/;	# java file name and class name contain only "_en"
1750*b1cdbd2cSJim Jagielski	# if ( $baselanguage =~ /^\s*(\w+)\-(\w+)\s*$/ ) { $baselanguage = $1; } 	 # java file name and class name contain only "_en"
1751*b1cdbd2cSJim Jagielski	# $baselanguage =~ s/en-US/en/;	 # java file name and class name contain only "_en"
1752*b1cdbd2cSJim Jagielski	my $baselanguagefilename = $javadir . $installer::globals::separator . "locale/resources/MyResources_" . $baselanguage . "\.java";
1753*b1cdbd2cSJim Jagielski	my $basedestfilename = $javadir . $installer::globals::separator . "locale/resources/MyResources.java";
1754*b1cdbd2cSJim Jagielski	installer::systemactions::copy_one_file($baselanguagefilename, $basedestfilename);
1755*b1cdbd2cSJim Jagielski
1756*b1cdbd2cSJim Jagielski	# setting the class file name also for the base class
1757*b1cdbd2cSJim Jagielski
1758*b1cdbd2cSJim Jagielski	my $basetemplatefile = installer::files::read_file($basedestfilename);
1759*b1cdbd2cSJim Jagielski	my $oldclassfilename = $baselanguagefilename;
1760*b1cdbd2cSJim Jagielski	installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$oldclassfilename);
1761*b1cdbd2cSJim Jagielski	$oldclassfilename =~ s/\.java//;
1762*b1cdbd2cSJim Jagielski	my $newclassfilename = $basedestfilename;
1763*b1cdbd2cSJim Jagielski	installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$newclassfilename);
1764*b1cdbd2cSJim Jagielski	$newclassfilename =~ s/\.java//;
1765*b1cdbd2cSJim Jagielski
1766*b1cdbd2cSJim Jagielski	set_classfilename($basetemplatefile, $newclassfilename, $oldclassfilename);
1767*b1cdbd2cSJim Jagielski
1768*b1cdbd2cSJim Jagielski	installer::files::save_file($basedestfilename, $basetemplatefile);
1769*b1cdbd2cSJim Jagielski
1770*b1cdbd2cSJim Jagielski	$infoline = "Created base Java file: $basedestfilename\n";
1771*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
1772*b1cdbd2cSJim Jagielski
1773*b1cdbd2cSJim Jagielski	# deleting the template file
1774*b1cdbd2cSJim Jagielski
1775*b1cdbd2cSJim Jagielski	unlink($templatefilename);
1776*b1cdbd2cSJim Jagielski
1777*b1cdbd2cSJim Jagielski	$infoline = "Deleted template Java resource file: $templatefilename\n";
1778*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
1779*b1cdbd2cSJim Jagielski
1780*b1cdbd2cSJim Jagielski	# changing into Java directory
1781*b1cdbd2cSJim Jagielski
1782*b1cdbd2cSJim Jagielski	my $from = cwd();
1783*b1cdbd2cSJim Jagielski
1784*b1cdbd2cSJim Jagielski	chdir($javadir);
1785*b1cdbd2cSJim Jagielski
1786*b1cdbd2cSJim Jagielski	$infoline = "Changing into directory: $javadir\n";
1787*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
1788*b1cdbd2cSJim Jagielski
1789*b1cdbd2cSJim Jagielski	# preparing the xml file
1790*b1cdbd2cSJim Jagielski
1791*b1cdbd2cSJim Jagielski	my $xmlfilename = "";
1792*b1cdbd2cSJim Jagielski	my $subdir = "";
1793*b1cdbd2cSJim Jagielski
1794*b1cdbd2cSJim Jagielski	if ( $installer::globals::issolarispkgbuild )
1795*b1cdbd2cSJim Jagielski	{
1796*b1cdbd2cSJim Jagielski		$xmlfilename = "pkgUnit.xml";
1797*b1cdbd2cSJim Jagielski	}
1798*b1cdbd2cSJim Jagielski	elsif ( $installer::globals::islinuxrpmbuild )
1799*b1cdbd2cSJim Jagielski	{
1800*b1cdbd2cSJim Jagielski		$xmlfilename = "rpmUnit.xml";
1801*b1cdbd2cSJim Jagielski	}
1802*b1cdbd2cSJim Jagielski	else
1803*b1cdbd2cSJim Jagielski	{
1804*b1cdbd2cSJim Jagielski		installer::exiter::exit_program("ERROR: No platform for Install SDK", "create_java_installer");
1805*b1cdbd2cSJim Jagielski	}
1806*b1cdbd2cSJim Jagielski
1807*b1cdbd2cSJim Jagielski	# reading, editing and saving the xmlfile
1808*b1cdbd2cSJim Jagielski
1809*b1cdbd2cSJim Jagielski	my $xmlfile = installer::files::read_file($xmlfilename);
1810*b1cdbd2cSJim Jagielski	prepare_language_pack_in_xmlfile($xmlfile, $languagesarrayref);
1811*b1cdbd2cSJim Jagielski	my $xmlfilename2 = $xmlfilename . ".test2";
1812*b1cdbd2cSJim Jagielski	installer::files::save_file($xmlfilename2, $xmlfile);
1813*b1cdbd2cSJim Jagielski	remove_empty_packages_in_xmlfile($xmlfile);
1814*b1cdbd2cSJim Jagielski	my $xmlfilename3 = $xmlfilename . ".test3";
1815*b1cdbd2cSJim Jagielski	installer::files::save_file($xmlfilename3, $xmlfile);
1816*b1cdbd2cSJim Jagielski	substitute_variables($xmlfile, $allvariableshashref);
1817*b1cdbd2cSJim Jagielski	if (( $installer::globals::islinuxrpmbuild ) && ( $#installer::globals::linkrpms > -1 )) { prepare_linkrpm_in_xmlfile($xmlfile,\@installer::globals::linkrpms); }
1818*b1cdbd2cSJim Jagielski	if ( $installer::globals::issolarisx86build || $installer::globals::islinuxbuild ) { remove_w4w_from_xmlfile($xmlfile); }
1819*b1cdbd2cSJim Jagielski	remove_module_if_not_defined($xmlfile, $modulesarrayref, "gid_Module_Optional_Onlineupdate");
1820*b1cdbd2cSJim Jagielski	replace_component_names($xmlfile, $templatefilename, $modulesarrayref, $javatemplateorigfile, $ulffile);
1821*b1cdbd2cSJim Jagielski	my $xmlfilename4 = $xmlfilename . ".test4";
1822*b1cdbd2cSJim Jagielski	installer::files::save_file($xmlfilename4, $xmlfile);
1823*b1cdbd2cSJim Jagielski	if ( $installer::globals::islinuxrpmbuild ) { put_rpmpath_into_xmlfile($xmlfile, $listofpackages); }
1824*b1cdbd2cSJim Jagielski	if ( $installer::globals::islinuxrpmbuild ) { put_filesize_into_xmlfile($xmlfile, $listofpackages); }
1825*b1cdbd2cSJim Jagielski	installer::files::save_file($xmlfilename, $xmlfile);
1826*b1cdbd2cSJim Jagielski	$infoline = "Saving xml file: $xmlfilename\n";
1827*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
1828*b1cdbd2cSJim Jagielski
1829*b1cdbd2cSJim Jagielski	# Setting the classpath and starting compiler
1830*b1cdbd2cSJim Jagielski
1831*b1cdbd2cSJim Jagielski	set_classpath_for_install_sdk($javadir);
1832*b1cdbd2cSJim Jagielski
1833*b1cdbd2cSJim Jagielski	# creating class files:
1834*b1cdbd2cSJim Jagielski	# language class file, dialog class files, installer class file
1835*b1cdbd2cSJim Jagielski
1836*b1cdbd2cSJim Jagielski	my $jdkpath = "";
1837*b1cdbd2cSJim Jagielski	if ( $ENV{'JDKPATH'} ) { $jdkpath = $ENV{'JDKPATH'}; }
1838*b1cdbd2cSJim Jagielski
1839*b1cdbd2cSJim Jagielski	my $javac = "javac";
1840*b1cdbd2cSJim Jagielski	if ( $jdkpath ) { $javac = $jdkpath . $installer::globals::separator . $javac; }
1841*b1cdbd2cSJim Jagielski
1842*b1cdbd2cSJim Jagielski	my $systemcall = "$javac locale\/resources\/\*\.java 2\>\&1 |";
1843*b1cdbd2cSJim Jagielski	make_systemcall($systemcall, 1);
1844*b1cdbd2cSJim Jagielski
1845*b1cdbd2cSJim Jagielski	$systemcall = "$javac com\/sun\/staroffice\/install\/\*\.java 2\>\&1 |";
1846*b1cdbd2cSJim Jagielski	make_systemcall($systemcall, 1);
1847*b1cdbd2cSJim Jagielski
1848*b1cdbd2cSJim Jagielski	# making subdirectory creating empty packages
1849*b1cdbd2cSJim Jagielski	create_empty_packages($xmlfile);
1850*b1cdbd2cSJim Jagielski
1851*b1cdbd2cSJim Jagielski	# Copy "jresetup" from solver locally to include it into the classfile
1852*b1cdbd2cSJim Jagielski	# Copy "jresetup" from solver to installdir
1853*b1cdbd2cSJim Jagielski
1854*b1cdbd2cSJim Jagielski	my $setupname = "jresetup";
1855*b1cdbd2cSJim Jagielski	my $newname = "setup";
1856*b1cdbd2cSJim Jagielski	copy_setup_locally($includepatharrayref, $setupname, $newname);
1857*b1cdbd2cSJim Jagielski
1858*b1cdbd2cSJim Jagielski	my $java = "java";
1859*b1cdbd2cSJim Jagielski	if ( $jdkpath ) { $java = $jdkpath . $installer::globals::separator . $java; }
1860*b1cdbd2cSJim Jagielski
1861*b1cdbd2cSJim Jagielski	$systemcall = "$java com.sun.setup.builder.InstallBuilder $xmlfilename -novalidate 2\>\&1 |";
1862*b1cdbd2cSJim Jagielski	make_systemcall($systemcall, 1);
1863*b1cdbd2cSJim Jagielski
1864*b1cdbd2cSJim Jagielski	# copying the newly created classfile into the installation set
1865*b1cdbd2cSJim Jagielski
1866*b1cdbd2cSJim Jagielski	my $archivefilename = get_archivefilename($xmlfile);
1867*b1cdbd2cSJim Jagielski	$archivefilename = $archivefilename . ".class";
1868*b1cdbd2cSJim Jagielski
1869*b1cdbd2cSJim Jagielski	if ( ! -f $archivefilename ) { installer::exiter::exit_program("ERROR: Could not find Java class file $archivefilename!", "create_java_installer"); }
1870*b1cdbd2cSJim Jagielski
1871*b1cdbd2cSJim Jagielski	installer::systemactions::copy_one_file($archivefilename, $installdir);
1872*b1cdbd2cSJim Jagielski
1873*b1cdbd2cSJim Jagielski	# Adding the loader into the installation set. The name of the loader is setup.
1874*b1cdbd2cSJim Jagielski	put_loader_into_installset($installdir, $newname);
1875*b1cdbd2cSJim Jagielski
1876*b1cdbd2cSJim Jagielski	chdir($from);
1877*b1cdbd2cSJim Jagielski
1878*b1cdbd2cSJim Jagielski	$infoline = "Changing into directory: $from\n";
1879*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
1880*b1cdbd2cSJim Jagielski}
1881*b1cdbd2cSJim Jagielski
1882*b1cdbd2cSJim Jagielski1;
1883