xref: /trunk/main/solenv/bin/modules/installer/packagelist.pm (revision d620b54767df0d2c7d9557af4be4c7303d55d13c)
19780544fSAndrew Rist#**************************************************************
2cdf0e10cSrcweir#
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
10cdf0e10cSrcweir#
119780544fSAndrew Rist#    http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir#
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.
19cdf0e10cSrcweir#
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
530b274bc22SAndre 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
681b274bc22SAndre 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
710b274bc22SAndre 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            {
719b274bc22SAndre Fischer                $installer::logger::Lang->printf("\t%s:\n", $key);
720cdf0e10cSrcweir                my $onemodule;
721cdf0e10cSrcweir                foreach $onemodule ( @{$onepackage->{$key}} )
722cdf0e10cSrcweir                {
723b274bc22SAndre Fischer                    $installer::logger::Lang->printf("\t\t%s\n", $onemodule);
724cdf0e10cSrcweir                }
725cdf0e10cSrcweir            }
726cdf0e10cSrcweir            else
727cdf0e10cSrcweir            {
728b274bc22SAndre Fischer                $installer::logger::Lang->printf("\t%s: %s\n", $key, $onepackage->{$key});
729cdf0e10cSrcweir            }
730cdf0e10cSrcweir        }
731cdf0e10cSrcweir
732b274bc22SAndre Fischer        $installer::logger::Lang->printf("\n");
733cdf0e10cSrcweir
734cdf0e10cSrcweir    }
735cdf0e10cSrcweir}
736cdf0e10cSrcweir
737cdf0e10cSrcweir#####################################################################
738*86e1cf34SPedro Giffuni# Creating assignments from modules to destination paths.
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#####################################################################
764*86e1cf34SPedro Giffuni# Adding the default paths 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
820b274bc22SAndre 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            {
833b274bc22SAndre Fischer                $installer::logger::Lang->printf("Warning: Already existing assignment: %s : %s\n",
834b274bc22SAndre Fischer                    $onemodule,
835b274bc22SAndre Fischer                    $installer::globals::allcabinetassigns{$onemodule});
836b274bc22SAndre Fischer                $installer::logger::Lang->printf("Ignoring further assignment: %s : %s\n",
837b274bc22SAndre Fischer                    $onemodule,
838b274bc22SAndre 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
852b274bc22SAndre Fischer    $installer::logger::Lang->printf("List of cabinet files:\n");
853cdf0e10cSrcweir
854cdf0e10cSrcweir    my $key;
855b274bc22SAndre Fischer    foreach $key ( sort keys %installer::globals::allcabinets )
856b274bc22SAndre Fischer    {
857b274bc22SAndre Fischer        $installer::logger::Lang->printf("\t%s\n", $key);
858b274bc22SAndre Fischer    }
859cdf0e10cSrcweir
860b274bc22SAndre Fischer    $installer::logger::Lang->printf("\n");
861b274bc22SAndre Fischer    $installer::logger::Lang->printf("List of assignments from modules to cabinet files:\n");
862cdf0e10cSrcweir
863b274bc22SAndre Fischer    foreach $key ( sort keys %installer::globals::allcabinetassigns )
864b274bc22SAndre Fischer    {
865b274bc22SAndre Fischer        $installer::logger::Lang->printf("\t%s : %s\n",
866b274bc22SAndre Fischer            $key,
867b274bc22SAndre Fischer            $installer::globals::allcabinetassigns{$key});
868b274bc22SAndre Fischer    }
869cdf0e10cSrcweir}
870cdf0e10cSrcweir
871cdf0e10cSrcweir1;
872