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