xref: /trunk/main/solenv/bin/modules/installer/download.pm (revision d62abd1a66f4ba03ba5ec1e8fa54ad53c228495c)
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::download;
25cdf0e10cSrcweir
26cdf0e10cSrcweiruse File::Spec;
27cdf0e10cSrcweiruse installer::exiter;
28cdf0e10cSrcweiruse installer::files;
29cdf0e10cSrcweiruse installer::globals;
30cdf0e10cSrcweiruse installer::logger;
31cdf0e10cSrcweiruse installer::pathanalyzer;
32cdf0e10cSrcweiruse installer::remover;
33cdf0e10cSrcweiruse installer::systemactions;
34cdf0e10cSrcweir
350b2dfbacSAndre Fischeruse strict;
360b2dfbacSAndre Fischer
37cdf0e10cSrcweirBEGIN { # This is needed so that cygwin's perl evaluates ACLs
38cdf0e10cSrcweir    # (needed for correctly evaluating the -x test.)
39cdf0e10cSrcweir    if( $^O =~ /cygwin/i ) {
40cdf0e10cSrcweir        require filetest; import filetest "access";
41cdf0e10cSrcweir    }
42cdf0e10cSrcweir}
43cdf0e10cSrcweir
44cdf0e10cSrcweir##################################################################
45cdf0e10cSrcweir# Including the lowercase product name into the script template
46cdf0e10cSrcweir##################################################################
47cdf0e10cSrcweir
48cdf0e10cSrcweirsub put_productname_into_script
49cdf0e10cSrcweir{
50cdf0e10cSrcweir    my ($scriptfile, $variableshashref) = @_;
51cdf0e10cSrcweir
52cdf0e10cSrcweir    my $productname = $variableshashref->{'PRODUCTNAME'};
53cdf0e10cSrcweir    $productname = lc($productname);
54cdf0e10cSrcweir    $productname =~ s/\.//g;    # openoffice.org -> openofficeorg
55cdf0e10cSrcweir    $productname =~ s/\s*//g;
56cdf0e10cSrcweir
57b274bc22SAndre Fischer    $installer::logger::Lang->printf("Adding productname %s into download shell script\n", $productname);
58cdf0e10cSrcweir
59cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$scriptfile}; $i++ )
60cdf0e10cSrcweir    {
61cdf0e10cSrcweir        ${$scriptfile}[$i] =~ s/PRODUCTNAMEPLACEHOLDER/$productname/;
62cdf0e10cSrcweir    }
63cdf0e10cSrcweir}
64cdf0e10cSrcweir
65cdf0e10cSrcweir#########################################################
66cdf0e10cSrcweir# Including the linenumber into the script template
67cdf0e10cSrcweir#########################################################
68cdf0e10cSrcweir
69cdf0e10cSrcweirsub put_linenumber_into_script
70cdf0e10cSrcweir{
71cdf0e10cSrcweir    my ( $scriptfile ) = @_;
72cdf0e10cSrcweir
73cdf0e10cSrcweir    my $linenumber =  $#{$scriptfile} + 2;
74cdf0e10cSrcweir
75b274bc22SAndre Fischer    $installer::logger::Lang->printf("Adding linenumber %d into download shell script\n", $linenumber);
76cdf0e10cSrcweir
77cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$scriptfile}; $i++ )
78cdf0e10cSrcweir    {
79cdf0e10cSrcweir        ${$scriptfile}[$i] =~ s/LINENUMBERPLACEHOLDER/$linenumber/;
80cdf0e10cSrcweir    }
81cdf0e10cSrcweir}
82cdf0e10cSrcweir
83cdf0e10cSrcweir#########################################################
84cdf0e10cSrcweir# Determining the name of the new scriptfile
85cdf0e10cSrcweir#########################################################
86cdf0e10cSrcweir
87cdf0e10cSrcweirsub determine_scriptfile_name
88cdf0e10cSrcweir{
89cdf0e10cSrcweir    my ( $filename ) = @_;
90cdf0e10cSrcweir
91cdf0e10cSrcweir    $installer::globals::downloadfileextension = ".sh";
92cdf0e10cSrcweir    $filename = $filename . $installer::globals::downloadfileextension;
93cdf0e10cSrcweir    $installer::globals::downloadfilename = $filename;
94cdf0e10cSrcweir
95b274bc22SAndre Fischer    $installer::logger::Lang->printf("Setting download shell script file name to %s\n", $filename);
96cdf0e10cSrcweir
97cdf0e10cSrcweir    return $filename;
98cdf0e10cSrcweir}
99cdf0e10cSrcweir
100cdf0e10cSrcweir#########################################################
101cdf0e10cSrcweir# Saving the script file in the installation directory
102cdf0e10cSrcweir#########################################################
103cdf0e10cSrcweir
104cdf0e10cSrcweirsub save_script_file
105cdf0e10cSrcweir{
106cdf0e10cSrcweir    my ($directory, $newscriptfilename, $scriptfile) = @_;
107cdf0e10cSrcweir
108cdf0e10cSrcweir    $newscriptfilename = $directory . $installer::globals::separator . $newscriptfilename;
109cdf0e10cSrcweir    installer::files::save_file($newscriptfilename, $scriptfile);
110cdf0e10cSrcweir
111b274bc22SAndre Fischer    $installer::logger::Lang->printf("Saving script file %s\n", $newscriptfilename);
112cdf0e10cSrcweir
113cdf0e10cSrcweir    if ( ! $installer::globals::iswindowsbuild )
114cdf0e10cSrcweir    {
115cdf0e10cSrcweir        my $localcall = "chmod 775 $newscriptfilename \>\/dev\/null 2\>\&1";
116cdf0e10cSrcweir        system($localcall);
117cdf0e10cSrcweir    }
118cdf0e10cSrcweir
119cdf0e10cSrcweir    return $newscriptfilename;
120cdf0e10cSrcweir}
121cdf0e10cSrcweir
122cdf0e10cSrcweir#########################################################
123cdf0e10cSrcweir# Including checksum and size into script file
124cdf0e10cSrcweir#########################################################
125cdf0e10cSrcweir
126cdf0e10cSrcweirsub put_checksum_and_size_into_script
127cdf0e10cSrcweir{
128cdf0e10cSrcweir    my ($scriptfile, $sumout) = @_;
129cdf0e10cSrcweir
130cdf0e10cSrcweir    my $checksum = "";
131cdf0e10cSrcweir    my $size = "";
132cdf0e10cSrcweir
133cdf0e10cSrcweir    if  ( $sumout =~ /^\s*(\d+)\s+(\d+)\s*$/ )
134cdf0e10cSrcweir    {
135cdf0e10cSrcweir        $checksum = $1;
136cdf0e10cSrcweir        $size = $2;
137cdf0e10cSrcweir    }
138cdf0e10cSrcweir    else
139cdf0e10cSrcweir    {
140cdf0e10cSrcweir        installer::exiter::exit_program("ERROR: Incorrect return value from /usr/bin/sum: $sumout", "put_checksum_and_size_into_script");
141cdf0e10cSrcweir    }
142cdf0e10cSrcweir
143b274bc22SAndre Fischer    $installer::logger::Lang->printf(
144b274bc22SAndre Fischer        "Adding checksum %s and size %s into download shell script\n", $checksum, $size);
145cdf0e10cSrcweir
146cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$scriptfile}; $i++ )
147cdf0e10cSrcweir    {
148cdf0e10cSrcweir        ${$scriptfile}[$i] =~ s/CHECKSUMPLACEHOLDER/$checksum/;
149cdf0e10cSrcweir        ${$scriptfile}[$i] =~ s/DISCSPACEPLACEHOLDER/$size/;
150cdf0e10cSrcweir    }
151cdf0e10cSrcweir
152cdf0e10cSrcweir}
153cdf0e10cSrcweir
154cdf0e10cSrcweir#########################################################
155cdf0e10cSrcweir# Calling md5sum
156cdf0e10cSrcweir#########################################################
157cdf0e10cSrcweir
158cdf0e10cSrcweirsub call_md5sum
159cdf0e10cSrcweir{
160cdf0e10cSrcweir    my ($filename) = @_;
161cdf0e10cSrcweir
1620b2dfbacSAndre Fischer    my $md5sumfile = "/usr/bin/md5sum";
163cdf0e10cSrcweir
164cdf0e10cSrcweir    if ( ! -f $md5sumfile ) { installer::exiter::exit_program("ERROR: No file /usr/bin/md5sum", "call_md5sum"); }
165cdf0e10cSrcweir
166cdf0e10cSrcweir    my $systemcall = "$md5sumfile $filename |";
167cdf0e10cSrcweir
168cdf0e10cSrcweir    my $md5sumoutput = "";
169cdf0e10cSrcweir
170cdf0e10cSrcweir    open (SUM, "$systemcall");
171cdf0e10cSrcweir    $md5sumoutput = <SUM>;
172cdf0e10cSrcweir    close (SUM);
173cdf0e10cSrcweir
174cdf0e10cSrcweir    my $returnvalue = $?;   # $? contains the return value of the systemcall
175cdf0e10cSrcweir
176b274bc22SAndre Fischer    $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall);
177cdf0e10cSrcweir
178cdf0e10cSrcweir    if ($returnvalue)
179cdf0e10cSrcweir    {
180b274bc22SAndre Fischer        $installer::logger::Lang->printf("ERROR: Could not execute \"%s\"!\n", $systemcall);
181cdf0e10cSrcweir    }
182cdf0e10cSrcweir    else
183cdf0e10cSrcweir    {
184b274bc22SAndre Fischer        $installer::logger::Lang->print("Success: Executed \"%s\" successfully!\n", $systemcall);
185cdf0e10cSrcweir    }
186cdf0e10cSrcweir
187cdf0e10cSrcweir    return $md5sumoutput;
188cdf0e10cSrcweir}
189cdf0e10cSrcweir
190cdf0e10cSrcweir#########################################################
191cdf0e10cSrcweir# Calling md5sum
192cdf0e10cSrcweir#########################################################
193cdf0e10cSrcweir
194cdf0e10cSrcweirsub get_md5sum
195cdf0e10cSrcweir{
1960b2dfbacSAndre Fischer    my ($md5sumoutput) = @_;
197cdf0e10cSrcweir
198cdf0e10cSrcweir    my $md5sum;
199cdf0e10cSrcweir
200cdf0e10cSrcweir    if  ( $md5sumoutput =~ /^\s*(\w+?)\s+/ )
201cdf0e10cSrcweir    {
202cdf0e10cSrcweir        $md5sum = $1;
203cdf0e10cSrcweir    }
204cdf0e10cSrcweir    else
205cdf0e10cSrcweir    {
206cdf0e10cSrcweir        installer::exiter::exit_program("ERROR: Incorrect return value from /usr/bin/md5sum: $md5sumoutput", "get_md5sum");
207cdf0e10cSrcweir    }
208cdf0e10cSrcweir
209b274bc22SAndre Fischer    $installer::logger::Lang->printf("Setting md5sum: %s\n", $md5sum);
210cdf0e10cSrcweir
211cdf0e10cSrcweir    return $md5sum;
212cdf0e10cSrcweir}
213cdf0e10cSrcweir
214cdf0e10cSrcweir#########################################################
215cdf0e10cSrcweir# Determining checksum and size of tar file
216cdf0e10cSrcweir#########################################################
217cdf0e10cSrcweir
218cdf0e10cSrcweirsub call_sum
219cdf0e10cSrcweir{
220cdf0e10cSrcweir    my ($filename, $getuidlibrary) = @_;
221cdf0e10cSrcweir
222cdf0e10cSrcweir    my $systemcall = "/usr/bin/sum $filename |";
223cdf0e10cSrcweir
224cdf0e10cSrcweir    my $sumoutput = "";
225cdf0e10cSrcweir
226cdf0e10cSrcweir    open (SUM, "$systemcall");
227cdf0e10cSrcweir    $sumoutput = <SUM>;
228cdf0e10cSrcweir    close (SUM);
229cdf0e10cSrcweir
230cdf0e10cSrcweir    my $returnvalue = $?;   # $? contains the return value of the systemcall
231cdf0e10cSrcweir
232b274bc22SAndre Fischer    $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall);
233cdf0e10cSrcweir
234cdf0e10cSrcweir    if ($returnvalue)
235cdf0e10cSrcweir    {
236b274bc22SAndre Fischer        $installer::logger::Lang->printf("ERROR: Could not execute \"%s\"!\n", $systemcall);
237cdf0e10cSrcweir    }
238cdf0e10cSrcweir    else
239cdf0e10cSrcweir    {
240b274bc22SAndre Fischer        $installer::logger::Lang->printf("Success: Executed \"%s\" successfully!\n", $systemcall);
241cdf0e10cSrcweir    }
242cdf0e10cSrcweir
243cdf0e10cSrcweir    $sumoutput =~ s/\s+$filename\s$//;
244cdf0e10cSrcweir    return $sumoutput;
245cdf0e10cSrcweir}
246cdf0e10cSrcweir
247cdf0e10cSrcweir#########################################################
248cdf0e10cSrcweir# Searching for the getuid.so in the solver
249cdf0e10cSrcweir#########################################################
250cdf0e10cSrcweir
251cdf0e10cSrcweirsub get_path_for_library
252cdf0e10cSrcweir{
253cdf0e10cSrcweir    my ($includepatharrayref) = @_;
254cdf0e10cSrcweir
255cdf0e10cSrcweir    my $getuidlibraryname = "getuid.so";
256cdf0e10cSrcweir
257cdf0e10cSrcweir    my $getuidlibraryref = "";
258cdf0e10cSrcweir
259cdf0e10cSrcweir    if ( $installer::globals::include_pathes_read )
260cdf0e10cSrcweir    {
261cdf0e10cSrcweir        $getuidlibraryref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$getuidlibraryname, $includepatharrayref, 0);
262cdf0e10cSrcweir    }
263cdf0e10cSrcweir    else
264cdf0e10cSrcweir    {
265cdf0e10cSrcweir        $getuidlibraryref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$getuidlibraryname, $includepatharrayref, 0);
266cdf0e10cSrcweir    }
267cdf0e10cSrcweir
268cdf0e10cSrcweir    if ($$getuidlibraryref eq "") { installer::exiter::exit_program("ERROR: Could not find $getuidlibraryname!", "get_path_for_library"); }
269cdf0e10cSrcweir
270cdf0e10cSrcweir    return $$getuidlibraryref;
271cdf0e10cSrcweir}
272cdf0e10cSrcweir
273cdf0e10cSrcweir#########################################################
274cdf0e10cSrcweir# Include the tar file into the script
275cdf0e10cSrcweir#########################################################
276cdf0e10cSrcweir
277cdf0e10cSrcweirsub include_tar_into_script
278cdf0e10cSrcweir{
279cdf0e10cSrcweir    my ($scriptfile, $temporary_tarfile) = @_;
280cdf0e10cSrcweir
281cdf0e10cSrcweir    my $systemcall = "cat $temporary_tarfile >> $scriptfile && rm $temporary_tarfile";
282cdf0e10cSrcweir    my $returnvalue = system($systemcall);
283cdf0e10cSrcweir
284b274bc22SAndre Fischer    $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall);
285cdf0e10cSrcweir
286cdf0e10cSrcweir    if ($returnvalue)
287cdf0e10cSrcweir    {
288b274bc22SAndre Fischer        $installer::logger::Lang->printf("ERROR: Could not execute \"%s\"!\n", $systemcall);
289cdf0e10cSrcweir    }
290cdf0e10cSrcweir    else
291cdf0e10cSrcweir    {
292b274bc22SAndre Fischer        $installer::logger::Lang->printf("Success: Executed \"%s\" successfully!\n", $systemcall);
293cdf0e10cSrcweir    }
294cdf0e10cSrcweir    return $returnvalue;
295cdf0e10cSrcweir}
296cdf0e10cSrcweir
297cdf0e10cSrcweir#########################################################
298cdf0e10cSrcweir# Create a tar file from the binary package
299cdf0e10cSrcweir#########################################################
300cdf0e10cSrcweir
301cdf0e10cSrcweirsub tar_package
302cdf0e10cSrcweir{
303cdf0e10cSrcweir    my ( $installdir, $tarfilename, $getuidlibrary) = @_;
304cdf0e10cSrcweir
305cdf0e10cSrcweir    my $ldpreloadstring = "";
306cdf0e10cSrcweir    if ( $getuidlibrary ne "" ) { $ldpreloadstring = "LD_PRELOAD=" . $getuidlibrary; }
307cdf0e10cSrcweir
308cdf0e10cSrcweir    my $systemcall = "cd $installdir; $ldpreloadstring tar -cf - * > $tarfilename";
309cdf0e10cSrcweir
310cdf0e10cSrcweir    my $returnvalue = system($systemcall);
311cdf0e10cSrcweir
312b274bc22SAndre Fischer    $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall);
313cdf0e10cSrcweir
314cdf0e10cSrcweir    if ($returnvalue)
315cdf0e10cSrcweir    {
316b274bc22SAndre Fischer        $installer::logger::Lang->printf("ERROR: Could not execute \"%s\"!\n", $systemcall);
317cdf0e10cSrcweir    }
318cdf0e10cSrcweir    else
319cdf0e10cSrcweir    {
320b274bc22SAndre Fischer        $installer::logger::Lang->printf("Success: Executed \"\" successfully!\n", $systemcall);
321cdf0e10cSrcweir    }
322cdf0e10cSrcweir
323cdf0e10cSrcweir    my $localcall = "chmod 775 $tarfilename \>\/dev\/null 2\>\&1";
324cdf0e10cSrcweir    $returnvalue = system($localcall);
325cdf0e10cSrcweir
326cdf0e10cSrcweir    return ( -s $tarfilename );
327cdf0e10cSrcweir}
328cdf0e10cSrcweir
329cdf0e10cSrcweir#########################################################
330cdf0e10cSrcweir# Creating a tar.gz file
331cdf0e10cSrcweir#########################################################
332cdf0e10cSrcweir
333cdf0e10cSrcweirsub create_tar_gz_file_from_package
334cdf0e10cSrcweir{
335cdf0e10cSrcweir    my ($installdir, $getuidlibrary) = @_;
336cdf0e10cSrcweir
337cdf0e10cSrcweir    my $alldirs = installer::systemactions::get_all_directories($installdir);
338cdf0e10cSrcweir    my $onedir = ${$alldirs}[0];
339cdf0e10cSrcweir    $installdir = $onedir;
340cdf0e10cSrcweir
341cdf0e10cSrcweir    my $allfiles = installer::systemactions::get_all_files_from_one_directory($installdir);
342cdf0e10cSrcweir
343cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$allfiles}; $i++ )
344cdf0e10cSrcweir    {
345cdf0e10cSrcweir        my $onefile = ${$allfiles}[$i];
346cdf0e10cSrcweir        my $systemcall = "cd $installdir; rm $onefile";
347cdf0e10cSrcweir        my $returnvalue = system($systemcall);
348cdf0e10cSrcweir
349b274bc22SAndre Fischer        $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall);
350cdf0e10cSrcweir
351cdf0e10cSrcweir        if ($returnvalue)
352cdf0e10cSrcweir        {
353b274bc22SAndre Fischer            $installer::logger::Lang->printf("ERROR: Could not execute \"%s\"!\n", $systemcall);
354cdf0e10cSrcweir        }
355cdf0e10cSrcweir        else
356cdf0e10cSrcweir        {
357b274bc22SAndre Fischer            $installer::logger::Lang->printf("Success: Executed \"%s\" successfully!\n", $systemcall);
358cdf0e10cSrcweir        }
359cdf0e10cSrcweir    }
360cdf0e10cSrcweir
361cdf0e10cSrcweir    $alldirs = installer::systemactions::get_all_directories($installdir);
3620b2dfbacSAndre Fischer    my $packagename = ${$alldirs}[0]; # only taking the first Solaris package
363cdf0e10cSrcweir    if ( $packagename eq "" ) { installer::exiter::exit_program("ERROR: Could not find package in directory $installdir!", "determine_packagename"); }
364cdf0e10cSrcweir
365cdf0e10cSrcweir    installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$packagename);
366cdf0e10cSrcweir
367cdf0e10cSrcweir    $installer::globals::downloadfileextension = ".tar.gz";
368cdf0e10cSrcweir    my $targzname = $packagename . $installer::globals::downloadfileextension;
369cdf0e10cSrcweir    $installer::globals::downloadfilename = $targzname;
370cdf0e10cSrcweir    my $ldpreloadstring = "";
371cdf0e10cSrcweir    if ( $getuidlibrary ne "" ) { $ldpreloadstring = "LD_PRELOAD=" . $getuidlibrary; }
372cdf0e10cSrcweir
3730b2dfbacSAndre Fischer    my $systemcall = "cd $installdir; $ldpreloadstring tar -cf - $packagename | gzip > $targzname";
3740b2dfbacSAndre Fischer    $installer::logger::Info->printf("... %s ...\n", $systemcall);
375cdf0e10cSrcweir
376cdf0e10cSrcweir    my $returnvalue = system($systemcall);
377cdf0e10cSrcweir
378b274bc22SAndre Fischer    $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall);
379cdf0e10cSrcweir
380cdf0e10cSrcweir    if ($returnvalue)
381cdf0e10cSrcweir    {
382b274bc22SAndre Fischer        $installer::logger::Lang->printf("ERROR: Could not execute \"%s\"!\n", $systemcall);
383cdf0e10cSrcweir    }
384cdf0e10cSrcweir    else
385cdf0e10cSrcweir    {
386b274bc22SAndre Fischer        $installer::logger::Lang->printf("Success: Executed \"%s\" successfully!\n", $systemcall);
387cdf0e10cSrcweir    }
388cdf0e10cSrcweir}
389cdf0e10cSrcweir
390cdf0e10cSrcweir#########################################################
391cdf0e10cSrcweir# Setting type of installation
392cdf0e10cSrcweir#########################################################
393cdf0e10cSrcweir
394cdf0e10cSrcweirsub get_installation_type
395cdf0e10cSrcweir{
396cdf0e10cSrcweir    my $type = "";
397cdf0e10cSrcweir
398cdf0e10cSrcweir    if ( $installer::globals::languagepack ) { $type = "langpack"; }
399cdf0e10cSrcweir    else { $type = "install"; }
400cdf0e10cSrcweir
401cdf0e10cSrcweir    return $type;
402cdf0e10cSrcweir}
403cdf0e10cSrcweir
404cdf0e10cSrcweir#########################################################
405cdf0e10cSrcweir# Setting installation languages
406cdf0e10cSrcweir#########################################################
407cdf0e10cSrcweir
408cdf0e10cSrcweirsub get_downloadname_language
409cdf0e10cSrcweir{
410cdf0e10cSrcweir    my ($languagestringref) = @_;
411cdf0e10cSrcweir
412cdf0e10cSrcweir    my $languages = $$languagestringref;
413cdf0e10cSrcweir
414cdf0e10cSrcweir    if ( $installer::globals::added_english )
415cdf0e10cSrcweir    {
416cdf0e10cSrcweir        $languages =~ s/en-US_//;
417cdf0e10cSrcweir        $languages =~ s/_en-US//;
418cdf0e10cSrcweir    }
419cdf0e10cSrcweir
420cdf0e10cSrcweir    # en-US is default language and can be removed therefore
421cdf0e10cSrcweir    # for one-language installation sets
422cdf0e10cSrcweir
423cdf0e10cSrcweir    # if ( $languages =~ /^\s*en-US\s*$/ )
424cdf0e10cSrcweir    # {
425cdf0e10cSrcweir    #   $languages = "";
426cdf0e10cSrcweir    # }
427cdf0e10cSrcweir
428cdf0e10cSrcweir    if ( length ($languages) > $installer::globals::max_lang_length )
429cdf0e10cSrcweir    {
430cdf0e10cSrcweir        $languages = 'multi';
431cdf0e10cSrcweir    }
432cdf0e10cSrcweir
433cdf0e10cSrcweir    return $languages;
434cdf0e10cSrcweir}
435cdf0e10cSrcweir
436cdf0e10cSrcweir#########################################################
437cdf0e10cSrcweir# Setting download name
438cdf0e10cSrcweir#########################################################
439cdf0e10cSrcweir
440cdf0e10cSrcweirsub get_downloadname_productname
441cdf0e10cSrcweir{
442cdf0e10cSrcweir    my ($allvariables) = @_;
443cdf0e10cSrcweir
444ff3f4ebcSOliver-Rainer Wittmann    my $start;
445cdf0e10cSrcweir
446ff3f4ebcSOliver-Rainer Wittmann    if ( $allvariables->{'AOODOWNLOADNAMEPREFIX'} )
447ff3f4ebcSOliver-Rainer Wittmann    {
448ff3f4ebcSOliver-Rainer Wittmann        $start = $allvariables->{'AOODOWNLOADNAMEPREFIX'};
449ff3f4ebcSOliver-Rainer Wittmann    }
450ff3f4ebcSOliver-Rainer Wittmann    else
451ff3f4ebcSOliver-Rainer Wittmann    {
452ff3f4ebcSOliver-Rainer Wittmann        $start = "Apache_OpenOffice";
453599cc5b4SOliver-Rainer Wittmann        if ( $allvariables->{'PRODUCTNAME'} eq "OpenOffice" )
454ff3f4ebcSOliver-Rainer Wittmann        {
455ff3f4ebcSOliver-Rainer Wittmann            if ( $allvariables->{'POSTVERSIONEXTENSION'} eq "SDK" )
456ff3f4ebcSOliver-Rainer Wittmann            {
457ff3f4ebcSOliver-Rainer Wittmann                $start .= "-SDK";
458ff3f4ebcSOliver-Rainer Wittmann            }
459ff3f4ebcSOliver-Rainer Wittmann        }
460cdf0e10cSrcweir
461ff3f4ebcSOliver-Rainer Wittmann        if ( $allvariables->{'PRODUCTNAME'} eq "AOO-Developer-Build" )
462ff3f4ebcSOliver-Rainer Wittmann        {
463ff3f4ebcSOliver-Rainer Wittmann            if ( $allvariables->{'POSTVERSIONEXTENSION'} eq "SDK" )
464ff3f4ebcSOliver-Rainer Wittmann            {
465ff3f4ebcSOliver-Rainer Wittmann                $start .= "-Dev-SDK";
466ff3f4ebcSOliver-Rainer Wittmann            }
467ff3f4ebcSOliver-Rainer Wittmann            else
468ff3f4ebcSOliver-Rainer Wittmann            {
469ff3f4ebcSOliver-Rainer Wittmann                $start .= "-Dev";
470ff3f4ebcSOliver-Rainer Wittmann            }
471ff3f4ebcSOliver-Rainer Wittmann        }
472cdf0e10cSrcweir
473ff3f4ebcSOliver-Rainer Wittmann        if ( $allvariables->{'PRODUCTNAME'} eq "URE" )
474ff3f4ebcSOliver-Rainer Wittmann        {
475ff3f4ebcSOliver-Rainer Wittmann            $start .= "-URE";
476ff3f4ebcSOliver-Rainer Wittmann        }
477ff3f4ebcSOliver-Rainer Wittmann    }
478cdf0e10cSrcweir
479cdf0e10cSrcweir    return $start;
480cdf0e10cSrcweir}
481cdf0e10cSrcweir
482cdf0e10cSrcweir#########################################################
483cdf0e10cSrcweir# Setting download version
484cdf0e10cSrcweir#########################################################
485cdf0e10cSrcweir
486cdf0e10cSrcweirsub get_download_version
487cdf0e10cSrcweir{
488cdf0e10cSrcweir    my ($allvariables) = @_;
489cdf0e10cSrcweir
490cdf0e10cSrcweir    my $version = "";
491cdf0e10cSrcweir
492cdf0e10cSrcweir    my $devproduct = 0;
493cdf0e10cSrcweir    if (( $allvariables->{'DEVELOPMENTPRODUCT'} ) && ( $allvariables->{'DEVELOPMENTPRODUCT'} == 1 )) { $devproduct = 1; }
494cdf0e10cSrcweir
495cdf0e10cSrcweir    my $cwsproduct = 0;
496cdf0e10cSrcweir    # the environment variable CWS_WORK_STAMP is set only in CWS
497cdf0e10cSrcweir    if ( $ENV{'CWS_WORK_STAMP'} ) { $cwsproduct = 1; }
498cdf0e10cSrcweir
499cdf0e10cSrcweir    if (( $cwsproduct ) || ( $devproduct ))  # use "DEV300m75"
500cdf0e10cSrcweir    {
501cdf0e10cSrcweir        my $source = uc($installer::globals::build); # DEV300
502cdf0e10cSrcweir        my $localminor = "";
503cdf0e10cSrcweir        if ( $installer::globals::minor ne "" ) { $localminor = $installer::globals::minor; }
504cdf0e10cSrcweir        else { $localminor = $installer::globals::lastminor; }
505cdf0e10cSrcweir        $version = $source . $localminor;
506cdf0e10cSrcweir    }
507cdf0e10cSrcweir    else  # use 3.2.0rc1
508cdf0e10cSrcweir    {
509cdf0e10cSrcweir        $version = $allvariables->{'PRODUCTVERSION'};
510cdf0e10cSrcweir        if (( $allvariables->{'ABOUTBOXPRODUCTVERSION'} ) && ( $allvariables->{'ABOUTBOXPRODUCTVERSION'} ne "" )) { $version = $allvariables->{'ABOUTBOXPRODUCTVERSION'}; }
511cdf0e10cSrcweir        if (( $allvariables->{'SHORT_PRODUCTEXTENSION'} ) && ( $allvariables->{'SHORT_PRODUCTEXTENSION'} ne "" )) { $version = $version . $allvariables->{'SHORT_PRODUCTEXTENSION'}; }
512cdf0e10cSrcweir    }
513cdf0e10cSrcweir
514cdf0e10cSrcweir    return $version;
515cdf0e10cSrcweir}
516cdf0e10cSrcweir
517cdf0e10cSrcweir###############################################################
518cdf0e10cSrcweir# Set date string, format: yymmdd
519cdf0e10cSrcweir###############################################################
520cdf0e10cSrcweir
521cdf0e10cSrcweirsub set_date_string
522cdf0e10cSrcweir{
523cdf0e10cSrcweir    my ($allvariables) = @_;
524cdf0e10cSrcweir
525cdf0e10cSrcweir    my $datestring = "";
526cdf0e10cSrcweir
527cdf0e10cSrcweir    my $devproduct = 0;
528cdf0e10cSrcweir    if (( $allvariables->{'DEVELOPMENTPRODUCT'} ) && ( $allvariables->{'DEVELOPMENTPRODUCT'} == 1 )) { $devproduct = 1; }
529cdf0e10cSrcweir
530cdf0e10cSrcweir    my $cwsproduct = 0;
531cdf0e10cSrcweir    # the environment variable CWS_WORK_STAMP is set only in CWS
532cdf0e10cSrcweir    if ( $ENV{'CWS_WORK_STAMP'} ) { $cwsproduct = 1; }
533cdf0e10cSrcweir
534cdf0e10cSrcweir    my $releasebuild = 1;
535cdf0e10cSrcweir    if (( $allvariables->{'SHORT_PRODUCTEXTENSION'} ) && ( $allvariables->{'SHORT_PRODUCTEXTENSION'} ne "" )) { $releasebuild = 0; }
536cdf0e10cSrcweir
537cdf0e10cSrcweir    if (( ! $devproduct ) && ( ! $cwsproduct ) && ( ! $releasebuild ))
538cdf0e10cSrcweir    {
539cdf0e10cSrcweir        my @timearray = localtime(time);
540cdf0e10cSrcweir
541cdf0e10cSrcweir        my $day = $timearray[3];
542cdf0e10cSrcweir        my $month = $timearray[4] + 1;
543cdf0e10cSrcweir        my $year = $timearray[5] + 1900;
544cdf0e10cSrcweir
545cdf0e10cSrcweir        if ( $month < 10 ) { $month = "0" . $month; }
546cdf0e10cSrcweir        if ( $day < 10 ) { $day = "0" . $day; }
547cdf0e10cSrcweir
548cdf0e10cSrcweir        $datestring = $year . $month . $day;
549cdf0e10cSrcweir    }
550cdf0e10cSrcweir
551cdf0e10cSrcweir    return $datestring;
552cdf0e10cSrcweir}
553cdf0e10cSrcweir
554cdf0e10cSrcweir#################################################################
555cdf0e10cSrcweir# Setting the platform name for download
556cdf0e10cSrcweir#################################################################
557cdf0e10cSrcweir
558cdf0e10cSrcweirsub get_download_platformname
559cdf0e10cSrcweir{
560cdf0e10cSrcweir    my $platformname = "";
561cdf0e10cSrcweir
562cdf0e10cSrcweir    if ( $installer::globals::islinuxbuild )
563cdf0e10cSrcweir    {
564cdf0e10cSrcweir        $platformname = "Linux";
565cdf0e10cSrcweir    }
566cdf0e10cSrcweir    elsif ( $installer::globals::issolarisbuild )
567cdf0e10cSrcweir    {
568cdf0e10cSrcweir        $platformname = "Solaris";
569cdf0e10cSrcweir    }
570cdf0e10cSrcweir    elsif ( $installer::globals::iswindowsbuild )
571cdf0e10cSrcweir    {
572cdf0e10cSrcweir        $platformname = "Win";
573cdf0e10cSrcweir    }
574cdf0e10cSrcweir    elsif ( $installer::globals::isfreebsdbuild )
575cdf0e10cSrcweir    {
576cdf0e10cSrcweir        $platformname = "FreeBSD";
577cdf0e10cSrcweir    }
578cdf0e10cSrcweir    elsif ( $installer::globals::ismacbuild )
579cdf0e10cSrcweir    {
580cdf0e10cSrcweir        $platformname = "MacOS";
581cdf0e10cSrcweir    }
582cdf0e10cSrcweir    else
583cdf0e10cSrcweir    {
584cdf0e10cSrcweir        # $platformname = $installer::globals::packageformat;
585cdf0e10cSrcweir        $platformname = $installer::globals::compiler;
586cdf0e10cSrcweir    }
587cdf0e10cSrcweir
588cdf0e10cSrcweir    return $platformname;
589cdf0e10cSrcweir}
590cdf0e10cSrcweir
591cdf0e10cSrcweir#########################################################
592cdf0e10cSrcweir# Setting the architecture for the download name
593cdf0e10cSrcweir#########################################################
594cdf0e10cSrcweir
595cdf0e10cSrcweirsub get_download_architecture
596cdf0e10cSrcweir{
597cdf0e10cSrcweir    my $arch = "";
598cdf0e10cSrcweir
5994101619dSHerbert Dürr    if(( $installer::globals::compiler =~ /^unxlngi/ )
6004101619dSHerbert Dürr    || ( $installer::globals::compiler =~ /^unxmac.i/ )
6014101619dSHerbert Dürr    || ( $installer::globals::issolarisx86build )
6024101619dSHerbert Dürr    || ( $installer::globals::iswindowsbuild ))
603cdf0e10cSrcweir    {
604cdf0e10cSrcweir        $arch = "x86";
605cdf0e10cSrcweir    }
6064101619dSHerbert Dürr    elsif(( $installer::globals::compiler =~ /^unxlngx/ )
6074101619dSHerbert Dürr    ||    ( $installer::globals::compiler =~ /^unxmaccx/ ))
608cdf0e10cSrcweir    {
609cdf0e10cSrcweir        $arch = "x86-64";
610cdf0e10cSrcweir    }
611cdf0e10cSrcweir    elsif ( $installer::globals::issolarissparcbuild )
612cdf0e10cSrcweir    {
613cdf0e10cSrcweir        $arch = "Sparc";
614cdf0e10cSrcweir    }
6154101619dSHerbert Dürr    elsif(( $installer::globals::compiler =~ /^unxmacxp/ )
6164101619dSHerbert Dürr    ||    ( $installer::globals::compiler =~ /^unxlngppc/ ))
617cdf0e10cSrcweir    {
618cdf0e10cSrcweir        $arch = "PPC";
619cdf0e10cSrcweir    }
620cdf0e10cSrcweir
621cdf0e10cSrcweir    return $arch;
622cdf0e10cSrcweir}
623cdf0e10cSrcweir
624cdf0e10cSrcweir#########################################################
625cdf0e10cSrcweir# Setting the installation type for the download name
626cdf0e10cSrcweir#########################################################
627cdf0e10cSrcweir
628cdf0e10cSrcweirsub get_install_type
629cdf0e10cSrcweir{
630cdf0e10cSrcweir    my ($allvariables) = @_;
631cdf0e10cSrcweir
632cdf0e10cSrcweir    my $type = "";
633cdf0e10cSrcweir
634cdf0e10cSrcweir    if ( $installer::globals::languagepack )
635cdf0e10cSrcweir    {
636cdf0e10cSrcweir        $type = "langpack";
637cdf0e10cSrcweir
638cdf0e10cSrcweir        if ( $installer::globals::islinuxrpmbuild )
639cdf0e10cSrcweir        {
640cdf0e10cSrcweir            $type = $type . "-rpm";
641cdf0e10cSrcweir        }
642cdf0e10cSrcweir
643cdf0e10cSrcweir        if ( $installer::globals::islinuxdebbuild )
644cdf0e10cSrcweir        {
645cdf0e10cSrcweir            $type = $type . "-deb";
646cdf0e10cSrcweir        }
647cdf0e10cSrcweir
648cdf0e10cSrcweir        if ( $installer::globals::packageformat eq "archive" )
649cdf0e10cSrcweir        {
650cdf0e10cSrcweir            $type = $type . "-arc";
651cdf0e10cSrcweir        }
652cdf0e10cSrcweir    }
653cdf0e10cSrcweir    else
654cdf0e10cSrcweir    {
655cdf0e10cSrcweir        $type = "install";
656cdf0e10cSrcweir
657cdf0e10cSrcweir        if ( $installer::globals::islinuxrpmbuild )
658cdf0e10cSrcweir        {
659cdf0e10cSrcweir            $type = $type . "-rpm";
660cdf0e10cSrcweir        }
661cdf0e10cSrcweir
662cdf0e10cSrcweir        if ( $installer::globals::islinuxdebbuild )
663cdf0e10cSrcweir        {
664cdf0e10cSrcweir            $type = $type . "-deb";
665cdf0e10cSrcweir        }
666cdf0e10cSrcweir
667cdf0e10cSrcweir        if ( $installer::globals::packageformat eq "archive" )
668cdf0e10cSrcweir        {
669cdf0e10cSrcweir            $type = $type . "-arc";
670cdf0e10cSrcweir        }
671cdf0e10cSrcweir
672cdf0e10cSrcweir        if (( $allvariables->{'WITHJREPRODUCT'} ) && ( $allvariables->{'WITHJREPRODUCT'} == 1 ))
673cdf0e10cSrcweir        {
674cdf0e10cSrcweir            $type = $type . "-wJRE";
675cdf0e10cSrcweir        }
676cdf0e10cSrcweir
677cdf0e10cSrcweir    }
678cdf0e10cSrcweir
679cdf0e10cSrcweir    return $type;
680cdf0e10cSrcweir}
681cdf0e10cSrcweir
682cdf0e10cSrcweir#########################################################
683cdf0e10cSrcweir# Setting installation addons
684cdf0e10cSrcweir#########################################################
685cdf0e10cSrcweir
686cdf0e10cSrcweirsub get_downloadname_addon
687cdf0e10cSrcweir{
688cdf0e10cSrcweir    my $addon = "";
689cdf0e10cSrcweir
690cdf0e10cSrcweir    if ( $installer::globals::islinuxdebbuild ) { $addon = $addon . "_deb"; }
691cdf0e10cSrcweir
692cdf0e10cSrcweir    if ( $installer::globals::product =~ /_wJRE\s*$/ ) { $addon = "_wJRE"; }
693cdf0e10cSrcweir
694cdf0e10cSrcweir    return $addon;
695cdf0e10cSrcweir}
696cdf0e10cSrcweir
697cdf0e10cSrcweir#########################################################
698cdf0e10cSrcweir# Looking for versionstring in version.info
699cdf0e10cSrcweir# This has to be the only content of this file.
700cdf0e10cSrcweir#########################################################
701cdf0e10cSrcweir
702cdf0e10cSrcweirsub get_versionstring
703cdf0e10cSrcweir{
704cdf0e10cSrcweir    my ( $versionfile ) = @_;
705cdf0e10cSrcweir
706cdf0e10cSrcweir    my $versionstring = "";
707cdf0e10cSrcweir
708cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$versionfile}; $i++ )
709cdf0e10cSrcweir    {
710cdf0e10cSrcweir        my $oneline = ${$versionfile}[$i];
711cdf0e10cSrcweir
712cdf0e10cSrcweir        if ( $oneline =~ /^\s*\#/ ) { next; } # comment line
713cdf0e10cSrcweir        if ( $oneline =~ /^\s*\"\s*(.*?)\s*\"\s*$/ )
714cdf0e10cSrcweir        {
715cdf0e10cSrcweir            $versionstring = $1;
716cdf0e10cSrcweir            last;
717cdf0e10cSrcweir        }
718cdf0e10cSrcweir    }
719cdf0e10cSrcweir
720cdf0e10cSrcweir    return $versionstring;
721cdf0e10cSrcweir}
722cdf0e10cSrcweir
723cdf0e10cSrcweir#########################################################
724cdf0e10cSrcweir# Returning the current product version
725cdf0e10cSrcweir# This has to be defined in file "version.info"
726cdf0e10cSrcweir# in directory $installer::globals::ooouploaddir
727cdf0e10cSrcweir#########################################################
728cdf0e10cSrcweir
729cdf0e10cSrcweirsub get_current_version
730cdf0e10cSrcweir{
731cdf0e10cSrcweir    my $versionstring = "";
732cdf0e10cSrcweir    my $filename = "version.info";
733cdf0e10cSrcweir    # $filename = $installer::globals::ooouploaddir . $installer::globals::separator . $filename;
734cdf0e10cSrcweir
735cdf0e10cSrcweir    if ( -f $filename )
736cdf0e10cSrcweir    {
737b274bc22SAndre Fischer        $installer::logger::Lang->printf("File %s exists. Trying to find current version.\n", $filename);
738cdf0e10cSrcweir        my $versionfile = installer::files::read_file($filename);
739cdf0e10cSrcweir        $versionstring = get_versionstring($versionfile);
740b274bc22SAndre Fischer        $installer::logger::Lang->printf("Setting version string: %s\n", $versionstring);
741cdf0e10cSrcweir    }
742cdf0e10cSrcweir    else
743cdf0e10cSrcweir    {
744b274bc22SAndre Fischer        $installer::logger::Lang->printf("File %s does not exist. No version setting in download file name.\n", $filename);
745cdf0e10cSrcweir    }
746cdf0e10cSrcweir
747cdf0e10cSrcweir    $installer::globals::oooversionstring = $versionstring;
748cdf0e10cSrcweir
749cdf0e10cSrcweir    return $versionstring;
750cdf0e10cSrcweir}
751cdf0e10cSrcweir
752cdf0e10cSrcweir###############################################################################################
753cdf0e10cSrcweir# Setting the download file name
754cdf0e10cSrcweir# Syntax:
755cdf0e10cSrcweir# (PRODUCTNAME)_(VERSION)_(TIMESTAMP)_(OS)_(ARCH)_(INSTALLTYPE)_(LANGUAGE).(FILEEXTENSION)
756cdf0e10cSrcweir# Rules:
757cdf0e10cSrcweir# Timestamp only for Beta and Release Candidate
758cdf0e10cSrcweir###############################################################################################
759cdf0e10cSrcweir
760cdf0e10cSrcweirsub set_download_filename
761cdf0e10cSrcweir{
762cdf0e10cSrcweir    my ($languagestringref, $allvariables) = @_;
763cdf0e10cSrcweir
764cdf0e10cSrcweir    my $start = get_downloadname_productname($allvariables);
765cdf0e10cSrcweir    my $versionstring = get_download_version($allvariables);
766cdf0e10cSrcweir    my $date = set_date_string($allvariables);
767cdf0e10cSrcweir    my $platform = get_download_platformname();
768cdf0e10cSrcweir    my $architecture = get_download_architecture();
769cdf0e10cSrcweir    my $type = get_install_type($allvariables);
770cdf0e10cSrcweir    my $language = get_downloadname_language($languagestringref);
771cdf0e10cSrcweir
772cdf0e10cSrcweir    # Setting the extension happens automatically
773cdf0e10cSrcweir
774cdf0e10cSrcweir    my $filename = $start . "_" . $versionstring . "_" . $date . "_" . $platform . "_" . $architecture . "_" . $type . "_" . $language;
775cdf0e10cSrcweir
776cdf0e10cSrcweir    $filename =~ s/\_\_/\_/g;   # necessary, if $versionstring or $platform or $language are empty
777cdf0e10cSrcweir    $filename =~ s/\_\s*$//;    # necessary, if $language and $addon are empty
778cdf0e10cSrcweir
779cdf0e10cSrcweir    $installer::globals::ooodownloadfilename = $filename;
780cdf0e10cSrcweir
781cdf0e10cSrcweir    return $filename;
782cdf0e10cSrcweir}
783cdf0e10cSrcweir
784cdf0e10cSrcweir#########################################################
785cdf0e10cSrcweir# Creating a tar.gz file
786cdf0e10cSrcweir#########################################################
787cdf0e10cSrcweir
788cdf0e10cSrcweirsub create_tar_gz_file_from_directory
789cdf0e10cSrcweir{
790cdf0e10cSrcweir    my ($installdir, $getuidlibrary, $downloaddir, $downloadfilename) = @_;
791cdf0e10cSrcweir
792cdf0e10cSrcweir    my $packdir = $installdir;
793cdf0e10cSrcweir    installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$packdir);
794cdf0e10cSrcweir    my $changedir = $installdir;
795cdf0e10cSrcweir    installer::pathanalyzer::get_path_from_fullqualifiedname(\$changedir);
796cdf0e10cSrcweir
797cdf0e10cSrcweir    my $ldpreloadstring = "";
798cdf0e10cSrcweir    if ( $getuidlibrary ne "" ) { $ldpreloadstring = "LD_PRELOAD=" . $getuidlibrary; }
799cdf0e10cSrcweir
800cdf0e10cSrcweir    $installer::globals::downloadfileextension = ".tar.gz";
801cdf0e10cSrcweir    $installer::globals::downloadfilename = $downloadfilename . $installer::globals::downloadfileextension;
802cdf0e10cSrcweir    my $targzname = $downloaddir . $installer::globals::separator . $installer::globals::downloadfilename;
803cdf0e10cSrcweir
8040b2dfbacSAndre Fischer    my $systemcall = "cd $changedir; $ldpreloadstring tar -cf - $packdir | gzip > $targzname";
805cdf0e10cSrcweir
806cdf0e10cSrcweir    my $returnvalue = system($systemcall);
807cdf0e10cSrcweir
808b274bc22SAndre Fischer    $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall);
809cdf0e10cSrcweir
810cdf0e10cSrcweir    if ($returnvalue)
811cdf0e10cSrcweir    {
812b274bc22SAndre Fischer        $installer::logger::Lang->printf("ERROR: Could not execute \"%s\"!\n", $systemcall);
813cdf0e10cSrcweir    }
814cdf0e10cSrcweir    else
815cdf0e10cSrcweir    {
816b274bc22SAndre Fischer        $installer::logger::Lang->printf("Success: Executed \"%s\" successfully!\n", $systemcall);
817cdf0e10cSrcweir    }
818cdf0e10cSrcweir
819cdf0e10cSrcweir    return $targzname;
820cdf0e10cSrcweir}
821cdf0e10cSrcweir
822cdf0e10cSrcweir#########################################################
823cdf0e10cSrcweir# Setting the variables in the download name
824cdf0e10cSrcweir#########################################################
825cdf0e10cSrcweir
826cdf0e10cSrcweirsub resolve_variables_in_downloadname
827cdf0e10cSrcweir{
828cdf0e10cSrcweir    my ($allvariables, $downloadname, $languagestringref) = @_;
829cdf0e10cSrcweir
830cdf0e10cSrcweir    # Typical name: soa-{productversion}-{extension}-bin-{os}-{languages}
831cdf0e10cSrcweir
832*d62abd1aSAndre Fischer    my $productversion = $allvariables->{'PRODUCTVERSION'};
833*d62abd1aSAndre Fischer    $productversion = "" unless defined $productversion;
834cdf0e10cSrcweir    $downloadname =~ s/\{productversion\}/$productversion/;
835cdf0e10cSrcweir
836*d62abd1aSAndre Fischer    my $packageversion = $allvariables->{'PACKAGEVERSION'};
837*d62abd1aSAndre Fischer    $packageversion = "" unless defined $packageversion;
838cdf0e10cSrcweir    $downloadname =~ s/\{packageversion\}/$packageversion/;
839cdf0e10cSrcweir
840*d62abd1aSAndre Fischer    my $extension = $allvariables->{'SHORT_PRODUCTEXTENSION'};
841*d62abd1aSAndre Fischer    $extension = "" unless defined $extension;
842cdf0e10cSrcweir    $extension = lc($extension);
843cdf0e10cSrcweir    $downloadname =~ s/\{extension\}/$extension/;
844cdf0e10cSrcweir
845cdf0e10cSrcweir    my $os = "";
846cdf0e10cSrcweir    if ( $installer::globals::iswindowsbuild ) { $os = "windows"; }
847cdf0e10cSrcweir    elsif ( $installer::globals::issolarissparcbuild ) { $os = "solsparc"; }
848cdf0e10cSrcweir    elsif ( $installer::globals::issolarisx86build ) { $os = "solia"; }
849cdf0e10cSrcweir    elsif ( $installer::globals::islinuxbuild ) { $os = "linux"; }
8504101619dSHerbert Dürr    elsif ( $installer::globals::compiler =~ /unxmac.i/ ) { $os = "macosi"; }
8514101619dSHerbert Dürr    elsif ( $installer::globals::compiler =~ /unxmac.x/ ) { $os = "macosx"; }
8524101619dSHerbert Dürr    elsif ( $installer::globals::compiler =~ /unxmacxp/ ) { $os = "macosp"; }
853cdf0e10cSrcweir    else { $os = ""; }
854cdf0e10cSrcweir    $downloadname =~ s/\{os\}/$os/;
855cdf0e10cSrcweir
856cdf0e10cSrcweir    my $languages = $$languagestringref;
857cdf0e10cSrcweir    $downloadname =~ s/\{languages\}/$languages/;
858cdf0e10cSrcweir
859cdf0e10cSrcweir    $downloadname =~ s/\-\-\-/\-/g;
860cdf0e10cSrcweir    $downloadname =~ s/\-\-/\-/g;
861cdf0e10cSrcweir    $downloadname =~ s/\-\s*$//;
862cdf0e10cSrcweir
863cdf0e10cSrcweir    return $downloadname;
864cdf0e10cSrcweir}
865cdf0e10cSrcweir
866cdf0e10cSrcweir##################################################################
867cdf0e10cSrcweir# Windows: Replacing one placeholder with the specified value
868cdf0e10cSrcweir##################################################################
869cdf0e10cSrcweir
870cdf0e10cSrcweirsub replace_one_variable
871cdf0e10cSrcweir{
872cdf0e10cSrcweir    my ($templatefile, $placeholder, $value) = @_;
873cdf0e10cSrcweir
874b274bc22SAndre Fischer    $installer::logger::Lang->printf("Replacing %s by %s in nsi file\n", $placeholder, $value);
875cdf0e10cSrcweir
876cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$templatefile}; $i++ )
877cdf0e10cSrcweir    {
878cdf0e10cSrcweir        ${$templatefile}[$i] =~ s/$placeholder/$value/g;
879cdf0e10cSrcweir    }
880cdf0e10cSrcweir
881cdf0e10cSrcweir}
882cdf0e10cSrcweir
883cdf0e10cSrcweir########################################################################################
884cdf0e10cSrcweir# Converting a string to a unicode string
885cdf0e10cSrcweir########################################################################################
886cdf0e10cSrcweir
887cdf0e10cSrcweirsub convert_to_unicode
888cdf0e10cSrcweir{
889cdf0e10cSrcweir    my ($string) = @_;
890cdf0e10cSrcweir
891cdf0e10cSrcweir    my $unicodestring = "";
892cdf0e10cSrcweir
893cdf0e10cSrcweir    my $stringlength = length($string);
894cdf0e10cSrcweir
895cdf0e10cSrcweir    for ( my $i = 0; $i < $stringlength; $i++ )
896cdf0e10cSrcweir    {
897cdf0e10cSrcweir        $unicodestring = $unicodestring . substr($string, $i, 1);
898cdf0e10cSrcweir        $unicodestring = $unicodestring . chr(0);
899cdf0e10cSrcweir    }
900cdf0e10cSrcweir
901cdf0e10cSrcweir    return $unicodestring;
902cdf0e10cSrcweir}
903cdf0e10cSrcweir
904cdf0e10cSrcweir##################################################################
905cdf0e10cSrcweir# Windows: Setting nsis version is necessary because of small
906cdf0e10cSrcweir# changes in nsis from version 2.0.4 to 2.3.1
907cdf0e10cSrcweir##################################################################
908cdf0e10cSrcweir
909cdf0e10cSrcweirsub set_nsis_version
910cdf0e10cSrcweir{
911cdf0e10cSrcweir    my ($nshfile) = @_;
912cdf0e10cSrcweir
913cdf0e10cSrcweir    my $searchstring = "\$\{LangFileString\}"; # occurs only in nsis 2.3.1 or similar
914cdf0e10cSrcweir
915cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$nshfile}; $i++ )
916cdf0e10cSrcweir    {
917cdf0e10cSrcweir        if ( ${$nshfile}[$i] =~ /\Q$searchstring\E/ )
918cdf0e10cSrcweir        {
919cdf0e10cSrcweir            # this is nsis 2.3.1 or similar
920cdf0e10cSrcweir            $installer::globals::nsis231 = 1;
921cdf0e10cSrcweir            $installer::globals::unicodensis = 0;
922cdf0e10cSrcweir            last;
923cdf0e10cSrcweir        }
924cdf0e10cSrcweir    }
925cdf0e10cSrcweir
926cdf0e10cSrcweir    # checking unicode version
927cdf0e10cSrcweir    $searchstring = convert_to_unicode($searchstring);
928cdf0e10cSrcweir
929cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$nshfile}; $i++ )
930cdf0e10cSrcweir    {
931cdf0e10cSrcweir        if ( ${$nshfile}[$i] =~ /\Q$searchstring\E/ )
932cdf0e10cSrcweir        {
933cdf0e10cSrcweir            # this is nsis 2.3.1 or similar
934cdf0e10cSrcweir            $installer::globals::nsis231 = 1;
935cdf0e10cSrcweir            $installer::globals::unicodensis = 1;
936cdf0e10cSrcweir            last;
937cdf0e10cSrcweir        }
938cdf0e10cSrcweir    }
939cdf0e10cSrcweir
940cdf0e10cSrcweir    if ( ! $installer::globals::nsis231 ) { $installer::globals::nsis204 = 1; }
941cdf0e10cSrcweir}
942cdf0e10cSrcweir
943cdf0e10cSrcweir##################################################################
944cdf0e10cSrcweir# Windows: Including the product name into nsi template
945cdf0e10cSrcweir##################################################################
946cdf0e10cSrcweir
947cdf0e10cSrcweirsub put_windows_productname_into_template
948cdf0e10cSrcweir{
949cdf0e10cSrcweir    my ($templatefile, $variableshashref) = @_;
950cdf0e10cSrcweir
951cdf0e10cSrcweir    my $productname = $variableshashref->{'PRODUCTNAME'};
952cdf0e10cSrcweir    $productname =~ s/\.//g;    # OpenOffice.org -> OpenOfficeorg
953cdf0e10cSrcweir
954cdf0e10cSrcweir    replace_one_variable($templatefile, "PRODUCTNAMEPLACEHOLDER", $productname);
955cdf0e10cSrcweir}
956cdf0e10cSrcweir
957cdf0e10cSrcweir##################################################################
958cdf0e10cSrcweir# Windows: Including the path to the banner.bmp into nsi template
959cdf0e10cSrcweir##################################################################
960cdf0e10cSrcweir
961cdf0e10cSrcweirsub put_banner_bmp_into_template
962cdf0e10cSrcweir{
963cdf0e10cSrcweir    my ($templatefile, $includepatharrayref, $allvariables) = @_;
964cdf0e10cSrcweir
965cdf0e10cSrcweir    # my $filename = "downloadbanner.bmp";
966cdf0e10cSrcweir    if ( ! $allvariables->{'DOWNLOADBANNER'} ) { installer::exiter::exit_program("ERROR: DOWNLOADBANNER not defined in product definition!", "put_banner_bmp_into_template"); }
967cdf0e10cSrcweir    my $filename = $allvariables->{'DOWNLOADBANNER'};
968cdf0e10cSrcweir
969cdf0e10cSrcweir    my $completefilenameref = "";
970cdf0e10cSrcweir
971cdf0e10cSrcweir    if ( $installer::globals::include_pathes_read )
972cdf0e10cSrcweir    {
973cdf0e10cSrcweir        $completefilenameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$filename, $includepatharrayref, 0);
974cdf0e10cSrcweir    }
975cdf0e10cSrcweir    else
976cdf0e10cSrcweir    {
977cdf0e10cSrcweir        $completefilenameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$filename, $includepatharrayref, 0);
978cdf0e10cSrcweir    }
979cdf0e10cSrcweir
980cdf0e10cSrcweir    if ($$completefilenameref eq "") { installer::exiter::exit_program("ERROR: Could not find download file $filename!", "put_banner_bmp_into_template"); }
981cdf0e10cSrcweir
982cdf0e10cSrcweir    if ( $^O =~ /cygwin/i ) { $$completefilenameref =~ s/\//\\/g; }
983cdf0e10cSrcweir
984cdf0e10cSrcweir    replace_one_variable($templatefile, "BANNERBMPPLACEHOLDER", $$completefilenameref);
985cdf0e10cSrcweir}
986cdf0e10cSrcweir
987cdf0e10cSrcweir##################################################################
988cdf0e10cSrcweir# Windows: Including the path to the welcome.bmp into nsi template
989cdf0e10cSrcweir##################################################################
990cdf0e10cSrcweir
991cdf0e10cSrcweirsub put_welcome_bmp_into_template
992cdf0e10cSrcweir{
993cdf0e10cSrcweir    my ($templatefile, $includepatharrayref, $allvariables) = @_;
994cdf0e10cSrcweir
995cdf0e10cSrcweir    # my $filename = "downloadbitmap.bmp";
996cdf0e10cSrcweir    if ( ! $allvariables->{'DOWNLOADBITMAP'} ) { installer::exiter::exit_program("ERROR: DOWNLOADBITMAP not defined in product definition!", "put_welcome_bmp_into_template"); }
997cdf0e10cSrcweir    my $filename = $allvariables->{'DOWNLOADBITMAP'};
998cdf0e10cSrcweir
999cdf0e10cSrcweir    my $completefilenameref = "";
1000cdf0e10cSrcweir
1001cdf0e10cSrcweir    if ( $installer::globals::include_pathes_read )
1002cdf0e10cSrcweir    {
1003cdf0e10cSrcweir        $completefilenameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$filename, $includepatharrayref, 0);
1004cdf0e10cSrcweir    }
1005cdf0e10cSrcweir    else
1006cdf0e10cSrcweir    {
1007cdf0e10cSrcweir        $completefilenameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$filename, $includepatharrayref, 0);
1008cdf0e10cSrcweir    }
1009cdf0e10cSrcweir
1010cdf0e10cSrcweir    if ($$completefilenameref eq "") { installer::exiter::exit_program("ERROR: Could not find download file $filename!", "put_welcome_bmp_into_template"); }
1011cdf0e10cSrcweir
1012cdf0e10cSrcweir    if ( $^O =~ /cygwin/i ) { $$completefilenameref =~ s/\//\\/g; }
1013cdf0e10cSrcweir
1014cdf0e10cSrcweir    replace_one_variable($templatefile, "WELCOMEBMPPLACEHOLDER", $$completefilenameref);
1015cdf0e10cSrcweir}
1016cdf0e10cSrcweir
1017cdf0e10cSrcweir##################################################################
1018cdf0e10cSrcweir# Windows: Including the path to the setup.ico into nsi template
1019cdf0e10cSrcweir##################################################################
1020cdf0e10cSrcweir
1021cdf0e10cSrcweirsub put_setup_ico_into_template
1022cdf0e10cSrcweir{
1023cdf0e10cSrcweir    my ($templatefile, $includepatharrayref, $allvariables) = @_;
1024cdf0e10cSrcweir
1025cdf0e10cSrcweir    # my $filename = "downloadsetup.ico";
1026cdf0e10cSrcweir    if ( ! $allvariables->{'DOWNLOADSETUPICO'} ) { installer::exiter::exit_program("ERROR: DOWNLOADSETUPICO not defined in product definition!", "put_setup_ico_into_template"); }
1027cdf0e10cSrcweir    my $filename = $allvariables->{'DOWNLOADSETUPICO'};
1028cdf0e10cSrcweir
1029cdf0e10cSrcweir    my $completefilenameref = "";
1030cdf0e10cSrcweir
1031cdf0e10cSrcweir    if ( $installer::globals::include_pathes_read )
1032cdf0e10cSrcweir    {
1033cdf0e10cSrcweir        $completefilenameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$filename, $includepatharrayref, 0);
1034cdf0e10cSrcweir    }
1035cdf0e10cSrcweir    else
1036cdf0e10cSrcweir    {
1037cdf0e10cSrcweir        $completefilenameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$filename, $includepatharrayref, 0);
1038cdf0e10cSrcweir    }
1039cdf0e10cSrcweir
1040cdf0e10cSrcweir    if ($$completefilenameref eq "") { installer::exiter::exit_program("ERROR: Could not find download file $filename!", "put_setup_ico_into_template"); }
1041cdf0e10cSrcweir
1042cdf0e10cSrcweir    if ( $^O =~ /cygwin/i ) { $$completefilenameref =~ s/\//\\/g; }
1043cdf0e10cSrcweir
1044cdf0e10cSrcweir    replace_one_variable($templatefile, "SETUPICOPLACEHOLDER", $$completefilenameref);
1045cdf0e10cSrcweir}
1046cdf0e10cSrcweir
1047cdf0e10cSrcweir##################################################################
1048cdf0e10cSrcweir# Windows: Including the publisher into nsi template
1049cdf0e10cSrcweir##################################################################
1050cdf0e10cSrcweir
10510b2dfbacSAndre Fischersub put_publisher_into_template ($$)
1052cdf0e10cSrcweir{
10530b2dfbacSAndre Fischer    my ($templatefile, $variables) = @_;
1054cdf0e10cSrcweir
1055*d62abd1aSAndre Fischer    my $publisher = $variables->{'OOOVENDOR'};
1056*d62abd1aSAndre Fischer    $publisher = "" unless defined $publisher;
1057cdf0e10cSrcweir
1058cdf0e10cSrcweir    replace_one_variable($templatefile, "PUBLISHERPLACEHOLDER", $publisher);
1059cdf0e10cSrcweir}
1060cdf0e10cSrcweir
1061cdf0e10cSrcweir##################################################################
1062cdf0e10cSrcweir# Windows: Including the web site into nsi template
1063cdf0e10cSrcweir##################################################################
1064cdf0e10cSrcweir
10650b2dfbacSAndre Fischersub put_website_into_template ($$)
1066cdf0e10cSrcweir{
10670b2dfbacSAndre Fischer    my ($templatefile, $variables) = @_;
1068cdf0e10cSrcweir
1069*d62abd1aSAndre Fischer    my $website = $variables->{'STARTCENTER_INFO_URL'};
1070*d62abd1aSAndre Fischer    $website = "" unless defined $website;
1071cdf0e10cSrcweir
1072cdf0e10cSrcweir    replace_one_variable($templatefile, "WEBSITEPLACEHOLDER", $website);
1073cdf0e10cSrcweir}
1074cdf0e10cSrcweir
1075cdf0e10cSrcweir##################################################################
1076cdf0e10cSrcweir# Windows: Including the Java file name into nsi template
1077cdf0e10cSrcweir##################################################################
1078cdf0e10cSrcweir
1079cdf0e10cSrcweirsub put_javafilename_into_template
1080cdf0e10cSrcweir{
1081cdf0e10cSrcweir    my ($templatefile, $variableshashref) = @_;
1082cdf0e10cSrcweir
1083cdf0e10cSrcweir    my $javaversion = "";
1084cdf0e10cSrcweir
1085cdf0e10cSrcweir    if ( $variableshashref->{'WINDOWSJAVAFILENAME'} ) { $javaversion = $variableshashref->{'WINDOWSJAVAFILENAME'}; }
1086cdf0e10cSrcweir
1087cdf0e10cSrcweir    replace_one_variable($templatefile, "WINDOWSJAVAFILENAMEPLACEHOLDER", $javaversion);
1088cdf0e10cSrcweir}
1089cdf0e10cSrcweir
1090cdf0e10cSrcweir##################################################################
1091cdf0e10cSrcweir# Windows: Including the product version into nsi template
1092cdf0e10cSrcweir##################################################################
1093cdf0e10cSrcweir
1094cdf0e10cSrcweirsub put_windows_productversion_into_template
1095cdf0e10cSrcweir{
1096cdf0e10cSrcweir    my ($templatefile, $variableshashref) = @_;
1097cdf0e10cSrcweir
1098cdf0e10cSrcweir    my $productversion = $variableshashref->{'PRODUCTVERSION'};
1099cdf0e10cSrcweir
1100cdf0e10cSrcweir    replace_one_variable($templatefile, "PRODUCTVERSIONPLACEHOLDER", $productversion);
1101cdf0e10cSrcweir}
1102cdf0e10cSrcweir
1103cdf0e10cSrcweir##################################################################
1104cdf0e10cSrcweir# Windows: Including the product version into nsi template
1105cdf0e10cSrcweir##################################################################
1106cdf0e10cSrcweir
1107cdf0e10cSrcweirsub put_windows_productpath_into_template
1108cdf0e10cSrcweir{
1109cdf0e10cSrcweir    my ($templatefile, $variableshashref, $languagestringref, $localnsisdir) = @_;
1110cdf0e10cSrcweir
1111cdf0e10cSrcweir    my $productpath = $variableshashref->{'PROPERTYTABLEPRODUCTNAME'};
1112cdf0e10cSrcweir
1113cdf0e10cSrcweir    my $locallangs = $$languagestringref;
1114cdf0e10cSrcweir    $locallangs =~ s/_/ /g;
1115cdf0e10cSrcweir    if (length($locallangs) > $installer::globals::max_lang_length) { $locallangs = "multi lingual"; }
1116cdf0e10cSrcweir
1117cdf0e10cSrcweir    if ( ! $installer::globals::languagepack ) { $productpath = $productpath . " (" . $locallangs . ")"; }
1118cdf0e10cSrcweir
1119cdf0e10cSrcweir    # if (( $installer::globals::languagepack ) && ( $installer::globals::unicodensis )) { $productpath = convert_textstring_to_utf16($productpath, $localnsisdir, "stringhelper.txt"); }
1120cdf0e10cSrcweir
1121cdf0e10cSrcweir    replace_one_variable($templatefile, "PRODUCTPATHPLACEHOLDER", $productpath);
1122cdf0e10cSrcweir}
1123cdf0e10cSrcweir
1124cdf0e10cSrcweir##################################################################
1125cdf0e10cSrcweir# Windows: Including download file name into nsi template
1126cdf0e10cSrcweir##################################################################
1127cdf0e10cSrcweir
1128cdf0e10cSrcweirsub put_outputfilename_into_template
1129cdf0e10cSrcweir{
1130cdf0e10cSrcweir    my ($templatefile, $downloadname) = @_;
1131cdf0e10cSrcweir
1132cdf0e10cSrcweir    $installer::globals::downloadfileextension = ".exe";
1133cdf0e10cSrcweir    $downloadname = $downloadname . $installer::globals::downloadfileextension;
1134cdf0e10cSrcweir    $installer::globals::downloadfilename = $downloadname;
1135cdf0e10cSrcweir
1136cdf0e10cSrcweir    replace_one_variable($templatefile, "DOWNLOADNAMEPLACEHOLDER", $downloadname);
1137cdf0e10cSrcweir}
1138cdf0e10cSrcweir
1139cdf0e10cSrcweir##################################################################
1140cdf0e10cSrcweir# Windows: Generating the file list in nsi file format
1141cdf0e10cSrcweir##################################################################
1142cdf0e10cSrcweir
1143cdf0e10cSrcweirsub get_file_list
1144cdf0e10cSrcweir{
1145cdf0e10cSrcweir    my ( $basedir ) = @_;
1146cdf0e10cSrcweir
1147cdf0e10cSrcweir    my @filelist = ();
1148cdf0e10cSrcweir
1149cdf0e10cSrcweir    my $alldirs = installer::systemactions::get_all_directories($basedir);
1150cdf0e10cSrcweir    unshift(@{$alldirs}, $basedir); # $basedir is the first directory in $alldirs
1151cdf0e10cSrcweir
1152cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$alldirs}; $i++ )
1153cdf0e10cSrcweir    {
1154cdf0e10cSrcweir        my $onedir = ${$alldirs}[$i];
1155cdf0e10cSrcweir
1156cdf0e10cSrcweir        # Syntax:
1157cdf0e10cSrcweir        # SetOutPath "$INSTDIR"
1158cdf0e10cSrcweir
1159cdf0e10cSrcweir        my $relativedir = $onedir;
1160cdf0e10cSrcweir        $relativedir =~ s/\Q$basedir\E//;
1161cdf0e10cSrcweir
1162cdf0e10cSrcweir        my $oneline = " " . "SetOutPath" . " " . "\"\$INSTDIR" . $relativedir . "\"" . "\n";
1163cdf0e10cSrcweir
1164cdf0e10cSrcweir        if ( $^O =~ /cygwin/i ) {
1165cdf0e10cSrcweir            $oneline =~ s/\//\\/g;
1166cdf0e10cSrcweir        }
1167cdf0e10cSrcweir        push(@filelist, $oneline);
1168cdf0e10cSrcweir
1169cdf0e10cSrcweir        # Collecting all files in the specific directory
1170cdf0e10cSrcweir
1171cdf0e10cSrcweir        my $files = installer::systemactions::get_all_files_from_one_directory($onedir);
1172cdf0e10cSrcweir
1173cdf0e10cSrcweir        for ( my $j = 0; $j <= $#{$files}; $j++ )
1174cdf0e10cSrcweir        {
1175cdf0e10cSrcweir            my $onefile = ${$files}[$j];
1176cdf0e10cSrcweir
1177cdf0e10cSrcweir            my $fileline = "  " . "File" . " " . "\"" . $onefile . "\"" . "\n";
1178cdf0e10cSrcweir
1179cdf0e10cSrcweir            if ( $^O =~ /cygwin/i ) {
1180cdf0e10cSrcweir                $fileline =~ s/\//\\/g;
1181cdf0e10cSrcweir            }
1182cdf0e10cSrcweir            push(@filelist, $fileline);
1183cdf0e10cSrcweir        }
1184cdf0e10cSrcweir    }
1185cdf0e10cSrcweir
1186cdf0e10cSrcweir    return \@filelist;
1187cdf0e10cSrcweir}
1188cdf0e10cSrcweir
1189cdf0e10cSrcweir##################################################################
1190cdf0e10cSrcweir# Windows: Including list of all files into nsi template
1191cdf0e10cSrcweir##################################################################
1192cdf0e10cSrcweir
1193cdf0e10cSrcweirsub put_filelist_into_template
1194cdf0e10cSrcweir{
1195cdf0e10cSrcweir    my ($templatefile, $installationdir) = @_;
1196cdf0e10cSrcweir
1197cdf0e10cSrcweir    my $filelist = get_file_list($installationdir);
1198cdf0e10cSrcweir
1199cdf0e10cSrcweir    my $filestring = "";
1200cdf0e10cSrcweir
1201cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$filelist}; $i++ )
1202cdf0e10cSrcweir    {
1203cdf0e10cSrcweir        $filestring = $filestring . ${$filelist}[$i];
1204cdf0e10cSrcweir    }
1205cdf0e10cSrcweir
1206cdf0e10cSrcweir    $filestring =~ s/\s*$//;
1207cdf0e10cSrcweir
1208cdf0e10cSrcweir    replace_one_variable($templatefile, "ALLFILESPLACEHOLDER", $filestring);
1209cdf0e10cSrcweir}
1210cdf0e10cSrcweir
1211cdf0e10cSrcweir##################################################################
1212cdf0e10cSrcweir# Windows: NSIS uses specific language names
1213cdf0e10cSrcweir##################################################################
1214cdf0e10cSrcweir
1215cdf0e10cSrcweirsub nsis_language_converter
1216cdf0e10cSrcweir{
1217cdf0e10cSrcweir    my ($language) = @_;
1218cdf0e10cSrcweir
1219cdf0e10cSrcweir    my $nsislanguage = "";
1220cdf0e10cSrcweir
1221cdf0e10cSrcweir    # Assign language used by NSIS.
1222cdf0e10cSrcweir    # The files "$nsislanguage.nsh" and "$nsislanguage.nlf"
1223cdf0e10cSrcweir    # are needed in the NSIS environment.
1224cdf0e10cSrcweir    # Directory: <NSIS-Dir>/Contrib/Language files
1225cdf0e10cSrcweir    if ( $language eq "en-US" ) { $nsislanguage = "English"; }
1226cdf0e10cSrcweir    elsif ( $language eq "sq" ) { $nsislanguage = "Albanian"; }
1227cdf0e10cSrcweir    elsif ( $language eq "ar" ) { $nsislanguage = "Arabic"; }
1228cdf0e10cSrcweir    elsif ( $language eq "bg" ) { $nsislanguage = "Bulgarian"; }
1229cdf0e10cSrcweir    elsif ( $language eq "ca" ) { $nsislanguage = "Catalan"; }
1230cdf0e10cSrcweir    elsif ( $language eq "hr" ) { $nsislanguage = "Croatian"; }
1231cdf0e10cSrcweir    elsif ( $language eq "cs" ) { $nsislanguage = "Czech"; }
1232cdf0e10cSrcweir    elsif ( $language eq "da" ) { $nsislanguage = "Danish"; }
1233cdf0e10cSrcweir    elsif ( $language eq "nl" ) { $nsislanguage = "Dutch"; }
1234cdf0e10cSrcweir    elsif ( $language eq "de" ) { $nsislanguage = "German"; }
1235cdf0e10cSrcweir    elsif ( $language eq "de-LU" ) { $nsislanguage = "Luxembourgish"; }
1236cdf0e10cSrcweir    elsif ( $language eq "et" ) { $nsislanguage = "Estonian"; }
1237cdf0e10cSrcweir    elsif ( $language eq "fa" ) { $nsislanguage = "Farsi"; }
1238cdf0e10cSrcweir    elsif ( $language eq "el" ) { $nsislanguage = "Greek"; }
1239cdf0e10cSrcweir    elsif ( $language eq "fi" ) { $nsislanguage = "Finnish"; }
1240cdf0e10cSrcweir    elsif ( $language eq "fr" ) { $nsislanguage = "French"; }
1241cdf0e10cSrcweir    elsif ( $language eq "hu" ) { $nsislanguage = "Hungarian"; }
1242cdf0e10cSrcweir    elsif ( $language eq "he" ) { $nsislanguage = "Hebrew"; }
1243cdf0e10cSrcweir    elsif ( $language eq "is" ) { $nsislanguage = "Icelandic"; }
1244cdf0e10cSrcweir    elsif ( $language eq "id" ) { $nsislanguage = "Indonesian"; }
1245cdf0e10cSrcweir    elsif ( $language eq "it" ) { $nsislanguage = "Italian"; }
1246cdf0e10cSrcweir    elsif ( $language eq "lv" ) { $nsislanguage = "Latvian"; }
1247cdf0e10cSrcweir    elsif ( $language eq "lt" ) { $nsislanguage = "Lithuanian"; }
1248cdf0e10cSrcweir    elsif ( $language eq "mk" ) { $nsislanguage = "Macedonian"; }
1249cdf0e10cSrcweir    elsif ( $language eq "mn" ) { $nsislanguage = "Mongolian"; }
1250cdf0e10cSrcweir    elsif ( $language eq "no" ) { $nsislanguage = "Norwegian"; }
1251cdf0e10cSrcweir    elsif ( $language eq "no-NO" ) { $nsislanguage = "Norwegian"; }
1252cdf0e10cSrcweir    elsif ( $language eq "es" ) { $nsislanguage = "Spanish"; }
1253cdf0e10cSrcweir    elsif ( $language eq "sl" ) { $nsislanguage = "Slovenian"; }
1254cdf0e10cSrcweir    elsif ( $language eq "sv" ) { $nsislanguage = "Swedish"; }
1255cdf0e10cSrcweir    elsif ( $language eq "sk" ) { $nsislanguage = "Slovak"; }
1256cdf0e10cSrcweir    elsif ( $language eq "pl" ) { $nsislanguage = "Polish"; }
1257cdf0e10cSrcweir    elsif ( $language eq "pt-BR" ) { $nsislanguage = "PortugueseBR"; }
1258cdf0e10cSrcweir    elsif ( $language eq "pt" ) { $nsislanguage = "Portuguese"; }
1259cdf0e10cSrcweir    elsif ( $language eq "ro" ) { $nsislanguage = "Romanian"; }
1260cdf0e10cSrcweir    elsif ( $language eq "ru" ) { $nsislanguage = "Russian"; }
1261cdf0e10cSrcweir    elsif ( $language eq "sh" ) { $nsislanguage = "SerbianLatin"; }
1262cdf0e10cSrcweir    elsif ( $language eq "sr" ) { $nsislanguage = "Serbian"; }
1263cdf0e10cSrcweir    elsif ( $language eq "sr-SP" ) { $nsislanguage = "Serbian"; }
1264cdf0e10cSrcweir    elsif ( $language eq "uk" ) { $nsislanguage = "Ukrainian"; }
1265cdf0e10cSrcweir    elsif ( $language eq "tr" ) { $nsislanguage = "Turkish"; }
1266cdf0e10cSrcweir    elsif ( $language eq "ja" ) { $nsislanguage = "Japanese"; }
1267cdf0e10cSrcweir    elsif ( $language eq "ko" ) { $nsislanguage = "Korean"; }
1268cdf0e10cSrcweir    elsif ( $language eq "th" ) { $nsislanguage = "Thai"; }
1269cdf0e10cSrcweir    elsif ( $language eq "vi" ) { $nsislanguage = "Vietnamese"; }
1270cdf0e10cSrcweir    elsif ( $language eq "zh-CN" ) { $nsislanguage = "SimpChinese"; }
1271cdf0e10cSrcweir    elsif ( $language eq "zh-TW" ) { $nsislanguage = "TradChinese"; }
1272b274bc22SAndre Fischer    else
1273b274bc22SAndre Fischer    {
1274b274bc22SAndre Fischer        $installer::logger::Lang->printf("NSIS language_converter : Could not find nsis language for %s!\n", $language);
1275cdf0e10cSrcweir        $nsislanguage = "English";
1276cdf0e10cSrcweir    }
1277cdf0e10cSrcweir
1278cdf0e10cSrcweir    return $nsislanguage;
1279cdf0e10cSrcweir}
1280cdf0e10cSrcweir
1281cdf0e10cSrcweir##################################################################
1282cdf0e10cSrcweir# Windows: Including list of all languages into nsi template
1283cdf0e10cSrcweir##################################################################
1284cdf0e10cSrcweir
1285cdf0e10cSrcweirsub put_language_list_into_template
1286cdf0e10cSrcweir{
1287cdf0e10cSrcweir    my ($templatefile, $languagesarrayref) = @_;
1288cdf0e10cSrcweir
1289cdf0e10cSrcweir    my $alllangstring = "";
1290cdf0e10cSrcweir    my %nsislangs;
1291cdf0e10cSrcweir
1292cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$languagesarrayref}; $i++ )
1293cdf0e10cSrcweir    {
1294cdf0e10cSrcweir        my $onelanguage = ${$languagesarrayref}[$i];
1295cdf0e10cSrcweir        my $nsislanguage = nsis_language_converter($onelanguage);
1296cdf0e10cSrcweir        $nsislangs{$nsislanguage}++;
1297cdf0e10cSrcweir    }
1298cdf0e10cSrcweir
1299cdf0e10cSrcweir    foreach my $nsislanguage ( keys(%nsislangs) )
1300cdf0e10cSrcweir    {
1301cdf0e10cSrcweir        # Syntax: !insertmacro MUI_LANGUAGE "English"
1302cdf0e10cSrcweir        my $langstring = "\!insertmacro MUI_LANGUAGE_PACK " . $nsislanguage . "\n";
1303cdf0e10cSrcweir        if ( $nsislanguage eq "English" )
1304cdf0e10cSrcweir        {
1305cdf0e10cSrcweir            $alllangstring = $langstring . $alllangstring;
1306cdf0e10cSrcweir        }
1307cdf0e10cSrcweir        else
1308cdf0e10cSrcweir        {
1309cdf0e10cSrcweir            $alllangstring = $alllangstring . $langstring;
1310cdf0e10cSrcweir        }
1311cdf0e10cSrcweir    }
1312cdf0e10cSrcweir
1313cdf0e10cSrcweir    $alllangstring =~ s/\s*$//;
1314cdf0e10cSrcweir
1315cdf0e10cSrcweir    replace_one_variable($templatefile, "ALLLANGUAGESPLACEHOLDER", $alllangstring);
1316cdf0e10cSrcweir}
1317cdf0e10cSrcweir
1318cdf0e10cSrcweir##################################################################
1319cdf0e10cSrcweir# Windows: Collecting all identifier from mlf file
1320cdf0e10cSrcweir##################################################################
1321cdf0e10cSrcweir
1322cdf0e10cSrcweirsub get_identifier
1323cdf0e10cSrcweir{
1324cdf0e10cSrcweir    my ( $mlffile ) = @_;
1325cdf0e10cSrcweir
1326cdf0e10cSrcweir    my @identifier = ();
1327cdf0e10cSrcweir
1328cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$mlffile}; $i++ )
1329cdf0e10cSrcweir    {
1330cdf0e10cSrcweir        my $oneline = ${$mlffile}[$i];
1331cdf0e10cSrcweir
1332cdf0e10cSrcweir        if ( $oneline =~ /^\s*\[(.+)\]\s*$/ )
1333cdf0e10cSrcweir        {
1334cdf0e10cSrcweir            my $identifier = $1;
1335cdf0e10cSrcweir            push(@identifier, $identifier);
1336cdf0e10cSrcweir        }
1337cdf0e10cSrcweir    }
1338cdf0e10cSrcweir
1339cdf0e10cSrcweir    return \@identifier;
1340cdf0e10cSrcweir}
1341cdf0e10cSrcweir
1342cdf0e10cSrcweir##############################################################
1343cdf0e10cSrcweir# Returning the complete block in all languages
1344cdf0e10cSrcweir# for a specified string
1345cdf0e10cSrcweir##############################################################
1346cdf0e10cSrcweir
1347cdf0e10cSrcweirsub get_language_block_from_language_file
1348cdf0e10cSrcweir{
1349cdf0e10cSrcweir    my ($searchstring, $languagefile) = @_;
1350cdf0e10cSrcweir
1351cdf0e10cSrcweir    my @language_block = ();
1352cdf0e10cSrcweir
1353cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$languagefile}; $i++ )
1354cdf0e10cSrcweir    {
1355cdf0e10cSrcweir        if ( ${$languagefile}[$i] =~ /^\s*\[\s*$searchstring\s*\]\s*$/ )
1356cdf0e10cSrcweir        {
1357cdf0e10cSrcweir            my $counter = $i;
1358cdf0e10cSrcweir
1359cdf0e10cSrcweir            push(@language_block, ${$languagefile}[$counter]);
1360cdf0e10cSrcweir            $counter++;
1361cdf0e10cSrcweir
1362cdf0e10cSrcweir            while (( $counter <= $#{$languagefile} ) && (!( ${$languagefile}[$counter] =~ /^\s*\[/ )))
1363cdf0e10cSrcweir            {
1364cdf0e10cSrcweir                push(@language_block, ${$languagefile}[$counter]);
1365cdf0e10cSrcweir                $counter++;
1366cdf0e10cSrcweir            }
1367cdf0e10cSrcweir
1368cdf0e10cSrcweir            last;
1369cdf0e10cSrcweir        }
1370cdf0e10cSrcweir    }
1371cdf0e10cSrcweir
1372cdf0e10cSrcweir    return \@language_block;
1373cdf0e10cSrcweir}
1374cdf0e10cSrcweir
1375cdf0e10cSrcweir##############################################################
1376cdf0e10cSrcweir# Returning a specific language string from the block
1377cdf0e10cSrcweir# of all translations
1378cdf0e10cSrcweir##############################################################
1379cdf0e10cSrcweir
1380cdf0e10cSrcweirsub get_language_string_from_language_block
1381cdf0e10cSrcweir{
1382cdf0e10cSrcweir    my ($language_block, $language) = @_;
1383cdf0e10cSrcweir
1384cdf0e10cSrcweir    my $newstring = "";
1385cdf0e10cSrcweir
1386cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$language_block}; $i++ )
1387cdf0e10cSrcweir    {
1388cdf0e10cSrcweir        if ( ${$language_block}[$i] =~ /^\s*$language\s*\=\s*\"(.*)\"\s*$/ )
1389cdf0e10cSrcweir        {
1390cdf0e10cSrcweir            $newstring = $1;
1391cdf0e10cSrcweir            last;
1392cdf0e10cSrcweir        }
1393cdf0e10cSrcweir    }
1394cdf0e10cSrcweir
1395cdf0e10cSrcweir    if ( $newstring eq "" )
1396cdf0e10cSrcweir    {
1397cdf0e10cSrcweir        $language = "en-US";    # defaulting to english
1398cdf0e10cSrcweir
1399cdf0e10cSrcweir        for ( my $i = 0; $i <= $#{$language_block}; $i++ )
1400cdf0e10cSrcweir        {
1401cdf0e10cSrcweir            if ( ${$language_block}[$i] =~ /^\s*$language\s*\=\s*\"(.*)\"\s*$/ )
1402cdf0e10cSrcweir            {
1403cdf0e10cSrcweir                $newstring = $1;
1404cdf0e10cSrcweir                last;
1405cdf0e10cSrcweir            }
1406cdf0e10cSrcweir        }
1407cdf0e10cSrcweir    }
1408cdf0e10cSrcweir
1409cdf0e10cSrcweir    return $newstring;
1410cdf0e10cSrcweir}
1411cdf0e10cSrcweir
1412cdf0e10cSrcweir##################################################################
1413cdf0e10cSrcweir# Windows: Replacing strings in NSIS nsh file
1414cdf0e10cSrcweir# nsh file syntax:
1415cdf0e10cSrcweir# !define MUI_TEXT_DIRECTORY_TITLE "Zielverzeichnis ausw�hlen"
1416cdf0e10cSrcweir##################################################################
1417cdf0e10cSrcweir
1418cdf0e10cSrcweirsub replace_identifier_in_nshfile
1419cdf0e10cSrcweir{
1420cdf0e10cSrcweir    my ( $nshfile, $identifier, $newstring, $nshfilename, $onelanguage ) = @_;
1421cdf0e10cSrcweir
1422cdf0e10cSrcweir    if ( $installer::globals::nsis231 )
1423cdf0e10cSrcweir    {
1424cdf0e10cSrcweir        $newstring =~ s/\\r/\$\\r/g;    # \r -> $\r  in modern nsis versions
1425cdf0e10cSrcweir        $newstring =~ s/\\n/\$\\n/g;    # \n -> $\n  in modern nsis versions
1426cdf0e10cSrcweir    }
1427cdf0e10cSrcweir
1428cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$nshfile}; $i++ )
1429cdf0e10cSrcweir    {
1430cdf0e10cSrcweir        if ( ${$nshfile}[$i] =~ /\s+\Q$identifier\E\s+\"(.+)\"\s*$/ )
1431cdf0e10cSrcweir        {
1432cdf0e10cSrcweir            my $oldstring = $1;
1433cdf0e10cSrcweir            ${$nshfile}[$i] =~ s/\Q$oldstring\E/$newstring/;
1434b274bc22SAndre Fischer            $installer::logger::Lang->printf("NSIS replacement in %s (%s):  \-\> %s\n",
1435b274bc22SAndre Fischer                $nshfilename,
1436b274bc22SAndre Fischer                $onelanguage,
1437b274bc22SAndre Fischer                $oldstring,
1438b274bc22SAndre Fischer                $newstring);
1439cdf0e10cSrcweir        }
1440cdf0e10cSrcweir    }
1441cdf0e10cSrcweir}
1442cdf0e10cSrcweir
1443cdf0e10cSrcweir##################################################################
1444cdf0e10cSrcweir# Windows: Replacing strings in NSIS nlf file
1445cdf0e10cSrcweir# nlf file syntax (2 lines):
1446cdf0e10cSrcweir# # ^DirSubText
1447cdf0e10cSrcweir# Zielverzeichnis
1448cdf0e10cSrcweir##################################################################
1449cdf0e10cSrcweir
1450cdf0e10cSrcweirsub replace_identifier_in_nlffile
1451cdf0e10cSrcweir{
1452cdf0e10cSrcweir    my ( $nlffile, $identifier, $newstring, $nlffilename, $onelanguage ) = @_;
1453cdf0e10cSrcweir
1454cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$nlffile}; $i++ )
1455cdf0e10cSrcweir    {
1456cdf0e10cSrcweir        if ( ${$nlffile}[$i] =~ /^\s*\#\s+\^\s*\Q$identifier\E\s*$/ )
1457cdf0e10cSrcweir        {
1458cdf0e10cSrcweir            my $next = $i+1;
1459cdf0e10cSrcweir            my $oldstring = ${$nlffile}[$next];
1460cdf0e10cSrcweir            ${$nlffile}[$next] = $newstring . "\n";
1461cdf0e10cSrcweir            $oldstring =~ s/\s*$//;
1462b274bc22SAndre Fischer            $installer::logger::Lang->printf("NSIS replacement in %s (%s): %s \-\> %s\n",
1463b274bc22SAndre Fischer                $nlffilename,
1464b274bc22SAndre Fischer                $onelanguage,
1465b274bc22SAndre Fischer                $oldstring,
1466b274bc22SAndre Fischer                $newstring);
1467cdf0e10cSrcweir        }
1468cdf0e10cSrcweir    }
1469cdf0e10cSrcweir}
1470cdf0e10cSrcweir
1471cdf0e10cSrcweir##################################################################
1472cdf0e10cSrcweir# Windows: Translating the NSIS nsh and nlf file
1473cdf0e10cSrcweir##################################################################
1474cdf0e10cSrcweir
1475cdf0e10cSrcweirsub translate_nsh_nlf_file
1476cdf0e10cSrcweir{
1477cdf0e10cSrcweir    my ($nshfile, $nlffile, $mlffile, $onelanguage, $nshfilename, $nlffilename, $nsislanguage) = @_;
1478cdf0e10cSrcweir
1479cdf0e10cSrcweir    # Analyzing the mlf file, collecting all Identifier
1480cdf0e10cSrcweir    my $allidentifier = get_identifier($mlffile);
1481cdf0e10cSrcweir
1482cdf0e10cSrcweir    $onelanguage = "en-US" if ( $nsislanguage eq "English" && $onelanguage ne "en-US");
1483cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$allidentifier}; $i++ )
1484cdf0e10cSrcweir    {
1485cdf0e10cSrcweir        my $identifier = ${$allidentifier}[$i];
1486cdf0e10cSrcweir        my $language_block = get_language_block_from_language_file($identifier, $mlffile);
1487cdf0e10cSrcweir        my $newstring = get_language_string_from_language_block($language_block, $onelanguage);
1488cdf0e10cSrcweir
1489cdf0e10cSrcweir        # removing mask
1490cdf0e10cSrcweir        $newstring =~ s/\\\'/\'/g;
1491cdf0e10cSrcweir
1492cdf0e10cSrcweir        replace_identifier_in_nshfile($nshfile, $identifier, $newstring, $nshfilename, $onelanguage);
1493cdf0e10cSrcweir        replace_identifier_in_nlffile($nlffile, $identifier, $newstring, $nlffilename, $onelanguage);
1494cdf0e10cSrcweir    }
1495cdf0e10cSrcweir}
1496cdf0e10cSrcweir
1497cdf0e10cSrcweir##################################################################
1498cdf0e10cSrcweir# Converting utf 16 file to utf 8
1499cdf0e10cSrcweir##################################################################
1500cdf0e10cSrcweir
1501cdf0e10cSrcweirsub convert_utf16_to_utf8
1502cdf0e10cSrcweir{
1503cdf0e10cSrcweir    my ( $filename ) = @_;
1504cdf0e10cSrcweir
1505cdf0e10cSrcweir    my @localfile = ();
1506cdf0e10cSrcweir
1507cdf0e10cSrcweir    my $savfilename = $filename . "_before.utf16";
1508cdf0e10cSrcweir    installer::systemactions::copy_one_file($filename, $savfilename);
1509cdf0e10cSrcweir
1510cdf0e10cSrcweir#   open( IN, "<:utf16", $filename ) || installer::exiter::exit_program("ERROR: Cannot open file $filename for reading", "convert_utf16_to_utf8");
1511cdf0e10cSrcweir#   open( IN, "<:para:crlf:uni", $filename ) || installer::exiter::exit_program("ERROR: Cannot open file $filename for reading", "convert_utf16_to_utf8");
1512cdf0e10cSrcweir    open( IN, "<:encoding(UTF16-LE)", $filename ) || installer::exiter::exit_program("ERROR: Cannot open file $filename for reading", "convert_utf16_to_utf8");
15130b2dfbacSAndre Fischer    while ( my $line = <IN> )
15140b2dfbacSAndre Fischer    {
1515cdf0e10cSrcweir        push @localfile, $line;
1516cdf0e10cSrcweir    }
1517cdf0e10cSrcweir    close( IN );
1518cdf0e10cSrcweir
1519cdf0e10cSrcweir    if ( open( OUT, ">:utf8", $filename ) )
1520cdf0e10cSrcweir    {
1521cdf0e10cSrcweir        print OUT @localfile;
1522cdf0e10cSrcweir        close(OUT);
1523cdf0e10cSrcweir    }
1524cdf0e10cSrcweir
1525cdf0e10cSrcweir    $savfilename = $filename . "_before.utf8";
1526cdf0e10cSrcweir    installer::systemactions::copy_one_file($filename, $savfilename);
1527cdf0e10cSrcweir}
1528cdf0e10cSrcweir
1529cdf0e10cSrcweir##################################################################
1530cdf0e10cSrcweir# Converting utf 8 file to utf 16
1531cdf0e10cSrcweir##################################################################
1532cdf0e10cSrcweir
1533cdf0e10cSrcweirsub convert_utf8_to_utf16
1534cdf0e10cSrcweir{
1535cdf0e10cSrcweir    my ( $filename ) = @_;
1536cdf0e10cSrcweir
1537cdf0e10cSrcweir    my @localfile = ();
1538cdf0e10cSrcweir
1539cdf0e10cSrcweir    my $savfilename = $filename . "_after.utf8";
1540cdf0e10cSrcweir    installer::systemactions::copy_one_file($filename, $savfilename);
1541cdf0e10cSrcweir
1542cdf0e10cSrcweir    open( IN, "<:utf8", $filename ) || installer::exiter::exit_program("ERROR: Cannot open file $filename for reading", "convert_utf8_to_utf16");
15430b2dfbacSAndre Fischer    while (my  $line = <IN>)
15440b2dfbacSAndre Fischer    {
1545cdf0e10cSrcweir        push @localfile, $line;
1546cdf0e10cSrcweir    }
1547cdf0e10cSrcweir    close( IN );
1548cdf0e10cSrcweir
1549cdf0e10cSrcweir    if ( open( OUT, ">:raw:encoding(UTF16-LE):crlf:utf8", $filename ) )
1550cdf0e10cSrcweir    {
1551cdf0e10cSrcweir        print OUT @localfile;
1552cdf0e10cSrcweir        close(OUT);
1553cdf0e10cSrcweir    }
1554cdf0e10cSrcweir
1555cdf0e10cSrcweir    $savfilename = $filename . "_after.utf16";
1556cdf0e10cSrcweir    installer::systemactions::copy_one_file($filename, $savfilename);
1557cdf0e10cSrcweir}
1558cdf0e10cSrcweir
1559cdf0e10cSrcweir##################################################################
1560cdf0e10cSrcweir# Converting text string to utf 16
1561cdf0e10cSrcweir##################################################################
1562cdf0e10cSrcweir
1563cdf0e10cSrcweirsub convert_textstring_to_utf16
1564cdf0e10cSrcweir{
1565cdf0e10cSrcweir    my ( $textstring, $localnsisdir, $shortfilename ) = @_;
1566cdf0e10cSrcweir
1567cdf0e10cSrcweir    my $filename = $localnsisdir . $installer::globals::separator . $shortfilename;
1568cdf0e10cSrcweir    my @filecontent = ();
1569cdf0e10cSrcweir    push(@filecontent, $textstring);
1570cdf0e10cSrcweir    installer::files::save_file($filename, \@filecontent);
1571cdf0e10cSrcweir    convert_utf8_to_utf16($filename);
1572cdf0e10cSrcweir    my $newfile = installer::files::read_file($filename);
1573cdf0e10cSrcweir    my $utf16string = "";
1574cdf0e10cSrcweir    if ( ${$newfile}[0] ne "" ) { $utf16string = ${$newfile}[0]; }
1575cdf0e10cSrcweir
1576cdf0e10cSrcweir    return $utf16string;
1577cdf0e10cSrcweir}
1578cdf0e10cSrcweir
1579cdf0e10cSrcweir##################################################################
1580cdf0e10cSrcweir# Windows: Copying NSIS language files to local nsis directory
1581cdf0e10cSrcweir##################################################################
1582cdf0e10cSrcweir
1583cdf0e10cSrcweirsub copy_and_translate_nsis_language_files
1584cdf0e10cSrcweir{
1585cdf0e10cSrcweir    my ($nsispath, $localnsisdir, $languagesarrayref, $allvariables) = @_;
1586cdf0e10cSrcweir
1587cdf0e10cSrcweir    my $nlffilepath = $nsispath . $installer::globals::separator . "Contrib" . $installer::globals::separator . "Language\ files" . $installer::globals::separator;
1588cdf0e10cSrcweir    my $nshfilepath = $nsispath . $installer::globals::separator . "Contrib" . $installer::globals::separator . "Modern\ UI" . $installer::globals::separator . "Language files" . $installer::globals::separator;
1589cdf0e10cSrcweir
1590cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$languagesarrayref}; $i++ )
1591cdf0e10cSrcweir    {
1592cdf0e10cSrcweir        my $onelanguage = ${$languagesarrayref}[$i];
1593cdf0e10cSrcweir        my $nsislanguage = nsis_language_converter($onelanguage);
1594cdf0e10cSrcweir
1595cdf0e10cSrcweir        # Copying the nlf file
1596cdf0e10cSrcweir        my $sourcepath = $nlffilepath . $nsislanguage . "\.nlf";
1597cdf0e10cSrcweir        if ( ! -f $sourcepath ) { installer::exiter::exit_program("ERROR: Could not find nsis file: $sourcepath!", "copy_and_translate_nsis_language_files"); }
1598cdf0e10cSrcweir        my $nlffilename = $localnsisdir . $installer::globals::separator . $nsislanguage . "_pack.nlf";
1599cdf0e10cSrcweir        if ( $^O =~ /cygwin/i ) { $nlffilename =~ s/\//\\/g; }
1600cdf0e10cSrcweir        installer::systemactions::copy_one_file($sourcepath, $nlffilename);
1601cdf0e10cSrcweir
1602cdf0e10cSrcweir        # Copying the nsh file
1603cdf0e10cSrcweir        # In newer nsis versions, the nsh file is located next to the nlf file
1604cdf0e10cSrcweir        $sourcepath = $nshfilepath . $nsislanguage . "\.nsh";
1605cdf0e10cSrcweir        if ( ! -f $sourcepath )
1606cdf0e10cSrcweir        {
1607cdf0e10cSrcweir            # trying to find the nsh file next to the nlf file
1608cdf0e10cSrcweir            $sourcepath = $nlffilepath . $nsislanguage . "\.nsh";
1609cdf0e10cSrcweir            if ( ! -f $sourcepath )
1610cdf0e10cSrcweir            {
1611cdf0e10cSrcweir                installer::exiter::exit_program("ERROR: Could not find nsis file: $sourcepath!", "copy_and_translate_nsis_language_files");
1612cdf0e10cSrcweir            }
1613cdf0e10cSrcweir        }
1614cdf0e10cSrcweir        my $nshfilename = $localnsisdir . $installer::globals::separator . $nsislanguage . "_pack.nsh";
1615cdf0e10cSrcweir        if ( $^O =~ /cygwin/i ) { $nshfilename =~ s/\//\\/g; }
1616cdf0e10cSrcweir        installer::systemactions::copy_one_file($sourcepath, $nshfilename);
1617cdf0e10cSrcweir
1618cdf0e10cSrcweir        # Changing the macro name in nsh file: MUI_LANGUAGEFILE_BEGIN -> MUI_LANGUAGEFILE_PACK_BEGIN
1619cdf0e10cSrcweir        my $nshfile = installer::files::read_file($nshfilename);
1620cdf0e10cSrcweir        set_nsis_version($nshfile);
1621cdf0e10cSrcweir
1622cdf0e10cSrcweir        if ( $installer::globals::unicodensis )
1623cdf0e10cSrcweir        {
1624b274bc22SAndre Fischer            $installer::logger::Lang->printf("This is Unicode NSIS!\n");
1625cdf0e10cSrcweir            convert_utf16_to_utf8($nshfilename);
1626cdf0e10cSrcweir            convert_utf16_to_utf8($nlffilename);
1627cdf0e10cSrcweir            $nshfile = installer::files::read_file($nshfilename);   # read nsh file again
1628cdf0e10cSrcweir        }
1629cdf0e10cSrcweir
1630cdf0e10cSrcweir        replace_one_variable($nshfile, "MUI_LANGUAGEFILE_BEGIN", "MUI_LANGUAGEFILE_PACK_BEGIN");
1631cdf0e10cSrcweir
1632cdf0e10cSrcweir        # find the ulf file for translation
1633cdf0e10cSrcweir        my $mlffile = get_translation_file($allvariables);
1634cdf0e10cSrcweir
1635cdf0e10cSrcweir        # Translate the files
1636cdf0e10cSrcweir        my $nlffile = installer::files::read_file($nlffilename);
1637cdf0e10cSrcweir        translate_nsh_nlf_file($nshfile, $nlffile, $mlffile, $onelanguage, $nshfilename, $nlffilename, $nsislanguage);
1638cdf0e10cSrcweir
1639cdf0e10cSrcweir        installer::files::save_file($nshfilename, $nshfile);
1640cdf0e10cSrcweir        installer::files::save_file($nlffilename, $nlffile);
1641cdf0e10cSrcweir
1642cdf0e10cSrcweir        if ( $installer::globals::unicodensis )
1643cdf0e10cSrcweir        {
1644cdf0e10cSrcweir            convert_utf8_to_utf16($nshfilename);
1645cdf0e10cSrcweir            convert_utf8_to_utf16($nlffilename);
1646cdf0e10cSrcweir        }
1647cdf0e10cSrcweir    }
1648cdf0e10cSrcweir
1649cdf0e10cSrcweir}
1650cdf0e10cSrcweir
1651cdf0e10cSrcweir##################################################################
1652cdf0e10cSrcweir# Windows: Including the nsis path into the nsi template
1653cdf0e10cSrcweir##################################################################
1654cdf0e10cSrcweir
1655cdf0e10cSrcweirsub put_nsis_path_into_template
1656cdf0e10cSrcweir{
1657cdf0e10cSrcweir    my ($templatefile, $nsisdir) = @_;
1658cdf0e10cSrcweir
1659cdf0e10cSrcweir    replace_one_variable($templatefile, "NSISPATHPLACEHOLDER", $nsisdir);
1660cdf0e10cSrcweir}
1661cdf0e10cSrcweir
1662cdf0e10cSrcweir##################################################################
1663cdf0e10cSrcweir# Windows: Including the output path into the nsi template
1664cdf0e10cSrcweir##################################################################
1665cdf0e10cSrcweir
1666cdf0e10cSrcweirsub put_output_path_into_template
1667cdf0e10cSrcweir{
1668cdf0e10cSrcweir    my ($templatefile, $downloaddir) = @_;
1669cdf0e10cSrcweir
1670cdf0e10cSrcweir    if ( $^O =~ /cygwin/i ) { $downloaddir =~ s/\//\\/g; }
1671cdf0e10cSrcweir
1672cdf0e10cSrcweir    replace_one_variable($templatefile, "OUTPUTDIRPLACEHOLDER", $downloaddir);
1673cdf0e10cSrcweir}
1674cdf0e10cSrcweir
1675cdf0e10cSrcweir##################################################################
1676cdf0e10cSrcweir# Windows: Only allow specific code for nsis 2.0.4 or nsis 2.3.1
1677cdf0e10cSrcweir##################################################################
1678cdf0e10cSrcweir
1679cdf0e10cSrcweirsub put_version_specific_code_into_template
1680cdf0e10cSrcweir{
1681cdf0e10cSrcweir    my ($templatefile) = @_;
1682cdf0e10cSrcweir
1683cdf0e10cSrcweir    my $subst204 = "";
1684cdf0e10cSrcweir    my $subst231 = "";
1685cdf0e10cSrcweir
1686cdf0e10cSrcweir    if ( $installer::globals::nsis204 )
1687cdf0e10cSrcweir    {
1688cdf0e10cSrcweir        $subst231 = ";";
1689cdf0e10cSrcweir    }
1690cdf0e10cSrcweir    else
1691cdf0e10cSrcweir    {
1692cdf0e10cSrcweir        $subst204 = ";";
1693cdf0e10cSrcweir    }
1694cdf0e10cSrcweir
1695cdf0e10cSrcweir    replace_one_variable($templatefile, "\#204\#", $subst204);
1696cdf0e10cSrcweir    replace_one_variable($templatefile, "\#231\#", $subst231);
1697cdf0e10cSrcweir}
1698cdf0e10cSrcweir
1699cdf0e10cSrcweir##################################################################
1700cdf0e10cSrcweir# Windows: Finding the path to the nsis SDK
1701cdf0e10cSrcweir##################################################################
1702cdf0e10cSrcweir
1703cdf0e10cSrcweirsub get_path_to_nsis_sdk
1704cdf0e10cSrcweir{
1705cdf0e10cSrcweir    my $vol;
1706cdf0e10cSrcweir    my $dir;
1707cdf0e10cSrcweir    my $file;
1708cdf0e10cSrcweir    my $nsispath = "";
1709cdf0e10cSrcweir
17100b2dfbacSAndre Fischer    if ( $ENV{'NSIS_PATH'} )
17110b2dfbacSAndre Fischer    {
1712cdf0e10cSrcweir        $nsispath = $ENV{'NSIS_PATH'};
17130b2dfbacSAndre Fischer    }
17140b2dfbacSAndre Fischer    elsif ( $ENV{'SOLARROOT'} )
17150b2dfbacSAndre Fischer    {
1716cdf0e10cSrcweir        $nsispath = $ENV{'SOLARROOT'} . $installer::globals::separator . "NSIS";
17170b2dfbacSAndre Fischer    }
17180b2dfbacSAndre Fischer    else
17190b2dfbacSAndre Fischer    {
1720cdf0e10cSrcweir        # do we have nsis already in path ?
17210b2dfbacSAndre Fischer        my @paths = split(/:/, $ENV{'PATH'});
17220b2dfbacSAndre Fischer        foreach my $path (@paths)
17230b2dfbacSAndre Fischer        {
17240b2dfbacSAndre Fischer            $path =~ s/[\/\\]+$//; # remove trailing slashes;
17250b2dfbacSAndre Fischer            $nsispath = $path . "/nsis";
1726cdf0e10cSrcweir
17270b2dfbacSAndre Fischer            if ( -x $nsispath )
17280b2dfbacSAndre Fischer            {
17290b2dfbacSAndre Fischer                $nsispath = $path;
1730cdf0e10cSrcweir                last;
1731cdf0e10cSrcweir            }
17320b2dfbacSAndre Fischer            else
17330b2dfbacSAndre Fischer            {
1734cdf0e10cSrcweir                $nsispath = "";
1735cdf0e10cSrcweir            }
1736cdf0e10cSrcweir        }
1737cdf0e10cSrcweir    }
17380b2dfbacSAndre Fischer    if ( $ENV{'NSISSDK_SOURCE'} )
17390b2dfbacSAndre Fischer    {
1740cdf0e10cSrcweir        installer::logger::print_warning( "NSISSDK_SOURCE is deprecated. use NSIS_PATH instead.\n" );
1741cdf0e10cSrcweir        $nsispath = $ENV{'NSISSDK_SOURCE'}; # overriding the NSIS SDK with NSISSDK_SOURCE
1742cdf0e10cSrcweir    }
1743cdf0e10cSrcweir
1744cdf0e10cSrcweir#   if( ($^O =~ /cygwin/i) and $nsispath =~ /\\/ ) {
1745cdf0e10cSrcweir#       # We need a POSIX path for W32-4nt-cygwin-perl
1746cdf0e10cSrcweir#       $nsispath =~ s/\\/\\\\/g;
1747cdf0e10cSrcweir#       chomp( $nsispath = qx{cygpath -u "$nsispath"} );
1748cdf0e10cSrcweir#   }
1749cdf0e10cSrcweir
1750cdf0e10cSrcweir    if ( $nsispath eq "" )
1751cdf0e10cSrcweir    {
1752b274bc22SAndre Fischer        $installer::logger::Info->print("... no Environment variable \"SOLARROOT\", \"NSIS_PATH\" or \"NSISSDK_SOURCE\" found and NSIS not found in path!\n");
1753b274bc22SAndre Fischer    }
1754b274bc22SAndre Fischer    elsif ( ! -d $nsispath )
1755cdf0e10cSrcweir    {
1756cdf0e10cSrcweir        installer::exiter::exit_program("ERROR: NSIS path $nsispath does not exist!", "get_path_to_nsis_sdk");
1757cdf0e10cSrcweir    }
1758cdf0e10cSrcweir
1759cdf0e10cSrcweir    return $nsispath;
1760cdf0e10cSrcweir}
1761cdf0e10cSrcweir
1762cdf0e10cSrcweir##################################################################
1763cdf0e10cSrcweir# Windows: Executing NSIS to create the installation set
1764cdf0e10cSrcweir##################################################################
1765cdf0e10cSrcweir
1766cdf0e10cSrcweirsub call_nsis
1767cdf0e10cSrcweir{
1768cdf0e10cSrcweir    my ( $nsispath, $nsifile ) = @_;
1769cdf0e10cSrcweir
1770cdf0e10cSrcweir    my $makensisexe = $nsispath . $installer::globals::separator . "makensis.exe";
1771cdf0e10cSrcweir
1772b274bc22SAndre Fischer    $installer::logger::Info->printf("... starting %s ... \n", $makensisexe);
1773cdf0e10cSrcweir
1774cdf0e10cSrcweir    if( $^O =~ /cygwin/i ) { $nsifile =~ s/\\/\//g; }
1775cdf0e10cSrcweir
1776cdf0e10cSrcweir    my $systemcall = "$makensisexe $nsifile |";
1777cdf0e10cSrcweir
1778b274bc22SAndre Fischer    $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall);
1779cdf0e10cSrcweir
1780cdf0e10cSrcweir    my @nsisoutput = ();
1781cdf0e10cSrcweir
1782cdf0e10cSrcweir    open (NSI, "$systemcall");
1783cdf0e10cSrcweir    while (<NSI>) {push(@nsisoutput, $_); }
1784cdf0e10cSrcweir    close (NSI);
1785cdf0e10cSrcweir
1786cdf0e10cSrcweir    my $returnvalue = $?;   # $? contains the return value of the systemcall
1787cdf0e10cSrcweir
1788cdf0e10cSrcweir    if ($returnvalue)
1789cdf0e10cSrcweir    {
1790b274bc22SAndre Fischer        $installer::logger::Lang->printf("ERROR: %s !\n", $systemcall);
1791cdf0e10cSrcweir    }
1792cdf0e10cSrcweir    else
1793cdf0e10cSrcweir    {
1794b274bc22SAndre Fischer        $installer::logger::Lang->printf("Success: %s\n", $systemcall);
1795cdf0e10cSrcweir    }
1796cdf0e10cSrcweir
1797b274bc22SAndre Fischer    foreach my $line (@nsisoutput)
1798b274bc22SAndre Fischer    {
1799b274bc22SAndre Fischer        $installer::logger::Lang->print($line);
1800b274bc22SAndre Fischer    }
1801cdf0e10cSrcweir}
1802cdf0e10cSrcweir
1803cdf0e10cSrcweir#################################################################################
1804cdf0e10cSrcweir# Replacing one variable in one files
1805cdf0e10cSrcweir#################################################################################
1806cdf0e10cSrcweir
1807cdf0e10cSrcweirsub replace_one_variable_in_translationfile
1808cdf0e10cSrcweir{
1809cdf0e10cSrcweir    my ($translationfile, $variable, $searchstring) = @_;
1810cdf0e10cSrcweir
1811cdf0e10cSrcweir    for ( my $i = 0; $i <= $#{$translationfile}; $i++ )
1812cdf0e10cSrcweir    {
1813cdf0e10cSrcweir        ${$translationfile}[$i] =~ s/\%$searchstring/$variable/g;
1814cdf0e10cSrcweir    }
1815cdf0e10cSrcweir}
1816cdf0e10cSrcweir
1817cdf0e10cSrcweir#################################################################################
1818cdf0e10cSrcweir# Replacing the variables in the translation file
1819cdf0e10cSrcweir#################################################################################
1820cdf0e10cSrcweir
1821cdf0e10cSrcweirsub replace_variables
1822cdf0e10cSrcweir{
1823cdf0e10cSrcweir    my ($translationfile, $variableshashref) = @_;
1824cdf0e10cSrcweir
18250b2dfbacSAndre Fischer    foreach my $key (keys %{$variableshashref})
1826cdf0e10cSrcweir    {
1827cdf0e10cSrcweir        my $value = $variableshashref->{$key};
1828cdf0e10cSrcweir
1829cdf0e10cSrcweir        # special handling for PRODUCTVERSION, if $allvariables->{'POSTVERSIONEXTENSION'}
1830cdf0e10cSrcweir        if (( $key eq "PRODUCTVERSION" ) && ( $variableshashref->{'POSTVERSIONEXTENSION'} )) { $value = $value . " " . $variableshashref->{'POSTVERSIONEXTENSION'}; }
1831cdf0e10cSrcweir
1832cdf0e10cSrcweir        replace_one_variable_in_translationfile($translationfile, $value, $key);
1833cdf0e10cSrcweir    }
1834cdf0e10cSrcweir}
1835cdf0e10cSrcweir
1836cdf0e10cSrcweir#########################################################
1837cdf0e10cSrcweir# Getting the translation file for the nsis installer
1838cdf0e10cSrcweir#########################################################
1839cdf0e10cSrcweir
1840cdf0e10cSrcweirsub get_translation_file
1841cdf0e10cSrcweir{
1842cdf0e10cSrcweir    my ($allvariableshashref) = @_;
1843cdf0e10cSrcweir    my $translationfilename = $installer::globals::idtlanguagepath . $installer::globals::separator . $installer::globals::nsisfilename;
1844cdf0e10cSrcweir    if ( $installer::globals::unicodensis ) { $translationfilename = $translationfilename . ".uulf"; }
1845cdf0e10cSrcweir    else { $translationfilename = $translationfilename . ".mlf"; }
1846cdf0e10cSrcweir    if ( ! -f $translationfilename ) { installer::exiter::exit_program("ERROR: Could not find language file $translationfilename!", "get_translation_file"); }
1847cdf0e10cSrcweir    my $translationfile = installer::files::read_file($translationfilename);
1848cdf0e10cSrcweir    replace_variables($translationfile, $allvariableshashref);
1849cdf0e10cSrcweir
1850b274bc22SAndre Fischer    $installer::logger::Lang->printf("Reading translation file: %s\n", $translationfilename);
1851cdf0e10cSrcweir
1852cdf0e10cSrcweir    return $translationfile;
1853cdf0e10cSrcweir}
1854cdf0e10cSrcweir
1855cdf0e10cSrcweir####################################################
1856cdf0e10cSrcweir# Removing english, if it was added before
1857cdf0e10cSrcweir####################################################
1858cdf0e10cSrcweir
1859cdf0e10cSrcweirsub remove_english_for_nsis_installer
1860cdf0e10cSrcweir{
1861cdf0e10cSrcweir    my ($languagestringref, $languagesarrayref) = @_;
1862cdf0e10cSrcweir
1863cdf0e10cSrcweir    # $$languagestringref =~ s/en-US_//;
1864cdf0e10cSrcweir    # shift(@{$languagesarrayref});
1865cdf0e10cSrcweir
1866cdf0e10cSrcweir    @{$languagesarrayref} = ("en-US");  # only english for NSIS installer!
1867cdf0e10cSrcweir}
1868cdf0e10cSrcweir
1869cdf0e10cSrcweir####################################################
1870cdf0e10cSrcweir# Creating link tree for upload
1871cdf0e10cSrcweir####################################################
1872cdf0e10cSrcweir
1873cdf0e10cSrcweirsub create_link_tree
1874cdf0e10cSrcweir{
1875cdf0e10cSrcweir    my ($sourcedownloadfile, $destfilename, $versionstring) = @_;
1876cdf0e10cSrcweir
1877957116b7SHerbert Dürr    if ( ! $installer::globals::ooouploaddir ) { installer::exiter::exit_program("ERROR: Directory for AOO upload not defined!", "create_link_tree"); }
1878cdf0e10cSrcweir    my $versiondir = $installer::globals::ooouploaddir . $installer::globals::separator . $versionstring;
1879b274bc22SAndre Fischer    $installer::logger::Lang->printf("Directory for the link: %s\n", $versiondir);
1880cdf0e10cSrcweir
1881cdf0e10cSrcweir    if ( ! -d $versiondir ) { installer::systemactions::create_directory_structure($versiondir); }
1882cdf0e10cSrcweir
1883cdf0e10cSrcweir    # inside directory $versiondir all links have to be created
1884cdf0e10cSrcweir    my $linkdestination = $versiondir . $installer::globals::separator . $destfilename;
1885cdf0e10cSrcweir
1886cdf0e10cSrcweir    # If there is an older version of this file (link), it has to be removed
1887cdf0e10cSrcweir    if ( -f $linkdestination ) { unlink($linkdestination); }
1888cdf0e10cSrcweir
1889b274bc22SAndre Fischer    $installer::logger::Lang->printf("Creating hard link from %s to %s\n", $sourcedownloadfile, $linkdestination);
1890cdf0e10cSrcweir    installer::systemactions::hardlink_one_file($sourcedownloadfile, $linkdestination);
1891cdf0e10cSrcweir}
1892cdf0e10cSrcweir
1893cdf0e10cSrcweir#######################################################
1894cdf0e10cSrcweir# Setting supported platform for Sun OpenOffice.org
1895cdf0e10cSrcweir# builds
1896cdf0e10cSrcweir#######################################################
1897cdf0e10cSrcweir
1898cdf0e10cSrcweirsub is_supported_platform
1899cdf0e10cSrcweir{
1900cdf0e10cSrcweir    my $is_supported = 0;
1901cdf0e10cSrcweir
1902cdf0e10cSrcweir    if (( $installer::globals::islinuxrpmbuild ) ||
1903cdf0e10cSrcweir        ( $installer::globals::issolarissparcbuild ) ||
1904cdf0e10cSrcweir        ( $installer::globals::issolarisx86build ) ||
1905cdf0e10cSrcweir        ( $installer::globals::iswindowsbuild ))
1906cdf0e10cSrcweir    {
1907cdf0e10cSrcweir        $is_supported = 1;
1908cdf0e10cSrcweir    }
1909cdf0e10cSrcweir
1910cdf0e10cSrcweir    return $is_supported;
1911cdf0e10cSrcweir}
1912cdf0e10cSrcweir
1913cdf0e10cSrcweir####################################################
1914cdf0e10cSrcweir# Creating download installation sets
1915cdf0e10cSrcweir####################################################
1916cdf0e10cSrcweir
1917cdf0e10cSrcweirsub create_download_sets
1918cdf0e10cSrcweir{
1919cdf0e10cSrcweir    my ($installationdir, $includepatharrayref, $allvariableshashref, $downloadname, $languagestringref, $languagesarrayref) = @_;
1920cdf0e10cSrcweir
1921b274bc22SAndre Fischer    $installer::logger::Info->print("\n");
1922b274bc22SAndre Fischer    $installer::logger::Info->print("******************************************\n");
1923b274bc22SAndre Fischer    $installer::logger::Info->print("... creating download installation set ...\n", 1);
1924b274bc22SAndre Fischer    $installer::logger::Info->print("******************************************\n");
1925cdf0e10cSrcweir
1926cdf0e10cSrcweir    installer::logger::include_header_into_logfile("Creating download installation sets:");
1927cdf0e10cSrcweir
1928cdf0e10cSrcweir    # special handling for installation sets, to which english was added automatically
1929cdf0e10cSrcweir    if ( $installer::globals::added_english ) { remove_english_for_nsis_installer($languagestringref, $languagesarrayref); }
1930cdf0e10cSrcweir
1931cdf0e10cSrcweir    my $firstdir = $installationdir;
1932cdf0e10cSrcweir    installer::pathanalyzer::get_path_from_fullqualifiedname(\$firstdir);
1933cdf0e10cSrcweir
1934cdf0e10cSrcweir    my $lastdir = $installationdir;
1935cdf0e10cSrcweir    installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$lastdir);
1936cdf0e10cSrcweir
1937cdf0e10cSrcweir    if ( $lastdir =~ /\./ ) { $lastdir =~ s/\./_download_inprogress\./ }
1938cdf0e10cSrcweir    else { $lastdir = $lastdir . "_download_inprogress"; }
1939cdf0e10cSrcweir
1940cdf0e10cSrcweir    # removing existing directory "_native_packed_inprogress" and "_native_packed_witherror" and "_native_packed"
1941cdf0e10cSrcweir
1942cdf0e10cSrcweir    my $downloaddir = $firstdir . $lastdir;
1943cdf0e10cSrcweir
1944cdf0e10cSrcweir    if ( -d $downloaddir ) { installer::systemactions::remove_complete_directory($downloaddir); }
1945cdf0e10cSrcweir
1946cdf0e10cSrcweir    my $olddir = $downloaddir;
1947cdf0e10cSrcweir    $olddir =~ s/_inprogress/_witherror/;
1948cdf0e10cSrcweir    if ( -d $olddir ) { installer::systemactions::remove_complete_directory($olddir); }
1949cdf0e10cSrcweir
1950cdf0e10cSrcweir    $olddir = $downloaddir;
1951cdf0e10cSrcweir    $olddir =~ s/_inprogress//;
1952cdf0e10cSrcweir    if ( -d $olddir ) { installer::systemactions::remove_complete_directory($olddir); }
1953cdf0e10cSrcweir
1954cdf0e10cSrcweir    # creating the new directory
1955cdf0e10cSrcweir
1956cdf0e10cSrcweir    installer::systemactions::create_directory($downloaddir);
1957cdf0e10cSrcweir
1958cdf0e10cSrcweir    $installer::globals::saveinstalldir = $downloaddir;
1959cdf0e10cSrcweir
1960cdf0e10cSrcweir    # evaluating the name of the download file
1961cdf0e10cSrcweir
1962ff3f4ebcSOliver-Rainer Wittmann    if ( $allvariableshashref->{'AOODOWNLOADNAME'} )
1963ff3f4ebcSOliver-Rainer Wittmann    {
1964ff3f4ebcSOliver-Rainer Wittmann        $downloadname = set_download_filename($languagestringref, $allvariableshashref);
1965ff3f4ebcSOliver-Rainer Wittmann    }
1966ff3f4ebcSOliver-Rainer Wittmann    else
1967ff3f4ebcSOliver-Rainer Wittmann    {
1968ff3f4ebcSOliver-Rainer Wittmann        $downloadname = resolve_variables_in_downloadname($allvariableshashref, $downloadname, $languagestringref);
1969ff3f4ebcSOliver-Rainer Wittmann    }
1970cdf0e10cSrcweir
1971cdf0e10cSrcweir    if ( ! $installer::globals::iswindowsbuild )    # Unix specific part
1972cdf0e10cSrcweir    {
1973cdf0e10cSrcweir
1974cdf0e10cSrcweir        # getting the path of the getuid.so (only required for Solaris and Linux)
1975cdf0e10cSrcweir        my $getuidlibrary = "";
1976cdf0e10cSrcweir        if (( $installer::globals::issolarisbuild ) || ( $installer::globals::islinuxbuild )) { $getuidlibrary = get_path_for_library($includepatharrayref); }
1977cdf0e10cSrcweir
1978ff3f4ebcSOliver-Rainer Wittmann        if ( $allvariableshashref->{'AOODOWNLOADNAME'} )
1979cdf0e10cSrcweir        {
1980cdf0e10cSrcweir            my $downloadfile = create_tar_gz_file_from_directory($installationdir, $getuidlibrary, $downloaddir, $downloadname);
1981cdf0e10cSrcweir        }
1982cdf0e10cSrcweir        else
1983cdf0e10cSrcweir        {
1984cdf0e10cSrcweir            # find and read setup script template
1985cdf0e10cSrcweir            my $scriptfilename = "downloadscript.sh";
1986cdf0e10cSrcweir
1987cdf0e10cSrcweir            my $scriptref = "";
1988cdf0e10cSrcweir
1989cdf0e10cSrcweir            if ( $installer::globals::include_pathes_read )
1990cdf0e10cSrcweir            {
1991cdf0e10cSrcweir                $scriptref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$scriptfilename, $includepatharrayref, 0);
1992cdf0e10cSrcweir            }
1993cdf0e10cSrcweir            else
1994cdf0e10cSrcweir            {
1995cdf0e10cSrcweir                $scriptref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$scriptfilename, $includepatharrayref, 0);
1996cdf0e10cSrcweir            }
1997cdf0e10cSrcweir
1998cdf0e10cSrcweir            if ($$scriptref eq "") { installer::exiter::exit_program("ERROR: Could not find script file $scriptfilename!", "create_download_sets"); }
1999cdf0e10cSrcweir            my $scriptfile = installer::files::read_file($$scriptref);
2000cdf0e10cSrcweir
2001b274bc22SAndre Fischer            $installer::logger::Lang->printf("Found  script file %s: %s \n", $scriptfilename, $$scriptref);
2002cdf0e10cSrcweir
2003cdf0e10cSrcweir            # add product name into script template
2004cdf0e10cSrcweir            put_productname_into_script($scriptfile, $allvariableshashref);
2005cdf0e10cSrcweir
2006cdf0e10cSrcweir            # replace linenumber in script template
2007cdf0e10cSrcweir            put_linenumber_into_script($scriptfile);
2008cdf0e10cSrcweir
2009cdf0e10cSrcweir            # create tar file
2010cdf0e10cSrcweir            my $temporary_tarfile_name = $downloaddir . $installer::globals::separator . 'installset.tar';
2011cdf0e10cSrcweir            my $size = tar_package($installationdir, $temporary_tarfile_name, $getuidlibrary);
2012cdf0e10cSrcweir            installer::exiter::exit_program("ERROR: Could not create tar file $temporary_tarfile_name!", "create_download_sets") unless $size;
2013cdf0e10cSrcweir
2014cdf0e10cSrcweir            # calling sum to determine checksum and size of the tar file
2015cdf0e10cSrcweir            my $sumout = call_sum($temporary_tarfile_name);
2016cdf0e10cSrcweir
2017cdf0e10cSrcweir            # writing checksum and size into scriptfile
2018cdf0e10cSrcweir            put_checksum_and_size_into_script($scriptfile, $sumout);
2019cdf0e10cSrcweir
2020cdf0e10cSrcweir            # saving the script file
2021cdf0e10cSrcweir            my $newscriptfilename = determine_scriptfile_name($downloadname);
2022cdf0e10cSrcweir            $newscriptfilename = save_script_file($downloaddir, $newscriptfilename, $scriptfile);
2023cdf0e10cSrcweir
2024b274bc22SAndre Fischer            $installer::logger::Info->printf("... including installation set into %s ... \n", $newscriptfilename);
2025cdf0e10cSrcweir            # Append tar file to script
2026cdf0e10cSrcweir            include_tar_into_script($newscriptfilename, $temporary_tarfile_name);
2027cdf0e10cSrcweir        }
2028cdf0e10cSrcweir    }
2029cdf0e10cSrcweir    else    # Windows specific part
2030cdf0e10cSrcweir    {
2031cdf0e10cSrcweir        my $localnsisdir = installer::systemactions::create_directories("nsis", $languagestringref);
2032cdf0e10cSrcweir        # push(@installer::globals::removedirs, $localnsisdir);
2033cdf0e10cSrcweir
2034cdf0e10cSrcweir        # find nsis in the system
2035cdf0e10cSrcweir        my $nsispath = get_path_to_nsis_sdk();
2036cdf0e10cSrcweir
2037cdf0e10cSrcweir        if ( $nsispath eq "" ) {
2038cdf0e10cSrcweir            # If nsis is not found just skip the rest of this function
2039cdf0e10cSrcweir            # and do not create the NSIS file.
2040b274bc22SAndre Fischer            $installer::logger::Lang->print("\n");
2041b274bc22SAndre Fischer            $installer::logger::Lang->printf("No NSIS SDK found. Skipping the generation of NSIS file.\n");
2042b274bc22SAndre Fischer            $installer::logger::Info->print("... no NSIS SDK found. Skipping the generation of NSIS file ... \n");
2043cdf0e10cSrcweir            return $downloaddir;
2044cdf0e10cSrcweir        }
2045cdf0e10cSrcweir
2046cdf0e10cSrcweir        # copy language files into nsis directory and translate them
2047cdf0e10cSrcweir        copy_and_translate_nsis_language_files($nsispath, $localnsisdir, $languagesarrayref, $allvariableshashref);
2048cdf0e10cSrcweir
2049cdf0e10cSrcweir        # find and read the nsi file template
2050cdf0e10cSrcweir        my $templatefilename = "downloadtemplate.nsi";
2051cdf0e10cSrcweir
2052cdf0e10cSrcweir        my $templateref = "";
2053cdf0e10cSrcweir
2054cdf0e10cSrcweir        if ( $installer::globals::include_pathes_read )
2055cdf0e10cSrcweir        {
2056cdf0e10cSrcweir            $templateref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$templatefilename, $includepatharrayref, 0);
2057cdf0e10cSrcweir        }
2058cdf0e10cSrcweir        else
2059cdf0e10cSrcweir        {
2060cdf0e10cSrcweir            $templateref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$templatefilename, $includepatharrayref, 0);
2061cdf0e10cSrcweir        }
2062cdf0e10cSrcweir
2063cdf0e10cSrcweir        if ($$templateref eq "") { installer::exiter::exit_program("ERROR: Could not find nsi template file $templatefilename!", "create_download_sets"); }
2064cdf0e10cSrcweir        my $templatefile = installer::files::read_file($$templateref);
2065cdf0e10cSrcweir
2066cdf0e10cSrcweir        # add product name into script template
2067cdf0e10cSrcweir        put_windows_productname_into_template($templatefile, $allvariableshashref);
2068cdf0e10cSrcweir        put_banner_bmp_into_template($templatefile, $includepatharrayref, $allvariableshashref);
2069cdf0e10cSrcweir        put_welcome_bmp_into_template($templatefile, $includepatharrayref, $allvariableshashref);
2070cdf0e10cSrcweir        put_setup_ico_into_template($templatefile, $includepatharrayref, $allvariableshashref);
20710b2dfbacSAndre Fischer        put_publisher_into_template($templatefile, $allvariableshashref);
20720b2dfbacSAndre Fischer        put_website_into_template($templatefile, $allvariableshashref);
2073cdf0e10cSrcweir        put_javafilename_into_template($templatefile, $allvariableshashref);
2074cdf0e10cSrcweir        put_windows_productversion_into_template($templatefile, $allvariableshashref);
2075cdf0e10cSrcweir        put_windows_productpath_into_template($templatefile, $allvariableshashref, $languagestringref, $localnsisdir);
2076cdf0e10cSrcweir        put_outputfilename_into_template($templatefile, $downloadname);
2077cdf0e10cSrcweir        put_filelist_into_template($templatefile, $installationdir);
2078cdf0e10cSrcweir        put_language_list_into_template($templatefile, $languagesarrayref);
2079cdf0e10cSrcweir        put_nsis_path_into_template($templatefile, $localnsisdir);
2080cdf0e10cSrcweir        put_output_path_into_template($templatefile, $downloaddir);
2081cdf0e10cSrcweir        put_version_specific_code_into_template($templatefile);
2082cdf0e10cSrcweir
2083cdf0e10cSrcweir        my $nsifilename = save_script_file($localnsisdir, $templatefilename, $templatefile);
2084cdf0e10cSrcweir
2085b274bc22SAndre Fischer        $installer::logger::Info->printf("... created NSIS file %s ... \n", $nsifilename);
2086cdf0e10cSrcweir
2087cdf0e10cSrcweir        # starting the NSIS SDK to create the download file
2088cdf0e10cSrcweir        call_nsis($nsispath, $nsifilename);
2089cdf0e10cSrcweir    }
2090cdf0e10cSrcweir
2091cdf0e10cSrcweir    return $downloaddir;
2092cdf0e10cSrcweir}
2093cdf0e10cSrcweir
2094cdf0e10cSrcweir####################################################
2095957116b7SHerbert Dürr# Creating AOO upload tree
2096cdf0e10cSrcweir####################################################
2097cdf0e10cSrcweir
2098cdf0e10cSrcweirsub create_download_link_tree
2099cdf0e10cSrcweir{
2100cdf0e10cSrcweir    my ($downloaddir, $languagestringref, $allvariableshashref) = @_;
2101cdf0e10cSrcweir
2102b274bc22SAndre Fischer    $installer::logger::Info->print("\n");
2103b274bc22SAndre Fischer    $installer::logger::Info->print("******************************************\n"); #
2104b274bc22SAndre Fischer    $installer::logger::Info->print("... creating download hard link ...\n");
2105b274bc22SAndre Fischer    $installer::logger::Info->print("******************************************\n");
2106cdf0e10cSrcweir
2107cdf0e10cSrcweir    installer::logger::include_header_into_logfile("Creating download hard link:");
2108b274bc22SAndre Fischer    $installer::logger::Lang->print("\n");
2109b274bc22SAndre Fischer    $installer::logger::Lang->add_timestamp("Performance Info: Creating hard link, start");
2110cdf0e10cSrcweir
2111cdf0e10cSrcweir    if ( is_supported_platform() )
2112cdf0e10cSrcweir    {
2113cdf0e10cSrcweir        my $versionstring = "";
2114cdf0e10cSrcweir        # Already defined $installer::globals::oooversionstring and $installer::globals::ooodownloadfilename ?
2115cdf0e10cSrcweir
2116cdf0e10cSrcweir        if ( ! $installer::globals::oooversionstring ) { $versionstring = get_current_version(); }
2117cdf0e10cSrcweir        else { $versionstring = $installer::globals::oooversionstring; }
2118cdf0e10cSrcweir
2119cdf0e10cSrcweir        # Is $versionstring empty? If yes, there is nothing to do now.
2120cdf0e10cSrcweir
2121b274bc22SAndre Fischer        $installer::logger::Lang->printf("Version string is set to: %s\n", $versionstring);
2122cdf0e10cSrcweir
2123cdf0e10cSrcweir        if ( $versionstring )
2124cdf0e10cSrcweir        {
2125cdf0e10cSrcweir            # Now the downloadfilename has to be set (if not already done)
2126cdf0e10cSrcweir            my $destdownloadfilename = "";
2127cdf0e10cSrcweir            if ( ! $installer::globals::ooodownloadfilename ) { $destdownloadfilename = set_download_filename($languagestringref, $versionstring, $allvariableshashref); }
2128cdf0e10cSrcweir            else { $destdownloadfilename = $installer::globals::ooodownloadfilename; }
2129cdf0e10cSrcweir
2130cdf0e10cSrcweir            if ( $destdownloadfilename )
2131cdf0e10cSrcweir            {
2132cdf0e10cSrcweir                $destdownloadfilename = $destdownloadfilename . $installer::globals::downloadfileextension;
2133cdf0e10cSrcweir
2134b274bc22SAndre Fischer                $installer::logger::Lang->printf("Setting destination download file name: %s\n", $destdownloadfilename);
2135cdf0e10cSrcweir
2136cdf0e10cSrcweir                my $sourcedownloadfile = $downloaddir . $installer::globals::separator . $installer::globals::downloadfilename;
2137cdf0e10cSrcweir
2138b274bc22SAndre Fischer                $installer::logger::Lang->printf("Setting source download file name: %s\n", $sourcedownloadfile);
2139cdf0e10cSrcweir
2140cdf0e10cSrcweir                create_link_tree($sourcedownloadfile, $destdownloadfilename, $versionstring);
2141cdf0e10cSrcweir                # my $md5sumoutput = call_md5sum($downloadfile);
2142cdf0e10cSrcweir                # my $md5sum = get_md5sum($md5sumoutput);
2143cdf0e10cSrcweir
2144cdf0e10cSrcweir            }
2145cdf0e10cSrcweir        }
2146cdf0e10cSrcweir        else
2147cdf0e10cSrcweir        {
2148b274bc22SAndre Fischer            $installer::logger::Lang->printf("Version string is empty. Nothing to do!\n");
2149cdf0e10cSrcweir        }
2150cdf0e10cSrcweir    }
2151cdf0e10cSrcweir    else
2152cdf0e10cSrcweir    {
2153b274bc22SAndre Fischer        $installer::logger::Lang->printf("Platform not used for hard linking. Nothing to do!\n");
2154cdf0e10cSrcweir    }
2155cdf0e10cSrcweir
2156b274bc22SAndre Fischer    $installer::logger::Lang->add_timestamp("Performance Info: Creating hard link, stop");
2157cdf0e10cSrcweir}
2158cdf0e10cSrcweir
2159cdf0e10cSrcweir1;
2160