Initial version of public stable barrelfish repository.
[barrelfish] / tools / harness / debug.py
1 ##########################################################################
2 # Copyright (c) 2009-2011, ETH Zurich.
3 # All rights reserved.
4 #
5 # This file is distributed under the terms in the attached LICENSE file.
6 # If you do not find this file, copies can be found by writing to:
7 # ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
8 ##########################################################################
9
10 import subprocess, os, sys
11
12 QUIET   = 0
13 NORMAL  = 1
14 VERBOSE = 2
15 DEBUG   = 3
16
17 current_level = NORMAL
18
19 def message(level, message):
20     if level <= current_level:
21         sys.stdout.write(message + '\n')
22         sys.stdout.flush()
23
24 def warning(s):
25     message(QUIET, 'Warning: ' + s)
26
27 def error(s):
28     message(QUIET, 'Error: ' + s)
29
30 def log(s):
31     message(NORMAL, s)
32
33 def verbose(s):
34     message(VERBOSE, s)
35
36 def debug(s):
37     message(DEBUG, s)
38
39 def checkcmd(*args, **kwargs):
40     """Run a command as with subprocess.check_call, but either discard or
41     display the output, depending on the current debug level."""
42
43     # display verbose message saying what we do
44     verbose('executing ' + ' '.join(args[0]))
45
46     # if non-debug mode, discard stdout
47     # if non-verbose mode, discard stderr as well (hides noise from cmake etc.)
48     devnull = None
49     if current_level < VERBOSE:
50         devnull = open(os.devnull, 'w')
51         kwargs['stderr'] = devnull
52         if current_level < DEBUG:
53             kwargs['stdout'] = devnull
54
55     subprocess.check_call(*args, **kwargs)
56
57     if devnull:
58         devnull.close()
59
60 def addopts(p, dest):
61     p.add_option('-q', '--quiet', action='store_const', dest=dest, const=QUIET,
62                  help='quiet output, only error messages and warnings')
63     p.add_option('-v', '--verbose', action='store_const', dest=dest,
64                  const=VERBOSE, help='more verbose output')
65     p.add_option('--debug', action='store_const', dest=dest, const=DEBUG,
66                  help='debug output, results of all commands')