From 11ad487f816a0c2b330bf14563fa69115c01f97c Mon Sep 17 00:00:00 2001 From: Robin De Schepper <robin.deschepper93@gmail.com> Date: Thu, 7 Oct 2021 13:51:37 +0200 Subject: [PATCH] Write build-catalogue (c)make errors to `stdout` and `stderr` (#1679) --- scripts/build-catalogue.in | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/scripts/build-catalogue.in b/scripts/build-catalogue.in index 5c7ed2ba..da5e058c 100755 --- a/scripts/build-catalogue.in +++ b/scripts/build-catalogue.in @@ -145,9 +145,32 @@ with TemporaryDirectory() as tmp: if verbose: out, err = (None, None) else: - out, err = (sp.DEVNULL, sp.DEVNULL) - sp.run('cmake ..', shell=True, check=True, stdout=out, stderr=err) - sp.run('make', shell=True, check=True, stdout=out, stderr=err) - shutil.copy2(f'{name}-catalogue.so', pwd) + out, err = (sp.PIPE, sp.PIPE) + try: + sp.run('cmake ..', shell=True, check=True, stdout=out, stderr=err) + sp.run('make', shell=True, check=True, stdout=out, stderr=err) + shutil.copy2(f'{name}-catalogue.so', pwd) + except sp.CalledProcessError as e: + import sys, traceback as tb + + if not verbose: + # Not in verbose mode, so we have captured the + # `stdout` and `stderr` and can print it to the user. + sys.stdout.write("Build log:\n") + sys.stdout.write(e.stdout.decode()) + sys.stderr.write(tb.format_exc() + " Error:\n\n") + sys.stderr.write(e.stderr.decode()) + else: + # In verbose mode the outputs weren't captured and + # have been streamed to `stdout` and `stderr` already. + sys.stderr.write( + "Catalogue building error occurred." + + " Check stdout log for underlying error," + + " or omit verbose flag to capture it." + ) + sys.stdout.flush() + sys.stderr.flush() + exit(e.returncode) + if not quiet: print(f'Catalogue has been built and copied to {pwd}/{name}-catalogue.so') -- GitLab