зеркало из https://github.com/microsoft/clang-1.git
[analyzer] testing: add a build mode to allow C++11 testing.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163357 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
ec9f36ea83
Коммит
817ce3dd26
|
@ -33,7 +33,7 @@ def isExistingProject(PMapFile, projectID) :
|
|||
# Params:
|
||||
# Dir is the directory where the sources are.
|
||||
# ID is a short string used to identify a project.
|
||||
def addNewProject(ID, IsScanBuild) :
|
||||
def addNewProject(ID, BuildMode) :
|
||||
CurDir = os.path.abspath(os.curdir)
|
||||
Dir = SATestBuild.getProjectDir(ID)
|
||||
if not os.path.exists(Dir):
|
||||
|
@ -41,7 +41,7 @@ def addNewProject(ID, IsScanBuild) :
|
|||
sys.exit(-1)
|
||||
|
||||
# Build the project.
|
||||
SATestBuild.testProject(ID, IsScanBuild, IsReferenceBuild=True, Dir=Dir)
|
||||
SATestBuild.testProject(ID, BuildMode, IsReferenceBuild=True, Dir=Dir)
|
||||
|
||||
# Add the project ID to the project map.
|
||||
ProjectMapPath = os.path.join(CurDir, SATestBuild.ProjectMapFile)
|
||||
|
@ -57,7 +57,7 @@ def addNewProject(ID, IsScanBuild) :
|
|||
print >> sys.stdout, "Reference output has been regenerated."
|
||||
else:
|
||||
PMapWriter = csv.writer(PMapFile)
|
||||
PMapWriter.writerow( (ID, int(IsScanBuild)) );
|
||||
PMapWriter.writerow( (ID, int(BuildMode)) );
|
||||
print "The project map is updated: ", ProjectMapPath
|
||||
finally:
|
||||
PMapFile.close()
|
||||
|
@ -69,12 +69,14 @@ if __name__ == '__main__':
|
|||
if len(sys.argv) < 2:
|
||||
print >> sys.stderr, 'Usage: ', sys.argv[0],\
|
||||
'project_ID <mode>' \
|
||||
'mode - 0 for single file project; 1 for scan_build'
|
||||
'mode - 0 for single file project; ' \
|
||||
'1 for scan_build; ' \
|
||||
'2 for single file c++11 project'
|
||||
sys.exit(-1)
|
||||
|
||||
IsScanBuild = 1
|
||||
BuildMode = 1
|
||||
if (len(sys.argv) >= 3):
|
||||
IsScanBuild = int(sys.argv[2])
|
||||
assert((IsScanBuild == 0) | (IsScanBuild == 1))
|
||||
BuildMode = int(sys.argv[2])
|
||||
assert((BuildMode == 0) | (BuildMode == 1) | (BuildMode == 2))
|
||||
|
||||
addNewProject(sys.argv[1], IsScanBuild)
|
||||
addNewProject(sys.argv[1], BuildMode)
|
||||
|
|
|
@ -241,7 +241,7 @@ def isValidSingleInputFile(FileName):
|
|||
return False
|
||||
|
||||
# Run analysis on a set of preprocessed files.
|
||||
def runAnalyzePreprocessed(Dir, SBOutputDir):
|
||||
def runAnalyzePreprocessed(Dir, SBOutputDir, Mode):
|
||||
if os.path.exists(os.path.join(Dir, BuildScript)):
|
||||
print "Error: The preprocessed files project should not contain %s" % \
|
||||
BuildScript
|
||||
|
@ -250,6 +250,9 @@ def runAnalyzePreprocessed(Dir, SBOutputDir):
|
|||
CmdPrefix = Clang + " -cc1 -analyze -analyzer-output=plist -w "
|
||||
CmdPrefix += "-analyzer-checker=" + Checkers +" -fcxx-exceptions -fblocks "
|
||||
|
||||
if (Mode == 2) :
|
||||
CmdPrefix += "-std=c++11 "
|
||||
|
||||
PlistPath = os.path.join(Dir, SBOutputDir, "date")
|
||||
FailPath = os.path.join(PlistPath, "failures");
|
||||
os.makedirs(FailPath);
|
||||
|
@ -287,7 +290,7 @@ def runAnalyzePreprocessed(Dir, SBOutputDir):
|
|||
if Failed == False:
|
||||
os.remove(LogFile.name);
|
||||
|
||||
def buildProject(Dir, SBOutputDir, IsScanBuild, IsReferenceBuild):
|
||||
def buildProject(Dir, SBOutputDir, ProjectBuildMode, IsReferenceBuild):
|
||||
TBegin = time.time()
|
||||
|
||||
BuildLogPath = os.path.join(SBOutputDir, LogFolderName, BuildLogName)
|
||||
|
@ -317,10 +320,10 @@ def buildProject(Dir, SBOutputDir, IsScanBuild, IsReferenceBuild):
|
|||
try:
|
||||
runCleanupScript(Dir, PBuildLogFile)
|
||||
|
||||
if IsScanBuild:
|
||||
if (ProjectBuildMode == 1):
|
||||
runScanBuild(Dir, SBOutputDir, PBuildLogFile)
|
||||
else:
|
||||
runAnalyzePreprocessed(Dir, SBOutputDir)
|
||||
runAnalyzePreprocessed(Dir, SBOutputDir, ProjectBuildMode)
|
||||
|
||||
if IsReferenceBuild :
|
||||
runCleanupScript(Dir, PBuildLogFile)
|
||||
|
@ -474,7 +477,7 @@ def updateSVN(Mode, ProjectsMap):
|
|||
print "Error: SVN update failed."
|
||||
sys.exit(-1)
|
||||
|
||||
def testProject(ID, IsScanBuild, IsReferenceBuild=False, Dir=None):
|
||||
def testProject(ID, ProjectBuildMode, IsReferenceBuild=False, Dir=None):
|
||||
print " \n\n--- Building project %s" % (ID,)
|
||||
|
||||
TBegin = time.time()
|
||||
|
@ -488,7 +491,7 @@ def testProject(ID, IsScanBuild, IsReferenceBuild=False, Dir=None):
|
|||
RelOutputDir = getSBOutputDirName(IsReferenceBuild)
|
||||
SBOutputDir = os.path.join(Dir, RelOutputDir)
|
||||
|
||||
buildProject(Dir, SBOutputDir, IsScanBuild, IsReferenceBuild)
|
||||
buildProject(Dir, SBOutputDir, ProjectBuildMode, IsReferenceBuild)
|
||||
|
||||
checkBuild(SBOutputDir)
|
||||
|
||||
|
@ -506,8 +509,9 @@ def testAll(IsReferenceBuild = False, UpdateSVN = False):
|
|||
if (len(I) != 2) :
|
||||
print "Error: Rows in the ProjectMapFile should have 3 entries."
|
||||
raise Exception()
|
||||
if (not ((I[1] == "1") | (I[1] == "0"))):
|
||||
print "Error: Second entry in the ProjectMapFile should be 0 or 1."
|
||||
if (not ((I[1] == "0") | (I[1] == "1") | (I[1] == "2"))):
|
||||
print "Error: Second entry in the ProjectMapFile should be 0" \
|
||||
" (single file), 1 (project), or 2(single file c++11)."
|
||||
raise Exception()
|
||||
|
||||
# When we are regenerating the reference results, we might need to
|
||||
|
|
Загрузка…
Ссылка в новой задаче