]> granicus.if.org Git - clang/commitdiff
ccc: Give nicer error when spawning a subprocess fails.
authorDaniel Dunbar <daniel@zuster.org>
Thu, 19 Feb 2009 22:59:57 +0000 (22:59 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 19 Feb 2009 22:59:57 +0000 (22:59 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65075 91177308-0d34-0410-b5e6-96231b3b80d8

tools/ccc/ccclib/Driver.py

index 43e145b9dbe5e635e15be531930acef9107d8c44..fb69193be873dfd38f1d44779e4480ccef6ee231 100644 (file)
@@ -1,5 +1,6 @@
 import os
 import platform
+import subprocess
 import sys
 import tempfile
 from pprint import pprint
@@ -224,11 +225,12 @@ class Driver(object):
                 if vArg or self.cccEcho:
                     print >>sys.stderr, ' '.join(map(str,j.getArgv()))
                     sys.stderr.flush()
-                res = os.spawnvp(os.P_WAIT, j.executable, j.getArgv())
+                p = self.startSubprocess(j.getArgv(), j.executable)
+                res = p.wait()
                 if res:
                     sys.exit(res)
+
             elif isinstance(j, Jobs.PipedJob):
-                import subprocess
                 procs = []
                 for sj in j.commands:
                     if vArg or self.cccEcho:
@@ -243,10 +245,11 @@ class Driver(object):
                         stdout = None
                     else:
                         stdout = subprocess.PIPE
-                    procs.append(subprocess.Popen(sj.getArgv(), 
-                                                  executable=sj.executable,
-                                                  stdin=stdin,
-                                                  stdout=stdout))
+
+                    procs.append(self.startSubprocess(sj.getArgv(), sj.executable,
+                                                      stdin=stdin,
+                                                      stdout=stdout))
+
                 for proc in procs:
                     res = proc.wait()
                     if res:
@@ -254,6 +257,14 @@ class Driver(object):
             else:
                 raise ValueError,'Encountered unknown job.'
 
+    def startSubprocess(self, argv, executable, **kwargs):
+        try:
+            return subprocess.Popen(argv, executable=executable, **kwargs)
+        except OSError, e:
+            self.warning("error trying to exec '%s': %s" % 
+                         (executable, e.args[1]))
+            sys.exit(1)
+
     def claim(self, option):
         # FIXME: Move to OptionList once introduced and implement.
         pass