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 Jagielski
24*b1cdbd2cSJim Jagielskipackage installer::control;
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim Jagielskiuse Cwd;
27*b1cdbd2cSJim Jagielskiuse installer::converter;
28*b1cdbd2cSJim Jagielskiuse installer::exiter;
29*b1cdbd2cSJim Jagielskiuse installer::files;
30*b1cdbd2cSJim Jagielskiuse installer::globals;
31*b1cdbd2cSJim Jagielskiuse installer::pathanalyzer;
32*b1cdbd2cSJim Jagielskiuse installer::scriptitems;
33*b1cdbd2cSJim Jagielskiuse installer::systemactions;
34*b1cdbd2cSJim Jagielski
35*b1cdbd2cSJim Jagielskiour @ErrorMessages = undef;
36*b1cdbd2cSJim Jagielski
37*b1cdbd2cSJim Jagielski#########################################################
38*b1cdbd2cSJim Jagielski# Function that can be used for additional controls.
39*b1cdbd2cSJim Jagielski# Search happens in $installer::globals::patharray.
40*b1cdbd2cSJim Jagielski#########################################################
41*b1cdbd2cSJim Jagielski
42*b1cdbd2cSJim Jagielskisub check_needed_files_in_path
43*b1cdbd2cSJim Jagielski{
44*b1cdbd2cSJim Jagielski	my ( $filesref ) = @_;
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski    my $error = 0;
47*b1cdbd2cSJim Jagielski	foreach my $onefile ( @{$filesref} )
48*b1cdbd2cSJim Jagielski	{
49*b1cdbd2cSJim Jagielski		$installer::logger::Info->printf("...... searching %s ...\n", $onefile);
50*b1cdbd2cSJim Jagielski
51*b1cdbd2cSJim Jagielski		my $fileref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$onefile, $installer::globals::patharray , 0);
52*b1cdbd2cSJim Jagielski
53*b1cdbd2cSJim Jagielski		if ( $$fileref eq "" )
54*b1cdbd2cSJim Jagielski		{
55*b1cdbd2cSJim Jagielski			$error = 1;
56*b1cdbd2cSJim Jagielski			installer::logger::print_error( "$onefile not found\n" );
57*b1cdbd2cSJim Jagielski		}
58*b1cdbd2cSJim Jagielski		else
59*b1cdbd2cSJim Jagielski		{
60*b1cdbd2cSJim Jagielski			$installer::logger::Info->print( "\tFound: $$fileref\n" );
61*b1cdbd2cSJim Jagielski		}
62*b1cdbd2cSJim Jagielski	}
63*b1cdbd2cSJim Jagielski
64*b1cdbd2cSJim Jagielski	if ( $error )
65*b1cdbd2cSJim Jagielski	{
66*b1cdbd2cSJim Jagielski		installer::exiter::exit_program("ERROR: Could not find all needed files in path!", "check_needed_files_in_path");
67*b1cdbd2cSJim Jagielski	}
68*b1cdbd2cSJim Jagielski}
69*b1cdbd2cSJim Jagielski
70*b1cdbd2cSJim Jagielski#########################################################
71*b1cdbd2cSJim Jagielski# Checking the local system
72*b1cdbd2cSJim Jagielski# Checking existence of needed files in include path
73*b1cdbd2cSJim Jagielski#########################################################
74*b1cdbd2cSJim Jagielski
75*b1cdbd2cSJim Jagielskisub check_system_path
76*b1cdbd2cSJim Jagielski{
77*b1cdbd2cSJim Jagielski	# The following files have to be found in the environment variable PATH
78*b1cdbd2cSJim Jagielski	# All platforms: zip
79*b1cdbd2cSJim Jagielski	# Windows only: "msiinfo.exe", "msidb.exe", "uuidgen.exe", "makecab.exe", "msitran.exe", "expand.exe" for msi database and packaging
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski	my $onefile;
82*b1cdbd2cSJim Jagielski	my $error = 0;
83*b1cdbd2cSJim Jagielski	my $pathvariable = $ENV{'PATH'};
84*b1cdbd2cSJim Jagielski	my $local_pathseparator = $installer::globals::pathseparator;
85*b1cdbd2cSJim Jagielski
86*b1cdbd2cSJim Jagielski	if( $^O =~ /cygwin/i )
87*b1cdbd2cSJim Jagielski	{	# When using cygwin's perl the PATH variable is POSIX style and ...
88*b1cdbd2cSJim Jagielski		$pathvariable = qx{cygpath -mp "$pathvariable"} ;
89*b1cdbd2cSJim Jagielski		# has to be converted to DOS style for further use.
90*b1cdbd2cSJim Jagielski		$local_pathseparator = ';';
91*b1cdbd2cSJim Jagielski	}
92*b1cdbd2cSJim Jagielski	if( $^O =~ /os2/i )
93*b1cdbd2cSJim Jagielski	{
94*b1cdbd2cSJim Jagielski		# has to be converted to DOS style for further use.
95*b1cdbd2cSJim Jagielski		$local_pathseparator = ';';
96*b1cdbd2cSJim Jagielski	}
97*b1cdbd2cSJim Jagielski	my $patharrayref = installer::converter::convert_stringlist_into_array(\$pathvariable, $local_pathseparator);
98*b1cdbd2cSJim Jagielski
99*b1cdbd2cSJim Jagielski	$installer::globals::patharray = $patharrayref;
100*b1cdbd2cSJim Jagielski
101*b1cdbd2cSJim Jagielski	my @needed_files_in_path = ();
102*b1cdbd2cSJim Jagielski
103*b1cdbd2cSJim Jagielski	if (($installer::globals::iswin) && ($installer::globals::iswindowsbuild))
104*b1cdbd2cSJim Jagielski	{
105*b1cdbd2cSJim Jagielski		@needed_files_in_path = ("zip.exe", "msiinfo.exe", "msidb.exe", "uuidgen.exe", "makecab.exe", "msitran.exe", "expand.exe");
106*b1cdbd2cSJim Jagielski	}
107*b1cdbd2cSJim Jagielski	elsif ($installer::globals::iswin || $installer::globals::isos2)
108*b1cdbd2cSJim Jagielski	{
109*b1cdbd2cSJim Jagielski		@needed_files_in_path = ("zip.exe");
110*b1cdbd2cSJim Jagielski	}
111*b1cdbd2cSJim Jagielski	else
112*b1cdbd2cSJim Jagielski	{
113*b1cdbd2cSJim Jagielski		@needed_files_in_path = ("zip");
114*b1cdbd2cSJim Jagielski	}
115*b1cdbd2cSJim Jagielski
116*b1cdbd2cSJim Jagielski	foreach $onefile ( @needed_files_in_path )
117*b1cdbd2cSJim Jagielski	{
118*b1cdbd2cSJim Jagielski		$installer::logger::Info->printf("...... searching %s ...\n", $onefile);
119*b1cdbd2cSJim Jagielski
120*b1cdbd2cSJim Jagielski		my $fileref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$onefile, $patharrayref , 0);
121*b1cdbd2cSJim Jagielski
122*b1cdbd2cSJim Jagielski		if ( $$fileref eq "" )
123*b1cdbd2cSJim Jagielski		{
124*b1cdbd2cSJim Jagielski			$error = 1;
125*b1cdbd2cSJim Jagielski			installer::logger::print_error( "$onefile not found\n" );
126*b1cdbd2cSJim Jagielski		}
127*b1cdbd2cSJim Jagielski		else
128*b1cdbd2cSJim Jagielski		{
129*b1cdbd2cSJim Jagielski			$installer::logger::Info->print( "\tFound: $$fileref\n" );
130*b1cdbd2cSJim Jagielski			# Saving the absolut path for msitran.exe. This is required for the determination of the checksum.
131*b1cdbd2cSJim Jagielski			if ( $onefile eq "msitran.exe" ) { $installer::globals::msitranpath = $$fileref; }
132*b1cdbd2cSJim Jagielski		}
133*b1cdbd2cSJim Jagielski	}
134*b1cdbd2cSJim Jagielski
135*b1cdbd2cSJim Jagielski	if ( $error )
136*b1cdbd2cSJim Jagielski	{
137*b1cdbd2cSJim Jagielski		installer::exiter::exit_program("ERROR: Could not find all needed files in path!", "check_system_path");
138*b1cdbd2cSJim Jagielski	}
139*b1cdbd2cSJim Jagielski
140*b1cdbd2cSJim Jagielski	# checking for epm, which has to be in the path or in the solver
141*b1cdbd2cSJim Jagielski
142*b1cdbd2cSJim Jagielski	if (( $installer::globals::call_epm ) && (!($installer::globals::iswindowsbuild)))
143*b1cdbd2cSJim Jagielski	{
144*b1cdbd2cSJim Jagielski		my $onefile = "epm";
145*b1cdbd2cSJim Jagielski		my $fileref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$onefile, $patharrayref , 0);
146*b1cdbd2cSJim Jagielski		if (!( $$fileref eq "" ))
147*b1cdbd2cSJim Jagielski		{
148*b1cdbd2cSJim Jagielski			$installer::globals::epm_in_path = 1;
149*b1cdbd2cSJim Jagielski
150*b1cdbd2cSJim Jagielski			if ( $$fileref =~ /^\s*\.\/epm\s*$/ )
151*b1cdbd2cSJim Jagielski			{
152*b1cdbd2cSJim Jagielski				my $currentdir = cwd();
153*b1cdbd2cSJim Jagielski				$$fileref =~ s/\./$currentdir/;
154*b1cdbd2cSJim Jagielski			}
155*b1cdbd2cSJim Jagielski
156*b1cdbd2cSJim Jagielski			$installer::globals::epm_path = $$fileref;
157*b1cdbd2cSJim Jagielski		}
158*b1cdbd2cSJim Jagielski	}
159*b1cdbd2cSJim Jagielski
160*b1cdbd2cSJim Jagielski	# checking, if upx can be found in path
161*b1cdbd2cSJim Jagielski
162*b1cdbd2cSJim Jagielski	if ( $installer::globals::iswindowsbuild ) { $installer::globals::upxfile = "upx.exe"; }
163*b1cdbd2cSJim Jagielski	else { $installer::globals::upxfile = "upx"; }
164*b1cdbd2cSJim Jagielski
165*b1cdbd2cSJim Jagielski	my $upxfilename = $installer::globals::upxfile;
166*b1cdbd2cSJim Jagielski	my $upxfileref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$upxfilename, $patharrayref , 0);
167*b1cdbd2cSJim Jagielski
168*b1cdbd2cSJim Jagielski	if (!( $$upxfileref eq "" ))
169*b1cdbd2cSJim Jagielski	{
170*b1cdbd2cSJim Jagielski		$installer::globals::upx_in_path = 1;
171*b1cdbd2cSJim Jagielski		$installer::globals::upxfile = $$upxfileref;
172*b1cdbd2cSJim Jagielski		$installer::logger::Info->print( "\tFound: $$upxfileref\n" );
173*b1cdbd2cSJim Jagielski	}
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim Jagielski}
176*b1cdbd2cSJim Jagielski
177*b1cdbd2cSJim Jagielski######################################################################
178*b1cdbd2cSJim Jagielski# Determining the version of file makecab.exe
179*b1cdbd2cSJim Jagielski######################################################################
180*b1cdbd2cSJim Jagielski
181*b1cdbd2cSJim Jagielskisub get_makecab_version
182*b1cdbd2cSJim Jagielski{
183*b1cdbd2cSJim Jagielski	my $makecabversion = -1;
184*b1cdbd2cSJim Jagielski
185*b1cdbd2cSJim Jagielski	my $systemcall = "makecab.exe |";
186*b1cdbd2cSJim Jagielski	my @makecaboutput = ();
187*b1cdbd2cSJim Jagielski
188*b1cdbd2cSJim Jagielski	open (CAB, $systemcall);
189*b1cdbd2cSJim Jagielski	while (<CAB>) { push(@makecaboutput, $_); }
190*b1cdbd2cSJim Jagielski	close (CAB);
191*b1cdbd2cSJim Jagielski
192*b1cdbd2cSJim Jagielski	my $returnvalue = $?;	# $? contains the return value of the systemcall
193*b1cdbd2cSJim Jagielski
194*b1cdbd2cSJim Jagielski	if ($returnvalue)
195*b1cdbd2cSJim Jagielski	{
196*b1cdbd2cSJim Jagielski        $installer::logger::Global->printf("ERROR: Could not execute \"%s\"!\n", $systemcall);
197*b1cdbd2cSJim Jagielski	}
198*b1cdbd2cSJim Jagielski	else
199*b1cdbd2cSJim Jagielski	{
200*b1cdbd2cSJim Jagielski        $installer::logger::Global->printf("Success: Executed \"%s\" successfully!\n", $systemcall);
201*b1cdbd2cSJim Jagielski
202*b1cdbd2cSJim Jagielski		my $versionline = "";
203*b1cdbd2cSJim Jagielski
204*b1cdbd2cSJim Jagielski		for ( my $i = 0; $i <= $#makecaboutput; $i++ )
205*b1cdbd2cSJim Jagielski		{
206*b1cdbd2cSJim Jagielski			if ( $makecaboutput[$i] =~ /\bVersion\b/i )
207*b1cdbd2cSJim Jagielski			{
208*b1cdbd2cSJim Jagielski				$versionline = $makecaboutput[$i];
209*b1cdbd2cSJim Jagielski				last;
210*b1cdbd2cSJim Jagielski			}
211*b1cdbd2cSJim Jagielski		}
212*b1cdbd2cSJim Jagielski
213*b1cdbd2cSJim Jagielski        $installer::logger::Global->printf("%s\n", $versionline);
214*b1cdbd2cSJim Jagielski
215*b1cdbd2cSJim Jagielski		if ( $versionline =~ /\bVersion\b\s+(\d+[\d\.]+\d+)\s+/ )
216*b1cdbd2cSJim Jagielski		{
217*b1cdbd2cSJim Jagielski			$makecabversion = $1;
218*b1cdbd2cSJim Jagielski		}
219*b1cdbd2cSJim Jagielski
220*b1cdbd2cSJim Jagielski		# Only using the first number
221*b1cdbd2cSJim Jagielski
222*b1cdbd2cSJim Jagielski		if ( $makecabversion =~ /^\s*(\d+?)\D*/ )
223*b1cdbd2cSJim Jagielski		{
224*b1cdbd2cSJim Jagielski			$makecabversion = $1;
225*b1cdbd2cSJim Jagielski		}
226*b1cdbd2cSJim Jagielski
227*b1cdbd2cSJim Jagielski        $installer::logger::Global->printf("Using version: %s\n", $makecabversion);
228*b1cdbd2cSJim Jagielski	}
229*b1cdbd2cSJim Jagielski
230*b1cdbd2cSJim Jagielski	return $makecabversion;
231*b1cdbd2cSJim Jagielski}
232*b1cdbd2cSJim Jagielski
233*b1cdbd2cSJim Jagielski######################################################################
234*b1cdbd2cSJim Jagielski# Checking the version of file makecab.exe
235*b1cdbd2cSJim Jagielski######################################################################
236*b1cdbd2cSJim Jagielski
237*b1cdbd2cSJim Jagielskisub check_makecab_version
238*b1cdbd2cSJim Jagielski{
239*b1cdbd2cSJim Jagielski	# checking version of makecab.exe
240*b1cdbd2cSJim Jagielski	# Now it is guaranteed, that makecab.exe is in the path
241*b1cdbd2cSJim Jagielski
242*b1cdbd2cSJim Jagielski	my $do_check = 1;
243*b1cdbd2cSJim Jagielski
244*b1cdbd2cSJim Jagielski	my $makecabversion = get_makecab_version();
245*b1cdbd2cSJim Jagielski
246*b1cdbd2cSJim Jagielski    $installer::logger::Global->printf("Tested version: %s\n", $installer::globals::controlledmakecabversion);
247*b1cdbd2cSJim Jagielski
248*b1cdbd2cSJim Jagielski	if ( $makecabversion < 0 ) { $do_check = 0; } # version could not be determined
249*b1cdbd2cSJim Jagielski
250*b1cdbd2cSJim Jagielski	if ( $do_check )
251*b1cdbd2cSJim Jagielski	{
252*b1cdbd2cSJim Jagielski		if ( $makecabversion < $installer::globals::controlledmakecabversion )
253*b1cdbd2cSJim Jagielski		{
254*b1cdbd2cSJim Jagielski			# warning for OOo, error for inhouse products
255*b1cdbd2cSJim Jagielski			if ( $installer::globals::isopensourceproduct )
256*b1cdbd2cSJim Jagielski			{
257*b1cdbd2cSJim Jagielski				installer::logger::print_warning("Old version of makecab.exe. Found version: \"$makecabversion\", tested version: \"$installer::globals::controlledmakecabversion\"!\n");
258*b1cdbd2cSJim Jagielski			}
259*b1cdbd2cSJim Jagielski			else
260*b1cdbd2cSJim Jagielski			{
261*b1cdbd2cSJim Jagielski				installer::exiter::exit_program("makecab.exe too old. Found version: \"$makecabversion\", required version: \"$installer::globals::controlledmakecabversion\"!", "check_makecab_version");
262*b1cdbd2cSJim Jagielski			}
263*b1cdbd2cSJim Jagielski		}
264*b1cdbd2cSJim Jagielski	}
265*b1cdbd2cSJim Jagielski	else
266*b1cdbd2cSJim Jagielski	{
267*b1cdbd2cSJim Jagielski        $installer::logger::Global->print("Warning: No version check of makecab.exe\n");
268*b1cdbd2cSJim Jagielski	}
269*b1cdbd2cSJim Jagielski}
270*b1cdbd2cSJim Jagielski
271*b1cdbd2cSJim Jagielski######################################################################
272*b1cdbd2cSJim Jagielski# Reading the environment variables for the pathes in ziplist.
273*b1cdbd2cSJim Jagielski# solarpath, solarenvpath, solarcommonpath, os, osdef, pmiscpath
274*b1cdbd2cSJim Jagielski######################################################################
275*b1cdbd2cSJim Jagielski
276*b1cdbd2cSJim Jagielskisub check_system_environment
277*b1cdbd2cSJim Jagielski{
278*b1cdbd2cSJim Jagielski	my %variables = ();
279*b1cdbd2cSJim Jagielski	my $key;
280*b1cdbd2cSJim Jagielski	my $error = 0;
281*b1cdbd2cSJim Jagielski
282*b1cdbd2cSJim Jagielski	foreach $key ( @installer::globals::environmentvariables )
283*b1cdbd2cSJim Jagielski	{
284*b1cdbd2cSJim Jagielski		my $value = "";
285*b1cdbd2cSJim Jagielski		if ( $ENV{$key} ) { $value = $ENV{$key}; }
286*b1cdbd2cSJim Jagielski		$variables{$key} = $value;
287*b1cdbd2cSJim Jagielski
288*b1cdbd2cSJim Jagielski		if ( $value eq "" )
289*b1cdbd2cSJim Jagielski		{
290*b1cdbd2cSJim Jagielski			installer::logger::print_error( "$key not set in environment\n" );
291*b1cdbd2cSJim Jagielski			$error = 1;
292*b1cdbd2cSJim Jagielski		}
293*b1cdbd2cSJim Jagielski	}
294*b1cdbd2cSJim Jagielski
295*b1cdbd2cSJim Jagielski	if ( $error )
296*b1cdbd2cSJim Jagielski	{
297*b1cdbd2cSJim Jagielski		installer::exiter::exit_program("ERROR: Environment variable not set!", "check_system_environment");
298*b1cdbd2cSJim Jagielski	}
299*b1cdbd2cSJim Jagielski
300*b1cdbd2cSJim Jagielski	return \%variables;
301*b1cdbd2cSJim Jagielski}
302*b1cdbd2cSJim Jagielski
303*b1cdbd2cSJim Jagielski
304*b1cdbd2cSJim Jagielskisub prepare_error_processing ()
305*b1cdbd2cSJim Jagielski{
306*b1cdbd2cSJim Jagielski    @ErrorMessages = ();
307*b1cdbd2cSJim Jagielski}
308*b1cdbd2cSJim Jagielski
309*b1cdbd2cSJim Jagielski=item filter_log_error ($relative_time, $log_id, $process_id, $message)
310*b1cdbd2cSJim Jagielski
311*b1cdbd2cSJim Jagielski    Process the given log message.  Returns $message unaltered.
312*b1cdbd2cSJim Jagielski
313*b1cdbd2cSJim Jagielski=cut
314*b1cdbd2cSJim Jagielskisub filter_log_error ($$$$)
315*b1cdbd2cSJim Jagielski{
316*b1cdbd2cSJim Jagielski    my ($relative_time, $log_id, $process_id, $message) = @_;
317*b1cdbd2cSJim Jagielski
318*b1cdbd2cSJim Jagielski    if ($message =~ /\berror\b/i)
319*b1cdbd2cSJim Jagielski    {
320*b1cdbd2cSJim Jagielski        # Message contains the word "error".  Now we have to find out if it is relevant.
321*b1cdbd2cSJim Jagielski
322*b1cdbd2cSJim Jagielski        # Remove all filenames that contain the word "Error".
323*b1cdbd2cSJim Jagielski		my $work_string = $message;
324*b1cdbd2cSJim Jagielski		$work_string =~ s/Error\.(idt|mlf|ulf|idl|html|hpp|ipp)//g;
325*b1cdbd2cSJim Jagielski
326*b1cdbd2cSJim Jagielski		if ($work_string =~ /\bError\b/i)
327*b1cdbd2cSJim Jagielski		{
328*b1cdbd2cSJim Jagielski            # This really is an error message.
329*b1cdbd2cSJim Jagielski            push @ErrorMessages, {'relative_time' => $relative_time,
330*b1cdbd2cSJim Jagielski                                  'message' => $message};
331*b1cdbd2cSJim Jagielski		}
332*b1cdbd2cSJim Jagielski	}
333*b1cdbd2cSJim Jagielski
334*b1cdbd2cSJim Jagielski    return $message;
335*b1cdbd2cSJim Jagielski}
336*b1cdbd2cSJim Jagielski
337*b1cdbd2cSJim Jagielski
338*b1cdbd2cSJim Jagielski
339*b1cdbd2cSJim Jagielski
340*b1cdbd2cSJim Jagielskisub printocessed_error_lines ()
341*b1cdbd2cSJim Jagielski{
342*b1cdbd2cSJim Jagielski    my $lines = [];
343*b1cdbd2cSJim Jagielski
344*b1cdbd2cSJim Jagielski    foreach my $line (@ErrorMessages)
345*b1cdbd2cSJim Jagielski    {
346*b1cdbd2cSJim Jagielski        push @$lines, sprintf("    %12.6f : %s", $line->{'relative_time'}, $line->{'message'});
347*b1cdbd2cSJim Jagielski    }
348*b1cdbd2cSJim Jagielski
349*b1cdbd2cSJim Jagielski    return $lines;
350*b1cdbd2cSJim Jagielski}
351*b1cdbd2cSJim Jagielski
352*b1cdbd2cSJim Jagielski
353*b1cdbd2cSJim Jagielski
354*b1cdbd2cSJim Jagielski
355*b1cdbd2cSJim Jagielski=item check_logfile()
356*b1cdbd2cSJim Jagielski
357*b1cdbd2cSJim Jagielski    Print all error messages (typically at the end) on the console.
358*b1cdbd2cSJim Jagielski
359*b1cdbd2cSJim Jagielski=cut
360*b1cdbd2cSJim Jagielskisub check_logfile ()
361*b1cdbd2cSJim Jagielski{
362*b1cdbd2cSJim Jagielski	my ($logfile) = @_;
363*b1cdbd2cSJim Jagielski
364*b1cdbd2cSJim Jagielski	my @errors = ();
365*b1cdbd2cSJim Jagielski	my @output = ();
366*b1cdbd2cSJim Jagielski
367*b1cdbd2cSJim Jagielski	my $ignore_errors = ( ! $installer::globals::pro ) && ( $installer::globals::ignore_error_in_logfile );
368*b1cdbd2cSJim Jagielski	my $contains_errors = scalar @ErrorMessages > 0;
369*b1cdbd2cSJim Jagielski
370*b1cdbd2cSJim Jagielski    # Format errors
371*b1cdbd2cSJim Jagielski	if ($contains_errors)
372*b1cdbd2cSJim Jagielski    {
373*b1cdbd2cSJim Jagielski        push(@output, "\n");
374*b1cdbd2cSJim Jagielski        push(@output, "*********************************************************************\n");
375*b1cdbd2cSJim Jagielski        if ($ignore_errors)
376*b1cdbd2cSJim Jagielski        {
377*b1cdbd2cSJim Jagielski            push(@output, "The following errors in the log file were ignored:\n");
378*b1cdbd2cSJim Jagielski        }
379*b1cdbd2cSJim Jagielski        else
380*b1cdbd2cSJim Jagielski        {
381*b1cdbd2cSJim Jagielski            push(@output, "ERROR: The following errors occured in packaging process:\n");
382*b1cdbd2cSJim Jagielski        }
383*b1cdbd2cSJim Jagielski        push(@output, "\n");
384*b1cdbd2cSJim Jagielski
385*b1cdbd2cSJim Jagielski        foreach my $line (@ErrorMessages)
386*b1cdbd2cSJim Jagielski        {
387*b1cdbd2cSJim Jagielski            push @output, sprintf("    %12.6f : %s", $line->{'relative_time'}, $line->{'message'});
388*b1cdbd2cSJim Jagielski        }
389*b1cdbd2cSJim Jagielski
390*b1cdbd2cSJim Jagielski		push(@output, "*********************************************************************\n");
391*b1cdbd2cSJim Jagielski	}
392*b1cdbd2cSJim Jagielski
393*b1cdbd2cSJim Jagielski    # Claim success if there where no errors or if errors are treated as warnings.
394*b1cdbd2cSJim Jagielski	if ( ! $contains_errors || $ignore_errors)
395*b1cdbd2cSJim Jagielski    {
396*b1cdbd2cSJim Jagielski		push(@output, "\n");
397*b1cdbd2cSJim Jagielski		push(@output, "***********************************************************\n");
398*b1cdbd2cSJim Jagielski		push(@output, "Successful packaging process!\n");
399*b1cdbd2cSJim Jagielski		push(@output, "***********************************************************\n");
400*b1cdbd2cSJim Jagielski	}
401*b1cdbd2cSJim Jagielski
402*b1cdbd2cSJim Jagielski	# Print the summary.
403*b1cdbd2cSJim Jagielski	installer::logger::include_header_into_logfile("Summary:");
404*b1cdbd2cSJim Jagielski	my $force = 1; # print this message even in 'quiet' mode
405*b1cdbd2cSJim Jagielski	foreach my $line (@output)
406*b1cdbd2cSJim Jagielski	{
407*b1cdbd2cSJim Jagielski		$installer::logger::Info->print($line, $force);
408*b1cdbd2cSJim Jagielski	}
409*b1cdbd2cSJim Jagielski
410*b1cdbd2cSJim Jagielski    # Delete the accumulated error messages.  The @ErrorMessages will now contain
411*b1cdbd2cSJim Jagielski    # lines caused by printing those error messages.
412*b1cdbd2cSJim Jagielski    @ErrorMessages = ();
413*b1cdbd2cSJim Jagielski
414*b1cdbd2cSJim Jagielski    @installer::globals::errorlogfileinfo = @output;
415*b1cdbd2cSJim Jagielski
416*b1cdbd2cSJim Jagielski	return $contains_error && ! $ignore_error;
417*b1cdbd2cSJim Jagielski}
418*b1cdbd2cSJim Jagielski
419*b1cdbd2cSJim Jagielski#############################################################
420*b1cdbd2cSJim Jagielski# Determining the ship installation directory
421*b1cdbd2cSJim Jagielski#############################################################
422*b1cdbd2cSJim Jagielski
423*b1cdbd2cSJim Jagielskisub determine_ship_directory
424*b1cdbd2cSJim Jagielski{
425*b1cdbd2cSJim Jagielski	my ($languagesref) = @_;
426*b1cdbd2cSJim Jagielski
427*b1cdbd2cSJim Jagielski	if (!( $ENV{'SHIPDRIVE'} )) { installer::exiter::exit_program("ERROR: SHIPDRIVE must be set for updater!", "determine_ship_directory"); }
428*b1cdbd2cSJim Jagielski
429*b1cdbd2cSJim Jagielski	my $shipdrive = $ENV{'SHIPDRIVE'};
430*b1cdbd2cSJim Jagielski
431*b1cdbd2cSJim Jagielski	my $languagestring = installer::languages::get_language_directory_name($$languagesref);
432*b1cdbd2cSJim Jagielski
433*b1cdbd2cSJim Jagielski	my $productstring = $installer::globals::product;
434*b1cdbd2cSJim Jagielski	my $productsubdir = "";
435*b1cdbd2cSJim Jagielski
436*b1cdbd2cSJim Jagielski	if ( $productstring =~ /^\s*(.+?)\_\_(.+?)\s*$/ )
437*b1cdbd2cSJim Jagielski	{
438*b1cdbd2cSJim Jagielski		$productstring = $1;
439*b1cdbd2cSJim Jagielski		$productsubdir = $2;
440*b1cdbd2cSJim Jagielski	}
441*b1cdbd2cSJim Jagielski
442*b1cdbd2cSJim Jagielski	if ( $installer::globals::languagepack ) { $productstring = $productstring . "_languagepack"; }
443*b1cdbd2cSJim Jagielski	if ( $installer::globals::patch ) { $productstring = $productstring . "_patch"; }
444*b1cdbd2cSJim Jagielski
445*b1cdbd2cSJim Jagielski	my $destdir = $shipdrive . $installer::globals::separator . $installer::globals::compiler .
446*b1cdbd2cSJim Jagielski				$installer::globals::productextension . $installer::globals::separator .
447*b1cdbd2cSJim Jagielski				$productstring . $installer::globals::separator;
448*b1cdbd2cSJim Jagielski
449*b1cdbd2cSJim Jagielski	if ( $productsubdir ) { $destdir = $destdir . $productsubdir . $installer::globals::separator; }
450*b1cdbd2cSJim Jagielski
451*b1cdbd2cSJim Jagielski	$destdir = $destdir . $installer::globals::installertypedir . $installer::globals::separator .
452*b1cdbd2cSJim Jagielski				$installer::globals::build . "_" . $installer::globals::lastminor . "_" .
453*b1cdbd2cSJim Jagielski				"native_inprogress-number_" . $languagestring . "\." . $installer::globals::buildid;
454*b1cdbd2cSJim Jagielski
455*b1cdbd2cSJim Jagielski    $installer::logger::Global->print("\n");
456*b1cdbd2cSJim Jagielski    $installer::logger::Global->printf("Setting ship directory: %s\n", $destdir);
457*b1cdbd2cSJim Jagielski
458*b1cdbd2cSJim Jagielski	return $destdir;
459*b1cdbd2cSJim Jagielski}
460*b1cdbd2cSJim Jagielski
461*b1cdbd2cSJim Jagielski#############################################################
462*b1cdbd2cSJim Jagielski# Controlling if this is an official RE pack process
463*b1cdbd2cSJim Jagielski#############################################################
464*b1cdbd2cSJim Jagielski
465*b1cdbd2cSJim Jagielskisub check_updatepack
466*b1cdbd2cSJim Jagielski{
467*b1cdbd2cSJim Jagielski	my $shipdrive = "";
468*b1cdbd2cSJim Jagielski	my $filename = "";
469*b1cdbd2cSJim Jagielski	my $infoline = "";
470*b1cdbd2cSJim Jagielski
471*b1cdbd2cSJim Jagielski	if ( $ENV{'UPDATER'} )	# the environment variable UPDATER has to be set
472*b1cdbd2cSJim Jagielski	{
473*b1cdbd2cSJim Jagielski        $installer::logger::Global->print("\n");
474*b1cdbd2cSJim Jagielski        $installer::logger::Global->print("Environment variable UPDATER set\n");
475*b1cdbd2cSJim Jagielski
476*b1cdbd2cSJim Jagielski		if ( ! $ENV{'CWS_WORK_STAMP'} )	# the environment variable CWS_WORK_STAMP must not be set (set only in CWS)
477*b1cdbd2cSJim Jagielski		{
478*b1cdbd2cSJim Jagielski            $installer::logger::Global->print("Environment variable CWS_WORK_STAMP not set\n");
479*b1cdbd2cSJim Jagielski
480*b1cdbd2cSJim Jagielski			if ( $ENV{'SHIPDRIVE'} )	# the environment variable SHIPDRIVE must be set
481*b1cdbd2cSJim Jagielski			{
482*b1cdbd2cSJim Jagielski				$shipdrive = $ENV{'SHIPDRIVE'};
483*b1cdbd2cSJim Jagielski                $installer::logger::Global->printf("Ship drive defined: %s\n", $shipdrive);
484*b1cdbd2cSJim Jagielski
485*b1cdbd2cSJim Jagielski				if ( -d $shipdrive )    # SHIPDRIVE must be a directory
486*b1cdbd2cSJim Jagielski				{
487*b1cdbd2cSJim Jagielski                    $installer::logger::Global->print("Ship drive exists\n");
488*b1cdbd2cSJim Jagielski
489*b1cdbd2cSJim Jagielski					# try to write into $shipdrive
490*b1cdbd2cSJim Jagielski
491*b1cdbd2cSJim Jagielski					my $directory = $installer::globals::product . "_" . $installer::globals::compiler . "_" . $installer::globals::buildid . "_" . $installer::globals::languageproduct . "_test_$$";
492*b1cdbd2cSJim Jagielski					$directory =~ s/\,/\_/g;	# for the list of languages
493*b1cdbd2cSJim Jagielski					$directory =~ s/\-/\_/g;	# for en-US, pt-BR, ...
494*b1cdbd2cSJim Jagielski					$directory = $shipdrive . $installer::globals::separator . $directory;
495*b1cdbd2cSJim Jagielski
496*b1cdbd2cSJim Jagielski                    $installer::logger::Global->printf("Try to create directory: %s\n", $directory);
497*b1cdbd2cSJim Jagielski
498*b1cdbd2cSJim Jagielski					# saving this directory for later removal
499*b1cdbd2cSJim Jagielski					$installer::globals::shiptestdirectory = $directory;
500*b1cdbd2cSJim Jagielski
501*b1cdbd2cSJim Jagielski					if ( installer::systemactions::try_to_create_directory($directory))
502*b1cdbd2cSJim Jagielski					{
503*b1cdbd2cSJim Jagielski                        $installer::logger::Global->print("Write access on Ship drive\n");
504*b1cdbd2cSJim Jagielski                        $installer::logger::Global->print(
505*b1cdbd2cSJim Jagielski                            "Ship test directory %s was successfully created\n",
506*b1cdbd2cSJim Jagielski                            $installer::globals::shiptestdirectory);
507*b1cdbd2cSJim Jagielski						my $systemcall = "rmdir $directory";
508*b1cdbd2cSJim Jagielski						my $returnvalue = system($systemcall);
509*b1cdbd2cSJim Jagielski
510*b1cdbd2cSJim Jagielski						# 5th condition: No local build environment.
511*b1cdbd2cSJim Jagielski						# In this case the content of SOLARENV starts with the content of SOL_TMP
512*b1cdbd2cSJim Jagielski
513*b1cdbd2cSJim Jagielski						my $solarenv = "";
514*b1cdbd2cSJim Jagielski						my $sol_tmp;
515*b1cdbd2cSJim Jagielski						if ( $ENV{'SOLARENV'} ) { $solarenv = $ENV{'SOLARENV'}; }
516*b1cdbd2cSJim Jagielski
517*b1cdbd2cSJim Jagielski                        $installer::logger::Global->printf("Environment variable SOLARENV: %s\n", $solarenv);
518*b1cdbd2cSJim Jagielski
519*b1cdbd2cSJim Jagielski						if ( $ENV{'SOL_TMP'} )
520*b1cdbd2cSJim Jagielski                        {
521*b1cdbd2cSJim Jagielski                            $sol_tmp = $ENV{'SOL_TMP'};
522*b1cdbd2cSJim Jagielski						    $infoline = "Environment variable SOL_TMP: $sol_tmp\n";
523*b1cdbd2cSJim Jagielski                        } else {
524*b1cdbd2cSJim Jagielski                            $infoline = "Environment variable SOL_TMP not set\n";
525*b1cdbd2cSJim Jagielski                        }
526*b1cdbd2cSJim Jagielski                        $installer::logger::Global->print($infoline);
527*b1cdbd2cSJim Jagielski
528*b1cdbd2cSJim Jagielski						if ( defined $sol_tmp && ( $solarenv =~ /^\s*\Q$sol_tmp\E/ ))
529*b1cdbd2cSJim Jagielski						{
530*b1cdbd2cSJim Jagielski                            $installer::logger::Global->print("Content of SOLARENV starts with the content of SOL_TMP\: Local environment -\> No Updatepack\n");
531*b1cdbd2cSJim Jagielski						}
532*b1cdbd2cSJim Jagielski						else
533*b1cdbd2cSJim Jagielski						{
534*b1cdbd2cSJim Jagielski							$installer::logger::Global->print("Content of SOLARENV does not start with the content of SOL_TMP: No local environment\n");
535*b1cdbd2cSJim Jagielski
536*b1cdbd2cSJim Jagielski							$installer::globals::updatepack = 1;	# That's it
537*b1cdbd2cSJim Jagielski						}
538*b1cdbd2cSJim Jagielski
539*b1cdbd2cSJim Jagielski						# Additional logging information for the temporary ship directory
540*b1cdbd2cSJim Jagielski
541*b1cdbd2cSJim Jagielski						if ( -d $installer::globals::shiptestdirectory )
542*b1cdbd2cSJim Jagielski						{
543*b1cdbd2cSJim Jagielski                            $installer::logger::Global->printf(
544*b1cdbd2cSJim Jagielski                                "Ship test directory %s still exists. Trying removal later again.\n",
545*b1cdbd2cSJim Jagielski                                $installer::globals::shiptestdirectory);
546*b1cdbd2cSJim Jagielski						}
547*b1cdbd2cSJim Jagielski						else
548*b1cdbd2cSJim Jagielski						{
549*b1cdbd2cSJim Jagielski                            $installer::logger::Global->printf(
550*b1cdbd2cSJim Jagielski                                "Ship test directory %s was successfully removed.\n",
551*b1cdbd2cSJim Jagielski                                $installer::globals::shiptestdirectory);
552*b1cdbd2cSJim Jagielski						}
553*b1cdbd2cSJim Jagielski					}
554*b1cdbd2cSJim Jagielski					else
555*b1cdbd2cSJim Jagielski					{
556*b1cdbd2cSJim Jagielski                        $installer::logger::Global->print("No write access on Ship drive\n");
557*b1cdbd2cSJim Jagielski                        $installer::logger::Global->printf("Failed to create directory \n", $directory);
558*b1cdbd2cSJim Jagielski						if ( defined $ENV{'BSCLIENT'} && ( uc $ENV{'BSCLIENT'} eq 'TRUE' ) )
559*b1cdbd2cSJim Jagielski                        {
560*b1cdbd2cSJim Jagielski							installer::exiter::exit_program("ERROR: No write access to SHIPDRIVE allthough BSCLIENT is set.", "check_updatepack");
561*b1cdbd2cSJim Jagielski						}
562*b1cdbd2cSJim Jagielski					}
563*b1cdbd2cSJim Jagielski				}
564*b1cdbd2cSJim Jagielski				else
565*b1cdbd2cSJim Jagielski				{
566*b1cdbd2cSJim Jagielski                    $installer::logger::Global->print("Ship drive not found: No updatepack\n");
567*b1cdbd2cSJim Jagielski				}
568*b1cdbd2cSJim Jagielski			}
569*b1cdbd2cSJim Jagielski			else
570*b1cdbd2cSJim Jagielski			{
571*b1cdbd2cSJim Jagielski                $installer::logger::Global->print("Environment variable SHIPDRIVE not set: No updatepack\n");
572*b1cdbd2cSJim Jagielski			}
573*b1cdbd2cSJim Jagielski		}
574*b1cdbd2cSJim Jagielski		else
575*b1cdbd2cSJim Jagielski		{
576*b1cdbd2cSJim Jagielski            $installer::logger::Global->print("Environment variable CWS_WORK_STAMP defined: No updatepack\n");
577*b1cdbd2cSJim Jagielski		}
578*b1cdbd2cSJim Jagielski	}
579*b1cdbd2cSJim Jagielski
580*b1cdbd2cSJim Jagielski	if ( $installer::globals::updatepack )
581*b1cdbd2cSJim Jagielski    {
582*b1cdbd2cSJim Jagielski        $installer::logger::Global->print("Setting updatepack true\n");
583*b1cdbd2cSJim Jagielski        $installer::logger::Global->print("\n");
584*b1cdbd2cSJim Jagielski    }
585*b1cdbd2cSJim Jagielski	else
586*b1cdbd2cSJim Jagielski    {
587*b1cdbd2cSJim Jagielski        $installer::logger::Global->print("\n");
588*b1cdbd2cSJim Jagielski        $installer::logger::Global->print("No updatepack\n");
589*b1cdbd2cSJim Jagielski    }
590*b1cdbd2cSJim Jagielski
591*b1cdbd2cSJim Jagielski}
592*b1cdbd2cSJim Jagielski
593*b1cdbd2cSJim Jagielski#############################################################
594*b1cdbd2cSJim Jagielski# Reading the Windows list file for language encodings
595*b1cdbd2cSJim Jagielski#############################################################
596*b1cdbd2cSJim Jagielski
597*b1cdbd2cSJim Jagielskisub read_encodinglist
598*b1cdbd2cSJim Jagielski{
599*b1cdbd2cSJim Jagielski	my ($patharrayref) = @_;
600*b1cdbd2cSJim Jagielski
601*b1cdbd2cSJim Jagielski	my $fileref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$installer::globals::encodinglistname, $patharrayref , 0);
602*b1cdbd2cSJim Jagielski
603*b1cdbd2cSJim Jagielski	if ( $$fileref eq "" ) { installer::exiter::exit_program("ERROR: Did not find Windows encoding list $installer::globals::encodinglistname!", "read_encodinglist"); }
604*b1cdbd2cSJim Jagielski
605*b1cdbd2cSJim Jagielski    $installer::logger::Global->printf("Found encoding file: %s\n", $$fileref);
606*b1cdbd2cSJim Jagielski
607*b1cdbd2cSJim Jagielski	my $encodinglist = installer::files::read_file($$fileref);
608*b1cdbd2cSJim Jagielski
609*b1cdbd2cSJim Jagielski	my %msiencoding = ();
610*b1cdbd2cSJim Jagielski	my %msilanguage = ();
611*b1cdbd2cSJim Jagielski
612*b1cdbd2cSJim Jagielski	# Controlling the encoding list
613*b1cdbd2cSJim Jagielski
614*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$encodinglist}; $i++ )
615*b1cdbd2cSJim Jagielski	{
616*b1cdbd2cSJim Jagielski		my $line = ${$encodinglist}[$i];
617*b1cdbd2cSJim Jagielski
618*b1cdbd2cSJim Jagielski		if ( $line =~ /^\s*\#/ ) { next; }	# this is a comment line
619*b1cdbd2cSJim Jagielski
620*b1cdbd2cSJim Jagielski		if ( $line =~ /^(.*?)(\#.*)$/ ) { $line = $1; }	# removing comments after "#"
621*b1cdbd2cSJim Jagielski
622*b1cdbd2cSJim Jagielski		if ( $line =~ /^\s*([\w-]+)\s*(\d+)\s*(\d+)\s*$/ )
623*b1cdbd2cSJim Jagielski		{
624*b1cdbd2cSJim Jagielski			my $onelanguage = $1;
625*b1cdbd2cSJim Jagielski			my $codepage = $2;
626*b1cdbd2cSJim Jagielski			my $windowslanguage = $3;
627*b1cdbd2cSJim Jagielski
628*b1cdbd2cSJim Jagielski			$msiencoding{$onelanguage} = $codepage;
629*b1cdbd2cSJim Jagielski			$msilanguage{$onelanguage} = $windowslanguage;
630*b1cdbd2cSJim Jagielski		}
631*b1cdbd2cSJim Jagielski		else
632*b1cdbd2cSJim Jagielski		{
633*b1cdbd2cSJim Jagielski			installer::exiter::exit_program("ERROR: Wrong syntax in Windows encoding list $installer::globals::encodinglistname : en-US 1252 1033 !", "read_encodinglist");
634*b1cdbd2cSJim Jagielski		}
635*b1cdbd2cSJim Jagielski	}
636*b1cdbd2cSJim Jagielski
637*b1cdbd2cSJim Jagielski	$installer::globals::msiencoding = \%msiencoding;
638*b1cdbd2cSJim Jagielski	$installer::globals::msilanguage = \%msilanguage;
639*b1cdbd2cSJim Jagielski
640*b1cdbd2cSJim Jagielski	# my $key;
641*b1cdbd2cSJim Jagielski	# foreach $key (keys %{$installer::globals::msiencoding}) { print "A Key: $key : Value: $installer::globals::msiencoding->{$key}\n"; }
642*b1cdbd2cSJim Jagielski	# foreach $key (keys %{$installer::globals::msilanguage}) { print "B Key: $key : Value: $installer::globals::msilanguage->{$key}\n"; }
643*b1cdbd2cSJim Jagielski
644*b1cdbd2cSJim Jagielski}
645*b1cdbd2cSJim Jagielski
646*b1cdbd2cSJim Jagielski#############################################################
647*b1cdbd2cSJim Jagielski# Only for Windows and Linux (RPM)there is currently
648*b1cdbd2cSJim Jagielski# a reliable mechanism to register extensions during
649*b1cdbd2cSJim Jagielski# installation process. Therefore it is for all other
650*b1cdbd2cSJim Jagielski# platforms forbidden to install oxt files into that
651*b1cdbd2cSJim Jagielski# directory, in which they are searched for registration.
652*b1cdbd2cSJim Jagielski#############################################################
653*b1cdbd2cSJim Jagielski
654*b1cdbd2cSJim Jagielskisub check_oxtfiles
655*b1cdbd2cSJim Jagielski{
656*b1cdbd2cSJim Jagielski	my ( $filesarray ) = @_;
657*b1cdbd2cSJim Jagielski
658*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$filesarray}; $i++ )
659*b1cdbd2cSJim Jagielski	{
660*b1cdbd2cSJim Jagielski		my $onefile = ${$filesarray}[$i];
661*b1cdbd2cSJim Jagielski
662*b1cdbd2cSJim Jagielski		if (( $onefile->{'Name'} ) && ( $onefile->{'Dir'} ))
663*b1cdbd2cSJim Jagielski		{
664*b1cdbd2cSJim Jagielski			if (( $onefile->{'Name'} =~ /\.oxt\s*$/ ) && ( $onefile->{'Dir'} eq $installer::globals::extensioninstalldir ))
665*b1cdbd2cSJim Jagielski			{
666*b1cdbd2cSJim Jagielski				installer::exiter::exit_program("There is currently only for Linux (RPM) and Windows a reliable mechanism to register extensions during installation.\nPlease remove file \"$onefile->{'gid'}\" from your installation set!\nYou can use \"\#ifdef WNT\" and \"\#ifdef LINUX\" in scp.", "check_oxtfiles");
667*b1cdbd2cSJim Jagielski			}
668*b1cdbd2cSJim Jagielski		}
669*b1cdbd2cSJim Jagielski	}
670*b1cdbd2cSJim Jagielski}
671*b1cdbd2cSJim Jagielski
672*b1cdbd2cSJim Jagielski#############################################################
673*b1cdbd2cSJim Jagielski# Check if Java is available to create xpd installer
674*b1cdbd2cSJim Jagielski#############################################################
675*b1cdbd2cSJim Jagielski
676*b1cdbd2cSJim Jagielskisub check_java_for_xpd
677*b1cdbd2cSJim Jagielski{
678*b1cdbd2cSJim Jagielski	my ( $allvariables ) = @_;
679*b1cdbd2cSJim Jagielski
680*b1cdbd2cSJim Jagielski	if ( ! $installer::globals::solarjavaset ) { $allvariables->{'XPDINSTALLER'} = 0; }
681*b1cdbd2cSJim Jagielski}
682*b1cdbd2cSJim Jagielski
683*b1cdbd2cSJim Jagielski####################################################################
684*b1cdbd2cSJim Jagielski# Setting global variable "$installer::globals::addchildprojects"
685*b1cdbd2cSJim Jagielski####################################################################
686*b1cdbd2cSJim Jagielski
687*b1cdbd2cSJim Jagielskisub set_addchildprojects
688*b1cdbd2cSJim Jagielski{
689*b1cdbd2cSJim Jagielski	my ($allvariables) = @_;
690*b1cdbd2cSJim Jagielski
691*b1cdbd2cSJim Jagielski	if (( $allvariables->{'JAVAPRODUCT'} ) ||
692*b1cdbd2cSJim Jagielski		( $allvariables->{'ADAPRODUCT'} ) ||
693*b1cdbd2cSJim Jagielski		( $allvariables->{'UREPRODUCT'} ) ||
694*b1cdbd2cSJim Jagielski		( $allvariables->{'ADDREQUIREDPACKAGES'} )) { $installer::globals::addchildprojects = 1; }
695*b1cdbd2cSJim Jagielski
696*b1cdbd2cSJim Jagielski	if ( $installer::globals::patch )
697*b1cdbd2cSJim Jagielski	{
698*b1cdbd2cSJim Jagielski		$installer::globals::addchildprojects = 0;	# no child projects for patches
699*b1cdbd2cSJim Jagielski	}
700*b1cdbd2cSJim Jagielski
701*b1cdbd2cSJim Jagielski    $installer::logger::Global->printf(
702*b1cdbd2cSJim Jagielski        "Value of \$installer::globals::addchildprojects: %s\n",
703*b1cdbd2cSJim Jagielski        $installer::globals::addchildprojects);
704*b1cdbd2cSJim Jagielski}
705*b1cdbd2cSJim Jagielski
706*b1cdbd2cSJim Jagielski####################################################################
707*b1cdbd2cSJim Jagielski# Setting global variable "$installer::globals::addjavainstaller"
708*b1cdbd2cSJim Jagielski####################################################################
709*b1cdbd2cSJim Jagielski
710*b1cdbd2cSJim Jagielskisub set_addjavainstaller
711*b1cdbd2cSJim Jagielski{
712*b1cdbd2cSJim Jagielski	my ($allvariables) = @_;
713*b1cdbd2cSJim Jagielski
714*b1cdbd2cSJim Jagielski	if ( $allvariables->{'JAVAINSTALLER'} ) { $installer::globals::addjavainstaller = 1; }
715*b1cdbd2cSJim Jagielski
716*b1cdbd2cSJim Jagielski	if ( $installer::globals::patch ) {	$installer::globals::addjavainstaller = 0; }
717*b1cdbd2cSJim Jagielski	if ( $installer::globals::languagepack ) { $installer::globals::addjavainstaller = 0; }
718*b1cdbd2cSJim Jagielski	if ( $allvariableshashref->{'XPDINSTALLER'} ) {	$installer::globals::addjavainstaller = 0; }
719*b1cdbd2cSJim Jagielski
720*b1cdbd2cSJim Jagielski    $installer::logger::Global->printf(
721*b1cdbd2cSJim Jagielski        "Value of \$installer::globals::addjavainstaller: %s\n",
722*b1cdbd2cSJim Jagielski        $installer::globals::addjavainstaller);
723*b1cdbd2cSJim Jagielski}
724*b1cdbd2cSJim Jagielski
725*b1cdbd2cSJim Jagielski#######################################################################
726*b1cdbd2cSJim Jagielski# Setting global variable "$installer::globals::addsystemintegration"
727*b1cdbd2cSJim Jagielski#######################################################################
728*b1cdbd2cSJim Jagielski
729*b1cdbd2cSJim Jagielskisub set_addsystemintegration
730*b1cdbd2cSJim Jagielski{
731*b1cdbd2cSJim Jagielski	my ($allvariables) = @_;
732*b1cdbd2cSJim Jagielski
733*b1cdbd2cSJim Jagielski	if ( $allvariables->{'ADDSYSTEMINTEGRATION'} ) { $installer::globals::addsystemintegration = 1; }
734*b1cdbd2cSJim Jagielski
735*b1cdbd2cSJim Jagielski	if ( $installer::globals::patch ) {	$installer::globals::addsystemintegration = 0; }
736*b1cdbd2cSJim Jagielski	if ( $installer::globals::languagepack ) { $installer::globals::addsystemintegration = 0; }
737*b1cdbd2cSJim Jagielski	if (( $installer::globals::packageformat eq "native" ) || ( $installer::globals::packageformat eq "portable" )) { $installer::globals::addsystemintegration = 0; }
738*b1cdbd2cSJim Jagielski
739*b1cdbd2cSJim Jagielski    $installer::logger::Global->printf(
740*b1cdbd2cSJim Jagielski        "Value of \$installer::globals::addsystemintegration: %s\n",
741*b1cdbd2cSJim Jagielski        $installer::globals::addsystemintegration);
742*b1cdbd2cSJim Jagielski}
743*b1cdbd2cSJim Jagielski
744*b1cdbd2cSJim Jagielski1;
745