← Index
NYTProf Performance Profile   « block view • line view • sub view »
For C:/lo/libo-master/solenv/bin/make_installer.pl
  Run on Mon Sep 24 00:52:54 2012
Reported on Mon Sep 24 07:34:42 2012

Filename/cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/simplepackage.pm
StatementsExecuted 21 statements in 7.88ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.81ms2.45msinstaller::simplepackage::::BEGIN@36installer::simplepackage::BEGIN@36
111348µs426µsinstaller::simplepackage::::BEGIN@30installer::simplepackage::BEGIN@30
11119µs69µsinstaller::simplepackage::::BEGIN@31installer::simplepackage::BEGIN@31
11118µs20µsinstaller::simplepackage::::BEGIN@38installer::simplepackage::BEGIN@38
11116µs19µsinstaller::simplepackage::::BEGIN@32installer::simplepackage::BEGIN@32
11115µs18µsinstaller::simplepackage::::BEGIN@37installer::simplepackage::BEGIN@37
11114µs16µsinstaller::simplepackage::::BEGIN@34installer::simplepackage::BEGIN@34
11114µs16µsinstaller::simplepackage::::BEGIN@33installer::simplepackage::BEGIN@33
11113µs40µsinstaller::simplepackage::::BEGIN@35installer::simplepackage::BEGIN@35
1117µs7µsinstaller::simplepackage::::check_simple_packager_projectinstaller::simplepackage::check_simple_packager_project
0000s0sinstaller::simplepackage::::create_packageinstaller::simplepackage::create_package
0000s0sinstaller::simplepackage::::create_simple_packageinstaller::simplepackage::create_simple_package
0000s0sinstaller::simplepackage::::get_extensions_dirinstaller::simplepackage::get_extensions_dir
0000s0sinstaller::simplepackage::::get_identifierinstaller::simplepackage::get_identifier
0000s0sinstaller::simplepackage::::get_language_block_from_language_fileinstaller::simplepackage::get_language_block_from_language_file
0000s0sinstaller::simplepackage::::get_language_string_from_language_blockinstaller::simplepackage::get_language_string_from_language_block
0000s0sinstaller::simplepackage::::localize_scriptfileinstaller::simplepackage::localize_scriptfile
0000s0sinstaller::simplepackage::::replace_one_variable_in_shellscriptinstaller::simplepackage::replace_one_variable_in_shellscript
0000s0sinstaller::simplepackage::::replace_variables_in_scriptfileinstaller::simplepackage::replace_variables_in_scriptfile
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1#*************************************************************************
2#
3# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4#
5# Copyright 2000, 2010 Oracle and/or its affiliates.
6#
7# OpenOffice.org - a multi-platform office productivity suite
8#
9# This file is part of OpenOffice.org.
10#
11# OpenOffice.org is free software: you can redistribute it and/or modify
12# it under the terms of the GNU Lesser General Public License version 3
13# only, as published by the Free Software Foundation.
14#
15# OpenOffice.org is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18# GNU Lesser General Public License version 3 for more details
19# (a copy is included in the LICENSE file that accompanied this code).
20#
21# You should have received a copy of the GNU Lesser General Public License
22# version 3 along with OpenOffice.org. If not, see
23# <http://www.openoffice.org/license.html>
24# for a copy of the LGPLv3 License.
25#
26#*************************************************************************
27
28package installer::simplepackage;
29
30262µs2505µs
# spent 426µs (348+78) within installer::simplepackage::BEGIN@30 which was called: # once (348µs+78µs) by installer::BEGIN@57 at line 30
use Cwd;
# spent 426µs making 1 call to installer::simplepackage::BEGIN@30 # spent 78µs making 1 call to Exporter::import
31262µs2119µs
# spent 69µs (19+50) within installer::simplepackage::BEGIN@31 which was called: # once (19µs+50µs) by installer::BEGIN@57 at line 31
use File::Copy;
# spent 69µs making 1 call to installer::simplepackage::BEGIN@31 # spent 50µs making 1 call to Exporter::import
32255µs221µs
# spent 19µs (16+3) within installer::simplepackage::BEGIN@32 which was called: # once (16µs+3µs) by installer::BEGIN@57 at line 32
use installer::download;
# spent 19µs making 1 call to installer::simplepackage::BEGIN@32 # spent 2µs making 1 call to UNIVERSAL::import
33253µs218µs
# spent 16µs (14+2) within installer::simplepackage::BEGIN@33 which was called: # once (14µs+2µs) by installer::BEGIN@57 at line 33
use installer::exiter;
# spent 16µs making 1 call to installer::simplepackage::BEGIN@33 # spent 2µs making 1 call to UNIVERSAL::import
34252µs218µs
# spent 16µs (14+2) within installer::simplepackage::BEGIN@34 which was called: # once (14µs+2µs) by installer::BEGIN@57 at line 34
use installer::globals;
# spent 16µs making 1 call to installer::simplepackage::BEGIN@34 # spent 2µs making 1 call to UNIVERSAL::import
35266µs268µs
# spent 40µs (13+27) within installer::simplepackage::BEGIN@35 which was called: # once (13µs+27µs) by installer::BEGIN@57 at line 35
use installer::logger;
# spent 40µs making 1 call to installer::simplepackage::BEGIN@35 # spent 27µs making 1 call to Exporter::import
362998µs22.51ms
# spent 2.45ms (1.81+637µs) within installer::simplepackage::BEGIN@36 which was called: # once (1.81ms+637µs) by installer::BEGIN@57 at line 36
use installer::strip qw(strip_libraries);
# spent 2.45ms making 1 call to installer::simplepackage::BEGIN@36 # spent 63µs making 1 call to Exporter::import
37254µs221µs
# spent 18µs (15+3) within installer::simplepackage::BEGIN@37 which was called: # once (15µs+3µs) by installer::BEGIN@57 at line 37
use installer::systemactions;
# spent 18µs making 1 call to installer::simplepackage::BEGIN@37 # spent 3µs making 1 call to UNIVERSAL::import
3826.46ms222µs
# spent 20µs (18+2) within installer::simplepackage::BEGIN@38 which was called: # once (18µs+2µs) by installer::BEGIN@57 at line 38
use installer::worker;
# spent 20µs making 1 call to installer::simplepackage::BEGIN@38 # spent 2µs making 1 call to UNIVERSAL::import
39
40####################################################
41# Checking if the simple packager is required.
42# This can be achieved by setting the global
43# variable SIMPLE_PACKAGE in *.lst file or by
44# setting the environment variable SIMPLE_PACKAGE.
45####################################################
46
47sub check_simple_packager_project
48
# spent 7µs within installer::simplepackage::check_simple_packager_project which was called: # once (7µs+0s) by installer::run at line 235 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm
{
4929µs my ( $allvariables ) = @_;
50
51 if (( $installer::globals::packageformat eq "installed" ) ||
52 ( $installer::globals::packageformat eq "archive" ))
53 {
54 $installer::globals::is_simple_packager_project = 1;
55 $installer::globals::patch_user_dir = 1;
56 }
57 elsif( $installer::globals::packageformat eq "dmg" )
58 {
59 $installer::globals::is_simple_packager_project = 1;
60 }
61}
62
63####################################################
64# Detecting the directory with extensions
65####################################################
66
67sub get_extensions_dir
68{
69 my ( $subfolderdir ) = @_;
70
71 my $extensiondir = $subfolderdir . $installer::globals::separator;
72 if ( $installer::globals::officedirhostname ne "" ) { $extensiondir = $extensiondir . $installer::globals::officedirhostname . $installer::globals::separator; }
73 my $extensionsdir = $extensiondir . "share" . $installer::globals::separator . "extensions";
74
75 return $extensionsdir;
76}
77
78##################################################################
79# Collecting all identifier from ulf file
80##################################################################
81
82sub get_identifier
83{
84 my ( $translationfile ) = @_;
85
86 my @identifier = ();
87
88 for ( my $i = 0; $i <= $#{$translationfile}; $i++ )
89 {
90 my $oneline = ${$translationfile}[$i];
91
92 if ( $oneline =~ /^\s*\[(.+)\]\s*$/ )
93 {
94 my $identifier = $1;
95 push(@identifier, $identifier);
96 }
97 }
98
99 return \@identifier;
100}
101
102##############################################################
103# Returning the complete block in all languages
104# for a specified string
105##############################################################
106
107sub get_language_block_from_language_file
108{
109 my ($searchstring, $languagefile) = @_;
110
111 my @language_block = ();
112
113 for ( my $i = 0; $i <= $#{$languagefile}; $i++ )
114 {
115 if ( ${$languagefile}[$i] =~ /^\s*\[\s*$searchstring\s*\]\s*$/ )
116 {
117 my $counter = $i;
118
119 push(@language_block, ${$languagefile}[$counter]);
120 $counter++;
121
122 while (( $counter <= $#{$languagefile} ) && (!( ${$languagefile}[$counter] =~ /^\s*\[/ )))
123 {
124 push(@language_block, ${$languagefile}[$counter]);
125 $counter++;
126 }
127
128 last;
129 }
130 }
131
132 return \@language_block;
133}
134
135##############################################################
136# Returning a specific language string from the block
137# of all translations
138##############################################################
139
140sub get_language_string_from_language_block
141{
142 my ($language_block, $language) = @_;
143
144 my $newstring = "";
145
146 for ( my $i = 0; $i <= $#{$language_block}; $i++ )
147 {
148 if ( ${$language_block}[$i] =~ /^\s*$language\s*\=\s*\"(.*)\"\s*$/ )
149 {
150 $newstring = $1;
151 last;
152 }
153 }
154
155 if ( $newstring eq "" )
156 {
157 $language = "en-US"; # defaulting to english
158
159 for ( my $i = 0; $i <= $#{$language_block}; $i++ )
160 {
161 if ( ${$language_block}[$i] =~ /^\s*$language\s*\=\s*\"(.*)\"\s*$/ )
162 {
163 $newstring = $1;
164 last;
165 }
166 }
167 }
168
169 return $newstring;
170}
171
172########################################################################
173# Localizing the script for the Mac Language Pack installer
174########################################################################
175
176sub localize_scriptfile
177{
178 my ($scriptfile, $translationfile, $languagestringref) = @_;
179
180 my $onelanguage = $$languagestringref;
181 if ( $onelanguage =~ /^\s*(.*?)_/ ) { $onelanguage = $1; }
182
183 # Analyzing the ulf file, collecting all Identifier
184 my $allidentifier = get_identifier($translationfile);
185
186 for ( my $i = 0; $i <= $#{$allidentifier}; $i++ )
187 {
188 my $identifier = ${$allidentifier}[$i];
189 my $language_block = get_language_block_from_language_file($identifier, $translationfile);
190 my $newstring = get_language_string_from_language_block($language_block, $onelanguage);
191
192 # removing mask
193 $newstring =~ s/\\\'/\'/g;
194
195 replace_one_variable_in_shellscript($scriptfile, $newstring, $identifier);
196 }
197}
198
199#################################################################################
200# Replacing one variable in Mac shell script
201#################################################################################
202
203sub replace_one_variable_in_shellscript
204{
205 my ($scriptfile, $variable, $searchstring) = @_;
206
207 for ( my $i = 0; $i <= $#{$scriptfile}; $i++ )
208 {
209 ${$scriptfile}[$i] =~ s/\[$searchstring\]/$variable/g;
210 }
211}
212
213#############################################
214# Replacing variables in Mac shell script
215#############################################
216
217sub replace_variables_in_scriptfile
218{
219 my ($scriptfile, $volume_name, $volume_name_app, $allvariables) = @_;
220
221 replace_one_variable_in_shellscript($scriptfile, $volume_name, "FULLPRODUCTNAME" );
222 replace_one_variable_in_shellscript($scriptfile, $volume_name_app, "FULLAPPPRODUCTNAME" );
223 replace_one_variable_in_shellscript($scriptfile, $allvariables->{'PRODUCTNAME'}, "PRODUCTNAME" );
224 replace_one_variable_in_shellscript($scriptfile, $allvariables->{'PRODUCTVERSION'}, "PRODUCTVERSION" );
225
226 my $scriptname = lc($allvariables->{'PRODUCTNAME'}) . "\.script";
227 if ( $allvariables->{'PRODUCTNAME'} eq "LibreOffice" ) { $scriptname = "org.libreoffice.script"; }
228
229 replace_one_variable_in_shellscript($scriptfile, $scriptname, "SEARCHSCRIPTNAME" );
230}
231
232#############################################
233# Creating the "simple" package.
234# "zip" for Windows
235# "tar.gz" for all other platforms
236# additionally "dmg" on Mac OS X
237#############################################
238
239sub create_package
240{
241 my ( $installdir, $archivedir, $packagename, $allvariables, $includepatharrayref, $languagestringref, $format ) = @_;
242
243 installer::logger::print_message( "... creating $installer::globals::packageformat file ...\n" );
244 installer::logger::include_header_into_logfile("Creating $installer::globals::packageformat file:");
245
246 # moving dir into temporary directory
247 my $pid = $$; # process id
248 my $tempdir = $installdir . "_temp" . "." . $pid;
249 my $systemcall = "";
250 my $from = "";
251 my $makesystemcall = 1;
252 my $return_to_start = 0;
253 installer::systemactions::rename_directory($installdir, $tempdir);
254
255 # creating new directory with original name
256 installer::systemactions::create_directory($archivedir);
257
258 my $archive = $archivedir . $installer::globals::separator . $packagename . $format;
259
260 if ( $archive =~ /zip$/ )
261 {
262 $from = cwd();
263 $return_to_start = 1;
264 chdir($tempdir);
265 $systemcall = "$installer::globals::zippath -qr $archive .";
266
267 # Using Archive::Zip fails because of very long path names below "share/uno_packages/cache"
268 # my $packzip = Archive::Zip->new();
269 # $packzip->addTree("."); # after changing into $tempdir
270 # $packzip->writeToFileNamed($archive);
271 # $makesystemcall = 0;
272 }
273 elsif ( $archive =~ /dmg$/ )
274 {
275 my $folder = (( -l "$tempdir/$packagename/Applications" ) or ( -l "$tempdir/$packagename/opt" )) ? $packagename : "\.";
276
277 if ( $allvariables->{'PACK_INSTALLED'} ) {
278 $folder = $packagename;
279 }
280
281 # my $volume_name = $allvariables->{'PRODUCTNAME'} . ' ' . $allvariables->{'PRODUCTVERSION'}; # Adding PRODUCTVERSION makes this difficult to maintain!
282 my $volume_name = $allvariables->{'PRODUCTNAME'};
283 my $volume_name_classic = $allvariables->{'PRODUCTNAME'} . ' ' . $allvariables->{'PRODUCTVERSION'};
284 my $volume_name_classic_app = $volume_name; # "app" should not contain version number
285 # $volume_name = $volume_name . ' ' . $allvariables->{'PRODUCTEXTENSION'} if $allvariables->{'PRODUCTEXTENSION'}; # Adding PRODUCTEXTENSION makes this difficult to maintain!
286 $volume_name_classic = $volume_name_classic . ' ' . $allvariables->{'PRODUCTEXTENSION'} if $allvariables->{'PRODUCTEXTENSION'};
287 $volume_name_classic_app = $volume_name_classic_app . ' ' . $allvariables->{'PRODUCTEXTENSION'} if $allvariables->{'PRODUCTEXTENSION'};
288 if ( $allvariables->{'DMG_VOLUMEEXTENSION'} ) {
289 $volume_name = $volume_name . ' ' . $allvariables->{'DMG_VOLUMEEXTENSION'};
290 $volume_name_classic = $volume_name_classic . ' ' . $allvariables->{'DMG_VOLUMEEXTENSION'};
291 $volume_name_classic_app = $volume_name_classic_app . ' ' . $allvariables->{'DMG_VOLUMEEXTENSION'};
292 }
293
294 my $sla = 'sla.r';
295 my $ref = "";
296
297 if ( ! $allvariables->{'HIDELICENSEDIALOG'} )
298 {
299 installer::scriptitems::get_sourcepath_from_filename_and_includepath( \$sla, $includepatharrayref, 0);
300 }
301
302 my $localtempdir = $tempdir;
303
304 if (( $installer::globals::languagepack ) || ( $installer::globals::helppack ) || ( $installer::globals::patch ))
305 {
306 $localtempdir = "$tempdir/$packagename";
307 if ( $installer::globals::helppack ) { $volume_name = "$volume_name Help Pack"; }
308 if ( $installer::globals::languagepack )
309 {
310 $volume_name = "$volume_name Language Pack";
311 $volume_name_classic = "$volume_name_classic Language Pack";
312 $volume_name_classic_app = "$volume_name_classic_app Language Pack";
313 }
314 if ( $installer::globals::patch )
315 {
316 $volume_name = "$volume_name Patch";
317 $volume_name_classic = "$volume_name_classic Patch";
318 $volume_name_classic_app = "$volume_name_classic_app Patch";
319 }
320
321 # Create tar ball named tarball.tar.bz2
322 # my $appfolder = $localtempdir . "/" . $volume_name . "\.app";
323 my $appfolder = $localtempdir . "/" . $volume_name_classic_app . "\.app";
324 my $contentsfolder = $appfolder . "/Contents";
325 my $tarballname = "tarball.tar.bz2";
326
327 my $localfrom = cwd();
328 chdir $appfolder;
329
330 $systemcall = "tar -cjf $tarballname Contents/";
331
332 print "... $systemcall ...\n";
333 my $localreturnvalue = system($systemcall);
334 $infoline = "Systemcall: $systemcall\n";
335 push( @installer::globals::logfileinfo, $infoline);
336
337 if ($localreturnvalue)
338 {
339 $infoline = "ERROR: Could not execute \"$systemcall\"!\n";
340 push( @installer::globals::logfileinfo, $infoline);
341 }
342 else
343 {
344 $infoline = "Success: Executed \"$systemcall\" successfully!\n";
345 push( @installer::globals::logfileinfo, $infoline);
346 }
347
348 my $sourcefile = $appfolder . "/" . $tarballname;
349 my $destfile = $contentsfolder . "/" . $tarballname;
350
351 installer::systemactions::remove_complete_directory($contentsfolder);
352 installer::systemactions::create_directory($contentsfolder);
353
354 installer::systemactions::copy_one_file($sourcefile, $destfile);
355 unlink($sourcefile);
356
357 # Copy two files into installation set next to the tar ball
358 # 1. "osx_install.applescript"
359 # 2 "OpenOffice.org Languagepack"
360
361 my $scriptrealfilename = "osx_install.applescript";
362 my $scriptfilename = "";
363 if ( $installer::globals::languagepack ) { $scriptfilename = "osx_install_languagepack.applescript"; }
364 if ( $installer::globals::helppack ) { $scriptfilename = "osx_install_helppack.applescript"; }
365 if ( $installer::globals::patch ) { $scriptfilename = "osx_install_patch.applescript"; }
366 my $scripthelpersolverfilename = "mac_install.script";
367 # my $scripthelperrealfilename = $volume_name;
368 my $scripthelperrealfilename = $volume_name_classic_app;
369 my $translationfilename = $installer::globals::macinstallfilename;
370
371 # Finding both files in solver
372
373 my $scriptref = installer::scriptitems::get_sourcepath_from_filename_and_includepath( \$scriptfilename, $includepatharrayref, 0);
374 if ($$scriptref eq "") { installer::exiter::exit_program("ERROR: Could not find Apple script $scriptfilename!", "create_package"); }
375 my $scripthelperref = installer::scriptitems::get_sourcepath_from_filename_and_includepath( \$scripthelpersolverfilename, $includepatharrayref, 0);
376 if ($$scripthelperref eq "") { installer::exiter::exit_program("ERROR: Could not find Apple script $scripthelpersolverfilename!", "create_package"); }
377 my $translationfileref = installer::scriptitems::get_sourcepath_from_filename_and_includepath( \$translationfilename, $includepatharrayref, 0);
378 if ($$translationfileref eq "") { installer::exiter::exit_program("ERROR: Could not find Apple script translation file $translationfilename!", "create_package"); }
379
380 $scriptfilename = $contentsfolder . "/" . $scriptrealfilename;
381 $scripthelperrealfilename = $contentsfolder . "/" . $scripthelperrealfilename;
382
383 installer::systemactions::copy_one_file($$scriptref, $scriptfilename);
384 installer::systemactions::copy_one_file($$scripthelperref, $scripthelperrealfilename);
385
386 # Replacing variables in script $scriptfilename
387 # Localizing script $scriptfilename
388 my $scriptfilecontent = installer::files::read_file($scriptfilename);
389 my $translationfilecontent = installer::files::read_file($$translationfileref);
390 localize_scriptfile($scriptfilecontent, $translationfilecontent, $languagestringref);
391 # replace_variables_in_scriptfile($scriptfilecontent, $volume_name, $allvariables);
392 replace_variables_in_scriptfile($scriptfilecontent, $volume_name_classic, $volume_name_classic_app, $allvariables);
393 installer::files::save_file($scriptfilename, $scriptfilecontent);
394
395 chmod 0775, $scriptfilename;
396 chmod 0775, $scripthelperrealfilename;
397
398 # Copy also Info.plist and icon file
399 # Finding both files in solver
400 my $iconfile = "ooo3_installer.icns";
401 my $iconfileref = installer::scriptitems::get_sourcepath_from_filename_and_includepath( \$iconfile, $includepatharrayref, 0);
402 if ($$iconfileref eq "") { installer::exiter::exit_program("ERROR: Could not find Apple script icon file $iconfile!", "create_package"); }
403 my $subdir = $contentsfolder . "/" . "Resources";
404 if ( ! -d $subdir ) { installer::systemactions::create_directory($subdir); }
405 $destfile = $subdir . "/" . $iconfile;
406 installer::systemactions::copy_one_file($$iconfileref, $destfile);
407
408 my $infoplistfile = "Info.plist.langpack";
409 my $installname = "Info.plist";
410 my $infoplistfileref = installer::scriptitems::get_sourcepath_from_filename_and_includepath( \$infoplistfile, $includepatharrayref, 0);
411 if ($$infoplistfileref eq "") { installer::exiter::exit_program("ERROR: Could not find Apple script Info.plist: $infoplistfile!", "create_package"); }
412 $destfile = $contentsfolder . "/" . $installname;
413 installer::systemactions::copy_one_file($$infoplistfileref, $destfile);
414
415 # Replacing variables in Info.plist
416 $scriptfilecontent = installer::files::read_file($destfile);
417 # replace_one_variable_in_shellscript($scriptfilecontent, $volume_name, "FULLPRODUCTNAME" );
418 replace_one_variable_in_shellscript($scriptfilecontent, $volume_name_classic_app, "FULLAPPPRODUCTNAME" ); # OpenOffice.org Language Pack
419 installer::files::save_file($destfile, $scriptfilecontent);
420
421 chdir $localfrom;
422 }
423
424 $systemcall = "cd $localtempdir && hdiutil makehybrid -hfs -hfs-openfolder $folder $folder -hfs-volume-name \"$volume_name\" -ov -o $installdir/tmp && hdiutil convert -ov -format UDBZ $installdir/tmp.dmg -o $archive && ";
425 if (( $ref ne "" ) && ( $$ref ne "" )) {
426 $systemcall .= "hdiutil unflatten $archive && Rez -a $$ref -o $archive && hdiutil flatten $archive &&";
427 }
428 $systemcall .= "rm -f $installdir/tmp.dmg";
429 }
430 else
431 {
432 # getting the path of the getuid.so (only required for Solaris and Linux)
433 my $getuidlibrary = "";
434 my $ldpreloadstring = "";
435 if (( $installer::globals::issolarisbuild ) || ( $installer::globals::islinuxbuild ))
436 {
437 $getuidlibrary = installer::download::get_path_for_library($includepatharrayref);
438 if ( $getuidlibrary ne "" ) { $ldpreloadstring = "LD_PRELOAD=" . $getuidlibrary; }
439 }
440
441 $systemcall = "cd $tempdir; $ldpreloadstring tar -cf - . | gzip > $archive";
442 }
443
444 if ( $makesystemcall )
445 {
446 print "... $systemcall ...\n";
447 my $returnvalue = system($systemcall);
448 my $infoline = "Systemcall: $systemcall\n";
449 push( @installer::globals::logfileinfo, $infoline);
450
451 if ($returnvalue)
452 {
453 $infoline = "ERROR: Could not execute \"$systemcall\"!\n";
454 push( @installer::globals::logfileinfo, $infoline);
455 }
456 else
457 {
458 $infoline = "Success: Executed \"$systemcall\" successfully!\n";
459 push( @installer::globals::logfileinfo, $infoline);
460 }
461 }
462
463 if ( $return_to_start ) { chdir($from); }
464
465 print "... removing $tempdir ...\n";
466 installer::systemactions::remove_complete_directory($tempdir);
467}
468
469####################################################
470# Main method for creating the simple package
471# installation sets
472####################################################
473
474sub create_simple_package
475{
476 my ( $filesref, $dirsref, $scpactionsref, $linksref, $unixlinksref, $loggingdir, $languagestringref, $shipinstalldir, $allsettingsarrayref, $allvariables, $includepatharrayref ) = @_;
477
478 # Creating directories
479
480 my $current_install_number = "";
481 my $infoline = "";
482
483 installer::logger::print_message( "... creating installation directory ...\n" );
484 installer::logger::include_header_into_logfile("Creating installation directory");
485
486 $installer::globals::csp_installdir = installer::worker::create_installation_directory($shipinstalldir, $languagestringref, \$current_install_number);
487 $installer::globals::csp_installlogdir = installer::systemactions::create_directory_next_to_directory($installer::globals::csp_installdir, "log");
488
489 my $installdir = $installer::globals::csp_installdir;
490 my $installlogdir = $installer::globals::csp_installlogdir;
491
492 # Setting package name (similar to the download name)
493 my $packagename = "";
494
495 if ( $installer::globals::packageformat eq "archive" ||
496 $installer::globals::packageformat eq "dmg" )
497 {
498 $installer::globals::csp_languagestring = $$languagestringref;
499
500 my $locallanguage = $installer::globals::csp_languagestring;
501
502 if ( $allvariables->{'OOODOWNLOADNAME'} )
503 {
504 $packagename = installer::download::set_download_filename(\$locallanguage, $allvariables);
505 }
506 else
507 {
508 $downloadname = installer::ziplist::getinfofromziplist($allsettingsarrayref, "downloadname");
509 if ( $installer::globals::languagepack ) { $downloadname = installer::ziplist::getinfofromziplist($allsettingsarrayref, "langpackdownloadname"); }
510 if ( $installer::globals::helppack ) { $downloadname = installer::ziplist::getinfofromziplist($allsettingsarrayref, "helppackdownloadname"); }
511 if ( $installer::globals::patch ) { $downloadname = installer::ziplist::getinfofromziplist($allsettingsarrayref, "patchdownloadname"); }
512 $packagename = installer::download::resolve_variables_in_downloadname($allvariables, $$downloadname, \$locallanguage);
513 }
514 }
515
516 # Work around Windows problems with long pathnames (see issue 50885) by
517 # putting the to-be-archived installation tree into the temp directory
518 # instead of the module output tree (unless LOCALINSTALLDIR dictates
519 # otherwise, anyway); can be removed once issue 50885 is fixed:
520 my $tempinstalldir = $installdir;
521 if ( $installer::globals::iswindowsbuild &&
522 $installer::globals::packageformat eq "archive" &&
523 !$installer::globals::localinstalldirset )
524 {
525 $tempinstalldir = File::Temp::tempdir;
526 }
527
528 # Creating subfolder in installdir, which shall become the root of package or zip file
529 my $subfolderdir = "";
530 if ( $packagename ne "" ) { $subfolderdir = $tempinstalldir . $installer::globals::separator . $packagename; }
531 else { $subfolderdir = $tempinstalldir; }
532
533 if ( ! -d $subfolderdir ) { installer::systemactions::create_directory($subfolderdir); }
534
535 # Create directories, copy files and ScpActions
536
537 installer::logger::print_message( "... creating directories ...\n" );
538 installer::logger::include_header_into_logfile("Creating directories:");
539
540 for ( my $i = 0; $i <= $#{$dirsref}; $i++ )
541 {
542 my $onedir = ${$dirsref}[$i];
543
544 if ( $onedir->{'HostName'} )
545 {
546 my $destdir = $subfolderdir . $installer::globals::separator . $onedir->{'HostName'};
547
548 if ( ! -d $destdir )
549 {
550 if ( $^O =~ /cygwin/i ) # Cygwin performance check
551 {
552 $infoline = "Try to create directory $destdir\n";
553 push(@installer::globals::logfileinfo, $infoline);
554 # Directories in $dirsref are sorted and all parents were added -> "mkdir" works without parent creation!
555 if ( ! ( -d $destdir )) { mkdir($destdir, 0775); }
556 }
557 else
558 {
559 installer::systemactions::create_directory_structure($destdir);
560 }
561 }
562 }
563 }
564
565 # stripping files ?!
566 if (( $installer::globals::strip ) && ( ! $installer::globals::iswindowsbuild )) { strip_libraries($filesref, $languagestringref); }
567
568 # copy Files
569 installer::logger::print_message( "... copying files ...\n" );
570 installer::logger::include_header_into_logfile("Copying files:");
571
572 for ( my $i = 0; $i <= $#{$filesref}; $i++ )
573 {
574 my $onefile = ${$filesref}[$i];
575
576 if (( $onefile->{'Styles'} ) && ( $onefile->{'Styles'} =~ /\bBINARYTABLE_ONLY\b/ )) { next; }
577 if (( $installer::globals::patch ) && ( $onefile->{'Styles'} ) && ( ! ( $onefile->{'Styles'} =~ /\bPATCH\b/ ))) { next; }
578 if (( $installer::globals::patch ) && ( $installer::globals::packageformat eq "dmg" )) { push(@installer::globals::patchfilecollector, "$onefile->{'destination'}\n"); }
579
580 my $source = $onefile->{'sourcepath'};
581 my $destination = $onefile->{'destination'};
582 $destination = $subfolderdir . $installer::globals::separator . $destination;
583
584 # Replacing $$ by $ is necessary to install files with $ in its name (back-masquerading)
585 # Otherwise, the following shell command does not work and the file list is not correct
586 $source =~ s/\$\$/\$/;
587 $destination =~ s/\$\$/\$/;
588
589 if ( $^O =~ /cygwin/i ) # Cygwin performance, do not use copy_one_file. "chmod -R" at the end
590 {
591 my $copyreturn = copy($source, $destination);
592
593 if ($copyreturn)
594 {
595 $infoline = "Copy: $source to $destination\n";
596 $returnvalue = 1;
597 }
598 else
599 {
600 $infoline = "ERROR: Could not copy $source to $destination $!\n";
601 $returnvalue = 0;
602 }
603
604 push(@installer::globals::logfileinfo, $infoline);
605 }
606 else
607 {
608 installer::systemactions::copy_one_file($source, $destination);
609
610 if ( ! $installer::globals::iswindowsbuild )
611 {
612 # see issue 102274
613 if ( $onefile->{'UnixRights'} )
614 {
615 chmod oct($onefile->{'UnixRights'}), $destination;
616 }
617 }
618 }
619 }
620
621 # creating Links
622
623 installer::logger::print_message( "... creating links ...\n" );
624 installer::logger::include_header_into_logfile("Creating links:");
625
626 for ( my $i = 0; $i <= $#{$linksref}; $i++ )
627 {
628 my $onelink = ${$linksref}[$i];
629
630 if (( $installer::globals::patch ) && ( $onelink->{'Styles'} ) && ( ! ( $onelink->{'Styles'} =~ /\bPATCH\b/ ))) { next; }
631
632 my $destination = $onelink->{'destination'};
633 $destination = $subfolderdir . $installer::globals::separator . $destination;
634 my $destinationfile = $onelink->{'destinationfile'};
635
636 my $localcall = "ln -sf \'$destinationfile\' \'$destination\' \>\/dev\/null 2\>\&1";
637 system($localcall);
638
639 $infoline = "Creating link: \"ln -sf $destinationfile $destination\"\n";
640 push(@installer::globals::logfileinfo, $infoline);
641 }
642
643 for ( my $i = 0; $i <= $#{$unixlinksref}; $i++ )
644 {
645 my $onelink = ${$unixlinksref}[$i];
646
647 if (( $installer::globals::patch ) && ( $onelink->{'Styles'} ) && ( ! ( $onelink->{'Styles'} =~ /\bPATCH\b/ ))) { next; }
648
649 my $target = $onelink->{'Target'};
650 my $destination = $subfolderdir . $installer::globals::separator . $onelink->{'destination'};
651
652 my $localcall = "ln -sf \'$target\' \'$destination\' \>\/dev\/null 2\>\&1";
653 system($localcall);
654
655 $infoline = "Creating Unix link: \"ln -sf $target $destination\"\n";
656 push(@installer::globals::logfileinfo, $infoline);
657 }
658
659 # Setting privileges for cygwin globally
660
661 if ( $^O =~ /cygwin/i )
662 {
663 installer::logger::print_message( "... changing privileges in $subfolderdir ...\n" );
664 installer::logger::include_header_into_logfile("Changing privileges in $subfolderdir:");
665
666 my $localcall = "chmod -R 755 " . "\"" . $subfolderdir . "\"";
667 system($localcall);
668 }
669
670 installer::logger::print_message( "... removing superfluous directories ...\n" );
671 installer::logger::include_header_into_logfile("Removing superfluous directories:");
672
673 my $extensionfolder = get_extensions_dir($subfolderdir);
674 installer::systemactions::remove_empty_dirs_in_folder($extensionfolder);
675
676 if ( $installer::globals::compiler =~ /^unxmacx/ )
677 {
678 installer::worker::put_scpactions_into_installset("$installdir/$packagename");
679 }
680
681 # Creating archive file
682 if ( $installer::globals::packageformat eq "archive" )
683 {
684 create_package($tempinstalldir, $installdir, $packagename, $allvariables, $includepatharrayref, $languagestringref, $installer::globals::archiveformat);
685 }
686 elsif ( $installer::globals::packageformat eq "dmg" )
687 {
688 create_package($installdir, $installdir, $packagename, $allvariables, $includepatharrayref, $languagestringref, ".dmg");
689 }
690
691 # Analyzing the log file
692
693 installer::worker::clean_output_tree(); # removing directories created in the output tree
694 installer::worker::analyze_and_save_logfile($loggingdir, $installdir, $installlogdir, $allsettingsarrayref, $languagestringref, $current_install_number);
695}
696
69718µs1;