auto import from //branches/cupcake/...@132569
diff --git a/tools/check_builds.sh b/tools/check_builds.sh
new file mode 100755
index 0000000..14dfec6
--- /dev/null
+++ b/tools/check_builds.sh
@@ -0,0 +1,67 @@
+# Copyright (C) 2009 The Android Open Source Project
+#
+# 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.
+
+#
+# Usage:
+#
+# Source this file into your environment.  Then:
+#
+#    $ golden_builds sdk-sdk generic-eng generic-userdebug dream-eng
+# 
+# will build a set of combos.  This might take a while.  Then you can
+# go make changes, and run:
+#
+#    $ check_builds sdk-sdk generic-eng generic-userdebug dream-eng
+#
+# Go get dinner, and when you get back, there will be a file
+# test-builds/sizes.html that has a pretty chart of which files are
+# in which tree, and how big they are.  In that chart, cells for files
+# that are missing are red, and rows where the file sizes are not all
+# the same will be blue.
+#
+
+TEST_BUILD_DIR=test-builds
+
+function do_builds
+{
+    PREFIX=$1
+    shift
+    while [ -n "$1" ]
+    do
+        rm -rf $TEST_BUILD_DIR/$PREFIX-$1
+        make -j6 PRODUCT-$1 dist DIST_DIR=$TEST_BUILD_DIR/$PREFIX-$1
+        if [ $? -ne 0 ] ; then
+            echo FAILED
+            return
+        fi
+        shift
+    done
+}
+
+function golden_builds
+{
+    rm -rf $TEST_BUILD_DIR/golden-* $TEST_BUILD_DIR/dist-*
+    do_builds golden "$@"
+}
+
+function check_builds
+{
+    rm -rf $TEST_BUILD_DIR/dist-*
+    do_builds dist "$@"
+    build/tools/compare_fileslist.py \
+            $TEST_BUILD_DIR/golden-*/installed-files.txt \
+            $TEST_BUILD_DIR/dist-*/installed-files.txt \
+        > $TEST_BUILD_DIR/sizes.html
+}
+
diff --git a/tools/compare_fileslist.py b/tools/compare_fileslist.py
new file mode 100755
index 0000000..1f507d8
--- /dev/null
+++ b/tools/compare_fileslist.py
@@ -0,0 +1,106 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2009 The Android Open Source Project
+#
+# 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.
+#
+
+import cgi, os, string, sys
+
+def IsDifferent(row):
+  val = None
+  for v in row:
+    if v:
+      if not val:
+        val = v
+      else:
+        if val != v:
+          return True
+  return False
+
+def main(argv):
+  inputs = argv[1:]
+  data = {}
+  index = 0
+  for input in inputs:
+    f = file(input, "r")
+    lines = f.readlines()
+    f.close()
+    lines = map(string.split, lines)
+    lines = map(lambda (x,y): (y,int(x)), lines)
+    for fn,sz in lines:
+      if not data.has_key(fn):
+        data[fn] = {}
+      data[fn][index] = sz
+    index = index + 1
+  rows = []
+  for fn,sizes in data.iteritems():
+    row = [fn]
+    for i in range(0,index):
+      if sizes.has_key(i):
+        row.append(sizes[i])
+      else:
+        row.append(None)
+    rows.append(row)
+  rows = sorted(rows, key=lambda x: x[0])
+  print """<html>
+    <head>
+      <style type="text/css">
+        .fn, .sz, .z, .d {
+          padding-left: 10px;
+          padding-right: 10px;
+        }
+        .sz, .z, .d {
+          text-align: right;
+        }
+        .fn {
+          background-color: #ffffdd;
+        }
+        .sz {
+          background-color: #ffffcc;
+        }
+        .z {
+          background-color: #ffcccc;
+        }
+        .d {
+          background-color: #99ccff;
+        }
+      </style>
+    </head>
+    <body>
+  """
+  print "<table>"
+  print "<tr>"
+  for input in inputs:
+    combo = input.split(os.path.sep)[1]
+    print "  <td class='fn'>%s</td>" % cgi.escape(combo)
+  print "</tr>"
+
+  for row in rows:
+    print "<tr>"
+    for sz in row[1:]:
+      if not sz:
+        print "  <td class='z'>&nbsp;</td>"
+      elif IsDifferent(row[1:]):
+        print "  <td class='d'>%d</td>" % sz
+      else:
+        print "  <td class='sz'>%d</td>" % sz
+    print "  <td class='fn'>%s</td>" % cgi.escape(row[0])
+    print "</tr>"
+  print "</table>"
+  print "</body></html>"
+
+if __name__ == '__main__':
+  main(sys.argv)
+
+
diff --git a/tools/fileslist.py b/tools/fileslist.py
new file mode 100755
index 0000000..ae105e6
--- /dev/null
+++ b/tools/fileslist.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2009 The Android Open Source Project
+#
+# 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.
+#
+
+import os, sys
+
+def main(argv):
+  output = []
+  roots = argv[1:]
+  for root in roots:
+    base = len(root[:root.rfind(os.path.sep)])
+    for dir, dirs, files in os.walk(root):
+      relative = dir[base:]
+      for f in files:
+        try:
+          row = (
+              os.path.getsize(os.path.sep.join((dir, f))),
+              os.path.sep.join((relative, f)),
+            )
+          output.append(row)
+        except os.error:
+          pass
+  for row in output:
+    print "%12d  %s" % row
+
+if __name__ == '__main__':
+  main(sys.argv)
+