# -*- coding: utf-8 -*- #------------------------------------------------------------------------- # drawElements Quality Program utilities # -------------------------------------- # # Copyright 2015 The Android Open Source Project # # 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 sys import shlex import subprocess SRC_DIRS = [ "delibs/debase", "delibs/deimage", "delibs/depool", "delibs/dethread", "delibs/deutil", "delibs/decpp", "deqp/execserver", "deqp/executor", "deqp/modules/candytest", "deqp/modules/egl", "deqp/modules/gles2", "deqp/modules/gles3", "deqp/modules/gles31", "deqp/modules/gl3", "deqp/modules/glshared", "deqp/modules/glusecases", "deqp/modules/opencl", "deqp/modules/internal", "deqp/framework/qphelper", "deqp/framework/common", "deqp/framework/egl", "deqp/framework/opengl", "deqp/framework/opencl", "deqp/framework/platform", "deqp/framework/randomshaders", "deqp/framework/referencerenderer", "deqp/wrappers/dynlib", "deqp/wrappers/gles3", "gapir", ] INCLUDE_DIRS = [ "delibs/libpng", "delibs/libzip", "delibs/zlib", "deqp/wrappers/dynlib/inc", "deqp/wrappers/gles3/inc", "deqp/modules/gles2/accuracy", "deqp/modules/gles2/functional", "deqp/modules/gles2/performance", "deqp/modules/gles2/stress", "deqp/modules/gles2/usecases", "deqp/modules/gles3/accuracy", "deqp/modules/gles3/functional", "deqp/modules/gles3/stress", "deqp/modules/gles3/usecases", "deqp/modules/gles3/performance", "deqp/modules/gles31/functional", "deqp/modules/gles31/stress", "deqp/modules/gl3/functional", "deqp/modules/gl3/performance", "deqp/modules/gl3/stress", "deqp/framework/opengl/simplereference", "deqp/framework/opencl/inc", "deqp/framework/opengl/wrapper", "deqp/framework/opengl/simplereference", "gapir/base", "gapir/egl", "gapir/gles2", "gapir/util", "domeni/eigen2", "domeni/base", "domeni/engine", "domeni/m3g", "domeni/m3g_adapter", "domeni/renderer", "domeni/resource", "domeni/tools" ] + SRC_DIRS ARGS = [ "--enable=all,style", "--xml-version=2", "--platform=win64", "-D__cplusplus", "-D_M_X64", "-D_WIN32", "-D_MSC_VER=1600", "-DDE_DEBUG=1", "-DDE_COMPILER=1", # Is preprocessor buggy in recent cppcheck? "-DDE_OS=1", "-DDE_CPU=1", "-DDE_PTR_SIZE=4", "-DAB_COMPILER=1", "-DAB_OS=1", "-DDEQP_SUPPORT_GLES2=1", "-DDEQP_SUPPORT_GLES3=1", "-DDEQP_SUPPORT_OPENCL=1", "-DDEQP_SUPPORT_OPENGL=1", "-DDEQP_TARGET_NAME=\"Cppcheck\"", "-D_XOPEN_SOURCE=600", "--suppress=arrayIndexOutOfBounds:deqp/framework/common/tcuVector.hpp", "--suppress=invalidPointerCast:deqp/framework/common/tcuTexture.cpp", "--suppress=*:deqp/framework/opencl/cl.hpp", "--suppress=invalidPointerCast:deqp/modules/opencl/tclSIRLogger.cpp", "--suppress=preprocessorErrorDirective:deqp/framework/platform/android/tcuAndroidMain.cpp", "--suppress=invalidPointerCast:deqp/modules/gles3/functional/es3fTransformFeedbackTests.cpp", "--suppress=invalidPointerCast:deqp/modules/gles3/functional/es3fUniformBlockCase.cpp", "--suppress=unusedStructMember", "--suppress=postfixOperator", "--suppress=unusedFunction", "--suppress=unusedPrivateFunction", "--rule-file=deqp/scripts/no_empty_fail.rule" ] def runCppCheck (srcBaseDir, dstFile): fullDstFile = os.path.realpath(dstFile) command = '"C:\\Program Files (x86)\\Cppcheck\\cppcheck.exe"' for arg in ARGS + ["--xml"]: command += " %s" % arg for path in INCLUDE_DIRS: command += " -I %s" % path for path in SRC_DIRS: command += " %s" % path command += ' 2> "%s"' % fullDstFile os.chdir(srcBaseDir) os.system('"%s"' % command) # Double-quotes needed for some reason if __name__ == "__main__": if len(sys.argv) != 2: print "%s: [reportfile]" % sys.argv[0] sys.exit(-1) dstFile = sys.argv[1] srcDir = os.path.realpath(os.path.normpath(os.path.join(os.path.dirname(__file__), "..", ".."))) runCppCheck(srcDir, dstFile)