Generate Doxygen
[ci.git] / hbuild / gendoc.py
bloba967946e56cbc529f49f0f482f2d2e78244ee13a
1 #!/usr/bin/env python3
4 # Copyright (c) 2017 Vojtech Horky
5 # All rights reserved.
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions
9 # are met:
11 # - Redistributions of source code must retain the above copyright
12 # notice, this list of conditions and the following disclaimer.
13 # - Redistributions in binary form must reproduce the above copyright
14 # notice, this list of conditions and the following disclaimer in the
15 # documentation and/or other materials provided with the distribution.
16 # - The name of the author may not be used to endorse or promote products
17 # derived from this software without specific prior written permission.
19 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 from hbuild.scheduler import Task
32 import os
34 class BrowsableSourcesViaGnuGlobalTask(Task):
35 def __init__(self):
36 Task.__init__(self, 'browsable-sources-global')
38 def run(self):
39 root_dir = self.ctl.get_dependency_data('dir')
40 my_dir = self.ctl.make_temp_dir('build/browsable')
41 self.ctl.recursive_copy(root_dir, my_dir)
43 # For debugging, it is much better to generate the
44 # documentation in a sub-directory to speed things-up
45 # Following line is a possible way how to do that:
46 # my_dir = os.path.join(my_dir, 'abi')
48 res = self.ctl.run_command([ 'gtags' ], cwd=my_dir)
49 if res['failed']:
50 return False
52 res = self.ctl.run_command([
53 'htags',
54 '--tree-view',
55 '--table-flist',
56 '-tmainline'
57 ], cwd=my_dir)
58 if res['failed']:
59 return False
61 footer_links = [
62 '<a href="http://www.helenos.org">HelenOS homepage</a>',
63 '<a href="https://github.com/HelenOS/helenos">sources at GitHub</a>',
66 res = self.ctl.run_command([
67 'find',
68 os.path.join(my_dir, 'HTML/'),
69 '-name', '*.html',
70 '-exec',
71 'sed',
72 '-e', '/<head>/a <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />',
73 '-e', '/<body>/a <h1>HelenOS sources</h1>',
74 '-e', '/<\/body>/i <address>{}</address>'.format(', '.join(footer_links)),
75 '-i', '{}',
76 ';',
77 ], cwd=my_dir)
78 if res['failed']:
79 return False
81 self.ctl.move_dir_to_downloadable('Browsable sources', 'sources', os.path.join(my_dir, 'HTML'))
83 ret = {
84 'dir': my_dir,
87 return ret
89 class DoxygenTask(Task):
90 def __init__(self):
91 Task.__init__(self, 'doxygen')
93 def run(self):
94 root_dir = self.ctl.get_dependency_data('dir')
95 my_dir = self.ctl.make_temp_dir('build/doxygen')
96 self.ctl.recursive_copy(root_dir, my_dir)
98 res = self.ctl.run_command([
99 'make',
100 '-C', 'doxygen'
101 ], cwd=my_dir)
103 if res['failed']:
104 return False
106 self.ctl.move_dir_to_downloadable(
107 'Doxygen documentation',
108 'doxygen',
109 os.path.join(my_dir, 'doxygen', 'html')
112 ret = {
113 'dir': my_dir,
116 return ret