You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by af...@apache.org on 2013/12/02 17:37:28 UTC
svn commit: r1547091 - in /openoffice/trunk/main/solenv/bin: ./
modules/installer/ modules/installer/windows/
Author: af
Date: Mon Dec 2 16:37:27 2013
New Revision: 1547091
URL: http://svn.apache.org/r1547091
Log:
123729: More general cleanup in installer scripts.
Modified:
openoffice/trunk/main/solenv/bin/make_installer.pl
openoffice/trunk/main/solenv/bin/modules/installer/globals.pm
openoffice/trunk/main/solenv/bin/modules/installer/parameter.pm
openoffice/trunk/main/solenv/bin/modules/installer/scppatchsoname.pm
openoffice/trunk/main/solenv/bin/modules/installer/scriptitems.pm
openoffice/trunk/main/solenv/bin/modules/installer/setupscript.pm
openoffice/trunk/main/solenv/bin/modules/installer/windows/assembly.pm
openoffice/trunk/main/solenv/bin/modules/installer/windows/component.pm
openoffice/trunk/main/solenv/bin/modules/installer/windows/directory.pm
openoffice/trunk/main/solenv/bin/modules/installer/windows/featurecomponent.pm
openoffice/trunk/main/solenv/bin/modules/installer/windows/file.pm
openoffice/trunk/main/solenv/bin/modules/installer/windows/idtglobal.pm
openoffice/trunk/main/solenv/bin/modules/installer/windows/inifile.pm
openoffice/trunk/main/solenv/bin/modules/installer/windows/msiglobal.pm
openoffice/trunk/main/solenv/bin/modules/installer/windows/registry.pm
openoffice/trunk/main/solenv/bin/modules/installer/worker.pm
Modified: openoffice/trunk/main/solenv/bin/make_installer.pl
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/make_installer.pl?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/make_installer.pl (original)
+++ openoffice/trunk/main/solenv/bin/make_installer.pl Mon Dec 2 16:37:27 2013
@@ -256,25 +256,53 @@ sub MakeWindowsBuild ($$$$$$$$$$$$$$$$$$
$modulesinproductlanguageresolvedarrayref = installer::windows::feature::sort_feature($modulesinproductlanguageresolvedarrayref);
installer::windows::feature::create_feature_table($modulesinproductlanguageresolvedarrayref, $newidtdir, $languagesarrayref, $allvariableshashref);
- installer::windows::featurecomponent::create_featurecomponent_table($filesinproductlanguageresolvedarrayref, $registryitemsinproductlanguageresolvedarrayref, $newidtdir);
+ installer::windows::featurecomponent::create_featurecomponent_table(
+ $filesinproductlanguageresolvedarrayref,
+ $registryitemsinproductlanguageresolvedarrayref,
+ $newidtdir);
- installer::windows::media::create_media_table($filesinproductlanguageresolvedarrayref, $newidtdir, $allvariableshashref);
+ installer::windows::media::create_media_table(
+ $filesinproductlanguageresolvedarrayref,
+ $newidtdir,
+ $allvariableshashref);
- installer::windows::font::create_font_table($filesinproductlanguageresolvedarrayref, $newidtdir);
+ installer::windows::font::create_font_table(
+ $filesinproductlanguageresolvedarrayref,
+ $newidtdir);
# Attention: The table "Shortcut.idt" contains language specific strings -> parameter: $languagesarrayref !
# Attention: Shortcuts (Folderitems) have icon files, that have to be copied into the Icon directory (last parameter)
my @iconfilecollector = ();
- installer::windows::shortcut::create_shortcut_table($filesinproductlanguageresolvedarrayref, $linksinproductlanguageresolvedarrayref, $folderinproductlanguageresolvedarrayref, $folderitemsinproductlanguageresolvedarrayref, $directoriesforepmarrayref, $newidtdir, $languagesarrayref, $includepatharrayref, \@iconfilecollector);
+ installer::windows::shortcut::create_shortcut_table(
+ $filesinproductlanguageresolvedarrayref,
+ $linksinproductlanguageresolvedarrayref,
+ $folderinproductlanguageresolvedarrayref,
+ $folderitemsinproductlanguageresolvedarrayref,
+ $directoriesforepmarrayref,
+ $newidtdir,
+ $languagesarrayref,
+ $includepatharrayref,
+ \@iconfilecollector);
- installer::windows::inifile::create_inifile_table($inifiletableentries, $filesinproductlanguageresolvedarrayref, $newidtdir);
+ installer::windows::inifile::create_inifile_table(
+ $inifiletableentries,
+ $filesinproductlanguageresolvedarrayref,
+ $newidtdir);
- installer::windows::icon::create_icon_table(\@iconfilecollector, $newidtdir); # creating the icon table with all iconfiles used as shortcuts (FolderItems)
+ installer::windows::icon::create_icon_table(
+ \@iconfilecollector,
+ $newidtdir); # creating the icon table with all iconfiles used as shortcuts (FolderItems)
- installer::windows::createfolder::create_createfolder_table($directoriesforepmarrayref, $filesinproductlanguageresolvedarrayref, $newidtdir, $allvariableshashref);
+ installer::windows::createfolder::create_createfolder_table(
+ $directoriesforepmarrayref,
+ $filesinproductlanguageresolvedarrayref,
+ $newidtdir,
+ $allvariableshashref);
- installer::windows::upgrade::create_upgrade_table($newidtdir, $allvariableshashref);
+ installer::windows::upgrade::create_upgrade_table(
+ $newidtdir,
+ $allvariableshashref);
if ( ! $installer::globals::languagepack ) # the following tables not for language packs
{
@@ -384,7 +412,9 @@ sub MakeWindowsBuild ($$$$$$$$$$$$$$$$$$
{
my $licensefilesource = installer::windows::idtglobal::get_rtflicensefilesource($onelanguage, $includepatharrayref_lang);
my $licensefile = installer::files::read_file($licensefilesource);
- installer::scpzipfiles::replace_all_ziplistvariables_in_rtffile($licensefile, $allvariableshashref);
+ installer::scpzipfiles::replace_all_ziplistvariables_in_rtffile(
+ $licensefile,
+ $allvariableshashref);
my $controltablename = $languageidtdir . $installer::globals::separator . "Control.idt";
my $controltable = installer::files::read_file($controltablename);
installer::windows::idtglobal::add_licensefile_to_database($licensefile, $controltable);
@@ -519,9 +549,6 @@ sub MakeWindowsBuild ($$$$$$$$$$$$$$$$$$
$installer::globals::packjobref = installer::windows::msiglobal::generate_cab_file_list($filesinproductlanguageresolvedarrayref, $installdir, $ddfdir, $allvariableshashref);
- # Update and patch reasons the pack order needs to be saved
- installer::windows::msiglobal::save_packorder();
-
$installer::logger::Info->print("\n");
#######################################################
@@ -545,7 +572,6 @@ sub MakeWindowsBuild ($$$$$$$$$$$$$$$$$$
installer::worker::clean_output_tree(); # removing directories created in the output tree
($is_success, $finalinstalldir) = installer::worker::analyze_and_save_logfile($loggingdir, $installdir, $installlogdir, $allsettingsarrayref, $languagestringref, $current_install_number);
-
#######################################################
# Creating download installation set
#######################################################
@@ -563,6 +589,7 @@ sub MakeWindowsBuild ($$$$$$$$$$$$$$$$$$
my $downloaddir = installer::download::create_download_sets($finalinstalldir, $includepatharrayref, $allvariableshashref, $$downloadname, $languagestringref, $languagesarrayref);
installer::worker::analyze_and_save_logfile($loggingdir, $downloaddir, $installlogdir, $allsettingsarrayref, $languagestringref, $current_install_number);
}
+
}
@@ -821,7 +848,6 @@ sub MakeNonWindowsBuild ($$$$$$$$$$$$$$$
$installer::globals::makelinuxlinkrpm = 0;
if ( $installer::globals::patch ) { $installer::globals::call_epm = 1; } # enabling packing again
$run = 1;
-
}
if (( ! $installer::globals::makelinuxlinkrpm ) && ( ! $run ))
@@ -833,7 +859,6 @@ sub MakeNonWindowsBuild ($$$$$$$$$$$$$$$
if ( $installer::globals::patch ) { $installer::globals::call_epm = 0; } # no packing of core module in patch
$shellscriptsfilename = ""; # shell scripts only need to be included into the link rpm
$run = 1;
-
}
}
}
@@ -961,7 +986,7 @@ sub MakeNonWindowsBuild ($$$$$$$$$$$$$$$
{
# changing into the "install" directory to create installation sets
- $currentdir = cwd(); # $currentdir is global in this file
+ my $currentdir = cwd(); # $currentdir is global in this file
chdir($installdir); # changing into install directory ($installdir is global in this file)
@@ -1186,8 +1211,6 @@ sub MakeNonWindowsBuild ($$$$$$$$$$$$$$$
}
-
-
#################################################
# Main program
#################################################
@@ -1206,6 +1229,7 @@ $installer::logger::Global->add_timestam
# While there is no language set and logger::Lang is not yet tied to a log file,
# forward its output to logger::Global.
$installer::logger::Lang->set_forward($installer::logger::Global);
+$installer::logger::Info->set_forward($installer::logger::Global);
#########################################
# Checking the environment and setting
@@ -1254,89 +1278,29 @@ my $current_install_number = "";
# Checking the system requirements
######################################
-$installer::logger::Info->print( "... checking required files ...\n" );
+$installer::logger::Info->print("... checking required files ...\n");
installer::control::check_system_path();
my $pathvariableshashref = installer::environment::create_pathvariables($environmentvariableshashref);
-###############################################
-# Checking saved setting for Windows patches
-###############################################
-
-if (( $installer::globals::iswindowsbuild ) && ( $installer::globals::prepare_winpatch )) { installer::windows::msiglobal::read_saved_mappings(); }
-
###################################################
# Analyzing the settings and variables in zip.lst
###################################################
-installer::logger::globallog("zip list file: $installer::globals::ziplistname");
-
-my $ziplistref = installer::files::read_file($installer::globals::ziplistname);
-
$installer::logger::Info->print( "... analyzing $installer::globals::ziplistname ... \n" );
-my ($productblockref, $parent) = installer::ziplist::getproductblock($ziplistref, $installer::globals::product, 1); # product block from zip.lst
-
-my ($settingsblockref, undef) = installer::ziplist::getproductblock($productblockref, "Settings", 0); # settings block from zip.lst
-
-$settingsblockref = installer::ziplist::analyze_settings_block($settingsblockref); # select data from settings block in zip.lst
-
-my $allsettingsarrayref = installer::ziplist::get_settings_from_ziplist($settingsblockref);
-
-my $allvariablesarrayref = installer::ziplist::get_variables_from_ziplist($settingsblockref);
-
-my ($globalproductblockref, undef) = installer::ziplist::getproductblock($ziplistref, $installer::globals::globalblock, 0); # global product block from zip.lst
-
-while (defined $parent)
+my ($allvariableshashref,
+ $allsettingsarrayref)
+ = installer::ziplist::read_openoffice_lst_file(
+ $installer::globals::ziplistname,
+ $installer::globals::product,
+ $loggingdir);
+$installer::logger::Lang->printf("variables:\n");
+foreach my $key (sort keys %$allvariableshashref)
{
- my $parentproductblockref;
- ($parentproductblockref, $parent) = installer::ziplist::getproductblock(
- $ziplistref, $parent, 1);
- my ($parentsettingsblockref, undef) = installer::ziplist::getproductblock(
- $parentproductblockref, "Settings", 0);
- $parentsettingsblockref = installer::ziplist::analyze_settings_block(
- $parentsettingsblockref);
- my $allparentsettingsarrayref =
- installer::ziplist::get_settings_from_ziplist($parentsettingsblockref);
- my $allparentvariablesarrayref =
- installer::ziplist::get_variables_from_ziplist($parentsettingsblockref);
- $allsettingsarrayref =
- installer::converter::combine_arrays_from_references_first_win(
- $allsettingsarrayref, $allparentsettingsarrayref)
- if $#{$allparentsettingsarrayref} > -1;
- $allvariablesarrayref =
- installer::converter::combine_arrays_from_references_first_win(
- $allvariablesarrayref, $allparentvariablesarrayref)
- if $#{$allparentvariablesarrayref} > -1;
+ $installer::logger::Global->printf(" %s -> %s\n", $key, $allvariableshashref->{$key});
}
-
-if ( $#{$globalproductblockref} > -1 )
-{
- my ($globalsettingsblockref, undef) = installer::ziplist::getproductblock($globalproductblockref, "Settings", 0); # settings block from zip.lst
-
- $globalsettingsblockref = installer::ziplist::analyze_settings_block($globalsettingsblockref); # select data from settings block in zip.lst
- my $allglobalsettingsarrayref = installer::ziplist::get_settings_from_ziplist($globalsettingsblockref);
-
- my $allglobalvariablesarrayref = installer::ziplist::get_variables_from_ziplist($globalsettingsblockref);
-
- if ( $#{$allglobalsettingsarrayref} > -1 ) { $allsettingsarrayref = installer::converter::combine_arrays_from_references_first_win($allsettingsarrayref, $allglobalsettingsarrayref); }
- if ( $#{$allglobalvariablesarrayref} > -1 ) { $allvariablesarrayref = installer::converter::combine_arrays_from_references_first_win($allvariablesarrayref, $allglobalvariablesarrayref); }
-}
-
-$allsettingsarrayref = installer::ziplist::remove_multiples_from_ziplist($allsettingsarrayref); # the settings from the zip.lst
-
-$allvariablesarrayref = installer::ziplist::remove_multiples_from_ziplist($allvariablesarrayref);
-
-installer::ziplist::replace_variables_in_ziplist_variables($allvariablesarrayref);
-
-my $allvariableshashref = installer::converter::convert_array_to_hash($allvariablesarrayref); # the variables from the zip.lst
-
-installer::ziplist::set_default_productversion_if_required($allvariableshashref);
-
-installer::ziplist::add_variables_to_allvariableshashref($allvariableshashref);
-
-installer::ziplist::overwrite_ooovendor( $allvariableshashref );
########################################################
# Check if this is simple packaging mechanism
@@ -1684,19 +1648,19 @@ for (;1;last)
if ( $installer::globals::updatepack ) { $shipinstalldir = installer::control::determine_ship_directory($languagestringref); }
- ###################################################################
- # Reading an existing msi database, to prepare update and patch
- ###################################################################
-
##############################################
# Setting global code variables for Windows
##############################################
if (!($installer::globals::is_copy_only_project))
{
- if (( $installer::globals::iswindowsbuild ) && ( $installer::globals::packageformat ne "archive" ) && ( $installer::globals::packageformat ne "installed" ))
+ if (( $installer::globals::iswindowsbuild )
+ && ( $installer::globals::packageformat ne "archive" )
+ && ( $installer::globals::packageformat ne "installed" ))
{
- installer::windows::msiglobal::set_global_code_variables($languagesarrayref, $allvariableshashref);
+ installer::windows::msiglobal::set_global_code_variables(
+ $languagesarrayref,
+ $allvariableshashref);
}
}
@@ -1745,7 +1709,6 @@ for (;1;last)
}
installer::scriptitems::changing_name_of_language_dependent_keys($filesinproductlanguageresolvedarrayref);
-
if ( $installer::globals::iswin and $^O =~ /MSWin/i ) { installer::converter::convert_slash_to_backslash($filesinproductlanguageresolvedarrayref); }
$filesinproductlanguageresolvedarrayref = installer::scriptitems::remove_non_existent_languages_in_productlists($filesinproductlanguageresolvedarrayref, $languagestringref, "Name", "file");
@@ -1848,6 +1811,7 @@ for (;1;last)
($directoriesforepmarrayref, $alldirectoryhash) = installer::scriptitems::collect_directories_with_create_flag_from_directoryarray($dirsinproductlanguageresolvedarrayref, $alldirectoryhash);
# installer::sorter::sorting_array_of_hashes($directoriesforepmarrayref, "HostName");
+ # if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "directoriesforepmlist3.log", $directoriesforepmarrayref); }
#########################################################
# language dependent scpactions part
@@ -2054,7 +2018,15 @@ for (;1;last)
if (( $installer::globals::iswindowsbuild ) && ( ! $installer::globals::patch )) # Windows specific items: Folder, FolderItem, RegistryItem
{
$installer::logger::Info->print( "... creating inf files ...\n" );
- installer::worker::create_inf_file($filesinproductlanguageresolvedarrayref, $registryitemsinproductlanguageresolvedarrayref, $folderinproductlanguageresolvedarrayref, $folderitemsinproductlanguageresolvedarrayref, $modulesinproductlanguageresolvedarrayref, $languagesarrayref, $languagestringref, $allvariableshashref);
+ installer::worker::create_inf_file(
+ $filesinproductlanguageresolvedarrayref,
+ $registryitemsinproductlanguageresolvedarrayref,
+ $folderinproductlanguageresolvedarrayref,
+ $folderitemsinproductlanguageresolvedarrayref,
+ $modulesinproductlanguageresolvedarrayref,
+ $languagesarrayref,
+ $languagestringref,
+ $allvariableshashref);
}
###########################################
@@ -2096,16 +2068,13 @@ for (;1;last)
installer::packagelist::log_packages_content($packages);
installer::packagelist::create_module_destination_hash($packages, $allvariableshashref);
-
- # saving debug info, before starting part 2
- if ( $installer::globals::debug ) { installer::logger::savedebug($installer::globals::exitlog); }
-
#################################################
# Part 2: The platform dependent part
#################################################
- if ($installer::globals::iswindowsbuild)
+ if ( $installer::globals::iswindowsbuild )
{
+ # Create .idt tables and a .msi file.
MakeWindowsBuild(
$allvariableshashref,
$allsettingsarrayref,
@@ -2130,6 +2099,7 @@ for (;1;last)
}
else
{
+ # Creating epm list file.
MakeNonWindowsBuild(
$allvariableshashref,
$allsettingsarrayref,
Modified: openoffice/trunk/main/solenv/bin/modules/installer/globals.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/globals.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/globals.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/globals.pm Mon Dec 2 16:37:27 2013
@@ -31,6 +31,8 @@ BEGIN
{
$prog="make_installer.pl";
+ # WARNING: the following lines are matched verbatim in i18npool/source/isolang/langid.pl
+
@noMSLocaleLangs = (
"br",
"bs",
@@ -232,7 +234,7 @@ BEGIN
$creating_windows_installer_patch = 0;
$strip = 1;
-
+
$globallogging = 0;
$logfilename = "logfile.log"; # the default logfile name for global errors
# @logfileinfo = ();
@@ -411,8 +413,6 @@ BEGIN
$previous_idt_dir = "";
$updatepack = 0;
$msitranpath = "";
- $insert_file_at_end = 0;
- $newfilesexist = 0;
$usesharepointpath = 0;
%newfilescollector = ();
@@ -489,10 +489,6 @@ BEGIN
$isunix = 0;
$iswin = 1;
$archiveformat = ".zip";
- %savedmapping = ();
- %savedrevmapping = ();
- %savedrev83mapping = ();
- %saved83dirmapping = ();
}
elsif ( $plat =~ /os2/i )
{
Modified: openoffice/trunk/main/solenv/bin/modules/installer/parameter.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/parameter.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/parameter.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/parameter.pm Mon Dec 2 16:37:27 2013
@@ -171,7 +171,7 @@ sub getparameter
exit(-1);
}
}
-
+
# Usage of simple installer (not for Windows):
# $PERL -w $SOLARENV/bin/make_installer.pl \
# -f openoffice.lst -l en-US -p OpenOffice \
@@ -634,7 +634,6 @@ sub outputparameter ()
foreach my $line (@output)
{
$installer::logger::Info->print($line);
- $installer::logger::Global->print($line);
}
}
Modified: openoffice/trunk/main/solenv/bin/modules/installer/scppatchsoname.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/scppatchsoname.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/scppatchsoname.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/scppatchsoname.pm Mon Dec 2 16:37:27 2013
@@ -94,6 +94,8 @@ sub replace_productname_in_file
my $replacestring = "";
for ( my $i = 1; $i <= 80; $i++ ) { $replacestring .= $onestring; }
+ $installer::logger::Lang->printf("processing PATCH_SO_NAME: %s -> %s\n", $sourcepath, $destpath);
+
my $productname = $variableshashref->{'PRODUCTNAME'} . " " . $variableshashref->{'PRODUCTVERSION'};
if ( exists($onefilehash->{'FileDescription'}) ) { $productname = $onefilehash->{'FileDescription'}; }
my $unicode_productname = convert_to_unicode($productname);
@@ -152,7 +154,8 @@ sub resolving_patchsoname_flag
# if (!(-f $destinationpath)) # do nothing if the file already exists
# {
-
+
+ $installer::logger::Lang->printf("PATCH_SO_NAME: copying '%s' to '%s'\n", $sourcepath, $movepath);
my $copysuccess = installer::systemactions::copy_one_file($sourcepath, $movepath);
if ( $copysuccess )
Modified: openoffice/trunk/main/solenv/bin/modules/installer/scriptitems.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/scriptitems.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/scriptitems.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/scriptitems.pm Mon Dec 2 16:37:27 2013
@@ -2617,9 +2617,10 @@ sub build_modulegids_table ($$)
# build map of item names to list of respective module gids
# containing these items
- foreach my $onemodule (@{$modulesref})
+ foreach my $onemodule (@$modulesref)
{
next if ! defined $onemodule->{$itemname};
+
# these are the items contained in this module
# eg. Files = (gid_a_b_c,gid_d_e_f)
my $module_gids = $onemodule->{$itemname};
@@ -2649,10 +2650,9 @@ sub get_string_of_modulegids_for_itemgid
my $haslanguagemodule = 0;
my %foundmodules = ();
- # print STDERR "lookup '" . lc($itemgid) . "'\n";
my $gid_list = $module_lookup_table->{lc($itemgid)};
- foreach my $gid (@{$gid_list})
+ foreach my $gid (@$gid_list)
{
$foundmodules{$gid} = 1;
# Is this module a language module? This info should be stored at the file.
@@ -2674,8 +2674,8 @@ sub get_string_of_modulegids_for_itemgid
{
installer::exiter::exit_program(
sprintf(
- "ERROR: \"\" is assigned to modules with flag "
- . "\"LANGUAGEMODULE\" and also to modules without this flag! Modules: %s",
+ "ERROR: \"%s\" is assigned to modules with flag "
+ ."\"LANGUAGEMODULE\" and also to modules without this flag! Modules: %s",
$itemgid,
$allmodules),
"get_string_of_modulegids_for_itemgid");
Modified: openoffice/trunk/main/solenv/bin/modules/installer/setupscript.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/setupscript.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/setupscript.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/setupscript.pm Mon Dec 2 16:37:27 2013
@@ -80,227 +80,157 @@ sub get_all_scriptvariables_from_install
{
my ($scriptref, $script_filename) = @_;
- my @installobjectvariables;
+ my $installobjectvariables = {};
- for ( my $i = 0; $i <= $#{$scriptref}; $i++ )
- {
- my $line = ${$scriptref}[$i];
-
- if ( $line =~ /^\s*Installation\s+\w+\s*$/ ) # should be the first line
- {
- my $counter = $i+1;
- my $installline = ${$scriptref}[$counter];
-
- while (!($installline =~ /^\s*End\s*$/ ))
- {
- if ( $installline =~ /^\s*(\w+)\s+\=\s*(.*?)\s*\;\s*$/ )
- {
- my $key = $1;
- my $value = $2;
+ my $firstline = $scriptref->[0];
+ if ($firstline !~ /^\s*Installation\s+\w+\s*$/)
+ {
+ installer::logger::PrintError("did not find 'Installation' keyword in first line of %s\n",
+ $script_filename);
+ }
+ foreach my $line (@$scriptref)
+ {
+ next if $line =~ /^\s*Installation\s+\w+\s*$/; # Already processed.
+ last if $line =~ /^\s*End\s*$/;
+
+ if ($line =~ /^\s*(\w+)\s+\=\s*\"?(.*?)\"?\s*\;\s*$/ )
+ {
+ my ($key, $value) = ($1, $2);
- # removing leading and ending " in $value
-
- if ( $value =~ /^\s*\"(.*)\"\s*$/ )
- {
- $value = $1;
- }
-
- $key = "\%" . uc($key); # $key is %PRODUCTNAME
-
- my $input = $key . " " . $value . "\n"; # $key can only be the first word
-
- push(@installobjectvariables ,$input);
- }
+ $installobjectvariables->{uc($key)} = $value;
+ }
- $counter++;
- $installline = ${$scriptref}[$counter];
- }
- }
-
- last; # not interesting after installation object
}
- return \@installobjectvariables;
+ return $installobjectvariables;
}
######################################################################
# Including LCPRODUCTNAME into the array
######################################################################
-sub add_lowercase_productname_setupscriptvariable
+sub add_lowercase_productname_setupscriptvariable ($)
{
my ( $variablesref ) = @_;
- for ( my $j = 0; $j <= $#{$variablesref}; $j++ )
- {
- my $variableline = ${$variablesref}[$j];
-
- my ($key, $value);
-
- if ( $variableline =~ /^\s*\%(\w+?)\s+(.*?)\s*$/ )
- {
- $key = $1;
- $value = $2;
-
- if ( $key eq "PRODUCTNAME" )
- {
- my $newline = "\%LCPRODUCTNAME " . lc($value) . "\n";
- push(@{$variablesref} ,$newline);
- my $original = $value;
- $value =~ s/\s*//g;
- $newline = "\%ONEWORDPRODUCTNAME " . $value . "\n";
- push(@{$variablesref} ,$newline);
- $newline = "\%LCONEWORDPRODUCTNAME " . lc($value) . "\n";
- push(@{$variablesref} ,$newline);
- $value = $original;
- $value =~ s/\s*$//g;
- $value =~ s/^\s*//g;
- $value =~ s/ /\%20/g;
- $newline = "\%MASKEDPRODUCTNAME " . $value . "\n";
- push(@{$variablesref} ,$newline);
- $value = $original;
- $value =~ s/\s/\_/g;
- # if ( $value =~ /^\s*(.*?)\_(\w)(.*?)\_(\w)(.*)\s*$/ ) { $value = $1 . $2 . $4; }
- $newline = "\%UNIXPRODUCTNAME " . lc($value) . "\n";
- push(@{$variablesref} ,$newline);
- $newline = "\%SYSTEMINTUNIXPACKAGENAME " . lc($value) . "\n";
- push(@{$variablesref} ,$newline);
- # if ( $value =~ /^\s*(.*?)\_(\w)(.*?)\_(\w)(.*)\s*$/ ) { $value = $1 . $2 . $4; }
- # if ( $value =~ /^\s*(.*?)\_(\w)(.*?)\_(\w)(.*)\s*$/ ) { $value = $2 . $4; }
- $newline = "\%UNIXPACKAGENAME " . lc($value) . "\n";
- push(@{$variablesref} ,$newline);
- $value = $original;
- $value =~ s/\s/\_/g;
- $value =~ s/\.//g;
- # if ( $value =~ /^\s*(.*?)\_(\w)(.*?)\_(\w)(.*)\s*$/ ) { $value = $1 . $2 . $4; }
- $newline = "\%WITHOUTDOTUNIXPRODUCTNAME " . lc($value) . "\n";
- push(@{$variablesref} ,$newline);
- # if ( $value =~ /^\s*(.*?)\_(\w)(.*?)\_(\w)(.*)\s*$/ ) { $value = $1 . $2 . $4; }
- # if ( $value =~ /^\s*(.*?)\_(\w)(.*?)\_(\w)(.*)\s*$/ ) { $value = $2 . $4; }
- $newline = "\%WITHOUTDOTUNIXPACKAGENAME " . lc($value) . "\n";
- push(@{$variablesref} ,$newline);
- $newline = "\%SOLARISBRANDPACKAGENAME " . lc($value) . "\n";
- push(@{$variablesref} ,$newline);
- $value = $original;
- }
- elsif ( $key eq "PRODUCTEXTENSION" )
- {
- my $newline = "\%LCPRODUCTEXTENSION " . lc($value) . "\n";
- push(@{$variablesref} ,$newline);
- }
- elsif ( $key eq "PRODUCTVERSION" )
- {
- $value =~ s/\.//g;
- my $newline = "\%WITHOUTDOTPRODUCTVERSION " . $value . "\n";
- push(@{$variablesref} ,$newline);
- }
- elsif ( $key eq "OOOBASEVERSION" )
- {
- $value =~ s/\.//g;
- my $newline = "\%WITHOUTDOTOOOBASEVERSION " . $value . "\n";
- push(@{$variablesref} ,$newline);
- }
-
+ my %additional_variables = ();
+
+ while (my ($key, $value) = each %$variablesref)
+ {
+ if ($key eq "PRODUCTNAME")
+ {
+ $additional_variables{"LCPRODUCTNAME"} = lc($value);
+ my $original = $value;
+ $value =~ s/\s+//g;
+ $additional_variables{"ONEWORDPRODUCTNAME"} = $value;
+ $additional_variables{"LCONEWORDPRODUCTNAME"} = lc($value);
+ $value = $original;
+ $value =~ s/(^\s+|\s+$)//g;
+ $value =~ s/ /\%20/g;
+ $additional_variables{"MASKEDPRODUCTNAME"} = $value;
+ $value = $original;
+ $value =~ s/\s/\_/g;
+ $additional_variables{"UNIXPRODUCTNAME"} = lc($value);
+ $additional_variables{"SYSTEMINTUNIXPACKAGENAME"} = lc($value);
+ $additional_variables{"UNIXPACKAGENAME"} = lc($value);
+ $value = $original;
+ $value =~ s/\s/\_/g;
+ $value =~ s/\.//g;
+ $additional_variables{"WITHOUTDOTUNIXPRODUCTNAME"} = lc($value);
+ $additional_variables{"WITHOUTDOTUNIXPACKAGENAME"} = lc($value);
+ $additional_variables{"SOLARISBRANDPACKAGENAME"} = lc($value);
+ }
+ elsif ($key eq "PRODUCTEXTENSION")
+ {
+ $additional_variables{"LCPRODUCTEXTENSION"} = lc($value);
+ }
+ elsif ($key eq "PRODUCTVERSION")
+ {
+ $value =~ s/\.//g;
+ $additional_variables{"WITHOUTDOTPRODUCTVERSION"} = $value;
+ }
+ elsif ($key eq "OOOBASEVERSION")
+ {
+ $value =~ s/\.//g;
+ $additional_variables{"WITHOUTDOTOOOBASEVERSION"} = $value;
}
}
+
+ while (my ($key, $value) = each %additional_variables)
+ {
+ $variablesref->{$key} = $value;
+ }
}
######################################################################
# Resolving the new introduced lowercase script variables
######################################################################
-sub resolve_lowercase_productname_setupscriptvariable
+sub resolve_lowercase_productname_setupscriptvariable ($)
{
- my ( $variablesref ) = @_;
-
- my %variables = ();
-
- # First step: Collecting variables
-
- for ( my $j = 0; $j <= $#{$variablesref}; $j++ )
- {
- my $variableline = ${$variablesref}[$j];
+ my ($variablesref) = @_;
- my ($key, $value);
-
- if ( $variableline =~ /^\s*\%(\w+?)\s+(.*?)\s*$/ )
- {
- $key = $1;
- $value = $2;
- $variables{$key} = $value;
- }
- }
-
- # Second step: Resolving variables
-
- for ( my $j = 0; $j <= $#{$variablesref}; $j++ )
- {
- if ( ${$variablesref}[$j] =~ /\$\{(.*?)\}/ )
- {
- my $key = $1;
- ${$variablesref}[$j] =~ s/\$\{\Q$key\E\}/$variables{$key}/g;
+ while (my ($key,$value) = each %$variablesref)
+ {
+ if ($value =~ /\$\{(.*?)\}/)
+ {
+ my $varname = $1;
+ my $replacement = $variablesref->{$varname};
+ my $new_value = $value;
+ $new_value =~ s/\$\{\Q$varname\E\}/$replacement/g;
+ $variablesref->{$key} = $new_value;
}
}
-
}
+
+
+
######################################################################
# Replacing all setup script variables inside the setup script file
######################################################################
-sub replace_all_setupscriptvariables_in_script
+sub replace_all_setupscriptvariables_in_script ($$)
{
- my ( $scriptref, $variablesref ) = @_;
+ my ($script_lines, $variables) = @_;
installer::logger::include_header_into_globallogfile("Replacing variables in setup script (start)");
- # make hash of variables to be substituted if they appear in the script
- my %subs;
- for ( my $j = 0; $j <= $#{$variablesref}; $j++ )
- {
- my $variableline = ${$variablesref}[$j];
-
- if ( $variableline =~ /^\s*(\%\w+?)\s+(.*?)\s*$/ )
- {
- $subs{$1}= $2;
- }
- }
-
# This is far faster than running a regexp for each line
- my $bigstring = '';
- for my $line (@{$scriptref}) { $bigstring = $bigstring . $line; }
+ my $bigstring = join("", @$script_lines);
- foreach my $key ( keys %subs )
+ while (my ($key,$value) = each %$variables)
{
# Attention: It must be possible to substitute "%PRODUCTNAMEn", "%PRODUCTNAME%PRODUCTVERSIONabc"
- my $value = $subs{$key};
- $bigstring =~ s/$key/$value/g;
+ my $count = ($bigstring =~ s/%$key/$value/g);
+ if ($count > 0)
+ {
+ $installer::logger::Lang->printf("replaced %s %d times\n", $key, $count);
+ }
}
my @newlines = split /\n/, $bigstring;
- $scriptref = \@newlines;
# now check for any mis-named '%' variables that we have left
my $num = 0;
- for my $check (@newlines)
+ foreach my $line (@newlines)
{
$num++;
- if ( $check =~ /^.*\%\w+.*$/ )
+ if ($line =~ /\%\w+/)
{
- if (( $check =~ /%1/ ) || ( $check =~ /%2/ ) || ( $check =~ /%verify/ ))
+ if (( $line =~ /%1/ ) || ( $line =~ /%2/ ) || ( $line =~ /%verify/ ))
{
next;
}
- $installer::logger::Global->printf(
- "WARNING: mis-named or un-known '%s' variable in setup script at line %s:\n",
- "%", $num);
- $installer::logger::Global->printf("%s\n", $check);
+ $installer::logger::Info->printf(
+ "WARNING: mis-named or un-known %%-variable in setup script at line %s:\n",$num);
+ $installer::logger::Info->printf("%s\n", $line);
}
}
installer::logger::include_header_into_globallogfile("Replacing variables in setup script (end)");
- return $scriptref;
+ return \@newlines;
}
#######################################################################
@@ -471,21 +401,13 @@ sub prepare_non_advertised_files
# object, the installation object is more important
#####################################################################################
-sub add_installationobject_to_variables
+sub add_installationobject_to_variables ($$)
{
- my ($allvariables, $allscriptvariablesref) = @_;
+ my ($variables, $script_variables) = @_;
- for ( my $i = 0; $i <= $#{$allscriptvariablesref}; $i++ )
+ while (my ($key, $value) = each %$script_variables)
{
- my $line = ${$allscriptvariablesref}[$i];
-
- if ( $line =~ /^\s*\%(\w+)\s+(.*?)\s*$/ )
- {
- my $key = $1;
- my $value = $2;
-
- $allvariables->{$key} = $value; # overwrite existing values from zip.lst
- }
+ $variables->{$key} = $value; # overwrite existing values from zip.lst
}
}
Modified: openoffice/trunk/main/solenv/bin/modules/installer/windows/assembly.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/windows/assembly.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/windows/assembly.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/windows/assembly.pm Mon Dec 2 16:37:27 2013
@@ -350,8 +350,10 @@ sub add_assembly_condition_into_componen
$keypath) . "\n";
${$componenttable}[$j] = $oneline;
$changed = 1;
- $installer::logger::Lang->print("Changing %s :\n", $componenttablename);
+
+ $installer::logger::Lang->printf("Changing %s :\n", $componenttablename);
$installer::logger::Lang->print($oneline);
+
last;
}
}
@@ -362,7 +364,7 @@ sub add_assembly_condition_into_componen
{
# Saving the file
installer::files::save_file($componenttablename ,$componenttable);
- $installer::logger::Lang->print("Saved idt file: %s\n", $componenttablename);
+ $installer::logger::Lang->printf("Saved idt file: %s\n", $componenttablename);
}
}
Modified: openoffice/trunk/main/solenv/bin/modules/installer/windows/component.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/windows/component.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/windows/component.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/windows/component.pm Mon Dec 2 16:37:27 2013
@@ -31,6 +31,8 @@ use installer::globals;
use installer::windows::idtglobal;
use installer::windows::language;
+use strict;
+
##############################################################
# Returning a globally unique ID (GUID) for a component
# If the component is new, a unique guid has to be created.
@@ -64,34 +66,32 @@ sub get_component_guid ($)
sub get_file_component_directory ($$$)
{
- my ($componentname, $filesref, $dirref) = @_;
+ my ($componentname, $filesref, $dirref) = @_;
- my ($component, $uniquedir);
- my $found = 0;
+ my ($component, $uniquedir);
- foreach my $onefile (@$filesref)
- {
- if ($onefile->{'componentname'} eq $componentname)
- {
+ foreach my $onefile (@$filesref)
+ {
+ if ($onefile->{'componentname'} eq $componentname)
+ {
return get_file_component_directory_for_file($onefile, $dirref);
- }
- }
-
-
+ }
+ }
+
# This component can be ignored, if it exists in a version with
# extension "_pff" (this was renamed in file::get_sequence_for_file() )
my $ignore_this_component = 0;
my $origcomponentname = $componentname;
my $componentname_pff = $componentname . "_pff";
-
+
foreach my $onefile (@$filesref)
{
if ($onefile->{'componentname'} eq $componentname_pff)
{
return "IGNORE_COMP";
- }
+ }
}
-
+
installer::exiter::exit_program(
"ERROR: Did not find component \"$origcomponentname\" in file collection",
"get_file_component_directory");
@@ -125,7 +125,7 @@ sub get_file_component_directory_for_fil
installer::pathanalyzer::get_path_from_fullqualifiedname(\$destination);
$destination =~ s/\Q$installer::globals::separator\E\s*$//;
-
+
# This path has to be defined in the directory collection at "HostName"
my $uniquedir = undef;
@@ -135,11 +135,10 @@ sub get_file_component_directory_for_fil
}
else
{
- $found = 0;
-
- foreach my $directory (@$dirref)
+ my $found = 0;
+ foreach my $directory (@$dirref)
{
- if ($directory->{'HostName'} eq $destination )
+ if ($directory->{'HostName'} eq $destination)
{
$found = 1;
$uniquedir = $directory->{'uniquename'};
@@ -153,16 +152,15 @@ sub get_file_component_directory_for_fil
"ERROR: Did not find destination $destination in directory collection",
"get_file_component_directory");
}
-
-
+
if ( $uniquedir eq $installer::globals::officeinstalldirectory )
{
$uniquedir = "INSTALLLOCATION";
}
}
-
+
$onefile->{'uniquedirname'} = $uniquedir; # saving it in the file collection
-
+
return $uniquedir
}
@@ -326,12 +324,9 @@ sub get_component_keypath ($$)
{
my ($componentname, $itemsref) = @_;
- my $found = 0;
- my $infoline = "";
-
foreach my $oneitem (@$itemsref)
{
- my $component = $oneitem->{'componentname'};
+ my $component = $oneitem->{'componentname'};
if ( ! defined $component)
{
@@ -356,14 +351,8 @@ sub get_component_keypath ($$)
return $keypath
}
-
- if ($oneitem->{'componentname'} eq $componentname)
- {
- $found = 1;
- last;
- }
}
-
+
installer::exiter::exit_program(
"ERROR: Did not find component in file/registry collection, function get_component_keypath",
"get_component_keypath");
Modified: openoffice/trunk/main/solenv/bin/modules/installer/windows/directory.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/windows/directory.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/windows/directory.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/windows/directory.pm Mon Dec 2 16:37:27 2013
@@ -30,6 +30,8 @@ use installer::pathanalyzer;
use installer::windows::idtglobal;
use installer::windows::msiglobal;
+use strict;
+
##############################################################
# Collecting all directory trees in global hash
##############################################################
@@ -73,12 +75,22 @@ sub overwrite_programfilesfolder
}
}
-##############################################################
-# Maximum length of directory name is 72.
-# Taking care of underlines, which are the separator.
-##############################################################
-sub make_short_dir_version
+
+
+=head2 make_short_dir_version($longstring)
+
+ Transform the given string into one that is at most 70 characters long.
+ That is done in two steps:
+ - Cut all parts separated by '_' or '-' down to a length of 5.
+ - Cut down the result to a length of 60 and fill it up to length 70
+ with the MD5 checksum.
+
+ This transform always returns the same result for the same string.
+ There is no counter and reference to a global set of names to make the string unique.
+
+=cut
+sub make_short_dir_version ($)
{
my ($longstring) = @_;
@@ -90,29 +102,24 @@ sub make_short_dir_version
# Splitting the string at each "underline" and allowing only $length characters per directory name.
# Checking also uniqueness and length.
- my $stringarray = installer::converter::convert_stringlist_into_array_without_newline(\$longstring, "_");
-
- foreach my $onestring ( @{$stringarray} )
+ my @outer_parts = split(/_/, $longstring);
+ foreach my $onestring (@outer_parts)
{
my $partstring = "";
if ( $onestring =~ /\-/ )
{
- my $localstringarray = installer::converter::convert_stringlist_into_array_without_newline(\$onestring, "-");
- foreach my $onelocalstring ( @{$localstringarray} )
- {
- if ( length($onelocalstring) > $length ) { $onelocalstring = substr($onelocalstring, 0, $length); }
- $partstring = $partstring . "-" . $onelocalstring;
- }
+ my @inner_parts = split(/-/, $onestring);
+ @inner_parts = map {substr($_,0,$length)} @inner_parts;
+ $partstring = join("-", @inner_parts);
$partstring =~ s/^\s*\-//;
}
else
{
- if ( length($onestring) > $length ) { $partstring = substr($onestring, 0, $length); }
- else { $partstring = $onestring; }
+ $partstring = substr($onestring, 0, $length);
}
- $shortstring = $shortstring . "_" . $partstring;
+ $shortstring .= "_" . $partstring;
}
$shortstring =~ s/^\s*\_//;
@@ -120,14 +127,8 @@ sub make_short_dir_version
# Setting unique ID to each directory
# No counter allowed, process must be absolute reproducable due to patch creation process.
- # chomp(my $id = `echo $longstring_save | md5sum | sed -e "s/ .*//g"`); # Very, very slow
- # my $subid = substr($id, 0, 9); # taking only the first 9 digits
-
my $subid = installer::windows::msiglobal::calculate_id($longstring_save, 9); # taking only the first 9 digits
-
- if ( length($shortstring) > $cutlength ) { $shortstring = substr($shortstring, 0, $cutlength); }
-
- $shortstring = $shortstring . "_" . $subid;
+ $shortstring = substr($shortstring, 0, $cutlength) . "_" . $subid;
return $shortstring;
}
@@ -558,13 +559,9 @@ sub create_directory_table ($$$$)
my $infoline;
overwrite_programfilesfolder($allvariableshashref);
- if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "directoriesforidt_local_1.log", $directoryref); }
create_unique_directorynames($directoryref, $allvariableshashref);
- if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "directoriesforidt_local_1a.log", $directoryref); }
create_defaultdir_directorynames($directoryref); # only destdir!
- if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "directoriesforidt_local_2.log", $directoryref); }
set_installlocation_directory($directoryref, $allvariableshashref);
- if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "directoriesforidt_local_3.log", $directoryref); }
installer::windows::idtglobal::write_idt_header(\@directorytable, "directory");
add_root_directories(\@directorytable, $allvariableshashref);
create_directorytable_from_collection(\@directorytable, $directoryref);
Modified: openoffice/trunk/main/solenv/bin/modules/installer/windows/featurecomponent.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/windows/featurecomponent.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/windows/featurecomponent.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/windows/featurecomponent.pm Mon Dec 2 16:37:27 2013
@@ -30,37 +30,46 @@ use installer::files;
use installer::globals;
use installer::windows::idtglobal;
+use strict;
+
+
#################################################################################
# Collecting all pairs of features and components from the files collector
#################################################################################
-sub create_featurecomponent_table_from_files_collector
+sub create_featurecomponent_table_from_files_collector ($$)
{
my ($featurecomponenttableref, $filesref) = @_;
- for ( my $i = 0; $i <= $#{$filesref}; $i++ )
+ foreach my $onefile (@$filesref)
{
- my $onefile = ${$filesref}[$i];
-
my $filecomponent = $onefile->{'componentname'};
my $filemodules = $onefile->{'modules'};
if ( $filecomponent eq "" )
{
- installer::exiter::exit_program("ERROR: No component defined for file $onefile->{'Name'}", "create_featurecomponent_table_from_files_collector");
- }
- if ( $filemodules eq "" )
- {
- installer::exiter::exit_program("ERROR: No modules found for file $onefile->{'Name'}", "create_featurecomponent_table_from_files_collector");
+ installer::exiter::exit_program(
+ sprintf("ERROR: No component defined for file %s", $onefile->{'Name'}),
+ "create_featurecomponent_table_from_files_collector");
+ }
+ if ( ! defined $filemodules)
+ {
+ # Temporary for files created from source installation set.
+ die;
+ }
+ if ($filemodules eq "")
+ {
+ installer::exiter::exit_program(
+ sprintf("ERROR: No modules found for file %s", $onefile->{'Name'}),
+ "create_featurecomponent_table_from_files_collector");
}
my $filemodulesarrayref = installer::converter::convert_stringlist_into_array(\$filemodules, ",");
- for ( my $j = 0; $j <= $#{$filemodulesarrayref}; $j++ )
+ foreach my $onemodule (@$filemodulesarrayref)
{
my %featurecomponent = ();
- my $onemodule = ${$filemodulesarrayref}[$j];
$onemodule =~ s/\s*$//;
$featurecomponent{'Feature'} = $onemodule;
$featurecomponent{'Component'} = $filecomponent;
@@ -70,7 +79,7 @@ sub create_featurecomponent_table_from_f
installer::windows::idtglobal::shorten_feature_gid(\$featurecomponent{'Feature'});
- $oneline = "$featurecomponent{'Feature'}\t$featurecomponent{'Component'}\n";
+ my $oneline = "$featurecomponent{'Feature'}\t$featurecomponent{'Component'}\n";
# control of uniqueness
@@ -82,56 +91,66 @@ sub create_featurecomponent_table_from_f
}
}
-#################################################################################
-# Collecting all pairs of features and components from the registry collector
-#################################################################################
-sub create_featurecomponent_table_from_registry_collector
+
+
+=head2 create_featurecomponent_table_from_registry_collector ($featurecomponenttableref, $registryref)
+
+ Add entries for the FeatureComponent table for components that contain registry entries.
+
+=cut
+sub create_featurecomponent_table_from_registry_collector ($$)
{
my ($featurecomponenttableref, $registryref) = @_;
- for ( my $i = 0; $i <= $#{$registryref}; $i++ )
+ my $replacement_count = 0;
+ my $unique_count = 0;
+ foreach my $oneregistry (@$registryref)
{
- my $oneregistry = ${$registryref}[$i];
-
- my $registrycomponent = $oneregistry->{'componentname'};
- my $registrymodule = $oneregistry->{'ModuleID'};
-
- if ( $registrycomponent eq "" )
+ my $component_name = $oneregistry->{'componentname'};
+ if ($component_name eq "")
{
- installer::exiter::exit_program("ERROR: No component defined for registry $oneregistry->{'gid'}", "create_featurecomponent_table_from_registry_collector");
+ installer::exiter::exit_program(
+ sprintf("ERROR: No component defined for registry %s", $oneregistry->{'gid'}),
+ "create_featurecomponent_table_from_registry_collector");
}
- if ( $registrymodule eq "" )
+
+ my $feature_name = $oneregistry->{'ModuleID'};
+ if ($feature_name eq "")
{
- installer::exiter::exit_program("ERROR: No modules found for registry $oneregistry->{'gid'}", "create_featurecomponent_table_from_registry_collector");
+ installer::exiter::exit_program(
+ sprintf("ERROR: No modules found for registry %s", $oneregistry->{'gid'}),
+ "create_featurecomponent_table_from_registry_collector");
}
- my %featurecomponent = ();
-
- $featurecomponent{'Feature'} = $registrymodule;
- $featurecomponent{'Component'} = $registrycomponent;
-
# Attention: Features are renamed, because the maximum length is 38.
# But in the files collector ($filesref), the original names are saved.
- installer::windows::idtglobal::shorten_feature_gid(\$featurecomponent{'Feature'});
-
- $oneline = "$featurecomponent{'Feature'}\t$featurecomponent{'Component'}\n";
-
- # control of uniqueness
-
- if (! installer::existence::exists_in_array($oneline, $featurecomponenttableref))
+ $feature_name = installer::windows::idtglobal::create_shortend_feature_gid($feature_name);
+
+ my $oneline = sprintf("%s\t%s\n", $feature_name, $component_name);
+ if ( ! installer::existence::exists_in_array($oneline, $featurecomponenttableref))
{
- push(@{$featurecomponenttableref}, $oneline);
- }
- }
+ push(@$featurecomponenttableref, $oneline);
+ ++$unique_count;
+ }
+ else
+ {
+ $installer::logger::Lang->printf("feature component pair already exists\n");
+ }
+ }
+ $installer::logger::Lang->printf(
+ "replaced %d (%d) of %d component names in FeatureComponent table\n",
+ $unique_count,
+ $replacement_count,
+ scalar @$registryref);
}
#################################################################################
# Collecting all feature that are listed in the featurecomponent table.
#################################################################################
-sub collect_all_feature
+sub collect_all_features
{
my ($featurecomponenttable) = @_;
@@ -145,7 +164,10 @@ sub collect_all_feature
{
my $feature = $1;
- if (! installer::existence::exists_in_array($feature, \@allfeature)) { push(@allfeature, $feature); }
+ if (! installer::existence::exists_in_array($feature, \@allfeature))
+ {
+ push(@allfeature, $feature);
+ }
}
}
@@ -165,7 +187,7 @@ sub check_number_of_components_at_featur
$installer::logger::Lang->print("\n");
$installer::logger::Lang->print("Checking number of components at features. Maximum is 817 (for Win 98 and Win Me)\n");
- my $allfeature = collect_all_feature($featurecomponenttable);
+ my $allfeature = collect_all_features($featurecomponenttable);
for ( my $i = 0; $i <= $#{$allfeature}; $i++ )
{
@@ -196,7 +218,7 @@ sub check_number_of_components_at_featur
# Feature Component
#################################################################################
-sub create_featurecomponent_table
+sub create_featurecomponent_table ($$$)
{
my ($filesref, $registryref, $basedir) = @_;
@@ -216,9 +238,13 @@ sub create_featurecomponent_table
# At the moment only the files are related to components (and the files know their modules).
# The component for each file is written into the files collector $filesinproductlanguageresolvedarrayref
- create_featurecomponent_table_from_files_collector(\@featurecomponenttable, $filesref);
-
- create_featurecomponent_table_from_registry_collector(\@featurecomponenttable, $registryref);
+ create_featurecomponent_table_from_files_collector(
+ \@featurecomponenttable,
+ $filesref);
+
+ create_featurecomponent_table_from_registry_collector(
+ \@featurecomponenttable,
+ $registryref);
# Additional components have to be added here
Modified: openoffice/trunk/main/solenv/bin/modules/installer/windows/file.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/windows/file.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/windows/file.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/windows/file.pm Mon Dec 2 16:37:27 2013
@@ -47,68 +47,65 @@ sub assign_cab_to_files
my $infoline = "";
- for ( my $i = 0; $i <= $#{$filesref}; $i++ )
+ foreach my $file (@$filesref)
{
- if ( ! exists(${$filesref}[$i]->{'modules'}) ) { installer::exiter::exit_program("ERROR: No module assignment found for ${$filesref}[$i]->{'gid'} !", "assign_cab_to_files"); }
- my $module = ${$filesref}[$i]->{'modules'};
+ if ( ! exists($file->{'modules'}) )
+ {
+ installer::exiter::exit_program(
+ sprintf("ERROR: No module assignment found for %s", $file->{'gid'}),
+ "assign_cab_to_files");
+ }
+ my $module = $file->{'modules'};
# If modules contains a list of modules, only taking the first one.
if ( $module =~ /^\s*(.*?)\,/ ) { $module = $1; }
- if ( ! exists($installer::globals::allcabinetassigns{$module}) ) { installer::exiter::exit_program("ERROR: No cabinet file assigned to module \"$module\" (${$filesref}[$i]->{'gid'}) !", "assign_cab_to_files"); }
- ${$filesref}[$i]->{'assignedcabinetfile'} = $installer::globals::allcabinetassigns{$module};
+ if ( ! exists($installer::globals::allcabinetassigns{$module}) )
+ {
+ installer::exiter::exit_program(
+ sprintf("ERROR: No cabinet file assigned to module \"%s\" %s",
+ $module,
+ $file->{'gid'}),
+ "assign_cab_to_files");
+ }
+ $file->{'assignedcabinetfile'} = $installer::globals::allcabinetassigns{$module};
# Counting the files in each cabinet file
- if ( ! exists($installer::globals::cabfilecounter{${$filesref}[$i]->{'assignedcabinetfile'}}) )
+ if ( ! exists($installer::globals::cabfilecounter{$file->{'assignedcabinetfile'}}) )
{
- $installer::globals::cabfilecounter{${$filesref}[$i]->{'assignedcabinetfile'}} = 1;
+ $installer::globals::cabfilecounter{$file->{'assignedcabinetfile'}} = 1;
}
else
{
- $installer::globals::cabfilecounter{${$filesref}[$i]->{'assignedcabinetfile'}}++;
+ $installer::globals::cabfilecounter{$file->{'assignedcabinetfile'}}++;
}
}
- # logging the number of files in each cabinet file
-
- $installer::logger::Lang->print("\n");
- $installer::logger::Lang->print("Cabinet file content:\n");
- my $cabfile;
- foreach $cabfile ( sort keys %installer::globals::cabfilecounter )
- {
- $infoline = "$cabfile : $installer::globals::cabfilecounter{$cabfile} files\n";
- $installer::logger::Lang->print($infoline);
- }
-
# assigning startsequencenumbers for each cab file
-
+
+ my %count = ();
my $offset = 1;
- foreach $cabfile ( sort keys %installer::globals::cabfilecounter )
+ foreach my $cabfile ( sort keys %installer::globals::cabfilecounter )
{
my $filecount = $installer::globals::cabfilecounter{$cabfile};
+ $count{$cabfile} = $filecount;
$installer::globals::cabfilecounter{$cabfile} = $offset;
$offset = $offset + $filecount;
$installer::globals::lastsequence{$cabfile} = $offset - 1;
}
-
- # logging the start sequence numbers
-
- $installer::logger::Lang->print("\n");
- $installer::logger::Lang->print("Cabinet file start sequences:\n");
- foreach $cabfile ( sort keys %installer::globals::cabfilecounter )
- {
- $infoline = "$cabfile : $installer::globals::cabfilecounter{$cabfile}\n";
- $installer::logger::Lang->print($infoline);
- }
- # logging the last sequence numbers
+ # logging the number of files in each cabinet file
$installer::logger::Lang->print("\n");
- $installer::logger::Lang->print("Cabinet file last sequences:\n");
- foreach $cabfile ( sort keys %installer::globals::lastsequence )
+ $installer::logger::Lang->print("Cabinet files:\n");
+ foreach my $cabfile (sort keys %installer::globals::cabfilecounter)
{
- $infoline = "$cabfile : $installer::globals::lastsequence{$cabfile}\n";
- $installer::logger::Lang->print($infoline);
+ $installer::logger::Lang->printf(
+ "%-30s : %4s files, from %4d to %4d\n",
+ $cabfile,
+ $count{$cabfile},
+ $installer::globals::cabfilecounter{$cabfile},
+ $installer::globals::lastsequence{$cabfile});
}
}
@@ -123,7 +120,7 @@ sub assign_sequencenumbers_to_files
my %directaccess = ();
my %allassigns = ();
-
+
for ( my $i = 0; $i <= $#{$filesref}; $i++ )
{
my $onefile = ${$filesref}[$i];
@@ -161,7 +158,7 @@ sub assign_sequencenumbers_to_files
foreach $dest ( sort keys %{$allassigns{$cabfile}} ) # <- sorting the destination!
{
my $directaccessnumber = $directaccess{$dest};
- ${$filesref}[$directaccessnumber]->{'assignedsequencenumber'} = $counter;
+ ${$filesref}[$directaccessnumber]->{'assignedsequencenumber'} = $counter;
$counter++;
}
}
@@ -373,20 +370,8 @@ sub generate_unique_filename_for_filetab
my $counter = 0;
if ( $fileref->{'Name'} ) { $uniquefilename = $fileref->{'Name'}; }
-
- installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$uniquefilename); # making /registry/schema/org/openoffice/VCL.xcs to VCL.xcs
-
- # Reading unique filename with help of "Component_" in File table from old database
- if (( $installer::globals::prepare_winpatch ) && ( exists($installer::globals::savedmapping{"$component/$uniquefilename"}) ))
- {
- # If we have a FTK mapping for this component/file, use it.
- $installer::globals::savedmapping{"$component/$uniquefilename"} =~ m/^(.*);/;
- $uniquefilename = $1;
- $lcuniquefilename = lc($uniquefilename);
- $installer::globals::alluniquefilenames{$uniquefilename} = 1;
- $installer::globals::alllcuniquefilenames{$lcuniquefilename} = 1;
- return $uniquefilename;
- }
+ # making /registry/schema/org/openoffice/VCL.xcs to VCL.xcs
+ installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$uniquefilename);
$uniquefilename =~ s/\-/\_/g; # no "-" allowed
$uniquefilename =~ s/\@/\_/g; # no "@" allowed
@@ -399,8 +384,7 @@ sub generate_unique_filename_for_filetab
my $newname = 0;
- if ( ! exists($installer::globals::alllcuniquefilenames{$lcuniquefilename}) &&
- ! exists($installer::globals::savedrevmapping{$lcuniquefilename}) )
+ if ( ! exists($installer::globals::alllcuniquefilenames{$lcuniquefilename}))
{
$installer::globals::alluniquefilenames{$uniquefilename} = 1;
$installer::globals::alllcuniquefilenames{$lcuniquefilename} = 1;
@@ -431,8 +415,7 @@ sub generate_unique_filename_for_filetab
$newname = 0;
$lcuniquefilename = lc($uniquefilename); # only lowercase names
- if ( ! exists($installer::globals::alllcuniquefilenames{$lcuniquefilename}) &&
- ! exists($installer::globals::savedrevmapping{$lcuniquefilename}) )
+ if ( ! exists($installer::globals::alllcuniquefilenames{$lcuniquefilename}))
{
$installer::globals::alluniquefilenames{$uniquefilename} = 1;
$installer::globals::alllcuniquefilenames{$lcuniquefilename} = 1;
@@ -458,31 +441,21 @@ sub generate_filename_for_filetable ($$)
my $returnstring = "";
my $filename = $fileref->{'Name'};
+
+ # making /registry/schema/org/openoffice/VCL.xcs to VCL.xcs
+ installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$filename);
- installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$filename); # making /registry/schema/org/openoffice/VCL.xcs to VCL.xcs
-
- my $shortstring;
+ my $shortstring = installer::windows::idtglobal::make_eight_three_conform_with_hash($filename, "file", $shortnamesref);
- # Reading short string with help of "FileName" in File table from old database
- if (( $installer::globals::prepare_winpatch ) && ( exists($installer::globals::savedmapping{"$fileref->{'componentname'}/$filename"}) ))
- {
- $installer::globals::savedmapping{"$fileref->{'componentname'}/$filename"} =~ m/.*;(.*)/;
- if ($1 ne '')
- {
- $shortstring = $1;
- }
- else
- {
- $shortstring = installer::windows::idtglobal::make_eight_three_conform_with_hash($filename, "file", $shortnamesref);
- }
- }
+ if ( $shortstring eq $filename )
+ {
+ # nothing changed
+ $returnstring = $filename;
+ }
else
- {
- $shortstring = installer::windows::idtglobal::make_eight_three_conform_with_hash($filename, "file", $shortnamesref);
- }
-
- if ( $shortstring eq $filename ) { $returnstring = $filename; } # nothing changed
- else {$returnstring = $shortstring . "\|" . $filename; }
+ {
+ $returnstring = $shortstring . "\|" . $filename;
+ }
return $returnstring;
}
@@ -524,7 +497,10 @@ sub get_fileversion
if ( $allvariables->{'USE_FILEVERSION'} )
{
- if ( ! $allvariables->{'LIBRARYVERSION'} ) { installer::exiter::exit_program("ERROR: USE_FILEVERSION is set, but not LIBRARYVERSION", "get_fileversion"); }
+ if ( ! $allvariables->{'LIBRARYVERSION'} )
+ {
+ installer::exiter::exit_program("ERROR: USE_FILEVERSION is set, but not LIBRARYVERSION", "get_fileversion");
+ }
my $libraryversion = $allvariables->{'LIBRARYVERSION'};
if ( $libraryversion =~ /^\s*(\d+)\.(\d+)\.(\d+)\s*$/ )
{
@@ -535,18 +511,23 @@ sub get_fileversion
$libraryversion = $major . "\." . $concat;
}
my $vendornumber = 0;
- if ( $allvariables->{'VENDORPATCHVERSION'} ) { $vendornumber = $allvariables->{'VENDORPATCHVERSION'}; }
+ if ( $allvariables->{'VENDORPATCHVERSION'} )
+ {
+ $vendornumber = $allvariables->{'VENDORPATCHVERSION'};
+ }
$fileversion = $libraryversion . "\." . $installer::globals::buildid . "\." . $vendornumber;
- if ( $onefile->{'FileVersion'} ) { $fileversion = $onefile->{'FileVersion'}; } # overriding FileVersion in scp
-
- # if ( $styles =~ /\bFONT\b/ )
- # {
- # my $newfileversion = installer::windows::font::get_font_version($onefile->{'sourcepath'});
- # if ( $newfileversion != 0 ) { $fileversion = $newfileversion; }
- # }
+ if ( $onefile->{'FileVersion'} )
+ {
+ # overriding FileVersion in scp
+ $fileversion = $onefile->{'FileVersion'};
+ }
}
- if ( $installer::globals::prepare_winpatch ) { $fileversion = ""; } # Windows patches do not allow this version # -> who says so?
+ if ( $installer::globals::prepare_winpatch )
+ {
+ # Windows patches do not allow this version # -> who says so?
+ $fileversion = "";
+ }
return $fileversion;
}
Modified: openoffice/trunk/main/solenv/bin/modules/installer/windows/idtglobal.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/windows/idtglobal.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/windows/idtglobal.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/windows/idtglobal.pm Mon Dec 2 16:37:27 2013
@@ -56,6 +56,19 @@ sub shorten_feature_gid
$$stringref =~ s/_Replacement_/_rpl_/;
}
+=head2 create_shortend_feature_gid ($feature_name)
+
+ This is a side effect free version of shorten_feature_gid.
+ The shortened feature name is returned instead of overwriting the given name.
+
+=cut
+sub create_shortend_feature_gid ($)
+{
+ my ($feature_name) = @_;
+ shorten_feature_gid(\$feature_name);
+ return $feature_name;
+}
+
############################################
# Getting the next free number, that
# can be added.
Modified: openoffice/trunk/main/solenv/bin/modules/installer/windows/inifile.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/windows/inifile.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/windows/inifile.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/windows/inifile.pm Mon Dec 2 16:37:27 2013
@@ -28,6 +28,8 @@ use installer::files;
use installer::globals;
use installer::windows::idtglobal;
+use strict;
+
####################################################
# Setting the profile for a special profileitem
####################################################
@@ -66,21 +68,18 @@ sub file_is_part_of_product
{
my ($profilegid, $filesref) = @_;
- my $part_of_product = 0;
-
- for ( my $i = 0; $i <= $#{$filesref}; $i++ )
+ foreach my $file (@$filesref)
{
- $onefile = ${$filesref}[$i];
- my $filegid = $onefile->{'gid'};
+ my $filegid = $file->{'gid'};
+ next unless defined $filegid;
if ( $filegid eq $profilegid )
{
- $part_of_product = 1;
- last;
+ return 1;
}
}
- return $part_of_product;
+ return 0;
}
###########################################################################################################
Modified: openoffice/trunk/main/solenv/bin/modules/installer/windows/msiglobal.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/windows/msiglobal.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/windows/msiglobal.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/windows/msiglobal.pm Mon Dec 2 16:37:27 2013
@@ -37,6 +37,7 @@ use installer::systemactions;
use installer::worker;
use installer::windows::idtglobal;
use installer::windows::language;
+use strict;
###########################################################################
# Generating the header of the ddf file.
@@ -332,65 +333,6 @@ sub get_file_sequence
return $sequence;
}
-########################################################################
-# For update and patch reasons the pack order needs to be saved.
-# The pack order is saved in the ddf files; the names and locations
-# of the ddf files are saved in @installer::globals::allddffiles.
-# The outputfile "packorder.txt" can be saved in
-# $installer::globals::infodirectory .
-########################################################################
-
-sub save_packorder
-{
- installer::logger::include_header_into_logfile("Saving pack order");
-
- $installer::logger::Lang->add_timestamp("Performance Info: saving pack order start");
-
- my $packorderfilename = "packorder.txt";
- $packorderfilename = $installer::globals::infodirectory . $installer::globals::separator . $packorderfilename;
-
- my @packorder = ();
-
- my $headerline = "\# Syntax\: Filetable_Sequence Cabinetfilename Physical_FileName Unique_FileName\n\n";
- push(@packorder, $headerline);
-
- for ( my $i = 0; $i <= $#installer::globals::allddffiles; $i++ )
- {
- my $ddffilename = $installer::globals::allddffiles[$i];
- my $ddffile = installer::files::read_file($ddffilename);
- my $cabinetfile = "";
-
- for ( my $j = 0; $j <= $#{$ddffile}; $j++ )
- {
- my $oneline = ${$ddffile}[$j];
-
- # Getting the Cabinet file name
-
- if ( $oneline =~ /^\s*\.Set\s+CabinetName.*\=(.*?)\s*$/ ) { $cabinetfile = $1; }
- if ( $oneline =~ /^\s*\.Set\s+/ ) { next; }
-
- if ( $oneline =~ /^\s*\"(.*?)\"\s+(.*?)\s*$/ )
- {
- my $sourcefile = $1;
- my $uniquefilename = $2;
-
- installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$sourcefile);
-
- # Using the hash created in create_files_table for performance reasons to get the sequence number
- my $filesequence = "";
- if ( exists($installer::globals::uniquefilenamesequence{$uniquefilename}) ) { $filesequence = $installer::globals::uniquefilenamesequence{$uniquefilename}; }
- else { installer::exiter::exit_program("ERROR: No sequence number value for $uniquefilename !", "save_packorder"); }
-
- my $line = $filesequence . "\t" . $cabinetfile . "\t" . $sourcefile . "\t" . $uniquefilename . "\n";
- push(@packorder, $line);
- }
- }
- }
-
- installer::files::save_file($packorderfilename ,\@packorder);
-
- $installer::logger::Lang->add_timestamp("Performance Info: saving pack order end");
-}
#################################################################
# Returning the name of the msi database
@@ -1087,8 +1029,7 @@ sub create_setup_ini
installer::files::save_file($setupinifilename, $setupinifile);
- $infoline = "Generated file $setupinifilename !\n";
- $installer::logger::Lang->print($infoline);
+ $installer::logger::Lang->printf("Generated file %s\n", $setupinifilename);
}
#################################################################
@@ -1133,7 +1074,7 @@ sub copy_windows_installer_files_into_in
installer::logger::include_header_into_logfile("Copying Windows installer files into installation set");
- @copyfile = ();
+ my @copyfile = ();
push(@copyfile, "loader2.exe");
if ( $allvariables->{'NOLOADERREQUIRED'} ) { @copyfile = (); }
@@ -1489,7 +1430,7 @@ sub prepare_64bit_database
if ( -f $fullfilename )
{
my $saving_required = 0;
- $filecontent = installer::files::read_file($fullfilename);
+ my $filecontent = installer::files::read_file($fullfilename);
for ( my $i = 3; $i <= $#{$filecontent}; $i++ ) # ignoring the first three lines
{
@@ -1766,8 +1707,8 @@ sub set_global_code_variables ($$)
{
# UpgradeCode can take english as default, if not defined in specified language
- $searchstring = "UPGRADECODE"; # searching in the codes.txt file
- $codeblock = installer::windows::idtglobal::get_language_block_from_language_file($searchstring, $codefile);
+ my $searchstring = "UPGRADECODE"; # searching in the codes.txt file
+ my $codeblock = installer::windows::idtglobal::get_language_block_from_language_file($searchstring, $codefile);
$installer::globals::upgradecode = installer::windows::idtglobal::get_language_string_from_language_block($codeblock, $onelanguage, "");
}
@@ -1948,167 +1889,6 @@ sub update_removere_table
}
}
-##########################################################################
-# Reading saved mappings in Files.idt and Director.idt.
-# This is required, if installation sets shall be created,
-# that can be used for creation of msp files.
-##########################################################################
-
-sub read_saved_mappings
-{
- installer::logger::include_header_into_logfile("Reading saved mappings from older installation sets:");
-
- $installer::logger::Lang->add_timestamp("Performance Info: Reading saved mappings start");
-
- if ( $installer::globals::previous_idt_dir )
- {
- my @errorlines = ();
- my $errorstring = "";
- my $error_occured = 0;
- my $file_error_occured = 0;
- my $dir_error = 0;
-
- my $idtdir = $installer::globals::previous_idt_dir;
- $idtdir =~ s/\Q$installer::globals::separator\E\s*$//;
-
- # Reading File.idt
-
- my $idtfile = $idtdir . $installer::globals::separator . "File.idt";
- $installer::logger::Global->print("\n");
- $installer::logger::Global->printf("Analyzing file: %s\n", $idtfile);
- if ( ! -f $idtfile )
- {
- $installer::logger::Global->printf("Warning: File %s does not exist!\n", $idtfile);
- }
-
- my $n = 0;
- open (F, "<$idtfile") || installer::exiter::exit_program("ERROR: Cannot open file $idtfile for reading", "read_saved_mappings");
- <F>; <F>; <F>;
- while (<F>)
- {
- m/^([^\t]+)\t([^\t]+)\t((.*)\|)?([^\t]*)/;
- print "OUT1: \$1: $1, \$2: $2, \$3: $3, \$4: $4, \$5: $5\n";
- next if ("$1" eq "$5") && (!defined($3));
- my $lc1 = lc($1);
-
- if ( exists($installer::globals::savedmapping{"$2/$5"}))
- {
- if ( ! $file_error_occured )
- {
- $errorstring = "\nErrors in $idtfile: \n";
- push(@errorlines, $errorstring);
- }
- $errorstring = "Duplicate savedmapping{" . "$2/$5}\n";
- push(@errorlines, $errorstring);
- $error_occured = 1;
- $file_error_occured = 1;
- }
-
- if ( exists($installer::globals::savedrevmapping{$lc1}))
- {
- if ( ! $file_error_occured )
- {
- $errorstring = "\nErrors in $idtfile: \n";
- push(@errorlines, $errorstring);
- }
- $errorstring = "Duplicate savedrevmapping{" . "$lc1}\n";
- push(@errorlines, $errorstring);
- $error_occured = 1;
- $file_error_occured = 1;
- }
-
- my $shortname = $4 || '';
-
- # Don't reuse illegal 8.3 mappings that we used to generate in 2.0.4
- if (index($shortname, '.') > 8 ||
- (index($shortname, '.') == -1 && length($shortname) > 8))
- {
- $shortname = '';
- }
-
- if (( $shortname ne '' ) && ( index($shortname, '~') > 0 ) && ( exists($installer::globals::savedrev83mapping{$shortname}) ))
- {
- if ( ! $file_error_occured )
- {
- $errorstring = "\nErrors in $idtfile: \n";
- push(@errorlines, $errorstring);
- }
- $errorstring = "Duplicate savedrev83mapping{" . "$shortname}\n";
- push(@errorlines, $errorstring);
- $error_occured = 1;
- $file_error_occured = 1;
- }
-
- $installer::globals::savedmapping{"$2/$5"} = "$1;$shortname";
- $installer::globals::savedrevmapping{lc($1)} = "$2/$5";
- $installer::globals::savedrev83mapping{$shortname} = "$2/$5" if $shortname ne '';
- $n++;
- }
-
- close (F);
-
- $installer::logger::Global->printf("Read %s old file table key or 8.3 name mappings from %s\n",
- $n, $idtfile);
-
- # Reading Director.idt
-
- $idtfile = $idtdir . $installer::globals::separator . "Director.idt";
- $installer::logger::Global->print("\n");
- $installer::logger::Global->printf("Analyzing file %s\n", $idtfile);
- if ( ! -f $idtfile )
- {
- $installer::logger::Global->printf("Warning: File %s does not exist!\n", $idtfile);
- }
-
- $n = 0;
- open (F, "<$idtfile") || installer::exiter::exit_program("ERROR: Cannot open file $idtfile for reading", "read_saved_mappings");
- <F>; <F>; <F>;
- while (<F>)
- {
- m/^([^\t]+)\t([^\t]+)\t(([^~]+~\d.*)\|)?([^\t]*)/;
- next if (!defined($3));
- my $lc1 = lc($1);
-
- print "OUT2: \$1: $1, \$2: $2, \$3: $3\n";
-
- if ( exists($installer::globals::saved83dirmapping{$1}) )
- {
- if ( ! $dir_error_occured )
- {
- $errorstring = "\nErrors in $idtfile: \n";
- push(@errorlines, $errorstring);
- }
- $errorstring = "Duplicate saved83dirmapping{" . "$1}\n";
- push(@errorlines, $errorstring);
- $error_occured = 1;
- $dir_error_occured = 1;
- }
-
- $installer::globals::saved83dirmapping{$1} = $4;
- $n++;
- }
- close (F);
-
- $installer::logger::Global->printf("Read %s old directory 8.3 name mappings from %s\n",
- $n, $idtfile);
-
- # Analyzing errors
-
- if ( $error_occured )
- {
- for my $line (@errorlines)
- {
- $installer::logger::Info->print($line);
- $installer::logger::Global->print($line);
- }
- installer::exiter::exit_program("ERROR: Duplicate entries in saved mappings!", "read_saved_mappings");
- }
- } else {
- installer::exiter::exit_program("ERROR: Windows patch shall be prepared, but environment variable PREVIOUS_IDT_DIR is not set!", "read_saved_mappings");
- }
-
- $installer::logger::Lang->add_timestamp("Performance Info: Reading saved mappings end");
-}
1;
Modified: openoffice/trunk/main/solenv/bin/modules/installer/windows/registry.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/windows/registry.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/windows/registry.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/windows/registry.pm Mon Dec 2 16:37:27 2013
@@ -350,25 +350,24 @@ sub create_registry_table
{
my ($registryref, $allregistrycomponentsref, $basedir, $languagesarrayref, $allvariableshashref) = @_;
- for ( my $m = 0; $m <= $#{$languagesarrayref}; $m++ )
+ my %table_data = ();
+ foreach my $onelanguage (@$languagesarrayref)
{
- my $onelanguage = ${$languagesarrayref}[$m];
my @registrytable = ();
my @reg64table = ();
installer::windows::idtglobal::write_idt_header(\@registrytable, "registry");
installer::windows::idtglobal::write_idt_header(\@reg64table, "reg64");
-
- for ( my $i = 0; $i <= $#{$registryref}; $i++ )
+ my $table_items = [];
+ foreach my $oneregistry (@$registryref)
{
- my $oneregistry = ${$registryref}[$i];
-
# Controlling the language!
# Only language independent folderitems or folderitems with the correct language
# will be included into the table
- if (! (!(( $oneregistry->{'ismultilingual'} )) || ( $oneregistry->{'specificlanguage'} eq $onelanguage )) ) { next; }
+ next if $oneregistry->{'ismultilingual'}
+ && $oneregistry->{'specificlanguage'} ne $onelanguage;
my %registry = ();
@@ -378,7 +377,9 @@ sub create_registry_table
$registry{'Name'} = get_registry_name($oneregistry, $allvariableshashref);
$registry{'Value'} = get_registry_value($oneregistry, $allvariableshashref);
$registry{'Val64'} = get_registry_val64($oneregistry, $allvariableshashref);
- $registry{'Component_'} = get_registry_component($oneregistry, $allvariableshashref);
+ my $component_name = get_registry_component_name($oneregistry, $allvariableshashref);
+ $oneregistry->{'componentname'} = $component_name;
+ $registry{'Component_'} = $component_name;
# Collecting all components
if (!(installer::existence::exists_in_array($registry{'Component_'}, $allregistrycomponentsref)))
@@ -387,12 +388,19 @@ sub create_registry_table
}
# Collecting all components with DONT_DELETE style
- my $style = "";
- if ( $oneregistry->{'Styles'} ) { $style = $oneregistry->{'Styles'}; }
- if ( $style =~ /\bDONT_DELETE\b/ ) { $installer::globals::dontdeletecomponents{$registry{'Component_'}} = 1; }
+ my $style = $oneregistry->{'Styles'} // "";
+ $registry{'styles'} = $style;
+
+ if ( $style =~ /\bDONT_DELETE\b/ )
+ {
+ $installer::globals::dontdeletecomponents{$component_name} = 1;
+ }
# Saving upgradekey to write this into setup.ini for minor upgrades
- if ( $style =~ /\bUPGRADEKEY\b/ ) { $installer::globals::minorupgradekey = $registry{'Key'}; }
+ if ( $style =~ /\bUPGRADEKEY\b/ )
+ {
+ $installer::globals::minorupgradekey = $registry{'Key'};
+ }
# Collecting all registry components with ALWAYS_REQUIRED style
if ( ! ( $style =~ /\bALWAYS_REQUIRED\b/ ))
Modified: openoffice/trunk/main/solenv/bin/modules/installer/worker.pm
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/solenv/bin/modules/installer/worker.pm?rev=1547091&r1=1547090&r2=1547091&view=diff
==============================================================================
--- openoffice/trunk/main/solenv/bin/modules/installer/worker.pm (original)
+++ openoffice/trunk/main/solenv/bin/modules/installer/worker.pm Mon Dec 2 16:37:27 2013
@@ -733,11 +733,11 @@ sub remove_all_items_with_special_flag
if ( $oneitem->{'Styles'} ) { $styles = $oneitem->{'Styles'} };
if ( $styles =~ /\b$flag\b/ )
{
- $installer::logger::Lang->printf("Attention: Removing from collector: %s\n", $oneitem->{'Name'});
- if ($flag eq "BINARYTABLE_ONLY")
- {
- push(@installer::globals::binarytableonlyfiles, $oneitem);
- }
+ $installer::logger::Lang->printf(
+ "Attention: Removing from collector '%s' because it has flag %s\n",
+ $oneitem->{'Name'},
+ $flag);
+ if ( $flag eq "BINARYTABLE_ONLY" ) { push(@installer::globals::binarytableonlyfiles, $oneitem); }
next;
}
push( @allitems, $oneitem );
@@ -2712,10 +2712,10 @@ sub generate_cygwin_pathes
for ( my $i = 0; $i <= $#{$filesref}; $i++ )
{
- my $filename = ${$filesref}[$i]->{'sourcepath'};
- push(@pathcollector, $filename . "\n");
+ my $filename = ${$filesref}[$i]->{'sourcepath'};
+ push(@pathcollector, $filename . "\n");
$counter++;
-
+
if (( $i == $#{$filesref} ) || ((( $counter % $max ) == 0 ) && ( $i > 0 )))
{
my $tmpfilename = "cygwinhelper_" . $i . ".txt";
@@ -2741,12 +2741,9 @@ sub generate_cygwin_pathes
if ($success)
{
- $installer::logger::Lang->printf(
+ $installer::logger::Lang->printf(
"Successfully converted %d paths to cygwin notation\n",
$counter);
- $installer::logger::Lang->printf(
- "there where %d unique paths\n",
- scalar keys %paths);
}
else
{