xref: /trunk/main/solenv/bin/modules/installer/setupscript.pm (revision 9780544fa6b4c85f7d9b48452f58c7da854fc9a5)
1*9780544fSAndrew Rist#**************************************************************
2cdf0e10cSrcweir#
3*9780544fSAndrew Rist#  Licensed to the Apache Software Foundation (ASF) under one
4*9780544fSAndrew Rist#  or more contributor license agreements.  See the NOTICE file
5*9780544fSAndrew Rist#  distributed with this work for additional information
6*9780544fSAndrew Rist#  regarding copyright ownership.  The ASF licenses this file
7*9780544fSAndrew Rist#  to you under the Apache License, Version 2.0 (the
8*9780544fSAndrew Rist#  "License"); you may not use this file except in compliance
9*9780544fSAndrew Rist#  with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir#
11*9780544fSAndrew Rist#    http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir#
13*9780544fSAndrew Rist#  Unless required by applicable law or agreed to in writing,
14*9780544fSAndrew Rist#  software distributed under the License is distributed on an
15*9780544fSAndrew Rist#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*9780544fSAndrew Rist#  KIND, either express or implied.  See the License for the
17*9780544fSAndrew Rist#  specific language governing permissions and limitations
18*9780544fSAndrew Rist#  under the License.
19cdf0e10cSrcweir#
20*9780544fSAndrew Rist#**************************************************************
21*9780544fSAndrew Rist
22*9780544fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweirpackage installer::setupscript;
25cdf0e10cSrcweir
26cdf0e10cSrcweiruse installer::existence;
27cdf0e10cSrcweiruse installer::exiter;
28cdf0e10cSrcweiruse installer::globals;
29cdf0e10cSrcweiruse installer::logger;
30cdf0e10cSrcweiruse installer::remover;
31cdf0e10cSrcweiruse installer::scriptitems;
32cdf0e10cSrcweiruse installer::ziplist;
33cdf0e10cSrcweir
34cdf0e10cSrcweir#######################################################
35cdf0e10cSrcweir# Set setup script name, if not defined as parameter
36cdf0e10cSrcweir#######################################################
37cdf0e10cSrcweir
38cdf0e10cSrcweirsub set_setupscript_name
39cdf0e10cSrcweir{
40cdf0e10cSrcweir    my ( $allsettingsarrayref, $includepatharrayref ) = @_;
41cdf0e10cSrcweir
42cdf0e10cSrcweir    my $scriptnameref = installer::ziplist::getinfofromziplist($allsettingsarrayref, "script");
43cdf0e10cSrcweir
44cdf0e10cSrcweir    my $scriptname = $$scriptnameref;
45cdf0e10cSrcweir
46cdf0e10cSrcweir    if ( $scriptname eq "" )    # not defined on command line and not in product list
47cdf0e10cSrcweir    {
48cdf0e10cSrcweir        installer::exiter::exit_program("ERROR: Setup script not defined on command line (-l) and not in product list!", "set_setupscript_name");
49cdf0e10cSrcweir    }
50cdf0e10cSrcweir
51cdf0e10cSrcweir    if ( $installer::globals::compiler =~ /wnt/ )
52cdf0e10cSrcweir    {
53cdf0e10cSrcweir        $scriptname .= ".inf";
54cdf0e10cSrcweir    }
55cdf0e10cSrcweir    else
56cdf0e10cSrcweir    {
57cdf0e10cSrcweir        $scriptname .= ".ins";
58cdf0e10cSrcweir    }
59cdf0e10cSrcweir
60cdf0e10cSrcweir    # and now the complete path for the setup script is needed
61cdf0e10cSrcweir    # The log file cannot be used, because this is the language independent section
62cdf0e10cSrcweir
63cdf0e10cSrcweir    $scriptnameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$scriptname, $includepatharrayref, 1);
64cdf0e10cSrcweir
65cdf0e10cSrcweir    $installer::globals::setupscriptname = $$scriptnameref;
66cdf0e10cSrcweir
67cdf0e10cSrcweir    if ( $installer::globals::setupscriptname eq "" )
68cdf0e10cSrcweir    {
69cdf0e10cSrcweir        installer::exiter::exit_program("ERROR: Script $scriptname not found!", "set_setupscript_name");
70cdf0e10cSrcweir    }
71cdf0e10cSrcweir}
72cdf0e10cSrcweir
73cdf0e10cSrcweir#####################################################################
74cdf0e10cSrcweir# Reading script variables from installation object of script file
75cdf0e10cSrcweir#####################################################################
76cdf0e10cSrcweir
77cdf0e10cSrcweirsub get_all_scriptvariables_from_installation_object
78cdf0e10cSrcweir{
79cdf0e10cSrcweir    my ($scriptref) = @_;
80cdf0e10cSrcweir
81cdf0e10cSrcweir    my @installobjectvariables;
82cdf0e10cSrcweir
83cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$scriptref}; $i++ )
84cdf0e10cSrcweir    {
85cdf0e10cSrcweir        my $line = ${$scriptref}[$i];
86cdf0e10cSrcweir
87cdf0e10cSrcweir        if ( $line =~ /^\s*Installation\s+\w+\s*$/ )    # should be the first line
88cdf0e10cSrcweir        {
89cdf0e10cSrcweir            my $counter = $i+1;
90cdf0e10cSrcweir            my $installline = ${$scriptref}[$counter];
91cdf0e10cSrcweir
92cdf0e10cSrcweir            while (!($installline =~ /^\s*End\s*$/ ))
93cdf0e10cSrcweir            {
94cdf0e10cSrcweir                if ( $installline =~ /^\s*(\w+)\s+\=\s*(.*?)\s*\;\s*$/ )
95cdf0e10cSrcweir                {
96cdf0e10cSrcweir                    my $key = $1;
97cdf0e10cSrcweir                    my $value = $2;
98cdf0e10cSrcweir
99cdf0e10cSrcweir                    # removing leading and ending " in $value
100cdf0e10cSrcweir
101cdf0e10cSrcweir                    if ( $value =~ /^\s*\"(.*)\"\s*$/ )
102cdf0e10cSrcweir                    {
103cdf0e10cSrcweir                        $value = $1;
104cdf0e10cSrcweir                    }
105cdf0e10cSrcweir
106cdf0e10cSrcweir                    $key = "\%" . uc($key);  # $key is %PRODUCTNAME
107cdf0e10cSrcweir
108cdf0e10cSrcweir                    my $input = $key . " " . $value . "\n";   # $key can only be the first word
109cdf0e10cSrcweir
110cdf0e10cSrcweir                    push(@installobjectvariables ,$input);
111cdf0e10cSrcweir                }
112cdf0e10cSrcweir
113cdf0e10cSrcweir                $counter++;
114cdf0e10cSrcweir                $installline = ${$scriptref}[$counter];
115cdf0e10cSrcweir            }
116cdf0e10cSrcweir        }
117cdf0e10cSrcweir
118cdf0e10cSrcweir        last;   # not interesting after installation object
119cdf0e10cSrcweir    }
120cdf0e10cSrcweir
121cdf0e10cSrcweir    return \@installobjectvariables;
122cdf0e10cSrcweir}
123cdf0e10cSrcweir
124cdf0e10cSrcweir######################################################################
125cdf0e10cSrcweir# Including LCPRODUCTNAME into the array
126cdf0e10cSrcweir######################################################################
127cdf0e10cSrcweir
128cdf0e10cSrcweirsub add_lowercase_productname_setupscriptvariable
129cdf0e10cSrcweir{
130cdf0e10cSrcweir    my ( $variablesref ) = @_;
131cdf0e10cSrcweir
132cdf0e10cSrcweir    for ( my $j = 0; $j <= $#{$variablesref}; $j++ )
133cdf0e10cSrcweir    {
134cdf0e10cSrcweir        my $variableline = ${$variablesref}[$j];
135cdf0e10cSrcweir
136cdf0e10cSrcweir        my ($key, $value);
137cdf0e10cSrcweir
138cdf0e10cSrcweir        if ( $variableline =~ /^\s*\%(\w+?)\s+(.*?)\s*$/ )
139cdf0e10cSrcweir        {
140cdf0e10cSrcweir            $key = $1;
141cdf0e10cSrcweir            $value = $2;
142cdf0e10cSrcweir
143cdf0e10cSrcweir            if ( $key eq "PRODUCTNAME" )
144cdf0e10cSrcweir            {
145cdf0e10cSrcweir                my $newline = "\%LCPRODUCTNAME " . lc($value) . "\n";
146cdf0e10cSrcweir                push(@{$variablesref} ,$newline);
147cdf0e10cSrcweir                my $original = $value;
148cdf0e10cSrcweir                $value =~ s/\s*//g;
149cdf0e10cSrcweir                $newline = "\%ONEWORDPRODUCTNAME " . $value . "\n";
150cdf0e10cSrcweir                push(@{$variablesref} ,$newline);
151cdf0e10cSrcweir                $newline = "\%LCONEWORDPRODUCTNAME " . lc($value) . "\n";
152cdf0e10cSrcweir                push(@{$variablesref} ,$newline);
153cdf0e10cSrcweir                $value = $original;
154cdf0e10cSrcweir                $value =~ s/\s*$//g;
155cdf0e10cSrcweir                $value =~ s/^\s*//g;
156cdf0e10cSrcweir                $value =~ s/ /\%20/g;
157cdf0e10cSrcweir                $newline = "\%MASKEDPRODUCTNAME " . $value . "\n";
158cdf0e10cSrcweir                push(@{$variablesref} ,$newline);
159cdf0e10cSrcweir                $value = $original;
160cdf0e10cSrcweir                $value =~ s/\s/\_/g;
161cdf0e10cSrcweir                # if ( $value =~ /^\s*(.*?)\_(\w)(.*?)\_(\w)(.*)\s*$/ ) { $value = $1 . $2 . $4; }
162cdf0e10cSrcweir                $newline = "\%UNIXPRODUCTNAME " . lc($value) . "\n";
163cdf0e10cSrcweir                push(@{$variablesref} ,$newline);
164cdf0e10cSrcweir                $newline = "\%SYSTEMINTUNIXPACKAGENAME " . lc($value) . "\n";
165cdf0e10cSrcweir                push(@{$variablesref} ,$newline);
166cdf0e10cSrcweir                # if ( $value =~ /^\s*(.*?)\_(\w)(.*?)\_(\w)(.*)\s*$/ ) { $value = $1 . $2 . $4; }
167cdf0e10cSrcweir                # if ( $value =~ /^\s*(.*?)\_(\w)(.*?)\_(\w)(.*)\s*$/ ) { $value = $2 . $4; }
168cdf0e10cSrcweir                $newline = "\%UNIXPACKAGENAME " . lc($value) . "\n";
169cdf0e10cSrcweir                push(@{$variablesref} ,$newline);
170cdf0e10cSrcweir                $value = $original;
171cdf0e10cSrcweir                $value =~ s/\s/\_/g;
172cdf0e10cSrcweir                $value =~ s/\.//g;
173cdf0e10cSrcweir                # if ( $value =~ /^\s*(.*?)\_(\w)(.*?)\_(\w)(.*)\s*$/ ) { $value = $1 . $2 . $4; }
174cdf0e10cSrcweir                $newline = "\%WITHOUTDOTUNIXPRODUCTNAME " . lc($value) . "\n";
175cdf0e10cSrcweir                push(@{$variablesref} ,$newline);
176cdf0e10cSrcweir                # if ( $value =~ /^\s*(.*?)\_(\w)(.*?)\_(\w)(.*)\s*$/ ) { $value = $1 . $2 . $4; }
177cdf0e10cSrcweir                # if ( $value =~ /^\s*(.*?)\_(\w)(.*?)\_(\w)(.*)\s*$/ ) { $value = $2 . $4; }
178cdf0e10cSrcweir                $newline = "\%WITHOUTDOTUNIXPACKAGENAME " . lc($value) . "\n";
179cdf0e10cSrcweir                push(@{$variablesref} ,$newline);
180cdf0e10cSrcweir                $newline = "\%SOLARISBRANDPACKAGENAME " . lc($value) . "\n";
181cdf0e10cSrcweir                push(@{$variablesref} ,$newline);
182cdf0e10cSrcweir                $value = $original;
183cdf0e10cSrcweir            }
184cdf0e10cSrcweir            elsif  ( $key eq "PRODUCTEXTENSION" )
185cdf0e10cSrcweir            {
186cdf0e10cSrcweir                my $newline = "\%LCPRODUCTEXTENSION " . lc($value) . "\n";
187cdf0e10cSrcweir                push(@{$variablesref} ,$newline);
188cdf0e10cSrcweir            }
189cdf0e10cSrcweir            elsif  ( $key eq "PRODUCTVERSION" )
190cdf0e10cSrcweir            {
191cdf0e10cSrcweir                $value =~ s/\.//g;
192cdf0e10cSrcweir                my $newline = "\%WITHOUTDOTPRODUCTVERSION " . $value . "\n";
193cdf0e10cSrcweir                push(@{$variablesref} ,$newline);
194cdf0e10cSrcweir            }
195cdf0e10cSrcweir            elsif  ( $key eq "OOOBASEVERSION" )
196cdf0e10cSrcweir            {
197cdf0e10cSrcweir                $value =~ s/\.//g;
198cdf0e10cSrcweir                my $newline = "\%WITHOUTDOTOOOBASEVERSION " . $value . "\n";
199cdf0e10cSrcweir                push(@{$variablesref} ,$newline);
200cdf0e10cSrcweir            }
201cdf0e10cSrcweir
202cdf0e10cSrcweir        }
203cdf0e10cSrcweir    }
204cdf0e10cSrcweir}
205cdf0e10cSrcweir
206cdf0e10cSrcweir######################################################################
207cdf0e10cSrcweir# Resolving the new introduced lowercase script variables
208cdf0e10cSrcweir######################################################################
209cdf0e10cSrcweir
210cdf0e10cSrcweirsub resolve_lowercase_productname_setupscriptvariable
211cdf0e10cSrcweir{
212cdf0e10cSrcweir    my ( $variablesref ) = @_;
213cdf0e10cSrcweir
214cdf0e10cSrcweir    my %variables = ();
215cdf0e10cSrcweir
216cdf0e10cSrcweir    # First step: Collecting variables
217cdf0e10cSrcweir
218cdf0e10cSrcweir    for ( my $j = 0; $j <= $#{$variablesref}; $j++ )
219cdf0e10cSrcweir    {
220cdf0e10cSrcweir        my $variableline = ${$variablesref}[$j];
221cdf0e10cSrcweir
222cdf0e10cSrcweir        my ($key, $value);
223cdf0e10cSrcweir
224cdf0e10cSrcweir        if ( $variableline =~ /^\s*\%(\w+?)\s+(.*?)\s*$/ )
225cdf0e10cSrcweir        {
226cdf0e10cSrcweir            $key = $1;
227cdf0e10cSrcweir            $value = $2;
228cdf0e10cSrcweir            $variables{$key} = $value;
229cdf0e10cSrcweir        }
230cdf0e10cSrcweir    }
231cdf0e10cSrcweir
232cdf0e10cSrcweir    # Second step: Resolving variables
233cdf0e10cSrcweir
234cdf0e10cSrcweir    for ( my $j = 0; $j <= $#{$variablesref}; $j++ )
235cdf0e10cSrcweir    {
236cdf0e10cSrcweir        if ( ${$variablesref}[$j] =~ /\$\{(.*?)\}/ )
237cdf0e10cSrcweir        {
238cdf0e10cSrcweir            my $key = $1;
239cdf0e10cSrcweir            ${$variablesref}[$j] =~ s/\$\{\Q$key\E\}/$variables{$key}/g;
240cdf0e10cSrcweir        }
241cdf0e10cSrcweir    }
242cdf0e10cSrcweir
243cdf0e10cSrcweir}
244cdf0e10cSrcweir
245cdf0e10cSrcweir######################################################################
246cdf0e10cSrcweir# Replacing all setup script variables inside the setup script file
247cdf0e10cSrcweir######################################################################
248cdf0e10cSrcweir
249cdf0e10cSrcweirsub replace_all_setupscriptvariables_in_script
250cdf0e10cSrcweir{
251cdf0e10cSrcweir    my ( $scriptref, $variablesref ) = @_;
252cdf0e10cSrcweir
253cdf0e10cSrcweir    installer::logger::include_header_into_globallogfile("Replacing variables in setup script (start)");
254cdf0e10cSrcweir
255cdf0e10cSrcweir    # make hash of variables to be substituted if they appear in the script
256cdf0e10cSrcweir    my %subs;
257cdf0e10cSrcweir    for ( my $j = 0; $j <= $#{$variablesref}; $j++ )
258cdf0e10cSrcweir    {
259cdf0e10cSrcweir        my $variableline = ${$variablesref}[$j];
260cdf0e10cSrcweir
261cdf0e10cSrcweir        if ( $variableline =~ /^\s*(\%\w+?)\s+(.*?)\s*$/ )
262cdf0e10cSrcweir        {
263cdf0e10cSrcweir            $subs{$1}= $2;
264cdf0e10cSrcweir        }
265cdf0e10cSrcweir    }
266cdf0e10cSrcweir
267cdf0e10cSrcweir    # This is far faster than running a regexp for each line
268cdf0e10cSrcweir    my $bigstring = '';
269cdf0e10cSrcweir    for my $line (@{$scriptref}) { $bigstring = $bigstring . $line; }
270cdf0e10cSrcweir
271cdf0e10cSrcweir    foreach my $key ( keys %subs )
272cdf0e10cSrcweir    {
273cdf0e10cSrcweir        # Attention: It must be possible to substitute "%PRODUCTNAMEn", "%PRODUCTNAME%PRODUCTVERSIONabc"
274cdf0e10cSrcweir        my $value = $subs{$key};
275cdf0e10cSrcweir        $bigstring =~ s/$key/$value/g;
276cdf0e10cSrcweir    }
277cdf0e10cSrcweir
278cdf0e10cSrcweir    my @newlines = split /\n/, $bigstring;
279cdf0e10cSrcweir    $scriptref = \@newlines;
280cdf0e10cSrcweir
281cdf0e10cSrcweir    # now check for any mis-named '%' variables that we have left
282cdf0e10cSrcweir    my $num = 0;
283cdf0e10cSrcweir    for my $check (@newlines)
284cdf0e10cSrcweir    {
285cdf0e10cSrcweir        $num++;
286cdf0e10cSrcweir        if ( $check =~ /^.*\%\w+.*$/ )
287cdf0e10cSrcweir        {
288cdf0e10cSrcweir            if (( $check =~ /%1/ ) || ( $check =~ /%2/ ) || ( $check =~ /%verify/ )) { next; }
289cdf0e10cSrcweir            my $infoline = "WARNING: mis-named or un-known '%' variable in setup script at line $num:\n$check\n";
290cdf0e10cSrcweir            push( @installer::globals::globallogfileinfo, $infoline);
291cdf0e10cSrcweir            # print STDERR "Warning: mis-named or un-known '%' variable at line $num:\n$check\n";
292cdf0e10cSrcweir        }
293cdf0e10cSrcweir    }
294cdf0e10cSrcweir
295cdf0e10cSrcweir    installer::logger::include_header_into_globallogfile("Replacing variables in setup script (end)");
296cdf0e10cSrcweir
297cdf0e10cSrcweir    return $scriptref;
298cdf0e10cSrcweir}
299cdf0e10cSrcweir
300cdf0e10cSrcweir#######################################################################
301cdf0e10cSrcweir# Collecting all items of the type "searchitem" from the setup script
302cdf0e10cSrcweir#######################################################################
303cdf0e10cSrcweir
304cdf0e10cSrcweirsub get_all_items_from_script
305cdf0e10cSrcweir{
306cdf0e10cSrcweir    my ($scriptref, $searchitem) = @_;
307cdf0e10cSrcweir
308cdf0e10cSrcweir    my @allitemarray = ();
309cdf0e10cSrcweir
310cdf0e10cSrcweir    my ($itemkey, $itemvalue, $valuecounter);
311cdf0e10cSrcweir
312cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$scriptref}; $i++ )
313cdf0e10cSrcweir    {
314cdf0e10cSrcweir        my $line = ${$scriptref}[$i];
315cdf0e10cSrcweir
316cdf0e10cSrcweir        if ( $line =~ /^\s*\Q$searchitem\E\s+(\S+)\s*$/ )
317cdf0e10cSrcweir        {
318cdf0e10cSrcweir            my $gid = $1;
319cdf0e10cSrcweir            my $counter = $i + 1;
320cdf0e10cSrcweir
321cdf0e10cSrcweir            my %oneitemhash = ();
322cdf0e10cSrcweir            my $ismultilang = 0;
323cdf0e10cSrcweir
324cdf0e10cSrcweir            $oneitemhash{'gid'} = $gid;
325cdf0e10cSrcweir
326cdf0e10cSrcweir            while  (!( $line =~ /^\s*End\s*$/ ))
327cdf0e10cSrcweir            {
328cdf0e10cSrcweir                if ( $counter > $#{$scriptref} ) {
329cdf0e10cSrcweir                    installer::exiter::exit_program("Invalid setup script file. End of file reached before 'End' line of '$searchitem' section.", "get_all_items_from_script");
330cdf0e10cSrcweir                }
331cdf0e10cSrcweir                $line = ${$scriptref}[$counter];
332cdf0e10cSrcweir                $counter++;
333cdf0e10cSrcweir
334cdf0e10cSrcweir                if ( $line =~ /^\s*(.+?)\s*\=\s*(.+?)\s*\;\s*$/ )   # only oneliner!
335cdf0e10cSrcweir                {
336cdf0e10cSrcweir                    $itemkey = $1;
337cdf0e10cSrcweir                    $itemvalue = $2;
338cdf0e10cSrcweir
339cdf0e10cSrcweir                    installer::remover::remove_leading_and_ending_quotationmarks(\$itemvalue);
340cdf0e10cSrcweir                    $itemvalue =~ s/\s*$//; # removing ending whitespaces. Could be introduced by empty variables.
341cdf0e10cSrcweir
342cdf0e10cSrcweir                    $oneitemhash{$itemkey} = $itemvalue;
343cdf0e10cSrcweir
344cdf0e10cSrcweir                    if ( $itemkey =~ /^\s*\S+\s+\(\S+\)\s*$/ )
345cdf0e10cSrcweir                    {
346cdf0e10cSrcweir                        $ismultilang = 1;
347cdf0e10cSrcweir                    }
348cdf0e10cSrcweir                }
349cdf0e10cSrcweir                else
350cdf0e10cSrcweir                {
351cdf0e10cSrcweir                    if ( $searchitem eq "Module" ) # more than one line, for instance files at modules!
352cdf0e10cSrcweir                    {
353cdf0e10cSrcweir                        if (( $line =~ /^\s*(.+?)\s*\=\s*\(/ ) && (!($line =~ /\)\;\s*$ / )))
354cdf0e10cSrcweir                        {
355cdf0e10cSrcweir                            if ( $line =~ /^\s*(.+?)\s*\=\s*(.+)/ ) # the first line
356cdf0e10cSrcweir                            {
357cdf0e10cSrcweir                                $itemkey = $1;
358cdf0e10cSrcweir                                $itemvalue = $2;
359cdf0e10cSrcweir                                $itemvalue =~ s/\s*$//;
360cdf0e10cSrcweir                            }
361cdf0e10cSrcweir
362cdf0e10cSrcweir                            # collecting the complete itemvalue
363cdf0e10cSrcweir
364cdf0e10cSrcweir                            $valuecounter = $counter;
365cdf0e10cSrcweir                            $line = ${$scriptref}[$valuecounter];
366cdf0e10cSrcweir                            installer::remover::remove_leading_and_ending_whitespaces(\$line);
367cdf0e10cSrcweir                            $itemvalue = $itemvalue . $line;
368cdf0e10cSrcweir
369cdf0e10cSrcweir                            while (!( $line =~ /\)\;\s*$/ ))
370cdf0e10cSrcweir                            {
371cdf0e10cSrcweir                                $valuecounter++;
372cdf0e10cSrcweir                                $line = ${$scriptref}[$valuecounter];
373cdf0e10cSrcweir                                installer::remover::remove_leading_and_ending_whitespaces(\$line);
374cdf0e10cSrcweir                                $itemvalue = $itemvalue . $line;
375cdf0e10cSrcweir                            }
376cdf0e10cSrcweir
377cdf0e10cSrcweir                            # removing ending ";"
378cdf0e10cSrcweir                            $itemvalue =~ s/\;\s*$//;
379cdf0e10cSrcweir
380cdf0e10cSrcweir                            $oneitemhash{$itemkey} = $itemvalue;
381cdf0e10cSrcweir
382cdf0e10cSrcweir                            if ( $itemkey =~ /^\s*\S+\s+\(\S+\)\s*$/ )
383cdf0e10cSrcweir                            {
384cdf0e10cSrcweir                                $ismultilang = 1;
385cdf0e10cSrcweir                            }
386cdf0e10cSrcweir                        }
387cdf0e10cSrcweir                    }
388cdf0e10cSrcweir                }
389cdf0e10cSrcweir            }
390cdf0e10cSrcweir
391cdf0e10cSrcweir            $oneitemhash{'ismultilingual'} = $ismultilang;
392cdf0e10cSrcweir
393cdf0e10cSrcweir            push(@allitemarray, \%oneitemhash);
394cdf0e10cSrcweir        }
395cdf0e10cSrcweir    }
396cdf0e10cSrcweir
397cdf0e10cSrcweir    return \@allitemarray;
398cdf0e10cSrcweir}
399cdf0e10cSrcweir
400cdf0e10cSrcweir######################################################################
401cdf0e10cSrcweir# Collecting all folder at folderitems, that are predefined values
402cdf0e10cSrcweir# For example: PREDEFINED_AUTOSTART
403cdf0e10cSrcweir######################################################################
404cdf0e10cSrcweir
405cdf0e10cSrcweirsub add_predefined_folder
406cdf0e10cSrcweir{
407cdf0e10cSrcweir    my ( $folderitemref, $folderref ) = @_;
408cdf0e10cSrcweir
409cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$folderitemref}; $i++ )
410cdf0e10cSrcweir    {
411cdf0e10cSrcweir        my $folderitem = ${$folderitemref}[$i];
412cdf0e10cSrcweir        my $folderid = $folderitem->{'FolderID'};
413cdf0e10cSrcweir
414cdf0e10cSrcweir        if ( $folderid =~ /PREDEFINED_/ )
415cdf0e10cSrcweir        {
416cdf0e10cSrcweir            if (! installer::existence::exists_in_array_of_hashes("gid", $folderid, $folderref))
417cdf0e10cSrcweir            {
418cdf0e10cSrcweir                my %folder = ();
419cdf0e10cSrcweir                $folder{'ismultilingual'} = "0";
420cdf0e10cSrcweir                $folder{'Name'} = "";
421cdf0e10cSrcweir                $folder{'gid'} = $folderid;
422cdf0e10cSrcweir
423cdf0e10cSrcweir                push(@{$folderref}, \%folder);
424cdf0e10cSrcweir            }
425cdf0e10cSrcweir        }
426cdf0e10cSrcweir    }
427cdf0e10cSrcweir}
428cdf0e10cSrcweir
429cdf0e10cSrcweir#####################################################################################
430cdf0e10cSrcweir# If folderitems are non-advertised, the component needs to have a registry key
431cdf0e10cSrcweir# below HKCU as key path. Therefore it is required, to mark the file belonging
432cdf0e10cSrcweir# to a non-advertised shortcut, that a special userreg_xxx registry key can be
433cdf0e10cSrcweir# created during packing process.
434cdf0e10cSrcweir#####################################################################################
435cdf0e10cSrcweir
436cdf0e10cSrcweirsub prepare_non_advertised_files
437cdf0e10cSrcweir{
438cdf0e10cSrcweir    my ( $folderitemref, $filesref ) = @_;
439cdf0e10cSrcweir
440cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$folderitemref}; $i++ )
441cdf0e10cSrcweir    {
442cdf0e10cSrcweir        my $folderitem = ${$folderitemref}[$i];
443cdf0e10cSrcweir        my $styles = "";
444cdf0e10cSrcweir        if ( $folderitem->{'Styles'} ) { $styles = $folderitem->{'Styles'}; }
445cdf0e10cSrcweir
446cdf0e10cSrcweir        if ( $styles =~ /\bNON_ADVERTISED\b/ )
447cdf0e10cSrcweir        {
448cdf0e10cSrcweir            my $fileid = $folderitem->{'FileID'};
449cdf0e10cSrcweir            if ( $folderitem->{'ComponentIDFile'} ) { $fileid = $folderitem->{'ComponentIDFile'}; }
450cdf0e10cSrcweir            my $onefile = installer::worker::find_file_by_id($filesref, $fileid);
451cdf0e10cSrcweir
452cdf0e10cSrcweir            # Attention: If $onefile with "FileID" is not found, this is not always an error.
453cdf0e10cSrcweir            # FileID can also contain an executable file, for example msiexec.exe.
454cdf0e10cSrcweir            if ( $onefile ne "" ) { $onefile->{'needs_user_registry_key'} = 1; }
455cdf0e10cSrcweir        }
456cdf0e10cSrcweir    }
457cdf0e10cSrcweir}
458cdf0e10cSrcweir
459cdf0e10cSrcweir#####################################################################################
460cdf0e10cSrcweir# Adding all variables defined in the installation object into the hash
461cdf0e10cSrcweir# of all variables from the zip list file.
462cdf0e10cSrcweir# This is needed if variables are defined in the installation object,
463cdf0e10cSrcweir# but not in the zip list file.
464cdf0e10cSrcweir# If there is a definition in the zip list file and in the installation
465cdf0e10cSrcweir# object, the installation object is more important
466cdf0e10cSrcweir#####################################################################################
467cdf0e10cSrcweir
468cdf0e10cSrcweirsub add_installationobject_to_variables
469cdf0e10cSrcweir{
470cdf0e10cSrcweir    my ($allvariables, $allscriptvariablesref) = @_;
471cdf0e10cSrcweir
472cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$allscriptvariablesref}; $i++ )
473cdf0e10cSrcweir    {
474cdf0e10cSrcweir        my $line = ${$allscriptvariablesref}[$i];
475cdf0e10cSrcweir
476cdf0e10cSrcweir        if ( $line =~ /^\s*\%(\w+)\s+(.*?)\s*$/ )
477cdf0e10cSrcweir        {
478cdf0e10cSrcweir            my $key = $1;
479cdf0e10cSrcweir            my $value = $2;
480cdf0e10cSrcweir
481cdf0e10cSrcweir            $allvariables->{$key} = $value; # overwrite existing values from zip.lst
482cdf0e10cSrcweir        }
483cdf0e10cSrcweir    }
484cdf0e10cSrcweir}
485cdf0e10cSrcweir
486cdf0e10cSrcweir#####################################################################################
487cdf0e10cSrcweir# Adding all variables, that must be defined, but are not defined until now.
488cdf0e10cSrcweir# List of this varibles: @installer::globals::forced_properties
489cdf0e10cSrcweir#####################################################################################
490cdf0e10cSrcweir
491cdf0e10cSrcweirsub add_forced_properties
492cdf0e10cSrcweir{
493cdf0e10cSrcweir    my ($allvariables) = @_;
494cdf0e10cSrcweir
495cdf0e10cSrcweir    my $property;
496cdf0e10cSrcweir    foreach $property ( @installer::globals::forced_properties )
497cdf0e10cSrcweir    {
498cdf0e10cSrcweir        if ( ! exists($allvariables->{$property}) ) { $allvariables->{$property} = ""; }
499cdf0e10cSrcweir    }
500cdf0e10cSrcweir}
501cdf0e10cSrcweir
502cdf0e10cSrcweir#####################################################################################
503cdf0e10cSrcweir# Some properties are created automatically. It should be possible to
504cdf0e10cSrcweir# overwrite them, with PRESET properties. For example UNIXPRODUCTNAME
505cdf0e10cSrcweir# with PRESETUNIXPRODUCTNAME, if this is defined and the automatic process
506cdf0e10cSrcweir# does not deliver the desired results.
507cdf0e10cSrcweir#####################################################################################
508cdf0e10cSrcweir
509cdf0e10cSrcweirsub replace_preset_properties
510cdf0e10cSrcweir{
511cdf0e10cSrcweir    my ($allvariables) = @_;
512cdf0e10cSrcweir
513cdf0e10cSrcweir    # SOLARISBRANDPACKAGENAME
514cdf0e10cSrcweir    # needs to be replaced by
515cdf0e10cSrcweir    # PRESETSOLARISBRANDPACKAGENAME
516cdf0e10cSrcweir
517cdf0e10cSrcweir    my @presetproperties = ();
518cdf0e10cSrcweir    push(@presetproperties, "SOLARISBRANDPACKAGENAME");
519cdf0e10cSrcweir    push(@presetproperties, "SYSTEMINTUNIXPACKAGENAME");
520cdf0e10cSrcweir    # push(@presetproperties, "UNIXPACKAGENAME");
521cdf0e10cSrcweir    # push(@presetproperties, "WITHOUTDOTUNIXPACKAGENAME");
522cdf0e10cSrcweir    # push(@presetproperties, "UNIXPRODUCTNAME");
523cdf0e10cSrcweir    # push(@presetproperties, "WITHOUTDOTUNIXPRODUCTNAME");
524cdf0e10cSrcweir
525cdf0e10cSrcweir
526cdf0e10cSrcweir    foreach $property ( @presetproperties )
527cdf0e10cSrcweir    {
528cdf0e10cSrcweir        my $presetproperty = "PRESET" . $property;
529cdf0e10cSrcweir        if (( exists($allvariables->{$presetproperty}) ) && ( $allvariables->{$presetproperty} ne "" ))
530cdf0e10cSrcweir        {
531cdf0e10cSrcweir            $allvariables->{$property} = $allvariables->{$presetproperty};
532cdf0e10cSrcweir        }
533cdf0e10cSrcweir    }
534cdf0e10cSrcweir}
535cdf0e10cSrcweir
536cdf0e10cSrcweir1;
537