OLD | NEW |
| (Empty) |
1 #!/usr/bin/env python | |
2 # Copyright 2014 The Chromium Authors. All rights reserved. | |
3 # Use of this source code is governed by a BSD-style license that can be | |
4 # found in the LICENSE file. | |
5 | |
6 | |
7 """Generate Doxygen documentation.""" | |
8 | |
9 | |
10 import datetime | |
11 import os | |
12 import shutil | |
13 import subprocess | |
14 import sys | |
15 | |
16 | |
17 DOXYFILE_BASENAME = 'Doxyfile' # must match name of Doxyfile in skia root | |
18 DOXYGEN_BINARY = 'doxygen' | |
19 WORKDIR = os.path.join(os.pardir, 'doxygen_workdir') | |
20 DOXYGEN_CONFIG_DIR = os.path.join(WORKDIR, 'doxygen-config') | |
21 DOXYGEN_WORKING_DIR = os.path.join(WORKDIR, 'doxygen') | |
22 DOXYGEN_GS_PATH = '/'.join(['gs://chromium-skia-gm', 'doxygen']) | |
23 | |
24 IFRAME_FOOTER_TEMPLATE = """ | |
25 <html><body><address style="text-align: right;"><small> | |
26 Generated at %s for skia | |
27 by <a href="http://www.doxygen.org/index.html">doxygen</a> | |
28 %s </small></address></body></html> | |
29 """ | |
30 | |
31 | |
32 def recreate_dir(path): | |
33 """Delete and recreate the directory.""" | |
34 try: | |
35 shutil.rmtree(path) | |
36 except OSError: | |
37 if os.path.exists(path): | |
38 raise Exception('Could not remove %s' % path) | |
39 os.makedirs(path) | |
40 | |
41 | |
42 def generate_and_upload_doxygen(gsutil_path): | |
43 """Generate Doxygen.""" | |
44 # Create empty dir and add static_footer.txt | |
45 recreate_dir(DOXYGEN_WORKING_DIR) | |
46 static_footer_path = os.path.join(DOXYGEN_WORKING_DIR, 'static_footer.txt') | |
47 shutil.copyfile(os.path.join('tools', 'doxygen_footer.txt'), | |
48 static_footer_path) | |
49 | |
50 # Make copy of doxygen config file, overriding any necessary configs, | |
51 # and run doxygen. | |
52 recreate_dir(DOXYGEN_CONFIG_DIR) | |
53 modified_doxyfile = os.path.join(DOXYGEN_CONFIG_DIR, DOXYFILE_BASENAME) | |
54 with open(DOXYFILE_BASENAME, 'r') as reader: | |
55 with open(modified_doxyfile, 'w') as writer: | |
56 shutil.copyfileobj(reader, writer) | |
57 writer.write('OUTPUT_DIRECTORY = %s\n' % DOXYGEN_WORKING_DIR) | |
58 writer.write('HTML_FOOTER = %s\n' % static_footer_path) | |
59 subprocess.check_call([DOXYGEN_BINARY, modified_doxyfile]) | |
60 | |
61 # Create iframe_footer.html | |
62 with open(os.path.join(DOXYGEN_WORKING_DIR, 'iframe_footer.html'), 'w') as f: | |
63 f.write(IFRAME_FOOTER_TEMPLATE % ( | |
64 datetime.datetime.now().isoformat(' '), | |
65 subprocess.check_output([DOXYGEN_BINARY, '--version']).rstrip())) | |
66 | |
67 # Upload. | |
68 cmd = [gsutil_path, 'cp', '-a', 'public-read', '-R', | |
69 DOXYGEN_WORKING_DIR, DOXYGEN_GS_PATH] | |
70 subprocess.check_call(cmd) | |
71 | |
72 | |
73 if '__main__' == __name__: | |
74 generate_and_upload_doxygen(*sys.argv[1:]) | |
75 | |
OLD | NEW |