Home | History | Annotate | Download | only in tools
      1 #!/usr/bin/env python
      2 #
      3 # Copyright (C) 2012 The Android Open Source Project
      4 #
      5 # Licensed under the Apache License, Version 2.0 (the "License");
      6 # you may not use this file except in compliance with the License.
      7 # You may obtain a copy of the License at
      8 #
      9 #      http://www.apache.org/licenses/LICENSE-2.0
     10 #
     11 # Unless required by applicable law or agreed to in writing, software
     12 # distributed under the License is distributed on an "AS IS" BASIS,
     13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 # See the License for the specific language governing permissions and
     15 # limitations under the License.
     16 
     17 import os
     18 import re
     19 import sys
     20 
     21 def break_lines(key, val):
     22   # these don't get split
     23   if key in ("PRODUCT_MODEL"):
     24     return (key,val)
     25   return (key, "\n".join(val.split()))
     26 
     27 def split_line(line):
     28   words = line.split("=", 1)
     29   if len(words) == 1:
     30     return (words[0], "")
     31   else:
     32     return (words[0], words[1])
     33 
     34 def sort_lines(text):
     35   lines = text.split()
     36   lines.sort()
     37   return "\n".join(lines)
     38 
     39 def parse_variables(lines):
     40   return [split_line(line) for line in lines if line.strip()]
     41 
     42 def render_variables(variables):
     43   variables = dict(variables)
     44   del variables["FILE"]
     45   variables = list(variables.iteritems())
     46   variables.sort(lambda a, b: cmp(a[0], b[0]))
     47   return ("<table id='variables'>"
     48       + "\n".join([ "<tr><th>%(key)s</th><td>%(val)s</td></tr>" % { "key": key, "val": val }
     49         for key,val in variables])
     50       +"</table>")
     51 
     52 def linkify_inherit(variables, text, func_name):
     53   groups = re.split("(\\$\\(call " + func_name + ",.*\\))", text)
     54   result = ""
     55   for i in range(0,len(groups)/2):
     56     i = i * 2
     57     result = result + groups[i]
     58     s = groups[i+1]
     59     href = s.split(",", 1)[1].strip()[:-1]
     60     href = href.replace("$(SRC_TARGET_DIR)", "build/target")
     61     href = ("../" * variables["FILE"].count("/")) + href + ".html"
     62     result = result + "<a href=\"%s\">%s</a>" % (href,s)
     63   result = result + groups[-1]
     64   return result
     65 
     66 def render_original(variables, text):
     67   text = linkify_inherit(variables, text, "inherit-product")
     68   text = linkify_inherit(variables, text, "inherit-product-if-exists")
     69   return text
     70 
     71 def read_file(fn):
     72   f = file(fn)
     73   text = f.read()
     74   f.close()
     75   return text
     76 
     77 def main(argv):
     78   # read the variables
     79   lines = sys.stdin.readlines()
     80   variables = parse_variables(lines)
     81 
     82   # format the variables
     83   variables = [break_lines(key,val) for key,val in variables]
     84 
     85   # now it's a dict
     86   variables = dict(variables)
     87 
     88   sorted_vars = (
     89       "PRODUCT_COPY_FILES",
     90       "PRODUCT_PACKAGES",
     91       "PRODUCT_LOCALES",
     92       "PRODUCT_FACTORY_RAMDISK_MODULES",
     93       "PRODUCT_PROPERTY_OVERRIDES",
     94     )
     95 
     96   for key in sorted_vars:
     97     variables[key] = sort_lines(variables[key])
     98 
     99   # the original file
    100   original = read_file(variables["FILE"])
    101 
    102   # formatting
    103   values = dict(variables)
    104   values.update({
    105     "variables": render_variables(variables),
    106     "original": render_original(variables, original),
    107   })
    108   print """<html>
    109 
    110 
    111 <head>
    112   <title>%(FILE)s</title>
    113   <style type="text/css">
    114     body {
    115       font-family: Helvetica, Arial, sans-serif;
    116       padding-bottom: 20px;
    117     }
    118     #variables {
    119       border-collapse: collapse;
    120     }
    121     #variables th, #variables td {
    122       vertical-align: top;
    123       text-align: left;
    124       border-top: 1px solid #c5cdde;
    125       border-bottom: 1px solid #c5cdde;
    126       padding: 2px 10px 2px 10px;
    127     }
    128     #variables th {
    129       font-size: 10pt;
    130       background-color: #e2ecff
    131     }
    132     #variables td {
    133       background-color: #ebf2ff;
    134       white-space: pre;
    135       font-size: 10pt;
    136     }
    137     #original {
    138       background-color: #ebf2ff;
    139       border-top: 1px solid #c5cdde;
    140       border-bottom: 1px solid #c5cdde;
    141       padding: 2px 10px 2px 10px;
    142       white-space: pre;
    143       font-size: 10pt;
    144     }
    145   </style>
    146 </head>
    147 <body>
    148 <h1>%(FILE)s</h1>
    149 <a href="#Original">Original</a>
    150 <a href="#Variables">Variables</a>
    151 <h2><a name="Original"></a>Original</h2>
    152 <div id="original">%(original)s</div>
    153 <h2><a name="Variables"></a>Variables</h2>
    154 %(variables)s
    155 </body>
    156 </html>
    157 """ % values
    158 
    159 if __name__ == "__main__":
    160   main(sys.argv)
    161