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