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::xpdinstaller;
24*b1cdbd2cSJim Jagielski
25*b1cdbd2cSJim Jagielskiuse Cwd;
26*b1cdbd2cSJim Jagielskiuse installer::converter;
27*b1cdbd2cSJim Jagielskiuse installer::exiter;
28*b1cdbd2cSJim Jagielskiuse installer::globals;
29*b1cdbd2cSJim Jagielskiuse installer::languages;
30*b1cdbd2cSJim Jagielskiuse installer::logger;
31*b1cdbd2cSJim Jagielskiuse installer::pathanalyzer;
32*b1cdbd2cSJim Jagielskiuse installer::remover;
33*b1cdbd2cSJim Jagielskiuse installer::systemactions;
34*b1cdbd2cSJim Jagielski
35*b1cdbd2cSJim Jagielski
36*b1cdbd2cSJim Jagielski#######################################################
37*b1cdbd2cSJim Jagielski# Searching for the module name and description in the
38*b1cdbd2cSJim Jagielski# modules collector
39*b1cdbd2cSJim Jagielski#######################################################
40*b1cdbd2cSJim Jagielski
41*b1cdbd2cSJim Jagielskisub get_module_name_description
42*b1cdbd2cSJim Jagielski{
43*b1cdbd2cSJim Jagielski	my ($modulesarrayref, $onelanguage, $gid, $type) = @_;
44*b1cdbd2cSJim Jagielski
45*b1cdbd2cSJim Jagielski	my $found = 0;
46*b1cdbd2cSJim Jagielski
47*b1cdbd2cSJim Jagielski	my $newstring = "";
48*b1cdbd2cSJim Jagielski
49*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$modulesarrayref}; $i++ )
50*b1cdbd2cSJim Jagielski	{
51*b1cdbd2cSJim Jagielski		my $onemodule = ${$modulesarrayref}[$i];
52*b1cdbd2cSJim Jagielski
53*b1cdbd2cSJim Jagielski		if ( $onemodule->{'gid'} eq $gid )
54*b1cdbd2cSJim Jagielski		{
55*b1cdbd2cSJim Jagielski			my $typestring = $type . " " . "(" . $onelanguage . ")";
56*b1cdbd2cSJim Jagielski			if ( $onemodule->{$typestring} ) { $newstring = $onemodule->{$typestring}; }
57*b1cdbd2cSJim Jagielski			$found = 1;
58*b1cdbd2cSJim Jagielski		}
59*b1cdbd2cSJim Jagielski
60*b1cdbd2cSJim Jagielski		if ( $found ) { last; }
61*b1cdbd2cSJim Jagielski	}
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski	# defaulting to english
64*b1cdbd2cSJim Jagielski
65*b1cdbd2cSJim Jagielski	if ( ! $found )
66*b1cdbd2cSJim Jagielski	{
67*b1cdbd2cSJim Jagielski		my $defaultlanguage = "en-US";
68*b1cdbd2cSJim Jagielski
69*b1cdbd2cSJim Jagielski		for ( my $i = 0; $i <= $#{$modulesarrayref}; $i++ )
70*b1cdbd2cSJim Jagielski		{
71*b1cdbd2cSJim Jagielski			my $onemodule = ${$modulesarrayref}[$i];
72*b1cdbd2cSJim Jagielski
73*b1cdbd2cSJim Jagielski			if ( $onemodule->{'gid'} eq $gid )
74*b1cdbd2cSJim Jagielski			{
75*b1cdbd2cSJim Jagielski				my $typestring = $type . " " . "(" . $defaultlanguage . ")";
76*b1cdbd2cSJim Jagielski				if ( $onemodule->{$typestring} ) { $newstring = $onemodule->{$typestring}; }
77*b1cdbd2cSJim Jagielski				$found = 1;
78*b1cdbd2cSJim Jagielski			}
79*b1cdbd2cSJim Jagielski
80*b1cdbd2cSJim Jagielski			if ( $found ) { last; }
81*b1cdbd2cSJim Jagielski		}
82*b1cdbd2cSJim Jagielski	}
83*b1cdbd2cSJim Jagielski
84*b1cdbd2cSJim Jagielski	return $newstring;
85*b1cdbd2cSJim Jagielski}
86*b1cdbd2cSJim Jagielski
87*b1cdbd2cSJim Jagielski###################################################
88*b1cdbd2cSJim Jagielski# Finding module, specified by the gid
89*b1cdbd2cSJim Jagielski###################################################
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielskisub get_module
92*b1cdbd2cSJim Jagielski{
93*b1cdbd2cSJim Jagielski	my ($modulegid, $modulesarrayref) = @_;
94*b1cdbd2cSJim Jagielski
95*b1cdbd2cSJim Jagielski	my $found = 0;
96*b1cdbd2cSJim Jagielski	my $searchmodule = "";
97*b1cdbd2cSJim Jagielski
98*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$modulesarrayref}; $i++ )
99*b1cdbd2cSJim Jagielski	{
100*b1cdbd2cSJim Jagielski		my $onemodule = ${$modulesarrayref}[$i];
101*b1cdbd2cSJim Jagielski
102*b1cdbd2cSJim Jagielski		if ( $onemodule->{'gid'} eq $modulegid )
103*b1cdbd2cSJim Jagielski		{
104*b1cdbd2cSJim Jagielski			$searchmodule = $onemodule;
105*b1cdbd2cSJim Jagielski			$found = 1;
106*b1cdbd2cSJim Jagielski			last;
107*b1cdbd2cSJim Jagielski		}
108*b1cdbd2cSJim Jagielski
109*b1cdbd2cSJim Jagielski		# if ( ! $found ) { installer::exiter::exit_program("ERROR: Could not find module belonging to gid $modulegid!", "get_module (xpdinstaller)"); }
110*b1cdbd2cSJim Jagielski	}
111*b1cdbd2cSJim Jagielski
112*b1cdbd2cSJim Jagielski	return $searchmodule;
113*b1cdbd2cSJim Jagielski}
114*b1cdbd2cSJim Jagielski
115*b1cdbd2cSJim Jagielski###################################################
116*b1cdbd2cSJim Jagielski# Creating package start tag
117*b1cdbd2cSJim Jagielski###################################################
118*b1cdbd2cSJim Jagielski
119*b1cdbd2cSJim Jagielskisub get_package_tag
120*b1cdbd2cSJim Jagielski{
121*b1cdbd2cSJim Jagielski	my ( $module, $indent, $linkpackage ) = @_;
122*b1cdbd2cSJim Jagielski
123*b1cdbd2cSJim Jagielski	my $modulegid = $module->{'gid'};
124*b1cdbd2cSJim Jagielski	if ( $linkpackage ) { $modulegid = $modulegid . "u"; }
125*b1cdbd2cSJim Jagielski	my $parentgid = "";
126*b1cdbd2cSJim Jagielski	if ( $module->{'ParentID'} ) { $parentgid = $module->{'ParentID'}; }
127*b1cdbd2cSJim Jagielski	if ( $parentgid eq "" ) { $parentgid = "root"; }
128*b1cdbd2cSJim Jagielski	if ( $module->{'XPDParentID'} ) { $parentgid = $module->{'XPDParentID'}; } # changing parent of "Prg" and "Opt" to "root"
129*b1cdbd2cSJim Jagielski
130*b1cdbd2cSJim Jagielski	my $tag = $indent . "<package " . "name=" . "\"" . $modulegid . "\" " . "parent=" . "\"" . $parentgid . "\">" . "\n";
131*b1cdbd2cSJim Jagielski
132*b1cdbd2cSJim Jagielski	return ( $tag, $parentgid );
133*b1cdbd2cSJim Jagielski}
134*b1cdbd2cSJim Jagielski
135*b1cdbd2cSJim Jagielski###################################################
136*b1cdbd2cSJim Jagielski# Creating display start tag
137*b1cdbd2cSJim Jagielski###################################################
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielskisub get_display_tag
140*b1cdbd2cSJim Jagielski{
141*b1cdbd2cSJim Jagielski	my ( $module, $indent ) = @_;
142*b1cdbd2cSJim Jagielski
143*b1cdbd2cSJim Jagielski	# Styles=(HIDDEN_ROOT)
144*b1cdbd2cSJim Jagielski	my $styles = "";
145*b1cdbd2cSJim Jagielski	my $type = "";
146*b1cdbd2cSJim Jagielski	if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; }
147*b1cdbd2cSJim Jagielski	if ( $styles =~ /\bHIDDEN_ROOT\b/ ) { $type = "hidden"; }
148*b1cdbd2cSJim Jagielski	else { $type = "show"; }
149*b1cdbd2cSJim Jagielski
150*b1cdbd2cSJim Jagielski	# special handling for language modules. Only visible in multilingual installation set.
151*b1cdbd2cSJim Jagielski	if (( $styles =~ /\bSHOW_MULTILINGUAL_ONLY\b/ ) && ( ! $installer::globals::ismultilingual )) { $type = "hidden"; }
152*b1cdbd2cSJim Jagielski
153*b1cdbd2cSJim Jagielski	# special handling for the root module, which has no parent
154*b1cdbd2cSJim Jagielski	my $parentgid = "";
155*b1cdbd2cSJim Jagielski	if ( $module->{'ParentID'} ) { $parentgid = $module->{'ParentID'}; }
156*b1cdbd2cSJim Jagielski	if ( $parentgid eq "" ) { $type = "hidden"; }
157*b1cdbd2cSJim Jagielski
158*b1cdbd2cSJim Jagielski	my $tag = $indent . "<display " . "type=" . "\"" . $type . "\"" . ">" . "\n";
159*b1cdbd2cSJim Jagielski
160*b1cdbd2cSJim Jagielski	return $tag;
161*b1cdbd2cSJim Jagielski}
162*b1cdbd2cSJim Jagielski
163*b1cdbd2cSJim Jagielski###################################################
164*b1cdbd2cSJim Jagielski# Creating installunit start tag
165*b1cdbd2cSJim Jagielski###################################################
166*b1cdbd2cSJim Jagielski
167*b1cdbd2cSJim Jagielskisub get_installunit_tag
168*b1cdbd2cSJim Jagielski{
169*b1cdbd2cSJim Jagielski	my ( $indent ) = @_;
170*b1cdbd2cSJim Jagielski
171*b1cdbd2cSJim Jagielski	my $type = $installer::globals::packageformat;
172*b1cdbd2cSJim Jagielski
173*b1cdbd2cSJim Jagielski	my $tag = $indent . "<installunit " . "type=" . "\"" . $type . "\"" . ">" . "\n";
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim Jagielski	return $tag;
176*b1cdbd2cSJim Jagielski}
177*b1cdbd2cSJim Jagielski
178*b1cdbd2cSJim Jagielski###################################################
179*b1cdbd2cSJim Jagielski# Creating simple start tags
180*b1cdbd2cSJim Jagielski###################################################
181*b1cdbd2cSJim Jagielski
182*b1cdbd2cSJim Jagielskisub get_start_tag
183*b1cdbd2cSJim Jagielski{
184*b1cdbd2cSJim Jagielski	my ( $tag, $indent ) = @_;
185*b1cdbd2cSJim Jagielski
186*b1cdbd2cSJim Jagielski	my $starttag = $indent . "<" . $tag . ">" . "\n";
187*b1cdbd2cSJim Jagielski	return $starttag;
188*b1cdbd2cSJim Jagielski}
189*b1cdbd2cSJim Jagielski
190*b1cdbd2cSJim Jagielski###################################################
191*b1cdbd2cSJim Jagielski# Creating end tags
192*b1cdbd2cSJim Jagielski###################################################
193*b1cdbd2cSJim Jagielski
194*b1cdbd2cSJim Jagielskisub get_end_tag
195*b1cdbd2cSJim Jagielski{
196*b1cdbd2cSJim Jagielski	my ( $tag, $indent ) = @_;
197*b1cdbd2cSJim Jagielski
198*b1cdbd2cSJim Jagielski	my $endtag = $indent . "</" . $tag . ">" . "\n";
199*b1cdbd2cSJim Jagielski	return $endtag;
200*b1cdbd2cSJim Jagielski}
201*b1cdbd2cSJim Jagielski
202*b1cdbd2cSJim Jagielski###################################################
203*b1cdbd2cSJim Jagielski# Creating simple complete tag
204*b1cdbd2cSJim Jagielski###################################################
205*b1cdbd2cSJim Jagielski
206*b1cdbd2cSJim Jagielskisub get_tag_line
207*b1cdbd2cSJim Jagielski{
208*b1cdbd2cSJim Jagielski	my ( $indent, $name, $value ) = @_;
209*b1cdbd2cSJim Jagielski	$value = '' unless defined $value;
210*b1cdbd2cSJim Jagielski
211*b1cdbd2cSJim Jagielski	my $line = $indent . "<" . $name . ">" . $value . "</" . $name . ">" . "\n";
212*b1cdbd2cSJim Jagielski
213*b1cdbd2cSJim Jagielski}
214*b1cdbd2cSJim Jagielski
215*b1cdbd2cSJim Jagielski###################################################
216*b1cdbd2cSJim Jagielski# Asking module for sortkey entry
217*b1cdbd2cSJim Jagielski###################################################
218*b1cdbd2cSJim Jagielski
219*b1cdbd2cSJim Jagielskisub get_sortkey_value
220*b1cdbd2cSJim Jagielski{
221*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
222*b1cdbd2cSJim Jagielski
223*b1cdbd2cSJim Jagielski	my $value = "9999";
224*b1cdbd2cSJim Jagielski
225*b1cdbd2cSJim Jagielski	if ( $module->{'Sortkey'} ) { $value = $module->{'Sortkey'}; }
226*b1cdbd2cSJim Jagielski
227*b1cdbd2cSJim Jagielski	return $value;
228*b1cdbd2cSJim Jagielski}
229*b1cdbd2cSJim Jagielski
230*b1cdbd2cSJim Jagielski###################################################
231*b1cdbd2cSJim Jagielski# Asking module for default entry
232*b1cdbd2cSJim Jagielski###################################################
233*b1cdbd2cSJim Jagielski
234*b1cdbd2cSJim Jagielskisub get_default_value
235*b1cdbd2cSJim Jagielski{
236*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
237*b1cdbd2cSJim Jagielski
238*b1cdbd2cSJim Jagielski	my $value = "";
239*b1cdbd2cSJim Jagielski
240*b1cdbd2cSJim Jagielski	if ( $module->{'Default'} ) { $value = $module->{'Default'}; } # is YES or NO
241*b1cdbd2cSJim Jagielski
242*b1cdbd2cSJim Jagielski	if ( $value =~ /\bNO\b/i ) { $value = "false"; }
243*b1cdbd2cSJim Jagielski	else { $value = "true"; }
244*b1cdbd2cSJim Jagielski
245*b1cdbd2cSJim Jagielski	return $value;
246*b1cdbd2cSJim Jagielski}
247*b1cdbd2cSJim Jagielski
248*b1cdbd2cSJim Jagielski###################################################
249*b1cdbd2cSJim Jagielski# Asking module for showinuserinstall entry
250*b1cdbd2cSJim Jagielski# scp style: DONTSHOWINUSERINSTALL
251*b1cdbd2cSJim Jagielski###################################################
252*b1cdbd2cSJim Jagielski
253*b1cdbd2cSJim Jagielskisub get_showinuserinstall_value
254*b1cdbd2cSJim Jagielski{
255*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
256*b1cdbd2cSJim Jagielski
257*b1cdbd2cSJim Jagielski	my $value = "true";
258*b1cdbd2cSJim Jagielski
259*b1cdbd2cSJim Jagielski	my $styles = "";
260*b1cdbd2cSJim Jagielski	if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; }
261*b1cdbd2cSJim Jagielski	if ( $styles =~ /\bDONTSHOWINUSERINSTALL\b/ ) { $value = "false"; }
262*b1cdbd2cSJim Jagielski
263*b1cdbd2cSJim Jagielski	return $value;
264*b1cdbd2cSJim Jagielski}
265*b1cdbd2cSJim Jagielski
266*b1cdbd2cSJim Jagielski###################################################
267*b1cdbd2cSJim Jagielski# Asking module for showinuserinstall entry
268*b1cdbd2cSJim Jagielski# scp style: USERINSTALLONLY
269*b1cdbd2cSJim Jagielski###################################################
270*b1cdbd2cSJim Jagielski
271*b1cdbd2cSJim Jagielskisub get_userinstallonly_value
272*b1cdbd2cSJim Jagielski{
273*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
274*b1cdbd2cSJim Jagielski
275*b1cdbd2cSJim Jagielski	my $value = "false";
276*b1cdbd2cSJim Jagielski
277*b1cdbd2cSJim Jagielski	my $styles = "";
278*b1cdbd2cSJim Jagielski	if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; }
279*b1cdbd2cSJim Jagielski	if ( $styles =~ /\bUSERINSTALLONLY\b/ ) { $value = "true"; }
280*b1cdbd2cSJim Jagielski
281*b1cdbd2cSJim Jagielski	return $value;
282*b1cdbd2cSJim Jagielski}
283*b1cdbd2cSJim Jagielski
284*b1cdbd2cSJim Jagielski###################################################
285*b1cdbd2cSJim Jagielski# Asking module for dontuninstall entry
286*b1cdbd2cSJim Jagielski# scp style: DONTUNINSTALL
287*b1cdbd2cSJim Jagielski###################################################
288*b1cdbd2cSJim Jagielski
289*b1cdbd2cSJim Jagielskisub get_dontuninstall_value
290*b1cdbd2cSJim Jagielski{
291*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
292*b1cdbd2cSJim Jagielski
293*b1cdbd2cSJim Jagielski	my $value = "false";
294*b1cdbd2cSJim Jagielski
295*b1cdbd2cSJim Jagielski	my $styles = "";
296*b1cdbd2cSJim Jagielski	if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; }
297*b1cdbd2cSJim Jagielski	if ( $styles =~ /\bDONTUNINSTALL\b/ ) { $value = "true"; }
298*b1cdbd2cSJim Jagielski
299*b1cdbd2cSJim Jagielski	return $value;
300*b1cdbd2cSJim Jagielski}
301*b1cdbd2cSJim Jagielski
302*b1cdbd2cSJim Jagielski###################################################
303*b1cdbd2cSJim Jagielski# Asking module for XpdCheckSolaris entry
304*b1cdbd2cSJim Jagielski# (belongs to scp module)
305*b1cdbd2cSJim Jagielski###################################################
306*b1cdbd2cSJim Jagielski
307*b1cdbd2cSJim Jagielskisub get_checksolaris_value
308*b1cdbd2cSJim Jagielski{
309*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
310*b1cdbd2cSJim Jagielski
311*b1cdbd2cSJim Jagielski	my $value = "";
312*b1cdbd2cSJim Jagielski	if ( $module->{'XpdCheckSolaris'} ) { $value = $module->{'XpdCheckSolaris'}; }
313*b1cdbd2cSJim Jagielski
314*b1cdbd2cSJim Jagielski	return $value;
315*b1cdbd2cSJim Jagielski}
316*b1cdbd2cSJim Jagielski
317*b1cdbd2cSJim Jagielski###################################################
318*b1cdbd2cSJim Jagielski# Asking module for isupdatepackage entry
319*b1cdbd2cSJim Jagielski# scp style: ISUPDATEPACKAGE
320*b1cdbd2cSJim Jagielski###################################################
321*b1cdbd2cSJim Jagielski
322*b1cdbd2cSJim Jagielskisub get_isupdatepackage_value
323*b1cdbd2cSJim Jagielski{
324*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
325*b1cdbd2cSJim Jagielski
326*b1cdbd2cSJim Jagielski	my $value = "false";
327*b1cdbd2cSJim Jagielski
328*b1cdbd2cSJim Jagielski	my $styles = "";
329*b1cdbd2cSJim Jagielski	if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; }
330*b1cdbd2cSJim Jagielski	if ( $styles =~ /\bISUPDATEPACKAGE\b/ ) { $value = "true"; }
331*b1cdbd2cSJim Jagielski
332*b1cdbd2cSJim Jagielski	return $value;
333*b1cdbd2cSJim Jagielski}
334*b1cdbd2cSJim Jagielski
335*b1cdbd2cSJim Jagielski###################################################
336*b1cdbd2cSJim Jagielski# Asking module for showmultilingualonly entry
337*b1cdbd2cSJim Jagielski# scp style: SHOW_MULTILINGUAL_ONLY
338*b1cdbd2cSJim Jagielski###################################################
339*b1cdbd2cSJim Jagielski
340*b1cdbd2cSJim Jagielskisub get_showmultilingualonly_value
341*b1cdbd2cSJim Jagielski{
342*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
343*b1cdbd2cSJim Jagielski
344*b1cdbd2cSJim Jagielski	my $value = "false";
345*b1cdbd2cSJim Jagielski
346*b1cdbd2cSJim Jagielski	my $styles = "";
347*b1cdbd2cSJim Jagielski	if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; }
348*b1cdbd2cSJim Jagielski	if ( $styles =~ /\bSHOW_MULTILINGUAL_ONLY\b/ ) { $value = "true"; }
349*b1cdbd2cSJim Jagielski
350*b1cdbd2cSJim Jagielski	return $value;
351*b1cdbd2cSJim Jagielski}
352*b1cdbd2cSJim Jagielski
353*b1cdbd2cSJim Jagielski###################################################
354*b1cdbd2cSJim Jagielski# Asking module for showmultilingualonly entry
355*b1cdbd2cSJim Jagielski# scp style: SHOW_MULTILINGUAL_ONLY
356*b1cdbd2cSJim Jagielski###################################################
357*b1cdbd2cSJim Jagielski
358*b1cdbd2cSJim Jagielskisub get_applicationmodule_value
359*b1cdbd2cSJim Jagielski{
360*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
361*b1cdbd2cSJim Jagielski
362*b1cdbd2cSJim Jagielski	my $value = "false";
363*b1cdbd2cSJim Jagielski
364*b1cdbd2cSJim Jagielski	my $styles = "";
365*b1cdbd2cSJim Jagielski	if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; }
366*b1cdbd2cSJim Jagielski	if ( $styles =~ /\bAPPLICATIONMODULE\b/ ) { $value = "true"; }
367*b1cdbd2cSJim Jagielski
368*b1cdbd2cSJim Jagielski	return $value;
369*b1cdbd2cSJim Jagielski}
370*b1cdbd2cSJim Jagielski
371*b1cdbd2cSJim Jagielski###################################################
372*b1cdbd2cSJim Jagielski# Asking module for java module entry
373*b1cdbd2cSJim Jagielski# scp style: JAVAMODULE
374*b1cdbd2cSJim Jagielski###################################################
375*b1cdbd2cSJim Jagielski
376*b1cdbd2cSJim Jagielskisub get_isjavamodule_value
377*b1cdbd2cSJim Jagielski{
378*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
379*b1cdbd2cSJim Jagielski
380*b1cdbd2cSJim Jagielski	my $value = "false";
381*b1cdbd2cSJim Jagielski
382*b1cdbd2cSJim Jagielski	my $styles = "";
383*b1cdbd2cSJim Jagielski	if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; }
384*b1cdbd2cSJim Jagielski	if ( $styles =~ /\bJAVAMODULE\b/ ) { $value = "true"; }
385*b1cdbd2cSJim Jagielski
386*b1cdbd2cSJim Jagielski	return $value;
387*b1cdbd2cSJim Jagielski}
388*b1cdbd2cSJim Jagielski
389*b1cdbd2cSJim Jagielski#####################################################################
390*b1cdbd2cSJim Jagielski# Asking module, if installation shall use --force
391*b1cdbd2cSJim Jagielski# scp style: USEFORCE  (Linux only)
392*b1cdbd2cSJim Jagielski#####################################################################
393*b1cdbd2cSJim Jagielski
394*b1cdbd2cSJim Jagielskisub get_useforce_value
395*b1cdbd2cSJim Jagielski{
396*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
397*b1cdbd2cSJim Jagielski
398*b1cdbd2cSJim Jagielski	my $value = "false";
399*b1cdbd2cSJim Jagielski
400*b1cdbd2cSJim Jagielski	my $styles = "";
401*b1cdbd2cSJim Jagielski	if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; }
402*b1cdbd2cSJim Jagielski	if ( $styles =~ /\bUSEFORCE\b/ ) { $value = "true"; }
403*b1cdbd2cSJim Jagielski
404*b1cdbd2cSJim Jagielski	return $value;
405*b1cdbd2cSJim Jagielski}
406*b1cdbd2cSJim Jagielski
407*b1cdbd2cSJim Jagielski###################################################
408*b1cdbd2cSJim Jagielski# Asking module, if installation can fail
409*b1cdbd2cSJim Jagielski# scp style: INSTALLCANFAIL
410*b1cdbd2cSJim Jagielski###################################################
411*b1cdbd2cSJim Jagielski
412*b1cdbd2cSJim Jagielskisub get_installcanfail_value
413*b1cdbd2cSJim Jagielski{
414*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
415*b1cdbd2cSJim Jagielski
416*b1cdbd2cSJim Jagielski	my $value = "false";
417*b1cdbd2cSJim Jagielski
418*b1cdbd2cSJim Jagielski	my $styles = "";
419*b1cdbd2cSJim Jagielski	if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; }
420*b1cdbd2cSJim Jagielski	if ( $styles =~ /\bINSTALLCANFAIL\b/ ) { $value = "true"; }
421*b1cdbd2cSJim Jagielski
422*b1cdbd2cSJim Jagielski	return $value;
423*b1cdbd2cSJim Jagielski}
424*b1cdbd2cSJim Jagielski
425*b1cdbd2cSJim Jagielski###################################################
426*b1cdbd2cSJim Jagielski# Asking module, if installation can fail
427*b1cdbd2cSJim Jagielski# scp style: INSTALLCANFAIL
428*b1cdbd2cSJim Jagielski###################################################
429*b1cdbd2cSJim Jagielski
430*b1cdbd2cSJim Jagielskisub get_forceintoupdate_value
431*b1cdbd2cSJim Jagielski{
432*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
433*b1cdbd2cSJim Jagielski
434*b1cdbd2cSJim Jagielski	my $value = "false";
435*b1cdbd2cSJim Jagielski
436*b1cdbd2cSJim Jagielski	my $styles = "";
437*b1cdbd2cSJim Jagielski	if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; }
438*b1cdbd2cSJim Jagielski	if ( $styles =~ /\bFORCEINTOUPDATE\b/ ) { $value = "true"; }
439*b1cdbd2cSJim Jagielski
440*b1cdbd2cSJim Jagielski	return $value;
441*b1cdbd2cSJim Jagielski}
442*b1cdbd2cSJim Jagielski
443*b1cdbd2cSJim Jagielski###################################################
444*b1cdbd2cSJim Jagielski# Substituting all occurences of "<" by "&lt;"
445*b1cdbd2cSJim Jagielski# and all occurences of ">" by "&gt;"
446*b1cdbd2cSJim Jagielski###################################################
447*b1cdbd2cSJim Jagielski
448*b1cdbd2cSJim Jagielskisub replace_brackets_in_string
449*b1cdbd2cSJim Jagielski{
450*b1cdbd2cSJim Jagielski	my ( $string ) = @_;
451*b1cdbd2cSJim Jagielski
452*b1cdbd2cSJim Jagielski	if ( $string =~ /\</ ) { $string =~ s/\</\&lt\;/g; }
453*b1cdbd2cSJim Jagielski	if ( $string =~ /\>/ ) { $string =~ s/\>/\&gt\;/g; }
454*b1cdbd2cSJim Jagielski
455*b1cdbd2cSJim Jagielski	return $string;
456*b1cdbd2cSJim Jagielski}
457*b1cdbd2cSJim Jagielski
458*b1cdbd2cSJim Jagielski###################################################
459*b1cdbd2cSJim Jagielski# Substituting all occurences of "\uUXYZ" by
460*b1cdbd2cSJim Jagielski# "&#xUXYZ;", because the use xml saxparser does
461*b1cdbd2cSJim Jagielski# not know anything about this encoding. Therfore
462*b1cdbd2cSJim Jagielski# the xml file can keep standard encoding "UTF-8"
463*b1cdbd2cSJim Jagielski# and all strings with "\uUXYZ" do not need to
464*b1cdbd2cSJim Jagielski# be converted from the Java installer.
465*b1cdbd2cSJim Jagielski###################################################
466*b1cdbd2cSJim Jagielski
467*b1cdbd2cSJim Jagielskisub replace_javaencoding_in_string
468*b1cdbd2cSJim Jagielski{
469*b1cdbd2cSJim Jagielski	my ( $string ) = @_;
470*b1cdbd2cSJim Jagielski
471*b1cdbd2cSJim Jagielski	while ( $string =~ /(\\u\w\w\w\w)/ )
472*b1cdbd2cSJim Jagielski	{
473*b1cdbd2cSJim Jagielski		my $oldvalue = $1;
474*b1cdbd2cSJim Jagielski		my $newvalue = "";
475*b1cdbd2cSJim Jagielski		if ( $oldvalue =~ /\\u(\w\w\w\w)/ )
476*b1cdbd2cSJim Jagielski		{
477*b1cdbd2cSJim Jagielski			my $number = $1;
478*b1cdbd2cSJim Jagielski			$newvalue = "&#x" . $number . ";";
479*b1cdbd2cSJim Jagielski		}
480*b1cdbd2cSJim Jagielski
481*b1cdbd2cSJim Jagielski		$string =~ s/\Q$oldvalue\E/$newvalue/;
482*b1cdbd2cSJim Jagielski	}
483*b1cdbd2cSJim Jagielski
484*b1cdbd2cSJim Jagielski	return $string;
485*b1cdbd2cSJim Jagielski}
486*b1cdbd2cSJim Jagielski
487*b1cdbd2cSJim Jagielski###################################################
488*b1cdbd2cSJim Jagielski# Collecting language dependent entries from scp
489*b1cdbd2cSJim Jagielski# (Name and Description)
490*b1cdbd2cSJim Jagielski###################################################
491*b1cdbd2cSJim Jagielski
492*b1cdbd2cSJim Jagielskisub collect_lang_values
493*b1cdbd2cSJim Jagielski{
494*b1cdbd2cSJim Jagielski	my ($indent, $module, $xpdfile, $searchentry, $saveentry) = @_;
495*b1cdbd2cSJim Jagielski
496*b1cdbd2cSJim Jagielski	foreach $key (keys %{$module})
497*b1cdbd2cSJim Jagielski	{
498*b1cdbd2cSJim Jagielski		my $write_line = 0;
499*b1cdbd2cSJim Jagielski		my $javalanguage = "";
500*b1cdbd2cSJim Jagielski
501*b1cdbd2cSJim Jagielski		if ( $key =~ /^\s*\Q$searchentry\E\s+\((\S+)\)\s*$/ )	# this are the language dependent keys
502*b1cdbd2cSJim Jagielski		{
503*b1cdbd2cSJim Jagielski			$language = $1;
504*b1cdbd2cSJim Jagielski			$javalanguage = installer::languages::get_java_language($language);
505*b1cdbd2cSJim Jagielski			$write_line = 1;
506*b1cdbd2cSJim Jagielski		}
507*b1cdbd2cSJim Jagielski		elsif ( $key =~ /^\s*\Q$searchentry\E\s*$/ )	# this are the language independent keys
508*b1cdbd2cSJim Jagielski		{
509*b1cdbd2cSJim Jagielski			$javalanguage = "en_US";
510*b1cdbd2cSJim Jagielski			$write_line = 1;
511*b1cdbd2cSJim Jagielski		}
512*b1cdbd2cSJim Jagielski
513*b1cdbd2cSJim Jagielski		if ( $write_line )
514*b1cdbd2cSJim Jagielski		{
515*b1cdbd2cSJim Jagielski			my $value = $module->{$key};
516*b1cdbd2cSJim Jagielski			$value = replace_brackets_in_string($value);
517*b1cdbd2cSJim Jagielski			$value = replace_javaencoding_in_string($value);
518*b1cdbd2cSJim Jagielski			my $line = $indent . "<" . $saveentry . " lang=" . "\"" . $javalanguage . "\"" . ">" . $value . "<\/" . $saveentry . ">" . "\n";
519*b1cdbd2cSJim Jagielski			push(@{$xpdfile}, $line);
520*b1cdbd2cSJim Jagielski		}
521*b1cdbd2cSJim Jagielski	}
522*b1cdbd2cSJim Jagielski}
523*b1cdbd2cSJim Jagielski
524*b1cdbd2cSJim Jagielski###################################################
525*b1cdbd2cSJim Jagielski# Removing language dependent entries from
526*b1cdbd2cSJim Jagielski# module hash (Name and Description)
527*b1cdbd2cSJim Jagielski###################################################
528*b1cdbd2cSJim Jagielski
529*b1cdbd2cSJim Jagielskisub remove_lang_values
530*b1cdbd2cSJim Jagielski{
531*b1cdbd2cSJim Jagielski	my ($module, $searchentry) = @_;
532*b1cdbd2cSJim Jagielski
533*b1cdbd2cSJim Jagielski	my $key = "";
534*b1cdbd2cSJim Jagielski
535*b1cdbd2cSJim Jagielski	foreach $key (keys %{$module})
536*b1cdbd2cSJim Jagielski	{
537*b1cdbd2cSJim Jagielski		if ( $key =~ /^\s*\Q$searchentry\E\s+\((\S+)\)\s*$/ )	# this are the language dependent keys
538*b1cdbd2cSJim Jagielski		{
539*b1cdbd2cSJim Jagielski			delete($module->{$key});
540*b1cdbd2cSJim Jagielski		}
541*b1cdbd2cSJim Jagielski	}
542*b1cdbd2cSJim Jagielski}
543*b1cdbd2cSJim Jagielski
544*b1cdbd2cSJim Jagielski###################################################
545*b1cdbd2cSJim Jagielski# Setting package install order
546*b1cdbd2cSJim Jagielski###################################################
547*b1cdbd2cSJim Jagielski
548*b1cdbd2cSJim Jagielskisub get_order_value
549*b1cdbd2cSJim Jagielski{
550*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
551*b1cdbd2cSJim Jagielski
552*b1cdbd2cSJim Jagielski	my $value = "1000"; # Setting the default value
553*b1cdbd2cSJim Jagielski
554*b1cdbd2cSJim Jagielski	if ( $module->{'InstallOrder'} ) { $value = $module->{'InstallOrder'}; }
555*b1cdbd2cSJim Jagielski
556*b1cdbd2cSJim Jagielski	return $value;
557*b1cdbd2cSJim Jagielski}
558*b1cdbd2cSJim Jagielski
559*b1cdbd2cSJim Jagielski###################################################
560*b1cdbd2cSJim Jagielski# Checking size of package
561*b1cdbd2cSJim Jagielski###################################################
562*b1cdbd2cSJim Jagielski
563*b1cdbd2cSJim Jagielskisub get_size_value
564*b1cdbd2cSJim Jagielski{
565*b1cdbd2cSJim Jagielski	my ( $packagename, $xpdinfo ) = @_;
566*b1cdbd2cSJim Jagielski
567*b1cdbd2cSJim Jagielski	my $value = "";
568*b1cdbd2cSJim Jagielski
569*b1cdbd2cSJim Jagielski	if ( $xpdinfo->{'FileSize'} )
570*b1cdbd2cSJim Jagielski	{
571*b1cdbd2cSJim Jagielski		$value =  $xpdinfo->{'FileSize'};
572*b1cdbd2cSJim Jagielski		return $value;
573*b1cdbd2cSJim Jagielski	}
574*b1cdbd2cSJim Jagielski
575*b1cdbd2cSJim Jagielski	my $isrpmfile = 0;
576*b1cdbd2cSJim Jagielski	if ( $packagename =~ /\.rpm\s*$/ ) { $isrpmfile = 1; }
577*b1cdbd2cSJim Jagielski
578*b1cdbd2cSJim Jagielski	if (( $installer::globals::islinuxrpmbuild ) && ( $isrpmfile ))
579*b1cdbd2cSJim Jagielski	{
580*b1cdbd2cSJim Jagielski		# if ( ! $installer::globals::rpmquerycommand ) { installer::exiter::exit_program("ERROR: rpm not found for querying packages!", "get_size_value"); }
581*b1cdbd2cSJim Jagielski		if ( ! $installer::globals::rpmquerycommand ) { $installer::globals::rpmquerycommand = "rpm"; }
582*b1cdbd2cSJim Jagielski
583*b1cdbd2cSJim Jagielski		my $systemcall = "$installer::globals::rpmquerycommand -qp --queryformat \"\[\%\{FILESIZES\}\\n\]\" $packagename 2\>\&1 |";
584*b1cdbd2cSJim Jagielski		my $ld_library_backup = $ENV{LD_LIBRARY_PATH};
585*b1cdbd2cSJim Jagielski		if ( defined $ENV{SYSBASE}) {
586*b1cdbd2cSJim Jagielski			my $sysbase = $ENV{SYSBASE};
587*b1cdbd2cSJim Jagielski            if ( !defined ($ld_library_backup) or ("$ld_library_backup" eq "") ) {
588*b1cdbd2cSJim Jagielski				$ld_library_backup = "" if ! defined $ld_library_backup;
589*b1cdbd2cSJim Jagielski				$ENV{LD_LIBRARY_PATH} = "$sysbase/usr/lib";
590*b1cdbd2cSJim Jagielski			} else {
591*b1cdbd2cSJim Jagielski				$ENV{LD_LIBRARY_PATH} = "$ld_library_backup:$sysbase/lib";
592*b1cdbd2cSJim Jagielski			}
593*b1cdbd2cSJim Jagielski		}
594*b1cdbd2cSJim Jagielski		my ($rpmout, $error) = make_systemcall_allowing_error($systemcall, 0, 1);
595*b1cdbd2cSJim Jagielski		$ENV{LD_LIBRARY_PATH} = $ld_library_backup;
596*b1cdbd2cSJim Jagielski		# Evaluating an error, because of rpm problems with removed LD_LIBRARY_PATH
597*b1cdbd2cSJim Jagielski		if ( $error )
598*b1cdbd2cSJim Jagielski		{
599*b1cdbd2cSJim Jagielski            $installer::logger::Info->print("... trying /usr/bin/rpm ...\n");
600*b1cdbd2cSJim Jagielski			my $systemcall = "/usr/bin/rpm -qp --queryformat \"\[\%\{FILESIZES\}\\n\]\" $packagename 2\>\&1 |";
601*b1cdbd2cSJim Jagielski			($rpmout, $error) = make_systemcall_allowing_error($systemcall, 0, 0);
602*b1cdbd2cSJim Jagielski			if ( $error ) { installer::exiter::exit_program("ERROR: rpm failed to query package!", "get_size_value"); }
603*b1cdbd2cSJim Jagielski		}
604*b1cdbd2cSJim Jagielski		$value = do_sum($rpmout);		# adding all filesizes in bytes
605*b1cdbd2cSJim Jagielski		$value = $value/1000;
606*b1cdbd2cSJim Jagielski
607*b1cdbd2cSJim Jagielski		my $ganzzahl = int $value;
608*b1cdbd2cSJim Jagielski		if ($ganzzahl < $value) { $value = $ganzzahl + 1; }
609*b1cdbd2cSJim Jagielski		else { $value = $ganzzahl; }
610*b1cdbd2cSJim Jagielski
611*b1cdbd2cSJim Jagielski		my $rpmname = $packagename;
612*b1cdbd2cSJim Jagielski		installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$rpmname);
613*b1cdbd2cSJim Jagielski		$infoline = "Filesize $rpmname : $value\n";
614*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
615*b1cdbd2cSJim Jagielski	}
616*b1cdbd2cSJim Jagielski
617*b1cdbd2cSJim Jagielski	if ( $installer::globals::issolarispkgbuild )
618*b1cdbd2cSJim Jagielski	{
619*b1cdbd2cSJim Jagielski		my $filename = "pkgmap";
620*b1cdbd2cSJim Jagielski		$filename = $packagename . $installer::globals::separator . $filename;
621*b1cdbd2cSJim Jagielski		$file = installer::files::read_file($filename);
622*b1cdbd2cSJim Jagielski
623*b1cdbd2cSJim Jagielski		for ( my $i = 0; $i <= $#{$file}; $i++ )
624*b1cdbd2cSJim Jagielski		{
625*b1cdbd2cSJim Jagielski			my $line = ${$file}[$i];
626*b1cdbd2cSJim Jagielski			if ( $line =~ /^\s*\:\s+\d+\s+(\d+?)\s+/ )
627*b1cdbd2cSJim Jagielski			{
628*b1cdbd2cSJim Jagielski				$value = $1;
629*b1cdbd2cSJim Jagielski				if ( ! ( $value%2 == 0 )) { $value = $value + 1; }
630*b1cdbd2cSJim Jagielski				$value = $value/2;		# not blocks, but kB
631*b1cdbd2cSJim Jagielski				last;
632*b1cdbd2cSJim Jagielski			}
633*b1cdbd2cSJim Jagielski		}
634*b1cdbd2cSJim Jagielski	}
635*b1cdbd2cSJim Jagielski
636*b1cdbd2cSJim Jagielski	if ( $value eq "" ) { $value = "0"; }
637*b1cdbd2cSJim Jagielski
638*b1cdbd2cSJim Jagielski	return $value;
639*b1cdbd2cSJim Jagielski}
640*b1cdbd2cSJim Jagielski
641*b1cdbd2cSJim Jagielski###################################################
642*b1cdbd2cSJim Jagielski# Checking md5 of package
643*b1cdbd2cSJim Jagielski###################################################
644*b1cdbd2cSJim Jagielski
645*b1cdbd2cSJim Jagielskisub get_md5_value
646*b1cdbd2cSJim Jagielski{
647*b1cdbd2cSJim Jagielski	my ( $packagename, $xpdinfo ) = @_;
648*b1cdbd2cSJim Jagielski
649*b1cdbd2cSJim Jagielski	my $value = "";
650*b1cdbd2cSJim Jagielski
651*b1cdbd2cSJim Jagielski	if ( $xpdinfo->{'md5sum'} )
652*b1cdbd2cSJim Jagielski	{
653*b1cdbd2cSJim Jagielski		$value =  $xpdinfo->{'md5sum'};
654*b1cdbd2cSJim Jagielski		return $value;
655*b1cdbd2cSJim Jagielski	}
656*b1cdbd2cSJim Jagielski
657*b1cdbd2cSJim Jagielski	if ( $installer::globals::islinuxrpmbuild )
658*b1cdbd2cSJim Jagielski	{
659*b1cdbd2cSJim Jagielski		my $md5file = "/usr/bin/md5sum";
660*b1cdbd2cSJim Jagielski
661*b1cdbd2cSJim Jagielski		if ( -x $md5file )
662*b1cdbd2cSJim Jagielski		{
663*b1cdbd2cSJim Jagielski			my $systemcall = "$md5file $packagename 2\>\&1 |";
664*b1cdbd2cSJim Jagielski			my $md5out = make_systemcall($systemcall, 1);
665*b1cdbd2cSJim Jagielski			$value = ${$md5out}[0];
666*b1cdbd2cSJim Jagielski			if ( $value =~ /^\s*(\S+?)\s+.*$/ )
667*b1cdbd2cSJim Jagielski			{
668*b1cdbd2cSJim Jagielski				$value = $1;
669*b1cdbd2cSJim Jagielski			}
670*b1cdbd2cSJim Jagielski
671*b1cdbd2cSJim Jagielski			my $rpmname = $packagename;
672*b1cdbd2cSJim Jagielski			installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$rpmname);
673*b1cdbd2cSJim Jagielski			$infoline = "md5sum of $rpmname : $value\n";
674*b1cdbd2cSJim Jagielski			$installer::logger::Lang->print($infoline);
675*b1cdbd2cSJim Jagielski		}
676*b1cdbd2cSJim Jagielski	}
677*b1cdbd2cSJim Jagielski
678*b1cdbd2cSJim Jagielski	return $value;
679*b1cdbd2cSJim Jagielski}
680*b1cdbd2cSJim Jagielski
681*b1cdbd2cSJim Jagielski###################################################
682*b1cdbd2cSJim Jagielski# Checking name of package
683*b1cdbd2cSJim Jagielski###################################################
684*b1cdbd2cSJim Jagielski
685*b1cdbd2cSJim Jagielskisub get_name_value
686*b1cdbd2cSJim Jagielski{
687*b1cdbd2cSJim Jagielski	my ( $packagename ) = @_;
688*b1cdbd2cSJim Jagielski
689*b1cdbd2cSJim Jagielski	my $value = $packagename;
690*b1cdbd2cSJim Jagielski
691*b1cdbd2cSJim Jagielski	# $packagename contains the complete path to the package
692*b1cdbd2cSJim Jagielski	# Only the name of file or directory is required
693*b1cdbd2cSJim Jagielski
694*b1cdbd2cSJim Jagielski	installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$value);
695*b1cdbd2cSJim Jagielski
696*b1cdbd2cSJim Jagielski	return $value;
697*b1cdbd2cSJim Jagielski}
698*b1cdbd2cSJim Jagielski
699*b1cdbd2cSJim Jagielski###################################################
700*b1cdbd2cSJim Jagielski# Checking full package name (Linux only)
701*b1cdbd2cSJim Jagielski###################################################
702*b1cdbd2cSJim Jagielski
703*b1cdbd2cSJim Jagielskisub get_fullpkgname_value
704*b1cdbd2cSJim Jagielski{
705*b1cdbd2cSJim Jagielski	my ( $packagename, $xpdinfo ) = @_;
706*b1cdbd2cSJim Jagielski
707*b1cdbd2cSJim Jagielski	my $value = "";
708*b1cdbd2cSJim Jagielski	my $isrpmfile = 0;
709*b1cdbd2cSJim Jagielski	if ( $packagename =~ /\.rpm\s*$/ ) { $isrpmfile = 1; }
710*b1cdbd2cSJim Jagielski
711*b1cdbd2cSJim Jagielski	if (( $installer::globals::islinuxrpmbuild ) && ( $isrpmfile ))
712*b1cdbd2cSJim Jagielski	{
713*b1cdbd2cSJim Jagielski		if ( $xpdinfo->{'FullPackageName'} )
714*b1cdbd2cSJim Jagielski		{
715*b1cdbd2cSJim Jagielski			$value =  $xpdinfo->{'FullPackageName'};
716*b1cdbd2cSJim Jagielski			return $value;
717*b1cdbd2cSJim Jagielski		}
718*b1cdbd2cSJim Jagielski
719*b1cdbd2cSJim Jagielski		# if ( ! $installer::globals::rpmquerycommand ) { installer::exiter::exit_program("ERROR: rpm not found for querying packages!", "get_fullpkgname_value"); }
720*b1cdbd2cSJim Jagielski		if ( ! $installer::globals::rpmquerycommand ) { $installer::globals::rpmquerycommand = "rpm"; }
721*b1cdbd2cSJim Jagielski		my $systemcall = "$installer::globals::rpmquerycommand -qp $packagename |";
722*b1cdbd2cSJim Jagielski		my $ld_library_backup = $ENV{LD_LIBRARY_PATH};
723*b1cdbd2cSJim Jagielski		if ( defined $ENV{SYSBASE}) {
724*b1cdbd2cSJim Jagielski			my $sysbase = $ENV{SYSBASE};
725*b1cdbd2cSJim Jagielski    		if ( !defined ($ld_library_backup) or ("$ld_library_backup" eq "") ) {
726*b1cdbd2cSJim Jagielski				$ld_library_backup = "" if ! defined $ld_library_backup;
727*b1cdbd2cSJim Jagielski				$ENV{LD_LIBRARY_PATH} = "$sysbase/usr/lib";
728*b1cdbd2cSJim Jagielski			} else {
729*b1cdbd2cSJim Jagielski				$ENV{LD_LIBRARY_PATH} = "$ld_library_backup:$sysbase/lib";
730*b1cdbd2cSJim Jagielski			}
731*b1cdbd2cSJim Jagielski		}
732*b1cdbd2cSJim Jagielski		my ($returnarray, $error) = make_systemcall_allowing_error($systemcall, 0, 1);
733*b1cdbd2cSJim Jagielski		$ENV{LD_LIBRARY_PATH} = $ld_library_backup;
734*b1cdbd2cSJim Jagielski		# Evaluating an error, because of rpm problems with removed LD_LIBRARY_PATH
735*b1cdbd2cSJim Jagielski		if ( $error )
736*b1cdbd2cSJim Jagielski		{
737*b1cdbd2cSJim Jagielski            $installer::logger::Info->print("... trying /usr/bin/rpm ...\n");
738*b1cdbd2cSJim Jagielski			my $systemcall = "/usr/bin/rpm -qp $packagename |";
739*b1cdbd2cSJim Jagielski			($returnarray, $error) = make_systemcall_allowing_error($systemcall, 0, 0);
740*b1cdbd2cSJim Jagielski			if ( $error ) { installer::exiter::exit_program("ERROR: rpm failed to query package!", "get_fullpkgname_value"); }
741*b1cdbd2cSJim Jagielski		}
742*b1cdbd2cSJim Jagielski		$value = ${$returnarray}[0];
743*b1cdbd2cSJim Jagielski		installer::remover::remove_leading_and_ending_whitespaces(\$value);
744*b1cdbd2cSJim Jagielski
745*b1cdbd2cSJim Jagielski		my $rpmname = $packagename;
746*b1cdbd2cSJim Jagielski		installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$rpmname);
747*b1cdbd2cSJim Jagielski
748*b1cdbd2cSJim Jagielski		$infoline = "Full package name from $rpmname: $value\n";
749*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
750*b1cdbd2cSJim Jagielski	}
751*b1cdbd2cSJim Jagielski
752*b1cdbd2cSJim Jagielski	return $value;
753*b1cdbd2cSJim Jagielski}
754*b1cdbd2cSJim Jagielski
755*b1cdbd2cSJim Jagielski###################################################
756*b1cdbd2cSJim Jagielski# Checking package version (Solaris only)
757*b1cdbd2cSJim Jagielski###################################################
758*b1cdbd2cSJim Jagielski
759*b1cdbd2cSJim Jagielskisub get_pkgversion_value
760*b1cdbd2cSJim Jagielski{
761*b1cdbd2cSJim Jagielski	my ( $completepackagename, $xpdinfo ) = @_;
762*b1cdbd2cSJim Jagielski
763*b1cdbd2cSJim Jagielski	my $value = "";
764*b1cdbd2cSJim Jagielski
765*b1cdbd2cSJim Jagielski	if ( $xpdinfo->{'PkgVersion'} )
766*b1cdbd2cSJim Jagielski	{
767*b1cdbd2cSJim Jagielski		$value =  $xpdinfo->{'PkgVersion'};
768*b1cdbd2cSJim Jagielski		return $value;
769*b1cdbd2cSJim Jagielski	}
770*b1cdbd2cSJim Jagielski
771*b1cdbd2cSJim Jagielski	if ( $installer::globals::issolarispkgbuild )
772*b1cdbd2cSJim Jagielski	{
773*b1cdbd2cSJim Jagielski		my $pkgfile = "pkgparam";
774*b1cdbd2cSJim Jagielski		my $packagepath = $completepackagename;
775*b1cdbd2cSJim Jagielski		installer::pathanalyzer::get_path_from_fullqualifiedname(\$packagepath);
776*b1cdbd2cSJim Jagielski
777*b1cdbd2cSJim Jagielski		my $packagename = $completepackagename;
778*b1cdbd2cSJim Jagielski		installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$packagename);
779*b1cdbd2cSJim Jagielski
780*b1cdbd2cSJim Jagielski		my $systemcall = "$pkgfile -d $packagepath $packagename param VERSION 2\>\&1 |";
781*b1cdbd2cSJim Jagielski		my $returnarray = make_systemcall($systemcall, 0);
782*b1cdbd2cSJim Jagielski
783*b1cdbd2cSJim Jagielski		$value = ${$returnarray}[0];
784*b1cdbd2cSJim Jagielski		installer::remover::remove_leading_and_ending_whitespaces(\$value);
785*b1cdbd2cSJim Jagielski	}
786*b1cdbd2cSJim Jagielski
787*b1cdbd2cSJim Jagielski	return $value;
788*b1cdbd2cSJim Jagielski}
789*b1cdbd2cSJim Jagielski
790*b1cdbd2cSJim Jagielski###################################################
791*b1cdbd2cSJim Jagielski# Writing subdirectory into xpd file
792*b1cdbd2cSJim Jagielski###################################################
793*b1cdbd2cSJim Jagielski
794*b1cdbd2cSJim Jagielskisub get_subdir_value
795*b1cdbd2cSJim Jagielski{
796*b1cdbd2cSJim Jagielski	my ( $packagename, $subdir, $module ) = @_;
797*b1cdbd2cSJim Jagielski
798*b1cdbd2cSJim Jagielski	my $value = "";
799*b1cdbd2cSJim Jagielski
800*b1cdbd2cSJim Jagielski	if ( $subdir ) { $value = $subdir; }
801*b1cdbd2cSJim Jagielski
802*b1cdbd2cSJim Jagielski	if ( $module->{'Subdir'} ) { $value = $module->{'Subdir'}; }
803*b1cdbd2cSJim Jagielski
804*b1cdbd2cSJim Jagielski	return $value;
805*b1cdbd2cSJim Jagielski}
806*b1cdbd2cSJim Jagielski
807*b1cdbd2cSJim Jagielski###################################################
808*b1cdbd2cSJim Jagielski# Checking if package is relocatable
809*b1cdbd2cSJim Jagielski###################################################
810*b1cdbd2cSJim Jagielski
811*b1cdbd2cSJim Jagielskisub get_relocatable_value
812*b1cdbd2cSJim Jagielski{
813*b1cdbd2cSJim Jagielski	my ( $module ) = @_;
814*b1cdbd2cSJim Jagielski
815*b1cdbd2cSJim Jagielski	my $value = "true";
816*b1cdbd2cSJim Jagielski
817*b1cdbd2cSJim Jagielski	my $styles = "";
818*b1cdbd2cSJim Jagielski	if ( $module->{'Styles'} ) { $styles = $module->{'Styles'}; }
819*b1cdbd2cSJim Jagielski	if ( $styles =~ /\bNOTRELOCATABLE\b/ ) { $value = "false"; }
820*b1cdbd2cSJim Jagielski
821*b1cdbd2cSJim Jagielski	return $value;
822*b1cdbd2cSJim Jagielski}
823*b1cdbd2cSJim Jagielski
824*b1cdbd2cSJim Jagielski###################################################
825*b1cdbd2cSJim Jagielski# Checking if package is relocatable
826*b1cdbd2cSJim Jagielski###################################################
827*b1cdbd2cSJim Jagielski
828*b1cdbd2cSJim Jagielskisub get_languagespecific_value
829*b1cdbd2cSJim Jagielski{
830*b1cdbd2cSJim Jagielski	my ( $islanguagemodule ) = @_;
831*b1cdbd2cSJim Jagielski
832*b1cdbd2cSJim Jagielski	my $value = "false";
833*b1cdbd2cSJim Jagielski
834*b1cdbd2cSJim Jagielski	if ( defined $islanguagemodule && $islanguagemodule == 1 ) { $value = "true"; }
835*b1cdbd2cSJim Jagielski
836*b1cdbd2cSJim Jagielski	return $value;
837*b1cdbd2cSJim Jagielski}
838*b1cdbd2cSJim Jagielski
839*b1cdbd2cSJim Jagielski#######################################################
840*b1cdbd2cSJim Jagielski# Adding the values of the array
841*b1cdbd2cSJim Jagielski#######################################################
842*b1cdbd2cSJim Jagielski
843*b1cdbd2cSJim Jagielskisub do_sum
844*b1cdbd2cSJim Jagielski{
845*b1cdbd2cSJim Jagielski	my ( $allnumbers ) = @_;
846*b1cdbd2cSJim Jagielski
847*b1cdbd2cSJim Jagielski	my $sum = 0;
848*b1cdbd2cSJim Jagielski
849*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$allnumbers}; $i++ )
850*b1cdbd2cSJim Jagielski	{
851*b1cdbd2cSJim Jagielski		$sum = $sum + ${$allnumbers}[$i];
852*b1cdbd2cSJim Jagielski	}
853*b1cdbd2cSJim Jagielski
854*b1cdbd2cSJim Jagielski	return $sum;
855*b1cdbd2cSJim Jagielski}
856*b1cdbd2cSJim Jagielski
857*b1cdbd2cSJim Jagielski#######################################################
858*b1cdbd2cSJim Jagielski# Executing one system call
859*b1cdbd2cSJim Jagielski#######################################################
860*b1cdbd2cSJim Jagielski
861*b1cdbd2cSJim Jagielskisub make_systemcall
862*b1cdbd2cSJim Jagielski{
863*b1cdbd2cSJim Jagielski	my ( $systemcall, $logreturn ) = @_;
864*b1cdbd2cSJim Jagielski
865*b1cdbd2cSJim Jagielski	my @returns = ();
866*b1cdbd2cSJim Jagielski
867*b1cdbd2cSJim Jagielski    $installer::logger::Info->printf("... %s ...\n", $systemcall);
868*b1cdbd2cSJim Jagielski
869*b1cdbd2cSJim Jagielski	open (REG, "$systemcall");
870*b1cdbd2cSJim Jagielski	while (<REG>) {push(@returns, $_); }
871*b1cdbd2cSJim Jagielski	close (REG);
872*b1cdbd2cSJim Jagielski
873*b1cdbd2cSJim Jagielski	my $returnvalue = $?;	# $? contains the return value of the systemcall
874*b1cdbd2cSJim Jagielski
875*b1cdbd2cSJim Jagielski	my $infoline = "Systemcall: $systemcall\n";
876*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
877*b1cdbd2cSJim Jagielski
878*b1cdbd2cSJim Jagielski	if ( $logreturn )
879*b1cdbd2cSJim Jagielski	{
880*b1cdbd2cSJim Jagielski		foreach my $line (@returns)
881*b1cdbd2cSJim Jagielski        {
882*b1cdbd2cSJim Jagielski            $installer::logger::Lang->print($line);
883*b1cdbd2cSJim Jagielski        }
884*b1cdbd2cSJim Jagielski	}
885*b1cdbd2cSJim Jagielski
886*b1cdbd2cSJim Jagielski	if ($returnvalue)
887*b1cdbd2cSJim Jagielski	{
888*b1cdbd2cSJim Jagielski		$infoline = "ERROR: $systemcall\n";
889*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
890*b1cdbd2cSJim Jagielski		$error_occured = 1;
891*b1cdbd2cSJim Jagielski	}
892*b1cdbd2cSJim Jagielski	else
893*b1cdbd2cSJim Jagielski	{
894*b1cdbd2cSJim Jagielski		$infoline = "SUCCESS: $systemcall\n";
895*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
896*b1cdbd2cSJim Jagielski	}
897*b1cdbd2cSJim Jagielski
898*b1cdbd2cSJim Jagielski	return \@returns;
899*b1cdbd2cSJim Jagielski}
900*b1cdbd2cSJim Jagielski
901*b1cdbd2cSJim Jagielski#######################################################
902*b1cdbd2cSJim Jagielski# Executing one system call
903*b1cdbd2cSJim Jagielski#######################################################
904*b1cdbd2cSJim Jagielski
905*b1cdbd2cSJim Jagielskisub make_systemcall_allowing_error
906*b1cdbd2cSJim Jagielski{
907*b1cdbd2cSJim Jagielski	my ( $systemcall, $logreturn, $can_fail ) = @_;
908*b1cdbd2cSJim Jagielski
909*b1cdbd2cSJim Jagielski	my @returns = ();
910*b1cdbd2cSJim Jagielski
911*b1cdbd2cSJim Jagielski    $installer::logger::Info->printf("... %s ...\n", $systemcall);
912*b1cdbd2cSJim Jagielski
913*b1cdbd2cSJim Jagielski	open (REG, "$systemcall");
914*b1cdbd2cSJim Jagielski	while (<REG>) {push(@returns, $_); }
915*b1cdbd2cSJim Jagielski	close (REG);
916*b1cdbd2cSJim Jagielski
917*b1cdbd2cSJim Jagielski	my $returnvalue = $?;	# $? contains the return value of the systemcall
918*b1cdbd2cSJim Jagielski
919*b1cdbd2cSJim Jagielski	my $infoline = "Systemcall: $systemcall\n";
920*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
921*b1cdbd2cSJim Jagielski
922*b1cdbd2cSJim Jagielski	if ( $logreturn )
923*b1cdbd2cSJim Jagielski	{
924*b1cdbd2cSJim Jagielski		foreach my $line (@returns)
925*b1cdbd2cSJim Jagielski        {
926*b1cdbd2cSJim Jagielski            $installer::logger::Lang->print($line);
927*b1cdbd2cSJim Jagielski        }
928*b1cdbd2cSJim Jagielski	}
929*b1cdbd2cSJim Jagielski
930*b1cdbd2cSJim Jagielski	if ($returnvalue)
931*b1cdbd2cSJim Jagielski	{
932*b1cdbd2cSJim Jagielski		if ( $can_fail )
933*b1cdbd2cSJim Jagielski		{
934*b1cdbd2cSJim Jagielski			$infoline = "WARNING: Failed system call:  $systemcall\n";
935*b1cdbd2cSJim Jagielski			$installer::logger::Lang->print($infoline);
936*b1cdbd2cSJim Jagielski			$error_occured = 1;
937*b1cdbd2cSJim Jagielski		}
938*b1cdbd2cSJim Jagielski		else
939*b1cdbd2cSJim Jagielski		{
940*b1cdbd2cSJim Jagielski			$infoline = "ERROR: $systemcall\n";
941*b1cdbd2cSJim Jagielski			$installer::logger::Lang->print($infoline);
942*b1cdbd2cSJim Jagielski			$error_occured = 1;
943*b1cdbd2cSJim Jagielski		}
944*b1cdbd2cSJim Jagielski	}
945*b1cdbd2cSJim Jagielski	else
946*b1cdbd2cSJim Jagielski	{
947*b1cdbd2cSJim Jagielski		$infoline = "SUCCESS: $systemcall\n";
948*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
949*b1cdbd2cSJim Jagielski	}
950*b1cdbd2cSJim Jagielski
951*b1cdbd2cSJim Jagielski	return (\@returns, $returnvalue);
952*b1cdbd2cSJim Jagielski}
953*b1cdbd2cSJim Jagielski
954*b1cdbd2cSJim Jagielski###################################################
955*b1cdbd2cSJim Jagielski# Setting product name tag
956*b1cdbd2cSJim Jagielski###################################################
957*b1cdbd2cSJim Jagielski
958*b1cdbd2cSJim Jagielskisub get_product_tag
959*b1cdbd2cSJim Jagielski{
960*b1cdbd2cSJim Jagielski	my ($allvariables, $indent) = @_;
961*b1cdbd2cSJim Jagielski
962*b1cdbd2cSJim Jagielski	my $productname = $allvariables->{'LCONEWORDPRODUCTNAME'};
963*b1cdbd2cSJim Jagielski	my $tag = $indent . "<product " . "name=" . "\"" . $productname . "\">" . "\n";
964*b1cdbd2cSJim Jagielski
965*b1cdbd2cSJim Jagielski	return $tag;
966*b1cdbd2cSJim Jagielski}
967*b1cdbd2cSJim Jagielski
968*b1cdbd2cSJim Jagielski###################################################
969*b1cdbd2cSJim Jagielski# Macro tags
970*b1cdbd2cSJim Jagielski###################################################
971*b1cdbd2cSJim Jagielski
972*b1cdbd2cSJim Jagielskisub set_macro_tag
973*b1cdbd2cSJim Jagielski{
974*b1cdbd2cSJim Jagielski	my ($allvariables, $indent, $key) = @_;
975*b1cdbd2cSJim Jagielski
976*b1cdbd2cSJim Jagielski	my $property = "";
977*b1cdbd2cSJim Jagielski	my $value = "";
978*b1cdbd2cSJim Jagielski
979*b1cdbd2cSJim Jagielski	if ( $key eq "product_name" ) { $property = "PRODUCTNAME"; }
980*b1cdbd2cSJim Jagielski	elsif ( $key eq "product_version" ) { $property = "PRODUCTVERSION"; }
981*b1cdbd2cSJim Jagielski	elsif ( $key eq "product_suffix" ) { $property = "PRODUCTEXTENSION"; }
982*b1cdbd2cSJim Jagielski	elsif ( $key eq "product_fullname" ) { $property = "FULLPRODUCTNAME"; }
983*b1cdbd2cSJim Jagielski
984*b1cdbd2cSJim Jagielski	if (( $property eq "PRODUCTNAME" ) || ( $property eq "PRODUCTVERSION" ) || ( $property eq "PRODUCTEXTENSION" ))
985*b1cdbd2cSJim Jagielski	{
986*b1cdbd2cSJim Jagielski		$value = $allvariables->{$property};
987*b1cdbd2cSJim Jagielski	}
988*b1cdbd2cSJim Jagielski
989*b1cdbd2cSJim Jagielski	if ( $property eq "FULLPRODUCTNAME" )
990*b1cdbd2cSJim Jagielski	{
991*b1cdbd2cSJim Jagielski		$value = $allvariables->{"PRODUCTNAME"} . " " . $allvariables->{"PRODUCTVERSION"};
992*b1cdbd2cSJim Jagielski		if ( $allvariables->{"PRODUCTEXTENSION"} ) { $value = $value . " " . $allvariables->{"PRODUCTEXTENSION"}; }
993*b1cdbd2cSJim Jagielski	}
994*b1cdbd2cSJim Jagielski
995*b1cdbd2cSJim Jagielski	my $tag = $indent . "<macro " . "key=" . "\"" . $key . "\">" . $value . "\<\/macro\>" . "\n";
996*b1cdbd2cSJim Jagielski
997*b1cdbd2cSJim Jagielski	return $tag;
998*b1cdbd2cSJim Jagielski
999*b1cdbd2cSJim Jagielski}
1000*b1cdbd2cSJim Jagielski
1001*b1cdbd2cSJim Jagielski###################################################
1002*b1cdbd2cSJim Jagielski# Setting the minor of the product version
1003*b1cdbd2cSJim Jagielski# Required to check for Major Upgrades.
1004*b1cdbd2cSJim Jagielski###################################################
1005*b1cdbd2cSJim Jagielski
1006*b1cdbd2cSJim Jagielskisub set_minor_tag
1007*b1cdbd2cSJim Jagielski{
1008*b1cdbd2cSJim Jagielski	my ($allvariables, $indent) = @_;
1009*b1cdbd2cSJim Jagielski
1010*b1cdbd2cSJim Jagielski	my $productminor = 0;
1011*b1cdbd2cSJim Jagielski	if ( $allvariables->{"PACKAGEVERSION"} )
1012*b1cdbd2cSJim Jagielski	{
1013*b1cdbd2cSJim Jagielski		if ( $allvariables->{"PACKAGEVERSION"} =~ /^\s*\d+\.(\d+)/ ) { $productminor = $1; }
1014*b1cdbd2cSJim Jagielski	}
1015*b1cdbd2cSJim Jagielski	my $tag = $indent . "<productminor>" . $productminor . "</productminor>" . "\n";
1016*b1cdbd2cSJim Jagielski
1017*b1cdbd2cSJim Jagielski	return $tag;
1018*b1cdbd2cSJim Jagielski}
1019*b1cdbd2cSJim Jagielski
1020*b1cdbd2cSJim Jagielski###################################################
1021*b1cdbd2cSJim Jagielski# Setting the update behaviour
1022*b1cdbd2cSJim Jagielski###################################################
1023*b1cdbd2cSJim Jagielski
1024*b1cdbd2cSJim Jagielskisub set_update_tag
1025*b1cdbd2cSJim Jagielski{
1026*b1cdbd2cSJim Jagielski	my ($allvariables, $indent) = @_;
1027*b1cdbd2cSJim Jagielski
1028*b1cdbd2cSJim Jagielski	my $updateflag = "false";
1029*b1cdbd2cSJim Jagielski	if ( $allvariables->{"DONTUPDATE"} ) { $updateflag = "true"; }
1030*b1cdbd2cSJim Jagielski	my $tag = $indent . "<dontupdate>" . $updateflag . "</dontupdate>" . "\n";
1031*b1cdbd2cSJim Jagielski
1032*b1cdbd2cSJim Jagielski	return $tag;
1033*b1cdbd2cSJim Jagielski}
1034*b1cdbd2cSJim Jagielski
1035*b1cdbd2cSJim Jagielski###################################################
1036*b1cdbd2cSJim Jagielski# Setting the license dialog behaviour
1037*b1cdbd2cSJim Jagielski###################################################
1038*b1cdbd2cSJim Jagielski
1039*b1cdbd2cSJim Jagielskisub set_hideeula_tag
1040*b1cdbd2cSJim Jagielski{
1041*b1cdbd2cSJim Jagielski	my ($allvariables, $indent) = @_;
1042*b1cdbd2cSJim Jagielski
1043*b1cdbd2cSJim Jagielski	my $hidelicenseflag = "false";
1044*b1cdbd2cSJim Jagielski	if ( $allvariables->{"HIDELICENSEDIALOG"} ) { $hidelicenseflag = "true"; }
1045*b1cdbd2cSJim Jagielski	my $tag = $indent . "<hideeula>" . $hidelicenseflag . "</hideeula>" . "\n";
1046*b1cdbd2cSJim Jagielski
1047*b1cdbd2cSJim Jagielski	return $tag;
1048*b1cdbd2cSJim Jagielski}
1049*b1cdbd2cSJim Jagielski
1050*b1cdbd2cSJim Jagielski###################################################
1051*b1cdbd2cSJim Jagielski# Setting default directory
1052*b1cdbd2cSJim Jagielski###################################################
1053*b1cdbd2cSJim Jagielski
1054*b1cdbd2cSJim Jagielskisub set_defaultdir_tag
1055*b1cdbd2cSJim Jagielski{
1056*b1cdbd2cSJim Jagielski	my ($allvariables, $indent) = @_;
1057*b1cdbd2cSJim Jagielski
1058*b1cdbd2cSJim Jagielski	my $defaultdir = "";
1059*b1cdbd2cSJim Jagielski	if ( $allvariables->{"DEFAULTDESTPATH"} ) { $defaultdir = $allvariables->{"DEFAULTDESTPATH"}; }
1060*b1cdbd2cSJim Jagielski	my $tag = $indent . "<defaultdir>" . $defaultdir . "</defaultdir>" . "\n";
1061*b1cdbd2cSJim Jagielski
1062*b1cdbd2cSJim Jagielski	return $tag;
1063*b1cdbd2cSJim Jagielski}
1064*b1cdbd2cSJim Jagielski
1065*b1cdbd2cSJim Jagielski###################################################
1066*b1cdbd2cSJim Jagielski# Setting product directory
1067*b1cdbd2cSJim Jagielski###################################################
1068*b1cdbd2cSJim Jagielski
1069*b1cdbd2cSJim Jagielskisub set_productdir_tag
1070*b1cdbd2cSJim Jagielski{
1071*b1cdbd2cSJim Jagielski	my ($allvariables, $indent) = @_;
1072*b1cdbd2cSJim Jagielski
1073*b1cdbd2cSJim Jagielski	my $productdir = "";
1074*b1cdbd2cSJim Jagielski	if ( $allvariables->{"UNIXPRODUCTNAME"} )
1075*b1cdbd2cSJim Jagielski	{
1076*b1cdbd2cSJim Jagielski		$productdir = $allvariables->{"UNIXPRODUCTNAME"};
1077*b1cdbd2cSJim Jagielski
1078*b1cdbd2cSJim Jagielski		if ( $allvariables->{"BRANDPACKAGEVERSION"} )
1079*b1cdbd2cSJim Jagielski		{
1080*b1cdbd2cSJim Jagielski			$productdir = $productdir . $allvariables->{"BRANDPACKAGEVERSION"};
1081*b1cdbd2cSJim Jagielski#			if ( $allvariables->{"LCPRODUCTEXTENSION"} ) { $productdir = $productdir . $allvariables->{"LCPRODUCTEXTENSION"}; }
1082*b1cdbd2cSJim Jagielski		}
1083*b1cdbd2cSJim Jagielski		else
1084*b1cdbd2cSJim Jagielski		{
1085*b1cdbd2cSJim Jagielski			if ( $allvariables->{"PRODUCTVERSION"} )
1086*b1cdbd2cSJim Jagielski			{
1087*b1cdbd2cSJim Jagielski				$productdir = $productdir . $allvariables->{"PRODUCTVERSION"};
1088*b1cdbd2cSJim Jagielski			}
1089*b1cdbd2cSJim Jagielski		}
1090*b1cdbd2cSJim Jagielski	}
1091*b1cdbd2cSJim Jagielski	my $tag = $indent . "<productdir>" . $productdir . "</productdir>" . "\n";
1092*b1cdbd2cSJim Jagielski
1093*b1cdbd2cSJim Jagielski	return $tag;
1094*b1cdbd2cSJim Jagielski}
1095*b1cdbd2cSJim Jagielski
1096*b1cdbd2cSJim Jagielski#####################################################
1097*b1cdbd2cSJim Jagielski# Setting the package directory in installation set
1098*b1cdbd2cSJim Jagielski#####################################################
1099*b1cdbd2cSJim Jagielski
1100*b1cdbd2cSJim Jagielskisub set_packagedir_tag
1101*b1cdbd2cSJim Jagielski{
1102*b1cdbd2cSJim Jagielski	my ($indent) = @_;
1103*b1cdbd2cSJim Jagielski
1104*b1cdbd2cSJim Jagielski	my $tag = $indent . "<packagedirectory>" . $installer::globals::epmoutpath . "</packagedirectory>" . "\n";
1105*b1cdbd2cSJim Jagielski
1106*b1cdbd2cSJim Jagielski	return $tag;
1107*b1cdbd2cSJim Jagielski}
1108*b1cdbd2cSJim Jagielski
1109*b1cdbd2cSJim Jagielski###################################################
1110*b1cdbd2cSJim Jagielski# Setting the packagetype of installation set
1111*b1cdbd2cSJim Jagielski###################################################
1112*b1cdbd2cSJim Jagielski
1113*b1cdbd2cSJim Jagielskisub set_packagetype_tag
1114*b1cdbd2cSJim Jagielski{
1115*b1cdbd2cSJim Jagielski	my ($indent) = @_;
1116*b1cdbd2cSJim Jagielski
1117*b1cdbd2cSJim Jagielski	my $tag = $indent . "<packageformat>" . $installer::globals::packageformat . "</packageformat>" . "\n";
1118*b1cdbd2cSJim Jagielski
1119*b1cdbd2cSJim Jagielski	return $tag;
1120*b1cdbd2cSJim Jagielski}
1121*b1cdbd2cSJim Jagielski
1122*b1cdbd2cSJim Jagielski###################################################
1123*b1cdbd2cSJim Jagielski# Setting the architecture of installation set
1124*b1cdbd2cSJim Jagielski###################################################
1125*b1cdbd2cSJim Jagielski
1126*b1cdbd2cSJim Jagielskisub set_architecture_tag
1127*b1cdbd2cSJim Jagielski{
1128*b1cdbd2cSJim Jagielski	my ($indent) = @_;
1129*b1cdbd2cSJim Jagielski
1130*b1cdbd2cSJim Jagielski	my $architecture = "";
1131*b1cdbd2cSJim Jagielski	if ( $installer::globals::issolarissparcbuild ) { $architecture = "sparc"; }
1132*b1cdbd2cSJim Jagielski	if ( $installer::globals::issolarisx86build ) { $architecture = "i386"; }
1133*b1cdbd2cSJim Jagielski
1134*b1cdbd2cSJim Jagielski	my $tag = $indent . "<architecture>" . $architecture . "</architecture>" . "\n";
1135*b1cdbd2cSJim Jagielski
1136*b1cdbd2cSJim Jagielski	return $tag;
1137*b1cdbd2cSJim Jagielski}
1138*b1cdbd2cSJim Jagielski
1139*b1cdbd2cSJim Jagielski###################################################
1140*b1cdbd2cSJim Jagielski# Setting the multi language tag
1141*b1cdbd2cSJim Jagielski###################################################
1142*b1cdbd2cSJim Jagielski
1143*b1cdbd2cSJim Jagielskisub set_multilanguage_tag
1144*b1cdbd2cSJim Jagielski{
1145*b1cdbd2cSJim Jagielski	my ($indent) = @_;
1146*b1cdbd2cSJim Jagielski
1147*b1cdbd2cSJim Jagielski	my $value = "false";
1148*b1cdbd2cSJim Jagielski	if ( $installer::globals::ismultilingual == 1 ) { $value = "true"; }
1149*b1cdbd2cSJim Jagielski
1150*b1cdbd2cSJim Jagielski	my $tag = $indent . "<multilingual>" . $value . "</multilingual>" . "\n";
1151*b1cdbd2cSJim Jagielski
1152*b1cdbd2cSJim Jagielski	return $tag;
1153*b1cdbd2cSJim Jagielski}
1154*b1cdbd2cSJim Jagielski
1155*b1cdbd2cSJim Jagielski###################################################
1156*b1cdbd2cSJim Jagielski# Setting the language tag
1157*b1cdbd2cSJim Jagielski###################################################
1158*b1cdbd2cSJim Jagielski
1159*b1cdbd2cSJim Jagielskisub set_language_tag
1160*b1cdbd2cSJim Jagielski{
1161*b1cdbd2cSJim Jagielski	my ($languagestringref, $indent) = @_;
1162*b1cdbd2cSJim Jagielski
1163*b1cdbd2cSJim Jagielski	my $tag = $indent . "<languages>" . $$languagestringref . "</languages>" . "\n";
1164*b1cdbd2cSJim Jagielski
1165*b1cdbd2cSJim Jagielski	return $tag;
1166*b1cdbd2cSJim Jagielski}
1167*b1cdbd2cSJim Jagielski
1168*b1cdbd2cSJim Jagielski###################################################
1169*b1cdbd2cSJim Jagielski# Collecting content for product xpd file
1170*b1cdbd2cSJim Jagielski###################################################
1171*b1cdbd2cSJim Jagielski
1172*b1cdbd2cSJim Jagielski# <?xml version='1.0' encoding='utf-8'?>
1173*b1cdbd2cSJim Jagielski#
1174*b1cdbd2cSJim Jagielski# <!-- General application description -->
1175*b1cdbd2cSJim Jagielski#
1176*b1cdbd2cSJim Jagielski# <product name="openoffice">
1177*b1cdbd2cSJim Jagielski#     <macro key="product_name">Sun OpenOffice.org</macro>
1178*b1cdbd2cSJim Jagielski#     <macro key="product_version">1.0</macro>
1179*b1cdbd2cSJim Jagielski#     <macro key="product_suffix">Mephisto</macro>
1180*b1cdbd2cSJim Jagielski#     <macro key="product_fullname">Sun OpenOffice.org 1.0 Mephisto</macro>
1181*b1cdbd2cSJim Jagielski#     <defaultdir>/opt/Sun/OpenOffice.org-Mephisto</defaultdir>
1182*b1cdbd2cSJim Jagielski# </product>
1183*b1cdbd2cSJim Jagielski
1184*b1cdbd2cSJim Jagielskisub get_setup_file_content
1185*b1cdbd2cSJim Jagielski{
1186*b1cdbd2cSJim Jagielski	my ($allvariables, $languagestringref) = @_;
1187*b1cdbd2cSJim Jagielski
1188*b1cdbd2cSJim Jagielski	my @xpdfile = ();
1189*b1cdbd2cSJim Jagielski	my $noindent = "";
1190*b1cdbd2cSJim Jagielski	my $singleindent = "    ";
1191*b1cdbd2cSJim Jagielski
1192*b1cdbd2cSJim Jagielski	my $line = "<?xml version='1.0' encoding='utf-8'?>\n\n";
1193*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1194*b1cdbd2cSJim Jagielski	$line = "<!-- General application description -->\n\n";
1195*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1196*b1cdbd2cSJim Jagielski
1197*b1cdbd2cSJim Jagielski	my $tag = get_product_tag($allvariables, $noindent);
1198*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1199*b1cdbd2cSJim Jagielski
1200*b1cdbd2cSJim Jagielski	$tag = set_macro_tag($allvariables, $singleindent, "product_name");
1201*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1202*b1cdbd2cSJim Jagielski	$tag = set_macro_tag($allvariables, $singleindent, "product_version");
1203*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1204*b1cdbd2cSJim Jagielski	$tag = set_macro_tag($allvariables, $singleindent, "product_suffix");
1205*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1206*b1cdbd2cSJim Jagielski	$tag = set_macro_tag($allvariables, $singleindent, "product_fullname");
1207*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1208*b1cdbd2cSJim Jagielski
1209*b1cdbd2cSJim Jagielski	$tag = set_defaultdir_tag($allvariables, $singleindent);
1210*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1211*b1cdbd2cSJim Jagielski
1212*b1cdbd2cSJim Jagielski	$tag = set_productdir_tag($allvariables, $singleindent);
1213*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1214*b1cdbd2cSJim Jagielski
1215*b1cdbd2cSJim Jagielski	$tag = set_minor_tag($allvariables, $singleindent);
1216*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1217*b1cdbd2cSJim Jagielski
1218*b1cdbd2cSJim Jagielski	$tag = set_update_tag($allvariables, $singleindent);
1219*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1220*b1cdbd2cSJim Jagielski
1221*b1cdbd2cSJim Jagielski	$tag = set_packagedir_tag($singleindent);
1222*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1223*b1cdbd2cSJim Jagielski
1224*b1cdbd2cSJim Jagielski	$tag = set_packagetype_tag($singleindent);
1225*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1226*b1cdbd2cSJim Jagielski
1227*b1cdbd2cSJim Jagielski	$tag = set_architecture_tag($singleindent);
1228*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1229*b1cdbd2cSJim Jagielski
1230*b1cdbd2cSJim Jagielski	$tag = set_multilanguage_tag($singleindent);
1231*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1232*b1cdbd2cSJim Jagielski
1233*b1cdbd2cSJim Jagielski	$tag = set_language_tag($languagestringref, $singleindent);
1234*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1235*b1cdbd2cSJim Jagielski
1236*b1cdbd2cSJim Jagielski	$tag = set_hideeula_tag($allvariables, $singleindent);
1237*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1238*b1cdbd2cSJim Jagielski
1239*b1cdbd2cSJim Jagielski	$tag = get_end_tag("product", $noindent);
1240*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1241*b1cdbd2cSJim Jagielski
1242*b1cdbd2cSJim Jagielski	return \@xpdfile;
1243*b1cdbd2cSJim Jagielski}
1244*b1cdbd2cSJim Jagielski
1245*b1cdbd2cSJim Jagielski###################################################
1246*b1cdbd2cSJim Jagielski# Collecting content for xpd file
1247*b1cdbd2cSJim Jagielski###################################################
1248*b1cdbd2cSJim Jagielski
1249*b1cdbd2cSJim Jagielskisub get_file_content
1250*b1cdbd2cSJim Jagielski{
1251*b1cdbd2cSJim Jagielski	my ( $module, $packagename, $solslanguage, $linkpackage, $isemptyparent, $subdir, $islanguagemodule, $onelanguage, $xpdinfo ) = @_;
1252*b1cdbd2cSJim Jagielski
1253*b1cdbd2cSJim Jagielski	my @xpdfile = ();
1254*b1cdbd2cSJim Jagielski	my $value = "";
1255*b1cdbd2cSJim Jagielski	my $line = "";
1256*b1cdbd2cSJim Jagielski	my $noindent = "";
1257*b1cdbd2cSJim Jagielski	my $singleindent = "    ";
1258*b1cdbd2cSJim Jagielski	my $doubleindent = $singleindent . $singleindent;
1259*b1cdbd2cSJim Jagielski
1260*b1cdbd2cSJim Jagielski	my ( $tag, $parentgid ) = get_package_tag($module, $noindent, $linkpackage);
1261*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1262*b1cdbd2cSJim Jagielski
1263*b1cdbd2cSJim Jagielski	# start of installunit tag -> using info from scp module
1264*b1cdbd2cSJim Jagielski
1265*b1cdbd2cSJim Jagielski	$tag = get_display_tag($module, $singleindent);
1266*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1267*b1cdbd2cSJim Jagielski
1268*b1cdbd2cSJim Jagielski	$value = get_sortkey_value($module);
1269*b1cdbd2cSJim Jagielski	$line = get_tag_line($doubleindent, "sortkey", $value);
1270*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1271*b1cdbd2cSJim Jagielski
1272*b1cdbd2cSJim Jagielski	$value = get_default_value($module);
1273*b1cdbd2cSJim Jagielski	$line = get_tag_line($doubleindent, "default", $value);
1274*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1275*b1cdbd2cSJim Jagielski
1276*b1cdbd2cSJim Jagielski	$value = get_showinuserinstall_value($module);
1277*b1cdbd2cSJim Jagielski	$line = get_tag_line($doubleindent, "showinuserinstall", $value);
1278*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1279*b1cdbd2cSJim Jagielski
1280*b1cdbd2cSJim Jagielski	$value = get_userinstallonly_value($module);
1281*b1cdbd2cSJim Jagielski	$line = get_tag_line($doubleindent, "showinuserinstallonly", $value);
1282*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1283*b1cdbd2cSJim Jagielski
1284*b1cdbd2cSJim Jagielski	$value = get_dontuninstall_value($module);
1285*b1cdbd2cSJim Jagielski	$line = get_tag_line($doubleindent, "dontuninstall", $value);
1286*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1287*b1cdbd2cSJim Jagielski
1288*b1cdbd2cSJim Jagielski	$value = get_checksolaris_value($module);
1289*b1cdbd2cSJim Jagielski	$line = get_tag_line($doubleindent, "checksolaris", $value);
1290*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1291*b1cdbd2cSJim Jagielski
1292*b1cdbd2cSJim Jagielski	$value = get_isupdatepackage_value($module);
1293*b1cdbd2cSJim Jagielski	$line = get_tag_line($doubleindent, "isupdatepackage", $value);
1294*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1295*b1cdbd2cSJim Jagielski
1296*b1cdbd2cSJim Jagielski	$value = get_showmultilingualonly_value($module);
1297*b1cdbd2cSJim Jagielski	$line = get_tag_line($doubleindent, "showmultilingualonly", $value);
1298*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1299*b1cdbd2cSJim Jagielski
1300*b1cdbd2cSJim Jagielski	$value = get_applicationmodule_value($module);
1301*b1cdbd2cSJim Jagielski	$line = get_tag_line($doubleindent, "applicationmodule", $value);
1302*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1303*b1cdbd2cSJim Jagielski
1304*b1cdbd2cSJim Jagielski	$value = get_isjavamodule_value($module);
1305*b1cdbd2cSJim Jagielski	$line = get_tag_line($doubleindent, "isjavapackage", $value);
1306*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1307*b1cdbd2cSJim Jagielski
1308*b1cdbd2cSJim Jagielski	$value = get_installcanfail_value($module);
1309*b1cdbd2cSJim Jagielski	$line = get_tag_line($doubleindent, "installcanfail", $value);
1310*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1311*b1cdbd2cSJim Jagielski
1312*b1cdbd2cSJim Jagielski	$value = get_forceintoupdate_value($module);
1313*b1cdbd2cSJim Jagielski	$line = get_tag_line($doubleindent, "forceintoupdate", $value);
1314*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1315*b1cdbd2cSJim Jagielski
1316*b1cdbd2cSJim Jagielski	$value = get_useforce_value($module);
1317*b1cdbd2cSJim Jagielski	$line = get_tag_line($doubleindent, "useforce", $value);
1318*b1cdbd2cSJim Jagielski	push(@xpdfile, $line);
1319*b1cdbd2cSJim Jagielski
1320*b1cdbd2cSJim Jagielski	# iterating over all languages to get names and descriptions
1321*b1cdbd2cSJim Jagielski	collect_lang_values($doubleindent, $module, \@xpdfile, "Name", "name");
1322*b1cdbd2cSJim Jagielski	collect_lang_values($doubleindent, $module, \@xpdfile, "Description", "description");
1323*b1cdbd2cSJim Jagielski
1324*b1cdbd2cSJim Jagielski	$tag = get_end_tag("display", $singleindent);
1325*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1326*b1cdbd2cSJim Jagielski
1327*b1cdbd2cSJim Jagielski	# end of display tag
1328*b1cdbd2cSJim Jagielski
1329*b1cdbd2cSJim Jagielski	if ( ! $isemptyparent )
1330*b1cdbd2cSJim Jagielski	{
1331*b1cdbd2cSJim Jagielski		# start of installunit tag -> using info from package defined in packagelist
1332*b1cdbd2cSJim Jagielski
1333*b1cdbd2cSJim Jagielski		$tag = get_installunit_tag($singleindent);
1334*b1cdbd2cSJim Jagielski		push(@xpdfile, $tag);
1335*b1cdbd2cSJim Jagielski
1336*b1cdbd2cSJim Jagielski		$value = get_size_value($packagename, $xpdinfo);
1337*b1cdbd2cSJim Jagielski		$line = get_tag_line($doubleindent, "size", $value);
1338*b1cdbd2cSJim Jagielski		push(@xpdfile, $line);
1339*b1cdbd2cSJim Jagielski
1340*b1cdbd2cSJim Jagielski		$value = get_order_value($module);
1341*b1cdbd2cSJim Jagielski		$line = get_tag_line($doubleindent, "installorder", $value);
1342*b1cdbd2cSJim Jagielski		push(@xpdfile, $line);
1343*b1cdbd2cSJim Jagielski
1344*b1cdbd2cSJim Jagielski		$value = get_md5_value($packagename, $xpdinfo);
1345*b1cdbd2cSJim Jagielski		$line = get_tag_line($doubleindent, "md5", $value);
1346*b1cdbd2cSJim Jagielski		push(@xpdfile, $line);
1347*b1cdbd2cSJim Jagielski
1348*b1cdbd2cSJim Jagielski		$value = get_name_value($packagename);
1349*b1cdbd2cSJim Jagielski		$line = get_tag_line($doubleindent, "name", $value);
1350*b1cdbd2cSJim Jagielski		push(@xpdfile, $line);
1351*b1cdbd2cSJim Jagielski
1352*b1cdbd2cSJim Jagielski		$value = get_fullpkgname_value($packagename, $xpdinfo);
1353*b1cdbd2cSJim Jagielski		$line = get_tag_line($doubleindent, "fullpkgname", $value);
1354*b1cdbd2cSJim Jagielski		push(@xpdfile, $line);
1355*b1cdbd2cSJim Jagielski
1356*b1cdbd2cSJim Jagielski		$value = get_pkgversion_value($packagename, $xpdinfo);
1357*b1cdbd2cSJim Jagielski		$line = get_tag_line($doubleindent, "pkgversion", $value);
1358*b1cdbd2cSJim Jagielski		push(@xpdfile, $line);
1359*b1cdbd2cSJim Jagielski
1360*b1cdbd2cSJim Jagielski		$value = get_subdir_value($packagename, $subdir, $module);
1361*b1cdbd2cSJim Jagielski		$line = get_tag_line($doubleindent, "subdir", $value);
1362*b1cdbd2cSJim Jagielski		push(@xpdfile, $line);
1363*b1cdbd2cSJim Jagielski
1364*b1cdbd2cSJim Jagielski		$value = get_relocatable_value($module);
1365*b1cdbd2cSJim Jagielski		$line = get_tag_line($doubleindent, "relocatable", $value);
1366*b1cdbd2cSJim Jagielski		push(@xpdfile, $line);
1367*b1cdbd2cSJim Jagielski
1368*b1cdbd2cSJim Jagielski		$value = get_languagespecific_value($islanguagemodule);
1369*b1cdbd2cSJim Jagielski		$line = get_tag_line($doubleindent, "languagespecific", $value);
1370*b1cdbd2cSJim Jagielski		push(@xpdfile, $line);
1371*b1cdbd2cSJim Jagielski
1372*b1cdbd2cSJim Jagielski		$value = $onelanguage;
1373*b1cdbd2cSJim Jagielski		$line = get_tag_line($doubleindent, "language", $value);
1374*b1cdbd2cSJim Jagielski		push(@xpdfile, $line);
1375*b1cdbd2cSJim Jagielski
1376*b1cdbd2cSJim Jagielski		$line = get_tag_line($doubleindent, "solarislanguage", $solslanguage);
1377*b1cdbd2cSJim Jagielski		push(@xpdfile, $line);
1378*b1cdbd2cSJim Jagielski
1379*b1cdbd2cSJim Jagielski		$tag = get_end_tag("installunit", $singleindent);
1380*b1cdbd2cSJim Jagielski		push(@xpdfile, $tag);
1381*b1cdbd2cSJim Jagielski
1382*b1cdbd2cSJim Jagielski		# end of installunit tag
1383*b1cdbd2cSJim Jagielski	}
1384*b1cdbd2cSJim Jagielski
1385*b1cdbd2cSJim Jagielski	$tag = get_end_tag("package", $noindent);
1386*b1cdbd2cSJim Jagielski	push(@xpdfile, $tag);
1387*b1cdbd2cSJim Jagielski
1388*b1cdbd2cSJim Jagielski	return ( \@xpdfile, $parentgid );
1389*b1cdbd2cSJim Jagielski}
1390*b1cdbd2cSJim Jagielski
1391*b1cdbd2cSJim Jagielski###################################################
1392*b1cdbd2cSJim Jagielski# Setting xpd file name
1393*b1cdbd2cSJim Jagielski###################################################
1394*b1cdbd2cSJim Jagielski
1395*b1cdbd2cSJim Jagielskisub get_xpd_filename
1396*b1cdbd2cSJim Jagielski{
1397*b1cdbd2cSJim Jagielski	my ($modulegid, $linkpackage) = @_;
1398*b1cdbd2cSJim Jagielski
1399*b1cdbd2cSJim Jagielski	if ( $linkpackage ) { $modulegid = $modulegid . "u"; }
1400*b1cdbd2cSJim Jagielski
1401*b1cdbd2cSJim Jagielski	my $filename = $modulegid . ".xpd";
1402*b1cdbd2cSJim Jagielski
1403*b1cdbd2cSJim Jagielski	return $filename;
1404*b1cdbd2cSJim Jagielski}
1405*b1cdbd2cSJim Jagielski
1406*b1cdbd2cSJim Jagielski###################################################
1407*b1cdbd2cSJim Jagielski# Determine, which package was created newly
1408*b1cdbd2cSJim Jagielski###################################################
1409*b1cdbd2cSJim Jagielski
1410*b1cdbd2cSJim Jagielskisub determine_new_packagename
1411*b1cdbd2cSJim Jagielski{
1412*b1cdbd2cSJim Jagielski	my ( $installdir, $subdir, $xpdinfo ) = @_;
1413*b1cdbd2cSJim Jagielski
1414*b1cdbd2cSJim Jagielski	my $newpackage = "";
1415*b1cdbd2cSJim Jagielski	$installdir =~ s/\Q$installer::globals::separator\E\s*$//;
1416*b1cdbd2cSJim Jagielski	my $directory = $installdir . $installer::globals::separator . $subdir;
1417*b1cdbd2cSJim Jagielski	$directory =~ s/\Q$installer::globals::separator\E\s*$//;
1418*b1cdbd2cSJim Jagielski
1419*b1cdbd2cSJim Jagielski	if ( $xpdinfo->{'RealPackageName'} )
1420*b1cdbd2cSJim Jagielski	{
1421*b1cdbd2cSJim Jagielski		$newpackage = $directory . $installer::globals::separator . $xpdinfo->{'RealPackageName'};
1422*b1cdbd2cSJim Jagielski		push(@installer::globals::currentcontent, $newpackage);
1423*b1cdbd2cSJim Jagielski		return $newpackage;
1424*b1cdbd2cSJim Jagielski	}
1425*b1cdbd2cSJim Jagielski
1426*b1cdbd2cSJim Jagielski	my ($newcontent, $allcontent) = installer::systemactions::find_new_content_in_directory($directory, \@installer::globals::currentcontent);
1427*b1cdbd2cSJim Jagielski	@installer::globals::currentcontent = ();
1428*b1cdbd2cSJim Jagielski	foreach my $element ( @{$allcontent} ) { push(@installer::globals::currentcontent, $element); }
1429*b1cdbd2cSJim Jagielski
1430*b1cdbd2cSJim Jagielski	my $newentriesnumber = $#{$newcontent} + 1;
1431*b1cdbd2cSJim Jagielski	if ( $newentriesnumber > 1 ) { installer::exiter::exit_program("ERROR: More than one new package in directory $directory", "determine_new_packagename (xpdinstaller)"); }
1432*b1cdbd2cSJim Jagielski	elsif ( $newentriesnumber < 1 )  { installer::exiter::exit_program("ERROR: No new package in directory $directory", "determine_new_packagename (xpdinstaller)"); }
1433*b1cdbd2cSJim Jagielski	$newpackage = ${$newcontent}[0];
1434*b1cdbd2cSJim Jagielski
1435*b1cdbd2cSJim Jagielski	return $newpackage;
1436*b1cdbd2cSJim Jagielski}
1437*b1cdbd2cSJim Jagielski
1438*b1cdbd2cSJim Jagielski###################################################
1439*b1cdbd2cSJim Jagielski# Checking, if the parentgid is defined in
1440*b1cdbd2cSJim Jagielski# another package
1441*b1cdbd2cSJim Jagielski###################################################
1442*b1cdbd2cSJim Jagielski
1443*b1cdbd2cSJim Jagielskisub is_empty_parent
1444*b1cdbd2cSJim Jagielski{
1445*b1cdbd2cSJim Jagielski	my ($gid, $packages) = @_;
1446*b1cdbd2cSJim Jagielski
1447*b1cdbd2cSJim Jagielski	my $is_empty_parent = 1;
1448*b1cdbd2cSJim Jagielski
1449*b1cdbd2cSJim Jagielski	for ( my $k = 0; $k <= $#{$packages}; $k++ )
1450*b1cdbd2cSJim Jagielski	{
1451*b1cdbd2cSJim Jagielski		my $onepackage = ${$packages}[$k];
1452*b1cdbd2cSJim Jagielski		my $packagegid = $onepackage->{'module'};
1453*b1cdbd2cSJim Jagielski
1454*b1cdbd2cSJim Jagielski		if ( $packagegid eq $gid )
1455*b1cdbd2cSJim Jagielski		{
1456*b1cdbd2cSJim Jagielski			$is_empty_parent = 0;
1457*b1cdbd2cSJim Jagielski			last;
1458*b1cdbd2cSJim Jagielski		}
1459*b1cdbd2cSJim Jagielski	}
1460*b1cdbd2cSJim Jagielski
1461*b1cdbd2cSJim Jagielski	return $is_empty_parent;
1462*b1cdbd2cSJim Jagielski}
1463*b1cdbd2cSJim Jagielski
1464*b1cdbd2cSJim Jagielski###################################################
1465*b1cdbd2cSJim Jagielski# Creating additional xpd files for empty parents
1466*b1cdbd2cSJim Jagielski###################################################
1467*b1cdbd2cSJim Jagielski
1468*b1cdbd2cSJim Jagielskisub create_emptyparents_xpd_file
1469*b1cdbd2cSJim Jagielski{
1470*b1cdbd2cSJim Jagielski	my ($parentgid, $modulesarrayref, $xpddir) = @_;
1471*b1cdbd2cSJim Jagielski
1472*b1cdbd2cSJim Jagielski	my $module = get_module($parentgid, $modulesarrayref);
1473*b1cdbd2cSJim Jagielski	my $grandpagid = "";
1474*b1cdbd2cSJim Jagielski
1475*b1cdbd2cSJim Jagielski	if ( $module ne "" )
1476*b1cdbd2cSJim Jagielski	{
1477*b1cdbd2cSJim Jagielski		my $packagename = "";
1478*b1cdbd2cSJim Jagielski		# all content saved in scp is now available and can be used to create the xpd file
1479*b1cdbd2cSJim Jagielski		my ( $xpdfile, $newparentgid ) = get_file_content($module, $packagename, "", 0, 1, "", 0, "", "");
1480*b1cdbd2cSJim Jagielski
1481*b1cdbd2cSJim Jagielski		$grandpagid = $newparentgid;
1482*b1cdbd2cSJim Jagielski
1483*b1cdbd2cSJim Jagielski		my $xpdfilename = get_xpd_filename($parentgid, 0);
1484*b1cdbd2cSJim Jagielski		$xpdfilename = $xpddir . $installer::globals::separator . $xpdfilename;
1485*b1cdbd2cSJim Jagielski
1486*b1cdbd2cSJim Jagielski		installer::files::save_file($xpdfilename, $xpdfile);
1487*b1cdbd2cSJim Jagielski		push(@installer::globals::allxpdfiles, $xpdfilename);
1488*b1cdbd2cSJim Jagielski		my $infoline = "Saving xpd file: $xpdfilename\n";
1489*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1490*b1cdbd2cSJim Jagielski	}
1491*b1cdbd2cSJim Jagielski
1492*b1cdbd2cSJim Jagielski	# push(@installer::globals::emptyxpdparents, $parentgid);
1493*b1cdbd2cSJim Jagielski	push( @installer::globals::createdxpdfiles, $parentgid);
1494*b1cdbd2cSJim Jagielski
1495*b1cdbd2cSJim Jagielski	return $grandpagid;
1496*b1cdbd2cSJim Jagielski}
1497*b1cdbd2cSJim Jagielski
1498*b1cdbd2cSJim Jagielski###################################################
1499*b1cdbd2cSJim Jagielski# Creating additional xpd files for empty parents
1500*b1cdbd2cSJim Jagielski###################################################
1501*b1cdbd2cSJim Jagielski
1502*b1cdbd2cSJim Jagielskisub filter_content_from_xpdfile
1503*b1cdbd2cSJim Jagielski{
1504*b1cdbd2cSJim Jagielski	my ($xpdfile) = @_;
1505*b1cdbd2cSJim Jagielski
1506*b1cdbd2cSJim Jagielski	my @newxpdfile = ();
1507*b1cdbd2cSJim Jagielski
1508*b1cdbd2cSJim Jagielski	my $include = 1;
1509*b1cdbd2cSJim Jagielski
1510*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$xpdfile}; $i++ )
1511*b1cdbd2cSJim Jagielski	{
1512*b1cdbd2cSJim Jagielski		my $line = ${$xpdfile}[$i];
1513*b1cdbd2cSJim Jagielski
1514*b1cdbd2cSJim Jagielski		if (( $line =~ /^\s*\<installunit/ ) && ( $include )) { $include = 0; }
1515*b1cdbd2cSJim Jagielski		if ( $include ) { push(@newxpdfile, $line); }
1516*b1cdbd2cSJim Jagielski		if (( $line =~ /^\s*\<\/installunit/ ) && ( ! $include )) { $include = 1; }
1517*b1cdbd2cSJim Jagielski	}
1518*b1cdbd2cSJim Jagielski
1519*b1cdbd2cSJim Jagielski	return \@newxpdfile;
1520*b1cdbd2cSJim Jagielski}
1521*b1cdbd2cSJim Jagielski
1522*b1cdbd2cSJim Jagielski##########################################################################
1523*b1cdbd2cSJim Jagielski# Changing the parent inside the xpd file
1524*b1cdbd2cSJim Jagielski# Old: <package name="gid_Module_Root" parent="root">
1525*b1cdbd2cSJim Jagielski# New: <package name="gid_Module_Root_Files_1" parent="gid_Module_Root">
1526*b1cdbd2cSJim Jagielski##########################################################################
1527*b1cdbd2cSJim Jagielski
1528*b1cdbd2cSJim Jagielskisub change_parent_in_xpdfile
1529*b1cdbd2cSJim Jagielski{
1530*b1cdbd2cSJim Jagielski	my ($xpdfile, $modulename) = @_;
1531*b1cdbd2cSJim Jagielski
1532*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$xpdfile}; $i++ )
1533*b1cdbd2cSJim Jagielski	{
1534*b1cdbd2cSJim Jagielski		if ( ${$xpdfile}[$i] =~ /^\s*\<package name\s*=\s*\"(\S+?)\"\s+parent\s*=\s*\"(\S+?)\"\s*\>\s*$/ )
1535*b1cdbd2cSJim Jagielski		{
1536*b1cdbd2cSJim Jagielski			my $oldname = $1;
1537*b1cdbd2cSJim Jagielski			my $oldparent = $2;
1538*b1cdbd2cSJim Jagielski
1539*b1cdbd2cSJim Jagielski			my $newname = $modulename;
1540*b1cdbd2cSJim Jagielski			my $newparent = $oldname;
1541*b1cdbd2cSJim Jagielski
1542*b1cdbd2cSJim Jagielski			${$xpdfile}[$i] =~ s/\"\Q$oldname\E\"/\"$newname\"/;
1543*b1cdbd2cSJim Jagielski			${$xpdfile}[$i] =~ s/\"\Q$oldparent\E\"/\"$newparent\"/;
1544*b1cdbd2cSJim Jagielski
1545*b1cdbd2cSJim Jagielski			last;
1546*b1cdbd2cSJim Jagielski		}
1547*b1cdbd2cSJim Jagielski	}
1548*b1cdbd2cSJim Jagielski}
1549*b1cdbd2cSJim Jagielski
1550*b1cdbd2cSJim Jagielski###################################################
1551*b1cdbd2cSJim Jagielski# Creating one xpd file for each package
1552*b1cdbd2cSJim Jagielski###################################################
1553*b1cdbd2cSJim Jagielski
1554*b1cdbd2cSJim Jagielskisub create_xpd_file
1555*b1cdbd2cSJim Jagielski{
1556*b1cdbd2cSJim Jagielski	my ($onepackage, $allpackages, $languagestringref, $allvariables, $modulesarrayref, $installdir, $subdir, $linkpackage, $xpdinfo) = @_;
1557*b1cdbd2cSJim Jagielski
1558*b1cdbd2cSJim Jagielski	my $infoline = "";
1559*b1cdbd2cSJim Jagielski	# creating the directory
1560*b1cdbd2cSJim Jagielski	my $xpddir = installer::systemactions::create_directories("xpdinstaller", $languagestringref);
1561*b1cdbd2cSJim Jagielski	$xpddir =~ s/\/\s*$//;
1562*b1cdbd2cSJim Jagielski	$installer::globals::xpddir = $xpddir;
1563*b1cdbd2cSJim Jagielski	# push(@installer::globals::removedirs, $xpddir);
1564*b1cdbd2cSJim Jagielski
1565*b1cdbd2cSJim Jagielski	my $modulegid = $onepackage->{'module'};
1566*b1cdbd2cSJim Jagielski
1567*b1cdbd2cSJim Jagielski	my $onelanguage = "";	#
1568*b1cdbd2cSJim Jagielski    my $solslanguage = "";	#
1569*b1cdbd2cSJim Jagielski	my $islanguagemodule = 0;	#
1570*b1cdbd2cSJim Jagielski	if ( $onepackage->{'islanguagemodule'} ) { $islanguagemodule = $onepackage->{'islanguagemodule'}; }	#
1571*b1cdbd2cSJim Jagielski	if ( $islanguagemodule )	#
1572*b1cdbd2cSJim Jagielski	{
1573*b1cdbd2cSJim Jagielski		$onelanguage = $onepackage->{'language'};	#
1574*b1cdbd2cSJim Jagielski		if ( $installer::globals::issolarispkgbuild ) { $solslanguage = installer::epmfile::get_solaris_language_for_langpack($onelanguage); }	#
1575*b1cdbd2cSJim Jagielski	}
1576*b1cdbd2cSJim Jagielski
1577*b1cdbd2cSJim Jagielski	installer::logger::include_header_into_logfile("Creating xpd file ($modulegid):");
1578*b1cdbd2cSJim Jagielski
1579*b1cdbd2cSJim Jagielski	my $module = get_module($modulegid, $modulesarrayref);
1580*b1cdbd2cSJim Jagielski
1581*b1cdbd2cSJim Jagielski	if ( $module ne "" )
1582*b1cdbd2cSJim Jagielski	{
1583*b1cdbd2cSJim Jagielski		my $packagename = determine_new_packagename($installdir, $subdir, $xpdinfo);
1584*b1cdbd2cSJim Jagielski
1585*b1cdbd2cSJim Jagielski		# all content saved in scp is now available and can be used to create the xpd file
1586*b1cdbd2cSJim Jagielski		my ( $xpdfile, $parentgid ) = get_file_content($module, $packagename, $solslanguage, $linkpackage, 0, "", $islanguagemodule, $onelanguage, $xpdinfo);
1587*b1cdbd2cSJim Jagielski
1588*b1cdbd2cSJim Jagielski		my $xpdfilename = get_xpd_filename($modulegid, $linkpackage);
1589*b1cdbd2cSJim Jagielski		$xpdfilename = $xpddir . $installer::globals::separator . $xpdfilename;
1590*b1cdbd2cSJim Jagielski
1591*b1cdbd2cSJim Jagielski		# Very special handling for Root module:
1592*b1cdbd2cSJim Jagielski		# Because packages should only be assigned to leaves and not to knods,
1593*b1cdbd2cSJim Jagielski		# the root module is divided into a knod without package and a new
1594*b1cdbd2cSJim Jagielski		# leave with package. The name of the leave is defined at $module->{'XpdPackageName'}.
1595*b1cdbd2cSJim Jagielski		if ( $module->{'XpdPackageName'} )
1596*b1cdbd2cSJim Jagielski		{
1597*b1cdbd2cSJim Jagielski			my $newxpdfilename = get_xpd_filename($module->{'XpdPackageName'}, 0);
1598*b1cdbd2cSJim Jagielski			$newxpdfilename = $xpddir . $installer::globals::separator . $newxpdfilename;
1599*b1cdbd2cSJim Jagielski			my $emptyfilecontent = filter_content_from_xpdfile($xpdfile);
1600*b1cdbd2cSJim Jagielski
1601*b1cdbd2cSJim Jagielski			installer::files::save_file($xpdfilename, $emptyfilecontent);
1602*b1cdbd2cSJim Jagielski			push(@installer::globals::allxpdfiles, $xpdfilename);
1603*b1cdbd2cSJim Jagielski			$infoline = "Saving xpd file: $xpdfilename\n";
1604*b1cdbd2cSJim Jagielski			$installer::logger::Lang->print($infoline);
1605*b1cdbd2cSJim Jagielski
1606*b1cdbd2cSJim Jagielski			$xpdfilename = $newxpdfilename;
1607*b1cdbd2cSJim Jagielski			change_parent_in_xpdfile($xpdfile, $module->{'XpdPackageName'});
1608*b1cdbd2cSJim Jagielski		}
1609*b1cdbd2cSJim Jagielski
1610*b1cdbd2cSJim Jagielski		installer::files::save_file($xpdfilename, $xpdfile);
1611*b1cdbd2cSJim Jagielski		push( @installer::globals::createdxpdfiles, $modulegid);
1612*b1cdbd2cSJim Jagielski		push(@installer::globals::allxpdfiles, $xpdfilename);
1613*b1cdbd2cSJim Jagielski		$infoline = "Saving xpd file: $xpdfilename\n";
1614*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1615*b1cdbd2cSJim Jagielski
1616*b1cdbd2cSJim Jagielski		my $grandpagid = "root";
1617*b1cdbd2cSJim Jagielski		if ( $parentgid ne "root" )
1618*b1cdbd2cSJim Jagielski		{
1619*b1cdbd2cSJim Jagielski			my $create_missing_parent = is_empty_parent($parentgid, $allpackages);
1620*b1cdbd2cSJim Jagielski
1621*b1cdbd2cSJim Jagielski			# if (( $create_missing_parent ) && ( ! installer::existence::exists_in_array($parentgid, \@installer::globals::emptyxpdparents) ))
1622*b1cdbd2cSJim Jagielski			if (( $create_missing_parent ) && ( ! installer::existence::exists_in_array($parentgid, \@installer::globals::createdxpdfiles) ))
1623*b1cdbd2cSJim Jagielski			{
1624*b1cdbd2cSJim Jagielski				$grandpagid = create_emptyparents_xpd_file($parentgid, $modulesarrayref, $xpddir);
1625*b1cdbd2cSJim Jagielski			}
1626*b1cdbd2cSJim Jagielski		}
1627*b1cdbd2cSJim Jagielski
1628*b1cdbd2cSJim Jagielski		if ( $grandpagid ne "root" )
1629*b1cdbd2cSJim Jagielski		{
1630*b1cdbd2cSJim Jagielski			my $create_missing_parent = is_empty_parent($grandpagid, $allpackages);
1631*b1cdbd2cSJim Jagielski
1632*b1cdbd2cSJim Jagielski			# if (( $create_missing_parent ) && ( ! installer::existence::exists_in_array($parentgid, \@installer::globals::emptyxpdparents) ))
1633*b1cdbd2cSJim Jagielski			if (( $create_missing_parent ) && ( ! installer::existence::exists_in_array($grandpagid, \@installer::globals::createdxpdfiles) ))
1634*b1cdbd2cSJim Jagielski			{
1635*b1cdbd2cSJim Jagielski				create_emptyparents_xpd_file($grandpagid, $modulesarrayref, $xpddir);
1636*b1cdbd2cSJim Jagielski 			}
1637*b1cdbd2cSJim Jagielski 		}
1638*b1cdbd2cSJim Jagielski	}
1639*b1cdbd2cSJim Jagielski	else
1640*b1cdbd2cSJim Jagielski	{
1641*b1cdbd2cSJim Jagielski		installer::exiter::exit_program("ERROR: No module definition found for gid: $modulegid", "create_xpd_file (xpdinstaller)");
1642*b1cdbd2cSJim Jagielski	}
1643*b1cdbd2cSJim Jagielski
1644*b1cdbd2cSJim Jagielski}
1645*b1cdbd2cSJim Jagielski
1646*b1cdbd2cSJim Jagielski###################################################
1647*b1cdbd2cSJim Jagielski# Creating a xpd file for a copied package
1648*b1cdbd2cSJim Jagielski###################################################
1649*b1cdbd2cSJim Jagielski
1650*b1cdbd2cSJim Jagielskisub create_xpd_file_for_childproject
1651*b1cdbd2cSJim Jagielski{
1652*b1cdbd2cSJim Jagielski	my ($module, $destdir, $packagename, $allvariableshashref, $modulesarrayref) = @_;
1653*b1cdbd2cSJim Jagielski
1654*b1cdbd2cSJim Jagielski	my $modulegid = $module->{'gid'};
1655*b1cdbd2cSJim Jagielski
1656*b1cdbd2cSJim Jagielski	my $currentdir = cwd();
1657*b1cdbd2cSJim Jagielski	$destdir =~ s/\/\s*$//;
1658*b1cdbd2cSJim Jagielski	$currentdir =~ s/\/\s*$//;
1659*b1cdbd2cSJim Jagielski
1660*b1cdbd2cSJim Jagielski	my $completepackage = $currentdir . $installer::globals::separator . $destdir . $installer::globals::separator . $packagename;
1661*b1cdbd2cSJim Jagielski
1662*b1cdbd2cSJim Jagielski	# all content saved in scp is now available and can be used to create the xpd file
1663*b1cdbd2cSJim Jagielski	my ( $xpdfile, $parentgid ) = get_file_content($module, $completepackage, "", 0, 0, "", 0, "", "");
1664*b1cdbd2cSJim Jagielski
1665*b1cdbd2cSJim Jagielski	my $xpdfilename = get_xpd_filename($modulegid, 0);
1666*b1cdbd2cSJim Jagielski	$xpdfilename = $installer::globals::xpddir . $installer::globals::separator . $xpdfilename;
1667*b1cdbd2cSJim Jagielski
1668*b1cdbd2cSJim Jagielski	installer::files::save_file($xpdfilename, $xpdfile);
1669*b1cdbd2cSJim Jagielski	push( @installer::globals::createdxpdfiles, $modulegid);
1670*b1cdbd2cSJim Jagielski	push(@installer::globals::allxpdfiles, $xpdfilename);
1671*b1cdbd2cSJim Jagielski	my $infoline = "Saving xpd file: $xpdfilename\n";
1672*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
1673*b1cdbd2cSJim Jagielski
1674*b1cdbd2cSJim Jagielski	if ( $parentgid ne "root" )
1675*b1cdbd2cSJim Jagielski	{
1676*b1cdbd2cSJim Jagielski		# my $create_missing_parent = is_empty_parent($parentgid, $allpackages);
1677*b1cdbd2cSJim Jagielski		my $create_missing_parent = 1; # -> Always missing parent by child projects!
1678*b1cdbd2cSJim Jagielski		# Parent is now created, if it was not created before. Attention: Parent module must not come later.
1679*b1cdbd2cSJim Jagielski		if (( $create_missing_parent ) && ( ! installer::existence::exists_in_array($parentgid, \@installer::globals::createdxpdfiles) ))
1680*b1cdbd2cSJim Jagielski		{
1681*b1cdbd2cSJim Jagielski			create_emptyparents_xpd_file($parentgid, $modulesarrayref, $installer::globals::xpddir);
1682*b1cdbd2cSJim Jagielski		}
1683*b1cdbd2cSJim Jagielski	}
1684*b1cdbd2cSJim Jagielski}
1685*b1cdbd2cSJim Jagielski
1686*b1cdbd2cSJim Jagielski##############################################################
1687*b1cdbd2cSJim Jagielski# Creating a xpd file for copied system integration package
1688*b1cdbd2cSJim Jagielski##############################################################
1689*b1cdbd2cSJim Jagielski
1690*b1cdbd2cSJim Jagielskisub create_xpd_file_for_systemintegration
1691*b1cdbd2cSJim Jagielski{
1692*b1cdbd2cSJim Jagielski	my ($module, $newcontent, $modulesarrayref, $subdir) = @_;
1693*b1cdbd2cSJim Jagielski
1694*b1cdbd2cSJim Jagielski	my $parentgid = $module->{'gid'};
1695*b1cdbd2cSJim Jagielski
1696*b1cdbd2cSJim Jagielski	# Create new visible module from scp info and create
1697*b1cdbd2cSJim Jagielski	# new hidden module for each package inside in tar file
1698*b1cdbd2cSJim Jagielski
1699*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$newcontent}; $i++ )
1700*b1cdbd2cSJim Jagielski	{
1701*b1cdbd2cSJim Jagielski		my $newpackagename = ${$newcontent}[$i];
1702*b1cdbd2cSJim Jagielski
1703*b1cdbd2cSJim Jagielski		# installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$newpackagename);
1704*b1cdbd2cSJim Jagielski
1705*b1cdbd2cSJim Jagielski		my $infoline = "Creating xpd file for package: $newpackagename\n";
1706*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1707*b1cdbd2cSJim Jagielski
1708*b1cdbd2cSJim Jagielski		my $childmodule = installer::worker::copy_hash_from_references($module);
1709*b1cdbd2cSJim Jagielski		$childmodule->{'ParentID'} = $module->{'gid'};  # the module gid is the new parent
1710*b1cdbd2cSJim Jagielski		$childmodule->{'InstallOrder'} = $installer::globals::defaultsystemintinstallorder;
1711*b1cdbd2cSJim Jagielski		my $number = $i + 1;
1712*b1cdbd2cSJim Jagielski		my $modulegid = $module->{'gid'} . "_child_" . $number; # setting a dynamic new gid
1713*b1cdbd2cSJim Jagielski		$childmodule->{'gid'} = $modulegid;
1714*b1cdbd2cSJim Jagielski		$childmodule->{'Styles'} =~ s/\)/\,HIDDEN_ROOT\)/;
1715*b1cdbd2cSJim Jagielski		# iterating over all languages to get names and descriptions
1716*b1cdbd2cSJim Jagielski		remove_lang_values($childmodule, "Name");
1717*b1cdbd2cSJim Jagielski		remove_lang_values($childmodule, "Description");
1718*b1cdbd2cSJim Jagielski
1719*b1cdbd2cSJim Jagielski		my $shortpackagename = $newpackagename;
1720*b1cdbd2cSJim Jagielski		installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$shortpackagename);
1721*b1cdbd2cSJim Jagielski		$childmodule->{'PackageName'} = $shortpackagename;
1722*b1cdbd2cSJim Jagielski		$childmodule->{'Name'} = $modulegid;
1723*b1cdbd2cSJim Jagielski		$childmodule->{'Description'} = $modulegid;
1724*b1cdbd2cSJim Jagielski
1725*b1cdbd2cSJim Jagielski		# Checking, if installorder can be set:
1726*b1cdbd2cSJim Jagielski		# scp syntax: InstallOrder = "desktop:1050, suse:1060";
1727*b1cdbd2cSJim Jagielski		# The string before the number can be compared with $shortpackagename
1728*b1cdbd2cSJim Jagielski		if ( $module->{'InstallOrder'} )
1729*b1cdbd2cSJim Jagielski		{
1730*b1cdbd2cSJim Jagielski			my $installorder = $module->{'InstallOrder'};
1731*b1cdbd2cSJim Jagielski			$installorder =~ s/^\s*\"//g;
1732*b1cdbd2cSJim Jagielski			$installorder =~ s/\"\s*$//g;
1733*b1cdbd2cSJim Jagielski			# $installorder is comma separated list
1734*b1cdbd2cSJim Jagielski			my $allorders = installer::converter::convert_stringlist_into_array(\$installorder, ",");
1735*b1cdbd2cSJim Jagielski			for ( my $j = 0; $j <= $#{$allorders}; $j++ )
1736*b1cdbd2cSJim Jagielski			{
1737*b1cdbd2cSJim Jagielski				my $oneitem = ${$allorders}[$j];
1738*b1cdbd2cSJim Jagielski				if ( $oneitem =~ /^\s*(\S+?)\s*:\s*(\S+?)\s*$/ )
1739*b1cdbd2cSJim Jagielski				{
1740*b1cdbd2cSJim Jagielski					my $name = $1;
1741*b1cdbd2cSJim Jagielski					my $order = $2;
1742*b1cdbd2cSJim Jagielski
1743*b1cdbd2cSJim Jagielski					if ( $shortpackagename =~ /\Q$name\E/ ) { $childmodule->{'InstallOrder'} = $order; }
1744*b1cdbd2cSJim Jagielski				}
1745*b1cdbd2cSJim Jagielski			}
1746*b1cdbd2cSJim Jagielski		}
1747*b1cdbd2cSJim Jagielski
1748*b1cdbd2cSJim Jagielski		# all content saved in scp is now available and can be used to create the xpd file
1749*b1cdbd2cSJim Jagielski		my ( $xpdfile, $parentgid_ ) = get_file_content($childmodule, $newpackagename, "", 0, 0, $subdir, 0, "", "");
1750*b1cdbd2cSJim Jagielski
1751*b1cdbd2cSJim Jagielski		my $xpdfilename = get_xpd_filename($modulegid, 0);
1752*b1cdbd2cSJim Jagielski		$xpdfilename = $installer::globals::xpddir . $installer::globals::separator . $xpdfilename;
1753*b1cdbd2cSJim Jagielski
1754*b1cdbd2cSJim Jagielski		installer::files::save_file($xpdfilename, $xpdfile);
1755*b1cdbd2cSJim Jagielski		push(@installer::globals::allxpdfiles, $xpdfilename);
1756*b1cdbd2cSJim Jagielski		$infoline = "Saving xpd file: $xpdfilename\n";
1757*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
1758*b1cdbd2cSJim Jagielski	}
1759*b1cdbd2cSJim Jagielski
1760*b1cdbd2cSJim Jagielski	# Creating the top level visible xpd file
1761*b1cdbd2cSJim Jagielski	create_emptyparents_xpd_file($parentgid, $modulesarrayref, $installer::globals::xpddir);
1762*b1cdbd2cSJim Jagielski}
1763*b1cdbd2cSJim Jagielski
1764*b1cdbd2cSJim Jagielski##############################################################
1765*b1cdbd2cSJim Jagielski# Copying xpd files into installation set
1766*b1cdbd2cSJim Jagielski##############################################################
1767*b1cdbd2cSJim Jagielski
1768*b1cdbd2cSJim Jagielskisub copy_xpd_files
1769*b1cdbd2cSJim Jagielski{
1770*b1cdbd2cSJim Jagielski	my ( $destdir ) = @_;
1771*b1cdbd2cSJim Jagielski
1772*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#installer::globals::allxpdfiles; $i++ )
1773*b1cdbd2cSJim Jagielski	{
1774*b1cdbd2cSJim Jagielski		if ( ! -f $installer::globals::allxpdfiles[$i] ) { installer::exiter::exit_program("ERROR: Could not find xpd file: $installer::globals::allxpdfiles[$i]!", "copy_xpd_files"); }
1775*b1cdbd2cSJim Jagielski		installer::systemactions::copy_one_file($installer::globals::allxpdfiles[$i], $destdir);
1776*b1cdbd2cSJim Jagielski	}
1777*b1cdbd2cSJim Jagielski}
1778*b1cdbd2cSJim Jagielski
1779*b1cdbd2cSJim Jagielski##############################################################
1780*b1cdbd2cSJim Jagielski# Copying all xpd files into the installation set
1781*b1cdbd2cSJim Jagielski##############################################################
1782*b1cdbd2cSJim Jagielski
1783*b1cdbd2cSJim Jagielskisub copy_xpd_files_into_installset
1784*b1cdbd2cSJim Jagielski{
1785*b1cdbd2cSJim Jagielski	my ($installdir) = @_;
1786*b1cdbd2cSJim Jagielski
1787*b1cdbd2cSJim Jagielski	$installdir =~ s/\Q$installer::globals::separator\E\s*$//;
1788*b1cdbd2cSJim Jagielski
1789*b1cdbd2cSJim Jagielski	my $instdir = $installdir . $installer::globals::separator . "installdata";
1790*b1cdbd2cSJim Jagielski	installer::systemactions::create_directory($instdir);
1791*b1cdbd2cSJim Jagielski
1792*b1cdbd2cSJim Jagielski	my $xpddir = $instdir . $installer::globals::separator . "xpd";
1793*b1cdbd2cSJim Jagielski	installer::systemactions::create_directory($xpddir);
1794*b1cdbd2cSJim Jagielski	copy_xpd_files($xpddir);
1795*b1cdbd2cSJim Jagielski}
1796*b1cdbd2cSJim Jagielski
1797*b1cdbd2cSJim Jagielski##############################################################
1798*b1cdbd2cSJim Jagielski# Creating base xpd file with product information
1799*b1cdbd2cSJim Jagielski##############################################################
1800*b1cdbd2cSJim Jagielski
1801*b1cdbd2cSJim Jagielskisub create_setup_xpd
1802*b1cdbd2cSJim Jagielski{
1803*b1cdbd2cSJim Jagielski	my ($allvariables, $languagestringref) = @_;
1804*b1cdbd2cSJim Jagielski
1805*b1cdbd2cSJim Jagielski	my ( $xpdfile ) = get_setup_file_content($allvariables, $languagestringref);
1806*b1cdbd2cSJim Jagielski
1807*b1cdbd2cSJim Jagielski	my $xpdfilename = $installer::globals::productxpdfile;
1808*b1cdbd2cSJim Jagielski	$xpdfilename = $installer::globals::xpddir . $installer::globals::separator . $xpdfilename;
1809*b1cdbd2cSJim Jagielski
1810*b1cdbd2cSJim Jagielski	installer::files::save_file($xpdfilename, $xpdfile);
1811*b1cdbd2cSJim Jagielski	push(@installer::globals::allxpdfiles, $xpdfilename);
1812*b1cdbd2cSJim Jagielski	my $infoline = "Saving xpd file: $xpdfilename\n";
1813*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
1814*b1cdbd2cSJim Jagielski}
1815*b1cdbd2cSJim Jagielski
1816*b1cdbd2cSJim Jagielski###################################################
1817*b1cdbd2cSJim Jagielski# Copying the files needed by the xpd installer
1818*b1cdbd2cSJim Jagielski# into the installation directory
1819*b1cdbd2cSJim Jagielski###################################################
1820*b1cdbd2cSJim Jagielski
1821*b1cdbd2cSJim Jagielskisub create_xpd_installer
1822*b1cdbd2cSJim Jagielski{
1823*b1cdbd2cSJim Jagielski	my ( $installdir, $allvariables, $languagestringref) = @_;
1824*b1cdbd2cSJim Jagielski
1825*b1cdbd2cSJim Jagielski	installer::logger::include_header_into_logfile("Creating xpd installer:");
1826*b1cdbd2cSJim Jagielski
1827*b1cdbd2cSJim Jagielski	# create setup.xpd file
1828*b1cdbd2cSJim Jagielski	create_setup_xpd($allvariables, $languagestringref);
1829*b1cdbd2cSJim Jagielski
1830*b1cdbd2cSJim Jagielski	# copy xpd files into installation set
1831*b1cdbd2cSJim Jagielski	copy_xpd_files_into_installset($installdir);
1832*b1cdbd2cSJim Jagielski}
1833*b1cdbd2cSJim Jagielski
1834*b1cdbd2cSJim Jagielski1;
1835