diff options
Diffstat (limited to 'solenv/bin/modules/installer/windows/directory.pm')
-rw-r--r-- | solenv/bin/modules/installer/windows/directory.pm | 566 |
1 files changed, 0 insertions, 566 deletions
diff --git a/solenv/bin/modules/installer/windows/directory.pm b/solenv/bin/modules/installer/windows/directory.pm deleted file mode 100644 index 107ec018c..000000000 --- a/solenv/bin/modules/installer/windows/directory.pm +++ /dev/null @@ -1,566 +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::windows::directory; - -use installer::exiter; -use installer::files; -use installer::globals; -use installer::pathanalyzer; -use installer::windows::idtglobal; - -############################################################## -# Collecting all directory trees in global hash -############################################################## - -sub collectdirectorytrees -{ - my ( $directoryref ) = @_; - - for ( my $i = 0; $i <= $#{$directoryref}; $i++ ) - { - my $onedir = ${$directoryref}[$i]; - my $styles = ""; - if ( $onedir->{'Styles'} ) { $styles = $onedir->{'Styles'}; } - - if ( $styles ne "" ) - { - foreach my $treestyle ( keys %installer::globals::treestyles ) - { - if ( $styles =~ /\b$treestyle\b/ ) - { - my $hostname = $onedir->{'HostName'}; - # -> hostname is the key, the style the value! - $installer::globals::hostnametreestyles{$hostname} = $treestyle; - } - } - } - } -} - -############################################################## -# Overwriting global programfilesfolder, if required -############################################################## - -sub overwrite_programfilesfolder -{ - my ( $allvariables ) = @_; - - if ( $allvariables->{'PROGRAMFILESFOLDERNAME'} ) - { - $installer::globals::programfilesfolder = $allvariables->{'PROGRAMFILESFOLDERNAME'}; - } -} - -############################################################## -# Maximum length of directory name is 72. -# Taking care of underlines, which are the separator. -############################################################## - -sub make_short_dir_version -{ - my ($longstring, $length, $displayname) = @_; - - my $shortstring = ""; - my $infoline = ""; - my $savestring = $longstring; - - # Splitting the string at each "underline" and allowing only $length characters per directory name. - # Checking also uniqueness and length. - - my $stringarray = installer::converter::convert_stringlist_into_array_without_newline(\$longstring, "_"); - - foreach my $onestring ( @{$stringarray} ) - { - my $partstring = ""; - - if ( $onestring =~ /\-/ ) - { - my $localstringarray = installer::converter::convert_stringlist_into_array_without_newline(\$onestring, "-"); - foreach my $onelocalstring ( @{$localstringarray} ) - { - if ( length($onelocalstring) > $length ) { $onelocalstring = substr($onelocalstring, 0, $length); } - $partstring = $partstring . "-" . $onelocalstring; - } - $partstring =~ s/^\s*\-//; - } - else - { - if ( length($onestring) > $length ) { $partstring = substr($onestring, 0, $length); } - else { $partstring = $onestring; } - } - - $shortstring = $shortstring . "_" . $partstring; - } - - $shortstring =~ s/^\s*\_//; - - if ( length($shortstring) > 72 ) - { - my $shortlength = length($shortstring); - $infoline = "WARNING: Failed to create unique directory name with less than 72 characters: \"$displayname\" ($shortstring ($shortlength)).\n"; - push(@installer::globals::logfileinfo, $infoline); - } - - return $shortstring; -} - -############################################################## -# Adding unique directory names to the directory collection -############################################################## - -my $already_checked_the_frigging_directories_for_uniqueness = 0; - -sub create_unique_directorynames -{ - my ($directoryref, $allvariables) = @_; - - $installer::globals::officeinstalldirectoryset = 0; - - my %conversionhash = (); - my $infoline = ""; - my $errorcount = 0; - - for ( my $i = 0; $i <= $#{$directoryref}; $i++ ) - { - my $onedir = ${$directoryref}[$i]; - my $hostname = $onedir->{'HostName'}; - - my $uniquename = $hostname; - my $styles = ""; - if ( $onedir->{'Styles'} ) { $styles = $onedir->{'Styles'}; } - # get_path_from_fullqualifiedname(\$uniqueparentname); - # making /registry/schema/org/openoffice/VCL.xcs to VCL.xcs - - $uniquename =~ s/^\s*//g; # removing beginning white spaces - $uniquename =~ s/\s*$//g; # removing ending white spaces - $uniquename =~ s/\s//g; # removing white spaces - $uniquename =~ s/\_//g; # removing existing underlines - $uniquename =~ s/\.//g; # removing dots in directoryname - $uniquename =~ s/\Q$installer::globals::separator\E/\_/g; # replacing slash and backslash with underline - $uniquename =~ s/OpenOffice/OO/g; - $uniquename =~ s/LibreOffice/LO/g; - $uniquename =~ s/_registry/_rgy/g; - $uniquename =~ s/_registration/_rgn/g; - $uniquename =~ s/_extension/_ext/g; - $uniquename =~ s/_frame/_frm/g; - $uniquename =~ s/_table/_tbl/g; - $uniquename =~ s/_chart/_crt/g; - - my $startlength = 5; - - if ( ! $allvariables->{'NOSHORTDIRECTORYNAMES'} ) - { - # This process does not work for SDK, because of its long and similar pathes - $uniquename = make_short_dir_version($uniquename, $startlength, $hostname); # taking care of underlines! - } - - if ( !$already_checked_the_frigging_directories_for_uniqueness && - exists($installer::globals::alluniquedirectorynames{$uniquename}) ) - { - # This is an error, that must stop the packaging process - $errorcount++; - - $infoline = "$errorcount: Already existing unique directory: $uniquename\n"; - push( @installer::globals::logfileinfo, $infoline); - $infoline = "$errorcount: First full directory: $conversionhash{$uniquename}\n"; - push( @installer::globals::logfileinfo, $infoline); - $infoline = "$errorcount: Current full directory: $hostname\n"; - push( @installer::globals::logfileinfo, $infoline); - } - - $conversionhash{$uniquename} = $hostname; - - $installer::globals::alluniquedirectorynames{$uniquename} = 1; - - # Important: The unique parent is generated from the string $uniquename. Therefore counters - # like adding "_1" is not allowed to achive uniqueness, because this depends from other directories - # and does not deliver always the same result. - - my $uniqueparentname = $uniquename; - - if ( $uniqueparentname =~ /^\s*(.*)\_(.*?)\s*$/ ) # the underline is now the separator - { - $uniqueparentname = $1; - } - else - { - $uniqueparentname = $installer::globals::programfilesfolder; - } - - if ( $styles =~ /\bPROGRAMFILESFOLDER\b/ ) { $uniqueparentname = $installer::globals::programfilesfolder; } - if ( $styles =~ /\bCOMMONFILESFOLDER\b/ ) { $uniqueparentname = $installer::globals::commonfilesfolder; } - if ( $styles =~ /\bCOMMONAPPDATAFOLDER\b/ ) { $uniqueparentname = $installer::globals::commonappdatafolder; } - if ( $styles =~ /\bLOCALAPPDATAFOLDER\b/ ) { $uniqueparentname = $installer::globals::localappdatafolder; } - - if ( $styles =~ /\bSHAREPOINTPATH\b/ ) - { - $uniqueparentname = "SHAREPOINTPATH"; - $installer::globals::usesharepointpath = 1; - } - - $uniquename =~ s/\-/\_/g; # making "-" to "_" - $uniqueparentname =~ s/\-/\_/g; # making "-" to "_" - - $onedir->{'uniquename'} = $uniquename; - $onedir->{'uniqueparentname'} = $uniqueparentname; - - # setting the installlocation directory - if ( $styles =~ /\bISINSTALLLOCATION\b/ ) - { - if ( $installer::globals::installlocationdirectoryset ) { installer::exiter::exit_program("ERROR: Directory with flag ISINSTALLLOCATION alread set: \"$installer::globals::installlocationdirectory\".", "create_unique_directorynames"); } - $installer::globals::installlocationdirectory = $uniquename; - $installer::globals::installlocationdirectoryset = 1; - if ( $installer::globals::installlocationdirectory =~ /oracle_/i ) { $installer::globals::sundirexists = 1; } - } - - # setting the sundirectory - if ( $styles =~ /\bSUNDIRECTORY\b/ ) - { - if ( $installer::globals::vendordirectoryset ) { installer::exiter::exit_program("ERROR: Directory with flag SUNDIRECTORY alread set: \"$installer::globals::vendordirectory\".", "create_unique_directorynames"); } - $installer::globals::vendordirectory = $uniquename; - $installer::globals::vendordirectoryset = 1; - } - } - - if ( $errorcount > 0 ) - { - installer::exiter::exit_program("ERROR: Failed to create unique directory names.", "create_unique_directorynames"); - } -} - -##################################################### -# Adding ":." to selected default directory names -##################################################### - -sub check_sourcedir_addon -{ - my ( $onedir, $allvariableshashref ) = @_; - - if (($installer::globals::addchildprojects) || - ($installer::globals::patch) || - ($installer::globals::languagepack) || - ($installer::globals::helppack) || - ($allvariableshashref->{'CHANGETARGETDIR'})) - { - my $sourcediraddon = "\:\."; - $onedir->{'defaultdir'} = $onedir->{'defaultdir'} . $sourcediraddon; - } - -} - -##################################################### -# The directory with the style ISINSTALLLOCATION -# will be replaced by INSTALLLOCATION -##################################################### - -sub set_installlocation_directory -{ - my ( $directoryref, $allvariableshashref ) = @_; - - if ( ! $installer::globals::installlocationdirectoryset ) { installer::exiter::exit_program("ERROR: Directory with flag ISINSTALLLOCATION not set!", "set_installlocation_directory"); } - - for ( my $i = 0; $i <= $#{$directoryref}; $i++ ) - { - my $onedir = ${$directoryref}[$i]; - - if ( $onedir->{'uniquename'} eq $installer::globals::installlocationdirectory ) - { - $onedir->{'uniquename'} = "INSTALLLOCATION"; - check_sourcedir_addon($onedir, $allvariableshashref); - } - - if ( $onedir->{'uniquename'} eq $installer::globals::vendordirectory ) - { - check_sourcedir_addon($onedir, $allvariableshashref); - } - - if ( $onedir->{'uniqueparentname'} eq $installer::globals::installlocationdirectory ) - { - $onedir->{'uniqueparentname'} = "INSTALLLOCATION"; - } - } -} - -##################################################### -# Getting the name of the top level directory. This -# can have only one letter -##################################################### - -sub get_last_directory_name -{ - my ($completepathref) = @_; - - if ( $$completepathref =~ /^.*[\/\\](.+?)\s*$/ ) - { - $$completepathref = $1; - } -} - -##################################################### -# Creating the defaultdir for the file Director.idt -##################################################### - -sub create_defaultdir_directorynames -{ - my ($directoryref, $shortdirnamehashref) = @_; - - my @shortnames = (); - if ( $installer::globals::updatedatabase ) { @shortnames = values(%{$shortdirnamehashref}); } - elsif ( $installer::globals::prepare_winpatch ) { @shortnames = values(%installer::globals::saved83dirmapping); } - - for ( my $i = 0; $i <= $#{$directoryref}; $i++ ) - { - my $onedir = ${$directoryref}[$i]; - my $hostname = $onedir->{'HostName'}; - - $hostname =~ s/\Q$installer::globals::separator\E\s*$//; - get_last_directory_name(\$hostname); - my $uniquename = $onedir->{'uniquename'}; - my $shortstring; - if (( $installer::globals::updatedatabase ) && ( exists($shortdirnamehashref->{$uniquename}) )) - { - $shortstring = $shortdirnamehashref->{$uniquename}; - } - elsif (( $installer::globals::prepare_winpatch ) && ( exists($installer::globals::saved83dirmapping{$uniquename}) )) - { - $shortstring = $installer::globals::saved83dirmapping{$uniquename}; - } - else - { - $shortstring = installer::windows::idtglobal::make_eight_three_conform($hostname, "dir", \@shortnames); - } - - my $defaultdir; - - if ( $shortstring eq $hostname ) - { - $defaultdir = $hostname; - } - else - { - $defaultdir = $shortstring . "|" . $hostname; - } - - $onedir->{'defaultdir'} = $defaultdir; - - my $fontdir = ""; - if ( $onedir->{'Dir'} ) { $fontdir = $onedir->{'Dir'}; } - - my $fontdefaultdir = ""; - if ( $onedir->{'defaultdir'} ) { $fontdefaultdir = $onedir->{'defaultdir'}; } - - if (( $fontdir eq "PREDEFINED_OSSYSTEMFONTDIR" ) && ( $fontdefaultdir eq $installer::globals::fontsdirhostname )) - { - $installer::globals::fontsdirname = $onedir->{'defaultdir'}; - $installer::globals::fontsdirparent = $onedir->{'uniqueparentname'}; - } - } -} - -############################################### -# Fill content into the directory table -############################################### - -sub create_directorytable_from_collection -{ - my ($directorytableref, $directoryref) = @_; - - for ( my $i = 0; $i <= $#{$directoryref}; $i++ ) - { - my $onedir = ${$directoryref}[$i]; - my $hostname = $onedir->{'HostName'}; - my $dir = ""; - - if ( $onedir->{'Dir'} ) { $dir = $onedir->{'Dir'}; } - - if (( $dir eq "PREDEFINED_PROGDIR" ) && ( $hostname eq "" )) { next; } # removing files from root directory - - my $oneline = $onedir->{'uniquename'} . "\t" . $onedir->{'uniqueparentname'} . "\t" . $onedir->{'defaultdir'} . "\n"; - - push(@{$directorytableref}, $oneline); - } -} - -############################################### -# Defining the root installation structure -############################################### - -sub add_root_directories -{ - my ($directorytableref, $allvariableshashref, $onelanguage) = @_; - - my $oneline = ""; - - if (( ! $installer::globals::patch ) && ( ! $installer::globals::languagepack ) && ( ! $installer::globals::helppack ) && ( ! $allvariableshashref->{'DONTUSESTARTMENUFOLDER'} )) - { - my $productname; - - $productname = $allvariableshashref->{'PRODUCTNAME'}; - my $productversion = $allvariableshashref->{'PRODUCTVERSION'}; - my $baseproductversion = $productversion; - - if (( $installer::globals::prepare_winpatch ) && ( $allvariableshashref->{'BASEPRODUCTVERSION'} )) - { - $baseproductversion = $allvariableshashref->{'BASEPRODUCTVERSION'}; # for example "2.0" for OOo - } - - my $realproductkey = $productname . " " . $productversion; - my $productkey = $productname . " " . $baseproductversion; - - if (( $allvariableshashref->{'POSTVERSIONEXTENSION'} ) && ( ! $allvariableshashref->{'DONTUSEEXTENSIONINDEFAULTDIR'} )) - { - $productkey = $productkey . " " . $allvariableshashref->{'POSTVERSIONEXTENSION'}; - $realproductkey = $realproductkey . " " . $allvariableshashref->{'POSTVERSIONEXTENSION'}; - } - if ( $allvariableshashref->{'NOVERSIONINDIRNAME'} ) - { - $productkey = $productname; - $realproductkey = $realproductname; - } - if ( $allvariableshashref->{'NOSPACEINDIRECTORYNAME'} ) - { - $productkey =~ s/\ /\_/g; - $realproductkey =~ s/\ /\_/g; - } - - my $shortproductkey = installer::windows::idtglobal::make_eight_three_conform($productkey, "dir"); # third parameter not used - $shortproductkey =~ s/\s/\_/g; # changing empty space to underline - - $oneline = "$installer::globals::officemenufolder\t$installer::globals::programmenufolder\t$shortproductkey|$realproductkey\n"; - push(@{$directorytableref}, $oneline); - } - - $oneline = "TARGETDIR\t\tSourceDir\n"; - push(@{$directorytableref}, $oneline); - - $oneline = "WindowsFolder\tTARGETDIR\tWindows\n"; - push(@{$directorytableref}, $oneline); - - $oneline = "WindowsShellNewFolder\tWindowsFolder\tShellNew\n"; - push(@{$directorytableref}, $oneline); - - $oneline = "$installer::globals::programfilesfolder\tTARGETDIR\t.\n"; - push(@{$directorytableref}, $oneline); - - $oneline = "$installer::globals::programmenufolder\tTARGETDIR\t.\n"; - push(@{$directorytableref}, $oneline); - - $oneline = "$installer::globals::startupfolder\tTARGETDIR\t.\n"; - push(@{$directorytableref}, $oneline); - - $oneline = "$installer::globals::desktopfolder\tTARGETDIR\t.\n"; - push(@{$directorytableref}, $oneline); - - $oneline = "$installer::globals::startmenufolder\tTARGETDIR\t.\n"; - push(@{$directorytableref}, $oneline); - - $oneline = "$installer::globals::commonfilesfolder\tTARGETDIR\t.\n"; - push(@{$directorytableref}, $oneline); - - $oneline = "$installer::globals::commonappdatafolder\tTARGETDIR\t.\n"; - push(@{$directorytableref}, $oneline); - - $oneline = "$installer::globals::localappdatafolder\tTARGETDIR\t.\n"; - push(@{$directorytableref}, $oneline); - - if ( $installer::globals::usesharepointpath ) - { - $oneline = "SHAREPOINTPATH\tTARGETDIR\t.\n"; - push(@{$directorytableref}, $oneline); - } - - $oneline = "$installer::globals::systemfolder\tTARGETDIR\t.\n"; - push(@{$directorytableref}, $oneline); - - my $localtemplatefoldername = $installer::globals::templatefoldername; - my $directorytableentry = $localtemplatefoldername; - my $shorttemplatefoldername = installer::windows::idtglobal::make_eight_three_conform($localtemplatefoldername, "dir"); - if ( $shorttemplatefoldername ne $localtemplatefoldername ) { $directorytableentry = "$shorttemplatefoldername|$localtemplatefoldername"; } - $oneline = "$installer::globals::templatefolder\tTARGETDIR\t$directorytableentry\n"; - push(@{$directorytableref}, $oneline); - - if ( $installer::globals::fontsdirname ) - { - $oneline = "$installer::globals::fontsfolder\t$installer::globals::fontsdirparent\t$installer::globals::fontsfoldername\:$installer::globals::fontsdirname\n"; - } - else - { - $oneline = "$installer::globals::fontsfolder\tTARGETDIR\t$installer::globals::fontsfoldername\n"; - } - - push(@{$directorytableref}, $oneline); - -} - -############################################### -# Creating the file Director.idt dynamically -############################################### - -sub create_directory_table -{ - my ($directoryref, $languagesarrayref, $basedir, $allvariableshashref, $shortdirnamehashref, $loggingdir) = @_; - - # Structure of the directory table: - # Directory Directory_Parent DefaultDir - # Directory is a unique identifier - # Directory_Parent is the unique identifier of the parent - # DefaultDir is .:APPLIC~1|Application Data with - # Before ":" : [sourcedir]:[destdir] (not programmed yet) - # After ":" : 8+3 and not 8+3 the destination directory name - - for ( my $m = 0; $m <= $#{$languagesarrayref}; $m++ ) - { - my $onelanguage = ${$languagesarrayref}[$m]; - $installer::globals::installlocationdirectoryset = 0; - - my @directorytable = (); - my $infoline; - - overwrite_programfilesfolder($allvariableshashref); - if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "directoriesforidt_local_1.log", $directoryref); } - create_unique_directorynames($directoryref, $allvariableshashref); - $already_checked_the_frigging_directories_for_uniqueness++; - if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "directoriesforidt_local_1a.log", $directoryref); } - create_defaultdir_directorynames($directoryref, $shortdirnamehashref); # only destdir! - if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "directoriesforidt_local_2.log", $directoryref); } - set_installlocation_directory($directoryref, $allvariableshashref); - if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "directoriesforidt_local_3.log", $directoryref); } - installer::windows::idtglobal::write_idt_header(\@directorytable, "directory"); - add_root_directories(\@directorytable, $allvariableshashref, $onelanguage); - create_directorytable_from_collection(\@directorytable, $directoryref); - - # Saving the file - - my $directorytablename = $basedir . $installer::globals::separator . "Director.idt" . "." . $onelanguage; - installer::files::save_file($directorytablename ,\@directorytable); - $infoline = "Created idt file: $directorytablename\n"; - push(@installer::globals::logfileinfo, $infoline); - } -} - -1; |