summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/jsoncpp/doxybuild.py
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/jsoncpp/doxybuild.py')
-rw-r--r--3rdparty/jsoncpp/doxybuild.py169
1 files changed, 169 insertions, 0 deletions
diff --git a/3rdparty/jsoncpp/doxybuild.py b/3rdparty/jsoncpp/doxybuild.py
new file mode 100644
index 00000000000..0b61c397e43
--- /dev/null
+++ b/3rdparty/jsoncpp/doxybuild.py
@@ -0,0 +1,169 @@
+"""Script to generate doxygen documentation.
+"""
+from __future__ import print_function
+from devtools import tarball
+import re
+import os
+import os.path
+import sys
+import shutil
+
+def find_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' in sys.platform ) and '.exe .com .bat .cmd' or ''
+ for filename in filenames:
+ for name in [filename+ext for ext in suffixes.split()]:
+ for directory in paths:
+ full_path = os.path.join(directory, name)
+ if os.path.isfile(full_path):
+ return full_path
+ return ''
+
+def do_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) in list(dict.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
+
+def run_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:
+ import subprocess
+ except:
+ if os.system( ' '.join( cmd ) ) != 0:
+ print('Documentation generation failed')
+ return False
+ else:
+ if is_silent:
+ process = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
+ else:
+ process = subprocess.Popen( cmd )
+ stdout, _ = process.communicate()
+ if process.returncode:
+ print('Documentation generation failed:')
+ print(stdout)
+ return False
+ return True
+ finally:
+ os.chdir( old_cwd )
+
+def build_doc( options, make_release=False ):
+ if make_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.
+ if not os.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 )
+ def yesno( bool ):
+ return bool and '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 )
+ }
+
+ if os.path.isdir( output_dir ):
+ print('Deleting directory:', output_dir)
+ shutil.rmtree( output_dir )
+ if not os.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 )
+ if not options.silent:
+ print(open(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:')
+ print(index_path)
+ if options.open:
+ import webbrowser
+ webbrowser.open( 'file://' + index_path )
+ if options.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 )
+ return tarball_path, html_output_dirname
+
+def main():
+ 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.
+ """
+ from optparse import OptionParser
+ 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()