Add uintXX_t checks into check_all.py
authorBoris Zanin <boris.zanin@mobica.com>
Tue, 29 Aug 2017 12:35:02 +0000 (14:35 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Mon, 11 Sep 2017 09:25:57 +0000 (05:25 -0400)
The mentioned types are not defined in Windows, but are defined in linux.
Presence of this type breaks Windows builds. To make it easyily detectable
under linux additional check for [su]int[8,16,32,64]_t types is added
into check_all.py script.

Components: Framework

VK-GL-CTS Issue: 644

Change-Id: Ia332456fda93d068b11c1f53d5a3baf1c1740426

scripts/src_util/check_all.py
scripts/src_util/check_invalid_types.py [new file with mode: 0644]

index 7faabf1..b8378a5 100644 (file)
@@ -26,6 +26,7 @@ from common import getChangedFiles, getAllProjectFiles
 from check_include_guards import checkIncludeGuards
 from check_whitespace import checkWhitespace
 from check_license import checkLicense
+from check_invalid_types import checkInvalidTypes
 
 if __name__ == "__main__":
     parser = ArgumentParser()
@@ -43,6 +44,7 @@ if __name__ == "__main__":
         checkWhitespace(files),
         checkIncludeGuards(files),
         checkLicense(files),
+        checkInvalidTypes(files),
         #todo checkRedundantIncludeGuards(files),
         ])
 
diff --git a/scripts/src_util/check_invalid_types.py b/scripts/src_util/check_invalid_types.py
new file mode 100644 (file)
index 0000000..a4f10a2
--- /dev/null
@@ -0,0 +1,100 @@
+# -*- coding: utf-8 -*-
+
+#-------------------------------------------------------------------------
+# drawElements Quality Program utilities
+# --------------------------------------
+#
+# Copyright (c) 2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#-------------------------------------------------------------------------
+
+import os
+import re
+import sys
+from argparse import ArgumentParser
+from common import getChangedFiles, getAllProjectFiles, isTextFile
+
+CHECK_LIST = [
+       ".cpp",
+       ".hpp",
+       ".c",
+       ".h",
+]
+
+EXCLUSION_LIST = [
+       "framework/delibs/debase/deDefs.h",
+       "framework/platform/android/tcuAndroidPlatform.cpp",
+       "framework/platform/android/tcuAndroidWindow.hpp",
+       "framework/platform/android/tcuAndroidWindow.cpp",
+       "framework/platform/lnx/X11/tcuLnxX11Xcb.cpp",
+       "framework/platform/lnx/wayland/tcuLnxWayland.hpp",
+       "framework/platform/lnx/wayland/tcuLnxWayland.cpp",
+]
+
+def checkEnds(line, ends):
+       return any(line.endswith(end) for end in ends)
+
+def checkFileInvalidTypes (file):
+       error = False
+
+       if checkEnds(file.replace("\\", "/"), CHECK_LIST) and not checkEnds(file.replace("\\", "/"), EXCLUSION_LIST):
+               f = open(file, 'rb')
+               for lineNum, line in enumerate(f):
+                       # Remove inline comments
+                       idx = line.find("//")
+                       if idx > 0:
+                               line = line[:idx]
+                       # Remove text in quoted literals
+                       if line.find("\"") > 0:
+                               list = line.split('"')
+                               del list[1::2]
+                               line = ' '
+                               line = line.join(list)
+                       found = re.search(r'\b[us]*int[0-9]+_t\b', line)
+                       if found is not None:
+                               error = True
+                               print "%s:%i Unacceptable type found" % (file, lineNum+1)
+               f.close()
+
+       return not error
+
+def checkInvalidTypes (files):
+       error = False
+       for file in files:
+               if isTextFile(file):
+                       if not checkFileInvalidTypes(file):
+                               error = True
+
+       return not error
+
+if __name__ == "__main__":
+       parser = ArgumentParser()
+       parser.add_argument("-e", "--only-errors",  action="store_true", dest="onlyErrors",   default=False, help="Print only on error")
+       parser.add_argument("-i", "--only-changed", action="store_true", dest="useGitIndex",  default=False, help="Check only modified files. Uses git.")
+
+       args = parser.parse_args()
+
+       if args.useGitIndex:
+               files = getChangedFiles()
+       else:
+               files = getAllProjectFiles()
+
+       error = not checkInvalidTypes(files)
+
+       if error:
+               print "One or more checks failed"
+               sys.exit(1)
+       if not args.onlyErrors:
+               print "All checks passed"