filename | bundlelibs.pl |
changeset | 716:f353e54a3a85 |
prev | 713:e5256202cc9e |
author | nkeynes |
date | Sat Jan 22 06:07:17 2011 +1000 (13 years ago) |
permissions | -rwxr-xr-x |
last change | Mark the NV vertex range functions as weak (to keep things working on drivers that don't provide the entry points) Set the fence at the start (really just to prevent an error the first time around) |
file | annotate | diff | log | raw |
nkeynes@713 | 1 | #!/usr/bin/perl |
nkeynes@713 | 2 | # Script for OS X to copy all non-core library dependencies into the bundle, and fixup the lib naming |
nkeynes@713 | 3 | # Run after the executable is already in the bundle. |
nkeynes@713 | 4 | |
nkeynes@713 | 5 | if( $#ARGV <= 0 ) { |
nkeynes@713 | 6 | die( "Usage: bundlelibs.pl <target-binary> <target-lib-path>\n" ); |
nkeynes@713 | 7 | } |
nkeynes@713 | 8 | |
nkeynes@713 | 9 | my $BINARY=shift(); |
nkeynes@713 | 10 | my $TARGETDIR=shift(); |
nkeynes@713 | 11 | my $OTOOL="otool"; |
nkeynes@713 | 12 | my $NTOOL="install_name_tool"; |
nkeynes@713 | 13 | |
nkeynes@713 | 14 | mkdir $TARGETDIR; |
nkeynes@713 | 15 | |
nkeynes@713 | 16 | my %done=(); |
nkeynes@713 | 17 | my @worklist = ($BINARY); |
nkeynes@713 | 18 | |
nkeynes@713 | 19 | while( $#worklist >= 0 ) { |
nkeynes@713 | 20 | my $target = shift @worklist; |
nkeynes@713 | 21 | $done{$target} = 2; |
nkeynes@713 | 22 | |
nkeynes@713 | 23 | open FH, "$OTOOL -L $target|" || die "Unable to run otool"; |
nkeynes@713 | 24 | $skip = <FH>; |
nkeynes@713 | 25 | |
nkeynes@713 | 26 | while(<FH>){ |
nkeynes@713 | 27 | $lib = $_; |
nkeynes@713 | 28 | $lib =~ s/^\s+([^\s]+)\s.*$/$1/s; |
nkeynes@713 | 29 | if( $lib !~ /^\/System\/Library/ && $lib !~ /^\/usr\/lib/ && $lib !~ /^\@executable_path\// ) { |
nkeynes@713 | 30 | $libname = $lib; |
nkeynes@713 | 31 | $libname =~ s#^.*/##; |
nkeynes@713 | 32 | $targetpath = "$TARGETDIR/$libname"; |
nkeynes@713 | 33 | $libid = "\@executable_path/../Frameworks/$libname"; |
nkeynes@713 | 34 | if( !$done{$libname} ) { |
nkeynes@716 | 35 | $done{$libname} = 1; |
nkeynes@713 | 36 | push @worklist, $targetpath; |
nkeynes@713 | 37 | system( ("cp", $lib, $targetpath) ) == 0 || die "Failed to copy $lib to $targetpath"; |
nkeynes@713 | 38 | system( ($NTOOL, "-id", $libid, $targetpath) ) == 0 || die "Failed to set $lib ID to $libid"; |
nkeynes@713 | 39 | print "Copied $lib => $targetpath\n"; |
nkeynes@713 | 40 | } |
nkeynes@713 | 41 | system( ($NTOOL, "-change", $lib, $libid, $target ) ) == 0 || die "Failed to change $lib ID to $libid"; |
nkeynes@713 | 42 | } |
nkeynes@713 | 43 | } |
nkeynes@713 | 44 | close FH; |
nkeynes@713 | 45 | } |
.