summaryrefslogtreecommitdiff
path: root/solenv
diff options
context:
space:
mode:
authorRelease Engineering <releng@openoffice.org>2011-02-18 11:14:19 +0100
committerRelease Engineering <releng@openoffice.org>2011-02-18 11:14:19 +0100
commitba345960da447d921db9b557a5dc9bf62929ba9e (patch)
treeb58431e2088e0247ea6b71d848011031b2d7d0c8 /solenv
parent60b42a87ec54fef439122509d2599673a95e8cde (diff)
parent94f7fa3c8166270923f8013a848e569adb2752f6 (diff)
merged DEV300
Diffstat (limited to 'solenv')
-rw-r--r--solenv/bin/cws.pl74
-rw-r--r--solenv/bin/make_installer.pl3
-rw-r--r--solenv/bin/modules/CwsConfig.pm107
-rw-r--r--solenv/bin/modules/installer/globals.pm7
-rw-r--r--solenv/bin/modules/installer/windows/component.pm16
-rw-r--r--solenv/bin/modules/installer/windows/directory.pm107
-rw-r--r--solenv/bin/modules/installer/windows/file.pm232
-rw-r--r--solenv/bin/modules/installer/windows/idtglobal.pm22
-rw-r--r--solenv/bin/modules/installer/windows/msiglobal.pm109
-rw-r--r--solenv/config/sdev300.ini11
-rw-r--r--solenv/gbuild/AllLangResTarget.mk2
-rwxr-xr-xsolenv/gbuild/platform/linux.mk2
-rw-r--r--solenv/inc/_cppunit.mk20
-rw-r--r--solenv/inc/cppunit.mk2
-rw-r--r--solenv/inc/extension_post.mk15
-rw-r--r--solenv/inc/langlist.mk2
-rw-r--r--solenv/inc/settings.mk2
17 files changed, 539 insertions, 194 deletions
diff --git a/solenv/bin/cws.pl b/solenv/bin/cws.pl
index bf9ce9508d38..c613d13bcbb1 100644
--- a/solenv/bin/cws.pl
+++ b/solenv/bin/cws.pl
@@ -75,7 +75,7 @@ my %valid_options_hash = (
'help' => ['help'],
'create' => ['help', 'milestone', 'migration', 'hg'],
'fetch' => ['help', 'milestone', 'childworkspace','platforms','noautocommon',
- 'quiet', 'onlysolver'],
+ 'quiet', 'onlysolver', 'additionalrepositories'],
'query' => ['help', 'milestone','masterworkspace','childworkspace'],
'task' => ['help'],
'setcurrent' => ['help', 'milestone'],
@@ -120,6 +120,7 @@ sub parse_command_line
'profile',
'commit|C',
'platforms|p=s',
+ 'additionalrepositories|r=s',
'noautocommon|x=s',
'onlysolver|o',
'quiet|q',
@@ -399,20 +400,23 @@ sub hg_clone_cws_or_milestone
my ($hg_local_source, $hg_lan_source, $hg_remote_source);
my $config = CwsConfig->new();
- if ( $rep_type eq 'ooo') {
- $hg_local_source = $config->get_ooo_hg_local_source();
- $hg_lan_source = $config->get_ooo_hg_lan_source();
- $hg_remote_source = $config->get_ooo_hg_remote_source();
- }
- else {
- $hg_local_source = $config->get_so_hg_local_source();
- $hg_lan_source = $config->get_so_hg_lan_source();
- $hg_remote_source = $config->get_so_hg_remote_source();
- }
+
+ $hg_local_source = $config->get_hg_source(uc $rep_type, 'LOCAL');
+ $hg_lan_source = $config->get_hg_source(uc $rep_type, 'LAN');
+ $hg_remote_source = $config->get_hg_source(uc $rep_type, 'REMOTE');
my $masterws = $cws->master();
- my $master_local_source = "$hg_local_source/" . $masterws;
- my $master_lan_source = "$hg_lan_source/" . $masterws;
+ my ($master_local_source, $master_lan_source);
+ if ($rep_type eq "ooo" || $rep_type eq "so")
+ {
+ $master_local_source = "$hg_local_source/" . $masterws;
+ $master_lan_source = "$hg_lan_source/" . $masterws;
+ }
+ else
+ {
+ $master_local_source = "$hg_local_source/master_".$rep_type."/".$masterws;
+ $master_lan_source = "$hg_lan_source/master_".$rep_type."/".$masterws;
+ }
my $milestone_tag;
if ( $clone_milestone_only ) {
@@ -434,7 +438,15 @@ sub hg_clone_cws_or_milestone
my $pull_from_remote = 0;
my $cws_remote_source;
if ( !$clone_milestone_only ) {
- $cws_remote_source = "$hg_remote_source/cws/" . $cws->child();
+ if ($rep_type eq "ooo" || $rep_type eq "so")
+ {
+ $cws_remote_source = "$hg_remote_source/cws/" . $cws->child();
+ }
+ # e.g. cws_l10n
+ else
+ {
+ $cws_remote_source = "$hg_remote_source/cws_".$rep_type."/" . $cws->child();
+ }
# The outgoing repository might not yet be available. Which is not
# an error. Since pulling from the cws outgoing URL results in an ugly
@@ -446,7 +458,8 @@ sub hg_clone_cws_or_milestone
require LWP::Simple;
my $content = LWP::Simple::get($cws_remote_source);
my $pattern = "<title>cws/". $cws->child();
- if ( $content && $content =~ /$pattern/ ) {
+ my $pattern2 = "<title>cws_".$rep_type."/". $cws->child();
+ if ( $content && ($content =~ /$pattern/ || $content =~ /$pattern2/) ) {
$pull_from_remote = 1;
}
else {
@@ -1456,10 +1469,10 @@ sub do_help
}
elsif ($arg eq 'fetch') {
print STDERR "fetch: fetch a milestone or CWS\n";
- print STDERR "usage: fetch [-q] [-p platforms] [-o] <-m milestone> <workspace>\n";
- print STDERR "usage: fetch [-q] [-p platforms] [-o] <-c cws> <workspace>\n";
- print STDERR "usage: fetch [-q] [-x platforms] [-o] <-m milestone> <workspace>\n";
- print STDERR "usage: fetch [-q] [-x platforms] [-o] <-c cws> <workspace>\n";
+ print STDERR "usage: fetch [-q] [-p platforms] [-r additionalrepositories] [-o] <-m milestone> <workspace>\n";
+ print STDERR "usage: fetch [-q] [-p platforms] [-r additionalrepositories] [-o] <-c cws> <workspace>\n";
+ print STDERR "usage: fetch [-q] [-x platforms] [-r additionalrepositories] [-o] <-m milestone> <workspace>\n";
+ print STDERR "usage: fetch [-q] [-x platforms] [-r additionalrepositories] [-o] <-c cws> <workspace>\n";
print STDERR "usage: fetch [-q] <-m milestone> <workspace>\n";
print STDERR "usage: fetch [-q] <-c cws> <workspace>\n";
print STDERR "\t-m milestone: Checkout milestone <milestone> to workspace <workspace>\n";
@@ -1475,6 +1488,8 @@ sub do_help
print STDERR "\t-x platform: Copy one or more prebuilt platforms 'platform'. \n";
print STDERR "\t Separate multiple platforms with commas.\n";
print STDERR "\t Does not automatically adds 'common[.pro]'.\n";
+ print STDERR "\t-r additionalrepositories Checkout additional repositories. \n";
+ print STDERR "\t Separate multiple repositories with commas.\n";
print STDERR "\t--noautocommon platform: Same as -x\n";
print STDERR "\t-o: Omit checkout of sources, copy only solver. \n";
print STDERR "\t--onlysolver: Same as -o\n";
@@ -1582,6 +1597,8 @@ sub do_fetch
}
my $milestone_opt = $options_ref->{'milestone'};
+ my $additional_repositories_opt = $options_ref->{'additionalrepositories'};
+ $additional_repositories_opt = "", if ( !defined $additional_repositories_opt );
my $child = $options_ref->{'childworkspace'};
my $platforms = $options_ref->{'platforms'};
my $noautocommon = $options_ref->{'noautocommon'};
@@ -1718,8 +1735,23 @@ sub do_fetch
if ( !mkdir($work_master) ) {
print_error("Can't create directory '$work_master': $!.", 8);
}
+
+ my %unique = map { $_ => 1 } split( /,/ , $additional_repositories_opt);
+ my @unique_repo_list = keys %unique;
+
+ if (defined($additional_repositories_opt))
+ {
+ foreach my $repo(@unique_repo_list)
+ {
+ # do not double clone ooo and sun
+ hg_clone_cws_or_milestone($repo, $cws, "$work_master/".$repo, $clone_milestone_only), if $repo ne "ooo" && $repo ne "sun";
+ }
+
+ }
+
hg_clone_cws_or_milestone('ooo', $cws, "$work_master/ooo", $clone_milestone_only);
hg_clone_cws_or_milestone('so', $cws, "$work_master/sun", $clone_milestone_only);
+
if ( get_source_config_for_milestone($masterws, $milestone) ) {
# write source_config file
my $source_config_file = "$work_master/source_config";
@@ -1729,6 +1761,10 @@ sub do_fetch
print SOURCE_CONFIG "[repositories]\n";
print SOURCE_CONFIG "ooo=active\n";
print SOURCE_CONFIG "sun=active\n";
+ foreach my $repo(@unique_repo_list)
+ {
+ print SOURCE_CONFIG $repo."=active\n", if $repo ne "ooo" || $repo ne "sun";
+ }
close(SOURCE_CONFIG);
}
else {
diff --git a/solenv/bin/make_installer.pl b/solenv/bin/make_installer.pl
index d28a2e7e3fa0..c85aaffcde07 100644
--- a/solenv/bin/make_installer.pl
+++ b/solenv/bin/make_installer.pl
@@ -1955,7 +1955,7 @@ for ( my $n = 0; $n <= $#installer::globals::languageproducts; $n++ )
installer::windows::registry::create_registry_table($registryitemsinproductlanguageresolvedarrayref, \@allregistrycomponents, $newidtdir, $languagesarrayref, $allvariableshashref);
if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "registryitems4.log", $registryitemsinproductlanguageresolvedarrayref); }
- installer::windows::component::create_component_table($filesinproductlanguageresolvedarrayref, $registryitemsinproductlanguageresolvedarrayref, $directoriesforepmarrayref, \@allfilecomponents, \@allregistrycomponents, $newidtdir, $componentid, $componentidkeypath);
+ installer::windows::component::create_component_table($filesinproductlanguageresolvedarrayref, $registryitemsinproductlanguageresolvedarrayref, $directoriesforepmarrayref, \@allfilecomponents, \@allregistrycomponents, $newidtdir, $componentid, $componentidkeypath, $allvariableshashref);
if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "productfiles19.log", $filesinproductlanguageresolvedarrayref); }
if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "registryitems5.log", $registryitemsinproductlanguageresolvedarrayref); }
@@ -2166,6 +2166,7 @@ for ( my $n = 0; $n <= $#installer::globals::languageproducts; $n++ )
installer::logger::print_message( "... creating msi database (language $onelanguage) ... \n" );
installer::windows::msiglobal::set_uuid_into_component_table($languageidtdir, $allvariableshashref); # setting new GUID for the components using the tool uuidgen.exe
+ installer::windows::msiglobal::prepare_64bit_database($languageidtdir, $allvariableshashref); # making last 64 bit changes
installer::windows::msiglobal::create_msi_database($languageidtdir ,$msifilename);
# validating the database # ToDo
diff --git a/solenv/bin/modules/CwsConfig.pm b/solenv/bin/modules/CwsConfig.pm
index 6121691e1e7f..1ba12fecac1d 100644
--- a/solenv/bin/modules/CwsConfig.pm
+++ b/solenv/bin/modules/CwsConfig.pm
@@ -343,94 +343,59 @@ sub get_so_svn_server
#### HG methods ####
-sub get_ooo_hg_local_source
+sub _get_hg_source
{
- my $self = shift;
-
- if ( !defined($self->{HG_LOCAL_SOURCE}) ) {
+ my $self = shift;
+ my $repository_source = shift;
+ if ( !defined($self->{$repository_source}) ) {
my $config_file = $self->get_config_file();
- my $source = $config_file->{CWS_CONFIG}->{'HG_LOCAL_SOURCE'};
+ my $source = $config_file->{CWS_CONFIG}->{$repository_source};
if ( !defined($source) ) {
$source = "";
}
- $self->{HG_LOCAL_SOURCE} = $source;
+ $self->{$repository_source} = $source;
}
- return $self->{HG_LOCAL_SOURCE} ? $self->{HG_LOCAL_SOURCE} : undef;
-}
-
-sub get_ooo_hg_lan_source
-{
- my $self = shift;
+ return $self->{$repository_source} ? $self->{$repository_source} : undef;
- if ( !defined($self->{HG_LAN_SOURCE}) ) {
- my $config_file = $self->get_config_file();
- my $source = $config_file->{CWS_CONFIG}->{'HG_LAN_SOURCE'};
- if ( !defined($source) ) {
- $source = "";
- }
- $self->{HG_LAN_SOURCE} = $source;
- }
- return $self->{HG_LAN_SOURCE} ? $self->{HG_LAN_SOURCE} : undef;
}
-sub get_ooo_hg_remote_source
+sub get_hg_source
{
- my $self = shift;
+ my $self = shift;
+ my $repository = shift;
+ my $location = shift;
- if ( !defined($self->{HG_REMOTE_SOURCE}) ) {
- my $config_file = $self->get_config_file();
- my $source = $config_file->{CWS_CONFIG}->{'HG_REMOTE_SOURCE'};
- if ( !defined($source) ) {
- $source = "";
+ #Special prefix handling, see cwsrc
+ if ($repository eq "OOO")
+ {
+ if ($location eq "LOCAL")
+ {
+ return $self->_get_hg_source('HG_LOCAL_SOURCE');
}
- $self->{HG_REMOTE_SOURCE} = $source;
- }
- return $self->{HG_REMOTE_SOURCE} ? $self->{HG_REMOTE_SOURCE} : undef;
-}
-
-sub get_so_hg_local_source
-{
- my $self = shift;
-
- if ( !defined($self->{SO_HG_LOCAL_SOURCE}) ) {
- my $config_file = $self->get_config_file();
- my $source = $config_file->{CWS_CONFIG}->{'SO_HG_LOCAL_SOURCE'};
- if ( !defined($source) ) {
- $source = "";
+ elsif ($location eq "LAN")
+ {
+ return $self->_get_hg_source('HG_LAN_SOURCE');
}
- $self->{SO_HG_LOCAL_SOURCE} = $source;
- }
- return $self->{SO_HG_LOCAL_SOURCE} ? $self->{SO_HG_LOCAL_SOURCE} : undef;
-}
-
-sub get_so_hg_lan_source
-{
- my $self = shift;
-
- if ( !defined($self->{SO_HG_LAN_SOURCE}) ) {
- my $config_file = $self->get_config_file();
- my $source = $config_file->{CWS_CONFIG}->{'SO_HG_LAN_SOURCE'};
- if ( !defined($source) ) {
- $source = "";
+ elsif ($location eq "REMOTE")
+ {
+ return $self->_get_hg_source('HG_REMOTE_SOURCE');
}
- $self->{SO_HG_LAN_SOURCE} = $source;
}
- return $self->{SO_HG_LAN_SOURCE} ? $self->{SO_HG_LAN_SOURCE} : undef;
-}
-
-sub get_so_hg_remote_source
-{
- my $self = shift;
-
- if ( !defined($self->{SO_HG_REMOTE_SOURCE}) ) {
- my $config_file = $self->get_config_file();
- my $source = $config_file->{CWS_CONFIG}->{'SO_HG_REMOTE_SOURCE'};
- if ( !defined($source) ) {
- $source = "";
+ else
+ {
+ if ($location eq "LOCAL")
+ {
+ return $self->_get_hg_source($repository.'_HG_LOCAL_SOURCE');
+ }
+ elsif ($location eq "LAN")
+ {
+ return $self->_get_hg_source($repository.'_HG_LAN_SOURCE');
+ }
+ elsif ($location eq "REMOTE")
+ {
+ return $self->_get_hg_source($repository.'_HG_REMOTE_SOURCE');
}
- $self->{SO_HG_REMOTE_SOURCE} = $source;
}
- return $self->{SO_HG_REMOTE_SOURCE} ? $self->{SO_HG_REMOTE_SOURCE} : undef;
}
#### Prebuild binaries configuration ####
diff --git a/solenv/bin/modules/installer/globals.pm b/solenv/bin/modules/installer/globals.pm
index 144cf4c88a4b..1536cb993db0 100644
--- a/solenv/bin/modules/installer/globals.pm
+++ b/solenv/bin/modules/installer/globals.pm
@@ -87,7 +87,8 @@ BEGIN
"oc",
"ml",
"as",
- "ast"
+ "ast",
+ "ht"
);
@items_at_modules = ("Files", "Dirs", "Unixlinks");
@asianlanguages = ("ja", "ko", "zh-CN", "zh-TW");
@@ -374,6 +375,10 @@ BEGIN
%spellcheckerlanguagehash = ();
%spellcheckerfilehash = ();
$registryrootcomponent = "";
+ %allcomponents = ();
+ %allcomponents_in_this_database = ();
+ %allshortcomponents = ();
+ %alluniquedirectorynames = ();
$installlocationdirectory = "";
$installlocationdirectoryset = 0;
diff --git a/solenv/bin/modules/installer/windows/component.pm b/solenv/bin/modules/installer/windows/component.pm
index 38989858a4b6..4ab5aac68954 100644
--- a/solenv/bin/modules/installer/windows/component.pm
+++ b/solenv/bin/modules/installer/windows/component.pm
@@ -193,7 +193,7 @@ sub get_registry_component_directory
sub get_file_component_attributes
{
- my ($componentname, $filesref) = @_;
+ my ($componentname, $filesref, $allvariables) = @_;
my $attributes;
@@ -240,6 +240,9 @@ sub get_file_component_attributes
$attributes = 4; # Files in shellnew dir and in non advertised startmenu entries must have user registry key as KeyPath
}
+ # Adding 256, if this is a 64 bit installation set.
+ if (( $allvariables->{'64BITPRODUCT'} ) && ( $allvariables->{'64BITPRODUCT'} == 1 )) { $attributes = $attributes + 256; }
+
return $attributes
}
@@ -251,12 +254,15 @@ sub get_file_component_attributes
sub get_registry_component_attributes
{
- my ($componentname) = @_;
+ my ($componentname, $allvariables) = @_;
my $attributes;
$attributes = 4;
+ # Adding 256, if this is a 64 bit installation set.
+ if (( $allvariables->{'64BITPRODUCT'} ) && ( $allvariables->{'64BITPRODUCT'} == 1 )) { $attributes = $attributes + 256; }
+
if ( exists($installer::globals::dontdeletecomponents{$componentname}) ) { $attributes = $attributes + 16; }
return $attributes
@@ -381,7 +387,7 @@ sub get_component_keypath
sub create_component_table
{
- my ($filesref, $registryref, $dirref, $allfilecomponentsref, $allregistrycomponents, $basedir, $componentidhashref, $componentidkeypathhashref) = @_;
+ my ($filesref, $registryref, $dirref, $allfilecomponentsref, $allregistrycomponents, $basedir, $componentidhashref, $componentidkeypathhashref, $allvariables) = @_;
my @componenttable = ();
@@ -402,7 +408,7 @@ sub create_component_table
$onecomponent{'guid'} = get_component_guid($onecomponent{'name'}, $componentidhashref);
$onecomponent{'directory'} = get_file_component_directory($onecomponent{'name'}, $filesref, $dirref);
if ( $onecomponent{'directory'} eq "IGNORE_COMP" ) { next; }
- $onecomponent{'attributes'} = get_file_component_attributes($onecomponent{'name'}, $filesref);
+ $onecomponent{'attributes'} = get_file_component_attributes($onecomponent{'name'}, $filesref, $allvariables);
$onecomponent{'condition'} = get_file_component_condition($onecomponent{'name'}, $filesref);
$onecomponent{'keypath'} = get_component_keypath($onecomponent{'name'}, $filesref, $componentidkeypathhashref);
@@ -421,7 +427,7 @@ sub create_component_table
$onecomponent{'name'} = ${$allregistrycomponents}[$i];
$onecomponent{'guid'} = get_component_guid($onecomponent{'name'}, $componentidhashref);
$onecomponent{'directory'} = get_registry_component_directory();
- $onecomponent{'attributes'} = get_registry_component_attributes($onecomponent{'name'});
+ $onecomponent{'attributes'} = get_registry_component_attributes($onecomponent{'name'}, $allvariables);
$onecomponent{'condition'} = get_component_condition($onecomponent{'name'});
$onecomponent{'keypath'} = get_component_keypath($onecomponent{'name'}, $registryref, $componentidkeypathhashref);
diff --git a/solenv/bin/modules/installer/windows/directory.pm b/solenv/bin/modules/installer/windows/directory.pm
index ba6f9a3b75bd..f7b13747e3bf 100644
--- a/solenv/bin/modules/installer/windows/directory.pm
+++ b/solenv/bin/modules/installer/windows/directory.pm
@@ -77,19 +77,78 @@ sub overwrite_programfilesfolder
}
##############################################################
+# Maximum length of directory name is 72.
+# Taking care of underlines, which are the separator.
+##############################################################
+
+sub make_short_dir_version
+{
+ my ($longstring, $length, $displayname) = @_;
+
+ my $shortstring = "";
+ my $infoline = "";
+ my $savestring = $longstring;
+
+ # 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 $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;
+ }
+ $partstring =~ s/^\s*\-//;
+ }
+ else
+ {
+ if ( length($onestring) > $length ) { $partstring = substr($onestring, 0, $length); }
+ else { $partstring = $onestring; }
+ }
+
+ $shortstring = $shortstring . "_" . $partstring;
+ }
+
+ $shortstring =~ s/^\s*\_//;
+
+ if ( length($shortstring) > 72 )
+ {
+ my $shortlength = length($shortstring);
+ $infoline = "WARNING: Failed to create unique directory name with less than 72 characters: \"$displayname\" ($shortstring ($shortlength)).\n";
+ push(@installer::globals::logfileinfo, $infoline);
+ }
+
+ return $shortstring;
+}
+
+##############################################################
# Adding unique directory names to the directory collection
##############################################################
sub create_unique_directorynames
{
- my ($directoryref) = @_;
+ my ($directoryref, $allvariables) = @_;
$installer::globals::officeinstalldirectoryset = 0;
+ my %conversionhash = ();
+ my $infoline = "";
+ my $errorcount = 0;
+
for ( my $i = 0; $i <= $#{$directoryref}; $i++ )
{
my $onedir = ${$directoryref}[$i];
- my $uniquename = $onedir->{'HostName'};
+ my $hostname = $onedir->{'HostName'};
+
+ my $uniquename = $hostname;
my $styles = "";
if ( $onedir->{'Styles'} ) { $styles = $onedir->{'Styles'}; }
# get_path_from_fullqualifiedname(\$uniqueparentname);
@@ -101,6 +160,42 @@ sub create_unique_directorynames
$uniquename =~ s/\_//g; # removing existing underlines
$uniquename =~ s/\.//g; # removing dots in directoryname
$uniquename =~ s/\Q$installer::globals::separator\E/\_/g; # replacing slash and backslash with underline
+ $uniquename =~ s/OpenOffice/OO/g;
+ $uniquename =~ s/_registry/_rgy/g;
+ $uniquename =~ s/_registration/_rgn/g;
+ $uniquename =~ s/_extension/_ext/g;
+ $uniquename =~ s/_frame/_frm/g;
+ $uniquename =~ s/_table/_tbl/g;
+ $uniquename =~ s/_chart/_crt/g;
+
+ my $startlength = 5;
+
+ if ( ! $allvariables->{'NOSHORTDIRECTORYNAMES'} )
+ {
+ # This process does not work for SDK, because of its long and similar pathes
+ $uniquename = make_short_dir_version($uniquename, $startlength, $hostname); # taking care of underlines!
+ }
+
+ if ( exists($installer::globals::alluniquedirectorynames{$uniquename}) )
+ {
+ # This is an error, that must stop the packaging process
+ $errorcount++;
+
+ $infoline = "$errorcount: Already existing unique directory: $uniquename\n";
+ push( @installer::globals::logfileinfo, $infoline);
+ $infoline = "$errorcount: First full directory: $conversionhash{$uniquename}\n";
+ push( @installer::globals::logfileinfo, $infoline);
+ $infoline = "$errorcount: Current full directory: $hostname\n";
+ push( @installer::globals::logfileinfo, $infoline);
+ }
+
+ $conversionhash{$uniquename} = $hostname;
+
+ $installer::globals::alluniquedirectorynames{$uniquename} = 1;
+
+ # Important: The unique parent is generated from the string $uniquename. Therefore counters
+ # like adding "_1" is not allowed to achive uniqueness, because this depends from other directories
+ # and does not deliver always the same result.
my $uniqueparentname = $uniquename;
@@ -147,6 +242,11 @@ sub create_unique_directorynames
$installer::globals::vendordirectoryset = 1;
}
}
+
+ if ( $errorcount > 0 )
+ {
+ installer::exiter::exit_program("ERROR: Failed to create unique directory names.", "create_unique_directorynames");
+ }
}
#####################################################
@@ -434,8 +534,9 @@ sub create_directory_table
my $infoline;
overwrite_programfilesfolder($allvariableshashref);
- create_unique_directorynames($directoryref);
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, $shortdirnamehashref); # only destdir!
if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "directoriesforidt_local_2.log", $directoryref); }
set_installlocation_directory($directoryref, $allvariableshashref);
diff --git a/solenv/bin/modules/installer/windows/file.pm b/solenv/bin/modules/installer/windows/file.pm
index 10666be7460c..b679d8b46e2b 100644
--- a/solenv/bin/modules/installer/windows/file.pm
+++ b/solenv/bin/modules/installer/windows/file.pm
@@ -170,6 +170,40 @@ sub assign_sequencenumbers_to_files
}
}
+#########################################################
+# Create a shorter version of a long component name,
+# because maximum length in msi database is 72.
+# Attention: In multi msi installation sets, the short
+# names have to be unique over all packages, because
+# this string is used to create the globally unique id
+# -> no resetting of
+# %installer::globals::allshortcomponents
+# after a package was created.
+#########################################################
+
+sub generate_new_short_componentname
+{
+ my ($componentname) = @_;
+
+ my $shortcomponentname = "";
+ my $counter = 1;
+
+ my $startversion = substr($componentname, 0, 60); # taking only the first 60 characters
+ $startversion = $startversion . "_";
+
+ $shortcomponentname = $startversion . $counter;
+
+ while ( exists($installer::globals::allshortcomponents{$shortcomponentname}) )
+ {
+ $counter++;
+ $shortcomponentname = $startversion . $counter;
+ }
+
+ $installer::globals::allshortcomponents{$shortcomponentname} = 1;
+
+ return $shortcomponentname;
+}
+
###############################################
# Generating the component name from a file
###############################################
@@ -178,77 +212,139 @@ sub get_file_component_name
{
my ($fileref, $filesref) = @_;
- # In this function exists the rule to create components from files
- # Rule:
- # Two files get the same componentid, if:
- # both have the same destination directory.
- # both have the same "gid" -> both were packed in the same zip file
- # All other files are included into different components!
-
- # my $componentname = $fileref->{'gid'} . "_" . $fileref->{'Dir'};
-
- # $fileref->{'Dir'} is not sufficient! All files in a zip file have the same $fileref->{'Dir'},
- # but can be in different subdirectories.
- # Solution: destination=share\Scripts\beanshell\Capitalise\capitalise.bsh
- # in which the filename (capitalise.bsh) has to be removed and all backslashes (slashes) are
- # converted into underline.
-
- my $destination = $fileref->{'destination'};
- installer::pathanalyzer::get_path_from_fullqualifiedname(\$destination);
- $destination =~ s/\s//g;
- $destination =~ s/\\/\_/g;
- $destination =~ s/\//\_/g;
- $destination =~ s/\_\s*$//g; # removing ending underline
-
- my $componentname = $fileref->{'gid'} . "__" . $destination;
-
- # Files with different languages, need to be packed into different components.
- # Then the installation of the language specific component is determined by a language condition.
-
- if ( $fileref->{'ismultilingual'} )
- {
- my $officelanguage = $fileref->{'specificlanguage'};
- $componentname = $componentname . "_" . $officelanguage;
- }
-
- $componentname = lc($componentname); # componentnames always lowercase
-
- $componentname =~ s/\-/\_/g; # converting "-" to "_"
- $componentname =~ s/\./\_/g; # converting "-" to "_"
-
- # Attention: Maximum length for the componentname is 72
-
- $componentname =~ s/gid_file_/g_f_/g;
- $componentname =~ s/_extra_/_e_/g;
- $componentname =~ s/_config_/_c_/g;
- $componentname =~ s/_org_openoffice_/_o_o_/g;
- $componentname =~ s/_program_/_p_/g;
- $componentname =~ s/_typedetection_/_td_/g;
- $componentname =~ s/_linguistic_/_l_/g;
- $componentname =~ s/_module_/_m_/g;
- $componentname =~ s/_optional_/_opt_/g;
- $componentname =~ s/_packages/_pack/g;
- $componentname =~ s/_menubar/_mb/g;
- $componentname =~ s/_common_/_cm_/g;
- $componentname =~ s/_export_/_exp_/g;
- $componentname =~ s/_table_/_tb_/g;
- $componentname =~ s/_sofficecfg_/_sc_/g;
- $componentname =~ s/_startmodulecommands_/_smc_/g;
- $componentname =~ s/_drawimpresscommands_/_dic_/g;
- $componentname =~ s/_basiccommands_/_bac_/g;
- $componentname =~ s/_basicidecommands_/_baic_/g;
- $componentname =~ s/_genericcommands_/_genc_/g;
- $componentname =~ s/_bibliographycommands_/_bibc_/g;
- $componentname =~ s/_share_/_s_/g;
- $componentname =~ s/_modules_/_ms_/g;
- $componentname =~ s/_uiconfig_zip_/_ucz_/g;
- $componentname =~ s/_soffice_cfg_/_sc_/g;
-
- # All this is not necessary for files, which have the flag ASSIGNCOMPOMENT
+ my $componentname = "";
+
+ # Special handling for files with ASSIGNCOMPOMENT
my $styles = "";
if ( $fileref->{'Styles'} ) { $styles = $fileref->{'Styles'}; }
- if ( $styles =~ /\bASSIGNCOMPOMENT\b/ ) { $componentname = get_component_from_assigned_file($fileref->{'AssignComponent'}, $filesref); }
+ if ( $styles =~ /\bASSIGNCOMPOMENT\b/ )
+ {
+ $componentname = get_component_from_assigned_file($fileref->{'AssignComponent'}, $filesref);
+ }
+ else
+ {
+ # In this function exists the rule to create components from files
+ # Rule:
+ # Two files get the same componentid, if:
+ # both have the same destination directory.
+ # both have the same "gid" -> both were packed in the same zip file
+ # All other files are included into different components!
+
+ # my $componentname = $fileref->{'gid'} . "_" . $fileref->{'Dir'};
+
+ # $fileref->{'Dir'} is not sufficient! All files in a zip file have the same $fileref->{'Dir'},
+ # but can be in different subdirectories.
+ # Solution: destination=share\Scripts\beanshell\Capitalise\capitalise.bsh
+ # in which the filename (capitalise.bsh) has to be removed and all backslashes (slashes) are
+ # converted into underline.
+
+ my $destination = $fileref->{'destination'};
+ installer::pathanalyzer::get_path_from_fullqualifiedname(\$destination);
+ $destination =~ s/\s//g;
+ $destination =~ s/\\/\_/g;
+ $destination =~ s/\//\_/g;
+ $destination =~ s/\_\s*$//g; # removing ending underline
+
+ $componentname = $fileref->{'gid'} . "__" . $destination;
+
+ # Files with different languages, need to be packed into different components.
+ # Then the installation of the language specific component is determined by a language condition.
+
+ if ( $fileref->{'ismultilingual'} )
+ {
+ my $officelanguage = $fileref->{'specificlanguage'};
+ $componentname = $componentname . "_" . $officelanguage;
+ }
+
+ $componentname = lc($componentname); # componentnames always lowercase
+
+ $componentname =~ s/\-/\_/g; # converting "-" to "_"
+ $componentname =~ s/\./\_/g; # converting "-" to "_"
+
+ # Attention: Maximum length for the componentname is 72
+ # %installer::globals::allcomponents_in_this_database : resetted for each database
+ # %installer::globals::allcomponents : not resetted for each database
+ # Component strings must be unique for the complete product, because they are used for
+ # the creation of the globally unique identifier.
+
+ my $fullname = $componentname; # This can be longer than 72
+
+ if (( exists($installer::globals::allcomponents{$fullname}) ) && ( ! exists($installer::globals::allcomponents_in_this_database{$fullname}) ))
+ {
+ # This is not allowed: One component cannot be installed with different packages.
+ installer::exiter::exit_program("ERROR: Component \"$fullname\" is already included into another package. This is not allowed.", "get_file_component_name");
+ }
+
+ if ( exists($installer::globals::allcomponents{$fullname}) )
+ {
+ $componentname = $installer::globals::allcomponents{$fullname};
+ }
+ else
+ {
+ if ( length($componentname) > 72 )
+ {
+ # Using md5sum needs much time
+ # chomp(my $shorter = `echo $componentname | md5sum | sed -e "s/ .*//g"`);
+ # $componentname = "comp_$shorter";
+ $componentname = generate_new_short_componentname($componentname); # This has to be unique for the complete product, not only one package
+ }
+
+ $installer::globals::allcomponents{$fullname} = $componentname;
+ $installer::globals::allcomponents_in_this_database{$fullname} = 1;
+ }
+
+ # $componentname =~ s/gid_file_/g_f_/g;
+ # $componentname =~ s/_extra_/_e_/g;
+ # $componentname =~ s/_config_/_c_/g;
+ # $componentname =~ s/_org_openoffice_/_o_o_/g;
+ # $componentname =~ s/_program_/_p_/g;
+ # $componentname =~ s/_typedetection_/_td_/g;
+ # $componentname =~ s/_linguistic_/_l_/g;
+ # $componentname =~ s/_module_/_m_/g;
+ # $componentname =~ s/_optional_/_opt_/g;
+ # $componentname =~ s/_packages/_pack/g;
+ # $componentname =~ s/_menubar/_mb/g;
+ # $componentname =~ s/_common_/_cm_/g;
+ # $componentname =~ s/_export_/_exp_/g;
+ # $componentname =~ s/_table_/_tb_/g;
+ # $componentname =~ s/_sofficecfg_/_sc_/g;
+ # $componentname =~ s/_soffice_cfg_/_sc_/g;
+ # $componentname =~ s/_startmodulecommands_/_smc_/g;
+ # $componentname =~ s/_drawimpresscommands_/_dic_/g;
+ # $componentname =~ s/_basiccommands_/_bac_/g;
+ # $componentname =~ s/_basicidecommands_/_baic_/g;
+ # $componentname =~ s/_genericcommands_/_genc_/g;
+ # $componentname =~ s/_bibliographycommands_/_bibc_/g;
+ # $componentname =~ s/_gentiumbookbasicbolditalic_/_gbbbi_/g;
+ # $componentname =~ s/_share_/_s_/g;
+ # $componentname =~ s/_extension_/_ext_/g;
+ # $componentname =~ s/_extensions_/_exs_/g;
+ # $componentname =~ s/_modules_/_ms_/g;
+ # $componentname =~ s/_uiconfig_zip_/_ucz_/g;
+ # $componentname =~ s/_productivity_/_pr_/g;
+ # $componentname =~ s/_wizard_/_wz_/g;
+ # $componentname =~ s/_import_/_im_/g;
+ # $componentname =~ s/_javascript_/_js_/g;
+ # $componentname =~ s/_template_/_tpl_/g;
+ # $componentname =~ s/_tplwizletter_/_twl_/g;
+ # $componentname =~ s/_beanshell_/_bs_/g;
+ # $componentname =~ s/_presentation_/_bs_/g;
+ # $componentname =~ s/_columns_/_cls_/g;
+ # $componentname =~ s/_python_/_py_/g;
+
+ # $componentname =~ s/_tools/_ts/g;
+ # $componentname =~ s/_transitions/_trs/g;
+ # $componentname =~ s/_scriptbinding/_scrb/g;
+ # $componentname =~ s/_spreadsheet/_ssh/g;
+ # $componentname =~ s/_publisher/_pub/g;
+ # $componentname =~ s/_presenter/_pre/g;
+ # $componentname =~ s/_registry/_reg/g;
+
+ # $componentname =~ s/screen/sc/g;
+ # $componentname =~ s/wordml/wm/g;
+ # $componentname =~ s/openoffice/oo/g;
+ }
return $componentname;
}
diff --git a/solenv/bin/modules/installer/windows/idtglobal.pm b/solenv/bin/modules/installer/windows/idtglobal.pm
index 64dc2f34a12a..453464a3ae36 100644
--- a/solenv/bin/modules/installer/windows/idtglobal.pm
+++ b/solenv/bin/modules/installer/windows/idtglobal.pm
@@ -90,10 +90,8 @@ sub get_next_free_number
}
until (!($alreadyexists));
- if (( $counter > 9 ) && ( length($name) > 6 ))
- {
- $dontsave = 1;
- }
+ if (( $counter > 9 ) && ( length($name) > 6 )) { $dontsave = 1; }
+ if (( $counter > 99 ) && ( length($name) > 5 )) { $dontsave = 1; }
if (!($dontsave))
{
@@ -192,6 +190,14 @@ sub make_eight_three_conform
$name =~ s/\s*$//; # removing ending whitespaces
$name = $name . "\~";
$number = get_next_free_number($name, $shortnamesref);
+
+ if ( $number > 99 )
+ {
+ $name = substr($name, 0, 4); # name, offset, length
+ $name =~ s/\s*$//; # removing ending whitespaces
+ $name = $name . "\~";
+ $number = get_next_free_number($name, $shortnamesref);
+ }
}
$name = $name . "$number";
@@ -224,6 +230,14 @@ sub make_eight_three_conform
$name =~ s/\s*$//; # removing ending whitespaces
$name = $name . "\~";
$number = get_next_free_number($name, $shortnamesref);
+
+ if ( $number > 99 )
+ {
+ $name = substr($name, 0, 4); # name, offset, length
+ $name =~ s/\s*$//; # removing ending whitespaces
+ $name = $name . "\~";
+ $number = get_next_free_number($name, $shortnamesref);
+ }
}
$name = $name . "$number";
diff --git a/solenv/bin/modules/installer/windows/msiglobal.pm b/solenv/bin/modules/installer/windows/msiglobal.pm
index 716f63499a02..dbb6e051aa29 100644
--- a/solenv/bin/modules/installer/windows/msiglobal.pm
+++ b/solenv/bin/modules/installer/windows/msiglobal.pm
@@ -785,11 +785,16 @@ sub get_codepage_for_sis
sub get_template_for_sis
{
- my ( $language ) = @_;
+ my ( $language, $allvariables ) = @_;
my $windowslanguage = installer::windows::language::get_windows_language($language);
- my $value = "\"Intel;" . $windowslanguage; # adding the Windows language
+ my $architecture = "Intel";
+
+ # Adding 256, if this is a 64 bit installation set.
+ if (( $allvariables->{'64BITPRODUCT'} ) && ( $allvariables->{'64BITPRODUCT'} == 1 )) { $architecture = "x64"; }
+
+ my $value = "\"" . $architecture . ";" . $windowslanguage; # adding the Windows language
$value = $value . "\""; # adding ending '"'
@@ -927,7 +932,7 @@ sub write_summary_into_msi_database
my $msiversion = get_msiversion_for_sis();
my $codepage = get_codepage_for_sis($language);
- my $template = get_template_for_sis($language);
+ my $template = get_template_for_sis($language, $allvariableshashref);
my $guid = get_packagecode_for_sis();
my $title = get_title_for_sis($sislanguage,$languagefile, "OOO_SIS_TITLE");
my $author = get_author_for_sis();
@@ -1669,6 +1674,104 @@ sub set_uuid_into_component_table
}
+#########################################################################
+# Adding final 64 properties into msi database, if required.
+# RegLocator : +16 in type column to search in 64 bit registry.
+# All conditions: "VersionNT" -> "VersionNT64" (several tables).
+# Already done: "+256" in Attributes column of table "Component".
+# Still following: Setting "x64" instead of "Intel" in Summary
+# Information Stream of msi database in "get_template_for_sis".
+#########################################################################
+
+sub prepare_64bit_database
+{
+ my ($basedir, $allvariables) = @_;
+
+ my $infoline = "";
+
+ if (( $allvariables->{'64BITPRODUCT'} ) && ( $allvariables->{'64BITPRODUCT'} == 1 ))
+ {
+ # 1. Beginning with table "RegLocat.idt". Adding "16" to the type.
+
+ my $reglocatfile = "";
+ my $reglocatfilename = $basedir . $installer::globals::separator . "RegLocat.idt";
+
+ if ( -f $reglocatfilename )
+ {
+ my $saving_required = 0;
+ $reglocatfile = installer::files::read_file($reglocatfilename);
+
+ for ( my $i = 3; $i <= $#{$reglocatfile}; $i++ ) # ignoring the first three lines
+ {
+ my $oneline = ${$reglocatfile}[$i];
+
+ if ( $oneline =~ /^\s*\#/ ) { next; } # this is a comment line
+ if ( $oneline =~ /^\s*$/ ) { next; }
+
+ if ( $oneline =~ /^\s*(.*?)\t(.*?)\t(.*?)\t(.*?)\t(\d+)\s*$/ )
+ {
+ # Syntax: Signature_ Root Key Name Type
+ my $sig = $1;
+ my $root = $2;
+ my $key = $3;
+ my $name = $4;
+ my $type = $5;
+
+ $type = $type + 16;
+
+ my $newline = $sig . "\t" . $root . "\t" . $key . "\t" . $name . "\t" . $type . "\n";
+ ${$reglocatfile}[$i] = $newline;
+
+ $saving_required = 1;
+ }
+ }
+
+ if ( $saving_required )
+ {
+ # Saving the files
+ installer::files::save_file($reglocatfilename ,$reglocatfile);
+ $infoline = "Making idt file 64 bit conform: $reglocatfilename\n";
+ push(@installer::globals::logfileinfo, $infoline);
+ }
+ }
+
+ # 2. Replacing all occurences of "VersionNT" by "VersionNT64"
+
+ my @versionnt_files = ("Componen.idt", "InstallE.idt", "InstallU.idt", "LaunchCo.idt");
+
+ foreach my $onefile ( @versionnt_files )
+ {
+ my $fullfilename = $basedir . $installer::globals::separator . $onefile;
+
+ if ( -f $fullfilename )
+ {
+ my $saving_required = 0;
+ $filecontent = installer::files::read_file($fullfilename);
+
+ for ( my $i = 3; $i <= $#{$filecontent}; $i++ ) # ignoring the first three lines
+ {
+ my $oneline = ${$filecontent}[$i];
+
+ if ( $oneline =~ /\bVersionNT\b/ )
+ {
+ ${$filecontent}[$i] =~ s/\bVersionNT\b/VersionNT64/g;
+ $saving_required = 1;
+ }
+ }
+
+ if ( $saving_required )
+ {
+ # Saving the files
+ installer::files::save_file($fullfilename ,$filecontent);
+ $infoline = "Making idt file 64 bit conform: $fullfilename\n";
+ push(@installer::globals::logfileinfo, $infoline);
+ }
+ }
+ }
+ }
+
+}
+
#################################################################
# Include all cab files into the msi database.
# This works only on Windows
diff --git a/solenv/config/sdev300.ini b/solenv/config/sdev300.ini
index 3b096337d5d7..c5dc61f7de69 100644
--- a/solenv/config/sdev300.ini
+++ b/solenv/config/sdev300.ini
@@ -96,6 +96,7 @@ common
PROEXT .pro
PROFULLSWITCH product=full
}
+
r_only
{
LU_RFLAG r_only
@@ -116,7 +117,7 @@ common
SRC_ROOT
UPDATER
}
- order minorext common:2 common:3 pro:0 pro:1 common common:0 cwsname common:1 tmp crashdump maxproc hg r_only nosource
+ order minorext common:2 common:3 pro:0 pro:1 common common:0 cwsname common:1 tmp crashdump maxproc hg r_only nosource
reset
{
ALT_L10N_MODULE
@@ -216,9 +217,13 @@ finish
*o: cd %SOLARSRC%
ALT_L10N_MODULE $expand(%SOLARSRC%/..)/sun/l10n_so
TARFILE_LOCATION %SOURCE_ROOT_DIR%/ext_sources
- gb_REPOS %SOURCE_ROOT_DIR%/ooo %SOURCE_ROOT_DIR%/sun
+ gb_REPOS %SRC_ROOT% %SOURCE_ROOT_DIR%/sun
gb_LOCALBUILDDIR %SOL_TMP%/gb_%CWS_WORK_STAMP%/%WORK_STAMP%
}
+ common_setrepo:0 IF X%WITH_LANG%X != XX
+ {
+ gb_REPOS %gb_REPOS% %SOURCE_ROOT_DIR%/l10n
+ }
common_jre:0 IF %JREPATH% ==
{
HIER set
@@ -299,7 +304,7 @@ finish
JAVA_TARGET_FLAG -target 1.6
}
}
- order cwsname:0 cwsname:1 cwsname:2 common_0:0 common_0:1 common_0:2 common_0:3 jdk14 jdk15 ojdk16 common_1 common_2:0 l10n common_jre:0 common_jre:1 cax cap common_a
+ order cwsname:0 cwsname:1 cwsname:2 common_0:0 common_0:1 common_0:2 common_0:3 jdk14 jdk15 ojdk16 common_1 common_2:0 l10n common_jre:0 common_jre:1 cax cap common_a common_setrepo:0
switches
{
cwsname CWS_WORK_STAMP
diff --git a/solenv/gbuild/AllLangResTarget.mk b/solenv/gbuild/AllLangResTarget.mk
index 3bf50bd4e988..f8770dc5158d 100644
--- a/solenv/gbuild/AllLangResTarget.mk
+++ b/solenv/gbuild/AllLangResTarget.mk
@@ -32,7 +32,7 @@ gb_SrsPartMergeTarget_TRANSEXAUXDEPS := $(call gb_Library_get_target,tl) $(call
# gb_SrsPartMergeTarget_TRANSEXPRECOMMAND is set by the platforms
gb_SrsPartMergeTarget_TRANSEXCOMMAND := $(gb_SrsPartMergeTarget_TRANSEXPRECOMMAND) $(gb_SrsPartMergeTarget_TRANSEXTARGET)
-gb_SrsPartMergeTarget_SDFLOCATION := $(SRCDIR)/l10n/$(INPATH)/misc/sdf/
+gb_SrsPartMergeTarget_SDFLOCATION := $(LOCDIR)/l10n/$(INPATH)/misc/sdf/
gb_SrsPartMergeTarget_REPOS := $(gb_REPOS)
define gb_SrsPartMergeTarget__command
diff --git a/solenv/gbuild/platform/linux.mk b/solenv/gbuild/platform/linux.mk
index a000f8bfad1f..2cbeca889001 100755
--- a/solenv/gbuild/platform/linux.mk
+++ b/solenv/gbuild/platform/linux.mk
@@ -122,7 +122,7 @@ gb_LinkTarget_NOEXCEPTIONFLAGS := \
gb_LinkTarget_LDFLAGS := \
-Wl,--sysroot=$(SYSBASE) \
- -Wl,-rpath-link=$(SOLARLIBDIR):$(SYSBASE)/lib:$(SYSBASE)/usr/lib \
+ -Wl,-rpath-link,$(SYSBASE)/lib:$(SYSBASE)/usr/lib \
-Wl,-z,combreloc \
-Wl,-z,defs \
$(subst -L../lib , ,$(SOLARLIB)) \
diff --git a/solenv/inc/_cppunit.mk b/solenv/inc/_cppunit.mk
index 8d9e45d33331..85804dd41ac6 100644
--- a/solenv/inc/_cppunit.mk
+++ b/solenv/inc/_cppunit.mk
@@ -1,7 +1,7 @@
# unroll begin
# ---- create the test libraries ------------------------------------
-.IF "$(SHL1TARGET)"!=""
+.IF "$(SHL1TARGETN)"!=""
ALLTAR : test1
test1 .PHONY : $(SHL1TARGETN)
@echo ----------------------------------------------------------
@@ -13,7 +13,7 @@ test1 .PHONY : $(SHL1TARGETN)
# unroll begin
# ---- create the test libraries ------------------------------------
-.IF "$(SHL2TARGET)"!=""
+.IF "$(SHL2TARGETN)"!=""
ALLTAR : test2
test2 .PHONY : $(SHL2TARGETN)
@echo ----------------------------------------------------------
@@ -25,7 +25,7 @@ test2 .PHONY : $(SHL2TARGETN)
# unroll begin
# ---- create the test libraries ------------------------------------
-.IF "$(SHL3TARGET)"!=""
+.IF "$(SHL3TARGETN)"!=""
ALLTAR : test3
test3 .PHONY : $(SHL3TARGETN)
@echo ----------------------------------------------------------
@@ -37,7 +37,7 @@ test3 .PHONY : $(SHL3TARGETN)
# unroll begin
# ---- create the test libraries ------------------------------------
-.IF "$(SHL4TARGET)"!=""
+.IF "$(SHL4TARGETN)"!=""
ALLTAR : test4
test4 .PHONY : $(SHL4TARGETN)
@echo ----------------------------------------------------------
@@ -49,7 +49,7 @@ test4 .PHONY : $(SHL4TARGETN)
# unroll begin
# ---- create the test libraries ------------------------------------
-.IF "$(SHL5TARGET)"!=""
+.IF "$(SHL5TARGETN)"!=""
ALLTAR : test5
test5 .PHONY : $(SHL5TARGETN)
@echo ----------------------------------------------------------
@@ -61,7 +61,7 @@ test5 .PHONY : $(SHL5TARGETN)
# unroll begin
# ---- create the test libraries ------------------------------------
-.IF "$(SHL6TARGET)"!=""
+.IF "$(SHL6TARGETN)"!=""
ALLTAR : test6
test6 .PHONY : $(SHL6TARGETN)
@echo ----------------------------------------------------------
@@ -73,7 +73,7 @@ test6 .PHONY : $(SHL6TARGETN)
# unroll begin
# ---- create the test libraries ------------------------------------
-.IF "$(SHL7TARGET)"!=""
+.IF "$(SHL7TARGETN)"!=""
ALLTAR : test7
test7 .PHONY : $(SHL7TARGETN)
@echo ----------------------------------------------------------
@@ -85,7 +85,7 @@ test7 .PHONY : $(SHL7TARGETN)
# unroll begin
# ---- create the test libraries ------------------------------------
-.IF "$(SHL8TARGET)"!=""
+.IF "$(SHL8TARGETN)"!=""
ALLTAR : test8
test8 .PHONY : $(SHL8TARGETN)
@echo ----------------------------------------------------------
@@ -97,7 +97,7 @@ test8 .PHONY : $(SHL8TARGETN)
# unroll begin
# ---- create the test libraries ------------------------------------
-.IF "$(SHL9TARGET)"!=""
+.IF "$(SHL9TARGETN)"!=""
ALLTAR : test9
test9 .PHONY : $(SHL9TARGETN)
@echo ----------------------------------------------------------
@@ -109,7 +109,7 @@ test9 .PHONY : $(SHL9TARGETN)
# unroll begin
# ---- create the test libraries ------------------------------------
-.IF "$(SHL10TARGET)"!=""
+.IF "$(SHL10TARGETN)"!=""
ALLTAR : test10
test10 .PHONY : $(SHL10TARGETN)
@echo ----------------------------------------------------------
diff --git a/solenv/inc/cppunit.mk b/solenv/inc/cppunit.mk
index 2173f1a9ff9a..b30ca7152700 100644
--- a/solenv/inc/cppunit.mk
+++ b/solenv/inc/cppunit.mk
@@ -44,7 +44,7 @@
# unroll begin
# ---- create the test libraries ------------------------------------
-.IF "$(SHL$(TNR)TARGET)"!=""
+.IF "$(SHL$(TNR)TARGETN)"!=""
ALLTAR : test$(TNR)
test$(TNR) .PHONY : $(SHL$(TNR)TARGETN)
@echo ----------------------------------------------------------
diff --git a/solenv/inc/extension_post.mk b/solenv/inc/extension_post.mk
index f221ff7ebe4a..7b8c99b37fe8 100644
--- a/solenv/inc/extension_post.mk
+++ b/solenv/inc/extension_post.mk
@@ -69,10 +69,22 @@ $(COMPONENT_JARFILES) : $(CLASSDIR)/$$(@:f)
.ENDIF # "$(COMPONENT_JARFILES)"!=""
.IF "$(COMPONENT_LIBRARIES)"!=""
+PACK_RUNTIME!:=TRUE
# TODO(Q3): strip the binary?
$(COMPONENT_LIBRARIES) : $(DLLDEST)/$$(@:f)
@@-$(MKDIRHIER) $(@:d)
$(COMMAND_ECHO)$(COPY) $< $@
+.ENDIF # "$(COMPONENT_LIBRARIES)"!=""
+
+.IF "$(PACK_RUNTIME)"!=""
+PACK_RUNTIME_FLAG:=$(MISC)/$(TARGET)_pack_runtime.flag
+$(EXTENSION_TARGET) : $(PACK_RUNTIME_FLAG)
+
+$(EXTENSIONDIR) :
+ @@-$(MKDIRHIER) $(@:d)
+
+$(PACK_RUNTIME_FLAG) : $(EXTENSIONDIR)
+ @@-$(MKDIRHIER) $(@:d)
.IF "$(OS)$(CPU)"=="WNTI"
.IF "$(COM)"=="GCC"
$(GNUCOPY) $(SOLARBINDIR)/mingwm10.dll $(EXTENSIONDIR)
@@ -120,7 +132,8 @@ $(COMPONENT_LIBRARIES) : $(DLLDEST)/$$(@:f)
.ENDIF # "$(PACKMS)"!=""
.ENDIF #"$(COM)"=="GCC"
.ENDIF # "$(OS)$(CPU)"=="WNTI"
-.ENDIF # "$(COMPONENT_LIBRARIES)"!=""
+ @$(TOUCH) $@
+.ENDIF # "$(PACK_RUNTIME)"!=""
IMPLEMENTATION_IDENTIFIER*="com.sun.star.$(EXTENSIONNAME)-$(PLATFORMID)"
diff --git a/solenv/inc/langlist.mk b/solenv/inc/langlist.mk
index 32045cbf6262..e3ac2e5065ff 100644
--- a/solenv/inc/langlist.mk
+++ b/solenv/inc/langlist.mk
@@ -25,7 +25,6 @@
#
#*************************************************************************
-
completelangiso=af \
ar \
as \
@@ -69,6 +68,7 @@ he \
hi \
hi-IN \
hr \
+ht \
hu \
is \
it \
diff --git a/solenv/inc/settings.mk b/solenv/inc/settings.mk
index a095b7762fbe..b0872169bfc6 100644
--- a/solenv/inc/settings.mk
+++ b/solenv/inc/settings.mk
@@ -810,7 +810,7 @@ SOLARCOMMONSDFDIR=$(SOLARSDFDIR)
.EXPORT : SOLARBINDIR
-L10N_MODULE*=$(SOLARSRC)$/l10n
+L10N_MODULE*=$(SOURCE_ROOT_DIR)/l10n/l10n
ALT_L10N_MODULE*=$(SOLARSRC)$/l10n_so
.IF "$(WITH_LANG)"!=""