Split into seperate functions for easier invocation from python.

This commit is contained in:
Dan 2019-05-15 21:04:02 -04:00 committed by Wenzel Jakob
parent 590e7acedf
commit 2c8c5c4ed3

View File

@ -228,7 +228,7 @@ class ExtractionThread(Thread):
job_semaphore.release() job_semaphore.release()
def mkdoc(args, out_file=sys.stdout): def extract_all(args):
parameters = [] parameters = []
filenames = [] filenames = []
if "-x" not in args: if "-x" not in args:
@ -273,6 +273,19 @@ def mkdoc(args, out_file=sys.stdout):
if len(filenames) == 0: if len(filenames) == 0:
raise NoFilenamesError("args parameter did not contain any filenames") raise NoFilenamesError("args parameter did not contain any filenames")
output = []
for filename in filenames:
thr = ExtractionThread(filename, parameters, output)
thr.start()
print('Waiting for jobs to finish ..', file=sys.stderr)
for i in range(job_count):
job_semaphore.acquire()
return output
def write_header(comments, out_file=sys.stdout):
print('''/* print('''/*
This file contains docstrings for the Python bindings. This file contains docstrings for the Python bindings.
Do not edit! These were automatically extracted by mkdoc.py Do not edit! These were automatically extracted by mkdoc.py
@ -298,18 +311,10 @@ def mkdoc(args, out_file=sys.stdout):
#endif #endif
''', file=out_file) ''', file=out_file)
output = []
for filename in filenames:
thr = ExtractionThread(filename, parameters, output)
thr.start()
print('Waiting for jobs to finish ..', file=sys.stderr)
for i in range(job_count):
job_semaphore.acquire()
name_ctr = 1 name_ctr = 1
name_prev = None name_prev = None
for name, _, comment in list(sorted(output, key=lambda x: (x[0], x[1]))): for name, _, comment in list(sorted(comments, key=lambda x: (x[0], x[1]))):
if name == name_prev: if name == name_prev:
name_ctr += 1 name_ctr += 1
name = name + "_%i" % name_ctr name = name + "_%i" % name_ctr
@ -326,8 +331,8 @@ def mkdoc(args, out_file=sys.stdout):
''', file=out_file) ''', file=out_file)
if __name__ == '__main__': def mkdoc(args):
args = sys.argv[1:] args = list(args)
out_path = None out_path = None
for idx, arg in enumerate(args): for idx, arg in enumerate(args):
if arg.startswith("-o"): if arg.startswith("-o"):
@ -338,21 +343,28 @@ if __name__ == '__main__':
print("-o flag requires an argument") print("-o flag requires an argument")
exit(-1) exit(-1)
break break
try:
if out_path: comments = extract_all(args)
if out_path:
try:
with open(out_path, 'w') as out_file:
write_header(comments, out_file)
except:
# In the event of an error, don't leave a partially-written
# output file.
try: try:
with open(out_path, 'w') as out_file: os.unlink(out_path)
mkdoc(args, out_file)
except: except:
# In the event of an error, don't leave a partially-written pass
# output file. raise
try: else:
os.unlink(out_path) write_header(comments)
except:
pass
raise if __name__ == '__main__':
else: try:
mkdoc(args) mkdoc(sys.argv[1:])
except NoFilenamesError: except NoFilenamesError:
print('Syntax: %s [.. a list of header files ..]' % sys.argv[0]) print('Syntax: %s [.. a list of header files ..]' % sys.argv[0])
exit(-1) exit(-1)