summaryrefslogtreecommitdiff
path: root/solenv
diff options
context:
space:
mode:
authorKai Sommerfeld <kso@openoffice.org>2010-06-30 14:10:24 +0200
committerKai Sommerfeld <kso@openoffice.org>2010-06-30 14:10:24 +0200
commit3c1b46b4292d444d3657930c59ccd4566c9218fb (patch)
tree43c4336f650873826af50c5434d7801894d078f6 /solenv
parent49fd9fad5338a6603d81fb84f413b340220033af (diff)
parent27b9afa066637f73af863c12343ea0b31b1b4c71 (diff)
reync to m84
Diffstat (limited to 'solenv')
-rw-r--r--solenv/bin/cws.pl1160
-rwxr-xr-xsolenv/bin/gccinstlib.pl9
-rwxr-xr-xsolenv/bin/jpropex10
-rw-r--r--solenv/bin/macosx-change-install-names.pl2
-rw-r--r--solenv/bin/modules/installer/archivefiles.pm71
-rw-r--r--solenv/bin/modules/installer/simplepackage.pm28
-rw-r--r--solenv/bin/modules/installer/systemactions.pm47
-rw-r--r--solenv/bin/modules/installer/windows/admin.pm79
-rw-r--r--solenv/config/sdev300.ini2
-rw-r--r--solenv/inc/ant.properties1
-rw-r--r--solenv/inc/libs.mk6
-rw-r--r--solenv/inc/minor.mk6
-rw-r--r--solenv/inc/settings.mk2
-rw-r--r--solenv/inc/target.mk2
-rw-r--r--solenv/inc/tg_compv.mk14
-rwxr-xr-xsolenv/inc/tg_propmerge.mk66
-rw-r--r--solenv/inc/unxlng.mk2
-rw-r--r--solenv/inc/unxsoli4.mk2
-rw-r--r--solenv/inc/unxsols4.mk2
-rw-r--r--solenv/inc/unxsolu4.mk2
-rw-r--r--solenv/inc/wntgcci.mk2
21 files changed, 383 insertions, 1132 deletions
diff --git a/solenv/bin/cws.pl b/solenv/bin/cws.pl
index f776f8cf3..f241ea039 100644
--- a/solenv/bin/cws.pl
+++ b/solenv/bin/cws.pl
@@ -56,10 +56,7 @@ use Cws;
#### globals ####
-# TODO: replace dummy vales with actual SVN->hg and source_config migration milestones
-my $dev300_migration_milestone = 'm64';
-my $dev300_source_config_milestone = 'm65';
-my $ooo320_migration_milestone = 'm13';
+# TODO: replace dummy vales with actual source_config migration milestone
my $ooo320_source_config_milestone = 'm999';
# valid command with possible abbreviations
@@ -67,11 +64,8 @@ my @valid_commands = (
'help', 'h', '?',
'create',
'fetch', 'f',
- 'rebase', 'rb',
'query', 'q',
'task', 't',
- 'integrate',
- 'cdiff', 'cd',
'eisclone',
'setcurrent'
);
@@ -80,13 +74,10 @@ my @valid_commands = (
my %valid_options_hash = (
'help' => ['help'],
'create' => ['help', 'milestone', 'migration', 'hg'],
- 'fetch' => ['help', 'switch', 'milestone', 'childworkspace','platforms','quiet',
+ 'fetch' => ['help', 'milestone', 'childworkspace','platforms','quiet',
'onlysolver'],
- 'rebase' => ['help', 'milestone','commit'],
'query' => ['help', 'milestone','masterworkspace','childworkspace'],
'task' => ['help'],
- 'integrate' => ['help', 'childworkspace'],
- 'cdiff' => ['help', 'childworkspace', 'masterworkspace', 'files', 'modules'],
'setcurrent' => ['help', 'milestone'],
'eisclone' => ['help']
);
@@ -128,12 +119,9 @@ sub parse_command_line
'debug',
'profile',
'commit|C',
- 'switch|s',
'platforms|p=s',
'onlysolver|o',
'quiet|q',
- 'files',
- 'modules',
'help|h'
);
@@ -151,18 +139,12 @@ sub parse_command_line
elsif ($command eq 'f') {
$command = 'fetch';
}
- elsif ($command eq 'rb') {
- $command = 'rebase';
- }
elsif ($command eq 'q') {
$command = 'query';
}
elsif ($command eq 't') {
$command = 'task';
}
- elsif ($command eq 'cd') {
- $command = 'cdiff';
- }
# An unkown option might be accompanied with a valid command.
# Show the command specific help
@@ -202,8 +184,6 @@ sub verify_options
}
}
- # TODO here should be specific checks for the arguments
- # if the check is globally valid
}
# Dispatches to the do_xxx() routines depending on command.
@@ -259,66 +239,6 @@ BEGIN {
}
}
-# Fetches milestone URL for given server and milestone.
-sub get_milestone_url
-{
- my $server = shift;
- my $master = shift;
- my $milestone = shift;
-
- my $milestone_url = "$server/tags/${master}_${milestone}";
- return $milestone_url;
-}
-
-# Fetches CWS URL for given server and CWSname.
-sub get_cws_url
-{
- my $server = shift;
- my $cws = shift;
-
- my $cws_url = "$server/cws/$cws";
- return $cws_url;
-}
-
-sub get_master_url
-{
- my $server = shift;
- my $master = shift;
- my $revision = shift;
-
- my $url = "${server}/";
-
- # TODO: update EIS function for subversion
- my $cws = get_this_cws();
- my $trunk = $cws->get_cvs_head();
- if ( $master eq $trunk ) {
- $url .= 'trunk';
- }
- else {
- my $master_label = uc($master);
- $url .= "branches/$master_label";
- }
-
- # attach revision if needed
- if ( $revision != 0 ) {
- $url .= "\@$revision";
- }
- return $url;
-}
-
-# Returns the URL shortened by the server part
-sub get_short_url
-{
- my $server = shift;
- my $url = shift;
-
- my $offset = length("$server/");
- $url = substr($url, $offset);
-
- return $url;
-}
-
-
# Fetches the current CWS from environment, returns a Cws object
sub get_cws_from_environment
{
@@ -849,11 +769,11 @@ sub query_latest
if ( $latest ) {
print_message("Master workspace '$masterws':");
- print_message("Latest milestone available for rebase:");
+ print_message("Latest milestone available for update:");
print "$masterws $latest\n";
}
else {
- print_error("Can't determine latest milestone of '$masterws' available for rebase.", 3);
+ print_error("Can't determine latest milestone of '$masterws' available for update.", 3);
}
return;
@@ -1420,106 +1340,6 @@ sub update_solver
}
}
-sub write_rebase_configuration
-{
- my $workspace = shift;
- my $cwsname = shift;
- my $master = shift;
- my $milestone = shift;
-
- my $rebase_config = "$workspace/REBASE.CONFIG_DONT_DELETE";
-
- open(REBASE, ">$rebase_config") or print_error("Can't open file '$rebase_config' for writing: $!", 98);
- print REBASE "CWS-TOOLING: do not delete this file, it's needed for 'cws rebase -C'\n";
- print REBASE "CWS: $cwsname\n";
- print REBASE "New MWS: $master\n";
- print REBASE "New milestone: $milestone\n";
- close(REBASE);
-}
-
-sub read_rebase_configuration
-{
- my $workspace = shift;
-
- my $rebase_config = "$workspace/REBASE.CONFIG_DONT_DELETE";
-
- my $master;
- my $milestone;
-
- open(REBASE, "<$rebase_config") or print_error("Can't open file '$rebase_config' for reading: $!", 98);
- while(<REBASE>) {
- if ( /New MWS: (\w+)/ ) {
- $master = $1;
- }
- if ( /New milestone: (\w+)/ ) {
- $milestone = $1;
- }
- }
- close(REBASE);
-
- if ( !defined($master) || !defined($milestone) ) {
- print_error("File '$rebase_config' seems to be garbled. Can't continue.", 98)
- }
-
- return ($master, $milestone);
-}
-
-sub diff_print_files
-{
- my $files_ref = shift;
- my $diff_options = shift;
-
- my @files = sort(@{$files_ref});
-
- if ( $diff_options eq 'files') {
- foreach(@files) {
- print "$_\n";
- }
- }
- else {
- my @modules;
- foreach(@files) {
- my ($module) = split(/\//, $_);
- push(@modules, $module);
- }
- # remove adjacent uniques
- my $prev = 'nosuchmodule';
- my @unique_modules = grep($_ ne $prev && (($prev) = $_), @modules);
- foreach(@unique_modules) {
- print "$_\n";
- }
- }
-}
-
-# TODO: special provisions for SVN->HG migrations, remove this
-# some time after migration
-sub get_scm_for_milestone
-{
- my $masterws = shift;
- my $milestone = shift;
-
- my $milestone_sequence_number = extract_milestone_sequence_number($milestone);
- my $dev300_migration_sequence_number = extract_milestone_sequence_number($dev300_migration_milestone);
- my $ooo320_migration_sequence_number = extract_milestone_sequence_number($ooo320_migration_milestone);
-
- my $scm = 'SVN';
-
- if ( $masterws eq 'DEV300' ) {
- if ( $milestone_sequence_number >= $dev300_migration_sequence_number ) {
- $scm = 'HG';
- }
- }
- elsif ( $masterws eq 'OOO320' ) {
- if ( $milestone_sequence_number >= $ooo320_migration_sequence_number ) {
- $scm = 'HG';
- }
- }
- else {
- $scm = 'SVN';
- }
- return $scm;
-}
-
# TODO: special provisions for "source_config" migration, remove this
# some time after migration
sub get_source_config_for_milestone
@@ -1528,24 +1348,14 @@ sub get_source_config_for_milestone
my $milestone = shift;
my $milestone_sequence_number = extract_milestone_sequence_number($milestone);
- my $dev300_migration_sequence_number = extract_milestone_sequence_number($dev300_source_config_milestone);
my $ooo320_migration_sequence_number = extract_milestone_sequence_number($ooo320_source_config_milestone);
- my $source_config = 0;
-
- if ( $masterws eq 'DEV300' ) {
- if ( $milestone_sequence_number >= $dev300_migration_sequence_number ) {
- $source_config = 1;
- }
- }
- elsif ( $masterws eq 'OOO320' ) {
- if ( $milestone_sequence_number >= $ooo320_migration_sequence_number ) {
- $source_config = '1';
+ my $source_config = 1;
+ if ( $masterws eq 'OOO320' ) {
+ if ( $milestone_sequence_number < $ooo320_migration_sequence_number ) {
+ $source_config = 0;
}
}
- else {
- $source_config = 0;
- }
return $source_config;
}
@@ -1577,12 +1387,9 @@ sub do_help
print STDERR "\thelp (h,?)\n";
print STDERR "\tcreate\n";
print STDERR "\tfetch (f)\n";
- print STDERR "\trebase (rb) (SVN only)\n";
print STDERR "\tquery (q)\n";
print STDERR "\ttask (t)\n";
- print STDERR "\tcdiff (cd) (SVN only)\n";
print STDERR "\tsetcurrent\n";
- print STDERR "\tintegrate *** release engineers only ***\n";
print STDERR "\teisclone *** release engineers only ***\n";
}
@@ -1594,13 +1401,10 @@ sub do_help
}
elsif ($arg eq 'create') {
print STDERR "create: Create a new child workspace\n";
- print STDERR "usage: create [--hg] [-m milestone] <master workspace> <child workspace>\n";
+ print STDERR "usage: create [-m milestone] <master workspace> <child workspace>\n";
print STDERR "\t-m milestone: Milestone to base the child workspace on. If ommitted the\n";
print STDERR "\t last published milestone will be used.\n";
print STDERR "\t--milestone milestone: Same as -m milestone.\n";
- print STDERR "\t--hg: Create Mercurial (hg) based CWS.\n";
- print STDERR "\t--migration: Used only for the migration of an exitisting CWS from CVS to SVN.\n";
- print STDERR "\t Disables existence check in EIS, creates CWS branch in SVN, sets SVN flag.\n";
}
elsif ($arg eq 'task') {
print STDERR "task: Add a task to a child workspace\n";
@@ -1651,18 +1455,16 @@ sub do_help
}
elsif ($arg eq 'fetch') {
print STDERR "fetch: fetch a milestone or CWS\n";
- print STDERR "usage: fetch [-q] [-s] [-p platforms] [-o] <-m milestone> <workspace>\n";
- print STDERR "usage: fetch [-q] [-s] [-p platforms] [-o] <-c cws> <workspace>\n";
- print STDERR "usage: fetch [-q] [-s] <-m milestone> <workspace>\n";
- print STDERR "usage: fetch [-q] [-s] <-c cws> <workspace>\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] <-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";
print STDERR "\t Use 'latest' for the for lastest published milestone on the current master\n";
print STDERR "\t For cross master checkouts use the form <MWS>:<milestone>\n";
print STDERR "\t--milestone milestone: Same as -m milestone\n";
print STDERR "\t-c childworkspace: Checkout CWS <childworkspace> to workspace <workspace>\n";
print STDERR "\t--child childworkspace: Same as -c childworkspace\n";
- print STDERR "\t-s: Try to switch an existing workspace <workspace> to milestone or CWS\n";
- print STDERR "\t--switch: Same as -s\n";
print STDERR "\t-p platform: Copy one or more prebuilt platforms 'platform'. \n";
print STDERR "\t Separate multiple platforms with commas.\n";
print STDERR "\t--platforms platform: Same as -p\n";
@@ -1671,36 +1473,6 @@ sub do_help
print STDERR "\t-q Silence some of the output of the command.\n";
print STDERR "\t--quiet: Same as -q\n";
}
- elsif ($arg eq 'rebase') {
- print STDERR "rebase: Rebase a child workspace to a new milestone (SVN only)\n";
- print STDERR "usage: rebase <-m milestone> <workspace>\n";
- print STDERR "usage: rebase <-C> <workspace>\n";
- print STDERR "\t-m milestone: Merge changes on MWS into CWS up to and including milestone <milestone>\n";
- print STDERR "\t Use 'latest' for the for lastest published milestone on the current master\n";
- print STDERR "\t For cross master rebases use the form <MWS>:<milestone>\n";
- print STDERR "\t--milestone milestone: Same as -m milestone\n";
- print STDERR "\t-C: Commit changes made by merge step and update current milestone in database\n";
- print STDERR "\t--commit: Same as -C\n"
- }
- elsif ($arg eq 'integrate') {
- print STDERR "integrate: Integrate a child workspace into a master workspace\n";
- print STDERR "usage: integrate <-c childworkspace>\n";
- print STDERR "usage: integrate <-C>\n";
- print STDERR "\t-c childworkspace: Merge changes on CWS <childworkspace> into MWS\n";
- print STDERR "\t--child childworkspace: Same as -c childworkspace\n";
- print STDERR "\t-C: Commit changes made by merge step and update CWS status in database\n";
- print STDERR "\t--commit: Same as -C\n"
- }
- elsif ($arg eq 'cdiff') {
- print STDERR "cdiff: Show changes on CWS relative to current milestone (SVN only)\n";
- print STDERR "usage: cdiff [-M master] [-c child] [--files] [--modules]\n";
- print STDERR "\t-M master:\t\toverride MWS specified in environment\n";
- print STDERR "\t-c child:\t\toverride CWS specified in environment\n";
- print STDERR "\t--master master:\tSame as -M master\t\n";
- print STDERR "\t--child child:\t\tSame -c child\n";
- print STDERR "\t--files: Print only file names\n";
- print STDERR "\t--modules: Print only top level directories aka modules\n"
- }
elsif ($arg eq 'setcurrent') {
print STDERR "setcurrent: Set the current milestone for the CWS (only hg based CWSs)\n";
print STDERR "usage: setcurrent [-m milestone]\n";
@@ -1726,14 +1498,8 @@ sub do_create
do_help(['create']);
}
- my $is_migration = 0;
- if ( exists $options_ref->{'migration'} ) {
- $is_migration = 1;
- }
-
- my $is_hg = 0;
if ( exists $options_ref->{'hg'} ) {
- $is_hg = 1;
+ print_warning("All childworkspaces are now hosted on Mercurial. The switch --hg is obsolete.");
}
my $master = uc $args_ref->[0];
@@ -1765,12 +1531,7 @@ sub do_create
$is_promotion++;
}
else {
- if ( $is_migration ) {
- print_message("Create CWS branch in Subversion for migrating CWS '$cws_name' from CVS.");
- }
- else {
- print_error("Child workspace '$cws_name' already exists.", 7);
- }
+ print_error("Child workspace '$cws_name' already exists.", 7);
}
}
else {
@@ -1796,332 +1557,11 @@ sub do_create
# set milestone
$cws->milestone($milestone);
- # handle mercurial(hg) based CWSs
- if ( $is_hg ) {
- register_child_workspace($cws, 'hg', $is_promotion);
- return;
- }
-
- # Refuse to create Subversion hosted cildworkspaces after
- # migration milestone
- my $milestone_scm = get_scm_for_milestone($cws->master(), $cws->milestone());
- if ( $milestone_scm eq 'HG' ) {
- print_error("This code line has been migrated to Mercurial.", 0);
- print_error("Please use the '--hg' option to create a Mercurial hosted CWS.", 8);
- }
-
- my $config = CwsConfig->new();
- my $ooo_svn_server = $config->get_ooo_svn_server();
- my $so_svn_server = $config->get_so_svn_server();
-
- if (!defined($ooo_svn_server)) {
- print_error("No OpenOffice.org SVN server defined, please check your configuration file.", 8);
- }
-
- my $ooo_milestone_url = get_milestone_url($ooo_svn_server, $cws->master(), $milestone);
- my $ooo_cws_url = get_cws_url($ooo_svn_server, $cws_name);
-
- my $so_milestone_url;
- my $so_cws_url;
- if ( defined($so_svn_server) ) {
- $so_milestone_url = get_milestone_url($so_svn_server, $cws->master(), $milestone);
- $so_cws_url = get_cws_url($so_svn_server, $cws_name);
- }
-
- # There is a slight chance that the cws creation was interrupted before registration before.
- # Check for potential remains in the repository
- my $ooo_path_exists = 0;
- my $so_path_exists = 0;
-
- print STDERR "... check cws path:\t'$ooo_cws_url'";
- if ( svn_path_exists($ooo_cws_url) ) {
- $ooo_path_exists=1;
- print STDERR "\n";
- }
- else {
- print STDERR ", OK\n";
- }
-
- if ( defined($so_svn_server) ) {
- print STDERR "... check cws path:\t'$so_cws_url'";
- if ( svn_path_exists($so_cws_url) ) {
- print STDERR "\n";
- $so_path_exists = 1;
- }
- else {
- print STDERR ", OK\n";
- }
- }
-
- if ( $ooo_path_exists ) {
- print_error("SVN path '$ooo_cws_url' already exists.\nThis can happen if a previous CWS creation attempt failed before registering the CWS with EIS.\nIf this is the case, please delete the path with:\n\t svn delete -m'CWS-TOOLING: undo broken CWS creation' $ooo_cws_url\n", 0);
- }
-
- if ( $so_path_exists ) {
- print_error("SVN path '$so_cws_url' already exists.\nThis can happen if a previous CWS creation attempt failed before registering the CWS with EIS.\nIf this is the case, please delete the path with:\n\t svn delete -m'CWS-TOOLING: undo broken CWS creation' $so_cws_url\n", 0);
- }
-
- if ( $ooo_path_exists || $so_path_exists ) {
- exit(15);
- }
-
- # determine the revision from which the milestone was copied
- my $ooo_milestone_revision;
- my $so_milestone_revision;
-
- $ooo_milestone_revision = svn_milestone_revision($ooo_milestone_url);
- if ( !$ooo_milestone_revision ) {
- print_error("Can't retrieve revision for milestone '$milestone', url '$ooo_milestone_url.", 17 );
- }
- if ( defined($so_svn_server) ) {
- $so_milestone_revision = svn_milestone_revision($so_milestone_url);
- if ( !$so_milestone_revision ) {
- print_error("Can't retrieve revision for milestone '$milestone', url '$so_milestone_url.", 17 );
- }
- }
+ register_child_workspace($cws, 'hg', $is_promotion);
- my $ooo_master_url;
- my $so_master_url;
-
- $ooo_master_url = get_master_url($ooo_svn_server, $cws->master(), $ooo_milestone_revision);
- if ( defined($so_svn_server) ) {
- $so_master_url = get_master_url($so_svn_server, $cws->master(), $so_milestone_revision);
- }
-
- my $ooo_short_url = get_short_url($ooo_svn_server, $ooo_master_url);
- my $ooo_creation_comment = "CWS-TOOLING: create CWS " . $cws->child() . " from $ooo_short_url (milestone: " . $cws->master() . ":$milestone)";
- # create branches an ooo server and an optional so server
- print STDERR "... create branch:\t'$ooo_cws_url'";
- svn_copy($ooo_creation_comment, $ooo_master_url, $ooo_cws_url);
- if ( defined($so_svn_server) ) {
- my $so_short_url = get_short_url($so_svn_server, $so_master_url);
- my $so_creation_comment = "CWS-TOOLING: create CWS " . $cws->child() . " from $so_short_url (milestone: " . $cws->master() . ":$milestone)";
- print STDERR "... create branch:\t'$so_cws_url'";
- svn_copy($so_creation_comment, $so_master_url, $so_cws_url);
- }
-
- if ( $is_migration ) {
- # Set master and milestone
- $cws->master($master);
- $cws->milestone($milestone);
- my $rc = $cws->set_subversion_flag(1);
- if ( !$rc ) {
- print_error("Failed to set subversion flag on child workspace '$cws_name'.\nContact EIS administrator!\n", 12);
- }
- }
- else {
- register_child_workspace($cws, 'svn', $is_promotion);
- }
return;
}
-sub do_rebase
-{
- my $args_ref = shift;
- my $options_ref = shift;
-
- my $commit_phase = 0;
- my $milestone;
-
- # TODO: Switching to a new master dooes work not correctly yet
-
- if (exists $options_ref->{'help'} || @{$args_ref} != 1) {
- do_help(['rebase']);
- }
- if ( exists($options_ref->{'commit'}) && exists($options_ref->{'milestone'}) ) {
- print_error("Option -m (--milestone) and -C (--commit) are mutually exclusive.", 0 );
- do_help(['rebase']);
- }
- if ( !exists($options_ref->{'commit'}) && !exists($options_ref->{'milestone'}) ) {
- print_error("At least one of the options -m (--milestone) or -C (--commit) are required.", 0 );
- do_help(['rebase']);
- }
-
- if ( !svn_version_check() ) {
- print_error("cws rebase requires svn-1.5.4 or later (merge tracking and bug fixes). Please upgrade your svn client.", 1);
- }
-
- my $cws = get_cws_from_environment();
-
- my $old_masterws = $cws->master();
- my $new_masterws;
- my $new_milestone;
-
- my $workspace = $args_ref->[0];
-
- if ( ! -d $workspace ) {
- print_error("Can't find workspace '$workspace': $!", 99);
- }
-
- if ( exists($options_ref->{'commit'}) ) {
- $commit_phase=1;
- ($new_masterws, $new_milestone) = read_rebase_configuration($workspace);
- }
- elsif( exists($options_ref->{'milestone'}) ) {
- $milestone = $options_ref->{'milestone'};
- if ( $milestone eq 'latest' ) {
- my $latest = $cws->get_current_milestone($old_masterws);
-
- if ( !$latest ) {
- print_error("Can't determine latest milestone of '$old_masterws' available for rebase.", 22);
- }
- $new_masterws = $old_masterws;
- $new_milestone = $latest;
- }
- else {
- ($new_masterws, $new_milestone) = verify_milestone($cws, $milestone);
- }
- }
- else {
- do_help(['rebase']);
- }
-
- if ( $cws->get_scm() eq 'HG' ) {
- my $child = $cws->child();
- print_error("cws rebase is not supported for mercurial based childworkspaces", 0);
- print_error("re-synchronize your CWS with:", 0);
- print_error("hg pull <master>", 0);
- print_error("hg merge", 0);
- print_error("hg commit -m\"$child: merge with $new_masterws $new_milestone\"", 0);
- print_error("and update EIS with:", 0);
- print_error("cws setcurrent -m $new_milestone", 99);
- }
-
- my $so_setup = 0;
- my $ooo_path;
- my $so_path;
- # Determine if we got a three directory (so) setup or a plain (ooo) setup.
- # This is only needed as long the build system still relies
- # on having "modules" from different repositories in the same
- # directory besides each other.
- if ( -d "$workspace/$old_masterws/sun" ) {
- $so_setup = 1;
- $ooo_path = "$workspace/$old_masterws/ooo";
- $so_path = "$workspace/$old_masterws/sun";
- }
- else {
- $ooo_path = "$workspace";
- }
-
- my $config = CwsConfig->new();
- my $ooo_svn_server = $config->get_ooo_svn_server();
- my $so_svn_server = $config->get_so_svn_server();
-
- if (!defined($ooo_svn_server)) {
- print_error("No OpenOffice.org SVN server defined, please check your configuration file.", 8);
- }
-
- my $ooo_milestone_url = get_milestone_url($ooo_svn_server, $new_masterws, $new_milestone);
- my $ooo_cws_url = get_cws_url($ooo_svn_server, $cws->child());
-
- my $so_milestone_url;
- my $so_cws_url;
- if ( $so_setup ) {
- $so_milestone_url = get_milestone_url($so_svn_server, $new_masterws, $new_milestone);
- $so_cws_url = get_cws_url($so_svn_server, $cws->child());
- }
-
- my $ooo_milestone_revision;
- my $so_milestone_revision;
-
- $ooo_milestone_revision = svn_milestone_revision($ooo_milestone_url);
- if ( !$ooo_milestone_revision ) {
- print_error("Can't retrieve revision for milestone '$new_milestone', url '$ooo_milestone_url.", 17 );
- }
- if ( defined($so_svn_server) ) {
- $so_milestone_revision = svn_milestone_revision($so_milestone_url);
- if ( !$so_milestone_revision ) {
- print_error("Can't retrieve revision for milestone '$new_milestone', url '$so_milestone_url.", 17 );
- }
- }
-
- my $ooo_master_url;
- my $so_master_url;
-
- $ooo_master_url = get_master_url($ooo_svn_server, $new_masterws, $ooo_milestone_revision);
- if ( defined($so_svn_server) ) {
- $so_master_url = get_master_url($so_svn_server, $new_masterws, $so_milestone_revision);
- }
-
- if ( $commit_phase ) {
- # commit
- print_message("... committing merged changes to workspace '$workspace'.");
- my $ooo_short_url = get_short_url($ooo_svn_server, $ooo_master_url);
- my $commit_message = "CWS-TOOLING: rebase CWS " . $cws->child() . " to $ooo_short_url (milestone: " . $new_masterws . ":$new_milestone)";
- svn_commit($ooo_path, $commit_message);
- if ( $so_setup ) {
- my $so_short_url = get_short_url($so_svn_server, $so_master_url);
- $commit_message = "CWS-TOOLING: rebase CWS " . $cws->child() . " to $so_short_url (milestone: " . $new_masterws . ":$new_milestone)";
- svn_commit($so_path, $commit_message);
- }
- if ( $so_setup) {
- print_message("... rename '$workspace/$old_masterws' -> '$workspace/$new_masterws'\n");
- if ( !rename("$workspace/$old_masterws", "$workspace/$new_masterws") ) {
- print_error("Can't rename '$workspace/$old_masterws' -> '$workspace/$new_masterws': $!", 98);
- }
- print_message("... relinking workspace\n");
- relink_workspace("$workspace/$new_masterws/src.$new_milestone", 1);
- if ( !unlink("$workspace/REBASE.CONFIG_DONT_DELETE") ) {
- print_error("Can't unlink '$workspace/REBASE.CONFIG_DONT_DELETE': $!", 0);
- }
-
- }
-
- print_message("... updating EIS database");
- my $push_return = $cws->set_master_and_milestone($new_masterws, $new_milestone);
- # sanity check
- if ( $$push_return[1] ne $new_milestone) {
- print_error("Couldn't push new milestone '$new_milestone' to database", 0);
- }
- }
- else {
- # merge phase
-
- # check if working directory is switched to the right cws branch
- my $ooo_wc_url;
- my $so_wc_url;
- my $cwsname = $cws->child();
- print_message("... verifying if workspace '$workspace' is switched to CWS '$cwsname'.");
- $ooo_wc_url = svn_wc_url($ooo_path);
- if ( $ooo_wc_url !~ /\/$cwsname$/ ) {
- print_error("Your working copy '$ooo_path' is not switched to the cws branch.\nPlease fix and restart rebasing.", 24);
- }
- if ( $so_setup ) {
- $so_wc_url = svn_wc_url($so_path);
-
- if ( $so_wc_url !~ /\/$cwsname$/ ) {
- print_error("Your working copy '$so_path' is not switched to the cws branch.\nPlease fix and restart rebasing.", 24);
- }
- }
- # check for mixed revisions, locally modified files etc
- if ( !svn_wc_is_clean($ooo_path) || ($so_setup && !svn_wc_is_clean($so_path)) ) {
- print_error("Please fix and restart rebasing.", 25);
- }
-
- print_message("... merging changes up to '$new_masterws:$new_milestone' to workspace '$workspace'.");
- svn_merge($ooo_milestone_url, $ooo_path);
- if ( $so_setup ) {
- svn_merge($so_milestone_url, $so_path);
- }
- # write out the rebase configuration to store new milestone and master information
- write_rebase_configuration($workspace, $cwsname, $new_masterws, $new_milestone);
- }
-}
-
-sub do_integrate
-{
- my $args_ref = shift;
- my $options_ref = shift;
-
- if (exists $options_ref->{'help'} || @{$args_ref} > 0) {
- do_help(['integrate']);
- }
- if ( exists($options_ref->{'commit'}) && exists($options_ref->{'childworkspace'}) ) {
- print_error("Option -c (--child) and -C (--commit) are mutually exclusive.", 0 );
- do_help(['integrate']);
- }
-}
-
# Executes the fetch command.
sub do_fetch
{
@@ -2150,11 +1590,6 @@ sub do_fetch
do_help(['fetch']);
}
- if ( defined($platforms) && $switch ) {
- print_error("Option '-p' is not usuable with Option '-s'.", 0);
- do_help(['fetch']);
- }
-
if ( $onlysolver && !defined($platforms) ) {
print_error("Option '-o' is Only usuable combination with option '-p'.", 0);
do_help(['fetch']);
@@ -2167,7 +1602,6 @@ sub do_fetch
}
$cws->master($masterws);
my $milestone;
- my $scm;
if( defined($milestone_opt) ) {
if ( $milestone_opt eq 'latest' ) {
$cws->master($masterws);
@@ -2181,29 +1615,19 @@ sub do_fetch
else {
($masterws, $milestone) = verify_milestone($cws, $milestone_opt);
}
- $scm = get_scm_for_milestone($masterws, $milestone);
}
elsif ( defined($child) ) {
$cws = get_cws_by_name($child);
$masterws = $cws->master(); # CWS can have another master than specified in ENV
$milestone = $cws->milestone();
- $scm = $cws->get_scm();
}
else {
do_help(['fetch']);
}
- if ( $switch && $scm eq 'HG' ) {
- print_error("Option '-s' is not supported with a hg based CWS.", 0);
- do_help(['fetch']);
- }
-
- if ( $debug ) {
- print STDERR "CWS-DEBUG: SCM: $scm\n";
- }
-
my $config = CwsConfig->new();
- my $ooo_svn_server = $config->get_ooo_svn_server();
+ # $so_svn_server is still required to determine if we are in SO environment
+ # TODO: change this configuration setting to something more meaningful
my $so_svn_server = $config->get_so_svn_server();
my $prebuild_dir = $config->get_prebuild_binaries_location();
my $external_tarball_source = $prebuild_dir;
@@ -2262,111 +1686,43 @@ sub do_fetch
my $workspace = $args_ref->[0];
if ( !$onlysolver ) {
- my $url_suffix = $milestone_opt ? ("/tags/$masterws" . "_$milestone") : ('/cws/' . $cwsname);
- if ( $switch ) {
- # check if to be switched working copy exist or bail out
- if ( ! -d $workspace ) {
- print_error("Can't open workspace '$workspace': $!", 21);
- }
-
- my $so_setup = 0;
- my $ooo_path;
- my $so_path;
- # Determine if we got a three directory (so) setup or a plain (ooo) setup.
- # This is only needed as long the build system still relies
- # on having "modules" from different repositories in the same
- # directory besides each other.
- if ( -d "$workspace/$masterws/sun" ) {
- $so_setup = 1;
- $ooo_path = "$workspace/$masterws/ooo";
- $so_path = "$workspace/$masterws/sun";
- }
- else {
- $ooo_path = "$workspace";
- }
-
- # get the working copy URLs
- my $ooo_new_url = svn_wc_root($ooo_path) . $url_suffix;
- my $so_new_url;
- if ( $so_setup ) {
- $so_new_url = svn_wc_root($so_path) . $url_suffix;
- }
-
- print_message("... switching '$ooo_path' to URL '$ooo_new_url'");
- svn_switch($ooo_path, $ooo_new_url, $quiet);
- # switch working copies
- if ( $so_setup ) {
- print_message("... switching '$so_path' to URL '$so_new_url'");
- svn_switch($so_path, $so_new_url, $quiet);
- }
-
- if ( $so_setup ) {
- relink_workspace("$workspace/$masterws/$linkdir", 0);
- }
+ if ( -e $workspace ) {
+ print_error("File or directory '$workspace' already exists.", 8);
}
- else {
- if (!defined($ooo_svn_server)) {
- print_error("No OpenOffice.org SVN server defined, please check your configuration file.", 8);
- }
- my $ooo_url = $ooo_svn_server . $url_suffix;
- if ( -e $workspace ) {
- print_error("File or directory '$workspace' already exists.", 8);
+ my $clone_milestone_only = $milestone_opt ? $milestone : 0;
+ if ( defined($so_svn_server) ) {
+ if ( !mkdir($workspace) ) {
+ print_error("Can't create directory '$workspace': $!.", 8);
}
-
- if ( !(($scm eq 'SVN') || ($scm eq 'HG')) ) {
- print_error("Unsupported SCM '$scm'.", 8);
+ my $work_master = "$workspace/$masterws";
+ if ( !mkdir($work_master) ) {
+ print_error("Can't create directory '$work_master': $!.", 8);
}
-
- my $clone_milestone_only = $milestone_opt ? $milestone : 0;
- if ( defined($so_svn_server) ) {
- if ( !mkdir($workspace) ) {
- print_error("Can't create directory '$workspace': $!.", 8);
- }
- my $work_master = "$workspace/$masterws";
- if ( !mkdir($work_master) ) {
- print_error("Can't create directory '$work_master': $!.", 8);
- }
- if ( $scm eq 'SVN' ) {
- print_message("... checkout '$ooo_url' to '$work_master/ooo'");
- svn_checkout($ooo_url, "$work_master/ooo", $quiet);
- my $so_url = $so_svn_server . $url_suffix;
- print_message("... checkout '$so_url' to '$work_master/sun'");
- svn_checkout($so_url, "$work_master/sun", $quiet);
- }
- else{
- 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";
- if ( !open(SOURCE_CONFIG, ">$source_config_file") ) {
- print_error("Can't create source_config file '$source_config_file': $!.", 8);
- }
- print SOURCE_CONFIG "[repositories]\n";
- print SOURCE_CONFIG "ooo=active\n";
- print SOURCE_CONFIG "sun=active\n";
- close(SOURCE_CONFIG);
- }
- else {
- my $linkdir = "$work_master/src.$milestone";
- if ( !mkdir($linkdir) ) {
- print_error("Can't create directory '$linkdir': $!.", 8);
- }
- relink_workspace($linkdir);
+ 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";
+ if ( !open(SOURCE_CONFIG, ">$source_config_file") ) {
+ print_error("Can't create source_config file '$source_config_file': $!.", 8);
}
+ print SOURCE_CONFIG "[repositories]\n";
+ print SOURCE_CONFIG "ooo=active\n";
+ print SOURCE_CONFIG "sun=active\n";
+ close(SOURCE_CONFIG);
}
else {
- if ( $scm eq 'SVN' ) {
- print_message("... checkout '$ooo_url' to '$workspace'");
- svn_checkout($ooo_url, $workspace, $quiet);
- }
- else {
- hg_clone_cws_or_milestone('ooo', $cws, $workspace, $clone_milestone_only);
+ my $linkdir = "$work_master/src.$milestone";
+ if ( !mkdir($linkdir) ) {
+ print_error("Can't create directory '$linkdir': $!.", 8);
}
+ relink_workspace($linkdir);
}
}
+ else {
+ hg_clone_cws_or_milestone('ooo', $cws, $workspace, $clone_milestone_only);
+ }
}
if ( !$onlysolver && defined($external_tarball_source) ) {
@@ -2516,91 +1872,6 @@ sub do_task
return;
}
-sub do_cdiff
-{
- my $args_ref = shift;
- my $options_ref = shift;
-
- if ( exists $options_ref->{'help'} || @{$args_ref} != 0) {
- do_help(['cdiff']);
- }
-
- my $files = exists $options_ref->{'files'} ? 1 : 0;
- my $modules = exists $options_ref->{'modules'} ? 1 : 0;
-
- if ( $files && $modules ) {
- print_error("Options --files and --modules are mutally exclusive", 0);
- do_help(['cdiff']);
- }
-
- my $diff_option;
- if ( $files ) {
- $diff_option = 'files';
- }
- elsif ( $modules ) {
- $diff_option = 'modules';
- }
- else {
- $diff_option = 0;
- }
-
-
- my $masterws = exists $options_ref->{'masterworkspace'} ? uc($options_ref->{'masterworkspace'}) : $ENV{WORK_STAMP};
- my $childws = exists $options_ref->{'childworkspace'} ? $options_ref->{'childworkspace'} : $ENV{CWS_WORK_STAMP};
-
- if ( !defined($masterws) ) {
- print_error("Can't determine master workspace environment.\n", 30);
- }
-
- if ( !defined($childws) ) {
- print_error("Can't determine child workspace environment.\n", 30);
- }
-
- my $cws = Cws->new();
- $cws->child($childws);
- $cws->master($masterws);
-
- if ( !is_valid_cws($cws) ) {
- print_error("'$childws' is not a valid CWS name.\n", 30);
- }
-
- if ( $cws->get_scm() eq 'HG' ) {
- print_error("cws cdiff is not supported for mercurial based childworkspaces", 80);
- }
- my $milestone = $cws->milestone();
-
- my $config = CwsConfig->new();
- my $ooo_svn_server = $config->get_ooo_svn_server();
- my $so_svn_server = $config->get_so_svn_server();
-
- my $ooo_milestone_url = get_milestone_url($ooo_svn_server, $masterws, $milestone);
- my $ooo_cws_url = get_cws_url($ooo_svn_server, $childws);
- my $ooo_files;
- if ( $diff_option ) {
- $ooo_files = svn_diff($ooo_milestone_url, $ooo_cws_url, $diff_option);
- diff_print_files($ooo_files, $diff_option);
- }
- else {
- svn_diff($ooo_milestone_url, $ooo_cws_url, 0);
- }
-
- my $so_files;
- if ( $so_svn_server ) {
- my $so_milestone_url = get_milestone_url($so_svn_server, $masterws, $milestone);
- my $so_cws_url = get_cws_url($so_svn_server, $childws);
- if ( svn_path_exists($so_cws_url) ) {
- if ( $diff_option ) {
- $so_files = svn_diff($so_milestone_url, $so_cws_url, $diff_option);
- diff_print_files($so_files, $diff_option);
- }
- else {
- svn_diff($so_milestone_url, $so_cws_url, 0);
- }
- }
- }
-
-}
-
sub do_setcurrent
{
my $args_ref = shift;
@@ -2685,347 +1956,6 @@ sub usage
print STDERR "Type 'cws help' for usage.\n";
}
-### SVN glue ###
-
-# TODO: is it a better idea to use the SVN bindings?
-# pro:
-# - SVN make guarantees about API stability but no about the command line
-# - finer access to the SVN functionality, better error reporting
-# - prevents parsing errors due to localized SVN messages
-# con:
-# - the bindings are difficult to install, mostly due to subtle install bugs
-# - we do not really use much of the SVN functionality here
-
-sub svn_wc_is_clean
-{
- my $wc_path = shift;
-
- my $result = execute_svnversion_command($wc_path);
-
- my $error = 0;
-
- if ( $result =~ /:/ ) {
- print_error("Working copy '$wc_path' contains mixed revisions. Please run 'svn update'!", 0);
- $error++;
- }
- if ( $result =~ /M/ ) {
- print_error("Working copy '$wc_path' contains locally modified files. Please commit or revert all modified files.", 0);
- $error++;
- }
- if ( $result =~ /S/ ) {
- print_error("Working copy '$wc_path' is partially switched. The whole working copy needs to be switched to the CWS branch.", 0);
- $error++;
- }
- if ( $result =~ /P/ ) {
- print_error("Working copy '$wc_path' is only partially checked out. CWS tools can't work on partially checked out working copies.", 0);
- $error++;
- }
-
- return !$error;
-}
-
-sub svn_version_check
-{
- my $major_required = 1;
- my $minor_required = 5;
- my $patchlevel_required = 4;
-
- my $version_required = $major_required*1000000 + $minor_required*1000 + $patchlevel_required;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... svn version\n";
- }
-
- my @result = execute_svn_command(0, '--version --quiet', " ");
- # svn --version --quiet returns the version in major.minor.patchlevel scheme
- # for example: 1.5.4 or 1.6.0-dev (for developer codelines)
- # hopefully they don't change the versioning scheme
- my ($major, $minor, $patchlevel);
- if ( $result[0] =~ /^(\d+)\.(\d+)\.(\d+)/ ) {
- $major = $1;
- $minor = $2;
- $patchlevel = $3;
- }
- else {
- print_error("Can't determine svn version. Please file an issue with the output of 'svn --version --quiet'. CWS tooling requires svn-1.5.4 or later\n", 1)
- }
-
- my $version = $major*1000000 + $minor*1000 + $patchlevel;
-
- if ( $version < $version_required ) {
- return 0;
- }
- return 1;
-}
-
-sub svn_copy
-{
- my $comment = shift;
- my $source = shift;
- my $dest = shift;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing branch: '$source' -> '$dest'\n";
- }
-
- my @result = execute_svn_command(0, 'copy', "-m '$comment'", $source, $dest);
- if ( $result[1] =~ /Committed revision (\d+)\./ ) {
- print STDERR ", committed revision $1\n";
- } else {
- print STDERR "failed!\n";
- print STDERR @result;
- }
-}
-
-sub svn_milestone_revision
-{
- my $milestone_url = shift;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing log --stop-on-copy: '$milestone_url'\n";
- }
-
- my @result = execute_svn_command(0, 'log', '--stop-on-copy', $milestone_url);
-
- # There might be revisions committed to a tag (allowed in subversion).
- # The lowestmost revision listed in a 'log --stop-on-copy' is the one which
- # was current when the tag was created
- my $revision = 0;
- foreach ( @result ) {
- if ( /^r(\d+)\s+\|\s+/ ) {
- $revision = $1;
- }
- }
-
- return $revision;
-}
-
-sub svn_path_exists
-{
- my $url = shift;
-
- my @result = svn_info($url);
-
- foreach ( @result ) {
- if ( /^Path: / ) {
- return 1;
- }
- }
- return 0;
-}
-
-sub svn_wc_url
-{
- my $wc_path = shift;
-
- my @result = svn_info($wc_path);
-
- foreach ( @result ) {
- if ( /^URL: (.+)$/ ) {
- return $1;
- }
- }
-
- print_error("Can't retrieve svn info from working copy '$wc_path'\n", 23);
-}
-
-sub svn_wc_root
-{
- my $wc_path = shift;
-
- my @result = svn_info($wc_path);
-
- foreach ( @result ) {
- if ( /^Repository Root: (.+)$/ ) {
- return $1;
- }
- }
-
- print_error("Can't retrieve svn info from working copy '$wc_path'\n", 23);
-}
-
-sub svn_info
-{
- my $url = shift;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing info: '$url'\n";
- }
-
- my @result = execute_svn_command(0, 'info', '--depth empty', $url);
- return @result;
-}
-
-sub svn_merge
-{
- my $url = shift;
- my $wc = shift;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing merge: '$url -> $wc'\n";
- }
-
- my $log_file = "$wc/REBASE.LOG";
- my @result = execute_svn_command($log_file, 'merge', '--accept postpone', $url, $wc);
- return @result;
-}
-
-sub svn_switch
-{
- my $wc = shift;
- my $url = shift;
- my $quiet = shift;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing switch: '$url -> $wc'\n";
- }
-
- my $switch = $quiet ? 'switch --quiet' : 'switch';
-
- my @result = execute_svn_command('print', $switch, $url, $wc);
- return @result;
-}
-
-sub svn_checkout
-{
- my $url = shift;
- my $wc = shift;
- my $quiet = shift;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing checkout: '$url -> $wc'\n";
- }
-
- my $checkout = $quiet ? 'checkout --quiet' : 'checkout';
-
- my @result = execute_svn_command('print', $checkout, $url, $wc);
- return @result;
-}
-
-sub svn_commit
-{
- my $wc = shift;
- my $commit_message = shift;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing commit: '$wc'\n";
- }
-
- my $log_file = "$wc/REBASE.LOG";
- my @result = execute_svn_command($log_file, 'commit', "-m '$commit_message'", $wc);
- return @result;
-}
-
-sub svn_diff
-{
- my $url1 = shift;
- my $url2 = shift;
- my $diff_option = shift;
-
- my $summarize = '';
- if ( $diff_option ) {
- $summarize = '--summarize';
- }
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing diff $summarize: '$url1' vs. '$url2'\n";
- }
-
- if ( $summarize ) {
- my $result = execute_svn_command(0, 'diff', $summarize, $url1, $url2);
- my $nlen = length($url1);
- my @files;
- foreach( @{$result} ) {
- my ($dummy, $url) = split();
- next if length($url) <= $nlen; # skip short URLs (like $url1)
- my $file = substr($url, $nlen+1);
- next if index($file, '/') == -1; # skip 'modified' top level dirs
- push (@files, $file);
- }
- return \@files;
- }
- else {
- execute_svn_command('print', 'diff', $url1, $url2);
- }
-}
-
-sub execute_svn_command
-{
- my $log = shift;
- my $command = shift;
- my $options = shift;
- my @args = @_;
-
- my $args_str = join(" ", @args);
-
- # we can only parse english strings, hopefully a C locale is available everywhere
- $ENV{LC_ALL}='C';
- $command = "svn $command $options $args_str";
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... execute command line: '$command'\n";
- }
-
- my @result;
- my $date;
- if ( $log && $log ne 'print') {
- open(LOG, ">>$log") or print_error("can't open log file '$log'", 30);
- $date = localtime();
- print LOG "Start $command $args_str at $date\n";
- }
- open(OUTPUT, "$command 2>&1 |") or print_error("Can't execute svn command line client", 98);
- STDOUT->autoflush(1) if $log;
- while (<OUTPUT>) {
- if ( $log ) {
- print STDOUT $_;
- print LOG $_ if $log ne 'print';
- }
- else {
- push(@result, $_);
- }
- }
- STDOUT->autoflush(0) if $log;
- close(OUTPUT);
- if ( $log && $log ne 'print') {
- $date = localtime();
- print LOG "Stop $command $args_str at $date\n";
- close (LOG);
- }
-
- my $rc = $? >> 8;
-
- if ( $rc > 0) {
- print STDERR "\n";
- print STDERR @result if !$log;
- print_error("The subversion command line client failed with exit status '$rc'", 99);
- }
- return wantarray ? @result : \@result;
-}
-
-sub execute_svnversion_command
-{
- my $options = shift;
- my @args = @_;
-
- my $args_str = join(" ", @args);
-
- # we can only parse english strings, hopefully a C locale is available everywhere
- $ENV{LC_ALL}='C';
- $command = "svnversion $options $args_str";
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... execute command line: '$command'\n";
- }
-
- my $result = `$command`;
- my $rc = $? >> 8;
- if ($rc > 0) {
- print_error("The subversion command line tool 'svnversion' failed with exit status '$rc'", 99);
- }
-
- return $result;
-}
-
### HG glue ###
sub hg_clone
diff --git a/solenv/bin/gccinstlib.pl b/solenv/bin/gccinstlib.pl
index 7f52218c5..8ce9753a4 100755
--- a/solenv/bin/gccinstlib.pl
+++ b/solenv/bin/gccinstlib.pl
@@ -53,4 +53,13 @@ foreach $Src (@CopySrc) {
system ("/bin/cp $Src $Dest") && die "copy failed: $!";
}
+
+foreach $File (@ARGV) {
+ #https://bugzilla.redhat.com/show_bug.cgi?id=149465
+ printf "unprelinking $Dest/$File\n";
+ #If it's already unprelinked .i.e. no .gnu.prelink_undo section, that's fine
+ #If prelink is not installed, it's massively unlikely that it's prelinked
+ system ("prelink -u $Dest/$File > /dev/null 2>&1");
+}
+
exit (0);
diff --git a/solenv/bin/jpropex b/solenv/bin/jpropex
new file mode 100755
index 000000000..2d62d13b0
--- /dev/null
+++ b/solenv/bin/jpropex
@@ -0,0 +1,10 @@
+#!/bin/sh
+if [ x${SOLARENV}x = xx ]; then
+ echo No environment found, please use 'configure' or 'setsolar'
+ exit 1
+fi
+if [ x${JAVA_HOME}x = xx ]; then
+ echo No Java found!
+ exit 1
+fi
+exec java -DSOLARSRC=${SOLARSRC} -DWORK_STAMP=${WORK_STAMP} -DUSE_SHELL= -jar ${SOLARVER}/${INPATH}/bin${UPDMINOREXT}/jpropex.jar "$@"
diff --git a/solenv/bin/macosx-change-install-names.pl b/solenv/bin/macosx-change-install-names.pl
index bf8fcd633..726e0921f 100644
--- a/solenv/bin/macosx-change-install-names.pl
+++ b/solenv/bin/macosx-change-install-names.pl
@@ -45,7 +45,7 @@ sub action($$$)
'shl/OOO/OOO' => '@loader_path',
'shl/OXT/URELIB' => '@executable_path/urelibs',
'shl/BOXT/URELIB' => '@executable_path/urelibs',
- 'shl/BOXT/OOO' => '@loader_path/../../../../../../basis-link/program',
+ 'shl/BOXT/OOO' => '@loader_path/../../../basis-link/program',
'shl/NONE/URELIB' => '@__VIA_LIBRARY_PATH__',
'shl/NONE/OOO' => '@__VIA_LIBRARY_PATH__',
'shl/NONE/NONE' => '@__VIA_LIBRARY_PATH__');
diff --git a/solenv/bin/modules/installer/archivefiles.pm b/solenv/bin/modules/installer/archivefiles.pm
index ffcbe7e6e..b7636ca61 100644
--- a/solenv/bin/modules/installer/archivefiles.pm
+++ b/solenv/bin/modules/installer/archivefiles.pm
@@ -93,6 +93,54 @@ sub get_patch_file_list
}
#################################################################
+# Reading all executables in the "manifest.xml"
+#################################################################
+
+sub get_all_executables_from_manifest
+{
+ my ($unzipdir, $manifestfile, $executable_files_in_extensions) = @_;
+
+ my $is_executable = 0;
+
+ for ( my $i = 0; $i <= $#{$manifestfile}; $i++ )
+ {
+ my $line = ${$manifestfile}[$i];
+
+ if ( $line =~ /\"application\/vnd\.sun\.star\.executable\"/ ) { $is_executable = 1; }
+
+ if (( $line =~ /manifest\:full\-path=\"(.*?)\"/ ) && ( $is_executable ))
+ {
+ my $filename = $unzipdir . $installer::globals::separator . $1;
+ # making only slashes for comparison reasons
+ $filename =~ s/\\/\//g;
+ $executable_files_in_extensions->{$filename} = 1;
+ }
+
+ if ( $line =~ /\/\>/ ) { $is_executable = 0; }
+ }
+}
+
+#################################################################
+# Reading the "manifest.xml" in extensions and determine, if
+# there are executable files
+#################################################################
+
+sub collect_all_executable_files_in_extensions
+{
+ my ($unzipdir, $executable_files_in_extensions) = @_;
+
+ $unzipdir =~ s/\Q$installer::globals::separator\E\s*$//;
+
+ my $manifestfilename = $unzipdir . $installer::globals::separator . "META-INF" . $installer::globals::separator . "manifest.xml";
+
+ if ( -f $manifestfilename )
+ {
+ my $manifestfile = installer::files::read_file($manifestfilename);
+ get_all_executables_from_manifest($unzipdir, $manifestfile, $executable_files_in_extensions);
+ }
+}
+
+#################################################################
# Analyzing files with flag ARCHIVE
#################################################################
@@ -141,6 +189,10 @@ sub resolving_archive_flag
my $rename_to_language = 0;
if ( $styles =~ /\bRENAME_TO_LANGUAGE\b/ ) { $rename_to_language = 1; } # special handling for renamed files (scriptitems.pm)
+ my %executable_files_in_extensions = ();
+ my $set_executable_privileges = 0; # setting privileges for exectables is required for oxt files
+ if ( $onefile->{'Name'} =~ /\.oxt\s*$/ ) { $set_executable_privileges = 1; }
+
# mechanism to select files from an archive files
my $select_files = 0;
my $selectlistfiles = "";
@@ -260,6 +312,12 @@ sub resolving_archive_flag
push( @installer::globals::logfileinfo, $infoline);
}
}
+
+ # Selecting names of executable files in extensions
+ if ( $set_executable_privileges )
+ {
+ collect_all_executable_files_in_extensions($unzipdir, \%executable_files_in_extensions);
+ }
}
my $zipfileref = \@zipfile;
@@ -313,6 +371,19 @@ sub resolving_archive_flag
push( @installer::globals::logfileinfo, $infoline);
}
+ if ( $set_executable_privileges )
+ {
+ # All pathes to executables are saved in the hash %executable_files_in_extensions
+ my $compare_path = $newfile{'sourcepath'};
+ $compare_path =~ s/\\/\//g; # contains only slashes for comparison reasons
+ if ( exists($executable_files_in_extensions{$compare_path}) )
+ {
+ $newfile{'UnixRights'} = "775";
+ $infoline = "Executable in Extension: Setting unix rights for \"$newfile{'sourcepath'}\" to \"$newfile{'UnixRights'}\"\n";
+ push( @installer::globals::logfileinfo, $infoline);
+ }
+ }
+
if ( $select_files )
{
if ( ! installer::existence::exists_in_array($zipname,$selectlistfiles) )
diff --git a/solenv/bin/modules/installer/simplepackage.pm b/solenv/bin/modules/installer/simplepackage.pm
index 1251966b5..b833cc0c6 100644
--- a/solenv/bin/modules/installer/simplepackage.pm
+++ b/solenv/bin/modules/installer/simplepackage.pm
@@ -62,6 +62,21 @@ sub check_simple_packager_project
}
####################################################
+# Detecting the directory with extensions
+####################################################
+
+sub get_extensions_dir
+{
+ my ( $subfolderdir ) = @_;
+
+ my $extensiondir = $subfolderdir . $installer::globals::separator;
+ if ( $installer::globals::officedirhostname ne "" ) { $extensiondir = $extensiondir . $installer::globals::officedirhostname . $installer::globals::separator; }
+ $extensiondir = $extensiondir . "share" . $installer::globals::separator . "extensions";
+
+ return $extensiondir;
+}
+
+####################################################
# Registering extensions
####################################################
@@ -774,9 +789,16 @@ sub create_simple_package
# Registering the extensions
- installer::logger::print_message( "... registering extensions ...\n" );
- installer::logger::include_header_into_logfile("Registering extensions:");
- register_extensions($subfolderdir, $languagestringref);
+ # installer::logger::print_message( "... registering extensions ...\n" );
+ # installer::logger::include_header_into_logfile("Registering extensions:");
+ # register_extensions($subfolderdir, $languagestringref);
+
+ installer::logger::print_message( "... removing superfluous directories ...\n" );
+ installer::logger::include_header_into_logfile("Removing superfluous directories:");
+
+ my $extensionfolder = get_extensions_dir($subfolderdir);
+
+ installer::systemactions::remove_empty_dirs_in_folder($extensionfolder);
if ( $installer::globals::compiler =~ /^unxmacx/ )
{
diff --git a/solenv/bin/modules/installer/systemactions.pm b/solenv/bin/modules/installer/systemactions.pm
index f29138e9e..9aa1947ad 100644
--- a/solenv/bin/modules/installer/systemactions.pm
+++ b/solenv/bin/modules/installer/systemactions.pm
@@ -1664,4 +1664,51 @@ sub read_full_directory {
return
}
+##############################################################
+# Removing all empty directories below a specified directory
+##############################################################
+
+sub remove_empty_dirs_in_folder
+{
+ my ( $dir ) = @_;
+
+ my @content = ();
+ my $infoline = "";
+
+ $dir =~ s/\Q$installer::globals::separator\E\s*$//;
+
+ if ( -d $dir )
+ {
+ opendir(DIR, $dir);
+ @content = readdir(DIR);
+ closedir(DIR);
+
+ my $oneitem;
+
+ foreach $oneitem (@content)
+ {
+ if ((!($oneitem eq ".")) && (!($oneitem eq "..")))
+ {
+ my $item = $dir . $installer::globals::separator . $oneitem;
+
+ if ( -d $item ) # recursive
+ {
+ remove_empty_dirs_in_folder($item);
+ }
+ }
+ }
+
+ # try to remove empty directory
+ my $returnvalue = rmdir $dir;
+
+ if ( $returnvalue )
+ {
+ $infoline = "Successfully removed empty dir $dir\n";
+ push(@installer::globals::logfileinfo, $infoline);
+ }
+
+ }
+
+}
+
1;
diff --git a/solenv/bin/modules/installer/windows/admin.pm b/solenv/bin/modules/installer/windows/admin.pm
index 168eaf607..2e3074742 100644
--- a/solenv/bin/modules/installer/windows/admin.pm
+++ b/solenv/bin/modules/installer/windows/admin.pm
@@ -436,6 +436,8 @@ sub copy_files_into_directory_structure
{
my ($fileorder, $filehash, $componenthash, $fullpathhash, $maxsequence, $unpackdir, $installdir, $dirhash) = @_;
+ my $unopkgfile = "";
+
for ( my $i = 1; $i <= $maxsequence; $i++ )
{
if ( exists($fileorder->{$i}) )
@@ -485,7 +487,9 @@ sub copy_files_into_directory_structure
push(@installer::globals::logfileinfo, $infoline);
installer::exiter::exit_program($infoline, "copy_files_into_directory_structure");
}
-
+
+ if ( $destfile =~ /unopkg\.exe\s*$/ ) { $unopkgfile = $destfile; }
+
# installer::systemactions::copy_one_file($sourcefile, $destfile);
}
# else # allowing missing sequence numbers ?
@@ -493,6 +497,8 @@ sub copy_files_into_directory_structure
# installer::exiter::exit_program("ERROR: No file assigned to sequence $i", "copy_files_into_directory_structure");
# }
}
+
+ return $unopkgfile;
}
@@ -742,6 +748,68 @@ sub write_sis_info
}
}
+####################################################
+# Detecting the directory with extensions
+####################################################
+
+sub get_extensions_dir
+{
+ my ( $unopkgfile ) = @_;
+
+ my $localbranddir = $unopkgfile;
+ installer::pathanalyzer::get_path_from_fullqualifiedname(\$localbranddir); # "program" dir in brand layer
+ installer::pathanalyzer::get_path_from_fullqualifiedname(\$localbranddir); # root dir in brand layer
+ $localbranddir =~ s/\Q$installer::globals::separator\E\s*$//;
+ my $extensiondir = $localbranddir . $installer::globals::separator . "share" . $installer::globals::separator . "extensions";
+
+ return $extensiondir;
+}
+
+##############################################################
+# Removing all empty directories below a specified directory
+##############################################################
+
+sub remove_empty_dirs_in_folder
+{
+ my ( $dir, $firstrun ) = @_;
+
+ if ( $firstrun )
+ {
+ print "Removing superfluous directories\n";
+ }
+
+ my @content = ();
+
+ $dir =~ s/\Q$installer::globals::separator\E\s*$//;
+
+ if ( -d $dir )
+ {
+ opendir(DIR, $dir);
+ @content = readdir(DIR);
+ closedir(DIR);
+
+ my $oneitem;
+
+ foreach $oneitem (@content)
+ {
+ if ((!($oneitem eq ".")) && (!($oneitem eq "..")))
+ {
+ my $item = $dir . $installer::globals::separator . $oneitem;
+
+ if ( -d $item ) # recursive
+ {
+ remove_empty_dirs_in_folder($item, 0);
+ }
+ }
+ }
+
+ # try to remove empty directory
+ my $returnvalue = rmdir $dir;
+
+ # if ( $returnvalue ) { print "Successfully removed empty dir $dir\n"; }
+ }
+}
+
####################################################################################
# Simulating an administrative installation
####################################################################################
@@ -813,11 +881,18 @@ sub make_admin_install
my $fullpathhash = create_directory_structure($dirhash, $targetdir);
# Copying files
- copy_files_into_directory_structure($fileorder, $filehash, $componenthash, $fullpathhash, $maxsequence, $unpackdir, $installdir, $dirhash);
+ my $unopkgfile = copy_files_into_directory_structure($fileorder, $filehash, $componenthash, $fullpathhash, $maxsequence, $unpackdir, $installdir, $dirhash);
my $msidatabase = $targetdir . $installer::globals::separator . $databasefilename;
installer::systemactions::copy_one_file($databasepath, $msidatabase);
+ if ( $unopkgfile ne "" )
+ {
+ # Removing empty dirs in extension folder
+ my $extensionfolder = get_extensions_dir($unopkgfile);
+ if ( -d $extensionfolder ) { remove_empty_dirs_in_folder($extensionfolder, 1); }
+ }
+
# Editing registry table because of wrong Property value
# my $registryfilename = $helperdir . $installer::globals::separator . "Registry.idt";
# my $componentfilename = $helperdir . $installer::globals::separator . "Component.idt";
diff --git a/solenv/config/sdev300.ini b/solenv/config/sdev300.ini
index d04a87c59..3e80e1460 100644
--- a/solenv/config/sdev300.ini
+++ b/solenv/config/sdev300.ini
@@ -8,7 +8,7 @@ common
BIG_SVX TRUE
BMP_WRITES_FLAG TRUE
BUILD_SPECIAL TRUE
- BUILD_TYPE SO OOo EXT BINFILTER MORE_FONTS BSH CURL DICTIONARIES HSQLDB HUNSPELL HYPHEN JPEG LIBXML2 LIBXMLSEC LPSOLVE MOZ NEON TWAIN PYTHON ZLIB SANE UNIXODBC X11_EXTENSIONS LIBWPD EPM ODK MSFONTEXTRACT MATHMLDTD BOOST EXPAT CRASHREP BERKELEYDB LIBXSLT SUN AGG GTK ICU SYSTRAY_GTK JAVAINSTALLER2 VIGRA OPENSSL JFREEREPORT APACHE_COMMONS TOMCAT REPORTBUILDER SDEXT SWEXT XPDF LUCENE REDLAND SAXON WRITER2LATEX NSS L10N GRAPHITE MYSQLCPPCONN MYSQLC CPPUNIT
+ BUILD_TYPE SO OOo EXT BINFILTER MORE_FONTS BSH CURL DICTIONARIES HSQLDB HUNSPELL HYPHEN MYTHES JPEG LIBXML2 LIBXMLSEC LPSOLVE MOZ NEON TWAIN PYTHON ZLIB SANE UNIXODBC X11_EXTENSIONS LIBWPD EPM ODK MSFONTEXTRACT MATHMLDTD BOOST MDDS EXPAT CRASHREP BERKELEYDB LIBXSLT SUN AGG GTK ICU SYSTRAY_GTK JAVAINSTALLER2 VIGRA OPENSSL JFREEREPORT APACHE_COMMONS TOMCAT REPORTBUILDER SDEXT SWEXT XPDF LUCENE REDLAND SAXON WRITER2LATEX NSS L10N GRAPHITE MYSQLCPPCONN MYSQLC CPPUNIT
common_build TRUE
COMMON_OUTDIR common
CONFIG_PROJECT config_office
diff --git a/solenv/inc/ant.properties b/solenv/inc/ant.properties
index 403739579..b2c0f748e 100644
--- a/solenv/inc/ant.properties
+++ b/solenv/inc/ant.properties
@@ -1,3 +1,4 @@
+# x-no-translate
build.bin=${build.dir}/bin
build.class=${build.dir}/class
build.inc=${build.dir}/inc
diff --git a/solenv/inc/libs.mk b/solenv/inc/libs.mk
index 7237832e1..09b6df9d3 100644
--- a/solenv/inc/libs.mk
+++ b/solenv/inc/libs.mk
@@ -344,7 +344,11 @@ HUNSPELLLIB=$(HUNSPELL_LIBS)
.ELSE
HUNSPELLLIB=-lhunspell-1.2
.ENDIF
-MYTHESLIB=-lmythes
+.IF "$(SYSTEM_MYTHES)" == "YES"
+MYTHESLIB=$(MYTHES_LIBS)
+.ELSE
+MYTHESLIB=-lmythes-1.2
+.ENDIF
PYUNOLIB=-lpyuno
LPSOLVELIB=-llpsolve55
SOFFICELIB=-lsofficeapp
diff --git a/solenv/inc/minor.mk b/solenv/inc/minor.mk
index 519831ffb..42eb91b48 100644
--- a/solenv/inc/minor.mk
+++ b/solenv/inc/minor.mk
@@ -1,5 +1,5 @@
RSCVERSION=300
-RSCREVISION=300m83(Build:9511)
-BUILD=9511
-LAST_MINOR=m83
+RSCREVISION=300m84(Build:9512)
+BUILD=9512
+LAST_MINOR=m84
SOURCEVERSION=DEV300
diff --git a/solenv/inc/settings.mk b/solenv/inc/settings.mk
index ccd8f929d..c5283fb1b 100644
--- a/solenv/inc/settings.mk
+++ b/solenv/inc/settings.mk
@@ -865,7 +865,7 @@ SCPDEFS+=-DUDK_MAJOR=$(UDK_MAJOR)
SCPDEFS+=-U$(COMID) -DCOMID=$(COMID) -DCOMNAME=$(COMNAME) -D_$(COMID)
SCPDEFS+=-DCCNUMVER=$(CCNUMVER)
.IF "$(COM)"=="GCC"
-SCPDEFS+=-DSHORTSTDCPP3=$(SHORTSTDCPP3)
+SCPDEFS+=-DSHORTSTDCPP3=$(SHORTSTDCPP3) -DSHORTSTDC3=$(SHORTSTDC3)
.ENDIF # "$(SHORTSTDCPP3)"!=""
# extend library path for OS/2 gcc/wlink
.IF "$(GUI)"=="OS2"
diff --git a/solenv/inc/target.mk b/solenv/inc/target.mk
index 0319e92f3..1a4ad6e18 100644
--- a/solenv/inc/target.mk
+++ b/solenv/inc/target.mk
@@ -1461,6 +1461,7 @@ COMPVTMP:=$(mktmp iii)
@echo COMID:=$(COMID) >> $(COMPVTMP)
.IF "$(COM)"=="GCC"
@echo SHORTSTDCPP3:=$(SHORTSTDCPP3) >> $(COMPVTMP)
+ @echo SHORTSTDC3:=$(SHORTSTDC3) >> $(COMPVTMP)
.ENDIF
@echo CCNUMVER:=$(CCNUMVER) >> $(COMPVTMP)
@echo CCVER:=$(CCVER:s/-/ /:1) >> $(COMPVTMP)
@@ -2041,6 +2042,7 @@ $(subst,$(OUTPATH),$(COMMON_OUTDIR) $(BIN))/hid.lst .PHONY :
.ENDIF # "$(SOLAR_JAVA)"!=""
.INCLUDE : tg_merge.mk
+.INCLUDE : tg_propmerge.mk
wordcount:
wc *.* >> $(TMP)/wc.lst
diff --git a/solenv/inc/tg_compv.mk b/solenv/inc/tg_compv.mk
index 821888752..c68ae5af4 100644
--- a/solenv/inc/tg_compv.mk
+++ b/solenv/inc/tg_compv.mk
@@ -77,6 +77,7 @@ COMNAME=msci
.IF "$(COM)"=="GCC"
SHORTSTDCPP3:=
+SHORTSTDC3:="1"
.IF "$(CCNUMVER)">="000200910000"
COMID=GCC
@@ -101,6 +102,19 @@ SHORTSTDCPP3="5"
.ENDIF
.IF "$(CCNUMVER)">="000300040000"
+.IF "$(OS)$(CPU)" == "LINUX6" || "$(OS)$(CPU)" == "LINUXH"
+#for gcc >= 3.4.0 on m68k-linux this is libgcc_s.so.2.
+#for gcc >= 3.4.0 < 4.2.0 on hppa-linux this is libgcc_s.so.2.
+SHORTSTDC3:="2"
+.ENDIF
+SHORTSTDCPP3="6"
+.ENDIF
+
+.IF "$(CCNUMVER)">="000400020000"
+.IF "$(OS)$(CPU)" == "LINUXH"
+#for gcc >= 4.2.0 on hppa-linux this is libgcc_s.so.4.
+SHORTSTDC3:="4"
+.ENDIF
SHORTSTDCPP3="6"
.ENDIF
diff --git a/solenv/inc/tg_propmerge.mk b/solenv/inc/tg_propmerge.mk
new file mode 100755
index 000000000..796bca982
--- /dev/null
+++ b/solenv/inc/tg_propmerge.mk
@@ -0,0 +1,66 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+.IF "$(L10NPROPERTYFILES)"!=""
+ALLTAR : $(MISC)/$(TARGET).pmerge.mk $(L10NPROPERTYFILES)
+
+$(MISC)/$(TARGET).pmerge.mk : $(L10NPROPERTYFILES)
+
+$(L10NPROPERTYFILES) : $(LOCALIZESDF)
+
+.INCLUDE .IGNORE : $(MISC)/$(TARGET).pmerge.mk
+
+.IF "$(alllangiso)"!="$(last_merge)"
+MERGEPHONY:=.PHONY
+.ENDIF # "$(alllangiso)" != "$(last_merge)"
+
+$(CLASSDIR)/$(PACKAGE)/%.properties $(MERGEPHONY) : %.properties
+ @@-$(MKDIRHIER) $(@:d)
+.IF "$(WITH_LANG)"==""
+ $(COMMAND_ECHO)$(COPY) $< $@
+.ELSE # "$(WITH_LANG)"==""
+ @@-$(RM) $@
+ $(COMMAND_ECHO)@noop $(assign PMERGELIST+:=$(<:f))
+ $(COMMAND_ECHO)@noop $(assign PDESTDIR:=$(@:d))
+.ENDIF # "$(WITH_LANG)"==""
+
+$(MISC)/$(TARGET).pmerge.mk : $(PMERGELIST)
+.IF "$(WITH_LANG)"!=""
+# jpropex command file requirements:
+# - one file per line
+# - no spaces
+# - no empty lines
+# $(uniq ...) to workaround $assign adding the value twice...
+ @noop $(assign PMERGEFILELIST:=$(uniq $(PMERGELIST)))
+ $(COMMAND_ECHO)$(SOLARBINDIR)/jpropex -p $(PRJNAME) -r $(PRJ) -o $(PDESTDIR) -i @$(mktmp $(PMERGEFILELIST:t"\n":s/ //)) -l all -lf $(alllangiso:s/ /,/) -m $(LOCALIZESDF)
+.ENDIF # "$(WITH_LANG)"!=""
+ @-$(RM) $@
+ $(COMMAND_ECHO)echo last_merge=$(alllangiso) > $@
+
+.ENDIF # "$(L10NPROPERTYFILES)"!=""
+
+
diff --git a/solenv/inc/unxlng.mk b/solenv/inc/unxlng.mk
index 62a96f9c5..be8c5d01b 100644
--- a/solenv/inc/unxlng.mk
+++ b/solenv/inc/unxlng.mk
@@ -151,7 +151,7 @@ LINKFLAGSRUNPATH_OOO=-Wl,-rpath,\''$$ORIGIN:$$ORIGIN/../ure-link/lib'\'
LINKFLAGSRUNPATH_SDK=-Wl,-rpath,\''$$ORIGIN/../../ure-link/lib'\'
LINKFLAGSRUNPATH_BRAND=-Wl,-rpath,\''$$ORIGIN:$$ORIGIN/../basis-link/program:$$ORIGIN/../basis-link/ure-link/lib'\'
LINKFLAGSRUNPATH_OXT=
-LINKFLAGSRUNPATH_BOXT=-Wl,-rpath,\''$$ORIGIN/../../../../../../basis-link/program'\'
+LINKFLAGSRUNPATH_BOXT=-Wl,-rpath,\''$$ORIGIN/../../../basis-link/program'\'
LINKFLAGSRUNPATH_NONE=
# flag -Wl,-z,noexecstack sets the NX bit on the stack
LINKFLAGS=-Wl,-z,noexecstack -Wl,-z,combreloc $(LINKFLAGSDEFS)
diff --git a/solenv/inc/unxsoli4.mk b/solenv/inc/unxsoli4.mk
index 5ddbe058b..b1778a0ed 100644
--- a/solenv/inc/unxsoli4.mk
+++ b/solenv/inc/unxsoli4.mk
@@ -137,7 +137,7 @@ LINKFLAGSRUNPATH_OOO=-R\''$$ORIGIN:$$ORIGIN/../ure-link/lib'\'
LINKFLAGSRUNPATH_SDK=-R\''$$ORIGIN/../../ure-link/lib'\'
LINKFLAGSRUNPATH_BRAND=-R\''$$ORIGIN:$$ORIGIN/../basis-link/program:$$ORIGIN/../basis-link/ure-link/lib'\'
LINKFLAGSRUNPATH_OXT=
-LINKFLAGSRUNPATH_BOXT=-R\''$$ORIGIN/../../../../../../basis-link/program'\'
+LINKFLAGSRUNPATH_BOXT=-R\''$$ORIGIN/../../../basis-link/program'\'
LINKFLAGSRUNPATH_NONE=
LINKFLAGS=-w -mt -z combreloc -PIC -temp=/tmp -norunpath -library=no%Cstd
LINKCFLAGS=-w -mt -z combreloc -norunpath
diff --git a/solenv/inc/unxsols4.mk b/solenv/inc/unxsols4.mk
index 92720da3d..4febb67d4 100644
--- a/solenv/inc/unxsols4.mk
+++ b/solenv/inc/unxsols4.mk
@@ -143,7 +143,7 @@ LINKFLAGSRUNPATH_OOO=-R\''$$ORIGIN:$$ORIGIN/../ure-link/lib'\'
LINKFLAGSRUNPATH_SDK=-R\''$$ORIGIN/../../ure-link/lib'\'
LINKFLAGSRUNPATH_BRAND=-R\''$$ORIGIN:$$ORIGIN/../basis-link/program:$$ORIGIN/../basis-link/ure-link/lib'\'
LINKFLAGSRUNPATH_OXT=
-LINKFLAGSRUNPATH_BOXT=-R\''$$ORIGIN/../../../../../../basis-link/program'\'
+LINKFLAGSRUNPATH_BOXT=-R\''$$ORIGIN/../../../basis-link/program'\'
LINKFLAGSRUNPATH_NONE=
LINKFLAGS=-w -mt -z combreloc -PIC -temp=/tmp -norunpath -library=no%Cstd
LINKCFLAGS=-w -mt -z combreloc -norunpath
diff --git a/solenv/inc/unxsolu4.mk b/solenv/inc/unxsolu4.mk
index 45dadc53f..c73d6fc37 100644
--- a/solenv/inc/unxsolu4.mk
+++ b/solenv/inc/unxsolu4.mk
@@ -137,7 +137,7 @@ LINKFLAGSRUNPATH_UREBIN=-R\''$$ORIGIN/../lib:$$ORIGIN'\'
LINKFLAGSRUNPATH_OOO=-R\''$$ORIGIN:$$ORIGIN/../ure-link/lib'\'
LINKFLAGSRUNPATH_BRAND=-R\''$$ORIGIN:$$ORIGIN/../basis-link/program:$$ORIGIN/../basis-link/ure-link/lib'\'
LINKFLAGSRUNPATH_OXT=
-LINKFLAGSRUNPATH_BOXT=-R\''$$ORIGIN/../../../../../../basis-link/program'\'
+LINKFLAGSRUNPATH_BOXT=-R\''$$ORIGIN/../../../basis-link/program'\'
LINKFLAGSRUNPATH_NONE=
LINKFLAGS=-m64 -w -mt -z combreloc -PIC -temp=/tmp -norunpath -library=stlport4
LINKCFLAGS=-m64 -w -mt -z combreloc -norunpath
diff --git a/solenv/inc/wntgcci.mk b/solenv/inc/wntgcci.mk
index abb2bb25e..a6c7e67cf 100644
--- a/solenv/inc/wntgcci.mk
+++ b/solenv/inc/wntgcci.mk
@@ -110,7 +110,7 @@ LINK*=$(CXX)
LINKC*=$(CC)
CYGLIB=$(LIB:s/;/ -L/)
-LINKFLAGS=-nostdlib -Wl,--enable-stdcall-fixup,--enable-runtime-pseudo-reloc -L$(CYGLIB)
+LINKFLAGS=-nostdlib -Wl,--enable-stdcall-fixup,--enable-runtime-pseudo-reloc-v2 -L$(CYGLIB)
.IF "$(USE_MINGW)"=="cygwin"
MINGWLIBDIR=$(COMPATH)$/lib$/mingw
.ELSE