Uh oh!
There was an error while loading. Please reload this page.
forked from open-source-parsers/jsoncpp
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdoxybuild.py
More file actions
Latest commit
169 lines (158 loc) · 6.64 KB
/
Copy pathdoxybuild.py
File metadata and controls
169 lines (158 loc) · 6.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
"""Script to generate doxygen documentation.
"""
importre
importos
importos.path
importsys
importshutil
fromdevtoolsimporttarball
deffind_program(*filenames):
"""find a program in folders path_lst, and sets env[var]
@param filenames: a list of possible names of the program to search for
@return: the full path of the filename if found, or '' if filename could not be found
"""
paths=os.environ.get('PATH', '').split(os.pathsep)
suffixes= ('win32'insys.platform ) and'.exe .com .bat .cmd'or''
forfilenameinfilenames:
fornamein [filename+extforextinsuffixes.split()]:
fordirectoryinpaths:
full_path=os.path.join(directory, name)
ifos.path.isfile(full_path):
returnfull_path
return''
defdo_subst_in_file(targetfile, sourcefile, dict):
"""Replace all instances of the keys of dict with their values.
For example, if dict is {'%VERSION%': '1.2345', '%BASE%': 'MyProg'},
then all instances of %VERSION% in the file will be replaced with 1.2345 etc.
"""
try:
f=open(sourcefile, 'rb')
contents=f.read()
f.close()
except:
print"Can't read source file %s"%sourcefile
raise
for (k,v) indict.items():
v=v.replace('\\','\\\\')
contents=re.sub(k, v, contents)
try:
f=open(targetfile, 'wb')
f.write(contents)
f.close()
except:
print"Can't write target file %s"%targetfile
raise
defrun_doxygen(doxygen_path, config_file, working_dir, is_silent):
config_file=os.path.abspath( config_file )
doxygen_path=doxygen_path
old_cwd=os.getcwd()
try:
os.chdir( working_dir )
cmd= [doxygen_path, config_file]
print'Running:', ' '.join( cmd )
try:
importsubprocess
except:
ifos.system( ' '.join( cmd ) ) !=0:
print'Documentation generation failed'
returnFalse
else:
ifis_silent:
process=subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
else:
process=subprocess.Popen( cmd )
stdout, _=process.communicate()
ifprocess.returncode:
print'Documentation generation failed:'
printstdout
returnFalse
returnTrue
finally:
os.chdir( old_cwd )
defbuild_doc( options, make_release=False ):
ifmake_release:
options.make_tarball=True
options.with_dot=True
options.with_html_help=True
options.with_uml_look=True
options.open=False
options.silent=True
version=open('version','rt').read().strip()
output_dir='dist/doxygen'# relative to doc/doxyfile location.
ifnotos.path.isdir( output_dir ):
os.makedirs( output_dir )
top_dir=os.path.abspath( '.' )
html_output_dirname='jsoncpp-api-html-'+version
tarball_path=os.path.join( 'dist', html_output_dirname+'.tar.gz' )
warning_log_path=os.path.join( output_dir, '../jsoncpp-doxygen-warning.log' )
html_output_path=os.path.join( output_dir, html_output_dirname )
defyesno( bool ):
returnbooland'YES'or'NO'
subst_keys= {
'%JSONCPP_VERSION%': version,
'%DOC_TOPDIR%': '',
'%TOPDIR%': top_dir,
'%HTML_OUTPUT%': os.path.join( '..', output_dir, html_output_dirname ),
'%HAVE_DOT%': yesno(options.with_dot),
'%DOT_PATH%': os.path.split(options.dot_path)[0],
'%HTML_HELP%': yesno(options.with_html_help),
'%UML_LOOK%': yesno(options.with_uml_look),
'%WARNING_LOG_PATH%': os.path.join( '..', warning_log_path )
}
ifos.path.isdir( output_dir ):
print'Deleting directory:', output_dir
shutil.rmtree( output_dir )
ifnotos.path.isdir( output_dir ):
os.makedirs( output_dir )
do_subst_in_file( 'doc/doxyfile', 'doc/doxyfile.in', subst_keys )
ok=run_doxygen( options.doxygen_path, 'doc/doxyfile', 'doc', is_silent=options.silent )
ifnotoptions.silent:
printopen(warning_log_path, 'rb').read()
index_path=os.path.abspath(os.path.join('doc', subst_keys['%HTML_OUTPUT%'], 'index.html'))
print'Generated documentation can be found in:'
printindex_path
ifoptions.open:
importwebbrowser
webbrowser.open( 'file://'+index_path )
ifoptions.make_tarball:
print'Generating doc tarball to', tarball_path
tarball_sources= [
output_dir,
'README.txt',
'LICENSE',
'NEWS.txt',
'version'
]
tarball_basedir=os.path.join( output_dir, html_output_dirname )
tarball.make_tarball( tarball_path, tarball_sources, tarball_basedir, html_output_dirname )
returntarball_path, html_output_dirname
defmain():
usage="""%prog
Generates doxygen documentation in build/doxygen.
Optionaly makes a tarball of the documentation to dist/.
Must be started in the project top directory.
"""
fromoptparseimportOptionParser
parser=OptionParser(usage=usage)
parser.allow_interspersed_args=False
parser.add_option('--with-dot', dest="with_dot", action='store_true', default=False,
help="""Enable usage of DOT to generate collaboration diagram""")
parser.add_option('--dot', dest="dot_path", action='store', default=find_program('dot'),
help="""Path to GraphViz dot tool. Must be full qualified path. [Default: %default]""")
parser.add_option('--doxygen', dest="doxygen_path", action='store', default=find_program('doxygen'),
help="""Path to Doxygen tool. [Default: %default]""")
parser.add_option('--with-html-help', dest="with_html_help", action='store_true', default=False,
help="""Enable generation of Microsoft HTML HELP""")
parser.add_option('--no-uml-look', dest="with_uml_look", action='store_false', default=True,
help="""Generates DOT graph without UML look [Default: False]""")
parser.add_option('--open', dest="open", action='store_true', default=False,
help="""Open the HTML index in the web browser after generation""")
parser.add_option('--tarball', dest="make_tarball", action='store_true', default=False,
help="""Generates a tarball of the documentation in dist/ directory""")
parser.add_option('-s', '--silent', dest="silent", action='store_true', default=False,
help="""Hides doxygen output""")
parser.enable_interspersed_args()
options, args=parser.parse_args()
build_doc( options )
if__name__=='__main__':
main()