Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: tools_webrtc/ios/generate_licenses.py

Issue 3011613002: License generation script for build_aar.py. (Closed)
Patch Set: Specify GN working directory. Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools_webrtc/ios/build_ios_libs.py ('k') | tools_webrtc/libs/__init__.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/python
2
3 # Copyright 2016 The WebRTC project authors. All Rights Reserved.
4 #
5 # Use of this source code is governed by a BSD-style license
6 # that can be found in the LICENSE file in the root of the source
7 # tree. An additional intellectual property rights grant can be found
8 # in the file PATENTS. All contributing project authors may
9 # be found in the AUTHORS file in the root of the source tree.
10
11 """Generates license HTML for a prebuilt version of WebRTC for iOS."""
12
13 import sys
14
15 import argparse
16 import cgi
17 import os
18 import re
19 import textwrap
20 import subprocess
21
22
23 LIB_TO_LICENSES_DICT = {
24 'boringssl': ['third_party/boringssl/src/LICENSE'],
25 'expat': ['third_party/expat/files/COPYING'],
26 'jsoncpp': ['third_party/jsoncpp/LICENSE'],
27 'opus': ['third_party/opus/src/COPYING'],
28 'protobuf': ['third_party/protobuf/LICENSE'],
29 'libsrtp': ['third_party/libsrtp/LICENSE'],
30 'usrsctp': ['third_party/usrsctp/LICENSE'],
31 'webrtc': ['webrtc/LICENSE', 'webrtc/LICENSE_THIRD_PARTY'],
32 'libvpx': ['third_party/libvpx/source/libvpx/LICENSE'],
33 'libyuv': ['third_party/libyuv/LICENSE'],
34 }
35
36 SCRIPT_DIR = os.path.dirname(os.path.realpath(sys.argv[0]))
37 CHECKOUT_ROOT = os.path.abspath(os.path.join(SCRIPT_DIR, os.pardir, os.pardir))
38 WEBRTC_ROOT = os.path.join(CHECKOUT_ROOT, 'webrtc')
39
40
41 def GetThirdPartyLibraries(buildfile_dir, target_name):
42 def ExtractLibName(string_list):
43 # Sample input:
44 # [" //third_party/usrsctp:usrsctp", " //webrtc:webrtc_common"]
45 # Sample output:
46 # ["usrsctp"]
47 return re.sub(r'\(.*\)', '', string_list).strip().split(
48 os.path.sep)[-1].split(':')[0]
49 output = subprocess.check_output(
50 ["gn", "desc", buildfile_dir, target_name, '--all']) .split(os.linesep)
51 return [ExtractLibName(x) for x in output if re.search(r'third_party', x)]
52
53
54 class LicenseBuilder(object):
55
56 def __init__(self, buildfile_dirs, target_name):
57 self.buildfile_dirs = buildfile_dirs
58 self.target_name = target_name
59
60 def GenerateLicenseText(self, output_dir):
61 # Get a list of third_party libs from gn. For fat libraries we must consider
62 # all architectures, hence the multiple buildfile directories.
63 # The `sum` function flattens the 2d list.
64 third_party_libs = sum([GetThirdPartyLibraries(buildfile, self.target_name)
65 for buildfile in self.buildfile_dirs], [])
66 assert len(third_party_libs) > 0
67
68 # Generate amalgamated list of libraries. Will exit with error if a
69 # lib is unrecognized.
70 license_libs = set()
71 for static_lib in third_party_libs:
72 license_path = LIB_TO_LICENSES_DICT.get(static_lib)
73 if static_lib == 'yasm':
74 # yasm is a build-time dep only, and doesn't need a license.
75 continue
76 if license_path is None:
77 print 'Missing license path for lib: %s' % static_lib
78 return 1
79 license_libs.add(static_lib)
80
81 # Put webrtc at the front of the list.
82 license_libs = sorted(license_libs)
83 license_libs.insert(0, 'webrtc')
84
85 # Generate HTML.
86 output_license_file = open(os.path.join(output_dir, 'LICENSE.html'), 'w+')
87 output_license_file.write('<!DOCTYPE html>\n')
88 output_license_file.write('<html>\n<head>\n')
89 output_license_file.write('<meta charset="UTF-8">\n')
90 output_license_file.write('<title>Licenses</title>\n')
91 style_tag = textwrap.dedent('''\
92 <style>
93 body { margin: 0; font-family: sans-serif; }
94 pre { background-color: #eeeeee; padding: 1em; white-space: pre-wrap; }
95 p { margin: 1em; white-space: nowrap; }
96 </style>
97 ''')
98 output_license_file.write(style_tag)
99 output_license_file.write('</head>\n')
100
101 for license_lib in license_libs:
102 output_license_file.write('<p>%s<br/></p>\n' % license_lib)
103 output_license_file.write('<pre>\n')
104 for path in LIB_TO_LICENSES_DICT[license_lib]:
105 license_path = os.path.join(CHECKOUT_ROOT, path)
106 with open(license_path, 'r') as license_file:
107 license_text = cgi.escape(license_file.read(), quote=True)
108 output_license_file.write(license_text)
109 output_license_file.write('\n')
110 output_license_file.write('</pre>\n')
111
112 output_license_file.write('</body>\n')
113 output_license_file.write('</html>')
114 output_license_file.close()
115 return 0
116
117
118 def main():
119 parser = argparse.ArgumentParser(description='Generate WebRTC LICENSE.html')
120 parser.add_argument('target_name',
121 help='Name of the GN target to generate a license for')
122 parser.add_argument('output_dir',
123 help='Directory to output LICENSE.html to.')
124 parser.add_argument('buildfile_dirs', nargs="+",
125 help='Directories containing gn generated ninja files')
126 args = parser.parse_args()
127 builder = LicenseBuilder(args.buildfile_dirs, args.target_name)
128 sys.exit(builder.GenerateLicenseText(args.output_dir))
129
130
131 if __name__ == '__main__':
132 main()
OLDNEW
« no previous file with comments | « tools_webrtc/ios/build_ios_libs.py ('k') | tools_webrtc/libs/__init__.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698