Index: third_party/google_input_tools/third_party/closure_library/closure/bin/build/jscompiler.py |
diff --git a/third_party/google_input_tools/third_party/closure_library/closure/bin/build/jscompiler.py b/third_party/google_input_tools/third_party/closure_library/closure/bin/build/jscompiler.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..783b5d79afc37a7ebba192e9fc98f3588d6960a7 |
--- /dev/null |
+++ b/third_party/google_input_tools/third_party/closure_library/closure/bin/build/jscompiler.py |
@@ -0,0 +1,136 @@ |
+#!/usr/bin/env python |
+# Copyright 2010 The Closure Library Authors. All Rights Reserved. |
+# |
+# 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. |
+ |
+"""Utility to use the Closure Compiler CLI from Python.""" |
+ |
+ |
+import logging |
+import os |
+import re |
+import subprocess |
+ |
+ |
+# Pulls just the major and minor version numbers from the first line of |
+# 'java -version'. Versions are in the format of [0-9]+\.[0-9]+\..* See: |
+# http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html |
+_VERSION_REGEX = re.compile(r'"([0-9]+)\.([0-9]+)') |
+ |
+ |
+class JsCompilerError(Exception): |
+ """Raised if there's an error in calling the compiler.""" |
+ pass |
+ |
+ |
+def _GetJavaVersionString(): |
+ """Get the version string from the Java VM.""" |
+ return subprocess.check_output(['java', '-version'], stderr=subprocess.STDOUT) |
+ |
+ |
+def _ParseJavaVersion(version_string): |
+ """Returns a 2-tuple for the current version of Java installed. |
+ |
+ Args: |
+ version_string: String of the Java version (e.g. '1.7.2-ea'). |
+ |
+ Returns: |
+ The major and minor versions, as a 2-tuple (e.g. (1, 7)). |
+ """ |
+ match = _VERSION_REGEX.search(version_string) |
+ if match: |
+ version = tuple(int(x, 10) for x in match.groups()) |
+ assert len(version) == 2 |
+ return version |
+ |
+ |
+def _JavaSupports32BitMode(): |
+ """Determines whether the JVM supports 32-bit mode on the platform.""" |
+ # Suppresses process output to stderr and stdout from showing up in the |
+ # console as we're only trying to determine 32-bit JVM support. |
+ supported = False |
+ try: |
+ devnull = open(os.devnull, 'wb') |
+ return subprocess.call( |
+ ['java', '-d32', '-version'], stdout=devnull, stderr=devnull) == 0 |
+ except IOError: |
+ pass |
+ else: |
+ devnull.close() |
+ return supported |
+ |
+ |
+def _GetJsCompilerArgs(compiler_jar_path, java_version, source_paths, |
+ jvm_flags, compiler_flags): |
+ """Assembles arguments for call to JsCompiler.""" |
+ |
+ if java_version < (1, 7): |
+ raise JsCompilerError('Closure Compiler requires Java 1.7 or higher. ' |
+ 'Please visit http://www.java.com/getjava') |
+ |
+ args = ['java'] |
+ |
+ # Add JVM flags we believe will produce the best performance. See |
+ # https://groups.google.com/forum/#!topic/closure-library-discuss/7w_O9-vzlj4 |
+ |
+ # Attempt 32-bit mode if available (Java 7 on Mac OS X does not support 32-bit |
+ # mode, for example). |
+ if _JavaSupports32BitMode(): |
+ args += ['-d32'] |
+ |
+ # Prefer the "client" VM. |
+ args += ['-client'] |
+ |
+ # Add JVM flags, if any |
+ if jvm_flags: |
+ args += jvm_flags |
+ |
+ # Add the application JAR. |
+ args += ['-jar', compiler_jar_path] |
+ |
+ for path in source_paths: |
+ args += ['--js', path] |
+ |
+ # Add compiler flags, if any. |
+ if compiler_flags: |
+ args += compiler_flags |
+ |
+ return args |
+ |
+ |
+def Compile(compiler_jar_path, source_paths, |
+ jvm_flags=None, |
+ compiler_flags=None): |
+ """Prepares command-line call to Closure Compiler. |
+ |
+ Args: |
+ compiler_jar_path: Path to the Closure compiler .jar file. |
+ source_paths: Source paths to build, in order. |
+ jvm_flags: A list of additional flags to pass on to JVM. |
+ compiler_flags: A list of additional flags to pass on to Closure Compiler. |
+ |
+ Returns: |
+ The compiled source, as a string, or None if compilation failed. |
+ """ |
+ |
+ java_version = _ParseJavaVersion(_GetJavaVersionString()) |
+ |
+ args = _GetJsCompilerArgs( |
+ compiler_jar_path, java_version, source_paths, jvm_flags, compiler_flags) |
+ |
+ logging.info('Compiling with the following command: %s', ' '.join(args)) |
+ |
+ try: |
+ return subprocess.check_output(args) |
+ except subprocess.CalledProcessError: |
+ raise JsCompilerError('JavaScript compilation failed.') |