build: use RUN_COMMAND() to wrap os.system()
authorAndrew Tridgell <tridge@samba.org>
Fri, 19 Mar 2010 03:25:50 +0000 (14:25 +1100)
committerAndrew Tridgell <tridge@samba.org>
Tue, 6 Apr 2010 10:26:53 +0000 (20:26 +1000)
buildtools/wafsamba/samba_utils.py
source4/selftest/wscript

index a5d42e4f7fbbd3e48d0a46dc877e0e8957155b2b..cb055043a7426fc3c5c31929731d92f2c685ea48 100644 (file)
@@ -296,3 +296,21 @@ def mkdir_p(dir):
         return
     mkdir_p(os.path.dirname(dir))
     os.mkdir(dir)
+
+
+def RUN_COMMAND(cmd,
+                env=None,
+                shell=False):
+    '''run a external command, return exit code or signal'''
+    # recursively expand variables
+    if env:
+        while cmd.find('${') != -1:
+            cmd = Utils.subst_vars(cmd, env)
+
+    status = os.system(cmd)
+    if os.WIFEXITED(status):
+        return os.WEXITSTATUS(status)
+    if os.WIFSIGNALED(status):
+        return - os.WTERMSIG(status)
+    print "Unknown exit reason %d for command: %s" (status, cmd)
+    return -1
index e1a59aceeded73bb08a17d47e62ebd91207dbb08..4fea799ecf87c9cccefcd4c634de9b2c8b63aa9c 100644 (file)
@@ -1,6 +1,7 @@
 # selftest main code.
 
 import Scripting, os, Options, Utils, Environment, optparse, sys
+from samba_utils import RUN_COMMAND
 
 def set_options(opt):
     opt.ADD_COMMAND('test', cmd_test)
@@ -70,14 +71,10 @@ def cmd_testonly(opt):
     if os.path.exists(st_done):
         os.unlink(st_done)
 
-    cmd = '(PYTHON=/usr/bin/python perl -W ../selftest/selftest.pl --prefix=./st --builddir=. --srcdir=. --exclude=./selftest/skip --testlist="./selftest/tests.sh|" ${OPTIONS} --socket-wrapper ${TESTS} && touch st/st_done) | ${FILTER_OPTIONS}'
-
-    # recursively expand variables
-    while cmd.find('${') != -1:
-        cmd = Utils.subst_vars(cmd, env)
+    cmd = '(PYTHON=/usr/bin/python perl -W ../selftest/selftest.pl --prefix=./st --builddir=. --srcdir=. --exclude=./selftest/skip --testlist="./selftest/tests.sh|" ${OPTIONS} --socket-wrapper ${TESTS} && touch st/st_done) | tee st/test.out | ${FILTER_OPTIONS}'
 
     print "test: running %s" % cmd
-    ret = os.system(cmd)
+    ret = RUN_COMMAND(cmd, env=env)
     if ret != 0:
         print("ERROR: test failed with exit code %d" % ret)
         sys.exit(ret)