xref: /trunk/main/solenv/bin/modules/installer/ziplist.pm (revision 95e2fe77240256cfc0711c47019d8b74a6327be0)
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::ziplist;
25cdf0e10cSrcweir
26cdf0e10cSrcweiruse installer::existence;
27cdf0e10cSrcweiruse installer::exiter;
28cdf0e10cSrcweiruse installer::globals;
29cdf0e10cSrcweiruse installer::logger;
30cdf0e10cSrcweiruse installer::parameter;
31cdf0e10cSrcweiruse installer::remover;
32cdf0e10cSrcweiruse installer::systemactions;
336ab8adf6SAndre Fischeruse strict;
346ab8adf6SAndre Fischer
356ab8adf6SAndre Fischer=head2 read_openoffice_lst_file (#loggingdir)
366ab8adf6SAndre Fischer    Read the settings and variables from the settings file (typically 'openoffice.lst').
376ab8adf6SAndre Fischer=cut
386ab8adf6SAndre Fischersub read_openoffice_lst_file ($$;$)
396ab8adf6SAndre Fischer{
406ab8adf6SAndre Fischer    my ($filename, $product_name, $loggingdir) = @_;
416ab8adf6SAndre Fischer
426ab8adf6SAndre Fischer    # Read all lines from the settings file.
436ab8adf6SAndre Fischer    my $ziplistref = installer::files::read_file($filename);
446ab8adf6SAndre Fischer
456ab8adf6SAndre Fischer    # Extract the lines of the settings block for the current product.
466ab8adf6SAndre Fischer    my ($productblockref, $parent) = installer::ziplist::getproductblock(
476ab8adf6SAndre Fischer        $ziplistref, $product_name, 1);
486ab8adf6SAndre Fischer    my ($settingsblockref, undef) = installer::ziplist::getproductblock($productblockref, "Settings", 0);
496ab8adf6SAndre Fischer    $settingsblockref = installer::ziplist::analyze_settings_block($settingsblockref);
506ab8adf6SAndre Fischer
516ab8adf6SAndre Fischer    # Split into settings and variables.
526ab8adf6SAndre Fischer    my $allsettingsarrayref = installer::ziplist::get_settings_from_ziplist($settingsblockref);
536ab8adf6SAndre Fischer    my $allvariablesarrayref = installer::ziplist::get_variables_from_ziplist($settingsblockref);
546ab8adf6SAndre Fischer
556ab8adf6SAndre Fischer    # global product block from zip.lst
566ab8adf6SAndre Fischer    my ($globalproductblockref, undef) = installer::ziplist::getproductblock(
576ab8adf6SAndre Fischer        $ziplistref, $installer::globals::globalblock, 0);
586ab8adf6SAndre Fischer
596ab8adf6SAndre Fischer    if ($installer::globals::globallogging && defined $loggingdir)
606ab8adf6SAndre Fischer    {
616ab8adf6SAndre Fischer        installer::files::save_file($loggingdir . "productblock.log", $productblockref);
626ab8adf6SAndre Fischer        installer::files::save_file($loggingdir . "settingsblock.log", $settingsblockref);
636ab8adf6SAndre Fischer        installer::files::save_file($loggingdir . "allsettings1.log", $allsettingsarrayref);
646ab8adf6SAndre Fischer        installer::files::save_file($loggingdir . "allvariables1.log", $allvariablesarrayref);
656ab8adf6SAndre Fischer        installer::files::save_file($loggingdir . "globalproductblock.log", $globalproductblockref);
666ab8adf6SAndre Fischer    }
676ab8adf6SAndre Fischer
686ab8adf6SAndre Fischer    # Integrate parent values.
696ab8adf6SAndre Fischer    while (defined $parent)
706ab8adf6SAndre Fischer    {
716ab8adf6SAndre Fischer        my $parentproductblockref;
726ab8adf6SAndre Fischer        ($parentproductblockref, $parent) = installer::ziplist::getproductblock($ziplistref, $parent, 1);
736ab8adf6SAndre Fischer        my ($parentsettingsblockref, undef) = installer::ziplist::getproductblock(
746ab8adf6SAndre Fischer            $parentproductblockref, "Settings", 0);
756ab8adf6SAndre Fischer        $parentsettingsblockref = installer::ziplist::analyze_settings_block($parentsettingsblockref);
766ab8adf6SAndre Fischer        my $allparentsettingsarrayref = installer::ziplist::get_settings_from_ziplist($parentsettingsblockref);
776ab8adf6SAndre Fischer        my $allparentvariablesarrayref = installer::ziplist::get_variables_from_ziplist($parentsettingsblockref);
786ab8adf6SAndre Fischer        if (scalar @$allparentsettingsarrayref > 0)
796ab8adf6SAndre Fischer        {
806ab8adf6SAndre Fischer            $allsettingsarrayref = installer::converter::combine_arrays_from_references_first_win(
816ab8adf6SAndre Fischer                $allsettingsarrayref,
826ab8adf6SAndre Fischer                $allparentsettingsarrayref)
836ab8adf6SAndre Fischer        }
846ab8adf6SAndre Fischer        if (scalar @$allparentvariablesarrayref)
856ab8adf6SAndre Fischer        {
866ab8adf6SAndre Fischer            $allvariablesarrayref = installer::converter::combine_arrays_from_references_first_win(
876ab8adf6SAndre Fischer                $allvariablesarrayref,
886ab8adf6SAndre Fischer                $allparentvariablesarrayref)
896ab8adf6SAndre Fischer        }
906ab8adf6SAndre Fischer    }
916ab8adf6SAndre Fischer
926ab8adf6SAndre Fischer    # Integrate global values.
936ab8adf6SAndre Fischer    if (scalar @$globalproductblockref)
946ab8adf6SAndre Fischer    {
956ab8adf6SAndre Fischer        # settings block from zip.lst
966ab8adf6SAndre Fischer        my ($globalsettingsblockref, undef) = installer::ziplist::getproductblock(
976ab8adf6SAndre Fischer            $globalproductblockref, "Settings", 0);
986ab8adf6SAndre Fischer
996ab8adf6SAndre Fischer        # select data from settings block in zip.lst
1006ab8adf6SAndre Fischer        $globalsettingsblockref = installer::ziplist::analyze_settings_block($globalsettingsblockref);
1016ab8adf6SAndre Fischer
1026ab8adf6SAndre Fischer        my $allglobalsettingsarrayref = installer::ziplist::get_settings_from_ziplist($globalsettingsblockref);
1036ab8adf6SAndre Fischer        my $allglobalvariablesarrayref = installer::ziplist::get_variables_from_ziplist($globalsettingsblockref);
1046ab8adf6SAndre Fischer
1056ab8adf6SAndre Fischer        if ($installer::globals::globallogging && defined $loggingdir)
1066ab8adf6SAndre Fischer        {
1076ab8adf6SAndre Fischer            installer::files::save_file($loggingdir . "globalsettingsblock1.log", $globalsettingsblockref);
1086ab8adf6SAndre Fischer            installer::files::save_file($loggingdir . "globalsettingsblock2.log", $globalsettingsblockref);
1096ab8adf6SAndre Fischer            installer::files::save_file($loggingdir . "allglobalsettings1.log", $allglobalsettingsarrayref);
1106ab8adf6SAndre Fischer            installer::files::save_file($loggingdir . "allglobalvariables1.log", $allglobalvariablesarrayref);
1116ab8adf6SAndre Fischer        }
1126ab8adf6SAndre Fischer
1136ab8adf6SAndre Fischer        if (scalar @$allglobalsettingsarrayref > 0)
1146ab8adf6SAndre Fischer        {
1156ab8adf6SAndre Fischer            $allsettingsarrayref = installer::converter::combine_arrays_from_references_first_win(
1166ab8adf6SAndre Fischer                $allsettingsarrayref, $allglobalsettingsarrayref);
1176ab8adf6SAndre Fischer        }
1186ab8adf6SAndre Fischer        if (scalar @$allglobalvariablesarrayref > 0)
1196ab8adf6SAndre Fischer        {
1206ab8adf6SAndre Fischer            $allvariablesarrayref = installer::converter::combine_arrays_from_references_first_win(
1216ab8adf6SAndre Fischer                $allvariablesarrayref, $allglobalvariablesarrayref);
1226ab8adf6SAndre Fischer        }
1236ab8adf6SAndre Fischer    }
1246ab8adf6SAndre Fischer
1256ab8adf6SAndre Fischer    # Remove multiples (and the trailing ##%##).
1266ab8adf6SAndre Fischer    $allsettingsarrayref = installer::ziplist::remove_multiples_from_ziplist($allsettingsarrayref);
1276ab8adf6SAndre Fischer    $allvariablesarrayref = installer::ziplist::remove_multiples_from_ziplist($allvariablesarrayref);
1286ab8adf6SAndre Fischer    installer::ziplist::replace_variables_in_ziplist_variables($allvariablesarrayref);
1296ab8adf6SAndre Fischer
1306ab8adf6SAndre Fischer    # Transform array into hash.
1316ab8adf6SAndre Fischer    my $allvariableshashref = installer::converter::convert_array_to_hash($allvariablesarrayref);
1326ab8adf6SAndre Fischer
1336ab8adf6SAndre Fischer    # Postprocess the variables.
1346ab8adf6SAndre Fischer    installer::ziplist::set_default_productversion_if_required($allvariableshashref);
1356ab8adf6SAndre Fischer    installer::ziplist::add_variables_to_allvariableshashref($allvariableshashref);
1366ab8adf6SAndre Fischer    installer::ziplist::overwrite_ooovendor($allvariableshashref);
1376ab8adf6SAndre Fischer
1386ab8adf6SAndre Fischer    if ($installer::globals::globallogging && defined $loggingdir)
1396ab8adf6SAndre Fischer    {
1406ab8adf6SAndre Fischer        installer::files::save_file($loggingdir . "allsettings2.log" ,$allsettingsarrayref);
1416ab8adf6SAndre Fischer        installer::files::save_file($loggingdir . "allvariables2.log" ,$allvariablesarrayref);
1426ab8adf6SAndre Fischer    }
1436ab8adf6SAndre Fischer
1446ab8adf6SAndre Fischer    # Eventually we should fix this so that we don't have to return the raw arrays, only the resulting hashes.
1456ab8adf6SAndre Fischer    return ($allvariableshashref, $allsettingsarrayref);
1466ab8adf6SAndre Fischer}
1476ab8adf6SAndre Fischer
148cdf0e10cSrcweir
149cdf0e10cSrcweir#################################################
150cdf0e10cSrcweir# Getting data from path file and zip list file
151cdf0e10cSrcweir#################################################
152cdf0e10cSrcweir
153cdf0e10cSrcweirsub getproductblock
154cdf0e10cSrcweir{
155cdf0e10cSrcweir    my ($fileref, $search, $inheritance) = @_;
156cdf0e10cSrcweir
157cdf0e10cSrcweir    my @searchblock = ();
158cdf0e10cSrcweir    my $searchexists = 0;
159cdf0e10cSrcweir    my $record = 0;
160cdf0e10cSrcweir    my $count = 0;
161cdf0e10cSrcweir    my $line;
162cdf0e10cSrcweir    my $inh = $inheritance ? '(?::\s*(\S+)\s*)?' : "";
163cdf0e10cSrcweir    my $parent;
164cdf0e10cSrcweir
165cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$fileref}; $i++ )
166cdf0e10cSrcweir    {
167cdf0e10cSrcweir        $line = ${$fileref}[$i];
168cdf0e10cSrcweir
169cdf0e10cSrcweir        if ( $line =~ /^\s*\Q$search\E\s*$inh$/i )      # case insensitive
170cdf0e10cSrcweir        {
171cdf0e10cSrcweir            $record = 1;
172cdf0e10cSrcweir            $searchexists = 1;
173cdf0e10cSrcweir            $parent = $1 if $inheritance;
174cdf0e10cSrcweir        }
175cdf0e10cSrcweir
176cdf0e10cSrcweir        if ($record)
177cdf0e10cSrcweir        {
178cdf0e10cSrcweir            push(@searchblock, $line);
179cdf0e10cSrcweir        }
180cdf0e10cSrcweir
181cdf0e10cSrcweir        if ( ($record) && ($line =~ /\{/) )
182cdf0e10cSrcweir        {
183cdf0e10cSrcweir            $count++;
184cdf0e10cSrcweir        }
185cdf0e10cSrcweir
186cdf0e10cSrcweir        if ( ($record) && ($line =~ /\}/) )
187cdf0e10cSrcweir        {
188cdf0e10cSrcweir            $count--;
189cdf0e10cSrcweir        }
190cdf0e10cSrcweir
191cdf0e10cSrcweir        if ( ($record) && ($line =~ /\}/) && ( $count == 0 ) )
192cdf0e10cSrcweir        {
193cdf0e10cSrcweir            $record = 0;
194cdf0e10cSrcweir        }
195cdf0e10cSrcweir    }
196cdf0e10cSrcweir
197cdf0e10cSrcweir    if (( ! $searchexists ) && ( $search ne $installer::globals::globalblock ))
198cdf0e10cSrcweir    {
199cdf0e10cSrcweir        if ($search eq $installer::globals::product )
200cdf0e10cSrcweir        {
201cdf0e10cSrcweir            installer::exiter::exit_program("ERROR: Product $installer::globals::product not defined in $installer::globals::ziplistname", "getproductblock");
202cdf0e10cSrcweir        }
203cdf0e10cSrcweir        elsif ($search eq $installer::globals::compiler )
204cdf0e10cSrcweir        {
205cdf0e10cSrcweir            installer::exiter::exit_program("ERROR: Compiler $installer::globals::compiler not defined in $installer::globals::pathfilename", "getproductblock");
206cdf0e10cSrcweir        }
207cdf0e10cSrcweir        else    # this is not possible
208cdf0e10cSrcweir        {
209cdf0e10cSrcweir            installer::exiter::exit_program("ERROR: Unknown value for $search in getproductblock()", "getproductblock");
210cdf0e10cSrcweir        }
211cdf0e10cSrcweir    }
212cdf0e10cSrcweir
213cdf0e10cSrcweir    return (\@searchblock, $parent);
214cdf0e10cSrcweir}
215cdf0e10cSrcweir
216cdf0e10cSrcweir###############################################
217cdf0e10cSrcweir# Analyzing the settings in the zip list file
218cdf0e10cSrcweir###############################################
219cdf0e10cSrcweir
220cdf0e10cSrcweirsub analyze_settings_block
221cdf0e10cSrcweir{
222cdf0e10cSrcweir    my ($blockref) = @_;
223cdf0e10cSrcweir
224cdf0e10cSrcweir    my @newsettingsblock = ();
225cdf0e10cSrcweir    my $compilerstring = "";
226cdf0e10cSrcweir    my $record = 1;
227cdf0e10cSrcweir    my $counter = 0;
228cdf0e10cSrcweir
229cdf0e10cSrcweir    # Allowed values in settings block:
230cdf0e10cSrcweir    # "Settings", "Variables", "unix" (for destination path and logfile)
231cdf0e10cSrcweir    # Furthermore allowed values are $installer::globals::build (srx645) and $installer::globals::compiler (pro and nonpro (unxsols4.pro))
232cdf0e10cSrcweir
233cdf0e10cSrcweir    # Comment line in settings block begin with "#" or ";"
234cdf0e10cSrcweir
235cdf0e10cSrcweir    if ( $installer::globals::pro )
236cdf0e10cSrcweir    {
237cdf0e10cSrcweir        $compilerstring = $installer::globals::compiler . ".pro";
238cdf0e10cSrcweir    }
239cdf0e10cSrcweir    else
240cdf0e10cSrcweir    {
241cdf0e10cSrcweir        $compilerstring = $installer::globals::compiler;
242cdf0e10cSrcweir    }
243cdf0e10cSrcweir
244cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$blockref}; $i++ )
245cdf0e10cSrcweir    {
246cdf0e10cSrcweir        my $line = ${$blockref}[$i];
247cdf0e10cSrcweir        my $nextline = "";
248cdf0e10cSrcweir
249cdf0e10cSrcweir        if ( ${$blockref}[$i+1] ) { $nextline = ${$blockref}[$i+1]; }
250cdf0e10cSrcweir
251cdf0e10cSrcweir        # removing comment lines
252cdf0e10cSrcweir
253cdf0e10cSrcweir        if (($line =~ /^\s*\#/) || ($line =~ /^\s*\;/))
254cdf0e10cSrcweir        {
255cdf0e10cSrcweir            next;
256cdf0e10cSrcweir        }
257cdf0e10cSrcweir
258*95e2fe77Smseidel        # complete blocks of unknown strings are not recorded
259cdf0e10cSrcweir
260cdf0e10cSrcweir        if ((!($line =~ /^\s*\Q$compilerstring\E\s*$/i)) &&
261cdf0e10cSrcweir            (!($line =~ /^\s*\Q$installer::globals::build\E\s*$/i)) &&
262cdf0e10cSrcweir            (!($line =~ /^\s*\bSettings\b\s*$/i)) &&
263cdf0e10cSrcweir            (!($line =~ /^\s*\bVariables\b\s*$/i)) &&
264cdf0e10cSrcweir            (!($line =~ /^\s*\bunix\b\s*$/i)) &&
265cdf0e10cSrcweir            ($nextline =~ /^\s*\{\s*$/i))
266cdf0e10cSrcweir        {
267cdf0e10cSrcweir            $record = 0;
268cdf0e10cSrcweir            next;           # continue with next $i
269cdf0e10cSrcweir        }
270cdf0e10cSrcweir
271cdf0e10cSrcweir        if (!( $record ))
272cdf0e10cSrcweir        {
273cdf0e10cSrcweir            if ($line =~ /^\s*\{\s*$/i)
274cdf0e10cSrcweir            {
275cdf0e10cSrcweir                $counter++;
276cdf0e10cSrcweir            }
277cdf0e10cSrcweir
278cdf0e10cSrcweir            if ($line =~ /^\s*\}\s*$/i)
279cdf0e10cSrcweir            {
280cdf0e10cSrcweir                $counter--;
281cdf0e10cSrcweir            }
282cdf0e10cSrcweir
283cdf0e10cSrcweir            if ($counter == 0)
284cdf0e10cSrcweir            {
285cdf0e10cSrcweir                $record = 1;
286cdf0e10cSrcweir                next;   # continue with next $i
287cdf0e10cSrcweir            }
288cdf0e10cSrcweir        }
289cdf0e10cSrcweir
290cdf0e10cSrcweir        if ($record)
291cdf0e10cSrcweir        {
292cdf0e10cSrcweir            push(@newsettingsblock, $line);
293cdf0e10cSrcweir        }
294cdf0e10cSrcweir    }
295cdf0e10cSrcweir
296cdf0e10cSrcweir    return \@newsettingsblock;
297cdf0e10cSrcweir}
298cdf0e10cSrcweir
299cdf0e10cSrcweir########################################
300cdf0e10cSrcweir# Settings in zip list file
301cdf0e10cSrcweir########################################
302cdf0e10cSrcweir
303cdf0e10cSrcweirsub get_settings_from_ziplist
304cdf0e10cSrcweir{
305cdf0e10cSrcweir    my ($blockref) = @_;
306cdf0e10cSrcweir
307cdf0e10cSrcweir    my @allsettings = ();
308cdf0e10cSrcweir    my $isvariables = 0;
309cdf0e10cSrcweir    my $counter = 0;
310cdf0e10cSrcweir    my $variablescounter = 0;
311cdf0e10cSrcweir
312cdf0e10cSrcweir    # Take all settings from the settings block
313cdf0e10cSrcweir    # Do not take the variables from the settings block
314cdf0e10cSrcweir    # If a setting is defined more than once, take the
315cdf0e10cSrcweir    # setting with the largest counter (open brackets)
316cdf0e10cSrcweir
317cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$blockref}; $i++ )
318cdf0e10cSrcweir    {
319cdf0e10cSrcweir        my $line = ${$blockref}[$i];
320cdf0e10cSrcweir        my $nextline = "";
321cdf0e10cSrcweir
322cdf0e10cSrcweir        if ( ${$blockref}[$i+1] ) { $nextline = ${$blockref}[$i+1]; }
323cdf0e10cSrcweir
324cdf0e10cSrcweir        if (($line =~ /^\s*\S+\s*$/i) &&
325cdf0e10cSrcweir            ($nextline =~ /^\s*\{\s*$/i) &&
326cdf0e10cSrcweir            (!($line =~ /^\s*Variables\s*$/i)))
327cdf0e10cSrcweir        {
328cdf0e10cSrcweir            next;
329cdf0e10cSrcweir        }
330cdf0e10cSrcweir
331cdf0e10cSrcweir        if ($line =~ /^\s*Variables\s*$/i)
332cdf0e10cSrcweir        {
333cdf0e10cSrcweir            # This is a block of variables
334cdf0e10cSrcweir
335cdf0e10cSrcweir            $isvariables = 1;
336cdf0e10cSrcweir            next;
337cdf0e10cSrcweir        }
338cdf0e10cSrcweir
339cdf0e10cSrcweir        if ($line =~ /^\s*\{\s*$/i)
340cdf0e10cSrcweir        {
341cdf0e10cSrcweir            if ($isvariables)
342cdf0e10cSrcweir            {
343cdf0e10cSrcweir                $variablescounter++;
344cdf0e10cSrcweir            }
345cdf0e10cSrcweir            else
346cdf0e10cSrcweir            {
347cdf0e10cSrcweir                $counter++;
348cdf0e10cSrcweir            }
349cdf0e10cSrcweir
350cdf0e10cSrcweir            next;
351cdf0e10cSrcweir        }
352cdf0e10cSrcweir
353cdf0e10cSrcweir        if ($line =~ /^\s*\}\s*$/i)
354cdf0e10cSrcweir        {
355cdf0e10cSrcweir            if ($isvariables)
356cdf0e10cSrcweir            {
357cdf0e10cSrcweir                $variablescounter--;
358cdf0e10cSrcweir
359cdf0e10cSrcweir                if ($variablescounter == 0)
360cdf0e10cSrcweir                {
361cdf0e10cSrcweir                    $isvariables = 0;
362cdf0e10cSrcweir                }
363cdf0e10cSrcweir            }
364cdf0e10cSrcweir            else
365cdf0e10cSrcweir            {
366cdf0e10cSrcweir                $counter--;
367cdf0e10cSrcweir            }
368cdf0e10cSrcweir
369cdf0e10cSrcweir            next;
370cdf0e10cSrcweir        }
371cdf0e10cSrcweir
372cdf0e10cSrcweir        if ($isvariables)
373cdf0e10cSrcweir        {
374cdf0e10cSrcweir            next;
375cdf0e10cSrcweir        }
376cdf0e10cSrcweir
377cdf0e10cSrcweir        installer::remover::remove_leading_and_ending_whitespaces(\$line);
378cdf0e10cSrcweir
379cdf0e10cSrcweir        $line .= "\t##$counter##\n";
380cdf0e10cSrcweir
381cdf0e10cSrcweir        push(@allsettings, $line);
382cdf0e10cSrcweir    }
383cdf0e10cSrcweir
384cdf0e10cSrcweir    return \@allsettings;
385cdf0e10cSrcweir}
386cdf0e10cSrcweir
387cdf0e10cSrcweir#######################################
388cdf0e10cSrcweir# Variables from zip list file
389cdf0e10cSrcweir#######################################
390cdf0e10cSrcweir
391cdf0e10cSrcweirsub get_variables_from_ziplist
392cdf0e10cSrcweir{
393cdf0e10cSrcweir    my ($blockref) = @_;
394cdf0e10cSrcweir
395cdf0e10cSrcweir    my @allvariables = ();
396cdf0e10cSrcweir    my $isvariables = 0;
397cdf0e10cSrcweir    my $counter = 0;
398cdf0e10cSrcweir    my $variablescounter = 0;
399cdf0e10cSrcweir    my $countersum = 0;
400cdf0e10cSrcweir
401cdf0e10cSrcweir    # Take all variables from the settings block
402cdf0e10cSrcweir    # Do not take the other settings from the settings block
403cdf0e10cSrcweir    # If a variable is defined more than once, take the
404cdf0e10cSrcweir    # variable with the largest counter (open brackets)
405cdf0e10cSrcweir
406cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$blockref}; $i++ )
407cdf0e10cSrcweir    {
408cdf0e10cSrcweir        my $line = ${$blockref}[$i];
409cdf0e10cSrcweir        my $nextline = ${$blockref}[$i+1];
410cdf0e10cSrcweir
411cdf0e10cSrcweir        if ($line =~ /^\s*Variables\s*$/i)
412cdf0e10cSrcweir        {
413cdf0e10cSrcweir            # This is a block of variables
414cdf0e10cSrcweir
415cdf0e10cSrcweir            $isvariables = 1;
416cdf0e10cSrcweir            next;
417cdf0e10cSrcweir        }
418cdf0e10cSrcweir
419cdf0e10cSrcweir        if ($line =~ /^\s*\{\s*$/i)
420cdf0e10cSrcweir        {
421cdf0e10cSrcweir            if ($isvariables)
422cdf0e10cSrcweir            {
423cdf0e10cSrcweir                $variablescounter++;
424cdf0e10cSrcweir            }
425cdf0e10cSrcweir            else
426cdf0e10cSrcweir            {
427cdf0e10cSrcweir                $counter++;
428cdf0e10cSrcweir            }
429cdf0e10cSrcweir
430cdf0e10cSrcweir            next;
431cdf0e10cSrcweir        }
432cdf0e10cSrcweir
433cdf0e10cSrcweir        if ($line =~ /^\s*\}\s*$/i)
434cdf0e10cSrcweir        {
435cdf0e10cSrcweir            if ($isvariables)
436cdf0e10cSrcweir            {
437cdf0e10cSrcweir                $variablescounter--;
438cdf0e10cSrcweir
439cdf0e10cSrcweir                if ($variablescounter == 0)
440cdf0e10cSrcweir                {
441cdf0e10cSrcweir                    $isvariables = 0;
442cdf0e10cSrcweir                }
443cdf0e10cSrcweir            }
444cdf0e10cSrcweir            else
445cdf0e10cSrcweir            {
446cdf0e10cSrcweir                $counter--;
447cdf0e10cSrcweir            }
448cdf0e10cSrcweir
449cdf0e10cSrcweir            next;
450cdf0e10cSrcweir        }
451cdf0e10cSrcweir
452cdf0e10cSrcweir        if (!($isvariables))
453cdf0e10cSrcweir        {
454cdf0e10cSrcweir            next;
455cdf0e10cSrcweir        }
456cdf0e10cSrcweir
457cdf0e10cSrcweir        $countersum = $counter + $variablescounter;
458cdf0e10cSrcweir
459cdf0e10cSrcweir        installer::remover::remove_leading_and_ending_whitespaces(\$line);
460cdf0e10cSrcweir
461cdf0e10cSrcweir        $line .= "\t##$countersum##\n";
462cdf0e10cSrcweir
463cdf0e10cSrcweir        push(@allvariables, $line);
464cdf0e10cSrcweir    }
465cdf0e10cSrcweir
466cdf0e10cSrcweir    return \@allvariables;
467cdf0e10cSrcweir}
468cdf0e10cSrcweir
469cdf0e10cSrcweir#######################################################################
470cdf0e10cSrcweir# Removing multiple variables and settings, defined in zip list file
471cdf0e10cSrcweir#######################################################################
472cdf0e10cSrcweir
473cdf0e10cSrcweirsub remove_multiples_from_ziplist
474cdf0e10cSrcweir{
475cdf0e10cSrcweir    my ($blockref) = @_;
476cdf0e10cSrcweir
477cdf0e10cSrcweir    # remove all definitions of settings and variables
478cdf0e10cSrcweir    # that occur more than once in the zip list file.
479cdf0e10cSrcweir    # Take the one with the most open brackets. This
480cdf0e10cSrcweir    # number is stored at the end of the string.
481cdf0e10cSrcweir
482cdf0e10cSrcweir    my @newarray = ();
483cdf0e10cSrcweir    my @itemarray = ();
484cdf0e10cSrcweir    my ($line, $itemname, $itemnumber);
485cdf0e10cSrcweir
486cdf0e10cSrcweir    # first collecting all variables and settings names
487cdf0e10cSrcweir
488cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$blockref}; $i++ )
489cdf0e10cSrcweir    {
490cdf0e10cSrcweir        $line = ${$blockref}[$i];
491cdf0e10cSrcweir
492cdf0e10cSrcweir        if ($line =~ /^\s*\b(\S*)\b\s+.*\#\#\d+\#\#\s*$/i)
493cdf0e10cSrcweir        {
494cdf0e10cSrcweir            $itemname = $1;
495cdf0e10cSrcweir        }
496cdf0e10cSrcweir
497cdf0e10cSrcweir        if (! installer::existence::exists_in_array($itemname, \@itemarray))
498cdf0e10cSrcweir        {
499cdf0e10cSrcweir            push(@itemarray, $itemname);
500cdf0e10cSrcweir        }
501cdf0e10cSrcweir    }
502cdf0e10cSrcweir
503cdf0e10cSrcweir    # and now all $items can be selected with the highest number
504cdf0e10cSrcweir
505cdf0e10cSrcweir    for ( my $i = 0; $i <= $#itemarray; $i++ )
506cdf0e10cSrcweir    {
507cdf0e10cSrcweir        $itemname = $itemarray[$i];
508cdf0e10cSrcweir
509cdf0e10cSrcweir        my $itemnumbermax = 0;
510cdf0e10cSrcweir        my $printline = "";
511cdf0e10cSrcweir
512cdf0e10cSrcweir        for ( my $j = 0; $j <= $#{$blockref}; $j++ )
513cdf0e10cSrcweir        {
514cdf0e10cSrcweir            $line = ${$blockref}[$j];
515cdf0e10cSrcweir
516cdf0e10cSrcweir            if ($line =~ /^\s*\Q$itemname\E\s+.*\#\#(\d+)\#\#\s*$/)
517cdf0e10cSrcweir            {
518cdf0e10cSrcweir                $itemnumber = $1;
519cdf0e10cSrcweir
520cdf0e10cSrcweir                if ($itemnumber >= $itemnumbermax)
521cdf0e10cSrcweir                {
522cdf0e10cSrcweir                    $printline = $line;
523cdf0e10cSrcweir                    $itemnumbermax = $itemnumber;
524cdf0e10cSrcweir                }
525cdf0e10cSrcweir            }
526cdf0e10cSrcweir        }
527cdf0e10cSrcweir
528cdf0e10cSrcweir        # removing the ending number from the printline
529cdf0e10cSrcweir        # and putting it into the array
530cdf0e10cSrcweir
531cdf0e10cSrcweir        $printline =~ s/\#\#\d+\#\#//;
532cdf0e10cSrcweir        installer::remover::remove_leading_and_ending_whitespaces(\$line);
533cdf0e10cSrcweir        push(@newarray, $printline);
534cdf0e10cSrcweir    }
535cdf0e10cSrcweir
536cdf0e10cSrcweir    return \@newarray;
537cdf0e10cSrcweir}
538cdf0e10cSrcweir
539cdf0e10cSrcweir#########################################################
540cdf0e10cSrcweir# Reading one variable defined in the zip list file
541cdf0e10cSrcweir#########################################################
542cdf0e10cSrcweir
543cdf0e10cSrcweirsub getinfofromziplist
544cdf0e10cSrcweir{
545cdf0e10cSrcweir    my ($blockref, $variable) = @_;
546cdf0e10cSrcweir
547cdf0e10cSrcweir    my $searchstring = "";
548cdf0e10cSrcweir    my $line;
549cdf0e10cSrcweir
550cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$blockref}; $i++ )
551cdf0e10cSrcweir    {
552cdf0e10cSrcweir        $line = ${$blockref}[$i];
553cdf0e10cSrcweir
554cdf0e10cSrcweir        if ( $line =~ /^\s*\Q$variable\E\s+(.+?)\s*$/ ) # "?" for minimal matching
555cdf0e10cSrcweir        {
556cdf0e10cSrcweir            $searchstring = $1;
557cdf0e10cSrcweir            last;
558cdf0e10cSrcweir        }
559cdf0e10cSrcweir    }
560cdf0e10cSrcweir
561cdf0e10cSrcweir    return \$searchstring;
562cdf0e10cSrcweir}
563cdf0e10cSrcweir
564cdf0e10cSrcweir####################################################
565cdf0e10cSrcweir# Replacing variables in include path
566cdf0e10cSrcweir####################################################
567cdf0e10cSrcweir
568cdf0e10cSrcweirsub replace_all_variables_in_pathes
569cdf0e10cSrcweir{
570cdf0e10cSrcweir    my ( $patharrayref, $variableshashref ) = @_;
571cdf0e10cSrcweir
572cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$patharrayref}; $i++ )
573cdf0e10cSrcweir    {
574cdf0e10cSrcweir        my $line = ${$patharrayref}[$i];
575cdf0e10cSrcweir
576cdf0e10cSrcweir        my $key;
577cdf0e10cSrcweir
578cdf0e10cSrcweir        foreach $key (keys %{$variableshashref})
579cdf0e10cSrcweir        {
580cdf0e10cSrcweir            my $value = $variableshashref->{$key};
581cdf0e10cSrcweir
582cdf0e10cSrcweir            if (( $line =~ /\{$key\}/ ) && ( $value eq "" )) { $line = ".\n"; }
583cdf0e10cSrcweir
584cdf0e10cSrcweir            $line =~ s/\{\Q$key\E\}/$value/g;
585cdf0e10cSrcweir        }
586cdf0e10cSrcweir
587cdf0e10cSrcweir        ${$patharrayref}[$i] = $line;
588cdf0e10cSrcweir    }
589cdf0e10cSrcweir}
590cdf0e10cSrcweir
591cdf0e10cSrcweir####################################################
592cdf0e10cSrcweir# Replacing minor in include path
593cdf0e10cSrcweir####################################################
594cdf0e10cSrcweir
595cdf0e10cSrcweirsub replace_minor_in_pathes
596cdf0e10cSrcweir{
597cdf0e10cSrcweir    my ( $patharrayref ) = @_;
598cdf0e10cSrcweir
599cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$patharrayref}; $i++ )
600cdf0e10cSrcweir    {
601cdf0e10cSrcweir        my $line = ${$patharrayref}[$i];
602cdf0e10cSrcweir
603cdf0e10cSrcweir        if ( ! defined $ENV{CWS_WORK_STAMP} and defined $ENV{UPDMINOR} )
604cdf0e10cSrcweir#       if ( $installer::globals::minor )
605cdf0e10cSrcweir        {
606cdf0e10cSrcweir            $line =~ s/\{minor\}/$installer::globals::minor/g;
607cdf0e10cSrcweir            # no difference for minor and minornonpre (ToDo ?)
608cdf0e10cSrcweir            $line =~ s/\{minornonpre\}/$installer::globals::minor/g;
609cdf0e10cSrcweir        }
610cdf0e10cSrcweir        else    # building without a minor
611cdf0e10cSrcweir        {
612cdf0e10cSrcweir            $line =~ s/\.\{minor\}//g;
613cdf0e10cSrcweir            $line =~ s/\.\{minornonpre\}//g;
614cdf0e10cSrcweir        }
615cdf0e10cSrcweir
616cdf0e10cSrcweir        ${$patharrayref}[$i] = $line;
617cdf0e10cSrcweir    }
618cdf0e10cSrcweir}
619cdf0e10cSrcweir
620cdf0e10cSrcweir####################################################
621cdf0e10cSrcweir# Replacing packagetype in include path
622cdf0e10cSrcweir####################################################
623cdf0e10cSrcweir
624cdf0e10cSrcweirsub replace_packagetype_in_pathes
625cdf0e10cSrcweir{
626cdf0e10cSrcweir    my ( $patharrayref ) = @_;
627cdf0e10cSrcweir
628cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$patharrayref}; $i++ )
629cdf0e10cSrcweir    {
630cdf0e10cSrcweir        my $line = ${$patharrayref}[$i];
631cdf0e10cSrcweir
632cdf0e10cSrcweir        if (( $installer::globals::installertypedir ) && ( $line =~ /\{pkgtype\}/ ))
633cdf0e10cSrcweir        {
634cdf0e10cSrcweir            $line =~ s/\{pkgtype\}/$installer::globals::installertypedir/g;
635cdf0e10cSrcweir        }
636cdf0e10cSrcweir
637cdf0e10cSrcweir        ${$patharrayref}[$i] = $line;
638cdf0e10cSrcweir    }
639cdf0e10cSrcweir}
640cdf0e10cSrcweir
641cdf0e10cSrcweir####################################################
64286e1cf34SPedro Giffuni# Removing ending separators in paths
643cdf0e10cSrcweir####################################################
644cdf0e10cSrcweir
645cdf0e10cSrcweirsub remove_ending_separator
646cdf0e10cSrcweir{
647cdf0e10cSrcweir    my ( $patharrayref ) = @_;
648cdf0e10cSrcweir
649cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$patharrayref}; $i++ )
650cdf0e10cSrcweir    {
651cdf0e10cSrcweir        my $line = ${$patharrayref}[$i];
652cdf0e10cSrcweir
653cdf0e10cSrcweir        installer::remover::remove_ending_pathseparator(\$line);
654cdf0e10cSrcweir
655cdf0e10cSrcweir        $line =~ s/\s*$//;
656cdf0e10cSrcweir        $line = $line . "\n";
657cdf0e10cSrcweir
658cdf0e10cSrcweir        ${$patharrayref}[$i] = $line;
659cdf0e10cSrcweir    }
660cdf0e10cSrcweir}
661cdf0e10cSrcweir
662cdf0e10cSrcweir####################################################
663cdf0e10cSrcweir# Replacing languages in include path
664cdf0e10cSrcweir####################################################
665cdf0e10cSrcweir
666cdf0e10cSrcweirsub replace_languages_in_pathes
667cdf0e10cSrcweir{
668cdf0e10cSrcweir    my ( $patharrayref, $languagesref ) = @_;
669cdf0e10cSrcweir
67086e1cf34SPedro Giffuni    installer::logger::include_header_into_logfile("Replacing languages in include paths:");
671cdf0e10cSrcweir
672cdf0e10cSrcweir    my @patharray = ();
673cdf0e10cSrcweir    my $infoline = "";
674cdf0e10cSrcweir
675cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$patharrayref}; $i++ )
676cdf0e10cSrcweir    {
677cdf0e10cSrcweir        my $line = ${$patharrayref}[$i];
678cdf0e10cSrcweir
679cdf0e10cSrcweir        if ( $line =~ /\$\(LANG\)/ )
680cdf0e10cSrcweir        {
681cdf0e10cSrcweir            my $originalline = $line;
682cdf0e10cSrcweir            my $newline = "";
683cdf0e10cSrcweir
684cdf0e10cSrcweir            for ( my $j = 0; $j <= $#{$languagesref}; $j++ )
685cdf0e10cSrcweir            {
686cdf0e10cSrcweir                my $language = ${$languagesref}[$j];
687cdf0e10cSrcweir                $line =~ s/\$\(LANG\)/$language/g;
688cdf0e10cSrcweir                push(@patharray ,$line);
6896ab8adf6SAndre Fischer                my $newdir = $line;
690cdf0e10cSrcweir                $line = $originalline;
691cdf0e10cSrcweir
692cdf0e10cSrcweir                installer::remover::remove_leading_and_ending_whitespaces(\$newline);
693cdf0e10cSrcweir
69486e1cf34SPedro Giffuni                # Is it necessary to refresh the global array, containing all files of all include paths?
695cdf0e10cSrcweir                if ( -d $newdir )
696cdf0e10cSrcweir                {
697cdf0e10cSrcweir                    # Checking if $newdir is empty
698cdf0e10cSrcweir                    if ( ! installer::systemactions::is_empty_dir($newdir) )
699cdf0e10cSrcweir                    {
700cdf0e10cSrcweir                        $installer::globals::refresh_includepathes = 1;
701cdf0e10cSrcweir                        $infoline = "Directory $newdir exists and is not empty. Refreshing global file array is required.\n";
702b274bc22SAndre Fischer                        $installer::logger::Lang->print($infoline);
703cdf0e10cSrcweir                    }
704cdf0e10cSrcweir                    else
705cdf0e10cSrcweir                    {
706cdf0e10cSrcweir                        $infoline = "Directory $newdir is empty. No refresh of global file array required.\n";
707b274bc22SAndre Fischer                        $installer::logger::Lang->print($infoline);
708cdf0e10cSrcweir                    }
709cdf0e10cSrcweir                }
710cdf0e10cSrcweir                else
711cdf0e10cSrcweir                {
712cdf0e10cSrcweir                    $infoline = "Directory $newdir does not exist. No refresh of global file array required.\n";
713b274bc22SAndre Fischer                    $installer::logger::Lang->print($infoline);
714cdf0e10cSrcweir                }
715cdf0e10cSrcweir            }
716cdf0e10cSrcweir        }
717cdf0e10cSrcweir        else        # not language dependent include path
718cdf0e10cSrcweir        {
719cdf0e10cSrcweir            push(@patharray ,$line);
720cdf0e10cSrcweir        }
721cdf0e10cSrcweir    }
722cdf0e10cSrcweir
723cdf0e10cSrcweir    return \@patharray;
724cdf0e10cSrcweir}
725cdf0e10cSrcweir
726cdf0e10cSrcweir#####################################################
727cdf0e10cSrcweir# Collecting all files from all include paths
728cdf0e10cSrcweir#####################################################
729cdf0e10cSrcweir
730cdf0e10cSrcweirsub list_all_files_from_include_path
731cdf0e10cSrcweir{
732cdf0e10cSrcweir    my ( $patharrayref) = @_;
733cdf0e10cSrcweir
73486e1cf34SPedro Giffuni    installer::logger::include_header_into_logfile("Include paths:");
735cdf0e10cSrcweir
736cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$patharrayref}; $i++ )
737cdf0e10cSrcweir    {
738cdf0e10cSrcweir        my $path = ${$patharrayref}[$i];
739cdf0e10cSrcweir        installer::remover::remove_leading_and_ending_whitespaces(\$path);
740cdf0e10cSrcweir        my $infoline = "$path\n";
741b274bc22SAndre Fischer        $installer::logger::Lang->print($infoline);
742cdf0e10cSrcweir    }
743cdf0e10cSrcweir
744b274bc22SAndre Fischer    $installer::logger::Lang->print("\n");
745cdf0e10cSrcweir}
746cdf0e10cSrcweir
747cdf0e10cSrcweir#####################################################
748cdf0e10cSrcweir# Collecting all files from all include paths
749cdf0e10cSrcweir#####################################################
750cdf0e10cSrcweir
751cdf0e10cSrcweirsub set_manufacturer
752cdf0e10cSrcweir{
753cdf0e10cSrcweir    my ($allvariables) = @_;
754cdf0e10cSrcweir
755599cc5b4SOliver-Rainer Wittmann    my $openofficeproductname = "OpenOffice";
756cdf0e10cSrcweir    my $sunname = "";
757cdf0e10cSrcweir
758cdf0e10cSrcweir
759cdf0e10cSrcweir    if ( $allvariables->{'OPENSOURCE'} && $allvariables->{'OPENSOURCE'} == 1 )
760cdf0e10cSrcweir    {
761cdf0e10cSrcweir        $installer::globals::isopensourceproduct = 1;
762cdf0e10cSrcweir        $installer::globals::manufacturer = $openofficeproductname;
763cdf0e10cSrcweir        $installer::globals::longmanufacturer = $openofficeproductname;
764cdf0e10cSrcweir    }
765cdf0e10cSrcweir    else
766cdf0e10cSrcweir    {
767cdf0e10cSrcweir        $installer::globals::isopensourceproduct = 0;
768cdf0e10cSrcweir        if (( $allvariables->{'DEFINEDMANUFACTURER'} ) && ( $allvariables->{'DEFINEDMANUFACTURER'} ne "" )) { $sunname = $allvariables->{'DEFINEDMANUFACTURER'}; }
769cdf0e10cSrcweir        else { installer::exiter::exit_program("ERROR: Property DEFINEDMANUFACTURER has to be set for this product!", "set_manufacturer"); }
770cdf0e10cSrcweir        $installer::globals::manufacturer = $sunname;
771cdf0e10cSrcweir        $installer::globals::longmanufacturer = $sunname;
772cdf0e10cSrcweir    }
773cdf0e10cSrcweir
774cdf0e10cSrcweir    $allvariables->{'MANUFACTURER'} = $installer::globals::manufacturer;
775cdf0e10cSrcweir}
776cdf0e10cSrcweir
777cdf0e10cSrcweir##############################################################
778cdf0e10cSrcweir# A ProductVersion has to be defined. If it is not set in
779cdf0e10cSrcweir# zip.lst, it is set now to "1"
780cdf0e10cSrcweir##############################################################
781cdf0e10cSrcweir
782cdf0e10cSrcweirsub set_default_productversion_if_required
783cdf0e10cSrcweir{
784cdf0e10cSrcweir    my ($allvariables) = @_;
785cdf0e10cSrcweir
786cdf0e10cSrcweir    if (!($allvariables->{'PRODUCTVERSION'}))
787cdf0e10cSrcweir    {
788cdf0e10cSrcweir        $allvariables->{'PRODUCTVERSION'} = 1;  # FAKE
789cdf0e10cSrcweir    }
790cdf0e10cSrcweir}
791cdf0e10cSrcweir
792cdf0e10cSrcweir####################################################
79386e1cf34SPedro Giffuni# Removing .. in paths
794cdf0e10cSrcweir####################################################
795cdf0e10cSrcweir
796cdf0e10cSrcweirsub simplify_path
797cdf0e10cSrcweir{
798cdf0e10cSrcweir    my ( $pathref ) = @_;
799cdf0e10cSrcweir
800cdf0e10cSrcweir    my $oldpath = $$pathref;
801cdf0e10cSrcweir
802cdf0e10cSrcweir    my $change = 0;
803cdf0e10cSrcweir
804cdf0e10cSrcweir    while ( $oldpath =~ /(^.*)(\Q$installer::globals::separator\E.*\w+?)(\Q$installer::globals::separator\E\.\.)(\Q$installer::globals::separator\E.*$)/ )
805cdf0e10cSrcweir    {
806cdf0e10cSrcweir        my $part1 = $1;
807cdf0e10cSrcweir        my $part2 = $4;
808cdf0e10cSrcweir        $oldpath = $part1 . $part2;
809cdf0e10cSrcweir        $change = 1;
810cdf0e10cSrcweir    }
811cdf0e10cSrcweir
812cdf0e10cSrcweir    if ( $change ) { $$pathref = $oldpath . "\n"; }
813cdf0e10cSrcweir}
814cdf0e10cSrcweir
815cdf0e10cSrcweir####################################################
81686e1cf34SPedro Giffuni# Removing ending separators in paths
817cdf0e10cSrcweir####################################################
818cdf0e10cSrcweir
819cdf0e10cSrcweirsub resolve_relative_pathes
820cdf0e10cSrcweir{
821cdf0e10cSrcweir    my ( $patharrayref ) = @_;
822cdf0e10cSrcweir
823cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$patharrayref}; $i++ )
824cdf0e10cSrcweir    {
825cdf0e10cSrcweir        installer::parameter::make_path_absolute(\${$patharrayref}[$i]);
826cdf0e10cSrcweir        simplify_path(\${$patharrayref}[$i]);
827cdf0e10cSrcweir    }
828cdf0e10cSrcweir}
829cdf0e10cSrcweir
830cdf0e10cSrcweir####################################################
831cdf0e10cSrcweir# Replacing variables inside zip list variables
832cdf0e10cSrcweir# Example: {milestone} to be replaced by
833cdf0e10cSrcweir# $installer::globals::lastminor
834cdf0e10cSrcweir####################################################
835cdf0e10cSrcweir
836cdf0e10cSrcweirsub replace_variables_in_ziplist_variables
837cdf0e10cSrcweir{
838cdf0e10cSrcweir    my ($blockref) = @_;
839cdf0e10cSrcweir
840cdf0e10cSrcweir    my $milestonevariable = $installer::globals::lastminor;
841cdf0e10cSrcweir    $milestonevariable =~ s/m//;
842cdf0e10cSrcweir    $milestonevariable =~ s/s/\./;
843cdf0e10cSrcweir
844cdf0e10cSrcweir    my $localminor = $installer::globals::lastminor;
845cdf0e10cSrcweir    if ( $installer::globals::minor ) { $localminor = $installer::globals::minor; }
846cdf0e10cSrcweir
847cdf0e10cSrcweir    my $buildidstringcws = $installer::globals::build . $localminor . "(Build:" . $installer::globals::buildid . ")";
848cdf0e10cSrcweir
849cdf0e10cSrcweir    # the environment variable CWS_WORK_STAMP is set only in CWS
850cdf0e10cSrcweir    if ( $ENV{'CWS_WORK_STAMP'} ) { $buildidstringcws = $buildidstringcws . "\[CWS\:" . $ENV{'CWS_WORK_STAMP'} . "\]"; }
851cdf0e10cSrcweir
852cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$blockref}; $i++ )
853cdf0e10cSrcweir    {
854cdf0e10cSrcweir        if ($installer::globals::lastminor) { ${$blockref}[$i] =~ s/\{milestone\}/$milestonevariable/; }
855cdf0e10cSrcweir        else { ${$blockref}[$i] =~ s/\{milestone\}//; }
856cdf0e10cSrcweir        if ( $localminor ) { ${$blockref}[$i] =~ s/\{minor\}/$localminor/; }
857cdf0e10cSrcweir        else { ${$blockref}[$i] =~ s/\{minor\}//; }
858cdf0e10cSrcweir        if ( $installer::globals::buildid ) { ${$blockref}[$i] =~ s/\{buildid\}/$installer::globals::buildid/; }
859cdf0e10cSrcweir        else { ${$blockref}[$i] =~ s/\{buildid\}//; }
860cdf0e10cSrcweir        if ( $installer::globals::build ) { ${$blockref}[$i] =~ s/\{buildsource\}/$installer::globals::build/; }
861cdf0e10cSrcweir        else { ${$blockref}[$i] =~ s/\{build\}//; }
862cdf0e10cSrcweir        ${$blockref}[$i] =~ s/\{buildidcws\}/$buildidstringcws/;
863cdf0e10cSrcweir    }
864cdf0e10cSrcweir}
865cdf0e10cSrcweir
866cdf0e10cSrcweir###########################################################
867cdf0e10cSrcweir# Overwrite the vendor string in openoffice.lst that is defined in configure
868cdf0e10cSrcweir###########################################################
869cdf0e10cSrcweir
870cdf0e10cSrcweirsub overwrite_ooovendor
871cdf0e10cSrcweir{
872cdf0e10cSrcweir    my ($variableshashref) = @_;
873cdf0e10cSrcweir    $variableshashref->{'OOOVENDOR'} = $ENV{'OOO_VENDOR'} , if( defined $ENV{'OOO_VENDOR'}  && $ENV{'OOO_VENDOR'} ne "" );
874cdf0e10cSrcweir}
875cdf0e10cSrcweir
876cdf0e10cSrcweir###########################################################
877cdf0e10cSrcweir# Adding the lowercase variables into the variableshashref
878cdf0e10cSrcweir###########################################################
879cdf0e10cSrcweir
880cdf0e10cSrcweirsub add_variables_to_allvariableshashref
881cdf0e10cSrcweir{
882cdf0e10cSrcweir    my ($variableshashref) = @_;
883cdf0e10cSrcweir
884cdf0e10cSrcweir    my $lcvariable = lc($variableshashref->{'PRODUCTNAME'});
885cdf0e10cSrcweir    $variableshashref->{'LCPRODUCTNAME'} = $lcvariable;
886cdf0e10cSrcweir
887cdf0e10cSrcweir    if ($variableshashref->{'SHORT_PRODUCTEXTENSION'})
888cdf0e10cSrcweir    {
889cdf0e10cSrcweir        $variableshashref->{'LCPRODUCTEXTENSION'} = "\-" . lc($variableshashref->{'SHORT_PRODUCTEXTENSION'}); # including the "-" !
890cdf0e10cSrcweir    }
891cdf0e10cSrcweir    else
892cdf0e10cSrcweir    {
893cdf0e10cSrcweir        $variableshashref->{'LCPRODUCTEXTENSION'} = "";
894cdf0e10cSrcweir    }
895cdf0e10cSrcweir
8966ab8adf6SAndre Fischer    if ($installer::globals::patch)
8976ab8adf6SAndre Fischer    {
8986ab8adf6SAndre Fischer        $variableshashref->{'PRODUCTADDON'} = $installer::globals::patchaddon;
8996ab8adf6SAndre Fischer    }
9006ab8adf6SAndre Fischer    elsif ($installer::globals::languagepack)
9016ab8adf6SAndre Fischer    {
9026ab8adf6SAndre Fischer        $variableshashref->{'PRODUCTADDON'} = $installer::globals::languagepackaddon;
9036ab8adf6SAndre Fischer    }
9046ab8adf6SAndre Fischer    else
9056ab8adf6SAndre Fischer    {
9066ab8adf6SAndre Fischer        $variableshashref->{'PRODUCTADDON'} = "";
9076ab8adf6SAndre Fischer    }
908cdf0e10cSrcweir
909cdf0e10cSrcweir    my $localbuild = $installer::globals::build;
910cdf0e10cSrcweir    if ( $localbuild =~ /^\s*(\w+?)(\d+)\s*$/ ) { $localbuild = $2; }   # using "680" instead of "src680"
911cdf0e10cSrcweir    $variableshashref->{'PRODUCTMAJOR'} = $localbuild;
912cdf0e10cSrcweir
913cdf0e10cSrcweir    my $localminor = "";
914cdf0e10cSrcweir    if ( $installer::globals::minor ne "" ) { $localminor = $installer::globals::minor; }
915cdf0e10cSrcweir    else { $localminor = $installer::globals::lastminor; }
916cdf0e10cSrcweir    if ( $localminor =~ /^\s*\w(\d+)\w*\s*$/ ) { $localminor = $1; }
917cdf0e10cSrcweir    $variableshashref->{'PRODUCTMINOR'} = $localminor;
918cdf0e10cSrcweir
919cdf0e10cSrcweir    $variableshashref->{'PRODUCTBUILDID'} = $installer::globals::buildid;
920cdf0e10cSrcweir    $variableshashref->{'SYSTEM_LIBTEXTCAT_DATA'} = $ENV{'SYSTEM_LIBTEXTCAT_DATA'} , if( defined $ENV{'SYSTEM_LIBTEXTCAT_DATA'} && $ENV{'SYSTEM_LIBTEXTCAT_DATA'} ne "" );
921cdf0e10cSrcweir}
922cdf0e10cSrcweir
923cdf0e10cSrcweir1;
924