1323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#!/usr/bin/env python 2323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)# 3323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved. 4323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 5323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)# found in the LICENSE file. 6323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 79e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)"""Inlines all module.json files into "var allDescriptors" in Runtime.js.""" 8323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 9323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)from os import path 10323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)import errno 119e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)import os 129e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)import re 13323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)import shutil 14323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)import sys 15e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)try: 16e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) import simplejson as json 17e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)except ImportError: 18e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) import json 19323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 20323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 21323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)def read_file(filename): 22323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) with open(filename, 'rt') as file: 23323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return file.read() 24323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 25323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 26323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)def build_modules(module_jsons): 27323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) result = [] 28323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) for json_filename in module_jsons: 29323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if not path.exists(json_filename): 30323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) continue 31323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) module_name = path.basename(path.dirname(json_filename)) 32e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 33e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) # pylint: disable=E1103 34e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) module_json = json.loads(read_file(json_filename)) 35e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) module_json['name'] = module_name 36e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 37e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) # Clear scripts, as they are not used at runtime 38e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) # (only the fact of their presence is important). 39e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if module_json.get('scripts'): 40e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) module_json['scripts'] = [] 41e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) result.append(module_json) 42e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return json.dumps(result) 43323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 44323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 45323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)def main(argv): 46323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) input_filename = argv[1] 47323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) output_filename = argv[2] 48323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) module_jsons = argv[3:] 49323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 509e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) output_contents = re.sub('var allDescriptors = \[\];', 'var allDescriptors = %s;' % build_modules(module_jsons).replace("\\", "\\\\"), read_file(input_filename), 1) 519e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (path.exists(output_filename)): 529e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) os.remove(output_filename) 53323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) with open(output_filename, 'w') as output_file: 549e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) output_file.write(output_contents) 55323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 56323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)if __name__ == '__main__': 57323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) sys.exit(main(sys.argv)) 58