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