diff options
Diffstat (limited to 'solenv/bin/modules/installer/setupscript.pm')
-rw-r--r-- | solenv/bin/modules/installer/setupscript.pm | 510 |
1 files changed, 0 insertions, 510 deletions
diff --git a/solenv/bin/modules/installer/setupscript.pm b/solenv/bin/modules/installer/setupscript.pm deleted file mode 100644 index 4e2fbf662..000000000 --- a/solenv/bin/modules/installer/setupscript.pm +++ /dev/null @@ -1,510 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -package installer::setupscript; - -use installer::existence; -use installer::exiter; -use installer::globals; -use installer::logger; -use installer::remover; -use installer::scriptitems; -use installer::ziplist; - -####################################################### -# Set setup script name, if not defined as parameter -####################################################### - -sub set_setupscript_name -{ - my ( $allsettingsarrayref, $includepatharrayref ) = @_; - - my $scriptnameref = installer::ziplist::getinfofromziplist($allsettingsarrayref, "script"); - - my $scriptname = $$scriptnameref; - - if ( $scriptname eq "" ) # not defined on command line and not in product list - { - installer::exiter::exit_program("ERROR: Setup script not defined on command line (-l) and not in product list!", "set_setupscript_name"); - } - - if ( $installer::globals::compiler =~ /wnt/ ) - { - $scriptname .= ".inf"; - } - else - { - $scriptname .= ".ins"; - } - - # and now the complete path for the setup script is needed - # The log file cannot be used, because this is the language independent section - - $scriptnameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$scriptname, $includepatharrayref, 1); - - $installer::globals::setupscriptname = $$scriptnameref; - - if ( $installer::globals::setupscriptname eq "" ) - { - installer::exiter::exit_program("ERROR: Script $scriptname not found!", "set_setupscript_name"); - } -} - -##################################################################### -# Reading script variables from installation object of script file -##################################################################### - -sub get_all_scriptvariables_from_installation_object -{ - my ($scriptref) = @_; - - my @installobjectvariables; - - for ( my $i = 0; $i <= $#{$scriptref}; $i++ ) - { - my $line = ${$scriptref}[$i]; - - if ( $line =~ /^\s*Installation\s+\w+\s*$/ ) # should be the first line - { - my $counter = $i+1; - my $installline = ${$scriptref}[$counter]; - - while (!($installline =~ /^\s*End\s*$/ )) - { - if ( $installline =~ /^\s*(\w+)\s+\=\s*(.*?)\s*\;\s*$/ ) - { - my $key = $1; - my $value = $2; - - # removing leading and ending " in $value - - if ( $value =~ /^\s*\"(.*)\"\s*$/ ) - { - $value = $1; - } - - $key = "\%" . uc($key); # $key is %PRODUCTNAME - - my $input = $key . " " . $value . "\n"; # $key can only be the first word - - push(@installobjectvariables ,$input); - } - - $counter++; - $installline = ${$scriptref}[$counter]; - } - } - - last; # not interesting after installation object - } - - return \@installobjectvariables; -} - -###################################################################### -# Including LCPRODUCTNAME into the array -###################################################################### - -sub add_lowercase_productname_setupscriptvariable -{ - my ( $variablesref ) = @_; - - for ( my $j = 0; $j <= $#{$variablesref}; $j++ ) - { - my $variableline = ${$variablesref}[$j]; - - my ($key, $value); - - if ( $variableline =~ /^\s*\%(\w+?)\s+(.*?)\s*$/ ) - { - $key = $1; - $value = $2; - - if ( $key eq "PRODUCTNAME" ) - { - my $newline = "\%LCPRODUCTNAME " . lc($value) . "\n"; - push(@{$variablesref} ,$newline); - my $original = $value; - $value =~ s/\s*//g; - $newline = "\%ONEWORDPRODUCTNAME " . $value . "\n"; - push(@{$variablesref} ,$newline); - $newline = "\%LCONEWORDPRODUCTNAME " . lc($value) . "\n"; - push(@{$variablesref} ,$newline); - $value = $original; - $value =~ s/\s*$//g; - $value =~ s/^\s*//g; - $value =~ s/ /\%20/g; - $newline = "\%MASKEDPRODUCTNAME " . $value . "\n"; - push(@{$variablesref} ,$newline); - $value = $original; - $value =~ s/\s/\_/g; - $newline = "\%UNIXPRODUCTNAME " . lc($value) . "\n"; - push(@{$variablesref} ,$newline); - $newline = "\%SYSTEMINTUNIXPACKAGENAME " . lc($value) . "\n"; - push(@{$variablesref} ,$newline); - $newline = "\%UNIXPACKAGENAME " . lc($value) . "\n"; - push(@{$variablesref} ,$newline); - $value = $original; - $value =~ s/\s/\_/g; - $value =~ s/\.//g; - $newline = "\%WITHOUTDOTUNIXPRODUCTNAME " . lc($value) . "\n"; - push(@{$variablesref} ,$newline); - $newline = "\%WITHOUTDOTUNIXPACKAGENAME " . lc($value) . "\n"; - push(@{$variablesref} ,$newline); - $newline = "\%SOLARISBRANDPACKAGENAME " . lc($value) . "\n"; - push(@{$variablesref} ,$newline); - $value = $original; - } - elsif ( $key eq "PRODUCTEXTENSION" ) - { - my $newline = "\%LCPRODUCTEXTENSION " . lc($value) . "\n"; - push(@{$variablesref} ,$newline); - } - elsif ( $key eq "PRODUCTVERSION" ) - { - $value =~ s/\.//g; - my $newline = "\%WITHOUTDOTPRODUCTVERSION " . $value . "\n"; - push(@{$variablesref} ,$newline); - } - elsif ( $key eq "OOOBASEVERSION" ) - { - $value =~ s/\.//g; - my $newline = "\%WITHOUTDOTOOOBASEVERSION " . $value . "\n"; - push(@{$variablesref} ,$newline); - } - - } - } -} - -###################################################################### -# Resolving the new introduced lowercase script variables -###################################################################### - -sub resolve_lowercase_productname_setupscriptvariable -{ - my ( $variablesref ) = @_; - - my %variables = (); - - # First step: Collecting variables - - for ( my $j = 0; $j <= $#{$variablesref}; $j++ ) - { - my $variableline = ${$variablesref}[$j]; - - my ($key, $value); - - if ( $variableline =~ /^\s*\%(\w+?)\s+(.*?)\s*$/ ) - { - $key = $1; - $value = $2; - $variables{$key} = $value; - } - } - - # Second step: Resolving variables - - for ( my $j = 0; $j <= $#{$variablesref}; $j++ ) - { - if ( ${$variablesref}[$j] =~ /\$\{(.*?)\}/ ) - { - my $key = $1; - ${$variablesref}[$j] =~ s/\$\{\Q$key\E\}/$variables{$key}/g; - } - } - -} - -###################################################################### -# Replacing all setup script variables inside the setup script file -###################################################################### - -sub replace_all_setupscriptvariables_in_script -{ - my ( $scriptref, $variablesref ) = @_; - - installer::logger::include_header_into_globallogfile("Replacing variables in setup script (start)"); - - # make hash of variables to be substituted if they appear in the script - my %subs; - for ( my $j = 0; $j <= $#{$variablesref}; $j++ ) - { - my $variableline = ${$variablesref}[$j]; - - if ( $variableline =~ /^\s*(\%\w+?)\s+(.*?)\s*$/ ) - { - $subs{$1}= $2; - } - } - - # This is far faster than running a regexp for each line - my $bigstring = ''; - for my $line (@{$scriptref}) { $bigstring = $bigstring . $line; } - - foreach my $key (sort { length ($b) <=> length ($a) } keys %subs) - { - # Attention: It must be possible to substitute "%PRODUCTNAMEn", "%PRODUCTNAME%PRODUCTVERSIONabc" - my $value = $subs{$key}; - $bigstring =~ s/$key/$value/g; - } - - my @newlines = split /\n/, $bigstring; - $scriptref = \@newlines; - - # now check for any mis-named '%' variables that we have left - my $num = 0; - for my $check (@newlines) - { - $num++; - if ( $check =~ /^.*\%\w+.*$/ ) - { - if (( $check =~ /%1/ ) || ( $check =~ /%2/ ) || ( $check =~ /%verify/ )) { next; } - my $infoline = "WARNING: mis-named or un-known '%' variable in setup script at line $num:\n$check\n"; - push( @installer::globals::globallogfileinfo, $infoline); - } - } - - installer::logger::include_header_into_globallogfile("Replacing variables in setup script (end)"); - - return $scriptref; -} - -####################################################################### -# Collecting all items of the type "searchitem" from the setup script -####################################################################### - -sub get_all_items_from_script -{ - my ($scriptref, $searchitem) = @_; - - my @allitemarray = (); - - my ($itemkey, $itemvalue); - - for ( my $i = 0; $i <= $#{$scriptref}; $i++ ) - { - my $line = ${$scriptref}[$i]; - - next unless ($line =~ /^\s*\Q$searchitem\E\s+(\S+)\s*$/); - my $gid = $1; - - my %oneitemhash = (); - my $ismultilang = 0; - - $oneitemhash{'gid'} = $gid; - - while (!( $line =~ /^\s*End\s*$/ )) - { - if ( $i >= $#{$scriptref} ) { - installer::exiter::exit_program("Invalid setup script file. End of file reached before 'End' line of '$searchitem' section.", "get_all_items_from_script"); - } - $line = ${$scriptref}[++$i]; - - if ( $line =~ /^\s*(.+?)\=\s*(.+?)\;\s*$/ ) # only oneliner! - { - $itemkey = $1; - $itemvalue = $2; - - $itemkey =~ s/\s+$//; - $itemvalue =~ s/\s+$//; - - installer::remover::remove_leading_and_ending_quotationmarks(\$itemvalue); - - $oneitemhash{$itemkey} = $itemvalue; - - $ismultilang ||= $itemkey =~ /^\S+\s+\(\S+\)$/; - } - elsif (($searchitem eq "Module") && - ($line =~ /^\s*.+?\s*\=\s*\(/) && - (!($line =~ /\)\;\s*$/))) # more than one line, for instance files at modules! - { - $line =~ /^\s*(.+?)\s*\=\s*(.+?)\s*$/; # the first line - $itemkey = $1; - $itemvalue = $2; - - # collecting the complete itemvalue - do - { - if ( $i >= $#{$scriptref} ) { - installer::exiter::exit_program("Invalid setup script file. Premature end of file.", "get_all_items_from_script"); - } - $line = ${$scriptref}[++$i]; - installer::remover::remove_leading_and_ending_whitespaces(\$line); - $itemvalue .= $line; - } while (!($line =~ /\)\;\s*$/)); - - # removing ending ";" - $itemvalue =~ s/\;\s*$//; - - $oneitemhash{$itemkey} = $itemvalue; - - $ismultilang ||= $itemkey =~ /^\S+\s+\(\S+\)$/; - } - } - - $oneitemhash{'ismultilingual'} = $ismultilang+0; - - push(@allitemarray, \%oneitemhash); - } - - return \@allitemarray; -} - -###################################################################### -# Collecting all folder at folderitems, that are predefined values -# For example: PREDEFINED_AUTOSTART -###################################################################### - -sub add_predefined_folder -{ - my ( $folderitemref, $folderref ) = @_; - - for ( my $i = 0; $i <= $#{$folderitemref}; $i++ ) - { - my $folderitem = ${$folderitemref}[$i]; - my $folderid = $folderitem->{'FolderID'}; - - if ( $folderid =~ /PREDEFINED_/ ) - { - if (! installer::existence::exists_in_array_of_hashes("gid", $folderid, $folderref)) - { - my %folder = (); - $folder{'ismultilingual'} = "0"; - $folder{'Name'} = ""; - $folder{'gid'} = $folderid; - - push(@{$folderref}, \%folder); - } - } - } -} - -##################################################################################### -# If folderitems are non-advertised, the component needs to have a registry key -# below HKCU as key path. Therefore it is required, to mark the file belonging -# to a non-advertised shortcut, that a special userreg_xxx registry key can be -# created during packing process. -##################################################################################### - -sub prepare_non_advertised_files -{ - my ( $folderitemref, $filesref ) = @_; - - for ( my $i = 0; $i <= $#{$folderitemref}; $i++ ) - { - my $folderitem = ${$folderitemref}[$i]; - my $styles = ""; - if ( $folderitem->{'Styles'} ) { $styles = $folderitem->{'Styles'}; } - - if ( $styles =~ /\bNON_ADVERTISED\b/ ) - { - my $fileid = $folderitem->{'FileID'}; - if ( $folderitem->{'ComponentIDFile'} ) { $fileid = $folderitem->{'ComponentIDFile'}; } - my $onefile = installer::worker::find_file_by_id($filesref, $fileid); - - # Attention: If $onefile with "FileID" is not found, this is not always an error. - # FileID can also contain an executable file, for example msiexec.exe. - if ( $onefile ne "" ) { $onefile->{'needs_user_registry_key'} = 1; } - } - } -} - -##################################################################################### -# Adding all variables defined in the installation object into the hash -# of all variables from the zip list file. -# This is needed if variables are defined in the installation object, -# but not in the zip list file. -# If there is a definition in the zip list file and in the installation -# object, the installation object is more important -##################################################################################### - -sub add_installationobject_to_variables -{ - my ($allvariables, $allscriptvariablesref) = @_; - - for ( my $i = 0; $i <= $#{$allscriptvariablesref}; $i++ ) - { - my $line = ${$allscriptvariablesref}[$i]; - - if ( $line =~ /^\s*\%(\w+)\s+(.*?)\s*$/ ) - { - my $key = $1; - my $value = $2; - - $allvariables->{$key} = $value; # overwrite existing values from zip.lst - } - } -} - -##################################################################################### -# Adding all variables, that must be defined, but are not defined until now. -# List of this varibles: @installer::globals::forced_properties -##################################################################################### - -sub add_forced_properties -{ - my ($allvariables) = @_; - - my $property; - foreach $property ( @installer::globals::forced_properties ) - { - if ( ! exists($allvariables->{$property}) ) { $allvariables->{$property} = ""; } - } -} - -##################################################################################### -# Some properties are created automatically. It should be possible to -# overwrite them, with PRESET properties. For example UNIXPRODUCTNAME -# with PRESETUNIXPRODUCTNAME, if this is defined and the automatic process -# does not deliver the desired results. -##################################################################################### - -sub replace_preset_properties -{ - my ($allvariables) = @_; - - # SOLARISBRANDPACKAGENAME - # needs to be replaced by - # PRESETSOLARISBRANDPACKAGENAME - - my @presetproperties = (); - push(@presetproperties, "SOLARISBRANDPACKAGENAME"); - push(@presetproperties, "SYSTEMINTUNIXPACKAGENAME"); - - - foreach $property ( @presetproperties ) - { - my $presetproperty = "PRESET" . $property; - if (( exists($allvariables->{$presetproperty}) ) && ( $allvariables->{$presetproperty} ne "" )) - { - $allvariables->{$property} = $allvariables->{$presetproperty}; - } - } -} - -1; |