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