def __init__(self, otool_output): self.data = otool_output.split('\n') self._library_path = self.data[0][0:-1] self._library_name = self._library_path.split('/')[-1] useless_data = re.compile(r' \(.*\)') libs = [useless_data.sub('',x.lstrip()) for x in self.data[2:-1] if x.count('framework') == 0] self.base_libs = [x for x in libs if x.startswith('/usr/') and self.third_libs = [x for x in libs if x not in self.base_libs and def built_in_shlib_deps(self): return self._library_path return self._library_name #def built_in_framework_deps(self): def third_party_shlib_deps(self): #def third_party_framework_deps(self): def otool_library(path, arch = None): command_str = 'otool -L ' command_str += '-arch ' + arch + ' ' otool_file = os.popen(command_str) otool_data = otool_file.read() parser = OtoolParser(otool_data) if __name__ == '__main__': print 'Usage:', sys.argv[0], '/path/to/library.dylib' parser = otool_library(sys.argv[1]) print 'Library name:', parser.library_name() print 'Library path:', parser.library_path() print 'Non-base shlib dependencies:' for lib in parser.third_party_shlib_deps():