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