3 # Copyright (c) 2014 Intel Corporation. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file.
6 # pylint: disable=F0401
14 from util import CleanDir, RunCommand, GetVersion
18 * Fodler structure for extension.
19 1. 1 extension of 1 repo.
21 |-- all.gyp #optional. If your extension is built from source.
22 | You have to provide this file.
23 |-- build.json #required. Tell make_apk.json where to find extension.
24 |-- <other files and dirs>
26 2. multiple extesnions of 1 repo
31 |-- <other files and dirs>
33 * Format of build.json
36 "binary_path":"../out/Default/gen/iap"
38 The base dir of "binary_path" is the path of extension.
42 def GetExtensionList(extensions_path):
43 if not os.path.isdir(extensions_path):
47 for item in os.listdir(extensions_path):
48 sub_path = os.path.join(extensions_path, item)
49 if not os.path.isdir(sub_path):
51 if os.path.isfile(os.path.join(sub_path, "build.json")):
52 extension_list.append(item)
54 for sub_item in os.listdir(sub_path):
56 os.path.join(sub_path, sub_item, "build.json")):
57 extension_list.append(os.path.join(item, sub_item))
62 def EnableExtension(extension_name, extensions_path, is_enable):
63 extension_list = GetExtensionList(extensions_path)
64 filtered_extensions = fnmatch.filter(extension_list, extension_name)
65 for item in filtered_extensions:
66 build_json_path = os.path.join(extensions_path, item, "build.json")
67 with open(build_json_path, "r") as fd:
69 data["enable"] = is_enable
70 with open(build_json_path, "w") as fd:
72 json.dumps(data, sort_keys=True, indent=4, separators=(',', ': ')))
75 def GetExtensionStatus(extension_name, extensions_path):
76 build_json_path = os.path.join(extensions_path, extension_name, "build.json")
77 with open(build_json_path, "r") as fd:
79 return data.get('enable', True)
82 def BuildExtension(repo_path):
85 os.environ["GYP_GENERATORS"] = "ninja"
86 gyp_cmd = ["gyp", "--depth=.", "all.gyp"]
87 RunCommand(gyp_cmd, True)
88 #Currently, the output path is set to out/Default.
89 ninja_cmd = ["ninja", "-C", os.path.join("out", "Default")]
90 RunCommand(ninja_cmd, True)
94 def HandleAdd(git_url, extensions_path, name=None):
96 name = git_url.split('/')[-1].split('.')[0]
97 if not os.path.isdir(extensions_path):
98 if os.path.isfile(extensions_path):
99 print "WARNING: Please remove file %s" % (extensions_path)
102 os.mkdir(extensions_path)
103 local_extension_path = os.path.join(extensions_path, name)
104 if os.path.exists(local_extension_path):
105 print "ERROR: You already have a repo named \"%s\"." % name
107 os.mkdir(local_extension_path)
109 git_cmd = ["git", "clone", git_url, local_extension_path]
110 RunCommand(git_cmd, True)
111 if os.path.isfile(os.path.join(local_extension_path, "all.gyp")):
112 BuildExtension(local_extension_path)
115 def HandleRemove(remove_name, extensions_path):
116 extension_path = os.path.join(extensions_path, remove_name)
117 if os.path.exists(extension_path):
118 CleanDir(extension_path)
120 print "ERROR: Don't have extension \"%s\"" % (remove_name)
123 def PrintExtensionInfo(extension_name, extensions_path):
124 print "{0} {1}".format(
125 "+" if GetExtensionStatus(extension_name, extensions_path) else "-",
129 def HandleList(extensions_path):
130 extension_list = GetExtensionList(extensions_path)
132 for extension_name in extension_list:
133 PrintExtensionInfo(extension_name, extensions_path)
137 def HandleSearch(key, extensions_path):
138 extension_list = GetExtensionList(extensions_path)
139 filtered_extensions = fnmatch.filter(extension_list, key)
141 for extension_name in filtered_extensions:
142 PrintExtensionInfo(extension_name, extensions_path)
146 def HandleEnable(extension_name, extension_path):
147 EnableExtension(extension_name, extension_path, True)
150 def HandleDisable(extension_name, extension_path):
151 EnableExtension(extension_name, extension_path, False)
156 os.path.join(os.path.dirname(os.path.realpath(__file__)), "VERSION")
157 if os.path.isfile(version_path):
158 print(GetVersion("VERSION"))
160 print ("ERROR: VERSION was not found, so Crosswalk\'s version could not"
165 parser = optparse.OptionParser()
166 parser.add_option("--add", action="store",
167 type="string", dest="git_url",
169 help="Add an extension")
170 parser.add_option("--enable", action="store",
171 type="string", dest="enable",
173 help="Enabled extension list")
174 parser.add_option("--disable", action="store",
175 type="string", dest="disable",
177 help="Disabled extension list")
178 parser.add_option("--name", action="store",
179 type="string", dest="name",
181 help="Extension name in local path. "
182 "Work with --add option.")
183 parser.add_option("--remove", action="store",
184 type="string", dest="remove_name",
186 help="Remove an extension")
187 parser.add_option("-l", "--list", action="store_true",
188 dest="list_extensions", default=False,
189 help="List all extensions")
190 parser.add_option("--search", action="store",
191 type="string", dest="search_key",
193 help="List all extensions")
194 parser.add_option("-v", "--version", action="store_true",
195 dest="version", default=False,
196 help="The version of this python tool.")
198 options, _ = parser.parse_args()
203 extensions_path = os.path.join(os.getcwd(), "extensions")
206 HandleAdd(options.git_url, extensions_path, options.name)
208 HandleEnable(options.enable, extensions_path)
209 elif options.disable:
210 HandleDisable(options.disable, extensions_path)
211 elif options.remove_name:
212 HandleRemove(options.remove_name, extensions_path)
213 elif options.list_extensions:
214 HandleList(extensions_path)
215 elif options.search_key:
216 HandleSearch(options.search_key, extensions_path)
217 elif options.version:
221 if __name__ == '__main__':
222 sys.exit(main(sys.argv))