mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-12-06 21:25:00 -05:00
copyright-checker: Add FreeRTOS Arm collab copyright
FreeRTOS Arm collab files shall have both Amazon's and Arm's copyright headers. Hence, the copyright checker is modified to check for both copyrights. Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
This commit is contained in:
parent
e400cc93b7
commit
a6c44e3a1b
1 changed files with 91 additions and 8 deletions
99
.github/scripts/kernel_checker.py
vendored
99
.github/scripts/kernel_checker.py
vendored
|
|
@ -28,6 +28,7 @@
|
||||||
# */
|
# */
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
from common.header_checker import HeaderChecker
|
from common.header_checker import HeaderChecker
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------
|
||||||
|
|
@ -106,6 +107,15 @@ KERNEL_THIRD_PARTY_PATTERNS = [
|
||||||
r'.*portable/GCC/AVR32_UC3/.*',
|
r'.*portable/GCC/AVR32_UC3/.*',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
KERNEL_ARM_COLLAB_FILES_PATTERNS = [
|
||||||
|
r'.*portable/ARMv8M/*',
|
||||||
|
r'.*portable/.*/ARM_CM23*',
|
||||||
|
r'.*portable/.*/ARM_CM33*',
|
||||||
|
r'.*portable/.*/ARM_CM35*',
|
||||||
|
r'.*portable/.*/ARM_CM55*',
|
||||||
|
r'.*portable/.*/ARM_CM85*',
|
||||||
|
]
|
||||||
|
|
||||||
KERNEL_HEADER = [
|
KERNEL_HEADER = [
|
||||||
'/*\n',
|
'/*\n',
|
||||||
' * FreeRTOS Kernel <DEVELOPMENT BRANCH>\n',
|
' * FreeRTOS Kernel <DEVELOPMENT BRANCH>\n',
|
||||||
|
|
@ -139,19 +149,92 @@ KERNEL_HEADER = [
|
||||||
|
|
||||||
FREERTOS_COPYRIGHT_REGEX = r"^(;|#)?( *(\/\*|\*|#|\/\/))? Copyright \(C\) 20\d\d Amazon.com, Inc. or its affiliates. All Rights Reserved\.( \*\/)?$"
|
FREERTOS_COPYRIGHT_REGEX = r"^(;|#)?( *(\/\*|\*|#|\/\/))? Copyright \(C\) 20\d\d Amazon.com, Inc. or its affiliates. All Rights Reserved\.( \*\/)?$"
|
||||||
|
|
||||||
|
FREERTOS_ARM_COLLAB_COPYRIGHT_REGEX = r"(^(;|#)?( *(\/\*|\*|#|\/\/))? Copyright \(C\) 20\d\d Amazon.com, Inc. or its affiliates. All Rights Reserved\.( \*\/)?$)|" + \
|
||||||
|
r"(^(;|#)?( *(\/\*|\*|#|\/\/))? Copyright 20\d\d Arm Limited and/or its affiliates( \*\/)?$)|" + \
|
||||||
|
r"(^(;|#)?( *(\/\*|\*|#|\/\/))? <open-source-office@arm.com>( \*\/)?$)"
|
||||||
|
|
||||||
|
|
||||||
|
class KernelHeaderChecker(HeaderChecker):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
header,
|
||||||
|
padding=1000,
|
||||||
|
ignored_files=None,
|
||||||
|
ignored_ext=None,
|
||||||
|
ignored_patterns=None,
|
||||||
|
py_ext=None,
|
||||||
|
asm_ext=None,
|
||||||
|
third_party_patterns=None,
|
||||||
|
copyright_regex = None
|
||||||
|
):
|
||||||
|
super().__init__(header, padding, ignored_files, ignored_ext, ignored_patterns,
|
||||||
|
py_ext, asm_ext, third_party_patterns, copyright_regex)
|
||||||
|
|
||||||
|
self.armCollabRegex = re.compile(FREERTOS_ARM_COLLAB_COPYRIGHT_REGEX)
|
||||||
|
|
||||||
|
self.armCollabFilesPatternList = []
|
||||||
|
for pattern in KERNEL_ARM_COLLAB_FILES_PATTERNS:
|
||||||
|
self.armCollabFilesPatternList.append(re.compile(pattern))
|
||||||
|
|
||||||
|
def isArmCollabFile(self, path):
|
||||||
|
for pattern in self.armCollabFilesPatternList:
|
||||||
|
if pattern.match(path):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def checkArmCollabFile(self, path):
|
||||||
|
isValid = False
|
||||||
|
file_ext = os.path.splitext(path)[-1]
|
||||||
|
|
||||||
|
with open(path, encoding="utf-8", errors="ignore") as file:
|
||||||
|
chunk = file.read(len("".join(self.header)) + self.padding)
|
||||||
|
lines = [("%s\n" % line) for line in chunk.strip().splitlines()][
|
||||||
|
: len(self.header) + 2
|
||||||
|
]
|
||||||
|
if (len(lines) > 0) and (lines[0].find("#!") == 0):
|
||||||
|
lines.remove(lines[0])
|
||||||
|
|
||||||
|
# Split lines in sections.
|
||||||
|
headers = dict()
|
||||||
|
headers["text"] = []
|
||||||
|
headers["copyright"] = []
|
||||||
|
headers["spdx"] = []
|
||||||
|
for line in lines:
|
||||||
|
if self.armCollabRegex.match(line):
|
||||||
|
headers["copyright"].append(line)
|
||||||
|
elif "SPDX-License-Identifier:" in line:
|
||||||
|
headers["spdx"].append(line)
|
||||||
|
else:
|
||||||
|
headers["text"].append(line)
|
||||||
|
|
||||||
|
text_equal = self.isValidHeaderSection(file_ext, "text", headers["text"])
|
||||||
|
spdx_equal = self.isValidHeaderSection(file_ext, "spdx", headers["spdx"])
|
||||||
|
|
||||||
|
if text_equal and spdx_equal and len(headers["copyright"]) == 3:
|
||||||
|
isValid = True
|
||||||
|
|
||||||
|
return isValid
|
||||||
|
|
||||||
|
def customCheck(self, path):
|
||||||
|
isValid = False
|
||||||
|
if self.isArmCollabFile(path):
|
||||||
|
isValid = self.checkArmCollabFile(path)
|
||||||
|
return isValid
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = HeaderChecker.configArgParser()
|
parser = HeaderChecker.configArgParser()
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
# Configure the checks then run
|
# Configure the checks then run
|
||||||
checker = HeaderChecker(KERNEL_HEADER,
|
checker = KernelHeaderChecker(KERNEL_HEADER,
|
||||||
copyright_regex=FREERTOS_COPYRIGHT_REGEX,
|
copyright_regex=FREERTOS_COPYRIGHT_REGEX,
|
||||||
ignored_files=KERNEL_IGNORED_FILES,
|
ignored_files=KERNEL_IGNORED_FILES,
|
||||||
ignored_ext=KERNEL_IGNORED_EXTENSIONS,
|
ignored_ext=KERNEL_IGNORED_EXTENSIONS,
|
||||||
ignored_patterns=KERNEL_IGNORED_PATTERNS,
|
ignored_patterns=KERNEL_IGNORED_PATTERNS,
|
||||||
third_party_patterns=KERNEL_THIRD_PARTY_PATTERNS,
|
third_party_patterns=KERNEL_THIRD_PARTY_PATTERNS,
|
||||||
py_ext=KERNEL_PY_EXTENSIONS,
|
py_ext=KERNEL_PY_EXTENSIONS,
|
||||||
asm_ext=KERNEL_ASM_EXTENSIONS)
|
asm_ext=KERNEL_ASM_EXTENSIONS)
|
||||||
checker.ignoreFile(os.path.split(__file__)[-1])
|
checker.ignoreFile(os.path.split(__file__)[-1])
|
||||||
|
|
||||||
rc = checker.processArgs(args)
|
rc = checker.processArgs(args)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue