mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-15 19:24:33 +00:00
Add 'lit' testing tool.
- make install && man $(llvm-config --prefix)/share/man/man1/lit.1 for more information. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81190 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
86
utils/lit/ShCommands.py
Normal file
86
utils/lit/ShCommands.py
Normal file
@@ -0,0 +1,86 @@
|
||||
import ShUtil
|
||||
|
||||
class Command:
|
||||
def __init__(self, args, redirects):
|
||||
self.args = list(args)
|
||||
self.redirects = list(redirects)
|
||||
|
||||
def __repr__(self):
|
||||
return 'Command(%r, %r)' % (self.args, self.redirects)
|
||||
|
||||
def __cmp__(self, other):
|
||||
if not isinstance(other, Command):
|
||||
return -1
|
||||
|
||||
return cmp((self.args, self.redirects),
|
||||
(other.args, other.redirects))
|
||||
|
||||
def toShell(self, file):
|
||||
for arg in self.args:
|
||||
if "'" not in arg:
|
||||
quoted = "'%s'" % arg
|
||||
elif '"' not in arg and '$' not in arg:
|
||||
quoted = '"%s"' % arg
|
||||
else:
|
||||
raise NotImplementedError,'Unable to quote %r' % arg
|
||||
print >>file, quoted,
|
||||
|
||||
# For debugging / validation.
|
||||
dequoted = list(ShUtil.ShLexer(quoted).lex())
|
||||
if dequoted != [arg]:
|
||||
raise NotImplementedError,'Unable to quote %r' % arg
|
||||
|
||||
for r in self.redirects:
|
||||
if len(r[0]) == 1:
|
||||
print >>file, "%s '%s'" % (r[0][0], r[1]),
|
||||
else:
|
||||
print >>file, "%s%s '%s'" % (r[0][1], r[0][0], r[1]),
|
||||
|
||||
class Pipeline:
|
||||
def __init__(self, commands, negate=False, pipe_err=False):
|
||||
self.commands = commands
|
||||
self.negate = negate
|
||||
self.pipe_err = pipe_err
|
||||
|
||||
def __repr__(self):
|
||||
return 'Pipeline(%r, %r, %r)' % (self.commands, self.negate,
|
||||
self.pipe_err)
|
||||
|
||||
def __cmp__(self, other):
|
||||
if not isinstance(other, Pipeline):
|
||||
return -1
|
||||
|
||||
return cmp((self.commands, self.negate, self.pipe_err),
|
||||
(other.commands, other.negate, self.pipe_err))
|
||||
|
||||
def toShell(self, file, pipefail=False):
|
||||
if pipefail != self.pipe_err:
|
||||
raise ValueError,'Inconsistent "pipefail" attribute!'
|
||||
if self.negate:
|
||||
print >>file, '!',
|
||||
for cmd in self.commands:
|
||||
cmd.toShell(file)
|
||||
if cmd is not self.commands[-1]:
|
||||
print >>file, '|\n ',
|
||||
|
||||
class Seq:
|
||||
def __init__(self, lhs, op, rhs):
|
||||
assert op in (';', '&', '||', '&&')
|
||||
self.op = op
|
||||
self.lhs = lhs
|
||||
self.rhs = rhs
|
||||
|
||||
def __repr__(self):
|
||||
return 'Seq(%r, %r, %r)' % (self.lhs, self.op, self.rhs)
|
||||
|
||||
def __cmp__(self, other):
|
||||
if not isinstance(other, Seq):
|
||||
return -1
|
||||
|
||||
return cmp((self.lhs, self.op, self.rhs),
|
||||
(other.lhs, other.op, other.rhs))
|
||||
|
||||
def toShell(self, file, pipefail=False):
|
||||
self.lhs.toShell(file, pipefail)
|
||||
print >>file, ' %s\n' % self.op
|
||||
self.rhs.toShell(file, pipefail)
|
Reference in New Issue
Block a user