blob: 32146e3215a87e9d56a552d44ffc0118607eddcc [file] [log] [blame]
Joe Onorato9197a482011-06-08 16:04:14 -07001#!/usr/bin/env python
2#
3# Copyright (C) 2009 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
17import sys
18
19# Put the modifications that you need to make into the /system/build.prop into this
20# function. The prop object has get(name) and put(name,value) methods.
21def mangle_build_prop(prop):
Yu Liu115c66b2014-02-10 19:20:36 -080022 buildprops=prop.buildprops
23 check_pass=True
24 for key in buildprops:
25 # Check build properties' length.
26 # Terminator(\0) added into the provided value of properties
27 # Total length (including terminator) will be no greater that PROP_VALUE_MAX(92).
28 if len(buildprops[key]) > 91:
29 # If dev build, show a warning message, otherwise fail the build with error message
30 if prop.get("ro.build.version.incremental").startswith("eng"):
31 sys.stderr.write("warning: " + key + " exceeds 91 symbols: ")
32 sys.stderr.write(buildprops[key])
33 sys.stderr.write("(" + str(len(buildprops[key])) + ") \n")
34 sys.stderr.write("warning: This will cause the " + key + " ")
35 sys.stderr.write("property return as empty at runtime\n")
36 else:
37 check_pass=False
38 sys.stderr.write("error: " + key + " cannot exceed 91 symbols: ")
39 sys.stderr.write(buildprops[key])
40 sys.stderr.write("(" + str(len(buildprops[key])) + ") \n")
41 if not check_pass:
42 sys.exit(1)
Joe Onorato9197a482011-06-08 16:04:14 -070043
Joe Onorato9197a482011-06-08 16:04:14 -070044# Put the modifications that you need to make into the /system/build.prop into this
45# function. The prop object has get(name) and put(name,value) methods.
46def mangle_default_prop(prop):
47 # If ro.debuggable is 1, then enable adb on USB by default
48 # (this is for userdebug builds)
49 if prop.get("ro.debuggable") == "1":
50 val = prop.get("persist.sys.usb.config")
51 if val == "":
52 val = "adb"
53 else:
54 val = val + ",adb"
55 prop.put("persist.sys.usb.config", val)
Joe Onorato8ad4bb12012-05-02 14:36:57 -070056 # UsbDeviceManager expects a value here. If it doesn't get it, it will
57 # default to "adb". That might not the right policy there, but it's better
58 # to be explicit.
59 if not prop.get("persist.sys.usb.config"):
60 prop.put("persist.sys.usb.config", "none");
Joe Onorato9197a482011-06-08 16:04:14 -070061
62class PropFile:
Yu Liu115c66b2014-02-10 19:20:36 -080063
64 buildprops={}
65
Joe Onorato9197a482011-06-08 16:04:14 -070066 def __init__(self, lines):
67 self.lines = [s[:-1] for s in lines]
Yu Liu115c66b2014-02-10 19:20:36 -080068 for line in self.lines:
69 line=line.strip()
70 if not line.strip() or line.startswith("#"):
71 continue
72 index=line.find("=")
73 key=line[0:index]
74 value=line[index+1:]
75 self.buildprops[key]=value
Joe Onorato9197a482011-06-08 16:04:14 -070076
77 def get(self, name):
78 key = name + "="
79 for line in self.lines:
80 if line.startswith(key):
81 return line[len(key):]
82 return ""
83
84 def put(self, name, value):
85 key = name + "="
86 for i in range(0,len(self.lines)):
87 if self.lines[i].startswith(key):
88 self.lines[i] = key + value
89 return
90 self.lines.append(key + value)
91
92 def write(self, f):
93 f.write("\n".join(self.lines))
94 f.write("\n")
95
96def main(argv):
97 filename = argv[1]
98 f = open(filename)
99 lines = f.readlines()
100 f.close()
101
102 properties = PropFile(lines)
103 if filename.endswith("/build.prop"):
104 mangle_build_prop(properties)
105 elif filename.endswith("/default.prop"):
106 mangle_default_prop(properties)
107 else:
108 sys.stderr.write("bad command line: " + str(argv) + "\n")
109 sys.exit(1)
110
Mike Lockwood5b65ee42011-06-08 19:06:43 -0700111 f = open(filename, 'w+')
112 properties.write(f)
Joe Onorato9197a482011-06-08 16:04:14 -0700113 f.close()
114
115if __name__ == "__main__":
116 main(sys.argv)