]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - utils/analyzer/SATestUtils.py
Vendor import of clang trunk r338150:
[FreeBSD/FreeBSD.git] / utils / analyzer / SATestUtils.py
1 import os
2 from subprocess import check_output, check_call
3 import sys
4
5
6 Verbose = 1
7
8 def which(command, paths=None):
9     """which(command, [paths]) - Look up the given command in the paths string
10     (or the PATH environment variable, if unspecified)."""
11
12     if paths is None:
13         paths = os.environ.get('PATH', '')
14
15     # Check for absolute match first.
16     if os.path.exists(command):
17         return command
18
19     # Would be nice if Python had a lib function for this.
20     if not paths:
21         paths = os.defpath
22
23     # Get suffixes to search.
24     # On Cygwin, 'PATHEXT' may exist but it should not be used.
25     if os.pathsep == ';':
26         pathext = os.environ.get('PATHEXT', '').split(';')
27     else:
28         pathext = ['']
29
30     # Search the paths...
31     for path in paths.split(os.pathsep):
32         for ext in pathext:
33             p = os.path.join(path, command + ext)
34             if os.path.exists(p):
35                 return p
36
37     return None
38
39
40 def hasNoExtension(FileName):
41     (Root, Ext) = os.path.splitext(FileName)
42     return (Ext == "")
43
44
45 def isValidSingleInputFile(FileName):
46     (Root, Ext) = os.path.splitext(FileName)
47     return Ext in (".i", ".ii", ".c", ".cpp", ".m", "")
48
49
50 def getSDKPath(SDKName):
51     """
52     Get the path to the SDK for the given SDK name. Returns None if
53     the path cannot be determined.
54     """
55     if which("xcrun") is None:
56         return None
57
58     Cmd = "xcrun --sdk " + SDKName + " --show-sdk-path"
59     return check_output(Cmd, shell=True).rstrip()
60
61
62 def runScript(ScriptPath, PBuildLogFile, Cwd, Stdout=sys.stdout,
63               Stderr=sys.stderr):
64     """
65     Run the provided script if it exists.
66     """
67     if os.path.exists(ScriptPath):
68         try:
69             if Verbose == 1:
70                 Stdout.write("  Executing: %s\n" % (ScriptPath,))
71             check_call("chmod +x '%s'" % ScriptPath, cwd=Cwd,
72                        stderr=PBuildLogFile,
73                        stdout=PBuildLogFile,
74                        shell=True)
75             check_call("'%s'" % ScriptPath, cwd=Cwd,
76                        stderr=PBuildLogFile,
77                        stdout=PBuildLogFile,
78                        shell=True)
79         except:
80             Stderr.write("Error: Running %s failed. See %s for details.\n" % (
81                          ScriptPath, PBuildLogFile.name))
82             sys.exit(-1)
83
84
85 def isCommentCSVLine(Entries):
86     """
87     Treat CSV lines starting with a '#' as a comment.
88     """
89     return len(Entries) > 0 and Entries[0].startswith("#")