|  | #===----------------------------------------------------------------------===## | 
|  | # | 
|  | #                     The LLVM Compiler Infrastructure | 
|  | # | 
|  | # This file is dual licensed under the MIT and the University of Illinois Open | 
|  | # Source Licenses. See LICENSE.TXT for details. | 
|  | # | 
|  | #===----------------------------------------------------------------------===## | 
|  |  | 
|  | """not.py is a utility for inverting the return code of commands. | 
|  | It acts similar to llvm/utils/not. | 
|  | ex: python /path/to/not.py ' echo hello | 
|  | echo $? // (prints 1) | 
|  | """ | 
|  |  | 
|  | import distutils.spawn | 
|  | import subprocess | 
|  | import sys | 
|  |  | 
|  |  | 
|  | def main(): | 
|  | argv = list(sys.argv) | 
|  | del argv[0] | 
|  | if len(argv) > 0 and argv[0] == '--crash': | 
|  | del argv[0] | 
|  | expectCrash = True | 
|  | else: | 
|  | expectCrash = False | 
|  | if len(argv) == 0: | 
|  | return 1 | 
|  | prog = distutils.spawn.find_executable(argv[0]) | 
|  | if prog is None: | 
|  | sys.stderr.write('Failed to find program %s' % argv[0]) | 
|  | return 1 | 
|  | rc = subprocess.call(argv) | 
|  | if rc < 0: | 
|  | return 0 if expectCrash else 1 | 
|  | if expectCrash: | 
|  | return 1 | 
|  | return rc == 0 | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | exit(main()) |