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

Side by Side Diff: native_client_sdk/src/build_tools/generate_notice.py

Issue 11074004: [NaCl SDK] Generate NOTICE file automatically. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """Build the NOTICE file distributed with the NaCl SDK from a set of given
7 license files."""
8
9 import optparse
10 import os
11 import sys
12
13
14 def Trace(msg):
15 if Trace.verbose:
16 print msg
17
18
19 def FindFiles(files):
20 found = [f for f in files if os.path.exists(f)]
21
22 if Trace.verbose:
23 for f in sorted(set(files) - set(found)):
24 Trace('Skipping %s. File doesn\'t exist.\n' % (f,))
25
26 return found
27
28
29 def CreateLicenseDict(files):
30 # Many of the license files are duplicates. Create a map of license text to
31 # filename.
32 license_dict = {}
33 for filename in files:
34 license_text = open(filename, 'r').read()
Sam Clegg 2012/10/06 01:05:59 super minor: 'r' is the default so can be omitted.
binji 2012/10/08 17:51:48 Done.
35 license_dict.setdefault(license_text, []).append(filename)
36
37 # Flip the dictionary (map tuple of filenames -> license text).
38 return dict((tuple(value), key) for key, value in license_dict.iteritems())
39
40
41 def WriteLicense(output_file, root, license_text, license_filenames):
42 Trace('Writing license for files:\n' + '\n'.join(license_filenames))
43 output_file.write('=' * 70 + '\n')
44 for filename in sorted(license_filenames):
45 filename = os.path.relpath(filename, root)
46 license_dir = os.path.dirname(filename)
47 if not license_dir:
48 license_dir = 'native_client_sdk'
49
50 output_file.write('%s is licensed as follows\n' % (license_dir,))
51 output_file.write(' (Cf. %s):\n' % (filename,))
52 output_file.write('=' * 70 + '\n')
53 output_file.write(license_text)
54 output_file.write('\n\n\n')
55
56
57 def main(args):
58 parser = optparse.OptionParser()
59 parser.add_option('-v', '--verbose', help='Verbose output.',
60 action='store_true')
61 parser.add_option('-o', '--output', help='Output file')
62 parser.add_option('--root', help='Root for all paths')
63
64 options, args = parser.parse_args(args)
65 Trace.verbose = options.verbose
66
67 if not options.output:
68 parser.error('No output file given. See -o.')
69 if not options.root:
70 parser.error('No root directory given. See --root.')
71
72 found_files = FindFiles(args)
73 license_dict = CreateLicenseDict(found_files)
74 with open(options.output, 'w') as output_file:
75 for license_filenames in sorted(license_dict.iterkeys()):
76 license_text = license_dict[license_filenames]
77 WriteLicense(output_file, options.root, license_text, license_filenames)
78
79 Trace('Done.')
80
81 return 0
82
83
84 if __name__ == '__main__':
85 sys.exit(main(sys.argv[1:]))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698