summaryrefslogtreecommitdiffstats
path: root/tools/post_process_props.py
blob: 32146e3215a87e9d56a552d44ffc0118607eddcc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/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 sys

# Put the modifications that you need to make into the /system/build.prop into this
# function. The prop object has get(name) and put(name,value) methods.
def mangle_build_prop(prop):
  buildprops=prop.buildprops
  check_pass=True
  for key in buildprops:
    # Check build properties' length.
    # Terminator(\0) added into the provided value of properties
    # Total length (including terminator) will be no greater that PROP_VALUE_MAX(92).
    if len(buildprops[key]) > 91:
      # If dev build, show a warning message, otherwise fail the build with error message
      if prop.get("ro.build.version.incremental").startswith("eng"):
        sys.stderr.write("warning: " + key + " exceeds 91 symbols: ")
        sys.stderr.write(buildprops[key])
        sys.stderr.write("(" + str(len(buildprops[key])) + ") \n")
        sys.stderr.write("warning: This will cause the " + key + " ")
        sys.stderr.write("property return as empty at runtime\n")
      else:
        check_pass=False
        sys.stderr.write("error: " + key + " cannot exceed 91 symbols: ")
        sys.stderr.write(buildprops[key])
        sys.stderr.write("(" + str(len(buildprops[key])) + ") \n")
  if not check_pass:
    sys.exit(1)

# Put the modifications that you need to make into the /system/build.prop into this
# function. The prop object has get(name) and put(name,value) methods.
def mangle_default_prop(prop):
  # If ro.debuggable is 1, then enable adb on USB by default
  # (this is for userdebug builds)
  if prop.get("ro.debuggable") == "1":
    val = prop.get("persist.sys.usb.config")
    if val == "":
      val = "adb"
    else:
      val = val + ",adb"
    prop.put("persist.sys.usb.config", val)
  # UsbDeviceManager expects a value here.  If it doesn't get it, it will
  # default to "adb". That might not the right policy there, but it's better
  # to be explicit.
  if not prop.get("persist.sys.usb.config"):
    prop.put("persist.sys.usb.config", "none");

class PropFile:

  buildprops={}

  def __init__(self, lines):
    self.lines = [s[:-1] for s in lines]
    for line in self.lines:
      line=line.strip()
      if not line.strip() or line.startswith("#"):
        continue
      index=line.find("=")
      key=line[0:index]
      value=line[index+1:]
      self.buildprops[key]=value

  def get(self, name):
    key = name + "="
    for line in self.lines:
      if line.startswith(key):
        return line[len(key):]
    return ""

  def put(self, name, value):
    key = name + "="
    for i in range(0,len(self.lines)):
      if self.lines[i].startswith(key):
        self.lines[i] = key + value
        return
    self.lines.append(key + value)

  def write(self, f):
    f.write("\n".join(self.lines))
    f.write("\n")

def main(argv):
  filename = argv[1]
  f = open(filename)
  lines = f.readlines()
  f.close()

  properties = PropFile(lines)
  if filename.endswith("/build.prop"):
    mangle_build_prop(properties)
  elif filename.endswith("/default.prop"):
    mangle_default_prop(properties)
  else:
    sys.stderr.write("bad command line: " + str(argv) + "\n")
    sys.exit(1)

  f = open(filename, 'w+')
  properties.write(f)
  f.close()

if __name__ == "__main__":
  main(sys.argv)