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

Side by Side Diff: tools-webrtc/ios/generate_licenses.py

Issue 2864213004: Rename tools-webrtc -> tools_webrtc (Closed)
Patch Set: REmove symlink Created 3 years, 7 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
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
67 # Generate amalgamated list of libraries. Will exit with error if a
68 # lib is unrecognized.
69 license_libs = set()
70 for static_lib in third_party_libs:
71 license_path = LIB_TO_LICENSES_DICT.get(static_lib)
72 if static_lib == 'yasm':
73 # yasm is a build-time dep only, and doesn't need a license.
74 continue
75 if license_path is None:
76 print 'Missing license path for lib: %s' % static_lib
77 return 1
78 license_libs.add(static_lib)
79
80 # Put webrtc at the front of the list.
81 license_libs = sorted(license_libs)
82 license_libs.insert(0, 'webrtc')
83
84 # Generate HTML.
85 output_license_file = open(os.path.join(output_dir, 'LICENSE.html'), 'w+')
86 output_license_file.write('<!DOCTYPE html>\n')
87 output_license_file.write('<html>\n<head>\n')
88 output_license_file.write('<meta charset="UTF-8">\n')
89 output_license_file.write('<title>Licenses</title>\n')
90 style_tag = textwrap.dedent('''\
91 <style>
92 body { margin: 0; font-family: sans-serif; }
93 pre { background-color: #eeeeee; padding: 1em; white-space: pre-wrap; }
94 p { margin: 1em; white-space: nowrap; }
95 </style>
96 ''')
97 output_license_file.write(style_tag)
98 output_license_file.write('</head>\n')
99
100 for license_lib in license_libs:
101 output_license_file.write('<p>%s<br/></p>\n' % license_lib)
102 output_license_file.write('<pre>\n')
103 for path in LIB_TO_LICENSES_DICT[license_lib]:
104 license_path = os.path.join(CHECKOUT_ROOT, path)
105 with open(license_path, 'r') as license_file:
106 license_text = cgi.escape(license_file.read(), quote=True)
107 output_license_file.write(license_text)
108 output_license_file.write('\n')
109 output_license_file.write('</pre>\n')
110
111 output_license_file.write('</body>\n')
112 output_license_file.write('</html>')
113 output_license_file.close()
114 return 0
115
116
117 def main():
118 parser = argparse.ArgumentParser(description='Generate WebRTC LICENSE.html')
119 parser.add_argument('target_name',
120 help='Name of the GN target to generate a license for')
121 parser.add_argument('output_dir',
122 help='Directory to output LICENSE.html to.')
123 parser.add_argument('buildfile_dirs', nargs="+",
124 help='Directories containing gn generated ninja files')
125 args = parser.parse_args()
126 builder = LicenseBuilder(args.buildfile_dirs, args.target_name)
127 sys.exit(builder.GenerateLicenseText(args.output_dir))
128
129
130 if __name__ == '__main__':
131 main()
OLDNEW
« no previous file with comments | « tools-webrtc/ios/client.webrtc/iOS64_Sim_Debug_(iOS_9.0).json ('k') | tools-webrtc/ios/merge_ios_libs.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698