Add a patch to help many systems terminate on interrupt. (Michael Cook)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 7 Feb 2003 17:38:08 +0000 (17:38 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 7 Feb 2003 17:38:08 +0000 (17:38 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@577 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/CHANGES.txt
src/RELEASE.txt
src/engine/SCons/Platform/posix.py

index 9f45dbd58eddb44a90e6623b3ffa35d4185e1832..6ae86ec2fe51388a1533a5979651a3da1cb8369c 100644 (file)
@@ -16,6 +16,11 @@ RELEASE 0.11 - XXX
 
   - Support using the MSVC tool chain when running Cygwin Python.
 
+  From Michael Cook:
+
+  - Avoid losing signal bits in the exit status from a command,
+    helping terminate builds on interrupt (CTRL+C).
+
   From Charles Crain:
 
   - Added new AddPreAction() and AddPostAction() functions that support
index f6fef164eb17ed354b4e8f43f613039f3d897df0..6e76dd617fa90f38c4fe7f70968df556c83b4e90 100644 (file)
@@ -196,6 +196,13 @@ RELEASE 0.10 - Thu, 16 Jan 2003 04:11:46 -0600
       If you don't supply a space (for example, "<$SOURCE"), SCons will
       not recognize the redirection.
 
+    - People have reported problems with SCons not stopping a build when
+      an interrupt (CTRL+C) is received.  A fix was checked in to 0.11
+      that should fix this behavior on many systems, but there are
+      issues with the underlying Python os.system() call that suggest
+      this fix does not work on all systems or in all circumstances.
+      We're working to try to find a universal solution.
+
     - Executing the -u or -U option from a source directory that has an
       associated BuildDir() does not build the targets in the BuildDir().
 
index 4fb0cd8243417972d0901fef266ca9c645b8d697..777b928979d956a28719ff07fcfe70121e777b57 100644 (file)
@@ -59,7 +59,10 @@ def env_spawn(sh, escape, cmd, args, env):
     else:
         s = string.join(args)
 
-    return os.system(s) >> 8
+    stat = os.system(s)
+    if stat & 0xff:
+        return stat | 0x80
+    return stat >> 8
 
 def fork_spawn(sh, escape, cmd, args, env):
     pid = os.fork()
@@ -76,8 +79,9 @@ def fork_spawn(sh, escape, cmd, args, env):
     else:
         # Parent process.
         pid, stat = os.waitpid(pid, 0)
-        ret = stat >> 8
-        return ret
+        if stat & 0xff:
+            return stat | 0x80
+        return stat >> 8
             
 def generate(env):