| Index: third_party/PRESUBMIT.py
|
| diff --git a/third_party/PRESUBMIT.py b/third_party/PRESUBMIT.py
|
| index 4a6cba81e640304285cd986d166f5d97f82b22bc..623b14b9088df4a1a04743de3a070b23c8890640 100644
|
| --- a/third_party/PRESUBMIT.py
|
| +++ b/third_party/PRESUBMIT.py
|
| @@ -2,6 +2,34 @@
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
|
|
| +ANDROID_WHITELISTED_LICENSES = [
|
| + 'A(pple )?PSL 2(\.0)?',
|
| + 'Apache( Version)? 2(\.0)?',
|
| + '(New )?([23]-Clause )?BSD( [23]-Clause)?( with advertising clause)?',
|
| + 'L?GPL ?v?2(\.[01])?( or later)?',
|
| + 'MIT(/X11)?(-like)?',
|
| + 'MPL 1\.1 ?/ ?GPL 2(\.0)? ?/ ?LGPL 2\.1',
|
| + 'MPL 2(\.0)?',
|
| + 'Microsoft Limited Public License',
|
| + 'Microsoft Permissive License',
|
| + 'Public Domain',
|
| + 'Python',
|
| + 'SGI Free Software License B',
|
| + 'University of Illinois\/NCSA Open Source',
|
| + 'X11',
|
| +]
|
| +
|
| +def LicenseIsCompatibleWithAndroid(input_api, license):
|
| + regex = '^(%s)$' % '|'.join(ANDROID_WHITELISTED_LICENSES)
|
| + tokens = \
|
| + [x.strip() for x in input_api.re.split(' and |,', license) if len(x) > 0]
|
| + has_compatible_license = False
|
| + for token in tokens:
|
| + if input_api.re.match(regex, token, input_api.re.IGNORECASE):
|
| + has_compatible_license = True
|
| + break
|
| + return has_compatible_license
|
| +
|
| def _CheckThirdPartyReadmesUpdated(input_api, output_api):
|
| """
|
| Checks to make sure that README.chromium files are properly updated
|
| @@ -36,10 +64,13 @@ def _CheckThirdPartyReadmesUpdated(input_api, output_api):
|
| r'^Version: [a-zA-Z0-9_\-\.:]+\r?$',
|
| input_api.re.IGNORECASE | input_api.re.MULTILINE)
|
| release_pattern = input_api.re.compile(
|
| - r'^Security Critical: (yes)|(no)\r?$',
|
| + r'^Security Critical: (yes|no)\r?$',
|
| input_api.re.IGNORECASE | input_api.re.MULTILINE)
|
| license_pattern = input_api.re.compile(
|
| - r'^License: .+\r?$',
|
| + r'^License: (.+)\r?$',
|
| + input_api.re.IGNORECASE | input_api.re.MULTILINE)
|
| + license_android_compatible_pattern = input_api.re.compile(
|
| + r'^License Android Compatible: (yes|no)\r?$',
|
| input_api.re.IGNORECASE | input_api.re.MULTILINE)
|
|
|
| for f in readmes:
|
| @@ -68,12 +99,21 @@ def _CheckThirdPartyReadmesUpdated(input_api, output_api):
|
| 'field. This field specifies whether the package is built with\n'
|
| 'Chromium. Check README.chromium.template for details.',
|
| [f]))
|
| - if not license_pattern.search(contents):
|
| + license_match = license_pattern.search(contents)
|
| + if not license_match:
|
| errors.append(output_api.PresubmitError(
|
| 'Third party README files should contain a \'License\' field.\n'
|
| 'This field specifies the license used by the package. Check\n'
|
| 'README.chromium.template for details.',
|
| [f]))
|
| + elif not LicenseIsCompatibleWithAndroid(input_api, license_match.group(1)) \
|
| + and not license_android_compatible_pattern.search(contents):
|
| + errors.append(output_api.PresubmitPromptWarning(
|
| + 'Cannot determine whether specified license is compatible with\n' +
|
| + 'the Android licensing requirements. Please check that the license\n' +
|
| + 'name is spelled according to third_party/PRESUBMIT.py. Please see\n' +
|
| + 'README.chromium.template for details.',
|
| + [f]))
|
| return errors
|
|
|
|
|
|
|