#!/usr/bin/env python """ This script will rewrite the macho headers of the frameworks in the nightly webkit snapshot, to make sure PyObjC can use them. """ import os, shutil from macholib.MachO import MachO def rewriteFramework(framework, frameworkMap): basename = os.path.splitext(os.path.basename(framework))[0] dyld = os.path.abspath(os.path.join(framework, basename)) macho = MachO(dyld) def changefunc(key): if key == dyld: return dyld dirname, filename = os.path.split(key) return frameworkMap.get(filename) macho.rewriteLoadCommands(changefunc) macho.write(open(dyld, 'rb+')) def rewriteFrameworksInDirectory(dirname): frameworks = [ fn for fn in os.listdir(dirname) if fn.endswith('.framework') ] mapping = {} for fn in frameworks: mapping[os.path.splitext(fn)[0]] = os.path.join(os.path.abspath(dirname), fn , os.path.splitext(fn)[0]) for fn in frameworks: rewriteFramework(fn, mapping) def extractWebKitApp(pathToApp, outputDir): resources = os.path.join(pathToApp, 'Contents', 'Resources') frameworks = [ fn for fn in os.listdir(resources) if fn.endswith('.framework') ] for framework in frameworks: if os.path.exists(os.path.join(outputDir, framework)): shutil.rmtree(os.path.join(outputDir, framework)) shutil.copytree( os.path.join(resources, framework), os.path.join(outputDir, framework), symlinks=True) rewriteFrameworksInDirectory(outputDir) def main(): extractWebKitApp('WebKit.app', '.') if __name__ == '__main__': main()