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