From 30e8a69d117f1a2da14363dd8d7cbb7e09777a25 Mon Sep 17 00:00:00 2001 From: Diadlo Date: Mon, 9 Jan 2017 23:06:52 +0300 Subject: [PATCH] chore(osx): Added macos instalation script Implementation by @iphydf Fix #3747. --- osx/macfixrpath | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100755 osx/macfixrpath diff --git a/osx/macfixrpath b/osx/macfixrpath new file mode 100755 index 000000000..3e09c82c9 --- /dev/null +++ b/osx/macfixrpath @@ -0,0 +1,37 @@ +#!/usr/bin/env perl +# This script used in `CMakeList.txt`. It's not required to run manually + +use strict; +use File::Find; +use Data::Dumper; + +local $Data::Dumper::Terse = 1; +local $Data::Dumper::Indent = 1; + +my $BUNDLE_PATH = @ARGV[0] or die "Usage: macfixrpath \n"; + +my $prefix = `brew --prefix`; +chomp $prefix; +$prefix .= "/Cellar/"; + +my @libs = <$BUNDLE_PATH/Contents/Frameworks/*.framework/Versions/5/Qt*>; +find sub { + /\.dylib$/ or return; + push @libs, $File::Find::name; +}, $BUNDLE_PATH; + +my %deps; +for (@libs) { + my @deps = grep { @$_ } map { [m!^\t($prefix.+)/([^/]+) \(.+\)$!] } grep { /^\t/ } split /\n/, `otool -L $_`; + my @resolved = map { my $dep = $_; [@$dep, grep { m!/$dep->[1]$! } @libs] } @deps; + $_->[2] =~ s|\Q$BUNDLE_PATH\E/Contents/|\@executable_path/../| for @resolved; + $deps{$_} = \@resolved if @deps; +} + +for my $lib (sort keys %deps) { + my $count = @{$deps{$lib}}; + for my $dep (@{$deps{$lib}}) { + my ($path, $name, $dest) = @$dep; + system "install_name_tool", "-change", "$path/$name", $dest, $lib; + } +}