Squashed 'third_party/flatbuffers/' content from commit acc9990ab

Change-Id: I48550d40d78fea996ebe74e9723a5d1f910de491
git-subtree-dir: third_party/flatbuffers
git-subtree-split: acc9990abd2206491480291b0f85f925110102ea
diff --git a/android/jni/msbuild.py b/android/jni/msbuild.py
new file mode 100644
index 0000000..5f92d70
--- /dev/null
+++ b/android/jni/msbuild.py
@@ -0,0 +1,77 @@
+#!/usr/bin/python
+# Copyright 2014 Google Inc. 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.
+
+"""Simple script that locates the newest MSBuild in one of several locations.
+
+This script will find the highest version number of MSBuild and run it,
+passing its arguments through to MSBuild.
+"""
+
+import glob
+import os
+import re
+import string
+import subprocess
+import sys
+
+SYSTEMROOT = os.getenv("SYSTEMROOT", "c:\\windows")
+PROGRAM_FILES = os.getenv("ProgramFiles", "c:\\Program Files")
+PROGRAM_FILES_X86 = os.getenv("ProgramFiles(x86)", "c:\\Program Files (x86)")
+
+SEARCH_FOLDERS = [ PROGRAM_FILES + "\\MSBuild\\*\\Bin\\MSBuild.exe",
+                   PROGRAM_FILES_X86 + "\\MSBuild\\*\\Bin\\MSBuild.exe",
+                   SYSTEMROOT + "\\Microsoft.NET\Framework\\*\\MSBuild.exe" ]
+
+def compare_version(a, b):
+  """Compare two version number strings of the form W.X.Y.Z.
+
+  The numbers are compared most-significant to least-significant.
+  For example, 12.345.67.89 > 2.987.88.99.
+
+  Args:
+    a: First version number string to compare
+    b: Second version number string to compare
+
+  Returns:
+    0 if the numbers are identical, a positive number if 'a' is larger, and
+    a negative number if 'b' is larger.
+  """
+  aa = string.split(a, ".")
+  bb = string.split(b, ".")
+  for i in range(0, 4):
+    if aa[i] != bb[i]:
+      return cmp(int(aa[i]), int(bb[i]))
+  return 0
+
+def main():
+  msbuilds = []
+
+  for folder in SEARCH_FOLDERS:
+    for file in glob.glob(folder):
+      p = subprocess.Popen([file, "/version"], stdout=subprocess.PIPE)
+      out, err = p.communicate()
+      match = re.search("^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+$", out, re.M)
+      if match:
+        msbuilds.append({ 'ver':match.group(), 'exe':file })
+  msbuilds.sort(lambda x, y: compare_version(x['ver'], y['ver']), reverse=True)
+  if len(msbuilds) == 0:
+    print "Unable to find MSBuild.\n"
+    return -1;
+  cmd = [msbuilds[0]['exe']]
+  cmd.extend(sys.argv[1:])
+  return subprocess.call(cmd)
+
+if __name__ == '__main__':
+  sys.exit(main())