summaryrefslogtreecommitdiff
path: root/solenv/bin/relocate
diff options
context:
space:
mode:
Diffstat (limited to 'solenv/bin/relocate')
-rwxr-xr-xsolenv/bin/relocate302
1 files changed, 0 insertions, 302 deletions
diff --git a/solenv/bin/relocate b/solenv/bin/relocate
deleted file mode 100755
index 6a5cfb992..000000000
--- a/solenv/bin/relocate
+++ /dev/null
@@ -1,302 +0,0 @@
-:
- eval 'exec perl -S $0 ${1+"$@"}'
- if 0;
-
-#*************************************************************************
-#
-# This tool makes it easy to cleanly re-locate a
-# build, eg. after you have copied or moved it to a new
-# path. It tries to re-write all the hard-coded path logic
-# internally.
-#
-#*************************************************************************
-#
-# 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.
-#
-# written substantially, if not entirely by non-Sun volunteers
-#
-#*************************************************************************
-
-sub sniff_set($)
-{
- my $build_dir = shift;
- my ($dirhandle, $fname);
-
- opendir ($dirhandle, $build_dir) || die "Can't open $build_dir";
- while ($fname = readdir ($dirhandle)) {
- $fname =~ /Set.sh$/ && last;
- }
- closedir ($dirhandle);
-
- return $fname;
-}
-
-sub sed_file($$$)
-{
- my ($old_fname, $function, $state) = @_;
- my $tmp_fname = "$old_fname.new";
- my $old_file;
- my $new_file;
-
- open ($old_file, $old_fname) || die "Can't open $old_fname: $!";
- open ($new_file, ">$tmp_fname") || die "Can't open $tmp_fname: $!";
-
- while (<$old_file>) {
- my $value = &$function($state, $_);
- print $new_file $value;
- }
-
- close ($new_file) || die "Failed to close $tmp_fname: $!";
- close ($old_file) || die "Failed to close $old_fname: $!";
-
- rename $tmp_fname, $old_fname || die "Failed to replace $old_fname: $!";
-}
-
-sub rewrite_value($$)
-{
- my ($state, $value) = @_;
-
- $value =~ s/$state->{'old_root'}/$state->{'new_root'}/g;
- $value =~ s/$state->{'win32_old_root'}/$state->{'win32_new_root'}/g;
-
- return $value;
-}
-
-sub rewrite_set($$$)
-{
- my $new_root = shift;
- my $old_root = shift;
- my $set = shift;
- my $tmp;
- my %state;
-
- print " $set\n";
-
-# unix style
- $state{'old_root'} = $old_root;
- $state{'new_root'} = $new_root;
-# win32 style
- $tmp = $old_root;
- $tmp =~ s/\//\\\\\\\\\\\\\\\\/g;
- $state{'win32_old_root'} = $tmp;
- $tmp = $new_root;
- $tmp =~ s/\//\\\\\\\\/g;
- $state{'win32_new_root'} = $tmp;
-
- sed_file ("$new_root/$set", \&rewrite_value, \%state);
-}
-
-sub read_set($$)
-{
- my $new_root = shift;
- my $set = shift;
- my $fname = "$new_root/$set";
- my $file;
- my %env_keys;
-
- open ($file, $fname) || die "Can't open $fname: $!";
-
- while (<$file>) {
- if (/\s*([^=]+)\s*=\s*\"([^\"]+)\"/) {
- my ($name, $value) = ($1, $2);
-
- $env_keys{$name} = $value;
- }
- }
-
- close ($file) || die "Failed to close $fname: $!";
-
- return \%env_keys;
-}
-
-sub sed_file_no_touch($$$)
-{
- my ($new_root, $old_root, $file) = @_;
- my ($fin, $fout);
-
- ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
- $atime,$mtime,$ctime,$blksize,$blocks) = stat ($file);
-
- open ($fin, $file) || die "Can't open $fin: $!";
- open ($fout, ">$file.sed.bak") || die "Can't open $file.sed.bak: $!";
- while (<$fin>) {
- s/$old_root/$new_root/g;
- print $fout $_;
- }
- close ($fin);
- close ($fout);
- rename ("$file.sed.bak", $file);
-# print "rename $file.sed.bak to $file\n";
-
- utime $atime, $mtime, $file;
-}
-
-sub sed_no_touch_recursive ($$$)
-{
- my ($new_root, $old_root, $dir) = @_;
- my $dh;
- opendir ($dh, $dir) || die "Can't open dir: $dir: $!";
- while (my $entry = readdir ($dh)) {
- $entry =~ /^\./ && next;
- my $path = "$dir/$entry";
- sed_no_touch_recursive ($new_root, $old_root, $path) if (-d $path);
- sed_file_no_touch ($new_root, $old_root, $path) if (-f $path);
- }
- closedir ($dh);
-}
-
-sub rewrite_product_deps($$$)
-{
- my $new_root = shift;
- my $product_path = shift;
- my $old_root = shift;
-
- my $path = "$new_root/$product_path/misc";
- my $misc_dir;
- opendir ($misc_dir, $path) || return;
- my $name;
- while ($name = readdir ($misc_dir)) {
-# Should try re-writing these - but perhaps this would
-# screw with timestamps ?
- if ($name =~ m/\.dpcc$/ || $name =~ m/\.dpslo$/ || $name =~ m/\.dpobj$/) {
- sed_file_no_touch ($new_root, $old_root, "$path/$name");
- }
- }
- closedir ($misc_dir);
-}
-
-sub rewrite_dpcc($$)
-{
- my $new_root = shift;
- my $old_root = shift;
-
- my $top_dir;
- my $idx = 0;
- opendir ($top_dir, $new_root) || die "Can't open $new_root: $!";
- my $name;
- while ($name = readdir ($top_dir)) {
- my $sub_dir;
- opendir ($sub_dir, "$new_root/$name") || next;
- my $sub_name;
- while ($sub_name = readdir ($sub_dir)) {
- if ($sub_name =~ /\.pro$/) {
- $idx || print "\n ";
- if ($idx++ == 6) {
- $idx = 0;
- }
- print "$name ";
- rewrite_product_deps ($new_root, "$name/$sub_name", $old_root);
- }
- }
- closedir ($sub_dir);
- }
- closedir ($top_dir);
- print "\n";
-}
-
-sub rewrite_symlinks($$)
-{
- my $new_root = shift;
- my $old_root = shift;
-
- my $dirh;
- opendir ($dirh, $new_root);
- while (my $ent = readdir ($dirh)) {
- $ent =~ /^\./ && next;
- my $link = "$new_root/$ent";
- -l $link || next;
- my $target = readlink ($link);
- my $newtarget = $target;
- $newtarget =~ s/$old_root/$new_root/;
- if ($target =~ m/$new_root/) {
- print STDERR "skip correct link $target\n";
- } elsif ($newtarget eq $target) {
- print STDERR "unusual - possibly stale link: $target\n";
- if ($target =~ m/\/clone\//) { die "failed to rename link"; }
- } else {
- print "Re-write link $target to $newtarget\n";
- unlink ($link);
- symlink ($newtarget, $link);
- }
- }
- closedir ($dirh);
-}
-
-sub rewrite_bootstrap($$)
-{
- my $new_root = shift;
- my $old_root = shift;
-
- print " bootstrap\n";
-
- my %state;
- $state{'old_root'} = $old_root;
- $state{'new_root'} = $new_root;
-
- my $rewrite = sub { my $state = shift; my $value = shift;
- $value =~ s/$state->{'old_root'}/$state->{'new_root'}/g;
- return $value; };
- sed_file ("$new_root/bootstrap", $rewrite, \%state);
- `chmod +x $new_root/bootstrap`;
-}
-
-for $a (@ARGV) {
- if ($a eq '--help' || $a eq '-h') {
- print "relocate: syntax\n";
- print " relocate /path/to/new/ooo/source_root\n";
- }
-}
-
-$OOO_BUILD = shift (@ARGV) || die "Pass path to relocated source tree";
-substr ($OOO_BUILD, 0, 1) eq '/' || die "relocate requires absolute paths";
-
-my $set;
-
-$set = sniff_set($OOO_BUILD) || die "Can't find env. set";
-my $env_keys = read_set ($OOO_BUILD, $set);
-$OLD_ROOT = $env_keys->{'SRC_ROOT'};
-my $solver = $env_keys->{SOLARVER} . "/" . $env_keys->{INPATH};
-
-print "Relocate: $OLD_ROOT -> $OOO_BUILD\n";
-if ($OLD_ROOT eq $OOO_BUILD) {
- print "nothing to do\n";
- exit 0;
-}
-
-print "re-writing symlinks\n";
-rewrite_symlinks($OOO_BUILD, $OLD_ROOT);
-
-print "re-writing dependencies:\n";
-rewrite_dpcc($OOO_BUILD, $OLD_ROOT);
-
-if (-d "$solver/workdir/Dep") {
- print "re-writing new dependencies:\n";
- sed_no_touch_recursive ($OOO_BUILD, $OLD_ROOT, "$solver/workdir/Dep");
-}
-
-print "re-writing environment:\n";
-rewrite_set($OOO_BUILD, $OLD_ROOT, $set);
-rewrite_bootstrap($OOO_BUILD, $OLD_ROOT);
-
-print "done.\n";