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