diff options
author | Joe Onorato <joeo@google.com> | 2012-07-23 13:51:44 -0700 |
---|---|---|
committer | Joe Onorato <joeo@google.com> | 2012-08-16 22:45:56 -0700 |
commit | 88155422f2eb81c4d4151f536a6a86e00133adfd (patch) | |
tree | 015b5d64b00f6106a545c612e97bdd868c774c0f /tools/product_debug.py | |
parent | 8d0847e9246ab7728f9ef6e2e493f0025ac06f5b (diff) | |
download | build-88155422f2eb81c4d4151f536a6a86e00133adfd.zip build-88155422f2eb81c4d4151f536a6a86e00133adfd.tar.gz build-88155422f2eb81c4d4151f536a6a86e00133adfd.tar.bz2 |
More product debugging.
Change-Id: I17b5d441e44ea39564263b32f963e2d3ac684232
Diffstat (limited to 'tools/product_debug.py')
-rwxr-xr-x | tools/product_debug.py | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/tools/product_debug.py b/tools/product_debug.py new file mode 100755 index 0000000..661c5b7 --- /dev/null +++ b/tools/product_debug.py @@ -0,0 +1,160 @@ +#!/usr/bin/env python +# +# Copyright (C) 2012 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 +import re +import sys + +def break_lines(key, val): + # these don't get split + if key in ("PRODUCT_MODEL"): + return (key,val) + return (key, "\n".join(val.split())) + +def split_line(line): + words = line.split("=", 1) + if len(words) == 1: + return (words[0], "") + else: + return (words[0], words[1]) + +def sort_lines(text): + lines = text.split() + lines.sort() + return "\n".join(lines) + +def parse_variables(lines): + return [split_line(line) for line in lines if line.strip()] + +def render_variables(variables): + variables = dict(variables) + del variables["FILE"] + variables = list(variables.iteritems()) + variables.sort(lambda a, b: cmp(a[0], b[0])) + return ("<table id='variables'>" + + "\n".join([ "<tr><th>%(key)s</th><td>%(val)s</td></tr>" % { "key": key, "val": val } + for key,val in variables]) + +"</table>") + +def linkify_inherit(variables, text, func_name): + groups = re.split("(\\$\\(call " + func_name + ",.*\\))", text) + result = "" + for i in range(0,len(groups)/2): + i = i * 2 + result = result + groups[i] + s = groups[i+1] + href = s.split(",", 1)[1].strip()[:-1] + href = href.replace("$(SRC_TARGET_DIR)", "build/target") + href = ("../" * variables["FILE"].count("/")) + href + ".html" + result = result + "<a href=\"%s\">%s</a>" % (href,s) + result = result + groups[-1] + return result + +def render_original(variables, text): + text = linkify_inherit(variables, text, "inherit-product") + text = linkify_inherit(variables, text, "inherit-product-if-exists") + return text + +def read_file(fn): + f = file(fn) + text = f.read() + f.close() + return text + +def main(argv): + # read the variables + lines = sys.stdin.readlines() + variables = parse_variables(lines) + + # format the variables + variables = [break_lines(key,val) for key,val in variables] + + # now it's a dict + variables = dict(variables) + + sorted_vars = ( + "PRODUCT_COPY_FILES", + "PRODUCT_PACKAGES", + "PRODUCT_LOCALES", + "PRODUCT_FACTORY_RAMDISK_MODULES", + "PRODUCT_PROPERTY_OVERRIDES", + ) + + for key in sorted_vars: + variables[key] = sort_lines(variables[key]) + + # the original file + original = read_file(variables["FILE"]) + + # formatting + values = dict(variables) + values.update({ + "variables": render_variables(variables), + "original": render_original(variables, original), + }) + print """<html> + + +<head> + <title>%(FILE)s</title> + <style type="text/css"> + body { + font-family: Helvetica, Arial, sans-serif; + padding-bottom: 20px; + } + #variables { + border-collapse: collapse; + } + #variables th, #variables td { + vertical-align: top; + text-align: left; + border-top: 1px solid #c5cdde; + border-bottom: 1px solid #c5cdde; + padding: 2px 10px 2px 10px; + } + #variables th { + font-size: 10pt; + background-color: #e2ecff + } + #variables td { + background-color: #ebf2ff; + white-space: pre; + font-size: 10pt; + } + #original { + background-color: #ebf2ff; + border-top: 1px solid #c5cdde; + border-bottom: 1px solid #c5cdde; + padding: 2px 10px 2px 10px; + white-space: pre; + font-size: 10pt; + } + </style> +</head> +<body> +<h1>%(FILE)s</h1> +<a href="#Original">Original</a> +<a href="#Variables">Variables</a> +<h2><a name="Original"></a>Original</h2> +<div id="original">%(original)s</div> +<h2><a name="Variables"></a>Variables</h2> +%(variables)s +</body> +</html> +""" % values + +if __name__ == "__main__": + main(sys.argv) |