OLD | NEW |
1 # This Source Code Form is subject to the terms of the Mozilla Public | 1 # This Source Code Form is subject to the terms of the Mozilla Public |
2 # License, v. 2.0. If a copy of the MPL was not distributed with this | 2 # License, v. 2.0. If a copy of the MPL was not distributed with this |
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
4 | 4 |
5 import errno | 5 import errno |
6 import io | 6 import io |
7 import json | 7 import json |
8 import os | 8 import os |
9 import re | 9 import re |
10 from StringIO import StringIO | 10 from StringIO import StringIO |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 # Normalize JSON structure | 131 # Normalize JSON structure |
132 licenseComment = re.compile(r'/\*.*?\*/', re.S) | 132 licenseComment = re.compile(r'/\*.*?\*/', re.S) |
133 data = json.loads(re.sub(licenseComment, '', manifest, 1)) | 133 data = json.loads(re.sub(licenseComment, '', manifest, 1)) |
134 if '_dummy' in data: | 134 if '_dummy' in data: |
135 del data['_dummy'] | 135 del data['_dummy'] |
136 manifest = json.dumps(data, sort_keys=True, indent=2) | 136 manifest = json.dumps(data, sort_keys=True, indent=2) |
137 | 137 |
138 return manifest.encode('utf-8') | 138 return manifest.encode('utf-8') |
139 | 139 |
140 | 140 |
141 def createInfoModule(params): | |
142 if params['type'] == 'gecko-webext': | |
143 template = getTemplate('geckoInfo.js.tmpl') | |
144 else: | |
145 template = getTemplate('chromeInfo.js.tmpl') | |
146 return template.render(params).encode('utf-8') | |
147 | |
148 | |
149 def convertJS(params, files): | 141 def convertJS(params, files): |
150 output_files = collections.OrderedDict() | 142 output_files = collections.OrderedDict() |
151 args = {} | 143 args = {} |
152 | 144 |
| 145 info_module = None |
| 146 info_template = { |
| 147 'chrome': 'chromeInfo.js.tmpl', |
| 148 'gecko-webext': 'geckoInfo.js.tmpl' |
| 149 }.get(params['type']) |
| 150 if info_template: |
| 151 info_module = getTemplate(info_template).render( |
| 152 basename=params['metadata'].get('general', 'basename'), |
| 153 version=params['metadata'].get('general', 'version') |
| 154 ).decode('utf-8') |
| 155 |
153 for item in params['metadata'].items('convert_js'): | 156 for item in params['metadata'].items('convert_js'): |
154 name, value = item | 157 name, value = item |
155 filename, arg = re.search(r'^(.*?)(?:\[(.*)\])?$', name).groups() | 158 filename, arg = re.search(r'^(.*?)(?:\[(.*)\])?$', name).groups() |
156 if arg is None: | 159 if arg is None: |
157 output_files[filename] = (value.split(), item.source) | 160 output_files[filename] = (value.split(), item.source) |
158 else: | 161 else: |
159 args.setdefault(filename, {})[arg] = value | 162 args.setdefault(filename, {})[arg] = value |
160 | 163 |
161 template = getTemplate('modules.js.tmpl') | 164 template = getTemplate('modules.js.tmpl') |
162 | 165 |
163 for filename, (input_files, origin) in output_files.iteritems(): | 166 for filename, (input_files, origin) in output_files.iteritems(): |
164 if '/' in filename and not files.isIncluded(filename): | 167 if '/' in filename and not files.isIncluded(filename): |
165 continue | 168 continue |
166 | 169 |
167 current_args = args.get(filename, {}) | 170 current_args = args.get(filename, {}) |
168 current_args['autoload'] = [module for module in | 171 current_args['autoload'] = [module for module in |
169 current_args.get('autoload', '').split(',') | 172 current_args.get('autoload', '').split(',') |
170 if module != ''] | 173 if module != ''] |
171 | 174 |
172 base_dir = os.path.dirname(origin) | 175 base_dir = os.path.dirname(origin) |
173 modules = [] | 176 modules = [] |
174 | 177 |
| 178 if 'module' in current_args and info_module: |
| 179 modules.append(('info', info_module)) |
| 180 |
175 for input_filename in input_files: | 181 for input_filename in input_files: |
176 module_name = os.path.splitext(os.path.basename(input_filename))[0] | 182 module_name = os.path.splitext(os.path.basename(input_filename))[0] |
177 prefix = os.path.basename(os.path.dirname(input_filename)) | 183 prefix = os.path.basename(os.path.dirname(input_filename)) |
178 if prefix != 'lib': | 184 if prefix != 'lib': |
179 module_name = '{}_{}'.format(prefix, module_name) | 185 module_name = '{}_{}'.format(prefix, module_name) |
180 with open(os.path.join(base_dir, input_filename), 'r') as file: | 186 with open(os.path.join(base_dir, input_filename), 'r') as file: |
181 modules.append((module_name, file.read().decode('utf-8'))) | 187 modules.append((module_name, file.read().decode('utf-8'))) |
182 files.pop(input_filename, None) | 188 files.pop(input_filename, None) |
183 | 189 |
184 files[filename] = template.render( | 190 files[filename] = template.render( |
185 args=current_args, | 191 args=current_args, |
186 modules=modules | 192 modules=modules, |
| 193 basename=params['metadata'].get('general', 'basename'), |
| 194 version=params['metadata'].get('general', 'version') |
187 ).encode('utf-8') | 195 ).encode('utf-8') |
188 | 196 |
189 | 197 |
190 def toJson(data): | 198 def toJson(data): |
191 return json.dumps( | 199 return json.dumps( |
192 data, ensure_ascii=False, sort_keys=True, | 200 data, ensure_ascii=False, sort_keys=True, |
193 indent=2, separators=(',', ': ') | 201 indent=2, separators=(',', ': ') |
194 ).encode('utf-8') + '\n' | 202 ).encode('utf-8') + '\n' |
195 | 203 |
196 | 204 |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 files['manifest.json'] = createManifest(params, files) | 397 files['manifest.json'] = createManifest(params, files) |
390 if type == 'chrome': | 398 if type == 'chrome': |
391 fixTranslationsForCWS(files) | 399 fixTranslationsForCWS(files) |
392 | 400 |
393 if devenv: | 401 if devenv: |
394 import buildtools | 402 import buildtools |
395 import random | 403 import random |
396 files.read(os.path.join(buildtools.__path__[0], 'chromeDevenvPoller__.js
'), relpath='devenvPoller__.js') | 404 files.read(os.path.join(buildtools.__path__[0], 'chromeDevenvPoller__.js
'), relpath='devenvPoller__.js') |
397 files['devenvVersion__'] = str(random.random()) | 405 files['devenvVersion__'] = str(random.random()) |
398 | 406 |
399 if (metadata.has_option('general', 'backgroundScripts') and | |
400 'lib/info.js' in metadata.get('general', 'backgroundScripts').split() an
d | |
401 'lib/info.js' not in files): | |
402 files['lib/info.js'] = createInfoModule(params) | |
403 | |
404 if metadata.has_option('general', 'testScripts'): | 407 if metadata.has_option('general', 'testScripts'): |
405 files['qunit/index.html'] = createScriptPage(params, 'testIndex.html.tmp
l', | 408 files['qunit/index.html'] = createScriptPage(params, 'testIndex.html.tmp
l', |
406 ('general', 'testScripts')) | 409 ('general', 'testScripts')) |
407 | 410 |
408 zipdata = files.zipToString() | 411 zipdata = files.zipToString() |
409 signature = None | 412 signature = None |
410 pubkey = None | 413 pubkey = None |
411 if keyFile != None: | 414 if keyFile != None: |
412 signature = signBinary(zipdata, keyFile) | 415 signature = signBinary(zipdata, keyFile) |
413 pubkey = getPublicKey(keyFile) | 416 pubkey = getPublicKey(keyFile) |
414 writePackage(outFile, pubkey, signature, zipdata) | 417 writePackage(outFile, pubkey, signature, zipdata) |
OLD | NEW |