blob: d9ceb8515d03670d6233650f007ca810a90c95cd [file] [log] [blame]
Eric Fiseliera9e91f32016-01-19 21:58:49 +00001#===----------------------------------------------------------------------===##
2#
3# The LLVM Compiler Infrastructure
4#
5# This file is dual licensed under the MIT and the University of Illinois Open
6# Source Licenses. See LICENSE.TXT for details.
7#
8#===----------------------------------------------------------------------===##
9
Eric Fiselierdd7a4832015-01-22 18:05:58 +000010"""not.py is a utility for inverting the return code of commands.
11It acts similar to llvm/utils/not.
12ex: python /path/to/not.py ' echo hello
13 echo $? // (prints 1)
14"""
15
16import distutils.spawn
17import subprocess
18import sys
19
20
21def main():
22 argv = list(sys.argv)
23 del argv[0]
24 if len(argv) > 0 and argv[0] == '--crash':
25 del argv[0]
26 expectCrash = True
27 else:
28 expectCrash = False
29 if len(argv) == 0:
30 return 1
31 prog = distutils.spawn.find_executable(argv[0])
32 if prog is None:
33 sys.stderr.write('Failed to find program %s' % argv[0])
34 return 1
35 rc = subprocess.call(argv)
36 if rc < 0:
37 return 0 if expectCrash else 1
38 if expectCrash:
39 return 1
40 return rc == 0
41
42
43if __name__ == '__main__':
44 exit(main())