From 0d71baba74e2009e88471e2c44e78863b34a5817 Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Wed, 17 Dec 2014 11:10:33 -0500
Subject: [PATCH] Produce error message, not traceback, when test program
 doesn't build. A traceback from a Python script always makes people think
 there's a bug in your script. Even when a test program fails to build, CMake
 often (always?) tries to run it anyway, via our run_build_test.py script. For
 that case, produce a straightforward error message -- rather than an OSError
 traceback that doesn't even mention the program name!

---
 indra/cmake/run_build_test.py | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/indra/cmake/run_build_test.py b/indra/cmake/run_build_test.py
index a2ef61c8fd5..582185e5ab6 100755
--- a/indra/cmake/run_build_test.py
+++ b/indra/cmake/run_build_test.py
@@ -46,6 +46,7 @@
 
 import os
 import sys
+import errno
 import signal
 import subprocess
 
@@ -112,7 +113,23 @@ def main(command, libpath=[], vars={}):
     print "Running: %s" % " ".join(command)
     # Make sure we see all relevant output *before* child-process output.
     sys.stdout.flush()
-    return subprocess.call(command)
+    try:
+        return subprocess.call(command)
+    except OSError as err:
+        # If the caller is trying to execute a test program that doesn't
+        # exist, we want to produce a reasonable error message rather than a
+        # traceback. This happens when the build is halted by errors, but
+        # CMake tries to proceed with testing anyway <eyeroll/>. However, do
+        # NOT attempt to handle any error but "doesn't exist."
+        if err.errno != errno.ENOENT:
+            raise
+        # In practice, the pathnames into CMake's build tree are so long as to
+        # obscure the name of the test program. Just print its basename.
+        print "No such program %s; check for preceding build errors" % \
+              os.path.basename(command[0])
+        # What rc should we simulate for missing executable? Windows produces
+        # 9009.
+        return 9009
 
 # swiped from vita, sigh, seems like a Bad Idea to introduce dependency
 def translate_rc(rc):
-- 
GitLab