1 # -*- coding: utf-8 -*- 2 3 import os 4 import sys 5 import shlex 6 import subprocess 7 8 SRC_DIRS = [ 9 "delibs/debase", 10 "delibs/deimage", 11 "delibs/depool", 12 "delibs/dethread", 13 "delibs/deutil", 14 "delibs/decpp", 15 16 "deqp/execserver", 17 "deqp/executor", 18 "deqp/modules/candytest", 19 "deqp/modules/egl", 20 "deqp/modules/gles2", 21 "deqp/modules/gles3", 22 "deqp/modules/gles31", 23 "deqp/modules/gl3", 24 "deqp/modules/glshared", 25 "deqp/modules/glusecases", 26 "deqp/modules/opencl", 27 "deqp/modules/internal", 28 "deqp/framework/qphelper", 29 "deqp/framework/common", 30 "deqp/framework/egl", 31 "deqp/framework/opengl", 32 "deqp/framework/opencl", 33 "deqp/framework/platform", 34 "deqp/framework/randomshaders", 35 "deqp/framework/referencerenderer", 36 "deqp/wrappers/dynlib", 37 "deqp/wrappers/gles3", 38 39 "gapir", 40 ] 41 42 INCLUDE_DIRS = [ 43 "delibs/libpng", 44 "delibs/libzip", 45 "delibs/zlib", 46 47 "deqp/wrappers/dynlib/inc", 48 "deqp/wrappers/gles3/inc", 49 "deqp/modules/gles2/accuracy", 50 "deqp/modules/gles2/functional", 51 "deqp/modules/gles2/performance", 52 "deqp/modules/gles2/stress", 53 "deqp/modules/gles2/usecases", 54 "deqp/modules/gles3/accuracy", 55 "deqp/modules/gles3/functional", 56 "deqp/modules/gles3/stress", 57 "deqp/modules/gles3/usecases", 58 "deqp/modules/gles3/performance", 59 "deqp/modules/gles31/functional", 60 "deqp/modules/gles31/stress", 61 "deqp/modules/gl3/functional", 62 "deqp/modules/gl3/performance", 63 "deqp/modules/gl3/stress", 64 "deqp/framework/opengl/simplereference", 65 "deqp/framework/opencl/inc", 66 "deqp/framework/opengl/wrapper", 67 "deqp/framework/opengl/simplereference", 68 69 "gapir/base", 70 "gapir/egl", 71 "gapir/gles2", 72 "gapir/util", 73 74 "domeni/eigen2", 75 "domeni/base", 76 "domeni/engine", 77 "domeni/m3g", 78 "domeni/m3g_adapter", 79 "domeni/renderer", 80 "domeni/resource", 81 "domeni/tools" 82 ] + SRC_DIRS 83 84 ARGS = [ 85 "--enable=all,style", 86 "--xml-version=2", 87 "--platform=win64", 88 "-D__cplusplus", 89 "-D_M_X64", 90 "-D_WIN32", 91 "-D_MSC_VER=1600", 92 "-DDE_DEBUG=1", 93 "-DDE_COMPILER=1", # Is preprocessor buggy in recent cppcheck? 94 "-DDE_OS=1", 95 "-DDE_CPU=1", 96 "-DDE_PTR_SIZE=4", 97 "-DAB_COMPILER=1", 98 "-DAB_OS=1", 99 "-DDEQP_SUPPORT_GLES2=1", 100 "-DDEQP_SUPPORT_GLES3=1", 101 "-DDEQP_SUPPORT_OPENCL=1", 102 "-DDEQP_SUPPORT_OPENGL=1", 103 "-DDEQP_TARGET_NAME=\"Cppcheck\"", 104 "-D_XOPEN_SOURCE=600", 105 "--suppress=arrayIndexOutOfBounds:deqp/framework/common/tcuVector.hpp", 106 "--suppress=invalidPointerCast:deqp/framework/common/tcuTexture.cpp", 107 "--suppress=*:deqp/framework/opencl/cl.hpp", 108 "--suppress=invalidPointerCast:deqp/modules/opencl/tclSIRLogger.cpp", 109 "--suppress=preprocessorErrorDirective:deqp/framework/platform/android/tcuAndroidMain.cpp", 110 "--suppress=invalidPointerCast:deqp/modules/gles3/functional/es3fTransformFeedbackTests.cpp", 111 "--suppress=invalidPointerCast:deqp/modules/gles3/functional/es3fUniformBlockCase.cpp", 112 "--suppress=unusedStructMember", 113 "--suppress=postfixOperator", 114 "--suppress=unusedFunction", 115 "--suppress=unusedPrivateFunction", 116 "--rule-file=deqp/scripts/no_empty_fail.rule" 117 ] 118 119 def runCppCheck (srcBaseDir, dstFile): 120 fullDstFile = os.path.realpath(dstFile) 121 command = '"C:\\Program Files (x86)\\Cppcheck\\cppcheck.exe"' 122 123 for arg in ARGS + ["--xml"]: 124 command += " %s" % arg 125 126 for path in INCLUDE_DIRS: 127 command += " -I %s" % path 128 129 for path in SRC_DIRS: 130 command += " %s" % path 131 132 command += ' 2> "%s"' % fullDstFile 133 134 os.chdir(srcBaseDir) 135 os.system('"%s"' % command) # Double-quotes needed for some reason 136 137 if __name__ == "__main__": 138 if len(sys.argv) != 2: 139 print "%s: [reportfile]" % sys.argv[0] 140 sys.exit(-1) 141 142 dstFile = sys.argv[1] 143 srcDir = os.path.realpath(os.path.normpath(os.path.join(os.path.dirname(__file__), "..", ".."))) 144 runCppCheck(srcDir, dstFile) 145