#! /opt/local/bin/python import os def run(command) : print "\033[32m:: ", command, "\033[0m" return os.system(command) for line in os.popen(command) : print line, sys.stdout.flush() def norun(command) : print "\033[31mXX ", command, "\033[0m" def phase(desc) : print "\033[33m== ", desc, "\033[0m" def libDependencies(binary, visited) : libs = [] print "examining", binary for line in os.popen("otool -L "+binary).readlines()[1:] : entry = line.split()[0] if entry in visited : continue if entry.startswith("/System/") : continue if entry.startswith("/usr/lib/") : continue visited.append(entry) visited = libDependencies( entry, visited ) return visited libsPath = libDependencies("Annotator", [] ) print libsPath libs = [ (os.path.basename(path), path) for path in libsPath ] run("mkdir -p Annotator.app/Contents/Frameworks/") vars = {} for lib, path in libs : vars['toChange']=lib vars['path']=path run("cp %(path)s Annotator.app/Contents/Frameworks/%(toChange)s" % vars ) run("install_name_tool -id @executable_path/../Frameworks/%(toChange)s Annotator.app/Contents/Frameworks/%(toChange)s" % vars) for lib, path in libs : vars['toChange']=lib vars['path']=path run("install_name_tool -change %(path)s @executable_path/../Frameworks/%(toChange)s Annotator.app/Contents/MacOS/Annotator" % vars ) for changedLib, changedPath in libs : vars['changed']=changedLib vars['changedPath']=changedPath run("install_name_tool -change %(changedPath)s @executable_path/../Frameworks/%(changed)s Annotator.app/Contents/Frameworks/%(toChange)s" % vars )