xref: /AOO41X/main/solenv/bin/modules/installer/packagelist.pm (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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