import os, sys, shutil outputdir = "." ppc_basedir = "." intel_basedir = "." def lipo_walker(data, dirname, names): global outputdir global ppc_basedir global intel_basedir for name in names: fullpath = os.path.join(dirname, name) intel_fullpath = fullpath.replace(ppc_basedir, intel_basedir) outputfile = fullpath.replace(ppc_basedir, outputdir) outdir = os.path.dirname(outputfile) if not os.path.exists(outdir): os.makedirs(outdir) # this call will only succeed if the file is a binary that can # be lipoed. if not os.path.islink(fullpath) and os.system("lipo -info %s" % fullpath) == 0: if os.system("lipo -output %s -create %s %s" % (outputfile, fullpath, intel_fullpath)) == 0: print "Successfully created %s" % outputfile else: if os.path.islink(fullpath): linkto = os.readlink(fullpath) if linkto.startswith(ppc_basedir): linkto = linkto.replace(ppc_basedir, outputdir) elif linkto.startswith(intel_basedir): linkto = linkto.replace(intel_basedir, outputdir) os.symlink(linkto, outputfile) elif not os.path.isdir(fullpath): shutil.copy(fullpath, outputfile) if __name__ == "__main__": if len(sys.argv) < 4: print "Usage: %s " print "" print "Takes a directory containing a Mac ppc application, and a directory" print "containing a Mac intel application, and merges them into a universal" print "binary." sys.exit(1) ppc_basedir = sys.argv[1] intel_basedir = sys.argv[2] outputdir = sys.argv[3] os.path.walk(ppc_basedir, lipo_walker, None)