diff options
Diffstat (limited to 'solenv/bin/macosx-change-install-names.pl')
-rw-r--r-- | solenv/bin/macosx-change-install-names.pl | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/solenv/bin/macosx-change-install-names.pl b/solenv/bin/macosx-change-install-names.pl new file mode 100644 index 000000000000..29bf64de2b6b --- /dev/null +++ b/solenv/bin/macosx-change-install-names.pl @@ -0,0 +1,124 @@ +#************************************************************************* +# +# 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. +# +#************************************************************************* + +use lib ("$ENV{SOLARENV}/bin/modules"); +use macosxotoolhelper; + +sub action($$$) +{ + my %action = + ('app/UREBIN/URELIB' => '@executable_path/../lib', + 'app/OOO/URELIB' => '@executable_path/../ure-link/lib', + 'app/OOO/OOO' => '@executable_path', + 'app/SDK/URELIB' => '@executable_path/../../ure-link/lib', + 'app/BRAND/URELIB' => '@executable_path/../basis-link/ure-link/lib', + 'app/BRAND/OOO' => '@executable_path/../basis-link/program', + 'app/NONE/URELIB' => '@__VIA_LIBRARY_PATH__', + 'app/NONE/OOO' => '@__VIA_LIBRARY_PATH__', + 'app/NONE/NONE' => '@__VIA_LIBRARY_PATH__', + 'shl/URELIB/URELIB' => '@loader_path', + 'shl/OOO/URELIB' => '@loader_path/../ure-link/lib', + 'shl/OOO/OOO' => '@loader_path', + 'shl/LOADER/LOADER' => '@loader_path', + 'shl/OXT/URELIB' => '@executable_path/urelibs', + 'shl/BOXT/URELIB' => '@executable_path/urelibs', + 'shl/BOXT/OOO' => '@loader_path/../../../basis-link/program', + 'shl/NONE/URELIB' => '@__VIA_LIBRARY_PATH__', + 'shl/OOO/NONE' => '@__VIA_LIBRARY_PATH__', + 'shl/NONE/OOO' => '@__VIA_LIBRARY_PATH__', + 'shl/NONE/NONE' => '@__VIA_LIBRARY_PATH__'); + my ($type, $loc1, $loc2) = @_; + my $act = $action{"$type/$loc1/$loc2"}; + die "illegal combination $type/$loc1/$loc2" unless defined $act; + return $act; +} + +@ARGV == 3 || @ARGV >= 2 && $ARGV[0] eq "extshl" or die + 'Usage: app|shl|extshl UREBIN|URELIB|OOO|SDK|BRAND|OXT|BOXT|NONE|LOADER <filepath>*'; +$type = shift @ARGV; +$loc = shift @ARGV; +if ($type eq "SharedLibrary") +{ + $type = "shl"; +} +if ($type eq "Executable") +{ + $type = "app" +} +if ($type eq "Library") +{ + $type = "shl" +} +if ($type eq "extshl") +{ + $type = "shl"; + my $change = ""; + my %inames; + foreach $file (@ARGV) + { + my $iname = otoolD($file); + (defined $iname ? $iname : $file . "\n") =~ m'^(.*?([^/]+))\n$' or + die "unexpected otool -D output"; + $change .= " -change $1 " . action($type, $loc, $loc) . "/$2"; + $inames{$file} = $2; + } + if( $loc eq "LOADER" ) + { + foreach $file (@ARGV) + { + my $call = "install_name_tool$change -id \@loader_path/$inames{$file} $file"; + system($call) == 0 or die "cannot $call"; + } + } + else + { + foreach $file (@ARGV) + { + my $call = "install_name_tool$change -id \@__________________________________________________$loc/$inames{$file} $file"; + system($call) == 0 or die "cannot $call"; + } + } +} +foreach $file (@ARGV) +{ + my $call = "otool -L $file"; + open(IN, "-|", $call) or die "cannot $call"; + my $change = ""; + while (<IN>) + { + $change .= " -change $1 " . action($type, $loc, $2) . "$3" + if m'^\s*(@_{50}([^/]+)(/.+)) \(compatibility version \d+\.\d+\.\d+, current version \d+\.\d+\.\d+\)\n$'; + $change .= ' -change '.$1.' @loader_path/'.$2 + if m'^\s*(/python-inst/(OOoPython.framework/Versions/[^/]+/OOoPython))'; + } + close(IN); + if ($change ne "") + { + $call = "install_name_tool$change $file"; + system($call) == 0 or die "cannot $call"; + } +} |