#===----------------------------------------------------------------------===##
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#
#===----------------------------------------------------------------------===##

"""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())
