OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Generates the contents of an Cronet LICENSE file for the third-party code. | 6 """Generates the contents of an Cronet LICENSE file for the third-party code. |
7 | 7 |
8 It makes use of src/tools/licenses.py and the README.chromium files on which | 8 It makes use of src/tools/licenses.py and the README.chromium files on which |
9 it depends. Based on android_webview/tools/webview_licenses.py. | 9 it depends. Based on android_webview/tools/webview_licenses.py. |
10 """ | 10 """ |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 content.append('-' * 20) | 57 content.append('-' * 20) |
58 content.append(directory.split("/")[-1]) | 58 content.append(directory.split("/")[-1]) |
59 content.append('-' * 20) | 59 content.append('-' * 20) |
60 license_file = metadata['License File'] | 60 license_file = metadata['License File'] |
61 if license_file and license_file != licenses.NOT_SHIPPED: | 61 if license_file and license_file != licenses.NOT_SHIPPED: |
62 content.append(_ReadFile(license_file)) | 62 content.append(_ReadFile(license_file)) |
63 | 63 |
64 return '\n'.join(content) | 64 return '\n'.join(content) |
65 | 65 |
66 | 66 |
67 def FindThirdPartyDeps(gn_out_dir): | 67 def FindThirdPartyDeps(gn_path, gn_out_dir): |
68 # Generate gn project in temp directory and use it to find dependencies. | 68 # Generate gn project in temp directory and use it to find dependencies. |
69 # Current gn directory cannot ba used because gn doesn't allow recursive | 69 # Current gn directory cannot ba used because gn doesn't allow recursive |
70 # invocations due to potential side effects. | 70 # invocations due to potential side effects. |
71 try: | 71 try: |
72 tmp_dir = tempfile.mkdtemp(dir = gn_out_dir) | 72 tmp_dir = tempfile.mkdtemp(dir = gn_out_dir) |
73 shutil.copy(gn_out_dir + "/args.gn", tmp_dir) | 73 shutil.copy(gn_out_dir + "/args.gn", tmp_dir) |
74 subprocess.check_output(["gn", "gen", tmp_dir]) | 74 subprocess.check_output([gn_path, "gen", tmp_dir]) |
75 gn_deps = subprocess.check_output(["gn", "desc", tmp_dir, \ | 75 gn_deps = subprocess.check_output([gn_path, "desc", tmp_dir, |
76 "//net", "deps", "--as=buildfile", "--all"]) | 76 "//net", "deps", "--as=buildfile", "--all"]) |
77 finally: | 77 finally: |
78 if os.path.exists(tmp_dir): | 78 if os.path.exists(tmp_dir): |
79 shutil.rmtree(tmp_dir) | 79 shutil.rmtree(tmp_dir) |
80 | 80 |
81 third_party_deps = [] | 81 third_party_deps = [] |
82 for build_dep in gn_deps.split(): | 82 for build_dep in gn_deps.split(): |
83 if ("third_party" in build_dep and build_dep.endswith("/BUILD.gn")): | 83 if ("third_party" in build_dep and build_dep.endswith("/BUILD.gn")): |
84 third_party_deps.append(build_dep.replace("/BUILD.gn", "")) | 84 third_party_deps.append(build_dep.replace("/BUILD.gn", "")) |
85 third_party_deps.sort() | 85 third_party_deps.sort() |
86 return third_party_deps | 86 return third_party_deps |
87 | 87 |
88 | 88 |
89 def main(): | 89 def main(): |
90 class FormatterWithNewLines(optparse.IndentedHelpFormatter): | 90 class FormatterWithNewLines(optparse.IndentedHelpFormatter): |
91 def format_description(self, description): | 91 def format_description(self, description): |
92 paras = description.split('\n') | 92 paras = description.split('\n') |
93 formatted_paras = [textwrap.fill(para, self.width) for para in paras] | 93 formatted_paras = [textwrap.fill(para, self.width) for para in paras] |
94 return '\n'.join(formatted_paras) + '\n' | 94 return '\n'.join(formatted_paras) + '\n' |
95 | 95 |
96 parser = optparse.OptionParser(formatter=FormatterWithNewLines(), | 96 parser = optparse.OptionParser(formatter=FormatterWithNewLines(), |
97 usage='%prog command [options]') | 97 usage='%prog command [options]') |
98 parser.add_option('--gn', help='Use gn deps to find third party dependencies', | 98 parser.add_option('--gn', help='Use gn deps to find third party dependencies', |
99 action='store_true') | 99 action='store_true') |
| 100 parser.add_option('--gn-path', default='gn', |
| 101 help='Path to gn executable (default: %(default)s)') |
100 parser.description = (__doc__ + | 102 parser.description = (__doc__ + |
101 '\nCommands:\n' \ | 103 '\nCommands:\n' \ |
102 ' license [filename]\n' \ | 104 ' license [filename]\n' \ |
103 ' Generate Cronet LICENSE to filename or stdout.\n') | 105 ' Generate Cronet LICENSE to filename or stdout.\n') |
104 (_, args) = parser.parse_args() | 106 (flags, args) = parser.parse_args() |
| 107 print flags |
105 | 108 |
106 if _.gn: | 109 if flags.gn: |
107 global third_party_dirs | 110 global third_party_dirs |
108 third_party_dirs = FindThirdPartyDeps(os.getcwd()) | 111 third_party_dirs = FindThirdPartyDeps(flags.gn_path, os.getcwd()) |
109 | 112 |
110 if not args: | 113 if not args: |
111 parser.print_help() | 114 parser.print_help() |
112 return 1 | 115 return 1 |
113 | 116 |
114 if args[0] == 'license': | 117 if args[0] == 'license': |
115 if len(args) > 1: | 118 if len(args) > 1: |
116 f = open(args[1], "w") | 119 f = open(args[1], "w") |
117 try: | 120 try: |
118 f.write(GenerateLicense()) | 121 f.write(GenerateLicense()) |
119 finally: | 122 finally: |
120 f.close() | 123 f.close() |
121 else: | 124 else: |
122 print GenerateLicense() | 125 print GenerateLicense() |
123 return 0 | 126 return 0 |
124 | 127 |
125 parser.print_help() | 128 parser.print_help() |
126 return 1 | 129 return 1 |
127 | 130 |
128 | 131 |
129 if __name__ == '__main__': | 132 if __name__ == '__main__': |
130 sys.exit(main()) | 133 sys.exit(main()) |
OLD | NEW |