1#************************************************************************* 2# 3# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4# 5# Copyright 2000, 2010 Oracle and/or its affiliates. 6# 7# OpenOffice.org - a multi-platform office productivity suite 8# 9# This file is part of OpenOffice.org. 10# 11# OpenOffice.org is free software: you can redistribute it and/or modify 12# it under the terms of the GNU Lesser General Public License version 3 13# only, as published by the Free Software Foundation. 14# 15# OpenOffice.org is distributed in the hope that it will be useful, 16# but WITHOUT ANY WARRANTY; without even the implied warranty of 17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18# GNU Lesser General Public License version 3 for more details 19# (a copy is included in the LICENSE file that accompanied this code). 20# 21# You should have received a copy of the GNU Lesser General Public License 22# version 3 along with OpenOffice.org. If not, see 23# <http://www.openoffice.org/license.html> 24# for a copy of the LGPLv3 License. 25# 26#************************************************************************* 27 28use lib ("$ENV{SOLARENV}/bin/modules"); 29use macosxotoolhelper; 30 31sub locate($) 32{ 33 my ($lib) = @_; 34 my $dir; 35 foreach $dir (@dirs) 36 { 37 my $path = "$dir/$lib"; 38 if (-e $path) 39 { 40 return $path; 41 } 42 } 43 return; 44} 45 46sub handle($$) 47{ 48 my ($from, $to) = @_; 49 # wrap -dylib_file in -Wl so that hopefully any used tool whatsoever (e.g., 50 # libtool generated from xmlsec1-1.2.6/configure included in 51 # libxmlsec/download/xmlsec1-1.2.6.tar.gz:1.3) passes it through to the 52 # linker: 53 !($from =~ /,/ || $to =~ /,/) or 54 die "$from:$to contains commas and cannot go into -Wl"; 55 print " -Wl,-dylib_file,$from:$to"; 56 $done{$from} = 1; 57 push(@todo, $to) if (grep {$_ eq $to} @todo) == 0; 58} 59 60foreach (@ARGV) { push(@dirs, $1) if /^-L(.*)$/; } 61foreach (@ARGV) 62{ 63 if (/^-l(.*)$/) 64 { 65 my $loc = locate("lib$1.dylib"); 66 handle($1, $loc) if defined $loc && otoolD($loc) =~ m'^(@.+/.+)\n$'; 67 } 68} 69foreach $file (@todo) 70{ 71 my $call = "otool -L $file"; 72 open(IN, "-|", $call) or die "cannot $call"; 73 while (<IN>) 74 { 75 if (m'^\s*(@.+/([^/]+)) \(compatibility version \d+\.\d+\.\d+, current version \d+\.\d+\.\d+\)\n$') 76 { 77 my $full = $1; 78 my $loc = locate($2); 79 if (defined $loc) 80 { 81 handle($full, $loc) unless defined $done{$full}; 82 } 83 else 84 { 85 die "unknown $full (from $file)"; 86 } 87 } 88 } 89 close(IN); 90} 91print "\n"; 92