File: generate_gn_v3.py

package info (click to toggle)
chromium 120.0.6099.224-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,112,112 kB
  • sloc: cpp: 32,907,025; ansic: 8,148,123; javascript: 3,679,536; python: 2,031,248; asm: 959,718; java: 804,675; xml: 617,256; sh: 111,417; objc: 100,835; perl: 88,443; cs: 53,032; makefile: 29,579; fortran: 24,137; php: 21,162; tcl: 21,147; sql: 20,809; ruby: 17,735; pascal: 12,864; yacc: 8,045; lisp: 3,388; lex: 1,323; ada: 727; awk: 329; jsp: 267; csh: 117; exp: 43; sed: 37
file content (79 lines) | stat: -rwxr-xr-x 2,246 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/usr/bin/env python3
# Copyright 2019 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from __future__ import print_function

import json
import os.path as path
import sys

_COMPILE_JS = '//third_party/closure_compiler/compile_js.gni'
_COMPILED_RESOURCES_TEMPLATE = '''
# Copyright %d The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# NOTE: Created with %s, please do not edit.

import("%s")

%s
'''.strip()

_HERE_PATH = path.dirname(__file__)
_SRC_PATH = path.normpath(path.join(_HERE_PATH, '..', '..'))
sys.path.append(path.join(_SRC_PATH, 'third_party', 'node'))
import node


def main(created_by, input_files):
  targets = ''

  def _target_name(target_file):
    return target_file[:-len('.js')]

  def _extract_imports(input_file):
    path_to_acorn = path.join('node_modules', 'acorn', 'bin', 'acorn')
    ast = node.RunNode([path_to_acorn, '--module', input_file])
    imports = map(
        lambda n: n['source']['raw'][1:-1],
        filter(lambda n: n['type'] == 'ImportDeclaration',
               json.loads(ast)['body']))
    return set(imports)

  for input_file in sorted(input_files, key=_target_name):
    input_base = path.basename(input_file)
    imports = _extract_imports(input_file)
    dependencies = []
    externs = ''

    for i in sorted(imports):
      import_dir, import_base = path.split(i)

      # Redirect dependencies to minified Polymer to the non-minified version.
      if import_base == 'polymer_bundled.min.js':
        import_base = 'polymer_bundled.js'

      target = ':' + _target_name(import_base)
      dependencies.append(import_dir + target)

    targets += '\njs_library("%s") {' % _target_name(input_base)
    if dependencies:
      targets += '\n  deps = ['
      targets += '\n    "%s",' % '",\n    "'.join(dependencies)
      targets += '\n  ]'
    targets += externs
    targets += '\n}\n'

  targets = targets.strip()

  if targets:
    current_year = 2021
    print(_COMPILED_RESOURCES_TEMPLATE %
          (current_year, created_by, _COMPILE_JS, targets))


if __name__ == '__main__':
  main(path.basename(sys.argv[0]), sys.argv[1:])