Commit 2c8c5c4e by Dan Committed by Wenzel Jakob

Split into seperate functions for easier invocation from python.

parent 590e7ace
...@@ -228,7 +228,7 @@ class ExtractionThread(Thread): ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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__': ...@@ -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)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment