diff --git a/o3d/DEPS_chrome b/o3d/DEPS_chrome
new file mode 100644
index 000000000000..0635b8785a65
--- /dev/null
+++ b/o3d/DEPS_chrome
@@ -0,0 +1,72 @@
+vars = {
+ "o3d_code_rev": "149",
+}
+
+deps = {
+ "src/o3d/o3d_assets":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/o3d_assets@" + Var("o3d_code_rev"),
+
+ "src/third_party/antlr3":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/antlr3@" + Var("o3d_code_rev"),
+
+ "src/third_party/cg":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/cg@" + Var("o3d_code_rev"),
+
+ "src/third_party/fcollada":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/fcollada@" + Var("o3d_code_rev"),
+
+ "src/third_party/jsdoctoolkit":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/jsdoctoolkit@" + Var("o3d_code_rev"),
+
+ "src/third_party/pdiff":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/pdiff@" + Var("o3d_code_rev"),
+
+ "src/third_party/zip_utils":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/zip_utils@" + Var("o3d_code_rev"),
+
+ "src/third_party/selenium_rc":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/selenium_rc@" + Var("o3d_code_rev"),
+}
+
+deps_os = {
+ "win": {
+ "src/third_party/wix_2_0_4221":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/wix_2_0_4221@" + Var("o3d_code_rev"),
+ },
+}
+vars = {
+ "o3d_code_rev": "149",
+}
+
+deps = {
+ "src/o3d/o3d_assets":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/o3d_assets@" + Var("o3d_code_rev"),
+
+ "src/third_party/antlr3":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/antlr3@" + Var("o3d_code_rev"),
+
+ "src/third_party/cg":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/cg@" + Var("o3d_code_rev"),
+
+ "src/third_party/fcollada":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/fcollada@" + Var("o3d_code_rev"),
+
+ "src/third_party/jsdoctoolkit":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/jsdoctoolkit@" + Var("o3d_code_rev"),
+
+ "src/third_party/pdiff":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/pdiff@" + Var("o3d_code_rev"),
+
+ "src/third_party/zip_utils":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/zip_utils@" + Var("o3d_code_rev"),
+
+ "src/third_party/selenium_rc":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/selenium_rc@" + Var("o3d_code_rev"),
+}
+
+deps_os = {
+ "win": {
+ "src/third_party/wix_2_0_4221":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/wix_2_0_4221@" + Var("o3d_code_rev"),
+ },
+}
\ No newline at end of file
diff --git a/o3d/DEPS_gyp b/o3d/DEPS_gyp
index 3fccefa35f70..f06121ec460f 100644
--- a/o3d/DEPS_gyp
+++ b/o3d/DEPS_gyp
@@ -41,15 +41,29 @@ deps = {
"third_party/scons":
"http://o3d.googlecode.com/svn/trunk/googleclient/third_party/scons@" + Var("o3d_code_rev"),
- "third_party/vectormath":
- "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/vectormath@" + Var("o3d_code_rev"),
-
"third_party/zip_utils":
"http://o3d.googlecode.com/svn/trunk/googleclient/third_party/zip_utils@" + Var("o3d_code_rev"),
"third_party/selenium_rc":
"http://o3d.googlecode.com/svn/trunk/googleclient/third_party/selenium_rc@" + Var("o3d_code_rev"),
+# Stuff that is O3D specific (from a Chrome point of view).
+
+ "o3d/third_party/vectormath":
+ "http://o3d.googlecode.com/svn/trunk/googleclient/third_party/vectormath@" + Var("o3d_code_rev"),
+
+ "o3d/third_party/nixysa":
+ "http://nixysa.googlecode.com/svn/trunk/nixysa@" + Var("nixysa_rev"),
+
+ "o3d/third_party/npapi":
+ "http://nixysa.googlecode.com/svn/trunk/third_party/npapi@" + Var("nixysa_rev"),
+
+ "o3d/third_party/ply":
+ "http://nixysa.googlecode.com/svn/trunk/third_party/ply-3.1@" + Var("nixysa_rev"),
+
+ "o3d/third_party/gflags":
+ "http://google-gflags.googlecode.com/svn/trunk@" + Var("gflags_rev"),
+
# Stuff from the Chromium tree.
"third_party/harfbuzz":
@@ -97,18 +111,6 @@ deps = {
"breakpad/src":
"http://google-breakpad.googlecode.com/svn/trunk/src@" + Var("breakpad_rev"),
- "third_party/nixysa":
- "http://nixysa.googlecode.com/svn/trunk/nixysa@" + Var("nixysa_rev"),
-
- "third_party/npapi":
- "http://nixysa.googlecode.com/svn/trunk/third_party/npapi@" + Var("nixysa_rev"),
-
- "third_party/ply":
- "http://nixysa.googlecode.com/svn/trunk/third_party/ply-3.1@" + Var("nixysa_rev"),
-
- "third_party/gflags":
- "http://google-gflags.googlecode.com/svn/trunk@" + Var("gflags_rev"),
-
"testing/gtest":
"http://googletest.googlecode.com/svn/trunk@" + Var("gtest_rev"),
@@ -155,6 +157,6 @@ hooks = [
{
# A change to a .gyp, .gypi, or to GYP itself should run the generator.
"pattern": "\\.gypi?$|[/\\\\]src[/\\\\]tools[/\\\\]gyp[/\\\\]|[/\\\\]src[/\\\\]o3d[/\\\\]build[/\\\\]gyp_o3d$|MANIFEST$",
- "action": ["python", "o3d/build/gyp_o3d", "o3d/build/all.gyp"],
+ "action": ["python", "o3d/build/gyp_o3d", "o3d/build/o3d.gyp"],
},
]
diff --git a/o3d/build/build_nacl.py b/o3d/build/build_nacl.py
deleted file mode 100644
index af4c5cf02e04..000000000000
--- a/o3d/build/build_nacl.py
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/usr/bin/python2.4
-# Copyright 2009 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# This file is just here so that we can modify the python path before
-# invoking nixysa.
-
-import os
-import os.path
-import shutil
-import subprocess
-import sys
-
-third_party = os.path.join('..', '..', 'third_party')
-gflags_dir = os.path.join(third_party, 'gflags', 'python')
-sys.path.append(gflags_dir)
-
-import gflags
-
-FLAGS = gflags.FLAGS
-gflags.DEFINE_string('configuration', 'Debug',
- 'Specify which configuration to build.')
-
-gflags.DEFINE_string('platform', 'win',
- 'Specify which platform to build.')
-
-gflags.DEFINE_boolean('debug', False,
- 'Whether or not to turn on debug output '
- 'when running scons.')
-
-gflags.DEFINE_string('output', '.', 'Sets the output directory.')
-
-
-def CopyIfNewer(inputs, output_dir):
- '''Copy the inputs to the output directory, but only if the files are
- newer than the destination files.'''
- for input in inputs:
- output = os.path.join(output_dir, os.path.basename(input))
- if os.path.exists(input):
- if (not os.path.exists(output) or
- os.path.getmtime(input) > os.path.getmtime(output)):
- try:
- print 'Copying from %s to %s' % (input, output)
- shutil.copy2(input, output)
- except:
- return False
- else:
- print '%s is up to date.' % output
- return True
-
-def PrependToPath(path, item):
- '''Prepend an item to an environment variable path.'''
- orig_path = os.environ.get(path)
- if orig_path:
- new_path = os.pathsep.join([item, orig_path])
- else:
- new_path = item
-
- os.environ[path] = new_path
-
-def AppendToPath(path, item):
- '''Append an item to an environment variable path.'''
- orig_path = os.environ.get(path)
- if orig_path:
- new_path = os.pathsep.join([orig_path, item])
- else:
- new_path = item
-
- os.environ[path] = new_path
-
-def FindPlatformSDK():
- '''On Windows, find the installed location of the Platform SDK.'''
- import _winreg
- try:
- winsdk_key = _winreg.OpenKey(
- _winreg.HKEY_LOCAL_MACHINE,
- 'SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.1\\WinSDKBuild')
- except WindowsError:
- try:
- winsdk_key = _winreg.OpenKey(
- _winreg.HKEY_LOCAL_MACHINE,
- 'SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.0A\\WinSDKBuild')
- except WindowsError:
- try:
- winsdk_key = _winreg.OpenKey(
- _winreg.HKEY_LOCAL_MACHINE,
- 'SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.0A\\VistaClientHeadersLibs')
- except WindowsError:
- print 'The Windows SDK version 6.0 or later needs to be installed'
- sys.exit(1)
- try:
- winsdk_dir, value_type = _winreg.QueryValueEx(winsdk_key,
- 'InstallationFolder')
- except WindowsError:
- print 'The Windows SDK version 6.0 or later needs to be installed'
- sys.exit(1)
- _winreg.CloseKey(winsdk_key)
-
- # Strip off trailing slashes
- winsdk_dir = winsdk_dir.rstrip('\\/')
- AppendToPath('PATH', os.path.join(winsdk_dir, 'Bin'))
- AppendToPath('INCLUDE', os.path.join(winsdk_dir, 'Include'))
- AppendToPath('LIB', os.path.join(winsdk_dir, 'Lib'))
-
-def main(args):
- extra_args = FLAGS(args)
- # strip off argv[0]
- extra_args = extra_args[1:]
-
- pythonpath = os.path.join(third_party, 'scons', 'scons-local')
- PrependToPath('PYTHONPATH', pythonpath)
-
- binutils_path = os.path.join(third_party, 'gnu_binutils', 'files')
- AppendToPath('PATH', binutils_path)
-
- config = 'opt'
- if FLAGS.configuration == 'Debug':
- config = 'dbg'
- elif FLAGS.configuration == 'Release':
- config = 'opt'
-
- mode = '%s-%s' % (config, FLAGS.platform)
-
- native_client_dir = os.path.join(third_party, 'native_client',
- 'googleclient', 'native_client')
-
- args = [
- 'MODE=%s' % mode,
- 'naclsdk_validate=0',
- 'sdl=none',
- '--verbose',
- '--file=SConstruct',
- '-C',
- native_client_dir,
- ]
- scons = os.path.join(third_party, 'scons', 'scons.py')
- args = [sys.executable, scons] + args + extra_args
-
- # Add the platform SDK to INCLUDE and LIB
- if FLAGS.platform == 'win':
- FindPlatformSDK()
-
- print 'Executing %s' % ' '.join(args)
- status = subprocess.call(args)
-
- # Calculate what the output files should be.
- outputs = []
- for arg in extra_args:
- file_path = os.path.join(native_client_dir,
- 'scons-out', mode, 'lib', arg)
- if FLAGS.platform == 'win':
- file_path = file_path + '.lib'
- else:
- file_path = file_path + '.a'
- outputs.append(file_path)
-
- if status == 0 and not CopyIfNewer(outputs, FLAGS.output):
- sys.exit(-1)
- else:
- sys.exit(status)
-
-if __name__ == '__main__':
- main(sys.argv)
diff --git a/o3d/build/common.gypi b/o3d/build/common.gypi
index 64613e753a6f..31697fdbe744 100644
--- a/o3d/build/common.gypi
+++ b/o3d/build/common.gypi
@@ -12,15 +12,21 @@
'gtestdir': 'testing/gtest/include',
'jpegdir': 'third_party/libjpeg',
'nacldir': 'third_party/native_client/googleclient',
- 'nixysadir': 'third_party/nixysa',
- 'npapidir': 'third_party/npapi',
+ 'nixysadir': 'o3d/third_party/nixysa',
+ 'npapidir': 'o3d/third_party/npapi',
'pdiffdir': 'third_party/pdiff/files',
'pngdir': 'third_party/libpng',
'screenshotsdir': 'o3d_assets/tests/screenshots',
'seleniumdir': 'third_party/selenium_rc/files',
'skiadir': 'third_party/skia/include',
'zlibdir': 'third_party/zlib',
- 'o3d_in_chrome%': 0,
+ # If the DEPS file exists two levels up, then we're in a Chrome tree.
+ 'o3d_in_chrome%': ' 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."""
- Execute([
- sys.executable,
- MakePath(_third_party_dir, 'nixysa', '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, ezt_output_dir, html_output_dir, prefix, mode,
- baseURL, topURL, exports_file):
- """Executes the JSDocToolkit."""
- list_filename = MakePath(_output_dir, 'doclist.conf')
- f = open(list_filename, 'w')
- f.write('{\nD:{\n')
- f.write('prefix: "%s",\n' % prefix)
- f.write('baseURL: "%s",\n' % baseURL)
- f.write('topURL: "%s",\n' % topURL)
- f.write('mode: "%s",\n' % mode)
- f.write('htmlOutDir: "%s",\n' % html_output_dir.replace('\\', '/'))
- f.write('exportsFile: "%s",\n' % exports_file.replace('\\', '/'))
- f.write('endMarker: ""\n')
- f.write('},\n')
- f.write('_: [\n')
- for filename in js_files:
- f.write('"%s",\n' % filename.replace('\\', '/'))
- f.write(']\n}\n')
- f.close()
-
- files_dir = MakePath(_third_party_dir, 'jsdoctoolkit', 'files')
- Execute([
- _java_exe,
- '-Djsdoc.dir=%s' % files_dir,
- '-jar',
- MakePath(files_dir, 'jsrun.jar'),
- MakePath(files_dir, 'app', 'run.js'),
- '-v',
- '-t=%s' % MakePath('jsdoc-toolkit-templates'),
- '-d=' + ezt_output_dir,
- '-c=' + list_filename])
-
-
-def DeleteOldDocs(docs_js_outpath):
- try:
- shutil.rmtree(docs_js_outpath);
- except:
- pass
-
-def BuildJavaScriptForDocsFromIDLs(idl_files, output_dir):
- RunNixysa(idl_files, 'jsheader', output_dir, ['--properties-equal-undefined'])
-
-
-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, ezt_output_dir, html_output_dir):
- RunJSDocToolkit(js_files, ezt_output_dir, html_output_dir,
- 'classo3d_1_1_', 'o3d', '', '', '')
-
-
-def BuildO3DClassHierarchy(html_output_dir):
- # TODO(gman): We need to make mutliple graphs. One for Params, one for
- # ParamMatrix4, one for RenderNode, one for everythng else.
- dot_path = MakePath(_third_party_dir, 'graphviz', 'files', 'bin',
- MakeCommandName('dot'))
- if os.path.exists(dot_path):
- Execute([
- dot_path,
- '-Tcmapx', '-o' + MakePath(html_output_dir, 'class_hierarchy.map'),
- '-Tpng', '-o' + MakePath(html_output_dir, 'class_hierarchy.png'),
- MakePath(html_output_dir, 'class_hierarchy.dot')])
-
-
-def BuildO3DJSDocs(js_files, ezt_output_dir, html_output_dir, exports_file):
- # The backslashes below on 'jsdocs/' and '../' must stay.
- RunJSDocToolkit(js_files, ezt_output_dir, html_output_dir, 'js_1_0_', 'o3djs',
- 'jsdocs/', '../', exports_file)
-
-
-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:
- print "-----", filename
- infile = open(filename, 'r')
- lines = infile.readlines()
- infile.close()
- filtered = []
- skipping = False
- # strip out @o3dparameter stuff
- for line in lines:
- if skipping:
- if line.startswith(' * @') or line.startswith(' */'):
- skipping = False
- if not skipping:
- if line.startswith(' * @o3dparameter'):
- skipping = True
- if not skipping:
- filtered.append(line)
- outfile.write(''.join(filtered))
- outfile.close()
-
-
-def BuildCompiledO3DJS(o3djs_files,
- externs_path,
- o3d_externs_js_path,
- compiled_o3djs_outpath):
- Execute([
- _java_exe,
- '-jar',
- MakePath('..', '..', 'o3d-internal', 'jscomp', 'JSCompiler_deploy.jar'),
- '--property_renaming', 'OFF',
- '--variable_renaming', 'LOCAL',
- '--strict',
- '--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]);
-
- # strip out goog.exportSymbol and move o3djs.require to end
- file = open(compiled_o3djs_outpath, 'r')
- contents = file.read()
- file.close()
- contents = re.sub(r'goog.exportSymbol\([^\)]*\);', '', contents)
- requires = set(re.findall(r'o3djs.require\([^\)]*\);', contents))
- contents = re.sub(r'o3djs.require\([^\)]*\);', '', contents)
- file = open(compiled_o3djs_outpath, 'w')
- file.write(_js_copyright)
- file.write(contents)
- file.write('\n')
- file.write('\n'.join(requires))
- file.close()
-
-
-def CopyStaticFiles(o3d_docs_ezt_outpath, o3d_docs_html_outpath):
- files = ['stylesheet.css',
- 'prettify.css',
- 'prettify.js',
- 'tabs.css',
- 'tab_l.gif',
- 'tab_r.gif',
- 'tab_b.gif']
- for file in files:
- shutil.copyfile(MakePath('jsdoc-toolkit-templates', 'static', file),
- MakePath(os.path.join(o3d_docs_ezt_outpath, file)))
- shutil.copyfile(MakePath('jsdoc-toolkit-templates', 'static', file),
- MakePath(os.path.join(o3d_docs_html_outpath, file)))
-
-
-def main(argv):
- """Builds the O3D API docs and externs and the o3djs docs."""
- global _java_exe
- _java_exe = argv[0]
- global _third_party_dir
- _third_party_dir = argv[1]
-
- # Fix up the python path of subprocesses by setting PYTHONPATH.
- pythonpath = os.pathsep.join([MakePath(_third_party_dir, 'gflags', 'python'),
- MakePath(_third_party_dir, 'ply')])
-
- orig_pythonpath = os.environ.get('PYTHONPATH')
- if orig_pythonpath:
- pythonpath = os.pathsep.join([pythonpath, orig_pythonpath])
-
- os.environ['PYTHONPATH'] = pythonpath
-
- 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)
-
- global _output_dir
- _output_dir = argv[2]
- docs_outpath = os.path.join(_output_dir, 'documentation')
- docs_js_outpath = MakePath(docs_outpath, 'apijs')
- externs_js_outpath = MakePath(_output_dir, 'externs')
- o3d_docs_ezt_outpath = MakePath(docs_outpath, 'reference')
- o3d_docs_html_outpath = MakePath(docs_outpath, 'local_html')
- o3djs_docs_ezt_outpath = MakePath(docs_outpath, 'reference', 'jsdocs')
- o3djs_docs_html_outpath = MakePath(docs_outpath, 'local_html', 'jsdocs')
- o3d_externs_path = MakePath(_output_dir, 'o3d-externs.js')
- o3djs_exports_path = MakePath(_output_dir, 'o3d-exports.js')
- compiled_o3djs_outpath = MakePath(docs_outpath, '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']]
-
- DeleteOldDocs(MakePath(docs_outpath))
- BuildJavaScriptForDocsFromIDLs(idl_files, docs_js_outpath)
- BuildO3DDocsFromJavaScript([o3d_extra_externs_path] + docs_js_files,
- o3d_docs_ezt_outpath, o3d_docs_html_outpath)
- BuildO3DClassHierarchy(o3d_docs_html_outpath)
- BuildJavaScriptForExternsFromIDLs(idl_files, externs_js_outpath)
- BuildO3DExternsFile(externs_js_outpath,
- o3d_extra_externs_path,
- o3d_externs_path)
- BuildO3DJSDocs(o3djs_files + [o3d_externs_path], o3djs_docs_ezt_outpath,
- o3djs_docs_html_outpath, o3djs_exports_path)
- CopyStaticFiles(o3d_docs_ezt_outpath, o3d_docs_html_outpath)
- BuildCompiledO3DJS(o3djs_files + [o3djs_exports_path],
- externs_path,
- o3d_externs_path,
- compiled_o3djs_outpath)
-
-
-if __name__ == '__main__':
- main(sys.argv[1:])
+#!/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
+import shutil
+import re
+
+
+_java_exe = ''
+_output_dir = ''
+_third_party_dir = ''
+_o3d_third_party_dir = ''
+_script_path = os.path.dirname(os.path.realpath(__file__))
+_js_copyright = """
+/*
+ * 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.
+ */
+"""
+
+GlobalsDict = { }
+
+
+def MakePath(*file_paths):
+ """Makes a path absolute given a path relative to this script."""
+ return os.path.join(_script_path, *file_paths)
+
+
+def MakeCommandName(name):
+ """adds '.exe' if on Windows"""
+ if os.name == 'nt':
+ return name + '.exe'
+ return name
+
+
+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."""
+ Execute([
+ sys.executable,
+ MakePath(_o3d_third_party_dir, 'nixysa', '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, ezt_output_dir, html_output_dir, prefix, mode,
+ baseURL, topURL, exports_file):
+ """Executes the JSDocToolkit."""
+ list_filename = MakePath(_output_dir, 'doclist.conf')
+ f = open(list_filename, 'w')
+ f.write('{\nD:{\n')
+ f.write('prefix: "%s",\n' % prefix)
+ f.write('baseURL: "%s",\n' % baseURL)
+ f.write('topURL: "%s",\n' % topURL)
+ f.write('mode: "%s",\n' % mode)
+ f.write('htmlOutDir: "%s",\n' % html_output_dir.replace('\\', '/'))
+ f.write('exportsFile: "%s",\n' % exports_file.replace('\\', '/'))
+ f.write('endMarker: ""\n')
+ f.write('},\n')
+ f.write('_: [\n')
+ for filename in js_files:
+ f.write('"%s",\n' % filename.replace('\\', '/'))
+ f.write(']\n}\n')
+ f.close()
+
+ files_dir = MakePath(_third_party_dir, 'jsdoctoolkit', 'files')
+ Execute([
+ _java_exe,
+ '-Djsdoc.dir=%s' % files_dir,
+ '-jar',
+ MakePath(files_dir, 'jsrun.jar'),
+ MakePath(files_dir, 'app', 'run.js'),
+ '-v',
+ '-t=%s' % MakePath('jsdoc-toolkit-templates'),
+ '-d=' + ezt_output_dir,
+ '-c=' + list_filename])
+
+
+def DeleteOldDocs(docs_js_outpath):
+ try:
+ shutil.rmtree(docs_js_outpath);
+ except:
+ pass
+
+def BuildJavaScriptForDocsFromIDLs(idl_files, output_dir):
+ RunNixysa(idl_files, 'jsheader', output_dir, ['--properties-equal-undefined'])
+
+
+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, ezt_output_dir, html_output_dir):
+ RunJSDocToolkit(js_files, ezt_output_dir, html_output_dir,
+ 'classo3d_1_1_', 'o3d', '', '', '')
+
+
+def BuildO3DClassHierarchy(html_output_dir):
+ # TODO(gman): We need to make mutliple graphs. One for Params, one for
+ # ParamMatrix4, one for RenderNode, one for everythng else.
+ dot_path = MakePath(_third_party_dir, 'graphviz', 'files', 'bin',
+ MakeCommandName('dot'))
+ if os.path.exists(dot_path):
+ Execute([
+ dot_path,
+ '-Tcmapx', '-o' + MakePath(html_output_dir, 'class_hierarchy.map'),
+ '-Tpng', '-o' + MakePath(html_output_dir, 'class_hierarchy.png'),
+ MakePath(html_output_dir, 'class_hierarchy.dot')])
+
+
+def BuildO3DJSDocs(js_files, ezt_output_dir, html_output_dir, exports_file):
+ # The backslashes below on 'jsdocs/' and '../' must stay.
+ RunJSDocToolkit(js_files, ezt_output_dir, html_output_dir, 'js_1_0_', 'o3djs',
+ 'jsdocs/', '../', exports_file)
+
+
+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:
+ print "-----", filename
+ infile = open(filename, 'r')
+ lines = infile.readlines()
+ infile.close()
+ filtered = []
+ skipping = False
+ # strip out @o3dparameter stuff
+ for line in lines:
+ if skipping:
+ if line.startswith(' * @') or line.startswith(' */'):
+ skipping = False
+ if not skipping:
+ if line.startswith(' * @o3dparameter'):
+ skipping = True
+ if not skipping:
+ filtered.append(line)
+ outfile.write(''.join(filtered))
+ outfile.close()
+
+
+def BuildCompiledO3DJS(o3djs_files,
+ externs_path,
+ o3d_externs_js_path,
+ compiled_o3djs_outpath):
+ Execute([
+ _java_exe,
+ '-jar',
+ MakePath('..', '..', 'o3d-internal', 'jscomp', 'JSCompiler_deploy.jar'),
+ '--property_renaming', 'OFF',
+ '--variable_renaming', 'LOCAL',
+ '--strict',
+ '--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]);
+
+ # strip out goog.exportSymbol and move o3djs.require to end
+ file = open(compiled_o3djs_outpath, 'r')
+ contents = file.read()
+ file.close()
+ contents = re.sub(r'goog.exportSymbol\([^\)]*\);', '', contents)
+ requires = set(re.findall(r'o3djs.require\([^\)]*\);', contents))
+ contents = re.sub(r'o3djs.require\([^\)]*\);', '', contents)
+ file = open(compiled_o3djs_outpath, 'w')
+ file.write(_js_copyright)
+ file.write(contents)
+ file.write('\n')
+ file.write('\n'.join(requires))
+ file.close()
+
+
+def CopyStaticFiles(o3d_docs_ezt_outpath, o3d_docs_html_outpath):
+ files = ['stylesheet.css',
+ 'prettify.css',
+ 'prettify.js',
+ 'tabs.css',
+ 'tab_l.gif',
+ 'tab_r.gif',
+ 'tab_b.gif']
+ for file in files:
+ shutil.copyfile(MakePath('jsdoc-toolkit-templates', 'static', file),
+ MakePath(os.path.join(o3d_docs_ezt_outpath, file)))
+ shutil.copyfile(MakePath('jsdoc-toolkit-templates', 'static', file),
+ MakePath(os.path.join(o3d_docs_html_outpath, file)))
+
+
+def main(argv):
+ """Builds the O3D API docs and externs and the o3djs docs."""
+ global _java_exe
+ _java_exe = argv[0]
+ global _third_party_dir
+ _third_party_dir = argv[1]
+ global _o3d_third_party_dir
+ _o3d_third_party_dir = os.path.normpath(
+ os.path.join(os.path.dirname(__file__), '..', 'third_party'))
+
+ # Fix up the python path of subprocesses by setting PYTHONPATH.
+ pythonpath = os.pathsep.join([MakePath(_o3d_third_party_dir, 'gflags', 'python'),
+ MakePath(_o3d_third_party_dir, 'ply')])
+
+ orig_pythonpath = os.environ.get('PYTHONPATH')
+ if orig_pythonpath:
+ pythonpath = os.pathsep.join([pythonpath, orig_pythonpath])
+
+ os.environ['PYTHONPATH'] = pythonpath
+
+ 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)
+
+ global _output_dir
+ _output_dir = argv[2]
+ docs_outpath = os.path.join(_output_dir, 'documentation')
+ docs_js_outpath = MakePath(docs_outpath, 'apijs')
+ externs_js_outpath = MakePath(_output_dir, 'externs')
+ o3d_docs_ezt_outpath = MakePath(docs_outpath, 'reference')
+ o3d_docs_html_outpath = MakePath(docs_outpath, 'local_html')
+ o3djs_docs_ezt_outpath = MakePath(docs_outpath, 'reference', 'jsdocs')
+ o3djs_docs_html_outpath = MakePath(docs_outpath, 'local_html', 'jsdocs')
+ o3d_externs_path = MakePath(_output_dir, 'o3d-externs.js')
+ o3djs_exports_path = MakePath(_output_dir, 'o3d-exports.js')
+ compiled_o3djs_outpath = MakePath(docs_outpath, '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']]
+
+ DeleteOldDocs(MakePath(docs_outpath))
+ BuildJavaScriptForDocsFromIDLs(idl_files, docs_js_outpath)
+ BuildO3DDocsFromJavaScript([o3d_extra_externs_path] + docs_js_files,
+ o3d_docs_ezt_outpath, o3d_docs_html_outpath)
+ BuildO3DClassHierarchy(o3d_docs_html_outpath)
+ BuildJavaScriptForExternsFromIDLs(idl_files, externs_js_outpath)
+ BuildO3DExternsFile(externs_js_outpath,
+ o3d_extra_externs_path,
+ o3d_externs_path)
+ BuildO3DJSDocs(o3djs_files + [o3d_externs_path], o3djs_docs_ezt_outpath,
+ o3djs_docs_html_outpath, o3djs_exports_path)
+ CopyStaticFiles(o3d_docs_ezt_outpath, o3d_docs_html_outpath)
+ BuildCompiledO3DJS(o3djs_files + [o3djs_exports_path],
+ externs_path,
+ o3d_externs_path,
+ compiled_o3djs_outpath)
+
+
+if __name__ == '__main__':
+ main(sys.argv[1:])
diff --git a/o3d/plugin/cross/main.h b/o3d/plugin/cross/main.h
index 049c68846881..5d77d59d991c 100644
--- a/o3d/plugin/cross/main.h
+++ b/o3d/plugin/cross/main.h
@@ -55,16 +55,16 @@
#include "third_party/nixysa/static_glue/npapi/common.h"
#include "third_party/nixysa/static_glue/npapi/npn_api.h"
-#if defined(O3D_INTERNAL_PLUGIN)
-#define HANDLE_CRASHES void(0)
-#else // O3D_INTERNAL_PLUGIN
-
#if defined(OS_LINUX)
#define EXPORT_SYMBOL __attribute__((visibility ("default")))
#else
#define EXPORT_SYMBOL
#endif
+#if defined(O3D_INTERNAL_PLUGIN)
+#define HANDLE_CRASHES void(0)
+#else // O3D_INTERNAL_PLUGIN
+
extern ExceptionManager *g_exception_manager;
// BreakpadEnabler is a simple class to keep track of whether or not
diff --git a/o3d/plugin/idl/codegen.py b/o3d/plugin/idl/codegen.py
index 7494c2124fdc..d82d7ab098d5 100644
--- a/o3d/plugin/idl/codegen.py
+++ b/o3d/plugin/idl/codegen.py
@@ -22,7 +22,7 @@
script_dir = os.path.join(os.path.dirname(__file__))
third_party = os.path.normpath(
- os.path.join(script_dir, '..', '..', '..', 'third_party'))
+ os.path.join(script_dir, '..', '..', 'third_party'))
pythonpath = os.pathsep.join([os.path.join(third_party, 'gflags', 'python'),
os.path.join(third_party, 'ply')])
diff --git a/o3d/plugin/idl/idl.gyp b/o3d/plugin/idl/idl.gyp
index 7a393aebfb57..1e710c185482 100644
--- a/o3d/plugin/idl/idl.gyp
+++ b/o3d/plugin/idl/idl.gyp
@@ -9,7 +9,7 @@
'variables': {
'chromium_code': 0,
'idl_out_path': '<(SHARED_INTERMEDIATE_DIR)/idl_glue',
- 'static_glue_dir': '../../../third_party/nixysa/static_glue/npapi',
+ 'static_glue_dir': '../../../<(nixysadir)/static_glue/npapi',
'idl_files': [
'archive_request.idl',
'bitmap.idl',
@@ -116,6 +116,18 @@
],
},
'targets': [
+ {
+ # This target is only used when we're not built as part of Chrome,
+ # since chrome has its own implementation of the NPAPI from webkit.
+ 'target_name': 'o3dNpnApi',
+ 'type': 'static_library',
+ 'include_dirs': [
+ '../../../<(npapidir)/include',
+ ],
+ 'sources': [
+ '<(static_glue_dir)/npn_api.cc',
+ ],
+ },
{
'target_name': 'o3dPluginIdl',
'type': 'static_library',
@@ -136,14 +148,10 @@
'action_name': 'generate_idl',
'process_outputs_as_sources': 1,
'inputs': [
- '../../../<(nixysadir)/codegen.py',
- 'codegen.py',
'<@(idl_files)',
],
'outputs': [
- # TODO(bradnelson): fix gyp to be able to handle outputs without
- # and extension on linux.
- #'<(idl_out_path)/hash',
+ '<(idl_out_path)/hash',
'<(idl_out_path)/globals_glue.cc',
'<(idl_out_path)/globals_glue.h',
'(.*)(.*)',
- re.DOTALL)
-
- content = GetFileContents(sample_file)
- m = script_re.match(content)
- if not m:
- raise Exception('Script regexp failed on input file %s' % sample_file)
- (html_start, type, charset, id, script, html_end) = m.groups()
- if not type:
- raise Exception('Found a script (%s) that lacked the javascript tag!'
- % sample_file)
- if not charset:
- charset = ''
-
- html_content = (
- '%(html_start)s%(html_end)s' %
- {
- 'html_start' : html_start,
- 'type' : type,
- 'id' : id,
- 'charset' : charset,
- 'js_path' : os.path.basename(output_js),
- 'html_end' : html_end
- })
-
- if not SetFileContentsIfDifferent(output_html, html_content):
- return False
- if not SetFileContentsIfDifferent(output_js, copyright_header + script):
- return False
- return True
-
-def main(argv):
- try:
- files = FLAGS(argv) # Parse flags
- except gflags.FlagsError, e:
- print '%s.\nUsage: %s []\n%s' % \
- (e, sys.argv[0], FLAGS)
- sys.exit(2)
-
- # Strip off argv[0] to leave a list of html files to split.
- files = files[1:]
-
- if FLAGS.find_candidates:
- return FindCandidates()
-
- for file in files:
- basename = os.path.basename(file)
- output_html = os.path.join(FLAGS.products, basename)
- output_js = os.path.splitext(output_html)[0] + '.js'
- print "Splitting sample %s into %s and %s" % (file, output_html, output_js)
- if not SplitSample(file, output_html, output_js):
- sys.exit(2)
-
-if __name__ == "__main__":
- main(sys.argv)
diff --git a/o3d/tests/selenium/main.py b/o3d/tests/selenium/main.py
index cc19ad74a2e9..d8425a01bbcc 100644
--- a/o3d/tests/selenium/main.py
+++ b/o3d/tests/selenium/main.py
@@ -45,7 +45,8 @@
o3d_dir = os.path.dirname(os.path.dirname(script_dir))
src_dir = os.path.dirname(o3d_dir)
third_party_dir = os.path.join(src_dir, 'third_party')
-gflags_dir = os.path.join(third_party_dir, 'gflags', 'python')
+o3d_third_party_dir = os.path.join(o3d_dir, 'third_party')
+gflags_dir = os.path.join(o3d_third_party_dir, 'gflags', 'python')
selenium_dir = os.path.join(third_party_dir, 'selenium_rc', 'files')
selenium_py_dir = os.path.join(selenium_dir, 'selenium-python-client-driver')
sys.path.append(gflags_dir)
diff --git a/o3d/tests/selenium/unpack_firefox.py b/o3d/tests/selenium/unpack_firefox.py
index 4cafefce0be0..a969c44ccc53 100644
--- a/o3d/tests/selenium/unpack_firefox.py
+++ b/o3d/tests/selenium/unpack_firefox.py
@@ -8,7 +8,7 @@
script_dir = os.path.normpath(os.path.dirname(os.path.abspath(__file__)))
o3d_dir = os.path.dirname(os.path.dirname(script_dir))
src_dir = os.path.dirname(o3d_dir)
-third_party_dir = os.path.join(src_dir, 'third_party')
+third_party_dir = os.path.join(o3d_dir, 'third_party')
internal_dir = os.path.join(src_dir, 'o3d-internal')
gflags_dir = os.path.join(third_party_dir, 'gflags', 'python')
sys.path.append(gflags_dir)