8a283325d4
For some reason the CMake output to Python is missing, no matter how hard I try. Use an alternative approach instead where Python executes CMake and filters the output without relying on pipes in Bash. Change-Id: I21b8b709c3a944fbd3b07e7fac59702735dd83a4 Reviewed-on: https://code.wireshark.org/review/32628 Reviewed-by: Peter Wu <peter@lekensteyn.nl> Reviewed-by: Dario Lombardo <lomato@gmail.com>
66 lines
1.8 KiB
Python
Executable file
66 lines
1.8 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# Reduce msbuild output by folding unimportant messages.
|
|
#
|
|
# Copyright (C) 2019 Peter Wu <peter@lekensteyn.nl>
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
def print_lines(f):
|
|
# If an important message is present, print it with a newline.
|
|
# Otherwise skip the newline but print the next line with a carriage return.
|
|
# If the end of build is reached, just print the trailing messages (includes
|
|
# elapsed time, warning/error counts, etc.).
|
|
|
|
start_of_line = ''
|
|
end_of_build = False
|
|
for line in iter(f.readline, ''):
|
|
line = line.rstrip('\r\n')
|
|
|
|
if line.startswith('Build succeeded.'):
|
|
end_of_build = True
|
|
is_important = end_of_build or any([
|
|
': error ' in line,
|
|
': warning ' in line,
|
|
'-- FAILED.' in line,
|
|
])
|
|
|
|
if is_important:
|
|
eol = '\n'
|
|
if start_of_line == '\r':
|
|
start_of_line = '\n'
|
|
else:
|
|
eol = ''
|
|
|
|
sys.stdout.write("%s%s%s" % (start_of_line, line, eol))
|
|
sys.stdout.flush()
|
|
|
|
if is_important:
|
|
start_of_line = ''
|
|
else:
|
|
start_of_line = '\r'
|
|
|
|
# If the last line was not important, its LF was omitted so print it.
|
|
if not is_important:
|
|
sys.stdout.write('\n')
|
|
|
|
|
|
command = sys.argv[1:]
|
|
if command:
|
|
# Execute the given command and parse its output.
|
|
proc = subprocess.Popen(command,
|
|
bufsize=1,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.STDOUT,
|
|
universal_newlines=True
|
|
)
|
|
try:
|
|
print_lines(proc.stdout)
|
|
finally:
|
|
sys.exit(proc.wait())
|
|
else:
|
|
# Assume a file read from stdin.
|
|
print_lines(sys.stdin)
|