blob: 279dbce8da28cb722707604db2b78686d2442761 [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2013 The Native Client Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tool that checks the LICENSE field of all packages.
Currently it preforms the following simple check:
- LICENSE field exists
- LICENSE field contains only known licenses
- Where a custom files is specified check that the file
exists in the archive
"""
from __future__ import print_function
import argparse
import os
import sys
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.join(os.path.dirname(SCRIPT_DIR), 'lib'))
import webports
import webports.source_package
VALID_LICENSES = ['GPL', 'GPL2', 'GPL3', 'LGPL', 'LGPL2', 'LGPL3', 'ISC', 'MPL',
'BSD', 'MIT', 'ZLIB', 'CUSTOM', 'APACHE']
options = None
def CheckLicense(package):
if not package.LICENSE:
print('%-27s: missing license field' % package.NAME)
package.Download()
package.Extract()
return 1
rtn = 0
licenses = package.LICENSE.split(',')
if options.verbose:
print('%-27s: %s' % (package.NAME, licenses))
licenses = [l.split(':') for l in licenses]
for license_info in licenses:
if license_info[0] not in VALID_LICENSES:
print('%s: Invalid license: %s' % (package.root, license_info[0]))
rtn = 1
if len(license_info) > 1:
package.Download()
package.Extract()
filename = os.path.join(package.GetBuildLocation(), license_info[1])
if not os.path.exists(filename):
print('Missing license file: %s' % filename)
rtn = 1
return rtn
def main(args):
global options
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbose', action='store_true',
help='Output extra information.')
options = parser.parse_args(args)
if options.verbose:
webports.SetVerbose(True)
rtn = False
count = 0
for package in webports.source_package.SourcePackageIterator():
rtn |= CheckLicense(package)
count += 1
if not rtn:
print("Verfied licenses for %d packages" % count)
return rtn
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))