diff options
Diffstat (limited to 'clang/utils/analyzer/SATestAdd.py')
| -rwxr-xr-x | clang/utils/analyzer/SATestAdd.py | 80 | 
1 files changed, 80 insertions, 0 deletions
| diff --git a/clang/utils/analyzer/SATestAdd.py b/clang/utils/analyzer/SATestAdd.py new file mode 100755 index 0000000..ce64bc8 --- /dev/null +++ b/clang/utils/analyzer/SATestAdd.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python + +""" +Static Analyzer qualification infrastructure: adding a new project to  +the Repository Directory. + + Add a new project for testing: build it and add to the Project Map file. +   Assumes it's being run from the Repository Directory. +   The project directory should be added inside the Repository Directory and  +   have the same name as the project ID +    + The project should use the following files for set up: +      - pre_run_static_analyzer.sh - prepare the build environment. +                                     Ex: make clean can be a part of it. +      - run_static_analyzer.cmd - a list of commands to run through scan-build. +                                     Each command should be on a separate line. +                                     Choose from: configure, make, xcodebuild  +""" +import SATestBuild + +import os +import csv +import sys + +def isExistingProject(PMapFile, projectID) : +    PMapReader = csv.reader(PMapFile) +    for I in PMapReader: +        if projectID == I[0]: +            return True +    return False     + +# Add a new project for testing: build it and add to the Project Map file. +# Params: +#   Dir is the directory where the sources are. +#   ID is a short string used to identify a project. +def addNewProject(ID, IsScanBuild) : +    CurDir = os.path.abspath(os.curdir) +    Dir = SATestBuild.getProjectDir(ID) +    if not os.path.exists(Dir): +        print "Error: Project directory is missing: %s" % Dir +        sys.exit(-1) +         +    # Build the project. +    SATestBuild.testProject(ID, True, IsScanBuild, Dir) + +    # Add the project ID to the project map. +    ProjectMapPath = os.path.join(CurDir, SATestBuild.ProjectMapFile) +    if os.path.exists(ProjectMapPath): +        PMapFile = open(ProjectMapPath, "r+b") +    else: +        print "Warning: Creating the Project Map file!!" +        PMapFile = open(ProjectMapPath, "w+b") +    try: +        if (isExistingProject(PMapFile, ID)) :         +            print >> sys.stdout, 'Warning: Project with ID \'', ID, \ +                                 '\' already exists.' +            print >> sys.stdout, "Reference output has been regenerated." +        else:                      +            PMapWriter = csv.writer(PMapFile) +            PMapWriter.writerow( (ID, int(IsScanBuild)) ); +            print "The project map is updated: ", ProjectMapPath +    finally: +        PMapFile.close() +             + +# TODO: Add an option not to build.  +# TODO: Set the path to the Repository directory. +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' +        sys.exit(-1) +     +    IsScanBuild = 1     +    if (len(sys.argv) >= 3): +        IsScanBuild = int(sys.argv[2])   +    assert((IsScanBuild == 0) | (IsScanBuild == 1)) +         +    addNewProject(sys.argv[1], IsScanBuild) | 
