17e90fac2SAndrew Rist#**************************************************************
27e90fac2SAndrew Rist#
37e90fac2SAndrew Rist#  Licensed to the Apache Software Foundation (ASF) under one
47e90fac2SAndrew Rist#  or more contributor license agreements.  See the NOTICE file
57e90fac2SAndrew Rist#  distributed with this work for additional information
67e90fac2SAndrew Rist#  regarding copyright ownership.  The ASF licenses this file
77e90fac2SAndrew Rist#  to you under the Apache License, Version 2.0 (the
87e90fac2SAndrew Rist#  "License"); you may not use this file except in compliance
97e90fac2SAndrew Rist#  with the License.  You may obtain a copy of the License at
107e90fac2SAndrew Rist#
117e90fac2SAndrew Rist#    http://www.apache.org/licenses/LICENSE-2.0
127e90fac2SAndrew Rist#
137e90fac2SAndrew Rist#  Unless required by applicable law or agreed to in writing,
147e90fac2SAndrew Rist#  software distributed under the License is distributed on an
157e90fac2SAndrew Rist#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
167e90fac2SAndrew Rist#  KIND, either express or implied.  See the License for the
177e90fac2SAndrew Rist#  specific language governing permissions and limitations
187e90fac2SAndrew Rist#  under the License.
197e90fac2SAndrew Rist#
207e90fac2SAndrew Rist#**************************************************************
217e90fac2SAndrew Rist
227e90fac2SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweiruse lib ("$ENV{SOLARENV}/bin/modules");
25cdf0e10cSrcweiruse macosxotoolhelper;
26cdf0e10cSrcweir
27cdf0e10cSrcweirsub locate($)
28cdf0e10cSrcweir{
29cdf0e10cSrcweir    my ($lib) = @_;
30cdf0e10cSrcweir    my $dir;
31cdf0e10cSrcweir    foreach $dir (@dirs)
32cdf0e10cSrcweir    {
33cdf0e10cSrcweir        my $path = "$dir/$lib";
34cdf0e10cSrcweir        if (-e $path)
35cdf0e10cSrcweir        {
36cdf0e10cSrcweir            return $path;
37cdf0e10cSrcweir        }
38cdf0e10cSrcweir    }
39cdf0e10cSrcweir    return;
40cdf0e10cSrcweir}
41cdf0e10cSrcweir
42cdf0e10cSrcweirsub handle($$)
43cdf0e10cSrcweir{
44cdf0e10cSrcweir    my ($from, $to) = @_;
45cdf0e10cSrcweir    # wrap -dylib_file in -Wl so that hopefully any used tool whatsoever (e.g.,
46cdf0e10cSrcweir    # libtool generated from xmlsec1-1.2.6/configure included in
47cdf0e10cSrcweir    # libxmlsec/download/xmlsec1-1.2.6.tar.gz:1.3) passes it through to the
48cdf0e10cSrcweir    # linker:
49cdf0e10cSrcweir    !($from =~ /,/ || $to =~ /,/) or
50cdf0e10cSrcweir        die "$from:$to contains commas and cannot go into -Wl";
51cdf0e10cSrcweir    print " -Wl,-dylib_file,$from:$to";
52cdf0e10cSrcweir    $done{$from} = 1;
53cdf0e10cSrcweir    push(@todo, $to) if (grep {$_ eq $to} @todo) == 0;
54cdf0e10cSrcweir}
55cdf0e10cSrcweir
56cdf0e10cSrcweirforeach (@ARGV) { push(@dirs, $1) if /^-L(.*)$/; }
57cdf0e10cSrcweirforeach (@ARGV)
58cdf0e10cSrcweir{
59cdf0e10cSrcweir    if (/^-l(.*)$/)
60cdf0e10cSrcweir    {
61cdf0e10cSrcweir        my $loc = locate("lib$1.dylib");
62cdf0e10cSrcweir        handle($1, $loc) if defined $loc && otoolD($loc) =~ m'^(@.+/.+)\n$';
63cdf0e10cSrcweir    }
64cdf0e10cSrcweir}
65cdf0e10cSrcweirforeach $file (@todo)
66cdf0e10cSrcweir{
67*8badc1b4SHerbert Dürr    my $call = "${::CC_PATH}otool -L $file";
68cdf0e10cSrcweir    open(IN, "-|", $call) or die "cannot $call";
69cdf0e10cSrcweir    while (<IN>)
70cdf0e10cSrcweir    {
71cdf0e10cSrcweir        if (m'^\s*(@.+/([^/]+)) \(compatibility version \d+\.\d+\.\d+, current version \d+\.\d+\.\d+\)\n$')
72cdf0e10cSrcweir        {
73cdf0e10cSrcweir            my $full = $1;
74cdf0e10cSrcweir            my $loc = locate($2);
75cdf0e10cSrcweir            if (defined $loc)
76cdf0e10cSrcweir            {
77cdf0e10cSrcweir                handle($full, $loc) unless defined $done{$full};
78cdf0e10cSrcweir            }
79cdf0e10cSrcweir            else
80cdf0e10cSrcweir            {
81cdf0e10cSrcweir                die "unknown $full (from $file)";
82cdf0e10cSrcweir            }
83cdf0e10cSrcweir        }
84cdf0e10cSrcweir    }
85cdf0e10cSrcweir    close(IN);
86cdf0e10cSrcweir}
87cdf0e10cSrcweirprint "\n";
88