#!/usr/bin/pythonw """ Find the library name for the current Python interpreter """ import sys import objc from Foundation import * def S(*args): return ''.join(args) # these are void* NSSymbol = 'I' NSModule = 'I' FUNCTIONS=[ ( u'NSIsSymbolNameDefined', S(objc._C_BOOL, objc._C_CHARPTR) ), ( u'NSLookupAndBindSymbol', S(NSSymbol, objc._C_CHARPTR) ), ( u'NSModuleForSymbol', S(NSModule, NSSymbol) ), ( u'NSLibraryNameForModule', S(objc._C_CHARPTR, NSModule) ), ] def libraryNameForSymbol(symbol): bndl = NSBundle.bundleWithPath_(u'/System/Library/Frameworks/System.framework') d = {} objc.loadBundleFunctions(bndl, d, FUNCTIONS) for (fn, sig) in FUNCTIONS: if fn not in d: raise ValueError("Couldn't find function %s" % (fn,)) symbol = '_' + symbol if not d['NSIsSymbolNameDefined'](symbol): # symbol not defined return None sym = d['NSLookupAndBindSymbol'](symbol) if not sym: raise ValueError("Couldn't bind symbol %r" % (symbol,)) mod = d['NSModuleForSymbol'](sym) if not mod: raise ValueError("Couldn't find module for symbol %r" % (symbol,)) return d['NSLibraryNameForModule'](mod) if __name__ == "__main__": print libraryNameForSymbol('Py_Initialize')