# Check for a module in a set of extension directories.# An extension directory should contain a Setup file# and one or more .o files or a lib.a file.import osimport parsesetupdef checkextensions(unknown, extensions):files = []modules = []edict = {}for e in extensions:setup = os.path.join(e, 'Setup')liba = os.path.join(e, 'lib.a')if not os.path.isfile(liba):liba = Noneedict[e] = parsesetup.getsetupinfo(setup), libafor mod in unknown:for e in extensions:(mods, vars), liba = edict[e]if mod not in mods:continuemodules.append(mod)if liba:# If we find a lib.a, use it, ignore the# .o files, and use *all* libraries for# *all* modules in the Setup fileif liba in files:breakfiles.append(liba)for m in list(mods.keys()):files = files + select(e, mods, vars,m, 1)breakfiles = files + select(e, mods, vars, mod, 0)breakreturn files, modulesdef select(e, mods, vars, mod, skipofiles):files = []for w in mods[mod]:w = treatword(w)if not w:continuew = expandvars(w, vars)for w in w.split():if skipofiles and w[-2:] == '.o':continue# Assume $var expands to absolute pathnameif w[0] not in ('-', '$') and w[-2:] in ('.o', '.a'):w = os.path.join(e, w)if w[:2] in ('-L', '-R') and w[2:3] != '$':w = w[:2] + os.path.join(e, w[2:])files.append(w)return filescc_flags = ['-I', '-D', '-U']cc_exts = ['.c', '.C', '.cc', '.c++']def treatword(w):if w[:2] in cc_flags:return Noneif w[:1] == '-':return w # Assume loader flaghead, tail = os.path.split(w)base, ext = os.path.splitext(tail)if ext in cc_exts:tail = base + '.o'w = os.path.join(head, tail)return wdef expandvars(str, vars):i = 0while i < len(str):i = k = str.find('$', i)if i < 0:breaki = i+1var = str[i:i+1]i = i+1if var == '(':j = str.find(')', i)if j < 0:breakvar = str[i:j]i = j+1if var in vars:str = str[:k] + vars[var] + str[i:]i = kreturn str
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。