diff options
author | Guido van Rossum <guido@python.org> | 1994-10-05 16:13:01 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1994-10-05 16:13:01 (GMT) |
commit | d8336c2286f647b4bba34a39c18fd1ae859da92e (patch) | |
tree | e9f893992b83bd78e878834370d104a321f1bf74 /Tools/freeze/checkextensions.py | |
parent | ca9321e6d0794cc52cddbbbcc86f6cc98e8b46af (diff) | |
download | cpython-d8336c2286f647b4bba34a39c18fd1ae859da92e.zip cpython-d8336c2286f647b4bba34a39c18fd1ae859da92e.tar.gz cpython-d8336c2286f647b4bba34a39c18fd1ae859da92e.tar.bz2 |
Lots of things added. README written (mostly).
Diffstat (limited to 'Tools/freeze/checkextensions.py')
-rw-r--r-- | Tools/freeze/checkextensions.py | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/Tools/freeze/checkextensions.py b/Tools/freeze/checkextensions.py new file mode 100644 index 0000000..a7890d8 --- /dev/null +++ b/Tools/freeze/checkextensions.py @@ -0,0 +1,87 @@ +# 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 os +import string +import parsesetup + +def 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 = None + edict[e] = parsesetup.getsetupinfo(setup), liba + for mod in unknown: + for e in extensions: + (mods, vars), liba = edict[e] + if not mods.has_key(mod): + continue + modules.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 file + if liba in files: + break + files.append(liba) + for m in mods.keys(): + files = files + select(e, mods, vars, + m, 1) + break + files = files + select(e, mods, vars, mod, 0) + break + return files, modules + +def select(e, mods, vars, mod, skipofiles): + files = [] + for w in mods[mod]: + w = treatword(w) + if not w: + continue + w = expandvars(w, vars) + if skipofiles and w[-2:] == '.o': + continue + if w[0] != '-' and w[-2:] in ('.o', '.a'): + w = os.path.join(e, w) + files.append(w) + return files + +cc_flags = ['-I', '-D', '-U'] +cc_exts = ['.c', '.C', '.cc', '.c++'] + +def treatword(w): + if w[:2] in cc_flags: + return None + if w[:1] == '-': + return w # Assume loader flag + head, 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 w + +def expandvars(str, vars): + i = 0 + while i < len(str): + i = k = string.find(str, '$', i) + if i < 0: + break + i = i+1 + var = str[i:i+1] + i = i+1 + if var == '(': + j = string.find(str, ')', i) + if j < 0: + break + var = str[i:j] + i = j+1 + if vars.has_key(var): + str = str[:k] + vars[var] + str[i:] + i = k + return str |