Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(248)

Unified Diff: documentation/build_docs.py

Issue 147079: This CL contains the the changes needed to build... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/o3d/
Patch Set: '' Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « documentation/build_docs.bat ('k') | documentation/externs/externs.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: documentation/build_docs.py
===================================================================
--- documentation/build_docs.py (revision 0)
+++ documentation/build_docs.py (revision 0)
@@ -0,0 +1,253 @@
+#!/usr/bin/python2.4
+# Copyright 2009, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+"""Docbuilder for O3D and o3djs."""
+
+
+import os
+import os.path
+import sys
+import imp
+import types
+import glob
+import subprocess
+
+_java_exe = ''
+_script_path = os.path.dirname(os.path.realpath(__file__))
+
+GlobalsDict = { }
+
+
+def MakePath(file_path):
+ """Makes a path absolute given a path relativel to this script."""
+ return os.path.join(_script_path, file_path)
+
+
+def UpdateGlobals(dict):
+ """Copies pairs from dict into GlobalDict."""
+ for i, v in dict.items():
+ GlobalsDict.__setitem__(i, v)
+
+
+def GetCallingNamespaces():
+ """Return the locals and globals for the function that called
+ into this module in the current call stack."""
+ try: 1/0
+ except ZeroDivisionError:
+ # Don't start iterating with the current stack-frame to
+ # prevent creating reference cycles (f_back is safe).
+ frame = sys.exc_info()[2].tb_frame.f_back
+
+ # Find the first frame that *isn't* from this file
+ while frame.f_globals.get("__name__") == __name__:
+ frame = frame.f_back
+
+ return frame.f_locals, frame.f_globals
+
+
+def ComputeExports(exports):
+ """Compute a dictionary of exports given one of the parameters
+ to the Export() function or the exports argument to SConscript()."""
+
+ loc, glob = GetCallingNamespaces()
+
+ retval = {}
+ try:
+ for export in exports:
+ if isinstance(export, types.DictType):
+ retval.update(export)
+ else:
+ try:
+ retval[export] = loc[export]
+ except KeyError:
+ retval[export] = glob[export]
+ except KeyError, x:
+ raise Error, "Export of non-existent variable '%s'"%x
+
+ return retval
+
+
+def Export(*vars):
+ """Copies the named variables to GlobalDict."""
+ for var in vars:
+ UpdateGlobals(ComputeExports(vars))
+
+
+def Import(filename):
+ """Imports a python file in a scope with 'Export' defined."""
+ scope = {'__builtins__': globals()['__builtins__'],
+ 'Export': Export}
+ file = open(filename, 'r')
+ exec file in scope
+ file.close()
+
+
+def Execute(args):
+ """Executes an external program."""
+ # Comment the next line in for debugging.
+ # print "Execute: ", ' '.join(args)
+ if subprocess.call(args) > 0:
+ raise RuntimeError('FAILED: ' + ' '.join(args))
+
+
+def AppendBasePath(folder, filenames):
+ """Appends a base path to a ist of files"""
+ return [os.path.join(folder, filename) for filename in filenames]
+
+
+def RunNixysa(idl_files, generate, output_dir, nixysa_options):
+ """Executes Nixysa."""
+ python_exe = 'python'
+ Execute([
+ python_exe,
+ MakePath('../third_party/nixysa/files/codegen.py'),
+ '--binding-module=o3d:%s' % MakePath('../plugin/o3d_binding.py'),
+ '--generate=' + generate,
+ '--force',
+ '--output-dir=' + output_dir] +
+ nixysa_options +
+ idl_files)
+
+
+def RunJSDocToolkit(js_files, output_dir, prefix):
+ """Executes the JSDocToolkit."""
+ list_filename = MakePath('../scons-out/docs/obj/doclist.conf')
+ f = open(list_filename, 'w')
+ f.write('{\n_: [\n')
+ for filename in js_files:
+ f.write('"%s",\n' % filename.replace('\\', '/'))
+ f.write(']\n}\n')
+ f.close()
+
+ Execute([
+ _java_exe,
+ '-Djsdoc.dir=%s' % MakePath('../third_party/jsdoctoolkit/files'),
+ '-jar',
+ MakePath('../third_party/jsdoctoolkit/files/jsrun.jar'),
+ MakePath('../third_party/jsdoctoolkit/files/app/run.js'),
+ '-D="prefix:%s"' % prefix,
+ '-v',
+ '-t=%s' % MakePath('./jsdoc-toolkit-templates//'),
+ '-d=' + output_dir,
+ '-c=' + list_filename])
+
+
+def BuildJavaScriptForDocsFromIDLs(idl_files, output_dir):
+ RunNixysa(idl_files, 'jsheader', output_dir, [])
+
+
+def BuildJavaScriptForExternsFromIDLs(idl_files, output_dir):
+ if (os.path.exists(output_dir)):
+ for filename in glob.glob(os.path.join(output_dir, '*.js')):
+ os.unlink(filename)
+ RunNixysa(idl_files, 'jsheader', output_dir, ['--no-return-docs'])
+
+
+def BuildO3DDocsFromJavaScript(js_files, output_dir):
+ RunJSDocToolkit(js_files, output_dir, 'classo3d_1_1_')
+
+
+def BuildO3DExternsFile(js_files_dir, extra_externs_file, externs_file):
+ outfile = open(externs_file, 'w')
+ filenames = (glob.glob(os.path.join(js_files_dir, '*.js')) +
+ [extra_externs_file])
+ for filename in filenames:
+ infile = open(filename, 'r')
+ outfile.write(infile.read())
+ infile.close()
+ outfile.close()
+
+
+def BuildCompiledO3DJS(o3djs_files,
+ externs_path,
+ o3d_externs_js_path,
+ compiled_o3djs_outpath):
+ Execute([
+ _java_exe,
+ '-jar',
+ MakePath('JSCompiler_deploy.jar'),
+ '--externs=%s' % externs_path,
+ ('--externs=%s' % o3d_externs_js_path),
+ ('--js_output_file=%s' % compiled_o3djs_outpath)] +
+ ['-js=%s' % (x, ) for x in o3djs_files]);
+
+
+def main():
+ """Builds the O3D API docs and externs and the o3djs docs."""
+ global _java_exe
+ _java_exe = sys.argv[1]
+
+ js_list_filename = MakePath('../samples/o3djs/js_list.scons')
+ idl_list_filename = MakePath('../plugin/idl_list.scons')
+ js_list_basepath = os.path.dirname(js_list_filename)
+ idl_list_basepath = os.path.dirname(idl_list_filename)
+
+ docs_js_outpath = MakePath('../scons-out/docs/obj/documentation/apijs')
+ externs_js_outpath = MakePath('../scons-out/docs/obj/externs')
+ o3d_docs_html_outpath = MakePath('../scons-out/docs/obj/documentation/html')
+ o3d_externs_path = MakePath('../scons-out/docs/obj/o3d-externs.js')
+ compiled_o3djs_outpath = MakePath(
+ '../scons-out/docs/obj/documentation/base.js')
+ externs_path = MakePath('externs/externs.js')
+ o3d_extra_externs_path = MakePath('externs/o3d-extra-externs.js')
+
+ Import(js_list_filename)
+ Import(idl_list_filename)
+
+ idl_files = AppendBasePath(idl_list_basepath, GlobalsDict['O3D_IDL_SOURCES'])
+ o3djs_files = AppendBasePath(js_list_basepath, GlobalsDict['O3D_JS_SOURCES'])
+
+ # we need to put base.js first?
+ o3djs_files = (
+ filter(lambda x: x.endswith('base.js'), o3djs_files) +
+ filter(lambda x: not x.endswith('base.js'), o3djs_files))
+
+ docs_js_files = [os.path.join(
+ docs_js_outpath,
+ os.path.splitext(os.path.basename(f))[0] + '.js')
+ for f in GlobalsDict['O3D_IDL_SOURCES']]
+
+ BuildJavaScriptForDocsFromIDLs(idl_files, docs_js_outpath)
+ BuildO3DDocsFromJavaScript([o3d_extra_externs_path] + docs_js_files,
+ o3d_docs_html_outpath)
+ BuildJavaScriptForExternsFromIDLs(idl_files, externs_js_outpath)
+ BuildO3DExternsFile(externs_js_outpath,
+ o3d_extra_externs_path,
+ o3d_externs_path)
+ BuildCompiledO3DJS(o3djs_files,
+ externs_path,
+ o3d_externs_path,
+ compiled_o3djs_outpath)
+
+
+if __name__ == '__main__':
+ main()
+
Property changes on: documentation/build_docs.py
___________________________________________________________________
Added: svn:executable
+ *
« no previous file with comments | « documentation/build_docs.bat ('k') | documentation/externs/externs.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698