| #************************************************************** |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| #************************************************************** |
| |
| |
| |
| package installer::download; |
| |
| use File::Spec; |
| use installer::exiter; |
| use installer::files; |
| use installer::globals; |
| use installer::logger; |
| use installer::pathanalyzer; |
| use installer::remover; |
| use installer::systemactions; |
| |
| use strict; |
| |
| BEGIN { # This is needed so that Cygwin's perl evaluates ACLs |
| # (needed for correctly evaluating the -x test.) |
| if( $^O =~ /cygwin/i ) { |
| require filetest; import filetest "access"; |
| } |
| } |
| |
| ################################################################## |
| # Including the lowercase product name into the script template |
| ################################################################## |
| |
| sub put_productname_into_script |
| { |
| my ($scriptfile, $variableshashref) = @_; |
| |
| my $productname = $variableshashref->{'PRODUCTNAME'}; |
| $productname = lc($productname); |
| $productname =~ s/\.//g; # openoffice.org -> openofficeorg |
| $productname =~ s/\s*//g; |
| |
| $installer::logger::Lang->printf("Adding productname %s into download shell script\n", $productname); |
| |
| for ( my $i = 0; $i <= $#{$scriptfile}; $i++ ) |
| { |
| ${$scriptfile}[$i] =~ s/PRODUCTNAMEPLACEHOLDER/$productname/; |
| } |
| } |
| |
| ######################################################### |
| # Including the linenumber into the script template |
| ######################################################### |
| |
| sub put_linenumber_into_script |
| { |
| my ( $scriptfile ) = @_; |
| |
| my $linenumber = $#{$scriptfile} + 2; |
| |
| $installer::logger::Lang->printf("Adding linenumber %d into download shell script\n", $linenumber); |
| |
| for ( my $i = 0; $i <= $#{$scriptfile}; $i++ ) |
| { |
| ${$scriptfile}[$i] =~ s/LINENUMBERPLACEHOLDER/$linenumber/; |
| } |
| } |
| |
| ######################################################### |
| # Determining the name of the new scriptfile |
| ######################################################### |
| |
| sub determine_scriptfile_name |
| { |
| my ( $filename ) = @_; |
| |
| $installer::globals::downloadfileextension = ".sh"; |
| $filename = $filename . $installer::globals::downloadfileextension; |
| $installer::globals::downloadfilename = $filename; |
| |
| $installer::logger::Lang->printf("Setting download shell script file name to %s\n", $filename); |
| |
| return $filename; |
| } |
| |
| ######################################################### |
| # Saving the script file in the installation directory |
| ######################################################### |
| |
| sub save_script_file |
| { |
| my ($directory, $newscriptfilename, $scriptfile) = @_; |
| |
| $newscriptfilename = $directory . $installer::globals::separator . $newscriptfilename; |
| installer::files::save_file($newscriptfilename, $scriptfile); |
| |
| $installer::logger::Lang->printf("Saving script file %s\n", $newscriptfilename); |
| |
| if ( ! $installer::globals::iswindowsbuild ) |
| { |
| my $localcall = "chmod 775 $newscriptfilename \>\/dev\/null 2\>\&1"; |
| system($localcall); |
| } |
| |
| return $newscriptfilename; |
| } |
| |
| ######################################################### |
| # Including checksum and size into script file |
| ######################################################### |
| |
| sub put_checksum_and_size_into_script |
| { |
| my ($scriptfile, $sumout) = @_; |
| |
| my $checksum = ""; |
| my $size = ""; |
| |
| if ( $sumout =~ /^\s*(\d+)\s+(\d+)\s*$/ ) |
| { |
| $checksum = $1; |
| $size = $2; |
| } |
| else |
| { |
| installer::exiter::exit_program("ERROR: Incorrect return value from /usr/bin/sum: $sumout", "put_checksum_and_size_into_script"); |
| } |
| |
| $installer::logger::Lang->printf( |
| "Adding checksum %s and size %s into download shell script\n", $checksum, $size); |
| |
| for ( my $i = 0; $i <= $#{$scriptfile}; $i++ ) |
| { |
| ${$scriptfile}[$i] =~ s/CHECKSUMPLACEHOLDER/$checksum/; |
| ${$scriptfile}[$i] =~ s/DISCSPACEPLACEHOLDER/$size/; |
| } |
| |
| } |
| |
| ######################################################### |
| # Calling md5sum |
| ######################################################### |
| |
| sub call_md5sum |
| { |
| my ($filename) = @_; |
| |
| my $md5sumfile = "/usr/bin/md5sum"; |
| |
| if ( ! -f $md5sumfile ) { installer::exiter::exit_program("ERROR: No file /usr/bin/md5sum", "call_md5sum"); } |
| |
| my $systemcall = "$md5sumfile $filename |"; |
| |
| my $md5sumoutput = ""; |
| |
| open (SUM, "$systemcall"); |
| $md5sumoutput = <SUM>; |
| close (SUM); |
| |
| my $returnvalue = $?; # $? contains the return value of the systemcall |
| |
| $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall); |
| |
| if ($returnvalue) |
| { |
| $installer::logger::Lang->printf("ERROR: Could not execute \"%s\"!\n", $systemcall); |
| } |
| else |
| { |
| $installer::logger::Lang->print("Success: Executed \"%s\" successfully!\n", $systemcall); |
| } |
| |
| return $md5sumoutput; |
| } |
| |
| ######################################################### |
| # Calling md5sum |
| ######################################################### |
| |
| sub get_md5sum |
| { |
| my ($md5sumoutput) = @_; |
| |
| my $md5sum; |
| |
| if ( $md5sumoutput =~ /^\s*(\w+?)\s+/ ) |
| { |
| $md5sum = $1; |
| } |
| else |
| { |
| installer::exiter::exit_program("ERROR: Incorrect return value from /usr/bin/md5sum: $md5sumoutput", "get_md5sum"); |
| } |
| |
| $installer::logger::Lang->printf("Setting md5sum: %s\n", $md5sum); |
| |
| return $md5sum; |
| } |
| |
| ######################################################### |
| # Determining checksum and size of tar file |
| ######################################################### |
| |
| sub call_sum |
| { |
| my ($filename, $getuidlibrary) = @_; |
| |
| my $systemcall = "/usr/bin/sum $filename |"; |
| |
| my $sumoutput = ""; |
| |
| open (SUM, "$systemcall"); |
| $sumoutput = <SUM>; |
| close (SUM); |
| |
| my $returnvalue = $?; # $? contains the return value of the systemcall |
| |
| $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall); |
| |
| if ($returnvalue) |
| { |
| $installer::logger::Lang->printf("ERROR: Could not execute \"%s\"!\n", $systemcall); |
| } |
| else |
| { |
| $installer::logger::Lang->printf("Success: Executed \"%s\" successfully!\n", $systemcall); |
| } |
| |
| $sumoutput =~ s/\s+$filename\s$//; |
| return $sumoutput; |
| } |
| |
| ######################################################### |
| # Searching for the getuid.so in the solver |
| ######################################################### |
| |
| sub get_path_for_library |
| { |
| my ($includepatharrayref) = @_; |
| |
| my $getuidlibraryname = "getuid.so"; |
| |
| my $getuidlibraryref = ""; |
| |
| if ( $installer::globals::include_pathes_read ) |
| { |
| $getuidlibraryref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$getuidlibraryname, $includepatharrayref, 0); |
| } |
| else |
| { |
| $getuidlibraryref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$getuidlibraryname, $includepatharrayref, 0); |
| } |
| |
| if ($$getuidlibraryref eq "") { installer::exiter::exit_program("ERROR: Could not find $getuidlibraryname!", "get_path_for_library"); } |
| |
| return $$getuidlibraryref; |
| } |
| |
| ######################################################### |
| # Include the tar file into the script |
| ######################################################### |
| |
| sub include_tar_into_script |
| { |
| my ($scriptfile, $temporary_tarfile) = @_; |
| |
| my $systemcall = "cat $temporary_tarfile >> $scriptfile && rm $temporary_tarfile"; |
| my $returnvalue = system($systemcall); |
| |
| $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall); |
| |
| if ($returnvalue) |
| { |
| $installer::logger::Lang->printf("ERROR: Could not execute \"%s\"!\n", $systemcall); |
| } |
| else |
| { |
| $installer::logger::Lang->printf("Success: Executed \"%s\" successfully!\n", $systemcall); |
| } |
| return $returnvalue; |
| } |
| |
| ######################################################### |
| # Create a tar file from the binary package |
| ######################################################### |
| |
| sub tar_package |
| { |
| my ( $installdir, $tarfilename, $getuidlibrary) = @_; |
| |
| my $ldpreloadstring = $ENV{'FAKEROOT'}; |
| |
| my $systemcall = "cd $installdir; $ldpreloadstring tar -cf - * > $tarfilename"; |
| |
| my $returnvalue = system($systemcall); |
| |
| $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall); |
| |
| if ($returnvalue) |
| { |
| $installer::logger::Lang->printf("ERROR: Could not execute \"%s\"!\n", $systemcall); |
| } |
| else |
| { |
| $installer::logger::Lang->printf("Success: Executed \"\" successfully!\n", $systemcall); |
| } |
| |
| my $localcall = "chmod 775 $tarfilename \>\/dev\/null 2\>\&1"; |
| $returnvalue = system($localcall); |
| |
| return ( -s $tarfilename ); |
| } |
| |
| ######################################################### |
| # Creating a tar.gz file |
| ######################################################### |
| |
| sub create_tar_gz_file_from_package |
| { |
| my ($installdir, $getuidlibrary) = @_; |
| |
| my $alldirs = installer::systemactions::get_all_directories($installdir); |
| my $onedir = ${$alldirs}[0]; |
| $installdir = $onedir; |
| |
| my $allfiles = installer::systemactions::get_all_files_from_one_directory($installdir); |
| |
| for ( my $i = 0; $i <= $#{$allfiles}; $i++ ) |
| { |
| my $onefile = ${$allfiles}[$i]; |
| my $systemcall = "cd $installdir; rm $onefile"; |
| my $returnvalue = system($systemcall); |
| |
| $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall); |
| |
| if ($returnvalue) |
| { |
| $installer::logger::Lang->printf("ERROR: Could not execute \"%s\"!\n", $systemcall); |
| } |
| else |
| { |
| $installer::logger::Lang->printf("Success: Executed \"%s\" successfully!\n", $systemcall); |
| } |
| } |
| |
| $alldirs = installer::systemactions::get_all_directories($installdir); |
| my $packagename = ${$alldirs}[0]; # only taking the first Solaris package |
| if ( $packagename eq "" ) { installer::exiter::exit_program("ERROR: Could not find package in directory $installdir!", "determine_packagename"); } |
| |
| installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$packagename); |
| |
| $installer::globals::downloadfileextension = ".tar.gz"; |
| my $targzname = $packagename . $installer::globals::downloadfileextension; |
| $installer::globals::downloadfilename = $targzname; |
| |
| my $ldpreloadstring = $ENV{'FAKEROOT'}; |
| |
| my $systemcall = "cd $installdir; $ldpreloadstring tar -cf - $packagename | gzip > $targzname"; |
| $installer::logger::Info->printf("... %s ...\n", $systemcall); |
| |
| my $returnvalue = system($systemcall); |
| |
| $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall); |
| |
| if ($returnvalue) |
| { |
| $installer::logger::Lang->printf("ERROR: Could not execute \"%s\"!\n", $systemcall); |
| } |
| else |
| { |
| $installer::logger::Lang->printf("Success: Executed \"%s\" successfully!\n", $systemcall); |
| } |
| } |
| |
| ######################################################### |
| # Setting type of installation |
| ######################################################### |
| |
| sub get_installation_type |
| { |
| my $type = ""; |
| |
| if ( $installer::globals::languagepack ) { $type = "langpack"; } |
| else { $type = "install"; } |
| |
| return $type; |
| } |
| |
| ######################################################### |
| # Setting installation languages |
| ######################################################### |
| |
| sub get_downloadname_language |
| { |
| my ($languagestringref) = @_; |
| |
| my $languages = $$languagestringref; |
| |
| if ( $installer::globals::added_english ) |
| { |
| $languages =~ s/en-US_//; |
| $languages =~ s/_en-US//; |
| } |
| |
| # en-US is default language and can be removed therefore |
| # for one-language installation sets |
| |
| # if ( $languages =~ /^\s*en-US\s*$/ ) |
| # { |
| # $languages = ""; |
| # } |
| |
| if ( length ($languages) > $installer::globals::max_lang_length ) |
| { |
| $languages = 'multi'; |
| } |
| |
| return $languages; |
| } |
| |
| ######################################################### |
| # Setting download name |
| ######################################################### |
| |
| sub get_downloadname_productname |
| { |
| my ($allvariables) = @_; |
| |
| my $start; |
| |
| if ( $allvariables->{'AOODOWNLOADNAMEPREFIX'} ) |
| { |
| $start = $allvariables->{'AOODOWNLOADNAMEPREFIX'}; |
| } |
| else |
| { |
| $start = "Apache_OpenOffice"; |
| if ( $allvariables->{'PRODUCTNAME'} eq "OpenOffice" ) |
| { |
| if ( $allvariables->{'POSTVERSIONEXTENSION'} eq "SDK" ) |
| { |
| $start .= "-SDK"; |
| } |
| } |
| |
| if ( $allvariables->{'PRODUCTNAME'} eq "OpenOffice Developer Build" ) |
| { |
| if ( $allvariables->{'POSTVERSIONEXTENSION'} eq "SDK" ) |
| { |
| $start .= "_Dev-SDK"; |
| } |
| else |
| { |
| $start .= "_Dev"; |
| } |
| } |
| |
| if ( $allvariables->{'PRODUCTNAME'} eq "URE" ) |
| { |
| $start .= "-URE"; |
| } |
| } |
| |
| return $start; |
| } |
| |
| ######################################################### |
| # Setting download version |
| ######################################################### |
| |
| sub get_download_version |
| { |
| my ($allvariables) = @_; |
| |
| my $version = ""; |
| |
| my $devproduct = 0; |
| if (( $allvariables->{'DEVELOPMENTPRODUCT'} ) && ( $allvariables->{'DEVELOPMENTPRODUCT'} == 1 )) { $devproduct = 1; } |
| |
| my $cwsproduct = 0; |
| # the environment variable CWS_WORK_STAMP is set only in CWS |
| if ( $ENV{'CWS_WORK_STAMP'} ) { $cwsproduct = 1; } |
| |
| if (( $cwsproduct ) || ( $devproduct )) # use "DEV300m75" |
| { |
| my $source = uc($installer::globals::build); # DEV300 |
| my $localminor = ""; |
| if ( $installer::globals::minor ne "" ) { $localminor = $installer::globals::minor; } |
| else { $localminor = $installer::globals::lastminor; } |
| $version = $source . $localminor; |
| } |
| else # use 3.2.0rc1 |
| { |
| $version = $allvariables->{'PRODUCTVERSION'}; |
| if (( $allvariables->{'ABOUTBOXPRODUCTVERSION'} ) && ( $allvariables->{'ABOUTBOXPRODUCTVERSION'} ne "" )) { $version = $allvariables->{'ABOUTBOXPRODUCTVERSION'}; } |
| if (( $allvariables->{'SHORT_PRODUCTEXTENSION'} ) && ( $allvariables->{'SHORT_PRODUCTEXTENSION'} ne "" )) { $version = $version . $allvariables->{'SHORT_PRODUCTEXTENSION'}; } |
| } |
| |
| return $version; |
| } |
| |
| ############################################################### |
| # Set date string, format: yymmdd |
| ############################################################### |
| |
| sub set_date_string |
| { |
| my ($allvariables) = @_; |
| |
| my $datestring = ""; |
| |
| my $devproduct = 0; |
| if (( $allvariables->{'DEVELOPMENTPRODUCT'} ) && ( $allvariables->{'DEVELOPMENTPRODUCT'} == 1 )) { $devproduct = 1; } |
| |
| my $cwsproduct = 0; |
| # the environment variable CWS_WORK_STAMP is set only in CWS |
| if ( $ENV{'CWS_WORK_STAMP'} ) { $cwsproduct = 1; } |
| |
| my $releasebuild = 1; |
| if (( $allvariables->{'SHORT_PRODUCTEXTENSION'} ) && ( $allvariables->{'SHORT_PRODUCTEXTENSION'} ne "" )) { $releasebuild = 0; } |
| |
| if (( ! $devproduct ) && ( ! $cwsproduct ) && ( ! $releasebuild )) |
| { |
| my @timearray = localtime(time); |
| |
| my $day = $timearray[3]; |
| my $month = $timearray[4] + 1; |
| my $year = $timearray[5] + 1900; |
| |
| if ( $month < 10 ) { $month = "0" . $month; } |
| if ( $day < 10 ) { $day = "0" . $day; } |
| |
| $datestring = $year . $month . $day; |
| } |
| |
| return $datestring; |
| } |
| |
| ################################################################# |
| # Setting the platform name for download |
| ################################################################# |
| |
| sub get_download_platformname |
| { |
| my $platformname = ""; |
| |
| if ( $installer::globals::islinuxbuild ) |
| { |
| $platformname = "Linux"; |
| } |
| elsif ( $installer::globals::issolarisbuild ) |
| { |
| $platformname = "Solaris"; |
| } |
| elsif ( $installer::globals::iswindowsbuild ) |
| { |
| $platformname = "Win"; |
| } |
| elsif ( $installer::globals::isfreebsdbuild ) |
| { |
| $platformname = "FreeBSD"; |
| } |
| elsif ( $installer::globals::ismacbuild ) |
| { |
| $platformname = "MacOS"; |
| } |
| else |
| { |
| # $platformname = $installer::globals::packageformat; |
| $platformname = $installer::globals::compiler; |
| } |
| |
| return $platformname; |
| } |
| |
| ######################################################### |
| # Setting the architecture for the download name |
| ######################################################### |
| |
| sub get_download_architecture |
| { |
| my $arch = ""; |
| |
| if(( $installer::globals::compiler =~ /^unxlngi/ ) |
| || ( $installer::globals::compiler =~ /^unxmac.i/ ) |
| || ( $installer::globals::issolarisx86build ) |
| || ( $installer::globals::iswindowsbuild )) |
| { |
| $arch = "x86"; |
| } |
| elsif(( $installer::globals::compiler =~ /^unxlngx/ ) |
| || ( $installer::globals::compiler =~ /^unxmaccx/ )) |
| { |
| $arch = "x86-64"; |
| } |
| elsif ( $installer::globals::issolarissparcbuild ) |
| { |
| $arch = "Sparc"; |
| } |
| elsif(( $installer::globals::compiler =~ /^unxmacxp/ ) |
| || ( $installer::globals::compiler =~ /^unxlngppc/ )) |
| { |
| $arch = "PPC"; |
| } |
| |
| return $arch; |
| } |
| |
| ######################################################### |
| # Setting the installation type for the download name |
| ######################################################### |
| |
| sub get_install_type |
| { |
| my ($allvariables) = @_; |
| |
| my $type = ""; |
| |
| if ( $installer::globals::languagepack ) |
| { |
| $type = "langpack"; |
| |
| if ( $installer::globals::islinuxrpmbuild ) |
| { |
| $type = $type . "-rpm"; |
| } |
| |
| if ( $installer::globals::islinuxdebbuild ) |
| { |
| $type = $type . "-deb"; |
| } |
| |
| if ( $installer::globals::packageformat eq "archive" ) |
| { |
| $type = $type . "-arc"; |
| } |
| } |
| else |
| { |
| $type = "install"; |
| |
| if ( $installer::globals::islinuxrpmbuild ) |
| { |
| $type = $type . "-rpm"; |
| } |
| |
| if ( $installer::globals::islinuxdebbuild ) |
| { |
| $type = $type . "-deb"; |
| } |
| |
| if ( $installer::globals::packageformat eq "archive" ) |
| { |
| $type = $type . "-arc"; |
| } |
| |
| } |
| |
| return $type; |
| } |
| |
| ######################################################### |
| # Setting installation addons |
| ######################################################### |
| |
| sub get_downloadname_addon |
| { |
| my $addon = ""; |
| |
| if ( $installer::globals::islinuxdebbuild ) { $addon = $addon . "_deb"; } |
| |
| return $addon; |
| } |
| |
| ######################################################### |
| # Looking for versionstring in version.info |
| # This has to be the only content of this file. |
| ######################################################### |
| |
| sub get_versionstring |
| { |
| my ( $versionfile ) = @_; |
| |
| my $versionstring = ""; |
| |
| for ( my $i = 0; $i <= $#{$versionfile}; $i++ ) |
| { |
| my $oneline = ${$versionfile}[$i]; |
| |
| if ( $oneline =~ /^\s*\#/ ) { next; } # comment line |
| if ( $oneline =~ /^\s*\"\s*(.*?)\s*\"\s*$/ ) |
| { |
| $versionstring = $1; |
| last; |
| } |
| } |
| |
| return $versionstring; |
| } |
| |
| ######################################################### |
| # Returning the current product version |
| # This has to be defined in file "version.info" |
| # in directory $installer::globals::ooouploaddir |
| ######################################################### |
| |
| sub get_current_version |
| { |
| my $versionstring = ""; |
| my $filename = "version.info"; |
| # $filename = $installer::globals::ooouploaddir . $installer::globals::separator . $filename; |
| |
| if ( -f $filename ) |
| { |
| $installer::logger::Lang->printf("File %s exists. Trying to find current version.\n", $filename); |
| my $versionfile = installer::files::read_file($filename); |
| $versionstring = get_versionstring($versionfile); |
| $installer::logger::Lang->printf("Setting version string: %s\n", $versionstring); |
| } |
| else |
| { |
| $installer::logger::Lang->printf("File %s does not exist. No version setting in download file name.\n", $filename); |
| } |
| |
| $installer::globals::oooversionstring = $versionstring; |
| |
| return $versionstring; |
| } |
| |
| ############################################################################################### |
| # Setting the download file name |
| # Syntax: |
| # (PRODUCTNAME)_(VERSION)_(TIMESTAMP)_(OS)_(ARCH)_(INSTALLTYPE)_(LANGUAGE).(FILEEXTENSION) |
| # Rules: |
| # Timestamp only for Beta and Release Candidate |
| ############################################################################################### |
| |
| sub set_download_filename |
| { |
| my ($languagestringref, $allvariables) = @_; |
| |
| my $start = get_downloadname_productname($allvariables); |
| my $versionstring = get_download_version($allvariables); |
| my $date = set_date_string($allvariables); |
| my $platform = get_download_platformname(); |
| my $architecture = get_download_architecture(); |
| my $type = get_install_type($allvariables); |
| my $language = get_downloadname_language($languagestringref); |
| |
| # Setting the extension happens automatically |
| |
| my $filename = $start . "_" . $versionstring . "_" . $date . "_" . $platform . "_" . $architecture . "_" . $type . "_" . $language; |
| |
| $filename =~ s/\_\_/\_/g; # necessary, if $versionstring or $platform or $language are empty |
| $filename =~ s/\_\s*$//; # necessary, if $language and $addon are empty |
| |
| $installer::globals::ooodownloadfilename = $filename; |
| |
| return $filename; |
| } |
| |
| ######################################################### |
| # Creating a tar.gz file |
| ######################################################### |
| |
| sub create_tar_gz_file_from_directory |
| { |
| my ($installdir, $getuidlibrary, $downloaddir, $downloadfilename) = @_; |
| |
| my $packdir = $installdir; |
| installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$packdir); |
| my $changedir = $installdir; |
| installer::pathanalyzer::get_path_from_fullqualifiedname(\$changedir); |
| |
| my $ldpreloadstring = $ENV{'FAKEROOT'}; |
| |
| $installer::globals::downloadfileextension = ".tar.gz"; |
| $installer::globals::downloadfilename = $downloadfilename . $installer::globals::downloadfileextension; |
| my $targzname = $downloaddir . $installer::globals::separator . $installer::globals::downloadfilename; |
| |
| my $systemcall = "cd $changedir; $ldpreloadstring tar -cf - $packdir | gzip > $targzname"; |
| |
| my $returnvalue = system($systemcall); |
| |
| $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall); |
| |
| if ($returnvalue) |
| { |
| $installer::logger::Lang->printf("ERROR: Could not execute \"%s\"!\n", $systemcall); |
| } |
| else |
| { |
| $installer::logger::Lang->printf("Success: Executed \"%s\" successfully!\n", $systemcall); |
| } |
| |
| return $targzname; |
| } |
| |
| ######################################################### |
| # Setting the variables in the download name |
| ######################################################### |
| |
| sub resolve_variables_in_downloadname |
| { |
| my ($allvariables, $downloadname, $languagestringref) = @_; |
| |
| # Typical name: soa-{productversion}-{extension}-bin-{os}-{languages} |
| |
| my $productversion = $allvariables->{'PRODUCTVERSION'}; |
| $productversion = "" unless defined $productversion; |
| $downloadname =~ s/\{productversion\}/$productversion/; |
| |
| my $packageversion = $allvariables->{'PACKAGEVERSION'}; |
| $packageversion = "" unless defined $packageversion; |
| $downloadname =~ s/\{packageversion\}/$packageversion/; |
| |
| my $extension = $allvariables->{'SHORT_PRODUCTEXTENSION'}; |
| $extension = "" unless defined $extension; |
| $extension = lc($extension); |
| $downloadname =~ s/\{extension\}/$extension/; |
| |
| my $os = ""; |
| if ( $installer::globals::iswindowsbuild ) { $os = "windows"; } |
| elsif ( $installer::globals::issolarissparcbuild ) { $os = "solsparc"; } |
| elsif ( $installer::globals::issolarisx86build ) { $os = "solia"; } |
| elsif ( $installer::globals::islinuxbuild ) { $os = "linux"; } |
| elsif ( $installer::globals::compiler =~ /unxmac.i/ ) { $os = "macosi"; } |
| elsif ( $installer::globals::compiler =~ /unxmac.x/ ) { $os = "macosx"; } |
| elsif ( $installer::globals::compiler =~ /unxmacxp/ ) { $os = "macosp"; } |
| else { $os = ""; } |
| $downloadname =~ s/\{os\}/$os/; |
| |
| my $languages = $$languagestringref; |
| $downloadname =~ s/\{languages\}/$languages/; |
| |
| $downloadname =~ s/\-\-\-/\-/g; |
| $downloadname =~ s/\-\-/\-/g; |
| $downloadname =~ s/\-\s*$//; |
| |
| return $downloadname; |
| } |
| |
| ################################################################## |
| # Windows: Replacing one placeholder with the specified value |
| ################################################################## |
| |
| sub replace_one_variable |
| { |
| my ($templatefile, $placeholder, $value) = @_; |
| |
| $installer::logger::Lang->printf("Replacing %s by %s in nsi file\n", $placeholder, $value); |
| |
| for ( my $i = 0; $i <= $#{$templatefile}; $i++ ) |
| { |
| ${$templatefile}[$i] =~ s/$placeholder/$value/g; |
| } |
| |
| } |
| |
| ######################################################################################## |
| # Converting a string to a unicode string |
| ######################################################################################## |
| |
| sub convert_to_unicode |
| { |
| my ($string) = @_; |
| |
| my $unicodestring = ""; |
| |
| my $stringlength = length($string); |
| |
| for ( my $i = 0; $i < $stringlength; $i++ ) |
| { |
| $unicodestring = $unicodestring . substr($string, $i, 1); |
| $unicodestring = $unicodestring . chr(0); |
| } |
| |
| return $unicodestring; |
| } |
| |
| ################################################################## |
| # Windows: Including the product name into nsi template |
| ################################################################## |
| |
| sub put_windows_productname_into_template |
| { |
| my ($templatefile, $variableshashref) = @_; |
| |
| my $productname = $variableshashref->{'PRODUCTNAME'}; |
| $productname =~ s/\.//g; # OpenOffice.org -> OpenOfficeorg |
| |
| replace_one_variable($templatefile, "PRODUCTNAMEPLACEHOLDER", $productname); |
| } |
| |
| ################################################################## |
| # Windows: Including the path to the banner.bmp into nsi template |
| ################################################################## |
| |
| sub put_banner_bmp_into_template |
| { |
| my ($templatefile, $includepatharrayref, $allvariables) = @_; |
| |
| # my $filename = "downloadbanner.bmp"; |
| if ( ! $allvariables->{'DOWNLOADBANNER'} ) { installer::exiter::exit_program("ERROR: DOWNLOADBANNER not defined in product definition!", "put_banner_bmp_into_template"); } |
| my $filename = $allvariables->{'DOWNLOADBANNER'}; |
| |
| my $completefilenameref = ""; |
| |
| if ( $installer::globals::include_pathes_read ) |
| { |
| $completefilenameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$filename, $includepatharrayref, 0); |
| } |
| else |
| { |
| $completefilenameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$filename, $includepatharrayref, 0); |
| } |
| |
| if ($$completefilenameref eq "") { installer::exiter::exit_program("ERROR: Could not find download file $filename!", "put_banner_bmp_into_template"); } |
| |
| if ( $^O =~ /cygwin/i ) { $$completefilenameref =~ s/\//\\/g; } |
| |
| replace_one_variable($templatefile, "BANNERBMPPLACEHOLDER", $$completefilenameref); |
| } |
| |
| ################################################################## |
| # Windows: Including the path to the welcome.bmp into nsi template |
| ################################################################## |
| |
| sub put_welcome_bmp_into_template |
| { |
| my ($templatefile, $includepatharrayref, $allvariables) = @_; |
| |
| # my $filename = "downloadbitmap.bmp"; |
| if ( ! $allvariables->{'DOWNLOADBITMAP'} ) { installer::exiter::exit_program("ERROR: DOWNLOADBITMAP not defined in product definition!", "put_welcome_bmp_into_template"); } |
| my $filename = $allvariables->{'DOWNLOADBITMAP'}; |
| |
| my $completefilenameref = ""; |
| |
| if ( $installer::globals::include_pathes_read ) |
| { |
| $completefilenameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$filename, $includepatharrayref, 0); |
| } |
| else |
| { |
| $completefilenameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$filename, $includepatharrayref, 0); |
| } |
| |
| if ($$completefilenameref eq "") { installer::exiter::exit_program("ERROR: Could not find download file $filename!", "put_welcome_bmp_into_template"); } |
| |
| if ( $^O =~ /cygwin/i ) { $$completefilenameref =~ s/\//\\/g; } |
| |
| replace_one_variable($templatefile, "WELCOMEBMPPLACEHOLDER", $$completefilenameref); |
| } |
| |
| ################################################################## |
| # Windows: Including the path to the setup.ico into nsi template |
| ################################################################## |
| |
| sub put_setup_ico_into_template |
| { |
| my ($templatefile, $includepatharrayref, $allvariables) = @_; |
| |
| # my $filename = "downloadsetup.ico"; |
| if ( ! $allvariables->{'DOWNLOADSETUPICO'} ) { installer::exiter::exit_program("ERROR: DOWNLOADSETUPICO not defined in product definition!", "put_setup_ico_into_template"); } |
| my $filename = $allvariables->{'DOWNLOADSETUPICO'}; |
| |
| my $completefilenameref = ""; |
| |
| if ( $installer::globals::include_pathes_read ) |
| { |
| $completefilenameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$filename, $includepatharrayref, 0); |
| } |
| else |
| { |
| $completefilenameref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$filename, $includepatharrayref, 0); |
| } |
| |
| if ($$completefilenameref eq "") { installer::exiter::exit_program("ERROR: Could not find download file $filename!", "put_setup_ico_into_template"); } |
| |
| if ( $^O =~ /cygwin/i ) { $$completefilenameref =~ s/\//\\/g; } |
| |
| replace_one_variable($templatefile, "SETUPICOPLACEHOLDER", $$completefilenameref); |
| } |
| |
| ################################################################## |
| # Windows: Including the publisher into nsi template |
| ################################################################## |
| |
| sub put_publisher_into_template ($$) |
| { |
| my ($templatefile, $variables) = @_; |
| |
| my $publisher = $variables->{'OOOVENDOR'}; |
| $publisher = "" unless defined $publisher; |
| |
| replace_one_variable($templatefile, "PUBLISHERPLACEHOLDER", $publisher); |
| } |
| |
| ################################################################## |
| # Windows: Including the web site into nsi template |
| ################################################################## |
| |
| sub put_website_into_template ($$) |
| { |
| my ($templatefile, $variables) = @_; |
| |
| my $website = $variables->{'STARTCENTER_INFO_URL'}; |
| $website = "" unless defined $website; |
| |
| replace_one_variable($templatefile, "WEBSITEPLACEHOLDER", $website); |
| } |
| |
| ################################################################## |
| # Windows: Including the Java file name into nsi template |
| ################################################################## |
| |
| sub put_javafilename_into_template |
| { |
| my ($templatefile, $variableshashref) = @_; |
| |
| my $javaversion = ""; |
| |
| if ( $variableshashref->{'WINDOWSJAVAFILENAME'} ) { $javaversion = $variableshashref->{'WINDOWSJAVAFILENAME'}; } |
| |
| replace_one_variable($templatefile, "WINDOWSJAVAFILENAMEPLACEHOLDER", $javaversion); |
| } |
| |
| ################################################################## |
| # Windows: Including the product version into nsi template |
| ################################################################## |
| |
| sub put_windows_productversion_into_template |
| { |
| my ($templatefile, $variableshashref) = @_; |
| |
| my $productversion = $variableshashref->{'PRODUCTVERSION'}; |
| |
| replace_one_variable($templatefile, "PRODUCTVERSIONPLACEHOLDER", $productversion); |
| } |
| |
| ################################################################## |
| # Windows: Including the product version into nsi template |
| ################################################################## |
| |
| sub put_windows_productpath_into_template |
| { |
| my ($templatefile, $variableshashref, $languagestringref, $localnsisdir) = @_; |
| |
| my $productpath = $variableshashref->{'PROPERTYTABLEPRODUCTNAME'}; |
| |
| my $locallangs = $$languagestringref; |
| $locallangs =~ s/_/ /g; |
| if (length($locallangs) > $installer::globals::max_lang_length) { $locallangs = "multi lingual"; } |
| |
| if ( ! $installer::globals::languagepack ) { $productpath = $productpath . " (" . $locallangs . ")"; } |
| |
| replace_one_variable($templatefile, "PRODUCTPATHPLACEHOLDER", $productpath); |
| } |
| |
| ################################################################## |
| # Windows: Including download file name into nsi template |
| ################################################################## |
| |
| sub put_outputfilename_into_template |
| { |
| my ($templatefile, $downloadname) = @_; |
| |
| $installer::globals::downloadfileextension = ".exe"; |
| $downloadname = $downloadname . $installer::globals::downloadfileextension; |
| $installer::globals::downloadfilename = $downloadname; |
| |
| replace_one_variable($templatefile, "DOWNLOADNAMEPLACEHOLDER", $downloadname); |
| } |
| |
| ################################################################## |
| # Windows: Generating the file list in nsi file format |
| ################################################################## |
| |
| sub get_file_list |
| { |
| my ( $basedir ) = @_; |
| |
| my @filelist = (); |
| |
| my $alldirs = installer::systemactions::get_all_directories($basedir); |
| unshift(@{$alldirs}, $basedir); # $basedir is the first directory in $alldirs |
| |
| for ( my $i = 0; $i <= $#{$alldirs}; $i++ ) |
| { |
| my $onedir = ${$alldirs}[$i]; |
| |
| # Syntax: |
| # SetOutPath "$INSTDIR" |
| |
| my $relativedir = $onedir; |
| $relativedir =~ s/\Q$basedir\E//; |
| |
| my $oneline = " " . "SetOutPath" . " " . "\"\$INSTDIR" . $relativedir . "\"" . "\n"; |
| |
| if ( $^O =~ /cygwin/i ) { |
| $oneline =~ s/\//\\/g; |
| } |
| push(@filelist, $oneline); |
| |
| # Collecting all files in the specific directory |
| |
| my $files = installer::systemactions::get_all_files_from_one_directory($onedir); |
| |
| for ( my $j = 0; $j <= $#{$files}; $j++ ) |
| { |
| my $onefile = ${$files}[$j]; |
| |
| my $fileline = " " . "File" . " " . "\"" . $onefile . "\"" . "\n"; |
| |
| if ( $^O =~ /cygwin/i ) { |
| $fileline =~ s/\//\\/g; |
| } |
| push(@filelist, $fileline); |
| } |
| } |
| |
| return \@filelist; |
| } |
| |
| ################################################################## |
| # Windows: Including list of all files into nsi template |
| ################################################################## |
| |
| sub put_filelist_into_template |
| { |
| my ($templatefile, $installationdir) = @_; |
| |
| my $filelist = get_file_list($installationdir); |
| |
| my $filestring = ""; |
| |
| for ( my $i = 0; $i <= $#{$filelist}; $i++ ) |
| { |
| $filestring = $filestring . ${$filelist}[$i]; |
| } |
| |
| $filestring =~ s/\s*$//; |
| |
| replace_one_variable($templatefile, "ALLFILESPLACEHOLDER", $filestring); |
| } |
| |
| ################################################################## |
| # Windows: NSIS uses specific language names |
| ################################################################## |
| |
| sub nsis_language_converter |
| { |
| my ($language) = @_; |
| |
| my $nsislanguage = ""; |
| |
| # Assign language used by NSIS. |
| # The files "$nsislanguage.nsh" and "$nsislanguage.nlf" |
| # are needed in the NSIS environment. |
| # Directory: <NSIS-Dir>/Contrib/Language files |
| if ( $language eq "en-US" ) { $nsislanguage = "English"; } |
| elsif ( $language eq "af" ) { $nsislanguage = "Afrikaans"; } |
| elsif ( $language eq "sq" ) { $nsislanguage = "Albanian"; } |
| elsif ( $language eq "ar" ) { $nsislanguage = "Arabic"; } |
| elsif ( $language eq "hy" ) { $nsislanguage = "Armenian"; } |
| elsif ( $language eq "ast" ) { $nsislanguage = "Asturian"; } |
| elsif ( $language eq "eu" ) { $nsislanguage = "Basque"; } |
| elsif ( $language eq "bg" ) { $nsislanguage = "Bulgarian"; } |
| elsif ( $language eq "ca" ) { $nsislanguage = "Catalan"; } |
| elsif ( $language eq "hr" ) { $nsislanguage = "Croatian"; } |
| elsif ( $language eq "cs" ) { $nsislanguage = "Czech"; } |
| elsif ( $language eq "da" ) { $nsislanguage = "Danish"; } |
| elsif ( $language eq "nl" ) { $nsislanguage = "Dutch"; } |
| elsif ( $language eq "en-GB" ) { $nsislanguage = "English"; } |
| elsif ( $language eq "et" ) { $nsislanguage = "Estonian"; } |
| elsif ( $language eq "fa" ) { $nsislanguage = "Farsi"; } |
| elsif ( $language eq "fi" ) { $nsislanguage = "Finnish"; } |
| elsif ( $language eq "fr" ) { $nsislanguage = "French"; } |
| elsif ( $language eq "gl" ) { $nsislanguage = "Galician"; } |
| elsif ( $language eq "de" ) { $nsislanguage = "German"; } |
| elsif ( $language eq "el" ) { $nsislanguage = "Greek"; } |
| elsif ( $language eq "he" ) { $nsislanguage = "Hebrew"; } |
| elsif ( $language eq "hi" ) { $nsislanguage = "Hindi"; } |
| elsif ( $language eq "hu" ) { $nsislanguage = "Hungarian"; } |
| elsif ( $language eq "is" ) { $nsislanguage = "Icelandic"; } |
| elsif ( $language eq "id" ) { $nsislanguage = "Indonesian"; } |
| elsif ( $language eq "it" ) { $nsislanguage = "Italian"; } |
| elsif ( $language eq "ja" ) { $nsislanguage = "Japanese"; } |
| elsif ( $language eq "ko" ) { $nsislanguage = "Korean"; } |
| elsif ( $language eq "lv" ) { $nsislanguage = "Latvian"; } |
| elsif ( $language eq "lt" ) { $nsislanguage = "Lithuanian"; } |
| elsif ( $language eq "de-LU" ) { $nsislanguage = "Luxembourgish"; } |
| elsif ( $language eq "mk" ) { $nsislanguage = "Macedonian"; } |
| elsif ( $language eq "mn" ) { $nsislanguage = "Mongolian"; } |
| elsif ( $language eq "nb" ) { $nsislanguage = "Norwegian"; } |
| elsif ( $language eq "no" ) { $nsislanguage = "Norwegian"; } |
| elsif ( $language eq "no-NO" ) { $nsislanguage = "Norwegian"; } |
| elsif ( $language eq "nn" ) { $nsislanguage = "NorwegianNynorsk"; } |
| elsif ( $language eq "pl" ) { $nsislanguage = "Polish"; } |
| elsif ( $language eq "pt" ) { $nsislanguage = "Portuguese"; } |
| elsif ( $language eq "pt-BR" ) { $nsislanguage = "PortugueseBR"; } |
| elsif ( $language eq "ro" ) { $nsislanguage = "Romanian"; } |
| elsif ( $language eq "ru" ) { $nsislanguage = "Russian"; } |
| elsif ( $language eq "gd" ) { $nsislanguage = "ScotsGaelic"; } |
| elsif ( $language eq "sr" ) { $nsislanguage = "Serbian"; } |
| elsif ( $language eq "sr-SP" ) { $nsislanguage = "Serbian"; } |
| elsif ( $language eq "sh" ) { $nsislanguage = "SerbianLatin"; } |
| elsif ( $language eq "zh-CN" ) { $nsislanguage = "SimpChinese"; } |
| elsif ( $language eq "sl" ) { $nsislanguage = "Slovenian"; } |
| elsif ( $language eq "sk" ) { $nsislanguage = "Slovak"; } |
| elsif ( $language eq "es" ) { $nsislanguage = "Spanish"; } |
| elsif ( $language eq "sv" ) { $nsislanguage = "Swedish"; } |
| elsif ( $language eq "th" ) { $nsislanguage = "Thai"; } |
| elsif ( $language eq "zh-TW" ) { $nsislanguage = "TradChinese"; } |
| elsif ( $language eq "tr" ) { $nsislanguage = "Turkish"; } |
| elsif ( $language eq "uk" ) { $nsislanguage = "Ukrainian"; } |
| elsif ( $language eq "vi" ) { $nsislanguage = "Vietnamese"; } |
| elsif ( $language eq "cy" ) { $nsislanguage = "Welsh"; } |
| else |
| { |
| $installer::logger::Lang->printf("NSIS language_converter : Could not find nsis language for %s!\n", $language); |
| $nsislanguage = "English"; |
| } |
| |
| return $nsislanguage; |
| } |
| |
| ################################################################## |
| # Windows: Including list of all languages into nsi template |
| ################################################################## |
| |
| sub put_language_list_into_template |
| { |
| my ($templatefile, $languagesarrayref) = @_; |
| |
| my $alllangstring = ""; |
| my %nsislangs; |
| |
| for ( my $i = 0; $i <= $#{$languagesarrayref}; $i++ ) |
| { |
| my $onelanguage = ${$languagesarrayref}[$i]; |
| my $nsislanguage = nsis_language_converter($onelanguage); |
| $nsislangs{$nsislanguage}++; |
| } |
| |
| foreach my $nsislanguage ( keys(%nsislangs) ) |
| { |
| # Syntax: !insertmacro MUI_LANGUAGE "English" |
| my $langstring = "\!insertmacro MUI_LANGUAGE_PACK " . $nsislanguage . "\n"; |
| if ( $nsislanguage eq "English" ) |
| { |
| $alllangstring = $langstring . $alllangstring; |
| } |
| else |
| { |
| $alllangstring = $alllangstring . $langstring; |
| } |
| } |
| |
| $alllangstring =~ s/\s*$//; |
| |
| replace_one_variable($templatefile, "ALLLANGUAGESPLACEHOLDER", $alllangstring); |
| } |
| |
| ################################################################## |
| # Windows: Collecting all identifier from mlf file |
| ################################################################## |
| |
| sub get_identifier |
| { |
| my ( $mlffile ) = @_; |
| |
| my @identifier = (); |
| |
| for ( my $i = 0; $i <= $#{$mlffile}; $i++ ) |
| { |
| my $oneline = ${$mlffile}[$i]; |
| |
| if ( $oneline =~ /^\s*\[(.+)\]\s*$/ ) |
| { |
| my $identifier = $1; |
| push(@identifier, $identifier); |
| } |
| } |
| |
| return \@identifier; |
| } |
| |
| ############################################################## |
| # Returning the complete block in all languages |
| # for a specified string |
| ############################################################## |
| |
| sub get_language_block_from_language_file |
| { |
| my ($searchstring, $languagefile) = @_; |
| |
| my @language_block = (); |
| |
| for ( my $i = 0; $i <= $#{$languagefile}; $i++ ) |
| { |
| if ( ${$languagefile}[$i] =~ /^\s*\[\s*$searchstring\s*\]\s*$/ ) |
| { |
| my $counter = $i; |
| |
| push(@language_block, ${$languagefile}[$counter]); |
| $counter++; |
| |
| while (( $counter <= $#{$languagefile} ) && (!( ${$languagefile}[$counter] =~ /^\s*\[/ ))) |
| { |
| push(@language_block, ${$languagefile}[$counter]); |
| $counter++; |
| } |
| |
| last; |
| } |
| } |
| |
| return \@language_block; |
| } |
| |
| ############################################################## |
| # Returning a specific language string from the block |
| # of all translations |
| ############################################################## |
| |
| sub get_language_string_from_language_block |
| { |
| my ($language_block, $language) = @_; |
| |
| my $newstring = ""; |
| |
| for ( my $i = 0; $i <= $#{$language_block}; $i++ ) |
| { |
| if ( ${$language_block}[$i] =~ /^\s*$language\s*\=\s*\"(.*)\"\s*$/ ) |
| { |
| $newstring = $1; |
| last; |
| } |
| } |
| |
| if ( $newstring eq "" ) |
| { |
| $language = "en-US"; # defaulting to English |
| |
| for ( my $i = 0; $i <= $#{$language_block}; $i++ ) |
| { |
| if ( ${$language_block}[$i] =~ /^\s*$language\s*\=\s*\"(.*)\"\s*$/ ) |
| { |
| $newstring = $1; |
| last; |
| } |
| } |
| } |
| |
| return $newstring; |
| } |
| |
| ################################################################## |
| # Windows: Replacing strings in NSIS nsh file |
| # nsh file syntax: |
| # !define MUI_TEXT_DIRECTORY_TITLE "Choose Install Location" |
| ################################################################## |
| |
| sub replace_identifier_in_nshfile |
| { |
| my ( $nshfile, $identifier, $newstring, $nshfilename, $onelanguage ) = @_; |
| |
| $newstring =~ s/\\r/\$\\r/g; # \r -> $\r in modern nsis versions |
| $newstring =~ s/\\n/\$\\n/g; # \n -> $\n in modern nsis versions |
| |
| for ( my $i = 0; $i <= $#{$nshfile}; $i++ ) |
| { |
| if ( ${$nshfile}[$i] =~ /\s+\Q$identifier\E\s+\"(.+)\"\s*$/ ) |
| { |
| my $oldstring = $1; |
| ${$nshfile}[$i] =~ s/\Q$oldstring\E/$newstring/; |
| $installer::logger::Lang->printf("NSIS replacement in %s (%s): \-\> %s\n", |
| $nshfilename, |
| $onelanguage, |
| $oldstring, |
| $newstring); |
| } |
| } |
| } |
| |
| ################################################################## |
| # Windows: Replacing strings in NSIS nlf file |
| # nlf file syntax (2 lines): |
| # # ^DirSubText |
| # Destination Folder |
| ################################################################## |
| |
| sub replace_identifier_in_nlffile |
| { |
| my ( $nlffile, $identifier, $newstring, $nlffilename, $onelanguage ) = @_; |
| |
| for ( my $i = 0; $i <= $#{$nlffile}; $i++ ) |
| { |
| if ( ${$nlffile}[$i] =~ /^\s*\#\s+\^\s*\Q$identifier\E\s*$/ ) |
| { |
| my $next = $i+1; |
| my $oldstring = ${$nlffile}[$next]; |
| ${$nlffile}[$next] = $newstring . "\n"; |
| $oldstring =~ s/\s*$//; |
| $installer::logger::Lang->printf("NSIS replacement in %s (%s): %s \-\> %s\n", |
| $nlffilename, |
| $onelanguage, |
| $oldstring, |
| $newstring); |
| } |
| } |
| } |
| |
| ################################################################## |
| # Windows: Translating the NSIS nsh and nlf file |
| ################################################################## |
| |
| sub translate_nsh_nlf_file |
| { |
| my ($nshfile, $nlffile, $mlffile, $onelanguage, $nshfilename, $nlffilename, $nsislanguage) = @_; |
| |
| # Analyzing the mlf file, collecting all Identifier |
| my $allidentifier = get_identifier($mlffile); |
| |
| $onelanguage = "en-US" if ( $nsislanguage eq "English" && $onelanguage ne "en-US"); |
| for ( my $i = 0; $i <= $#{$allidentifier}; $i++ ) |
| { |
| my $identifier = ${$allidentifier}[$i]; |
| my $language_block = get_language_block_from_language_file($identifier, $mlffile); |
| my $newstring = get_language_string_from_language_block($language_block, $onelanguage); |
| |
| # removing mask |
| $newstring =~ s/\\\'/\'/g; |
| |
| replace_identifier_in_nshfile($nshfile, $identifier, $newstring, $nshfilename, $onelanguage); |
| replace_identifier_in_nlffile($nlffile, $identifier, $newstring, $nlffilename, $onelanguage); |
| } |
| } |
| |
| ################################################################## |
| # Converting utf 16 file to utf 8 |
| ################################################################## |
| |
| sub convert_utf16_to_utf8 |
| { |
| my ( $filename ) = @_; |
| |
| my @localfile = (); |
| |
| my $savfilename = $filename . "_before.utf16"; |
| installer::systemactions::copy_one_file($filename, $savfilename); |
| |
| # open( IN, "<:utf16", $filename ) || installer::exiter::exit_program("ERROR: Cannot open file $filename for reading", "convert_utf16_to_utf8"); |
| # open( IN, "<:para:crlf:uni", $filename ) || installer::exiter::exit_program("ERROR: Cannot open file $filename for reading", "convert_utf16_to_utf8"); |
| open( IN, "<:encoding(UTF16-LE)", $filename ) || installer::exiter::exit_program("ERROR: Cannot open file $filename for reading", "convert_utf16_to_utf8"); |
| while ( my $line = <IN> ) |
| { |
| push @localfile, $line; |
| } |
| close( IN ); |
| |
| if ( open( OUT, ">:utf8", $filename ) ) |
| { |
| print OUT @localfile; |
| close(OUT); |
| } |
| |
| $savfilename = $filename . "_before.utf8"; |
| installer::systemactions::copy_one_file($filename, $savfilename); |
| } |
| |
| ################################################################## |
| # Converting utf 8 file to utf 16 |
| ################################################################## |
| |
| sub convert_utf8_to_utf16 |
| { |
| my ( $filename ) = @_; |
| |
| my @localfile = (); |
| |
| my $savfilename = $filename . "_after.utf8"; |
| installer::systemactions::copy_one_file($filename, $savfilename); |
| |
| open( IN, "<:utf8", $filename ) || installer::exiter::exit_program("ERROR: Cannot open file $filename for reading", "convert_utf8_to_utf16"); |
| while (my $line = <IN>) |
| { |
| push @localfile, $line; |
| } |
| close( IN ); |
| |
| if ( open( OUT, ">:raw:encoding(UTF16-LE):crlf:utf8", $filename ) ) |
| { |
| print OUT @localfile; |
| close(OUT); |
| } |
| |
| $savfilename = $filename . "_after.utf16"; |
| installer::systemactions::copy_one_file($filename, $savfilename); |
| } |
| |
| ################################################################## |
| # Converting text string to utf 16 |
| ################################################################## |
| |
| sub convert_textstring_to_utf16 |
| { |
| my ( $textstring, $localnsisdir, $shortfilename ) = @_; |
| |
| my $filename = $localnsisdir . $installer::globals::separator . $shortfilename; |
| my @filecontent = (); |
| push(@filecontent, $textstring); |
| installer::files::save_file($filename, \@filecontent); |
| convert_utf8_to_utf16($filename); |
| my $newfile = installer::files::read_file($filename); |
| my $utf16string = ""; |
| if ( ${$newfile}[0] ne "" ) { $utf16string = ${$newfile}[0]; } |
| |
| return $utf16string; |
| } |
| |
| ################################################################## |
| # Windows: Copying NSIS language files to local nsis directory |
| ################################################################## |
| |
| sub copy_and_translate_nsis_language_files |
| { |
| my ($nsispath, $localnsisdir, $languagesarrayref, $allvariables) = @_; |
| |
| my $nlffilepath = $nsispath . $installer::globals::separator . "Contrib" . $installer::globals::separator . "Language\ files" . $installer::globals::separator; |
| my $nshfilepath = $nsispath . $installer::globals::separator . "Contrib" . $installer::globals::separator . "Modern\ UI" . $installer::globals::separator . "Language files" . $installer::globals::separator; |
| |
| for ( my $i = 0; $i <= $#{$languagesarrayref}; $i++ ) |
| { |
| my $onelanguage = ${$languagesarrayref}[$i]; |
| my $nsislanguage = nsis_language_converter($onelanguage); |
| |
| # Copying the nlf file |
| my $sourcepath = $nlffilepath . $nsislanguage . "\.nlf"; |
| if ( ! -f $sourcepath ) { installer::exiter::exit_program("ERROR: Could not find nsis file: $sourcepath!", "copy_and_translate_nsis_language_files"); } |
| my $nlffilename = $localnsisdir . $installer::globals::separator . $nsislanguage . "_pack.nlf"; |
| if ( $^O =~ /cygwin/i ) { $nlffilename =~ s/\//\\/g; } |
| installer::systemactions::copy_one_file($sourcepath, $nlffilename); |
| |
| # Copying the nsh file |
| # In newer nsis versions, the nsh file is located next to the nlf file |
| $sourcepath = $nshfilepath . $nsislanguage . "\.nsh"; |
| if ( ! -f $sourcepath ) |
| { |
| # trying to find the nsh file next to the nlf file |
| $sourcepath = $nlffilepath . $nsislanguage . "\.nsh"; |
| if ( ! -f $sourcepath ) |
| { |
| installer::exiter::exit_program("ERROR: Could not find nsis file: $sourcepath!", "copy_and_translate_nsis_language_files"); |
| } |
| } |
| my $nshfilename = $localnsisdir . $installer::globals::separator . $nsislanguage . "_pack.nsh"; |
| if ( $^O =~ /cygwin/i ) { $nshfilename =~ s/\//\\/g; } |
| installer::systemactions::copy_one_file($sourcepath, $nshfilename); |
| |
| # Changing the macro name in nsh file: MUI_LANGUAGEFILE_BEGIN -> MUI_LANGUAGEFILE_PACK_BEGIN |
| #convert_utf16_to_utf8($nshfilename); |
| #convert_utf16_to_utf8($nlffilename); |
| my $nshfile = installer::files::read_file($nshfilename); |
| replace_one_variable($nshfile, "MUI_LANGUAGEFILE_BEGIN", "MUI_LANGUAGEFILE_PACK_BEGIN"); |
| |
| # find the ulf file for translation |
| my $mlffile = get_translation_file($allvariables); |
| |
| # Translate the files |
| my $nlffile = installer::files::read_file($nlffilename); |
| translate_nsh_nlf_file($nshfile, $nlffile, $mlffile, $onelanguage, $nshfilename, $nlffilename, $nsislanguage); |
| |
| installer::files::save_file($nshfilename, $nshfile); |
| installer::files::save_file($nlffilename, $nlffile); |
| |
| #convert_utf8_to_utf16($nshfilename); |
| #convert_utf8_to_utf16($nlffilename); |
| } |
| |
| } |
| |
| ################################################################## |
| # Windows: Including the nsis path into the nsi template |
| ################################################################## |
| |
| sub put_nsis_path_into_template |
| { |
| my ($templatefile, $nsisdir) = @_; |
| |
| replace_one_variable($templatefile, "NSISPATHPLACEHOLDER", $nsisdir); |
| } |
| |
| ################################################################## |
| # Windows: Including the output path into the nsi template |
| ################################################################## |
| |
| sub put_output_path_into_template |
| { |
| my ($templatefile, $downloaddir) = @_; |
| |
| if ( $^O =~ /cygwin/i ) { $downloaddir =~ s/\//\\/g; } |
| |
| replace_one_variable($templatefile, "OUTPUTDIRPLACEHOLDER", $downloaddir); |
| } |
| |
| ################################################################## |
| # Windows: Finding the path to the nsis SDK |
| ################################################################## |
| |
| sub get_path_to_nsis_sdk |
| { |
| my $nsispath = ""; |
| |
| if ( $ENV{'NSIS_PATH'} ) |
| { |
| $nsispath = $ENV{'NSIS_PATH'}; |
| } |
| if ( $nsispath eq "" ) |
| { |
| $installer::logger::Info->print("... no Environment variable \"NSIS_PATH\"!\n"); |
| } |
| elsif ( ! -d $nsispath ) |
| { |
| installer::exiter::exit_program("ERROR: NSIS path $nsispath does not exist!", "get_path_to_nsis_sdk"); |
| } |
| |
| return $nsispath; |
| } |
| |
| ################################################################## |
| # Windows: Executing NSIS to create the installation set |
| ################################################################## |
| |
| sub call_nsis |
| { |
| my ( $nsispath, $nsifile ) = @_; |
| |
| my $makensisexe = $nsispath . $installer::globals::separator . "makensis.exe"; |
| |
| $installer::logger::Info->printf("... starting %s ... \n", $makensisexe); |
| |
| if( $^O =~ /cygwin/i ) { $nsifile =~ s/\\/\//g; } |
| |
| my $systemcall = "$makensisexe $nsifile |"; |
| |
| $installer::logger::Lang->printf("Systemcall: %s\n", $systemcall); |
| |
| my @nsisoutput = (); |
| |
| open (NSI, "$systemcall"); |
| while (<NSI>) {push(@nsisoutput, $_); } |
| close (NSI); |
| |
| my $returnvalue = $?; # $? contains the return value of the systemcall |
| |
| if ($returnvalue) |
| { |
| $installer::logger::Lang->printf("ERROR: %s !\n", $systemcall); |
| } |
| else |
| { |
| $installer::logger::Lang->printf("Success: %s\n", $systemcall); |
| } |
| |
| foreach my $line (@nsisoutput) |
| { |
| $installer::logger::Lang->print($line); |
| } |
| } |
| |
| ################################################################################# |
| # Replacing one variable in one files |
| ################################################################################# |
| |
| sub replace_one_variable_in_translationfile |
| { |
| my ($translationfile, $variable, $searchstring) = @_; |
| |
| for ( my $i = 0; $i <= $#{$translationfile}; $i++ ) |
| { |
| ${$translationfile}[$i] =~ s/\%$searchstring/$variable/g; |
| } |
| } |
| |
| ################################################################################# |
| # Replacing the variables in the translation file |
| ################################################################################# |
| |
| sub replace_variables |
| { |
| my ($translationfile, $variableshashref) = @_; |
| |
| foreach my $key (keys %{$variableshashref}) |
| { |
| my $value = $variableshashref->{$key}; |
| |
| # special handling for PRODUCTVERSION, if $allvariables->{'POSTVERSIONEXTENSION'} |
| if (( $key eq "PRODUCTVERSION" ) && ( $variableshashref->{'POSTVERSIONEXTENSION'} )) { $value = $value . " " . $variableshashref->{'POSTVERSIONEXTENSION'}; } |
| |
| replace_one_variable_in_translationfile($translationfile, $value, $key); |
| } |
| } |
| |
| ######################################################### |
| # Getting the translation file for the nsis installer |
| ######################################################### |
| |
| sub get_translation_file |
| { |
| my ($allvariableshashref) = @_; |
| my $translationfilename = $installer::globals::idtlanguagepath . $installer::globals::separator . $installer::globals::nsisfilename . ".uulf"; |
| if ( ! -f $translationfilename ) { installer::exiter::exit_program("ERROR: Could not find language file $translationfilename!", "get_translation_file"); } |
| my $translationfile = installer::files::read_file($translationfilename); |
| replace_variables($translationfile, $allvariableshashref); |
| |
| $installer::logger::Lang->printf("Reading translation file: %s\n", $translationfilename); |
| |
| return $translationfile; |
| } |
| |
| #################################################### |
| # Removing English, if it was added before |
| #################################################### |
| |
| sub remove_english_for_nsis_installer |
| { |
| my ($languagestringref, $languagesarrayref) = @_; |
| |
| # $$languagestringref =~ s/en-US_//; |
| # shift(@{$languagesarrayref}); |
| |
| @{$languagesarrayref} = ("en-US"); # only English for NSIS installer! |
| } |
| |
| #################################################### |
| # Creating link tree for upload |
| #################################################### |
| |
| sub create_link_tree |
| { |
| my ($sourcedownloadfile, $destfilename, $versionstring) = @_; |
| |
| if ( ! $installer::globals::ooouploaddir ) { installer::exiter::exit_program("ERROR: Directory for AOO upload not defined!", "create_link_tree"); } |
| my $versiondir = $installer::globals::ooouploaddir . $installer::globals::separator . $versionstring; |
| $installer::logger::Lang->printf("Directory for the link: %s\n", $versiondir); |
| |
| if ( ! -d $versiondir ) { installer::systemactions::create_directory_structure($versiondir); } |
| |
| # inside directory $versiondir all links have to be created |
| my $linkdestination = $versiondir . $installer::globals::separator . $destfilename; |
| |
| # If there is an older version of this file (link), it has to be removed |
| if ( -f $linkdestination ) { unlink($linkdestination); } |
| |
| $installer::logger::Lang->printf("Creating hard link from %s to %s\n", $sourcedownloadfile, $linkdestination); |
| installer::systemactions::hardlink_one_file($sourcedownloadfile, $linkdestination); |
| } |
| |
| ####################################################### |
| # Setting supported platform for OpenOffice builds |
| ####################################################### |
| |
| sub is_supported_platform |
| { |
| my $is_supported = 0; |
| |
| if (( $installer::globals::islinuxrpmbuild ) || |
| ( $installer::globals::issolarissparcbuild ) || |
| ( $installer::globals::issolarisx86build ) || |
| ( $installer::globals::iswindowsbuild )) |
| { |
| $is_supported = 1; |
| } |
| |
| return $is_supported; |
| } |
| |
| #################################################### |
| # Creating download installation sets |
| #################################################### |
| |
| sub create_download_sets |
| { |
| my ($installationdir, $includepatharrayref, $allvariableshashref, $downloadname, $languagestringref, $languagesarrayref) = @_; |
| |
| $installer::logger::Info->print("\n"); |
| $installer::logger::Info->print("******************************************\n"); |
| $installer::logger::Info->print("... creating download installation set ...\n", 1); |
| $installer::logger::Info->print("******************************************\n"); |
| |
| installer::logger::include_header_into_logfile("Creating download installation sets:"); |
| |
| # special handling for installation sets, to which english was added automatically |
| if ( $installer::globals::added_english ) { remove_english_for_nsis_installer($languagestringref, $languagesarrayref); } |
| |
| my $firstdir = $installationdir; |
| installer::pathanalyzer::get_path_from_fullqualifiedname(\$firstdir); |
| |
| my $lastdir = $installationdir; |
| installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$lastdir); |
| |
| if ( $lastdir =~ /\./ ) { $lastdir =~ s/\./_download_inprogress\./ } |
| else { $lastdir = $lastdir . "_download_inprogress"; } |
| |
| # removing existing directory "_native_packed_inprogress" and "_native_packed_witherror" and "_native_packed" |
| |
| my $downloaddir = $firstdir . $lastdir; |
| |
| if ( -d $downloaddir ) { installer::systemactions::remove_complete_directory($downloaddir); } |
| |
| my $olddir = $downloaddir; |
| $olddir =~ s/_inprogress/_witherror/; |
| if ( -d $olddir ) { installer::systemactions::remove_complete_directory($olddir); } |
| |
| $olddir = $downloaddir; |
| $olddir =~ s/_inprogress//; |
| if ( -d $olddir ) { installer::systemactions::remove_complete_directory($olddir); } |
| |
| # creating the new directory |
| |
| installer::systemactions::create_directory($downloaddir); |
| |
| $installer::globals::saveinstalldir = $downloaddir; |
| |
| # evaluating the name of the download file |
| |
| if ( $allvariableshashref->{'AOODOWNLOADNAME'} ) |
| { |
| $downloadname = set_download_filename($languagestringref, $allvariableshashref); |
| } |
| else |
| { |
| $downloadname = resolve_variables_in_downloadname($allvariableshashref, $downloadname, $languagestringref); |
| } |
| |
| if ( ! $installer::globals::iswindowsbuild ) # Unix specific part |
| { |
| |
| # getting the path of the getuid.so (only required for Solaris and Linux) |
| my $getuidlibrary = ""; |
| if (( $installer::globals::issolarisbuild ) || ( $installer::globals::islinuxbuild )) { $getuidlibrary = get_path_for_library($includepatharrayref); } |
| |
| if ( $allvariableshashref->{'AOODOWNLOADNAME'} ) |
| { |
| my $downloadfile = create_tar_gz_file_from_directory($installationdir, $getuidlibrary, $downloaddir, $downloadname); |
| } |
| else |
| { |
| # find and read setup script template |
| my $scriptfilename = "downloadscript.sh"; |
| |
| my $scriptref = ""; |
| |
| if ( $installer::globals::include_pathes_read ) |
| { |
| $scriptref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$scriptfilename, $includepatharrayref, 0); |
| } |
| else |
| { |
| $scriptref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$scriptfilename, $includepatharrayref, 0); |
| } |
| |
| if ($$scriptref eq "") { installer::exiter::exit_program("ERROR: Could not find script file $scriptfilename!", "create_download_sets"); } |
| my $scriptfile = installer::files::read_file($$scriptref); |
| |
| $installer::logger::Lang->printf("Found script file %s: %s \n", $scriptfilename, $$scriptref); |
| |
| # add product name into script template |
| put_productname_into_script($scriptfile, $allvariableshashref); |
| |
| # replace linenumber in script template |
| put_linenumber_into_script($scriptfile); |
| |
| # create tar file |
| my $temporary_tarfile_name = $downloaddir . $installer::globals::separator . 'installset.tar'; |
| my $size = tar_package($installationdir, $temporary_tarfile_name, $getuidlibrary); |
| installer::exiter::exit_program("ERROR: Could not create tar file $temporary_tarfile_name!", "create_download_sets") unless $size; |
| |
| # calling sum to determine checksum and size of the tar file |
| my $sumout = call_sum($temporary_tarfile_name); |
| |
| # writing checksum and size into scriptfile |
| put_checksum_and_size_into_script($scriptfile, $sumout); |
| |
| # saving the script file |
| my $newscriptfilename = determine_scriptfile_name($downloadname); |
| $newscriptfilename = save_script_file($downloaddir, $newscriptfilename, $scriptfile); |
| |
| $installer::logger::Info->printf("... including installation set into %s ... \n", $newscriptfilename); |
| # Append tar file to script |
| include_tar_into_script($newscriptfilename, $temporary_tarfile_name); |
| } |
| } |
| else # Windows specific part |
| { |
| my $localnsisdir = installer::systemactions::create_directories("nsis", $languagestringref); |
| # push(@installer::globals::removedirs, $localnsisdir); |
| |
| # find nsis in the system |
| my $nsispath = get_path_to_nsis_sdk(); |
| |
| if ( $nsispath eq "" ) { |
| # If nsis is not found just skip the rest of this function |
| # and do not create the NSIS file. |
| $installer::logger::Lang->print("\n"); |
| $installer::logger::Lang->printf("No NSIS SDK found. Skipping the generation of NSIS file.\n"); |
| $installer::logger::Info->print("... no NSIS SDK found. Skipping the generation of NSIS file ... \n"); |
| return $downloaddir; |
| } |
| |
| # copy language files into nsis directory and translate them |
| copy_and_translate_nsis_language_files($nsispath, $localnsisdir, $languagesarrayref, $allvariableshashref); |
| |
| # find and read the nsi file template |
| my $templatefilename = "downloadtemplate.nsi"; |
| |
| my $templateref = ""; |
| |
| if ( $installer::globals::include_pathes_read ) |
| { |
| $templateref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$templatefilename, $includepatharrayref, 0); |
| } |
| else |
| { |
| $templateref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$templatefilename, $includepatharrayref, 0); |
| } |
| |
| if ($$templateref eq "") { installer::exiter::exit_program("ERROR: Could not find nsi template file $templatefilename!", "create_download_sets"); } |
| my $templatefile = installer::files::read_file($$templateref); |
| |
| # add product name into script template |
| put_windows_productname_into_template($templatefile, $allvariableshashref); |
| put_banner_bmp_into_template($templatefile, $includepatharrayref, $allvariableshashref); |
| put_welcome_bmp_into_template($templatefile, $includepatharrayref, $allvariableshashref); |
| put_setup_ico_into_template($templatefile, $includepatharrayref, $allvariableshashref); |
| put_publisher_into_template($templatefile, $allvariableshashref); |
| put_website_into_template($templatefile, $allvariableshashref); |
| put_javafilename_into_template($templatefile, $allvariableshashref); |
| put_windows_productversion_into_template($templatefile, $allvariableshashref); |
| put_windows_productpath_into_template($templatefile, $allvariableshashref, $languagestringref, $localnsisdir); |
| put_outputfilename_into_template($templatefile, $downloadname); |
| put_filelist_into_template($templatefile, $installationdir); |
| put_language_list_into_template($templatefile, $languagesarrayref); |
| put_nsis_path_into_template($templatefile, $localnsisdir); |
| put_output_path_into_template($templatefile, $downloaddir); |
| |
| my $nsifilename = save_script_file($localnsisdir, $templatefilename, $templatefile); |
| |
| $installer::logger::Info->printf("... created NSIS file %s ... \n", $nsifilename); |
| |
| # starting the NSIS SDK to create the download file |
| call_nsis($nsispath, $nsifilename); |
| } |
| |
| return $downloaddir; |
| } |
| |
| #################################################### |
| # Creating AOO upload tree |
| #################################################### |
| |
| sub create_download_link_tree |
| { |
| my ($downloaddir, $languagestringref, $allvariableshashref) = @_; |
| |
| $installer::logger::Info->print("\n"); |
| $installer::logger::Info->print("******************************************\n"); |
| $installer::logger::Info->print("... creating download hard link ...\n"); |
| $installer::logger::Info->print("******************************************\n"); |
| |
| installer::logger::include_header_into_logfile("Creating download hard link:"); |
| $installer::logger::Lang->print("\n"); |
| $installer::logger::Lang->add_timestamp("Performance Info: Creating hard link, start"); |
| |
| if ( is_supported_platform() ) |
| { |
| my $versionstring = ""; |
| # Already defined $installer::globals::oooversionstring and $installer::globals::ooodownloadfilename ? |
| |
| if ( ! $installer::globals::oooversionstring ) { $versionstring = get_current_version(); } |
| else { $versionstring = $installer::globals::oooversionstring; } |
| |
| # Is $versionstring empty? If yes, there is nothing to do now. |
| |
| $installer::logger::Lang->printf("Version string is set to: %s\n", $versionstring); |
| |
| if ( $versionstring ) |
| { |
| # Now the downloadfilename has to be set (if not already done) |
| my $destdownloadfilename = ""; |
| if ( ! $installer::globals::ooodownloadfilename ) { $destdownloadfilename = set_download_filename($languagestringref, $versionstring, $allvariableshashref); } |
| else { $destdownloadfilename = $installer::globals::ooodownloadfilename; } |
| |
| if ( $destdownloadfilename ) |
| { |
| $destdownloadfilename = $destdownloadfilename . $installer::globals::downloadfileextension; |
| |
| $installer::logger::Lang->printf("Setting destination download file name: %s\n", $destdownloadfilename); |
| |
| my $sourcedownloadfile = $downloaddir . $installer::globals::separator . $installer::globals::downloadfilename; |
| |
| $installer::logger::Lang->printf("Setting source download file name: %s\n", $sourcedownloadfile); |
| |
| create_link_tree($sourcedownloadfile, $destdownloadfilename, $versionstring); |
| # my $md5sumoutput = call_md5sum($downloadfile); |
| # my $md5sum = get_md5sum($md5sumoutput); |
| |
| } |
| } |
| else |
| { |
| $installer::logger::Lang->printf("Version string is empty. Nothing to do!\n"); |
| } |
| } |
| else |
| { |
| $installer::logger::Lang->printf("Platform not used for hard linking. Nothing to do!\n"); |
| } |
| |
| $installer::logger::Lang->add_timestamp("Performance Info: Creating hard link, stop"); |
| } |
| |
| 1; |