1*cdf0e10cSrcweir#************************************************************************* 2*cdf0e10cSrcweir# 3*cdf0e10cSrcweir# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir# 5*cdf0e10cSrcweir# Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir# 7*cdf0e10cSrcweir# OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir# 9*cdf0e10cSrcweir# This file is part of OpenOffice.org. 10*cdf0e10cSrcweir# 11*cdf0e10cSrcweir# OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir# it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir# only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir# 15*cdf0e10cSrcweir# OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir# but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir# GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir# (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir# 21*cdf0e10cSrcweir# You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir# version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir# <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir# for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir# 26*cdf0e10cSrcweir#************************************************************************* 27*cdf0e10cSrcweir 28*cdf0e10cSrcweirpackage installer::packagelist; 29*cdf0e10cSrcweir 30*cdf0e10cSrcweiruse installer::converter; 31*cdf0e10cSrcweiruse installer::exiter; 32*cdf0e10cSrcweiruse installer::globals; 33*cdf0e10cSrcweiruse installer::remover; 34*cdf0e10cSrcweiruse installer::scriptitems; 35*cdf0e10cSrcweir 36*cdf0e10cSrcweir######################################## 37*cdf0e10cSrcweir# Check existence of module 38*cdf0e10cSrcweir######################################## 39*cdf0e10cSrcweir 40*cdf0e10cSrcweirsub check_module_existence 41*cdf0e10cSrcweir{ 42*cdf0e10cSrcweir my ($onegid, $moduleslist) = @_; 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir my $foundgid = 0; 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$moduleslist}; $i++ ) 47*cdf0e10cSrcweir { 48*cdf0e10cSrcweir my $gid = ${$moduleslist}[$i]->{'gid'}; 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir if ( $gid eq $onegid ) 51*cdf0e10cSrcweir { 52*cdf0e10cSrcweir $foundgid = 1; 53*cdf0e10cSrcweir last; 54*cdf0e10cSrcweir } 55*cdf0e10cSrcweir } 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir return $foundgid; 58*cdf0e10cSrcweir} 59*cdf0e10cSrcweir 60*cdf0e10cSrcweir################################################### 61*cdf0e10cSrcweir# Analyzing the gids, defined in the packagelist 62*cdf0e10cSrcweir################################################### 63*cdf0e10cSrcweir 64*cdf0e10cSrcweirsub analyze_list 65*cdf0e10cSrcweir{ 66*cdf0e10cSrcweir my ($packagelist, $moduleslist) = @_; 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir @allpackages = (); 69*cdf0e10cSrcweir 70*cdf0e10cSrcweir my $moduleshash = get_module_hash($moduleslist); 71*cdf0e10cSrcweir 72*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$packagelist}; $i++ ) 73*cdf0e10cSrcweir { 74*cdf0e10cSrcweir my $onepackage = ${$packagelist}[$i]; 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir my $onegid = $onepackage->{'module'}; 77*cdf0e10cSrcweir 78*cdf0e10cSrcweir installer::remover::remove_leading_and_ending_whitespaces(\$onegid); 79*cdf0e10cSrcweir 80*cdf0e10cSrcweir my $moduleexists = check_module_existence($onegid, $moduleslist); 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir if ( ! $moduleexists ) { next; } 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir my @allmodules = (); 85*cdf0e10cSrcweir 86*cdf0e10cSrcweir push(@allmodules, $onegid); 87*cdf0e10cSrcweir 88*cdf0e10cSrcweir # get_children($moduleslist, $onegid, \@allmodules); 89*cdf0e10cSrcweir get_children_with_hash($moduleshash, $onegid, \@allmodules); 90*cdf0e10cSrcweir 91*cdf0e10cSrcweir $onepackage->{'allmodules'} = \@allmodules; 92*cdf0e10cSrcweir 93*cdf0e10cSrcweir push(@allpackages, $onepackage); 94*cdf0e10cSrcweir } 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir return \@allpackages; 97*cdf0e10cSrcweir} 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir################################################### 100*cdf0e10cSrcweir# Creating a hash, that contains the module gids 101*cdf0e10cSrcweir# as keys and the parentids as values 102*cdf0e10cSrcweir################################################### 103*cdf0e10cSrcweir 104*cdf0e10cSrcweirsub get_module_hash 105*cdf0e10cSrcweir{ 106*cdf0e10cSrcweir my ($moduleslist) = @_; 107*cdf0e10cSrcweir 108*cdf0e10cSrcweir my %modulehash = (); 109*cdf0e10cSrcweir 110*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$moduleslist}; $i++ ) 111*cdf0e10cSrcweir { 112*cdf0e10cSrcweir my $gid = ${$moduleslist}[$i]->{'gid'}; 113*cdf0e10cSrcweir # Containing only modules with parent. Root modules can be ignored. 114*cdf0e10cSrcweir if ( ${$moduleslist}[$i]->{'ParentID'} ) { $modulehash{$gid} = ${$moduleslist}[$i]->{'ParentID'}; } 115*cdf0e10cSrcweir } 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir return \%modulehash; 118*cdf0e10cSrcweir} 119*cdf0e10cSrcweir 120*cdf0e10cSrcweir######################################################## 121*cdf0e10cSrcweir# Recursively defined procedure to order 122*cdf0e10cSrcweir# modules and directories 123*cdf0e10cSrcweir######################################################## 124*cdf0e10cSrcweir 125*cdf0e10cSrcweirsub get_children_with_hash 126*cdf0e10cSrcweir{ 127*cdf0e10cSrcweir my ($modulehash, $parentgid, $newitemorder) = @_; 128*cdf0e10cSrcweir 129*cdf0e10cSrcweir foreach my $gid ( keys %{$modulehash} ) 130*cdf0e10cSrcweir { 131*cdf0e10cSrcweir my $parent = $modulehash->{$gid}; 132*cdf0e10cSrcweir 133*cdf0e10cSrcweir if ( $parent eq $parentgid ) 134*cdf0e10cSrcweir { 135*cdf0e10cSrcweir push(@{$newitemorder}, $gid); 136*cdf0e10cSrcweir my $parent = $gid; 137*cdf0e10cSrcweir get_children_with_hash($modulehash, $parent, $newitemorder); # recursive! 138*cdf0e10cSrcweir } 139*cdf0e10cSrcweir } 140*cdf0e10cSrcweir} 141*cdf0e10cSrcweir 142*cdf0e10cSrcweir######################################################## 143*cdf0e10cSrcweir# Recursively defined procedure to order 144*cdf0e10cSrcweir# modules and directories 145*cdf0e10cSrcweir######################################################## 146*cdf0e10cSrcweir 147*cdf0e10cSrcweirsub get_children 148*cdf0e10cSrcweir{ 149*cdf0e10cSrcweir my ($allitems, $startparent, $newitemorder) = @_; 150*cdf0e10cSrcweir 151*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$allitems}; $i++ ) 152*cdf0e10cSrcweir { 153*cdf0e10cSrcweir my $gid = ${$allitems}[$i]->{'gid'}; 154*cdf0e10cSrcweir my $parent = ""; 155*cdf0e10cSrcweir if ( ${$allitems}[$i]->{'ParentID'} ) { $parent = ${$allitems}[$i]->{'ParentID'}; } 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir if ( $parent eq $startparent ) 158*cdf0e10cSrcweir { 159*cdf0e10cSrcweir push(@{$newitemorder}, $gid); 160*cdf0e10cSrcweir my $parent = $gid; 161*cdf0e10cSrcweir get_children($allitems, $parent, $newitemorder); # recursive! 162*cdf0e10cSrcweir } 163*cdf0e10cSrcweir } 164*cdf0e10cSrcweir} 165*cdf0e10cSrcweir 166*cdf0e10cSrcweir##################################################################### 167*cdf0e10cSrcweir# All modules below a defined gid_Module_A are collected now for 168*cdf0e10cSrcweir# each modules defined in the packagelist. Now the modules have 169*cdf0e10cSrcweir# to be removed, that are part of more than one package. 170*cdf0e10cSrcweir##################################################################### 171*cdf0e10cSrcweir 172*cdf0e10cSrcweirsub remove_multiple_modules_packages 173*cdf0e10cSrcweir{ 174*cdf0e10cSrcweir my ($allpackagemodules) = @_; 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir # iterating over all packages 177*cdf0e10cSrcweir 178*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$allpackagemodules}; $i++ ) 179*cdf0e10cSrcweir { 180*cdf0e10cSrcweir my $onepackage = ${$allpackagemodules}[$i]; 181*cdf0e10cSrcweir my $allmodules = $onepackage->{'allmodules'}; 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir # print "Modules below $onepackage->{'module'}: $#{$allmodules}\n"; 184*cdf0e10cSrcweir 185*cdf0e10cSrcweir # Comparing each package, with all following packages. If a 186*cdf0e10cSrcweir # gid for the module is part of more than one package, it is 187*cdf0e10cSrcweir # removed if the number of modules in the package is greater 188*cdf0e10cSrcweir # in the current package than in the compare package. 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir # Taking all modules from package $i 191*cdf0e10cSrcweir 192*cdf0e10cSrcweir my $packagecount = $#{$allmodules}; 193*cdf0e10cSrcweir 194*cdf0e10cSrcweir my @optimizedpackage = (); 195*cdf0e10cSrcweir 196*cdf0e10cSrcweir # iterating over all modules of this package 197*cdf0e10cSrcweir 198*cdf0e10cSrcweir for ( my $j = 0; $j <= $#{$allmodules}; $j++ ) 199*cdf0e10cSrcweir { 200*cdf0e10cSrcweir my $onemodule = ${$allmodules}[$j]; # this is the module, that shall be removed or not 201*cdf0e10cSrcweir 202*cdf0e10cSrcweir my $put_module_into_new_package = 1; 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir # iterating over all other packages 205*cdf0e10cSrcweir 206*cdf0e10cSrcweir for ( my $k = 0; $k <= $#{$allpackagemodules}; $k++ ) 207*cdf0e10cSrcweir { 208*cdf0e10cSrcweir if ( $k == $i ) { next; } # not comparing equal module 209*cdf0e10cSrcweir 210*cdf0e10cSrcweir if (! $put_module_into_new_package) { next; } # do not compare, if already found 211*cdf0e10cSrcweir 212*cdf0e10cSrcweir my $comparepackage = ${$allpackagemodules}[$k]; 213*cdf0e10cSrcweir my $allcomparemodules = $comparepackage->{'allmodules'}; 214*cdf0e10cSrcweir 215*cdf0e10cSrcweir my $comparepackagecount = $#{$allcomparemodules}; 216*cdf0e10cSrcweir 217*cdf0e10cSrcweir # modules will only be removed from packages, that have more modules 218*cdf0e10cSrcweir # than the compare package 219*cdf0e10cSrcweir 220*cdf0e10cSrcweir if ( $packagecount <= $comparepackagecount ) { next; } # nothing to do, take next package 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir # iterating over all modules of this package 223*cdf0e10cSrcweir 224*cdf0e10cSrcweir for ( my $m = 0; $m <= $#{$allcomparemodules}; $m++ ) 225*cdf0e10cSrcweir { 226*cdf0e10cSrcweir my $onecomparemodule = ${$allcomparemodules}[$m]; 227*cdf0e10cSrcweir 228*cdf0e10cSrcweir if ( $onemodule eq $onecomparemodule ) # this $onemodule has to be removed 229*cdf0e10cSrcweir { 230*cdf0e10cSrcweir $put_module_into_new_package = 0; 231*cdf0e10cSrcweir } 232*cdf0e10cSrcweir } 233*cdf0e10cSrcweir } 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir if ( $put_module_into_new_package ) 236*cdf0e10cSrcweir { 237*cdf0e10cSrcweir push(@optimizedpackage, $onemodule) 238*cdf0e10cSrcweir } 239*cdf0e10cSrcweir } 240*cdf0e10cSrcweir 241*cdf0e10cSrcweir $onepackage->{'allmodules'} = \@optimizedpackage; 242*cdf0e10cSrcweir } 243*cdf0e10cSrcweir 244*cdf0e10cSrcweir # for ( my $i = 0; $i <= $#{$allpackagemodules}; $i++ ) 245*cdf0e10cSrcweir # { 246*cdf0e10cSrcweir # my $onepackage = ${$allpackagemodules}[$i]; 247*cdf0e10cSrcweir # my $allmodules = $onepackage->{'allmodules'}; 248*cdf0e10cSrcweir # print "New: Modules below $onepackage->{'module'}: $#{$allmodules}\n"; 249*cdf0e10cSrcweir # } 250*cdf0e10cSrcweir 251*cdf0e10cSrcweir} 252*cdf0e10cSrcweir 253*cdf0e10cSrcweir##################################################################### 254*cdf0e10cSrcweir# Analyzing all files if they belong to a special package. 255*cdf0e10cSrcweir# A package is described by a list of modules. 256*cdf0e10cSrcweir##################################################################### 257*cdf0e10cSrcweir 258*cdf0e10cSrcweirsub find_files_for_package 259*cdf0e10cSrcweir{ 260*cdf0e10cSrcweir my ($filelist, $onepackage) = @_; 261*cdf0e10cSrcweir 262*cdf0e10cSrcweir my @newfilelist = (); 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$filelist}; $i++ ) 265*cdf0e10cSrcweir { 266*cdf0e10cSrcweir my $onefile = ${$filelist}[$i]; 267*cdf0e10cSrcweir my $modulesstring = $onefile->{'modules'}; # comma separated modules list 268*cdf0e10cSrcweir my $moduleslist = installer::converter::convert_stringlist_into_array(\$modulesstring, ","); 269*cdf0e10cSrcweir 270*cdf0e10cSrcweir my $includefile = 0; 271*cdf0e10cSrcweir 272*cdf0e10cSrcweir # iterating over all modules of this file 273*cdf0e10cSrcweir 274*cdf0e10cSrcweir for ( my $j = 0; $j <= $#{$moduleslist}; $j++ ) 275*cdf0e10cSrcweir { 276*cdf0e10cSrcweir if ( $includefile ) { next; } 277*cdf0e10cSrcweir my $filemodule = ${$moduleslist}[$j]; 278*cdf0e10cSrcweir installer::remover::remove_leading_and_ending_whitespaces(\$filemodule); 279*cdf0e10cSrcweir 280*cdf0e10cSrcweir # iterating over all modules of the package 281*cdf0e10cSrcweir 282*cdf0e10cSrcweir my $packagemodules = $onepackage->{'allmodules'}; 283*cdf0e10cSrcweir 284*cdf0e10cSrcweir for ( my $k = 0; $k <= $#{$packagemodules}; $k++ ) 285*cdf0e10cSrcweir { 286*cdf0e10cSrcweir if ( $includefile ) { next; } 287*cdf0e10cSrcweir my $packagemodule = ${$packagemodules}[$k]; 288*cdf0e10cSrcweir 289*cdf0e10cSrcweir if ( $filemodule eq $packagemodule ) 290*cdf0e10cSrcweir { 291*cdf0e10cSrcweir $includefile = 1; 292*cdf0e10cSrcweir last; 293*cdf0e10cSrcweir } 294*cdf0e10cSrcweir } 295*cdf0e10cSrcweir } 296*cdf0e10cSrcweir 297*cdf0e10cSrcweir if ( $includefile ) 298*cdf0e10cSrcweir { 299*cdf0e10cSrcweir push(@newfilelist, $onefile); 300*cdf0e10cSrcweir } 301*cdf0e10cSrcweir } 302*cdf0e10cSrcweir 303*cdf0e10cSrcweir return \@newfilelist; 304*cdf0e10cSrcweir} 305*cdf0e10cSrcweir 306*cdf0e10cSrcweir##################################################################### 307*cdf0e10cSrcweir# Analyzing all links if they belong to a special package. 308*cdf0e10cSrcweir# A package is described by a list of modules. 309*cdf0e10cSrcweir# A link is inserted into the package, if the corresponding 310*cdf0e10cSrcweir# file is also inserted. 311*cdf0e10cSrcweir##################################################################### 312*cdf0e10cSrcweir 313*cdf0e10cSrcweirsub find_links_for_package 314*cdf0e10cSrcweir{ 315*cdf0e10cSrcweir my ($linklist, $filelist) = @_; 316*cdf0e10cSrcweir 317*cdf0e10cSrcweir # First looking for all links with a FileID. 318*cdf0e10cSrcweir # Then looking for all links with a ShortcutID. 319*cdf0e10cSrcweir 320*cdf0e10cSrcweir my @newlinklist = (); 321*cdf0e10cSrcweir 322*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$linklist}; $i++ ) 323*cdf0e10cSrcweir { 324*cdf0e10cSrcweir my $includelink = 0; 325*cdf0e10cSrcweir 326*cdf0e10cSrcweir my $onelink = ${$linklist}[$i]; 327*cdf0e10cSrcweir 328*cdf0e10cSrcweir my $fileid = ""; 329*cdf0e10cSrcweir if ( $onelink->{'FileID'} ) { $fileid = $onelink->{'FileID'}; } 330*cdf0e10cSrcweir 331*cdf0e10cSrcweir if ( $fileid eq "" ) { next; } # A link with a ShortcutID 332*cdf0e10cSrcweir 333*cdf0e10cSrcweir for ( my $j = 0; $j <= $#{$filelist}; $j++ ) # iterating over file list 334*cdf0e10cSrcweir { 335*cdf0e10cSrcweir my $onefile = ${$filelist}[$j]; 336*cdf0e10cSrcweir my $gid = $onefile->{'gid'}; 337*cdf0e10cSrcweir 338*cdf0e10cSrcweir if ( $gid eq $fileid ) 339*cdf0e10cSrcweir { 340*cdf0e10cSrcweir $includelink = 1; 341*cdf0e10cSrcweir last; 342*cdf0e10cSrcweir } 343*cdf0e10cSrcweir } 344*cdf0e10cSrcweir 345*cdf0e10cSrcweir if ( $includelink ) 346*cdf0e10cSrcweir { 347*cdf0e10cSrcweir push(@newlinklist, $onelink); 348*cdf0e10cSrcweir } 349*cdf0e10cSrcweir } 350*cdf0e10cSrcweir 351*cdf0e10cSrcweir # iterating over the new list, because of all links with a ShortcutID 352*cdf0e10cSrcweir 353*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$linklist}; $i++ ) 354*cdf0e10cSrcweir { 355*cdf0e10cSrcweir my $includelink = 0; 356*cdf0e10cSrcweir 357*cdf0e10cSrcweir my $onelink = ${$linklist}[$i]; 358*cdf0e10cSrcweir 359*cdf0e10cSrcweir my $shortcutid = ""; 360*cdf0e10cSrcweir if ( $onelink->{'ShortcutID'} ) { $shortcutid = $onelink->{'ShortcutID'}; } 361*cdf0e10cSrcweir 362*cdf0e10cSrcweir if ( $shortcutid eq "" ) { next; } # A link with a ShortcutID 363*cdf0e10cSrcweir 364*cdf0e10cSrcweir for ( my $j = 0; $j <= $#newlinklist; $j++ ) # iterating over newly created link list 365*cdf0e10cSrcweir { 366*cdf0e10cSrcweir my $onefilelink = $newlinklist[$j]; 367*cdf0e10cSrcweir my $gid = $onefilelink->{'gid'}; 368*cdf0e10cSrcweir 369*cdf0e10cSrcweir if ( $gid eq $shortcutid ) 370*cdf0e10cSrcweir { 371*cdf0e10cSrcweir $includelink = 1; 372*cdf0e10cSrcweir last; 373*cdf0e10cSrcweir } 374*cdf0e10cSrcweir } 375*cdf0e10cSrcweir 376*cdf0e10cSrcweir if ( $includelink ) 377*cdf0e10cSrcweir { 378*cdf0e10cSrcweir push(@newlinklist, $onelink); 379*cdf0e10cSrcweir } 380*cdf0e10cSrcweir } 381*cdf0e10cSrcweir 382*cdf0e10cSrcweir return \@newlinklist; 383*cdf0e10cSrcweir} 384*cdf0e10cSrcweir 385*cdf0e10cSrcweir##################################################################### 386*cdf0e10cSrcweir# Analyzing all directories if they belong to a special package. 387*cdf0e10cSrcweir# A package is described by a list of modules. 388*cdf0e10cSrcweir# Directories are included into the package, if they are needed 389*cdf0e10cSrcweir# by a file or a link included into the package. 390*cdf0e10cSrcweir# Attention: A directory with the flag CREATE, is only included 391*cdf0e10cSrcweir# into the root module: 392*cdf0e10cSrcweir# ($packagename eq $installer::globals::rootmodulegid) 393*cdf0e10cSrcweir##################################################################### 394*cdf0e10cSrcweir 395*cdf0e10cSrcweirsub find_dirs_for_package 396*cdf0e10cSrcweir{ 397*cdf0e10cSrcweir my ($dirlist, $onepackage) = @_; 398*cdf0e10cSrcweir 399*cdf0e10cSrcweir my @newdirlist = (); 400*cdf0e10cSrcweir 401*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$dirlist}; $i++ ) 402*cdf0e10cSrcweir { 403*cdf0e10cSrcweir my $onedir = ${$dirlist}[$i]; 404*cdf0e10cSrcweir my $modulesstring = $onedir->{'modules'}; # comma separated modules list 405*cdf0e10cSrcweir my $moduleslist = installer::converter::convert_stringlist_into_array(\$modulesstring, ","); 406*cdf0e10cSrcweir 407*cdf0e10cSrcweir my $includedir = 0; 408*cdf0e10cSrcweir 409*cdf0e10cSrcweir # iterating over all modules of this dir 410*cdf0e10cSrcweir 411*cdf0e10cSrcweir for ( my $j = 0; $j <= $#{$moduleslist}; $j++ ) 412*cdf0e10cSrcweir { 413*cdf0e10cSrcweir if ( $includedir ) { last; } 414*cdf0e10cSrcweir my $dirmodule = ${$moduleslist}[$j]; 415*cdf0e10cSrcweir installer::remover::remove_leading_and_ending_whitespaces(\$dirmodule); 416*cdf0e10cSrcweir 417*cdf0e10cSrcweir # iterating over all modules of the package 418*cdf0e10cSrcweir 419*cdf0e10cSrcweir my $packagemodules = $onepackage->{'allmodules'}; 420*cdf0e10cSrcweir 421*cdf0e10cSrcweir for ( my $k = 0; $k <= $#{$packagemodules}; $k++ ) 422*cdf0e10cSrcweir { 423*cdf0e10cSrcweir my $packagemodule = ${$packagemodules}[$k]; 424*cdf0e10cSrcweir 425*cdf0e10cSrcweir if ( $dirmodule eq $packagemodule ) 426*cdf0e10cSrcweir { 427*cdf0e10cSrcweir $includedir = 1; 428*cdf0e10cSrcweir last; 429*cdf0e10cSrcweir } 430*cdf0e10cSrcweir } 431*cdf0e10cSrcweir } 432*cdf0e10cSrcweir 433*cdf0e10cSrcweir if ( $includedir ) 434*cdf0e10cSrcweir { 435*cdf0e10cSrcweir push(@newdirlist, $onedir); 436*cdf0e10cSrcweir } 437*cdf0e10cSrcweir } 438*cdf0e10cSrcweir 439*cdf0e10cSrcweir return \@newdirlist; 440*cdf0e10cSrcweir} 441*cdf0e10cSrcweir 442*cdf0e10cSrcweir##################################################################### 443*cdf0e10cSrcweir# Resolving all variables in the packagename. 444*cdf0e10cSrcweir##################################################################### 445*cdf0e10cSrcweir 446*cdf0e10cSrcweirsub resolve_packagevariables 447*cdf0e10cSrcweir{ 448*cdf0e10cSrcweir my ($packagenameref, $variableshashref, $make_lowercase) = @_; 449*cdf0e10cSrcweir 450*cdf0e10cSrcweir my $key; 451*cdf0e10cSrcweir 452*cdf0e10cSrcweir # Special handling for dictionaries 453*cdf0e10cSrcweir if ( $$packagenameref =~ /-dict-/ ) 454*cdf0e10cSrcweir { 455*cdf0e10cSrcweir if (exists($variableshashref->{'DICTIONARYUNIXPRODUCTNAME'}) ) { $$packagenameref =~ s/\%UNIXPRODUCTNAME/$variableshashref->{'DICTIONARYUNIXPRODUCTNAME'}/g; } 456*cdf0e10cSrcweir if (exists($variableshashref->{'DICTIONARYBRANDPACKAGEVERSION'}) ) { $$packagenameref =~ s/\%BRANDPACKAGEVERSION/$variableshashref->{'DICTIONARYBRANDPACKAGEVERSION'}/g; } 457*cdf0e10cSrcweir } 458*cdf0e10cSrcweir 459*cdf0e10cSrcweir foreach $key (keys %{$variableshashref}) 460*cdf0e10cSrcweir { 461*cdf0e10cSrcweir my $value = $variableshashref->{$key}; 462*cdf0e10cSrcweir if ( $make_lowercase ) { $value = lc($value); } 463*cdf0e10cSrcweir $$packagenameref =~ s/\%$key/$value/g; 464*cdf0e10cSrcweir } 465*cdf0e10cSrcweir} 466*cdf0e10cSrcweir 467*cdf0e10cSrcweir##################################################################### 468*cdf0e10cSrcweir# Resolving all variables in the packagename. 469*cdf0e10cSrcweir##################################################################### 470*cdf0e10cSrcweir 471*cdf0e10cSrcweirsub resolve_packagevariables2 472*cdf0e10cSrcweir{ 473*cdf0e10cSrcweir my ($packagenameref, $variableshashref, $make_lowercase, $isdict ) = @_; 474*cdf0e10cSrcweir 475*cdf0e10cSrcweir my $key; 476*cdf0e10cSrcweir 477*cdf0e10cSrcweir # Special handling for dictionaries 478*cdf0e10cSrcweir if ( $isdict ) 479*cdf0e10cSrcweir { 480*cdf0e10cSrcweir if (exists($variableshashref->{'DICTIONARYUNIXPRODUCTNAME'}) ) { $$packagenameref =~ s/\%UNIXPRODUCTNAME/$variableshashref->{'DICTIONARYUNIXPRODUCTNAME'}/g; } 481*cdf0e10cSrcweir if (exists($variableshashref->{'DICTIONARYBRANDPACKAGEVERSION'}) ) { $$packagenameref =~ s/\%BRANDPACKAGEVERSION/$variableshashref->{'DICTIONARYBRANDPACKAGEVERSION'}/g; } 482*cdf0e10cSrcweir } 483*cdf0e10cSrcweir 484*cdf0e10cSrcweir foreach $key (keys %{$variableshashref}) 485*cdf0e10cSrcweir { 486*cdf0e10cSrcweir my $value = $variableshashref->{$key}; 487*cdf0e10cSrcweir if ( $make_lowercase ) { $value = lc($value); } 488*cdf0e10cSrcweir $$packagenameref =~ s/\%$key/$value/g; 489*cdf0e10cSrcweir } 490*cdf0e10cSrcweir} 491*cdf0e10cSrcweir 492*cdf0e10cSrcweir##################################################################### 493*cdf0e10cSrcweir# New packages system. 494*cdf0e10cSrcweir##################################################################### 495*cdf0e10cSrcweir 496*cdf0e10cSrcweir################################################################## 497*cdf0e10cSrcweir# Controlling the content of the packagelist 498*cdf0e10cSrcweir# 1. Items in @installer::globals::packagelistitems must exist 499*cdf0e10cSrcweir# 2. If a shellscript file is defined, it must exist 500*cdf0e10cSrcweir################################################################## 501*cdf0e10cSrcweir 502*cdf0e10cSrcweirsub check_packagelist 503*cdf0e10cSrcweir{ 504*cdf0e10cSrcweir my ($packages) = @_; 505*cdf0e10cSrcweir 506*cdf0e10cSrcweir if ( ! ( $#{$packages} > -1 )) { installer::exiter::exit_program("ERROR: No packages defined!", "check_packagelist"); } 507*cdf0e10cSrcweir 508*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$packages}; $i++ ) 509*cdf0e10cSrcweir { 510*cdf0e10cSrcweir my $onepackage = ${$packages}[$i]; 511*cdf0e10cSrcweir 512*cdf0e10cSrcweir my $element; 513*cdf0e10cSrcweir 514*cdf0e10cSrcweir # checking all items that must be defined 515*cdf0e10cSrcweir 516*cdf0e10cSrcweir foreach $element (@installer::globals::packagelistitems) 517*cdf0e10cSrcweir { 518*cdf0e10cSrcweir if ( ! exists($onepackage->{$element}) ) 519*cdf0e10cSrcweir { 520*cdf0e10cSrcweir installer::exiter::exit_program("ERROR in package list: No value for $element !", "check_packagelist"); 521*cdf0e10cSrcweir } 522*cdf0e10cSrcweir } 523*cdf0e10cSrcweir 524*cdf0e10cSrcweir # checking the existence of the script file, if defined 525*cdf0e10cSrcweir 526*cdf0e10cSrcweir if ( $onepackage->{'script'} ) 527*cdf0e10cSrcweir { 528*cdf0e10cSrcweir my $scriptfile = $onepackage->{'script'}; 529*cdf0e10cSrcweir my $gid = $onepackage->{'module'}; 530*cdf0e10cSrcweir my $fileref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$scriptfile, "" , 0); 531*cdf0e10cSrcweir 532*cdf0e10cSrcweir if ( $$fileref eq "" ) { installer::exiter::exit_program("ERROR: Could not find script file $scriptfile for module $gid!", "check_packagelist"); } 533*cdf0e10cSrcweir 534*cdf0e10cSrcweir my $infoline = "$gid: Using script file: \"$$fileref\"!\n"; 535*cdf0e10cSrcweir push( @installer::globals::logfileinfo, $infoline); 536*cdf0e10cSrcweir 537*cdf0e10cSrcweir $onepackage->{'script'} = $$fileref; 538*cdf0e10cSrcweir } 539*cdf0e10cSrcweir } 540*cdf0e10cSrcweir} 541*cdf0e10cSrcweir 542*cdf0e10cSrcweir##################################################################### 543*cdf0e10cSrcweir# Reading pack info for one module from packinfo file. 544*cdf0e10cSrcweir##################################################################### 545*cdf0e10cSrcweir 546*cdf0e10cSrcweirsub get_packinfo 547*cdf0e10cSrcweir{ 548*cdf0e10cSrcweir my ($gid, $filename, $packages, $onelanguage, $islanguagemodule) = @_; 549*cdf0e10cSrcweir 550*cdf0e10cSrcweir my $packagelist = installer::files::read_file($filename); 551*cdf0e10cSrcweir 552*cdf0e10cSrcweir my @allpackages = (); 553*cdf0e10cSrcweir 554*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$packagelist}; $i++ ) 555*cdf0e10cSrcweir { 556*cdf0e10cSrcweir my $line = ${$packagelist}[$i]; 557*cdf0e10cSrcweir 558*cdf0e10cSrcweir if ( $line =~ /^\s*\#/ ) { next; } # this is a comment line 559*cdf0e10cSrcweir 560*cdf0e10cSrcweir if ( $line =~ /^\s*Start\s*$/i ) # a new package definition 561*cdf0e10cSrcweir { 562*cdf0e10cSrcweir my %onepackage = (); 563*cdf0e10cSrcweir 564*cdf0e10cSrcweir my $counter = $i + 1; 565*cdf0e10cSrcweir 566*cdf0e10cSrcweir while (!( ${$packagelist}[$counter] =~ /^\s*End\s*$/i )) 567*cdf0e10cSrcweir { 568*cdf0e10cSrcweir if ( ${$packagelist}[$counter] =~ /^\s*(\S+)\s*\=\s*\"(.*)\"/ ) 569*cdf0e10cSrcweir { 570*cdf0e10cSrcweir my $key = $1; 571*cdf0e10cSrcweir my $value = $2; 572*cdf0e10cSrcweir $onepackage{$key} = $value; 573*cdf0e10cSrcweir } 574*cdf0e10cSrcweir 575*cdf0e10cSrcweir $counter++; 576*cdf0e10cSrcweir } 577*cdf0e10cSrcweir 578*cdf0e10cSrcweir $onepackage{'islanguagemodule'} = $islanguagemodule; 579*cdf0e10cSrcweir if ( $islanguagemodule ) 580*cdf0e10cSrcweir { 581*cdf0e10cSrcweir $saveonelanguage = $onelanguage; 582*cdf0e10cSrcweir $saveonelanguage =~ s/_/-/g; 583*cdf0e10cSrcweir $onepackage{'language'} = $saveonelanguage; 584*cdf0e10cSrcweir } 585*cdf0e10cSrcweir 586*cdf0e10cSrcweir push(@allpackages, \%onepackage); 587*cdf0e10cSrcweir } 588*cdf0e10cSrcweir } 589*cdf0e10cSrcweir 590*cdf0e10cSrcweir # looking for the packinfo with the correct gid 591*cdf0e10cSrcweir 592*cdf0e10cSrcweir my $foundgid = 0; 593*cdf0e10cSrcweir my $onepackage; 594*cdf0e10cSrcweir foreach $onepackage (@allpackages) 595*cdf0e10cSrcweir { 596*cdf0e10cSrcweir # Adding the language to the module gid for LanguagePacks ! 597*cdf0e10cSrcweir # Making the module gid language specific: gid_Module_Root -> gir_Module_Root_pt_BR (as defined in scp2) 598*cdf0e10cSrcweir if ( $onelanguage ne "" ) { $onepackage->{'module'} = $onepackage->{'module'} . "_$onelanguage"; } 599*cdf0e10cSrcweir 600*cdf0e10cSrcweir if ( $onepackage->{'module'} eq $gid ) 601*cdf0e10cSrcweir { 602*cdf0e10cSrcweir # Resolving the language identifier 603*cdf0e10cSrcweir my $onekey; 604*cdf0e10cSrcweir foreach $onekey ( keys %{$onepackage} ) 605*cdf0e10cSrcweir { 606*cdf0e10cSrcweir # Some keys require "-" instead of "_" for example in "en-US". All package names do not use underlines. 607*cdf0e10cSrcweir my $locallang = $onelanguage; 608*cdf0e10cSrcweir if (( $onekey eq "solarispackagename" ) || 609*cdf0e10cSrcweir ( $onekey eq "solarisrequires" ) || 610*cdf0e10cSrcweir ( $onekey eq "packagename" ) || 611*cdf0e10cSrcweir ( $onekey eq "requires" )) { $locallang =~ s/_/-/g; } # avoiding illegal package abbreviation 612*cdf0e10cSrcweir $onepackage->{$onekey} =~ s/\%LANGUAGESTRING/$locallang/g; 613*cdf0e10cSrcweir } 614*cdf0e10cSrcweir 615*cdf0e10cSrcweir # Saving the language for the package 616*cdf0e10cSrcweir my $lang = $onelanguage; 617*cdf0e10cSrcweir $lang =~ s/_/-/g; 618*cdf0e10cSrcweir $onepackage->{'specificlanguage'} = $lang; 619*cdf0e10cSrcweir 620*cdf0e10cSrcweir push(@{$packages}, $onepackage); 621*cdf0e10cSrcweir $foundgid = 1; 622*cdf0e10cSrcweir last; 623*cdf0e10cSrcweir } 624*cdf0e10cSrcweir } 625*cdf0e10cSrcweir 626*cdf0e10cSrcweir if ( ! $foundgid ) 627*cdf0e10cSrcweir { 628*cdf0e10cSrcweir installer::exiter::exit_program("ERROR: Could not find package info for module $gid in file \"$filename\"!", "get_packinfo"); 629*cdf0e10cSrcweir } 630*cdf0e10cSrcweir} 631*cdf0e10cSrcweir 632*cdf0e10cSrcweir##################################################################### 633*cdf0e10cSrcweir# Collecting all packages from scp project. 634*cdf0e10cSrcweir##################################################################### 635*cdf0e10cSrcweir 636*cdf0e10cSrcweirsub collectpackages 637*cdf0e10cSrcweir{ 638*cdf0e10cSrcweir my ( $allmodules, $languagesarrayref ) = @_; 639*cdf0e10cSrcweir 640*cdf0e10cSrcweir installer::logger::include_header_into_logfile("Collecting packages:"); 641*cdf0e10cSrcweir 642*cdf0e10cSrcweir my @packages = (); 643*cdf0e10cSrcweir my %gid_analyzed = (); 644*cdf0e10cSrcweir 645*cdf0e10cSrcweir my $onemodule; 646*cdf0e10cSrcweir foreach $onemodule ( @{$allmodules} ) 647*cdf0e10cSrcweir { 648*cdf0e10cSrcweir my $packageinfo = "PackageInfo"; 649*cdf0e10cSrcweir if (( $installer::globals::tab ) && ( $onemodule->{"TabPackageInfo"} )) { $packageinfo = "TabPackageInfo" } 650*cdf0e10cSrcweir 651*cdf0e10cSrcweir if ( $onemodule->{$packageinfo} ) # this is a package module! 652*cdf0e10cSrcweir { 653*cdf0e10cSrcweir my $modulegid = $onemodule->{'gid'}; 654*cdf0e10cSrcweir 655*cdf0e10cSrcweir # Only collecting modules with correct language for language packs 656*cdf0e10cSrcweir# if ( $installer::globals::languagepack ) { if ( ! ( $modulegid =~ /_$onelanguage\s*$/ )) { next; } } 657*cdf0e10cSrcweir # Resetting language, if this is no language pack 658*cdf0e10cSrcweir# if ( ! $installer::globals::languagepack ) { $onelanguage = ""; } 659*cdf0e10cSrcweir 660*cdf0e10cSrcweir my $styles = ""; 661*cdf0e10cSrcweir if ( $onemodule->{'Styles'} ) { $styles = $onemodule->{'Styles'}; } 662*cdf0e10cSrcweir 663*cdf0e10cSrcweir # checking modules with style LANGUAGEMODULE 664*cdf0e10cSrcweir my $islanguagemodule = 0; 665*cdf0e10cSrcweir my $onelanguage = ""; 666*cdf0e10cSrcweir if ( $styles =~ /\bLANGUAGEMODULE\b/ ) 667*cdf0e10cSrcweir { 668*cdf0e10cSrcweir $islanguagemodule = 1; 669*cdf0e10cSrcweir $onelanguage = $onemodule->{'Language'}; # already checked, that it is set. 670*cdf0e10cSrcweir $onelanguage =~ s/-/_/g; # pt-BR -> pt_BR in scp 671*cdf0e10cSrcweir } 672*cdf0e10cSrcweir 673*cdf0e10cSrcweir # Modules in different languages are listed more than once in multilingual installation sets 674*cdf0e10cSrcweir if ( exists($gid_analyzed{$modulegid}) ) { next; } 675*cdf0e10cSrcweir $gid_analyzed{$modulegid} = 1; 676*cdf0e10cSrcweir 677*cdf0e10cSrcweir my $packinfofile = $onemodule->{$packageinfo}; 678*cdf0e10cSrcweir 679*cdf0e10cSrcweir # The file with package information has to be found in path list 680*cdf0e10cSrcweir my $fileref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$packinfofile, "" , 0); 681*cdf0e10cSrcweir 682*cdf0e10cSrcweir if ( $$fileref eq "" ) { installer::exiter::exit_program("ERROR: Could not find file $packinfofile for module $modulegid!", "collectpackages"); } 683*cdf0e10cSrcweir 684*cdf0e10cSrcweir my $infoline = "$modulegid: Using packinfo: \"$$fileref\"!\n"; 685*cdf0e10cSrcweir push( @installer::globals::logfileinfo, $infoline); 686*cdf0e10cSrcweir 687*cdf0e10cSrcweir get_packinfo($modulegid, $$fileref, \@packages, $onelanguage, $islanguagemodule); 688*cdf0e10cSrcweir } 689*cdf0e10cSrcweir } 690*cdf0e10cSrcweir 691*cdf0e10cSrcweir return \@packages; 692*cdf0e10cSrcweir} 693*cdf0e10cSrcweir 694*cdf0e10cSrcweir##################################################################### 695*cdf0e10cSrcweir# Printing packages content for debugging purposes 696*cdf0e10cSrcweir##################################################################### 697*cdf0e10cSrcweir 698*cdf0e10cSrcweirsub log_packages_content 699*cdf0e10cSrcweir{ 700*cdf0e10cSrcweir my ($packages) = @_; 701*cdf0e10cSrcweir 702*cdf0e10cSrcweir if ( ! ( $#{$packages} > -1 )) { installer::exiter::exit_program("ERROR: No packages defined!", "print_content"); } 703*cdf0e10cSrcweir 704*cdf0e10cSrcweir installer::logger::include_header_into_logfile("Logging packages content:"); 705*cdf0e10cSrcweir 706*cdf0e10cSrcweir my $infoline = ""; 707*cdf0e10cSrcweir 708*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$packages}; $i++ ) 709*cdf0e10cSrcweir { 710*cdf0e10cSrcweir my $onepackage = ${$packages}[$i]; 711*cdf0e10cSrcweir 712*cdf0e10cSrcweir # checking all items that must be defined 713*cdf0e10cSrcweir 714*cdf0e10cSrcweir $infoline = "Package $onepackage->{'module'}\n"; 715*cdf0e10cSrcweir push(@installer::globals::logfileinfo, $infoline); 716*cdf0e10cSrcweir 717*cdf0e10cSrcweir my $key; 718*cdf0e10cSrcweir foreach $key (sort keys %{$onepackage}) 719*cdf0e10cSrcweir { 720*cdf0e10cSrcweir if ( $key =~ /^\s*\;/ ) { next; } 721*cdf0e10cSrcweir 722*cdf0e10cSrcweir if ( $key eq "allmodules" ) 723*cdf0e10cSrcweir { 724*cdf0e10cSrcweir $infoline = "\t$key:\n"; 725*cdf0e10cSrcweir push(@installer::globals::logfileinfo, $infoline); 726*cdf0e10cSrcweir my $onemodule; 727*cdf0e10cSrcweir foreach $onemodule ( @{$onepackage->{$key}} ) 728*cdf0e10cSrcweir { 729*cdf0e10cSrcweir $infoline = "\t\t$onemodule\n"; 730*cdf0e10cSrcweir push(@installer::globals::logfileinfo, $infoline); 731*cdf0e10cSrcweir } 732*cdf0e10cSrcweir } 733*cdf0e10cSrcweir else 734*cdf0e10cSrcweir { 735*cdf0e10cSrcweir $infoline = "\t$key: $onepackage->{$key}\n"; 736*cdf0e10cSrcweir push(@installer::globals::logfileinfo, $infoline); 737*cdf0e10cSrcweir } 738*cdf0e10cSrcweir } 739*cdf0e10cSrcweir 740*cdf0e10cSrcweir $infoline = "\n"; 741*cdf0e10cSrcweir push(@installer::globals::logfileinfo, $infoline); 742*cdf0e10cSrcweir 743*cdf0e10cSrcweir } 744*cdf0e10cSrcweir} 745*cdf0e10cSrcweir 746*cdf0e10cSrcweir##################################################################### 747*cdf0e10cSrcweir# Creating assignments from modules to destination pathes. 748*cdf0e10cSrcweir# This is required for logging in fileinfo file. Otherwise 749*cdf0e10cSrcweir# the complete destination file would not be known in file list. 750*cdf0e10cSrcweir# Saved in %installer::globals::moduledestination 751*cdf0e10cSrcweir##################################################################### 752*cdf0e10cSrcweir 753*cdf0e10cSrcweirsub create_module_destination_hash 754*cdf0e10cSrcweir{ 755*cdf0e10cSrcweir my ($packages, $allvariables) = @_; 756*cdf0e10cSrcweir 757*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$packages}; $i++ ) 758*cdf0e10cSrcweir { 759*cdf0e10cSrcweir my $onepackage = ${$packages}[$i]; 760*cdf0e10cSrcweir 761*cdf0e10cSrcweir my $defaultdestination = $onepackage->{'destpath'}; 762*cdf0e10cSrcweir resolve_packagevariables(\$defaultdestination, $allvariables, 1); 763*cdf0e10cSrcweir if ( $^O =~ /darwin/i ) { $defaultdestination =~ s/\/opt\//\/Applications\//; } 764*cdf0e10cSrcweir 765*cdf0e10cSrcweir foreach my $onemodule ( @{$onepackage->{'allmodules'}} ) 766*cdf0e10cSrcweir { 767*cdf0e10cSrcweir $installer::globals::moduledestination{$onemodule} = $defaultdestination; 768*cdf0e10cSrcweir } 769*cdf0e10cSrcweir } 770*cdf0e10cSrcweir} 771*cdf0e10cSrcweir 772*cdf0e10cSrcweir##################################################################### 773*cdf0e10cSrcweir# Adding the default pathes into the files collector for Unixes. 774*cdf0e10cSrcweir# This is necessary to know the complete destination path in 775*cdf0e10cSrcweir# fileinfo log file. 776*cdf0e10cSrcweir##################################################################### 777*cdf0e10cSrcweir 778*cdf0e10cSrcweirsub add_defaultpathes_into_filescollector 779*cdf0e10cSrcweir{ 780*cdf0e10cSrcweir my ($allfiles) = @_; 781*cdf0e10cSrcweir 782*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$allfiles}; $i++ ) 783*cdf0e10cSrcweir { 784*cdf0e10cSrcweir my $onefile = ${$allfiles}[$i]; 785*cdf0e10cSrcweir 786*cdf0e10cSrcweir if ( ! $onefile->{'destination'} ) { installer::exiter::exit_program("ERROR: No destination found at file $onefile->{'gid'}!", "add_defaultpathes_into_filescollector"); } 787*cdf0e10cSrcweir my $destination = $onefile->{'destination'}; 788*cdf0e10cSrcweir 789*cdf0e10cSrcweir if ( ! $onefile->{'modules'} ) { installer::exiter::exit_program("ERROR: No modules found at file $onefile->{'gid'}!", "add_defaultpathes_into_filescollector"); } 790*cdf0e10cSrcweir my $module = $onefile->{'modules'}; 791*cdf0e10cSrcweir # If modules contains a list of modules, only taking the first one. 792*cdf0e10cSrcweir if ( $module =~ /^\s*(.*?)\,/ ) { $module = $1; } 793*cdf0e10cSrcweir 794*cdf0e10cSrcweir if ( ! exists($installer::globals::moduledestination{$module}) ) { installer::exiter::exit_program("ERROR: No default destination path found for module $module!", "add_defaultpathes_into_filescollector"); } 795*cdf0e10cSrcweir my $defaultpath = $installer::globals::moduledestination{$module}; 796*cdf0e10cSrcweir $defaultpath =~ s/\/\s*$//; # removing ending slashes 797*cdf0e10cSrcweir my $fulldestpath = $defaultpath . $installer::globals::separator . $destination; 798*cdf0e10cSrcweir 799*cdf0e10cSrcweir $onefile->{'fulldestpath'} = $fulldestpath; 800*cdf0e10cSrcweir } 801*cdf0e10cSrcweir} 802*cdf0e10cSrcweir 803*cdf0e10cSrcweir##################################################################### 804*cdf0e10cSrcweir# Creating list of cabinet files from packages 805*cdf0e10cSrcweir##################################################################### 806*cdf0e10cSrcweir 807*cdf0e10cSrcweirsub prepare_cabinet_files 808*cdf0e10cSrcweir{ 809*cdf0e10cSrcweir my ($packages, $allvariables) = @_; 810*cdf0e10cSrcweir 811*cdf0e10cSrcweir if ( ! ( $#{$packages} > -1 )) { installer::exiter::exit_program("ERROR: No packages defined!", "print_content"); } 812*cdf0e10cSrcweir 813*cdf0e10cSrcweir installer::logger::include_header_into_logfile("Preparing cabinet files:"); 814*cdf0e10cSrcweir 815*cdf0e10cSrcweir my $infoline = ""; 816*cdf0e10cSrcweir 817*cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$packages}; $i++ ) 818*cdf0e10cSrcweir { 819*cdf0e10cSrcweir my $onepackage = ${$packages}[$i]; 820*cdf0e10cSrcweir 821*cdf0e10cSrcweir my $cabinetfile = "$onepackage->{'packagename'}\.cab"; 822*cdf0e10cSrcweir 823*cdf0e10cSrcweir resolve_packagevariables(\$cabinetfile, $allvariables, 0); 824*cdf0e10cSrcweir 825*cdf0e10cSrcweir $installer::globals::allcabinets{$cabinetfile} = 1; 826*cdf0e10cSrcweir 827*cdf0e10cSrcweir # checking all items that must be defined 828*cdf0e10cSrcweir 829*cdf0e10cSrcweir $infoline = "Package $onepackage->{'module'}\n"; 830*cdf0e10cSrcweir push(@installer::globals::logfileinfo, $infoline); 831*cdf0e10cSrcweir 832*cdf0e10cSrcweir # Assigning the cab file to the module and also to all corresponding sub modules 833*cdf0e10cSrcweir 834*cdf0e10cSrcweir my $onemodule; 835*cdf0e10cSrcweir foreach $onemodule ( @{$onepackage->{'allmodules'}} ) 836*cdf0e10cSrcweir { 837*cdf0e10cSrcweir if ( ! exists($installer::globals::allcabinetassigns{$onemodule}) ) 838*cdf0e10cSrcweir { 839*cdf0e10cSrcweir $installer::globals::allcabinetassigns{$onemodule} = $cabinetfile; 840*cdf0e10cSrcweir } 841*cdf0e10cSrcweir else 842*cdf0e10cSrcweir { 843*cdf0e10cSrcweir my $infoline = "Warning: Already existing assignment: $onemodule : $installer::globals::allcabinetassigns{$onemodule}\n"; 844*cdf0e10cSrcweir push(@installer::globals::logfileinfo, $infoline); 845*cdf0e10cSrcweir $infoline = "Ignoring further assignment: $onemodule : $cabinetfile\n"; 846*cdf0e10cSrcweir push(@installer::globals::logfileinfo, $infoline); 847*cdf0e10cSrcweir } 848*cdf0e10cSrcweir } 849*cdf0e10cSrcweir } 850*cdf0e10cSrcweir} 851*cdf0e10cSrcweir 852*cdf0e10cSrcweir##################################################################### 853*cdf0e10cSrcweir# Logging assignments of cabinet files 854*cdf0e10cSrcweir##################################################################### 855*cdf0e10cSrcweir 856*cdf0e10cSrcweirsub log_cabinet_assignments 857*cdf0e10cSrcweir{ 858*cdf0e10cSrcweir installer::logger::include_header_into_logfile("Logging cabinet files:"); 859*cdf0e10cSrcweir 860*cdf0e10cSrcweir my $infoline = "List of cabinet files:\n"; 861*cdf0e10cSrcweir push(@installer::globals::logfileinfo, $infoline); 862*cdf0e10cSrcweir 863*cdf0e10cSrcweir my $key; 864*cdf0e10cSrcweir foreach $key ( sort keys %installer::globals::allcabinets ) { push(@installer::globals::logfileinfo, "\t$key\n"); } 865*cdf0e10cSrcweir 866*cdf0e10cSrcweir $infoline = "\nList of assignments from modules to cabinet files:\n"; 867*cdf0e10cSrcweir push(@installer::globals::logfileinfo, $infoline); 868*cdf0e10cSrcweir 869*cdf0e10cSrcweir foreach $key ( sort keys %installer::globals::allcabinetassigns ) { push(@installer::globals::logfileinfo, "\t$key : $installer::globals::allcabinetassigns{$key}\n"); } 870*cdf0e10cSrcweir} 871*cdf0e10cSrcweir 872*cdf0e10cSrcweir1; 873