mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-22 21:32:31 +00:00
python-3.6.zip added from Github
README.cosmo contains the necessary links.
This commit is contained in:
parent
75fc601ff5
commit
0c4c56ff39
4219 changed files with 1968626 additions and 0 deletions
111
third_party/python/Tools/freeze/parsesetup.py
vendored
Normal file
111
third_party/python/Tools/freeze/parsesetup.py
vendored
Normal file
|
@ -0,0 +1,111 @@
|
|||
# Parse Makefiles and Python Setup(.in) files.
|
||||
|
||||
import re
|
||||
|
||||
|
||||
# Extract variable definitions from a Makefile.
|
||||
# Return a dictionary mapping names to values.
|
||||
# May raise IOError.
|
||||
|
||||
makevardef = re.compile('^([a-zA-Z0-9_]+)[ \t]*=(.*)')
|
||||
|
||||
def getmakevars(filename):
|
||||
variables = {}
|
||||
fp = open(filename)
|
||||
pendingline = ""
|
||||
try:
|
||||
while 1:
|
||||
line = fp.readline()
|
||||
if pendingline:
|
||||
line = pendingline + line
|
||||
pendingline = ""
|
||||
if not line:
|
||||
break
|
||||
if line.endswith('\\\n'):
|
||||
pendingline = line[:-2]
|
||||
matchobj = makevardef.match(line)
|
||||
if not matchobj:
|
||||
continue
|
||||
(name, value) = matchobj.group(1, 2)
|
||||
# Strip trailing comment
|
||||
i = value.find('#')
|
||||
if i >= 0:
|
||||
value = value[:i]
|
||||
value = value.strip()
|
||||
variables[name] = value
|
||||
finally:
|
||||
fp.close()
|
||||
return variables
|
||||
|
||||
|
||||
# Parse a Python Setup(.in) file.
|
||||
# Return two dictionaries, the first mapping modules to their
|
||||
# definitions, the second mapping variable names to their values.
|
||||
# May raise IOError.
|
||||
|
||||
setupvardef = re.compile('^([a-zA-Z0-9_]+)=(.*)')
|
||||
|
||||
def getsetupinfo(filename):
|
||||
modules = {}
|
||||
variables = {}
|
||||
fp = open(filename)
|
||||
pendingline = ""
|
||||
try:
|
||||
while 1:
|
||||
line = fp.readline()
|
||||
if pendingline:
|
||||
line = pendingline + line
|
||||
pendingline = ""
|
||||
if not line:
|
||||
break
|
||||
# Strip comments
|
||||
i = line.find('#')
|
||||
if i >= 0:
|
||||
line = line[:i]
|
||||
if line.endswith('\\\n'):
|
||||
pendingline = line[:-2]
|
||||
continue
|
||||
matchobj = setupvardef.match(line)
|
||||
if matchobj:
|
||||
(name, value) = matchobj.group(1, 2)
|
||||
variables[name] = value.strip()
|
||||
else:
|
||||
words = line.split()
|
||||
if words:
|
||||
modules[words[0]] = words[1:]
|
||||
finally:
|
||||
fp.close()
|
||||
return modules, variables
|
||||
|
||||
|
||||
# Test the above functions.
|
||||
|
||||
def test():
|
||||
import sys
|
||||
import os
|
||||
if not sys.argv[1:]:
|
||||
print('usage: python parsesetup.py Makefile*|Setup* ...')
|
||||
sys.exit(2)
|
||||
for arg in sys.argv[1:]:
|
||||
base = os.path.basename(arg)
|
||||
if base[:8] == 'Makefile':
|
||||
print('Make style parsing:', arg)
|
||||
v = getmakevars(arg)
|
||||
prdict(v)
|
||||
elif base[:5] == 'Setup':
|
||||
print('Setup style parsing:', arg)
|
||||
m, v = getsetupinfo(arg)
|
||||
prdict(m)
|
||||
prdict(v)
|
||||
else:
|
||||
print(arg, 'is neither a Makefile nor a Setup file')
|
||||
print('(name must begin with "Makefile" or "Setup")')
|
||||
|
||||
def prdict(d):
|
||||
keys = sorted(d.keys())
|
||||
for key in keys:
|
||||
value = d[key]
|
||||
print("%-15s" % key, str(value))
|
||||
|
||||
if __name__ == '__main__':
|
||||
test()
|
Loading…
Add table
Add a link
Reference in a new issue