1#!/usr/bin/env python3
2#/*
3# * FreeRTOS Kernel V11.0.1
4# * Copyright (C) 2021 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
5# *
6# * SPDX-License-Identifier: MIT
7# *
8# * Permission is hereby granted, free of charge, to any person obtaining a copy of
9# * this software and associated documentation files (the "Software"), to deal in
10# * the Software without restriction, including without limitation the rights to
11# * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
12# * the Software, and to permit persons to whom the Software is furnished to do so,
13# * subject to the following conditions:
14# *
15# * The above copyright notice and this permission notice shall be included in all
16# * copies or substantial portions of the Software.
17# *
18# * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19# * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
20# * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
21# * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
22# * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23# * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24# *
25# * https://www.FreeRTOS.org
26# * https://github.com/FreeRTOS
27# *
28# */
29
30import os
31from common.header_checker import HeaderChecker
32
33#--------------------------------------------------------------------------------------------------
34#                                            CONFIG
35#--------------------------------------------------------------------------------------------------
36KERNEL_IGNORED_FILES = [
37    'FreeRTOS-openocd.c',
38    'Makefile',
39    '.DS_Store',
40    'cspell.config.yaml'
41]
42
43KERNEL_IGNORED_EXTENSIONS = [
44    '.yml',
45    '.css',
46    '.idx',
47    '.md',
48    '.url',
49    '.sty',
50    '.0-rc2',
51    '.s82',
52    '.js',
53    '.out',
54    '.pack',
55    '.2',
56    '.1-kernel-only',
57    '.0-kernel-only',
58    '.0-rc1',
59    '.readme',
60    '.tex',
61    '.png',
62    '.bat',
63    '.sh',
64    '.txt',
65    '.cmake',
66    '.config'
67]
68
69KERNEL_ASM_EXTENSIONS = [
70    '.s',
71    '.S',
72    '.src',
73    '.inc',
74    '.s26',
75    '.s43',
76    '.s79',
77    '.s85',
78    '.s87',
79    '.s90',
80    '.asm',
81    '.h'
82]
83
84KERNEL_PY_EXTENSIONS = [
85    '.py'
86]
87
88KERNEL_IGNORED_PATTERNS = [
89    r'.*\.git.*',
90    r'.*portable/IAR/AtmelSAM7S64/.*AT91SAM7.*',
91    r'.*portable/GCC/ARM7_AT91SAM7S/.*',
92    r'.*portable/MPLAB/PIC18F/stdio.h',
93    r'.*portable/ThirdParty/xClang/XCOREAI/*',
94    r'.*IAR/ARM_C*',
95    r'.*IAR/78K0R/*',
96    r'.*CCS/MSP430X/*',
97    r'.*portable/template/*',
98    r'.*template_configuration/*'
99]
100
101KERNEL_THIRD_PARTY_PATTERNS = [
102    r'.*portable/ThirdParty/GCC/Posix/port*',
103    r'.*portable/ThirdParty/*',
104    r'.*portable/IAR/AVR32_UC3/.*',
105    r'.*portable/GCC/AVR32_UC3/.*',
106]
107
108KERNEL_HEADER = [
109    '/*\n',
110    ' * FreeRTOS Kernel V11.0.1\n',
111    ' * Copyright (C) 2021 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\n',
112    ' *\n',
113    ' * SPDX-License-Identifier: MIT\n',
114    ' *\n',
115    ' * Permission is hereby granted, free of charge, to any person obtaining a copy of\n',
116    ' * this software and associated documentation files (the "Software"), to deal in\n',
117    ' * the Software without restriction, including without limitation the rights to\n',
118    ' * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n',
119    ' * the Software, and to permit persons to whom the Software is furnished to do so,\n',
120    ' * subject to the following conditions:\n',
121    ' *\n',
122    ' * The above copyright notice and this permission notice shall be included in all\n',
123    ' * copies or substantial portions of the Software.\n',
124    ' *\n',
125    ' * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n',
126    ' * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n',
127    ' * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n',
128    ' * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n',
129    ' * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n',
130    ' * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n',
131    ' *\n',
132    ' * https://www.FreeRTOS.org\n',
133    ' * https://github.com/FreeRTOS\n',
134    ' *\n',
135    ' */\n',
136]
137
138def main():
139    parser = HeaderChecker.configArgParser()
140    args   = parser.parse_args()
141
142    # Configure the checks then run
143    checker = HeaderChecker(KERNEL_HEADER,
144                            ignored_files=KERNEL_IGNORED_FILES,
145                            ignored_ext=KERNEL_IGNORED_EXTENSIONS,
146                            ignored_patterns=KERNEL_IGNORED_PATTERNS,
147                            third_party_patterns=KERNEL_THIRD_PARTY_PATTERNS,
148                            py_ext=KERNEL_PY_EXTENSIONS,
149                            asm_ext=KERNEL_ASM_EXTENSIONS)
150    checker.ignoreFile(os.path.split(__file__)[-1])
151
152    rc = checker.processArgs(args)
153    if rc:
154        checker.showHelp(__file__)
155
156    return rc
157
158if __name__ == '__main__':
159    exit(main())
160