summaryrefslogtreecommitdiffstats
path: root/BaseTools/Scripts
diff options
context:
space:
mode:
Diffstat (limited to 'BaseTools/Scripts')
-rwxr-xr-xBaseTools/Scripts/PatchCheck.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/BaseTools/Scripts/PatchCheck.py b/BaseTools/Scripts/PatchCheck.py
index 13da696778..106b434c75 100755
--- a/BaseTools/Scripts/PatchCheck.py
+++ b/BaseTools/Scripts/PatchCheck.py
@@ -304,12 +304,49 @@ class GitDiffCheck:
self.line_num = 0
self.state = START
self.new_bin = []
+ self.LicenseCheck(self.lines, self.count)
while self.line_num < self.count and self.format_ok:
line_num = self.line_num
self.run()
assert(self.line_num > line_num)
self.report_message_result()
+ def LicenseCheck(self, lines, count):
+ self.ok = True
+ self.startcheck = False
+ self.license = True
+ line_index = 0
+ for line in lines:
+ if line.startswith('--- /dev/null'):
+ nextline = lines[line_index + 1]
+ added_file = self.Readdedfileformat.search(nextline).group(1)
+ added_file_extension = os.path.splitext(added_file)[1]
+ if added_file_extension in self.file_extension_list:
+ self.startcheck = True
+ self.license = False
+ if self.startcheck and self.license_format_preflix in line:
+ if self.bsd2_patent in line or self.bsd3_patent in line:
+ self.license = True
+ else:
+ for optional_license in self.license_optional_list:
+ if optional_license in line:
+ self.license = True
+ self.warning(added_file)
+ if line_index + 1 == count or lines[line_index + 1].startswith('diff --') and self.startcheck:
+ if not self.license:
+ error_message = "Invalid License in: " + added_file
+ self.error(error_message)
+ self.startcheck = False
+ self.license = True
+ line_index = line_index + 1
+
+ def warning(self, *err):
+ count = 0
+ for line in err:
+ warning_format = 'Warning: License accepted but not BSD plus patent license in'
+ print(warning_format, line)
+ count += 1
+
def report_message_result(self):
if Verbose.level < Verbose.NORMAL:
return
@@ -491,6 +528,19 @@ class GitDiffCheck:
print(prefix, line)
count += 1
+ license_format_preflix = 'SPDX-License-Identifier'
+
+ bsd2_patent = 'BSD-2-Clause-Patent'
+
+ bsd3_patent = 'BSD-3-Clause-Patent'
+
+ license_optional_list = ['BSD-2-Clause', 'BSD-3-Clause', 'MIT', 'Python-2.0', 'Zlib']
+
+ Readdedfileformat = re.compile(r'\+\+\+ b\/(.*)\n')
+
+ file_extension_list = [".c", ".h", ".inf", ".dsc", ".dec", ".py", ".bat", ".sh", ".uni", ".yaml", ".fdf", ".inc", "yml", ".asm", \
+ ".asm16", ".asl", ".vfr", ".s", ".S", ".aslc", ".nasm", ".nasmb", ".idf", ".Vfr", ".H"]
+
class CheckOnePatch:
"""Checks the contents of a git email formatted patch.