nkeynes@713: #!/usr/bin/perl nkeynes@713: # Script for OS X to copy all non-core library dependencies into the bundle, and fixup the lib naming nkeynes@713: # Run after the executable is already in the bundle. nkeynes@713: nkeynes@713: if( $#ARGV <= 0 ) { nkeynes@713: die( "Usage: bundlelibs.pl \n" ); nkeynes@713: } nkeynes@713: nkeynes@713: my $BINARY=shift(); nkeynes@713: my $TARGETDIR=shift(); nkeynes@713: my $OTOOL="otool"; nkeynes@713: my $NTOOL="install_name_tool"; nkeynes@713: nkeynes@713: mkdir $TARGETDIR; nkeynes@713: nkeynes@713: my %done=(); nkeynes@713: my @worklist = ($BINARY); nkeynes@713: nkeynes@713: while( $#worklist >= 0 ) { nkeynes@713: my $target = shift @worklist; nkeynes@713: $done{$target} = 2; nkeynes@713: nkeynes@713: open FH, "$OTOOL -L $target|" || die "Unable to run otool"; nkeynes@713: $skip = ; nkeynes@713: nkeynes@713: while(){ nkeynes@713: $lib = $_; nkeynes@713: $lib =~ s/^\s+([^\s]+)\s.*$/$1/s; nkeynes@713: if( $lib !~ /^\/System\/Library/ && $lib !~ /^\/usr\/lib/ && $lib !~ /^\@executable_path\// ) { nkeynes@713: $libname = $lib; nkeynes@713: $libname =~ s#^.*/##; nkeynes@713: $targetpath = "$TARGETDIR/$libname"; nkeynes@713: $libid = "\@executable_path/../Frameworks/$libname"; nkeynes@713: if( !$done{$libname} ) { nkeynes@716: $done{$libname} = 1; nkeynes@713: push @worklist, $targetpath; nkeynes@713: system( ("cp", $lib, $targetpath) ) == 0 || die "Failed to copy $lib to $targetpath"; nkeynes@713: system( ($NTOOL, "-id", $libid, $targetpath) ) == 0 || die "Failed to set $lib ID to $libid"; nkeynes@713: print "Copied $lib => $targetpath\n"; nkeynes@713: } nkeynes@713: system( ($NTOOL, "-change", $lib, $libid, $target ) ) == 0 || die "Failed to change $lib ID to $libid"; nkeynes@713: } nkeynes@713: } nkeynes@713: close FH; nkeynes@713: }