summaryrefslogtreecommitdiff
path: root/solenv/bin/modules/installer/systemactions.pm
diff options
context:
space:
mode:
Diffstat (limited to 'solenv/bin/modules/installer/systemactions.pm')
-rw-r--r--solenv/bin/modules/installer/systemactions.pm1636
1 files changed, 0 insertions, 1636 deletions
diff --git a/solenv/bin/modules/installer/systemactions.pm b/solenv/bin/modules/installer/systemactions.pm
deleted file mode 100644
index a83283aef..000000000
--- a/solenv/bin/modules/installer/systemactions.pm
+++ /dev/null
@@ -1,1636 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# This file is part of OpenOffice.org.
-#
-# OpenOffice.org is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License version 3
-# only, as published by the Free Software Foundation.
-#
-# OpenOffice.org is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License version 3 for more details
-# (a copy is included in the LICENSE file that accompanied this code).
-#
-# You should have received a copy of the GNU Lesser General Public License
-# version 3 along with OpenOffice.org. If not, see
-# <http://www.openoffice.org/license.html>
-# for a copy of the LGPLv3 License.
-#
-#*************************************************************************
-
-package installer::systemactions;
-
-use Cwd;
-use File::Copy;
-use installer::converter;
-use installer::exiter;
-use installer::globals;
-use installer::pathanalyzer;
-use installer::remover;
-
-######################################################
-# Creating a new direcotory
-######################################################
-
-sub create_directory
-{
- my ($directory) = @_;
-
- create_directory_with_privileges( $directory, "755" );
-}
-
-######################################################
-# Creating a new direcotory with defined privileges
-######################################################
-
-sub create_directory_with_privileges
-{
- my ($directory, $privileges) = @_;
-
- my $returnvalue = 1;
- my $infoline = "";
- my $localprivileges = oct("0".$privileges); # changes "777" to 0777
-
- if (!(-d $directory))
- {
- $returnvalue = mkdir($directory, $localprivileges);
-
- if ($returnvalue)
- {
- $infoline = "\nCreated directory: $directory\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- chmod $localprivileges, $directory;
- }
- else
- {
- # New solution in parallel packing: It is possible, that the directory now exists, although it
- # was not created in this process. There is only an important error, if the directory does not
- # exist now.
-
- $infoline = "\nDid not succeed in creating directory: \"$directory\". Further attempts will follow.\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- if (!(-d $directory))
- {
- # Problem with parallel packaging? -> Try a little harder, before exiting.
- # Did someone else remove the parent directory in the meantime?
- my $parentdir = $directory;
- installer::pathanalyzer::get_path_from_fullqualifiedname(\$parentdir);
- if (!(-d $parentdir))
- {
- $returnvalue = mkdir($directory, $localprivileges);
-
- if ($returnvalue)
- {
- $infoline = "\nAttention: Successfully created parent directory (should already be created before): $parentdir\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- chmod $localprivileges, $parentdir;
- }
- else
- {
- $infoline = "\Error: \"$directory\" could not be created. Even the parent directory \"$parentdir\" does not exist and could not be created.\n";
- push(@installer::globals::logfileinfo, $infoline);
- if ( -d $parentdir )
- {
- $infoline = "\nAttention: Finally the parent directory \"$parentdir\" exists, but I could not create it.\n";
- push(@installer::globals::logfileinfo, $infoline);
- }
- else
- {
- # Now it is time to exit, even the parent could not be created.
- installer::exiter::exit_program("ERROR: Could not create parent directory \"$parentdir\"", "create_directory_with_privileges");
- }
- }
- }
-
- # At this point we have to assume, that the parent directory exist.
- # Trying once more to create the desired directory
-
- $returnvalue = mkdir($directory, $localprivileges);
-
- if ($returnvalue)
- {
- $infoline = "\nAttention: Created directory \"$directory\" in the second try.\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- chmod $localprivileges, $directory;
- }
- else
- {
- if ( -d $directory )
- {
- $infoline = "\nAttention: Finally the directory \"$directory\" exists, but I could not create it.\n";
- push(@installer::globals::logfileinfo, $infoline);
- }
- else
- {
- # It is time to exit, even the second try failed.
- installer::exiter::exit_program("ERROR: Failed to create the directory: $directory", "create_directory_with_privileges");
- }
- }
- }
- else
- {
- $infoline = "\nAnother process created this directory in exactly this moment :-) : $directory\n";
- push(@installer::globals::logfileinfo, $infoline);
- }
- }
- }
- else
- {
- $infoline = "\nAlready existing directory, did not create: $directory\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- chmod $localprivileges, $directory;
- }
-}
-
-######################################################
-# Removing a new direcotory
-######################################################
-
-sub remove_empty_directory
-{
- my ($directory) = @_;
-
- my $returnvalue = 1;
-
- if (-d $directory)
- {
- my $systemcall = "rmdir $directory";
-
- $returnvalue = system($systemcall);
-
- my $infoline = "Systemcall: $systemcall\n";
- push( @installer::globals::logfileinfo, $infoline);
-
- if ($returnvalue)
- {
- $infoline = "ERROR: Could not remove \"$directory\"!\n";
- push( @installer::globals::logfileinfo, $infoline);
- }
- else
- {
- $infoline = "Success: Removed \"$directory\"!\n";
- push( @installer::globals::logfileinfo, $infoline);
- }
- }
-}
-
-#######################################################################
-# Calculating the number of languages in the string
-#######################################################################
-
-sub get_number_of_langs
-{
- my ($languagestring) = @_;
-
- my $number = 1;
-
- my $workstring = $languagestring;
-
- while ( $workstring =~ /^\s*(.*)_(.*?)\s*$/ )
- {
- $workstring = $1;
- $number++;
- }
-
- return $number;
-}
-
-#######################################################################
-# Creating the directories, in which files are generated or unzipped
-#######################################################################
-
-sub create_directories
-{
- my ($newdirectory, $languagesref) =@_;
-
- $installer::globals::unpackpath =~ s/\Q$installer::globals::separator\E\s*$//; # removing ending slashes and backslashes
-
- my $path = "";
-
- if (( $newdirectory eq "uno" ) || ( $newdirectory eq "zip" ) || ( $newdirectory eq "cab" ) || ( $newdirectory =~ /rdb\s*$/i )) # special handling for zip files, cab files and services file because of performance reasons
- {
- if ( $installer::globals::temppathdefined ) { $path = $installer::globals::temppath; }
- else { $path = $installer::globals::unpackpath; }
- $path =~ s/\Q$installer::globals::separator\E\s*$//; # removing ending slashes and backslashes
- $path = $path . $installer::globals::separator;
- }
- elsif ( ( $newdirectory eq "jds" ) )
- {
- if ( $installer::globals::jdstemppathdefined ) { $path = $installer::globals::jdstemppath; }
- else { $path = $installer::globals::unpackpath; }
- $path =~ s/\Q$installer::globals::separator\E\s*$//; # removing ending slashes and backslashes
- $path = $path . $installer::globals::separator;
- installer::systemactions::create_directory($path);
- }
- else
- {
- $path = $installer::globals::unpackpath . $installer::globals::separator;
-
- # special handling, if LOCALINSTALLDIR is set
- if (( $installer::globals::localinstalldirset ) && ( $newdirectory eq "install" ))
- {
- $installer::globals::localinstalldir =~ s/\Q$installer::globals::separator\E\s*$//;
- $path = $installer::globals::localinstalldir . $installer::globals::separator;
- }
- }
-
- $infoline = "create_directories: Using $path for $newdirectory !\n";
- push( @installer::globals::logfileinfo, $infoline);
-
- if ($newdirectory eq "unzip" ) # special handling for common directory
- {
- $path = $path . ".." . $installer::globals::separator . "common" . $installer::globals::productextension . $installer::globals::separator;
- create_directory($path);
-
- $path = $path . $newdirectory . $installer::globals::separator;
- create_directory($path);
- }
- else
- {
- my $localproductname = $installer::globals::product;
- my $localproductsubdir = "";
-
- if ( $installer::globals::product =~ /^\s*(.+?)\_\_(.+?)\s*$/ )
- {
- $localproductname = $1;
- $localproductsubdir = $2;
- }
-
- if ( $installer::globals::languagepack ) { $path = $path . $localproductname . "_languagepack" . $installer::globals::separator; }
- elsif ( $installer::globals::helppack ) { $path = $path . $localproductname . "_helppack" . $installer::globals::separator; }
- elsif ( $installer::globals::patch ) { $path = $path . $localproductname . "_patch" . $installer::globals::separator; }
- else { $path = $path . $localproductname . $installer::globals::separator; }
-
- create_directory($path);
-
- if ( $localproductsubdir )
- {
- $path = $path . $localproductsubdir . $installer::globals::separator;
- create_directory($path);
- }
-
- $path = $path . $installer::globals::installertypedir . $installer::globals::separator;
- create_directory($path);
-
- $path = $path . $newdirectory . $installer::globals::separator;
- create_directory($path);
-
- my $locallanguagesref = "";
-
- if ( $$languagesref ) { $locallanguagesref = $$languagesref; }
-
- if ($newdirectory eq "install" && $installer::globals::ooodownloadfilename ne "" )
- {
- # put packages into versioned path; needed only on linux (fdo#30837)
- $path = $path . "$installer::globals::ooodownloadfilename" . $installer::globals::separator;
- create_directory($path);
- }
- else
- {
- if ($locallanguagesref ne "") # this will be a path like "01_49", for Profiles and ConfigurationFiles, idt-Files
- {
-
- my $languagestring = $$languagesref;
-
- if (length($languagestring) > $installer::globals::max_lang_length )
- {
- my $number_of_languages = get_number_of_langs($languagestring);
- chomp(my $shorter = `echo $languagestring | md5sum | sed -e "s/ .*//g"`);
- my $id = substr($shorter, 0, 8); # taking only the first 8 digits
- $languagestring = "lang_" . $number_of_languages . "_id_" . $id;
- }
-
- $path = $path . $languagestring . $installer::globals::separator;
- create_directory($path);
- }
- }
- }
-
- installer::remover::remove_ending_pathseparator(\$path);
-
- $path = installer::converter::make_path_conform($path);
-
- return $path;
-}
-
-########################
-# Copying one file
-########################
-
-sub copy_one_file
-{
- my ($source, $dest) = @_;
-
- my ($returnvalue, $infoline);
-
- my $copyreturn = copy($source, $dest);
-
- if ($copyreturn)
- {
- $infoline = "Copy: $source to $dest\n";
- $returnvalue = 1;
- }
- else
- {
- $infoline = "ERROR: Could not copy $source to $dest $!\n";
- $returnvalue = 0;
- }
-
- push(@installer::globals::logfileinfo, $infoline);
-
- if ( !$returnvalue ) {
- return $returnvalue;
- }
-
- # taking care of file attributes
- if ($installer::globals::iswin && -f $dest) {
- my $mode = -x $source ? 0775 : 0664;
- my $mode_str = sprintf("%o", $mode);
- my $chmodreturn = chmod($mode, $dest);
- if ($chmodreturn)
- {
- $infoline = "chmod $mode_str, $dest\n";
- $returnvalue = 1;
- }
- else
- {
- $infoline = "WARNING: Could not chmod $dest: $!\n";
- $returnvalue = 0;
- }
-
- push(@installer::globals::logfileinfo, $infoline);
- }
-
- return $returnvalue;
-}
-
-##########################
-# Hard linking one file
-##########################
-
-sub hardlink_one_file
-{
- my ($source, $dest) = @_;
-
- my ($returnvalue, $infoline);
-
- my $copyreturn = link($source, $dest);
-
- if ($copyreturn)
- {
- $infoline = "Link: $source to $dest\n";
- $returnvalue = 1;
- }
- else
- {
- $infoline = "ERROR: Could not link $source to $dest\n";
- $returnvalue = 0;
- }
-
- push(@installer::globals::logfileinfo, $infoline);
-
- return $returnvalue;
-}
-
-##########################
-# Soft linking one file
-##########################
-
-sub softlink_one_file
-{
- my ($source, $dest) = @_;
-
- my ($returnvalue, $infoline);
-
- my $linkreturn = symlink($source, $dest);
-
- if ($linkreturn)
- {
- $infoline = "Symlink: $source to $dest\n";
- $returnvalue = 1;
- }
- else
- {
- $infoline = "ERROR: Could not symlink $source to $dest\n";
- $returnvalue = 0;
- }
-
- push(@installer::globals::logfileinfo, $infoline);
-
- return $returnvalue;
-}
-
-########################
-# Renaming one file
-########################
-
-sub rename_one_file
-{
- my ($source, $dest) = @_;
-
- my ($returnvalue, $infoline);
-
- my $renamereturn = rename($source, $dest);
-
- if ($renamereturn)
- {
- $infoline = "Rename: $source to $dest\n";
- $returnvalue = 1;
- }
- else
- {
- $infoline = "ERROR: Could not rename $source to $dest\n";
- $returnvalue = 0;
- }
-
- push(@installer::globals::logfileinfo, $infoline);
-
- return $returnvalue;
-}
-
-##########################################
-# Copying all files from one directory
-# to another directory
-##########################################
-
-sub copy_directory
-{
- my ($sourcedir, $destdir) = @_;
-
- my @sourcefiles = ();
-
- $sourcedir =~ s/\Q$installer::globals::separator\E\s*$//;
- $destdir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- my $infoline = "\n";
- push(@installer::globals::logfileinfo, $infoline);
- $infoline = "Copying files from directory $sourcedir to directory $destdir\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- opendir(DIR, $sourcedir);
- @sourcefiles = readdir(DIR);
- closedir(DIR);
-
- my $onefile;
-
- foreach $onefile (@sourcefiles)
- {
- if ((!($onefile eq ".")) && (!($onefile eq "..")))
- {
- my $sourcefile = $sourcedir . $installer::globals::separator . $onefile;
- my $destfile = $destdir . $installer::globals::separator . $onefile;
- if ( -f $sourcefile ) # only files, no directories
- {
- copy_one_file($sourcefile, $destfile);
- }
- }
- }
-}
-
-##########################################
-# Copying all files from one directory
-# to another directory
-##########################################
-
-sub is_empty_dir
-{
- my ($dir) = @_;
-
- my $directory_is_empty = 1;
- my @sourcefiles = ();
-
- opendir(DIR, $dir);
- @sourcefiles = readdir(DIR);
- closedir(DIR);
-
- my $onefile;
- my @realcontent = ();
-
- foreach $onefile (@sourcefiles)
- {
- if ((!($onefile eq ".")) && (!($onefile eq "..")))
- {
- push(@realcontent, $onefile);
- }
- }
-
- if ( $#realcontent > -1 ) { $directory_is_empty = 0; }
-
- return $directory_is_empty;
-}
-
-#####################################################################
-# Creating hard links to a complete directory with sub directories.
-#####################################################################
-
-sub hardlink_complete_directory
-{
- my ($sourcedir, $destdir) = @_;
-
- my @sourcefiles = ();
-
- $sourcedir =~ s/\Q$installer::globals::separator\E\s*$//;
- $destdir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- if ( ! -d $destdir ) { create_directory($destdir); }
-
- my $infoline = "\n";
- push(@installer::globals::logfileinfo, $infoline);
- $infoline = "Creating hard links for all files from directory $sourcedir to directory $destdir\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- opendir(DIR, $sourcedir);
- @sourcefiles = readdir(DIR);
- closedir(DIR);
-
- my $onefile;
-
- foreach $onefile (@sourcefiles)
- {
- if ((!($onefile eq ".")) && (!($onefile eq "..")))
- {
- my $source = $sourcedir . $installer::globals::separator . $onefile;
- my $dest = $destdir . $installer::globals::separator . $onefile;
- if ( -f $source ) # only files, no directories
- {
- hardlink_one_file($source, $dest);
- }
- if ( -d $source ) # recursive
- {
- hardlink_complete_directory($source, $dest);
- }
- }
- }
-}
-
-#####################################################################
-# Creating hard links to a complete directory with sub directories.
-#####################################################################
-
-sub softlink_complete_directory
-{
- my ($sourcedir, $destdir, $depth) = @_;
-
- my @sourcefiles = ();
-
- $sourcedir =~ s/\Q$installer::globals::separator\E\s*$//;
- $destdir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- if ( ! -d $destdir ) { create_directory($destdir); }
-
- my $infoline = "\n";
- push(@installer::globals::logfileinfo, $infoline);
- $infoline = "Creating soft links for all files from directory $sourcedir to directory $destdir\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- opendir(DIR, $sourcedir);
- @sourcefiles = readdir(DIR);
- closedir(DIR);
-
- my $onefile;
-
- foreach $onefile (@sourcefiles)
- {
- if ((!($onefile eq ".")) && (!($onefile eq "..")))
- {
- my $source = $sourcedir . $installer::globals::separator . $onefile;
- my $dest = $destdir . $installer::globals::separator . $onefile;
- if ( -f $source ) # only files, no directories
- {
- my $localsource = $source;
- if ( $depth > 0 ) { for ( my $i = 1; $i <= $depth; $i++ ) { $localsource = "../" . $localsource; } }
- softlink_one_file($localsource, $dest);
- }
- if ( -d $source ) # recursive
- {
- my $newdepth = $depth + 1;
- softlink_complete_directory($source, $dest, $newdepth);
- }
- }
- }
-}
-
-#####################################################
-# Copying a complete directory with sub directories.
-#####################################################
-
-sub copy_complete_directory
-{
- my ($sourcedir, $destdir) = @_;
-
- my @sourcefiles = ();
-
- $sourcedir =~ s/\Q$installer::globals::separator\E\s*$//;
- $destdir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- if ( ! -d $destdir ) { create_directory($destdir); }
-
- my $infoline = "\n";
- push(@installer::globals::logfileinfo, $infoline);
- $infoline = "Copying files from directory $sourcedir to directory $destdir\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- opendir(DIR, $sourcedir);
- @sourcefiles = readdir(DIR);
- closedir(DIR);
-
- my $onefile;
-
- foreach $onefile (@sourcefiles)
- {
- if ((!($onefile eq ".")) && (!($onefile eq "..")))
- {
- my $source = $sourcedir . $installer::globals::separator . $onefile;
- my $dest = $destdir . $installer::globals::separator . $onefile;
- if ( -f $source ) # only files, no directories
- {
- copy_one_file($source, $dest);
- }
- if ( -d $source ) # recursive
- {
- if ((!( $source =~ /packages\/SUNW/ )) && (!( $source =~ /packages\/OOO/ ))) # do not copy complete Solaris packages!
- {
- copy_complete_directory($source, $dest);
- }
- }
- }
- }
-}
-
-#####################################################################################
-# Copying a complete directory with sub directories, but not the CVS directories.
-#####################################################################################
-
-sub copy_complete_directory_without_cvs
-{
- my ($sourcedir, $destdir) = @_;
-
- my @sourcefiles = ();
-
- $sourcedir =~ s/\Q$installer::globals::separator\E\s*$//;
- $destdir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- if ( ! -d $destdir ) { create_directory($destdir); }
-
- my $infoline = "\n";
- push(@installer::globals::logfileinfo, $infoline);
- $infoline = "Copying files from directory $sourcedir to directory $destdir (without CVS)\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- opendir(DIR, $sourcedir);
- @sourcefiles = readdir(DIR);
- closedir(DIR);
-
- my $onefile;
-
- foreach $onefile (@sourcefiles)
- {
- if ((!($onefile eq ".")) && (!($onefile eq "..")) && (!($onefile eq "CVS")))
- {
- my $source = $sourcedir . $installer::globals::separator . $onefile;
- my $dest = $destdir . $installer::globals::separator . $onefile;
- if ( -f $source ) # only files, no directories
- {
- copy_one_file($source, $dest);
- }
- if ( -d $source ) # recursive
- {
- copy_complete_directory_without_cvs($source, $dest);
- }
- }
- }
-}
-
-#####################################################
-# Copying all files with a specified file extension
-# from one directory to another directory.
-#####################################################
-
-sub copy_directory_with_fileextension
-{
- my ($sourcedir, $destdir, $extension) = @_;
-
- my @sourcefiles = ();
-
- $sourcedir =~ s/\Q$installer::globals::separator\E\s*$//;
- $destdir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- $infoline = "\n";
- push(@installer::globals::logfileinfo, $infoline);
- $infoline = "Copying files with extension $extension from directory $sourcedir to directory $destdir\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- opendir(DIR, $sourcedir);
- @sourcefiles = readdir(DIR);
- closedir(DIR);
-
- my $onefile;
-
- foreach $onefile (@sourcefiles)
- {
- if ((!($onefile eq ".")) && (!($onefile eq "..")))
- {
- if ( $onefile =~ /\.$extension\s*$/ ) # only copying specified files
- {
- my $sourcefile = $sourcedir . $installer::globals::separator . $onefile;
- my $destfile = $destdir . $installer::globals::separator . $onefile;
- if ( -f $sourcefile ) # only files, no directories
- {
- copy_one_file($sourcefile, $destfile);
- }
- }
- }
- }
-}
-
-#########################################################
-# Copying all files without a specified file extension
-# from one directory to another directory.
-#########################################################
-
-sub copy_directory_except_fileextension
-{
- my ($sourcedir, $destdir, $extension) = @_;
-
- my @sourcefiles = ();
-
- $sourcedir =~ s/\Q$installer::globals::separator\E\s*$//;
- $destdir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- $infoline = "\n";
- push(@installer::globals::logfileinfo, $infoline);
- $infoline = "Copying files without extension $extension from directory $sourcedir to directory $destdir\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- opendir(DIR, $sourcedir);
- @sourcefiles = readdir(DIR);
- closedir(DIR);
-
- my $onefile;
-
- foreach $onefile (@sourcefiles)
- {
- if ((!($onefile eq ".")) && (!($onefile eq "..")))
- {
- if ( ! ( $onefile =~ /\.$extension\s*$/ )) # only copying not having the specified extension
- {
- my $sourcefile = $sourcedir . $installer::globals::separator . $onefile;
- my $destfile = $destdir . $installer::globals::separator . $onefile;
- if ( -f $sourcefile ) # only files, no directories
- {
- copy_one_file($sourcefile, $destfile);
- }
- }
- }
- }
-}
-
-########################################################
-# Renaming all files with a specified file extension
-# in a specified directory.
-# Example: "Feature.idt.01" -> "Feature.idt"
-########################################################
-
-sub rename_files_with_fileextension
-{
- my ($dir, $extension) = @_;
-
- my @sourcefiles = ();
-
- $dir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- my $infoline = "\n";
- push(@installer::globals::logfileinfo, $infoline);
- $infoline = "Renaming files with extension \"$extension\" in the directory $dir\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- opendir(DIR, $dir);
- @sourcefiles = readdir(DIR);
- closedir(DIR);
-
- my $onefile;
-
- foreach $onefile (@sourcefiles)
- {
- if ((!($onefile eq ".")) && (!($onefile eq "..")))
- {
- if ( $onefile =~ /^\s*(\S.*?)\.$extension\s*$/ ) # only renaming specified files
- {
- my $destfile = $1;
- my $sourcefile = $dir . $installer::globals::separator . $onefile;
- $destfile = $dir . $installer::globals::separator . $destfile;
- if ( -f $sourcefile ) # only files, no directories
- {
- rename_one_file($sourcefile, $destfile);
- }
- }
- }
- }
-}
-
-########################################################
-# Finding all files with a specified file extension
-# in a specified directory.
-########################################################
-
-sub find_file_with_file_extension
-{
- my ($extension, $dir) = @_;
-
- my @allfiles = ();
-
- $dir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- my $infoline = "\n";
- push(@installer::globals::logfileinfo, $infoline);
- $infoline = "Searching files with extension \"$extension\" in the directory $dir\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- opendir(DIR, $dir);
- @sourcefiles = sort readdir(DIR);
- closedir(DIR);
-
- my $onefile;
-
- foreach $onefile (@sourcefiles)
- {
- if ((!($onefile eq ".")) && (!($onefile eq "..")))
- {
- if ( $onefile =~ /^\s*(\S.*?)\.$extension\s*$/ )
- {
- push(@allfiles, $onefile)
- }
- }
- }
-
- return \@allfiles;
-}
-
-##############################################################
-# Creating a unique directory, for example "01_inprogress_7"
-# in the install directory.
-##############################################################
-
-sub make_numbered_dir
-{
- my ($newstring, $olddir) = @_;
-
- my $basedir = $olddir;
- installer::pathanalyzer::get_path_from_fullqualifiedname(\$basedir);
-
- my $alldirs = get_all_directories($basedir);
-
- # searching for the highest number extension
-
- my $maxnumber = 0;
-
- for ( my $i = 0; $i <= $#{$alldirs}; $i++ )
- {
- if ( ${$alldirs}[$i] =~ /\_(\d+)\s*$/ )
- {
- my $number = $1;
- if ( $number > $maxnumber ) { $maxnumber = $number; }
- }
- }
-
- my $newnumber = $maxnumber + 1;
-
- my $newdir = $olddir . "_" . $newstring . "_" . $newnumber;
-
- my $returndir = "";
-
- if ( move($olddir, $newdir) )
- {
- $infoline = "\nMoved directory from $olddir to $newdir\n";
- push(@installer::globals::logfileinfo, $infoline);
- $returndir = $newdir;
- }
- else
- {
- $infoline = "\nATTENTION: Could not move directory from $olddir to $newdir, \"make_numbered_dir\"\n";
- push(@installer::globals::logfileinfo, $infoline);
- $returndir = $olddir;
- }
-
- return $returndir;
-}
-
-##############################################################
-# Determining the highest number in the install directory.
-##############################################################
-
-sub determine_maximum_number
-{
- my ($dir, $languagestringref) = @_;
-
- my $basedir = $dir;
- installer::pathanalyzer::get_path_from_fullqualifiedname(\$basedir);
-
- my $alldirs = get_all_directories($basedir);
-
- my $maxnumber = 1;
-
- # In control.pm the installation directory is determined as:
- # $installer::globals::build . "_" . $installer::globals::lastminor . "_" .
- # "native_inprogress-number_" . $$languagesref . "\." . $installer::globals::buildid;
-
- # searching for the highest number extension after the first "-", which belongs to
- # $installer::globals::build, $installer::globals::lastminor and $installer::globals::buildid
- # In this step not looking for the language!
-
- my @correctbuildiddirs = ();
-
- for ( my $i = 0; $i <= $#{$alldirs}; $i++ )
- {
- my $onedir = ${$alldirs}[$i];
- installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$onedir);
-
- if ( $onedir =~ /^\s*\Q$installer::globals::build\E\_\Q$installer::globals::lastminor\E\_(.*?)\-(\d+)\_(.*?)\.\Q$installer::globals::buildid\E\s*$/ )
- {
- my $number = $2;
- if ( $number > $maxnumber ) { $maxnumber = $number; }
- push(@correctbuildiddirs, $onedir);
- }
- }
-
- # From all directories with correct $installer::globals::build, $installer::globals::lastminor
- # and $installer::globals::buildid, those directories, which already have the maximum number
- # have to be selected
-
- my @maximumnumberdirs = ();
-
- for ( my $i = 0; $i <= $#correctbuildiddirs; $i++ )
- {
- my $onedir = $correctbuildiddirs[$i];
-
- if ( $onedir =~ /^\s*(.*?)\-(\d+)\_(.*?)\.(.*?)\s*$/ )
- {
- my $number = $2;
-
- if ( $number == $maxnumber )
- {
- push(@maximumnumberdirs, $onedir);
- }
- }
- }
-
- # @maximumnumberdirs contains only those directories with correct $installer::globals::build,
- # $installer::globals::lastminor and $installer::globals::buildid, which already have the maximum number.
- # If the current language is part of this directory, the number has to be increased.
-
- my $increase_counter = 0;
-
- for ( my $i = 0; $i <= $#maximumnumberdirs; $i++ )
- {
- my $onedir = $maximumnumberdirs[$i];
-
- if ( $onedir =~ /^\s*(.*?)\-(\d+)\_(.*?)\.(.*?)\s*$/ )
- {
- my $number = $2;
- my $languagestring = $3;
-
- if ( $languagestring eq $$languagestringref )
- {
- $increase_counter = 1;
- }
- }
- }
-
- if ( $increase_counter )
- {
- $maxnumber = $maxnumber + 1;
- }
-
- return $maxnumber;
-}
-
-#####################################################################################
-# Renaming a directory by exchanging a string, for example from "01_inprogress_7"
-# to "01_witherror_7".
-#####################################################################################
-
-sub rename_string_in_directory
-{
- my ($olddir, $oldstring, $newstring) = @_;
-
- my $newdir = $olddir;
- my $infoline = "";
-
- $newdir =~ s/$oldstring/$newstring/g;
-
- if (( -d $newdir ) && ( $olddir ne $newdir )) { remove_complete_directory($newdir, 1); }
-
- if ( move($olddir, $newdir) )
- {
- $infoline = "\nMoved directory from $olddir to $newdir\n";
- push(@installer::globals::logfileinfo, $infoline);
- }
- else
- {
- $infoline = "\nATTENTION: Could not move directory from $olddir to $newdir, \"rename_string_in_directory\"\n";
- push(@installer::globals::logfileinfo, $infoline);
- }
-
- return $newdir;
-}
-
-######################################################
-# Returning the complete directory name,
-# input is the first part of the directory name.
-######################################################
-
-sub get_directoryname
-{
- my ($searchdir, $startstring) = @_;
-
- my $dirname = "";
- my $founddir = 0;
- my $direntry;
-
- opendir(DIR, $searchdir);
-
- foreach $direntry (readdir (DIR))
- {
- next if $direntry eq ".";
- next if $direntry eq "..";
-
- if (( -d $direntry ) && ( $direntry =~ /^\s*\Q$startstring\E/ ))
- {
- $dirname = $direntry;
- $founddir = 1;
- last;
- }
- }
-
- closedir(DIR);
-
- if ( ! $founddir ) { installer::exiter::exit_program("ERROR: Did not find directory beginning with $startstring in directory $searchdir", "get_directoryname"); }
-
- return $dirname;
-}
-
-
-###################################
-# Renaming a directory
-###################################
-
-sub rename_directory
-{
- my ($olddir, $newdir) = @_;
-
- my $infoline = "";
-
- if ( move($olddir, $newdir) )
- {
- $infoline = "\nMoved directory from $olddir to $newdir\n";
- push(@installer::globals::logfileinfo, $infoline);
- }
- else
- {
- installer::exiter::exit_program("ERROR: Could not move directory from $olddir to $newdir $!", "rename_directory");
- }
-
- return $newdir;
-}
-
-##############################################################
-# Creating a directory next to an existing directory
-##############################################################
-
-sub create_directory_next_to_directory
-{
- my ($topdir, $dirname) = @_;
-
- my $basedir = $topdir;
- installer::pathanalyzer::get_path_from_fullqualifiedname(\$basedir);
-
- $basedir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- my $newdir = $basedir . $installer::globals::separator . $dirname;
-
- create_directory($newdir);
-
- return $newdir;
-}
-
-##############################################################
-# Collecting all directories inside a directory
-##############################################################
-
-sub get_all_directories
-{
- my ($basedir) = @_;
-
- my @alldirs = ();
- my $direntry;
-
- $basedir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- opendir(DIR, $basedir);
-
- foreach $direntry (readdir (DIR))
- {
- next if $direntry eq ".";
- next if $direntry eq "..";
-
- my $completeentry = $basedir . $installer::globals::separator . $direntry;
-
- if ( -d $completeentry ) { push(@alldirs, $completeentry); }
- }
-
- closedir(DIR);
-
- return \@alldirs;
-}
-
-##############################################################
-# Collecting all directories inside a directory
-# Returning without path
-##############################################################
-
-sub get_all_directories_without_path
-{
- my ($basedir) = @_;
-
- my @alldirs = ();
- my $direntry;
-
- $basedir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- opendir(DIR, $basedir);
-
- foreach $direntry (readdir (DIR))
- {
- next if $direntry eq ".";
- next if $direntry eq "..";
-
- my $completeentry = $basedir . $installer::globals::separator . $direntry;
-
- if ( -d $completeentry ) { push(@alldirs, $direntry); }
- }
-
- closedir(DIR);
-
- return \@alldirs;
-}
-
-##############################################################
-# Collecting all files inside one directory
-##############################################################
-
-sub get_all_files_from_one_directory
-{
- my ($basedir) = @_;
-
- my @allfiles = ();
- my $direntry;
-
- $basedir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- opendir(DIR, $basedir);
-
- foreach $direntry (readdir (DIR))
- {
- next if $direntry eq ".";
- next if $direntry eq "..";
-
- my $completeentry = $basedir . $installer::globals::separator . $direntry;
-
- if ( -f $completeentry ) { push(@allfiles, $completeentry); }
- }
-
- closedir(DIR);
-
- return \@allfiles;
-}
-
-##############################################################
-# Collecting all files inside one directory
-##############################################################
-
-sub get_all_files_from_one_directory_without_path
-{
- my ($basedir) = @_;
-
- my @allfiles = ();
- my $direntry;
-
- $basedir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- opendir(DIR, $basedir);
-
- foreach $direntry (readdir (DIR))
- {
- next if $direntry eq ".";
- next if $direntry eq "..";
-
- my $completeentry = $basedir . $installer::globals::separator . $direntry;
-
- if ( -f $completeentry ) { push(@allfiles, $direntry); }
- }
-
- closedir(DIR);
-
- return \@allfiles;
-}
-
-##############################################################
-# Collecting all files and directories inside one directory
-##############################################################
-
-sub read_directory
-{
- my ($basedir) = @_;
-
- my @allcontent = ();
- my $direntry;
-
- $basedir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- opendir(DIR, $basedir);
-
- foreach $direntry (readdir (DIR))
- {
- next if $direntry eq ".";
- next if $direntry eq "..";
-
- my $completeentry = $basedir . $installer::globals::separator . $direntry;
-
- if (( -f $completeentry ) || ( -d $completeentry )) { push(@allcontent, $completeentry); }
- }
-
- closedir(DIR);
-
- return \@allcontent;
-}
-
-##############################################################
-# Finding the new content in a directory
-##############################################################
-
-sub find_new_content_in_directory
-{
- my ( $basedir, $oldcontent ) = @_;
-
- my @newcontent = ();
- my @allcontent = ();
-
- my $direntry;
-
- $basedir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- opendir(DIR, $basedir);
-
- foreach $direntry (readdir (DIR))
- {
- next if $direntry eq ".";
- next if $direntry eq "..";
-
- my $completeentry = $basedir . $installer::globals::separator . $direntry;
-
- if (( -f $completeentry ) || ( -d $completeentry ))
- {
- push(@allcontent, $completeentry);
- if (! installer::existence::exists_in_array($completeentry, $oldcontent))
- {
- push(@newcontent, $completeentry);
- }
- }
- }
-
- closedir(DIR);
-
- return (\@newcontent, \@allcontent);
-}
-
-##############################################################
-# Trying to create a directory, no error if this fails
-##############################################################
-
-sub try_to_create_directory
-{
- my ($directory) = @_;
-
- my $returnvalue = 1;
- my $created_directory = 0;
-
- if (!(-d $directory))
- {
- $returnvalue = mkdir($directory, 0775);
-
- if ($returnvalue)
- {
- $created_directory = 1;
- $infoline = "\nCreated directory: $directory\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- chmod 0775, $directory;
- }
- else
- {
- $created_directory = 0;
- }
- }
- else
- {
- $created_directory = 1;
- }
-
- return $created_directory;
-}
-
-##############################################################
-# Creating a complete directory structure
-##############################################################
-
-sub create_directory_structure
-{
- my ($directory) = @_;
-
- if ( ! try_to_create_directory($directory) )
- {
- my $parentdir = $directory;
- installer::pathanalyzer::get_path_from_fullqualifiedname(\$parentdir);
-
- my $infoline = "INFO: Did not create directory $directory\n";
- push(@installer::globals::logfileinfo, $infoline);
- $infoline = "Now trying to create parent directory $parentdir\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- create_directory_structure($parentdir); # recursive
- }
-
- create_directory($directory); # now it has to succeed
-}
-
-######################################################
-# Removing a complete directory with subdirectories
-######################################################
-
-sub remove_complete_directory
-{
- my ($directory, $start) = @_;
-
- my @content = ();
- my $infoline = "";
-
- $directory =~ s/\Q$installer::globals::separator\E\s*$//;
-
- if ( -d $directory )
- {
- if ( $start )
- {
- $infoline = "\n";
- push(@installer::globals::logfileinfo, $infoline);
- $infoline = "Removing directory $directory\n";
- push(@installer::globals::logfileinfo, $infoline);
- }
-
- opendir(DIR, $directory);
- @content = readdir(DIR);
- closedir(DIR);
-
- my $oneitem;
-
- foreach $oneitem (@content)
- {
- if ((!($oneitem eq ".")) && (!($oneitem eq "..")))
- {
- my $item = $directory . $installer::globals::separator . $oneitem;
-
- if ( -f $item || -l $item ) # deleting files or links
- {
- unlink($item);
- }
-
- if ( -d $item ) # recursive
- {
- remove_complete_directory($item, 0);
- }
- }
- }
-
- # try to remove empty directory
-
- my $returnvalue = rmdir $directory;
-
- if ( ! $returnvalue )
- {
- $infoline = "Warning: Problem with removing empty dir $directory\n";
- push(@installer::globals::logfileinfo, $infoline);
- }
-
- # try a little bit harder (sometimes there is a performance problem)
- if ( -d $directory )
- {
- for ( my $j = 1; $j <= 3; $j++ )
- {
- if ( -d $directory )
- {
- $infoline = "\n";
- push(@installer::globals::logfileinfo, $infoline);
- $infoline = "Warning (Try $j): Problems with removing directory $directory\n";
- push(@installer::globals::logfileinfo, $infoline);
-
- $returnvalue = rmdir $directory;
-
- if ( $returnvalue )
- {
- $infoline = "Successfully removed empty dir $directory\n";
- push(@installer::globals::logfileinfo, $infoline);
- } else {
- $infoline = "Warning: rmdir $directory failed.\n";
- push(@installer::globals::logfileinfo, $infoline);
- }
- }
- }
- }
- }
-}
-
-######################################################
-# Creating a unique directory with number extension
-######################################################
-
-sub create_unique_directory
-{
- my ($directory) = @_;
-
- $directory =~ s/\Q$installer::globals::separator\E\s*$//;
- $directory = $directory . "_INCREASINGNUMBER";
-
- my $counter = 1;
- my $created = 0;
- my $localdirectory = "";
-
- do
- {
- $localdirectory = $directory;
- $localdirectory =~ s/INCREASINGNUMBER/$counter/;
- $counter++;
-
- if ( ! -d $localdirectory )
- {
- create_directory($localdirectory);
- $created = 1;
- }
- }
- while ( ! $created );
-
- return $localdirectory;
-}
-
-######################################################
-# Creating a unique directory with pid extension
-######################################################
-
-sub create_pid_directory
-{
- my ($directory) = @_;
-
- $directory =~ s/\Q$installer::globals::separator\E\s*$//;
- my $pid = $$; # process id
- my $time = time(); # time
-
- $directory = $directory . "_" . $pid . $time;
-
- if ( ! -d $directory ) { create_directory($directory); }
- else { installer::exiter::exit_program("ERROR: Directory $directory already exists!", "create_pid_directory"); }
-
- return $directory;
-}
-
-##############################################################
-# Reading all files from a directory and its subdirectories
-##############################################################
-
-sub read_complete_directory
-{
- my ($directory, $pathstring, $filecollector) = @_;
-
- my @content = ();
- opendir(DIR, $directory);
- @content = readdir(DIR);
- closedir(DIR);
-
- my $onefile;
-
- foreach $onefile (@content)
- {
- if ((!($onefile eq ".")) && (!($onefile eq "..")))
- {
- my $completefilename = $directory . $installer::globals::separator . $onefile;
- my $sep = "";
- if ( $pathstring ne "" ) { $sep = $installer::globals::separator; }
-
- if ( ! -d $completefilename ) # only files, no directories
- {
- my $content = $pathstring . $sep . $onefile;
- push(@{$filecollector}, $content);
- }
- else # recursive for directories
- {
- my $newpathstring = $pathstring . $sep . $onefile;
- read_complete_directory($completefilename, $newpathstring, $filecollector);
- }
- }
- }
-}
-
-##############################################################
-# Reading all files from a directory and its subdirectories
-# Version 2
-##############################################################
-
-sub read_full_directory {
- my ( $currentdir, $pathstring, $collector ) = @_;
- my $item;
- my $fullname;
- local *DH;
-
- unless (opendir(DH, $currentdir))
- {
- return;
- }
- while (defined ($item = readdir(DH)))
- {
- next if($item eq "." or $item eq "..");
- $fullname = $currentdir . $installer::globals::separator . $item;
- my $sep = "";
- if ( $pathstring ne "" ) { $sep = $installer::globals::separator; }
-
- if( -d $fullname)
- {
- my $newpathstring = $pathstring . $sep . $item;
- read_full_directory($fullname, $newpathstring, $collector) if(-d $fullname);
- }
- else
- {
- my $content = $pathstring . $sep . $item;
- push(@{$collector}, $content);
- }
- }
- closedir(DH);
- return
-}
-
-##############################################################
-# Removing all empty directories below a specified directory
-##############################################################
-
-sub remove_empty_dirs_in_folder
-{
- my ( $dir ) = @_;
-
- my @content = ();
- my $infoline = "";
-
- $dir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- if ( -d $dir )
- {
- opendir(DIR, $dir);
- @content = readdir(DIR);
- closedir(DIR);
-
- my $oneitem;
-
- foreach $oneitem (@content)
- {
- if ((!($oneitem eq ".")) && (!($oneitem eq "..")))
- {
- my $item = $dir . $installer::globals::separator . $oneitem;
-
- if ( -d $item ) # recursive
- {
- remove_empty_dirs_in_folder($item);
- }
- }
- }
-
- # try to remove empty directory
- my $returnvalue = rmdir $dir;
-
- if ( $returnvalue )
- {
- $infoline = "Successfully removed empty dir $dir\n";
- push(@installer::globals::logfileinfo, $infoline);
- }
-
- }
-
-}
-
-1;