From ef250ced1b7c6a96850aee3a37f1f336e1daa1a8 Mon Sep 17 00:00:00 2001 From: Roland Dobai Date: Fri, 22 Feb 2019 16:07:26 +0100 Subject: [PATCH] tools: re-run idf.py in MSYS with winpty This is done in order to cancel subprocesses on keyboard interrupt (CTRL+C). --- tools/idf.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tools/idf.py b/tools/idf.py index 2d31d6671..af3fc1f29 100755 --- a/tools/idf.py +++ b/tools/idf.py @@ -560,7 +560,20 @@ def main(): if __name__ == "__main__": try: - main() + # On MSYS2 we need to run idf.py with "winpty" in order to be able to cancel the subprocesses properly on + # keyboard interrupt (CTRL+C). + # Using an own global variable for indicating that we are running with "winpty" seems to be the most suitable + # option as os.environment['_'] contains "winpty" only when it is run manually from console. + WINPTY_VAR = 'WINPTY' + WINPTY_EXE = 'winpty' + if ('MSYSTEM' in os.environ) and (not os.environ['_'].endswith(WINPTY_EXE) and WINPTY_VAR not in os.environ): + os.environ[WINPTY_VAR] = '1' # the value is of no interest to us + # idf.py calls itself with "winpty" and WINPTY global variable set + ret = subprocess.call([WINPTY_EXE, sys.executable] + sys.argv, env=os.environ) + if ret: + raise SystemExit(ret) + else: + main() except FatalError as e: print(e) sys.exit(2)