#! /usr/bin/env python3"""nm2def.pyHelpers to extract symbols from Unix libs and auto-generateWindows definition files from them. Depends on nm(1). Testedon Linux and Solaris only (-p option to nm is for Solaris only).By Marc-Andre Lemburg, Aug 1998.Additional notes: the output of nm is supposed to look like this:acceler.o:000001fd T PyGrammar_AddAcceleratorsU PyGrammar_FindDFA00000237 T PyGrammar_RemoveAcceleratorsU _IO_stderr_U exitU fprintfU freeU mallocU printfgrammar1.o:00000000 T PyGrammar_FindDFA00000034 T PyGrammar_LabelReprU _PyParser_TokenNamesU abortU printfU sprintf...Even if this isn't the default output of your nm, there is generally anoption to produce this format (since it is the original v7 Unix format)."""import os, sysPYTHONLIB = 'libpython%d.%d.a' % sys.version_info[:2]PC_PYTHONLIB = 'Python%d%d.dll' % sys.version_info[:2]NM = 'nm -p -g %s' # For Linux, use "nm -g %s"def symbols(lib=PYTHONLIB,types=('T','C','D')):with os.popen(NM % lib) as pipe:lines = pipe.readlines()lines = [s.strip() for s in lines]symbols = {}for line in lines:if len(line) == 0 or ':' in line:continueitems = line.split()if len(items) != 3:continueaddress, type, name = itemsif type not in types:continuesymbols[name] = address,typereturn symbolsdef export_list(symbols):data = []code = []for name,(addr,type) in symbols.items():if type in ('C','D'):data.append('\t'+name)else:code.append('\t'+name)data.sort()data.append('')code.sort()return ' DATA\n'.join(data)+'\n'+'\n'.join(code)# Definition file templateDEF_TEMPLATE = """\EXPORTS%s"""# Special symbols that have to be included even though they don't# pass the filterSPECIALS = ()def filter_Python(symbols,specials=SPECIALS):for name in list(symbols.keys()):if name[:2] == 'Py' or name[:3] == '_Py':passelif name not in specials:del symbols[name]def main():s = symbols(PYTHONLIB)filter_Python(s)exports = export_list(s)f = sys.stdout # open('PC/python_nt.def','w')f.write(DEF_TEMPLATE % (exports))# f.close()if __name__ == '__main__':main()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。