import os from subprocess import check_output, check_call import sys Verbose = 1 def which(command, paths=None): """which(command, [paths]) - Look up the given command in the paths string (or the PATH environment variable, if unspecified).""" if paths is None: paths = os.environ.get('PATH', '') # Check for absolute match first. if os.path.exists(command): return command # Would be nice if Python had a lib function for this. if not paths: paths = os.defpath # Get suffixes to search. # On Cygwin, 'PATHEXT' may exist but it should not be used. if os.pathsep == ';': pathext = os.environ.get('PATHEXT', '').split(';') else: pathext = [''] # Search the paths... for path in paths.split(os.pathsep): for ext in pathext: p = os.path.join(path, command + ext) if os.path.exists(p): return p return None def hasNoExtension(FileName): (Root, Ext) = os.path.splitext(FileName) return (Ext == "") def isValidSingleInputFile(FileName): (Root, Ext) = os.path.splitext(FileName) return Ext in (".i", ".ii", ".c", ".cpp", ".m", "") def getSDKPath(SDKName): """ Get the path to the SDK for the given SDK name. Returns None if the path cannot be determined. """ if which("xcrun") is None: return None Cmd = "xcrun --sdk " + SDKName + " --show-sdk-path" return check_output(Cmd, shell=True).rstrip() def runScript(ScriptPath, PBuildLogFile, Cwd, Stdout=sys.stdout, Stderr=sys.stderr): """ Run the provided script if it exists. """ if os.path.exists(ScriptPath): try: if Verbose == 1: Stdout.write(" Executing: %s\n" % (ScriptPath,)) check_call("chmod +x '%s'" % ScriptPath, cwd=Cwd, stderr=PBuildLogFile, stdout=PBuildLogFile, shell=True) check_call("'%s'" % ScriptPath, cwd=Cwd, stderr=PBuildLogFile, stdout=PBuildLogFile, shell=True) except: Stderr.write("Error: Running %s failed. See %s for details.\n" % ( ScriptPath, PBuildLogFile.name)) sys.exit(-1) def isCommentCSVLine(Entries): """ Treat CSV lines starting with a '#' as a comment. """ return len(Entries) > 0 and Entries[0].startswith("#")