blob: d6d4ddddc59a9ec08377b7104830f998c4c1e929 [file] [log] [blame]
akmhoquefa8ee9b2014-03-14 09:06:24 -05001#! /usr/bin/env python
2# encoding: utf-8
3# WARNING! Do not edit! http://waf.googlecode.com/git/docs/wafbook/single.html#_obtaining_the_waf_file
4
5import os,re,traceback,sys
6try:
7 import threading
8except ImportError:
9 pass
10else:
11 wlock=threading.Lock()
12 class sync_stream(object):
13 def __init__(self,stream):
14 self.stream=stream
15 self.encoding=self.stream.encoding
16 def write(self,txt):
17 try:
18 wlock.acquire()
19 self.stream.write(txt)
20 self.stream.flush()
21 finally:
22 wlock.release()
23 def fileno(self):
24 return self.stream.fileno()
25 def flush(self):
26 self.stream.flush()
27 def isatty(self):
28 return self.stream.isatty()
29 _nocolor=os.environ.get('NOCOLOR','no')not in('no','0','false')
30 try:
31 if not _nocolor:
32 import waflib.ansiterm
33 except ImportError:
34 pass
35 if not os.environ.get('NOSYNC',False):
36 if id(sys.stdout)==id(sys.__stdout__):
37 sys.stdout=sync_stream(sys.stdout)
38 sys.stderr=sync_stream(sys.stderr)
39import logging
40LOG_FORMAT="%(asctime)s %(c1)s%(zone)s%(c2)s %(message)s"
41HOUR_FORMAT="%H:%M:%S"
42zones=''
43verbose=0
44colors_lst={'USE':True,'BOLD':'\x1b[01;1m','RED':'\x1b[01;31m','GREEN':'\x1b[32m','YELLOW':'\x1b[33m','PINK':'\x1b[35m','BLUE':'\x1b[01;34m','CYAN':'\x1b[36m','NORMAL':'\x1b[0m','cursor_on':'\x1b[?25h','cursor_off':'\x1b[?25l',}
45got_tty=not os.environ.get('TERM','dumb')in['dumb','emacs']
46if got_tty:
47 try:
48 got_tty=sys.stderr.isatty()and sys.stdout.isatty()
49 except AttributeError:
50 got_tty=False
51if(not got_tty and os.environ.get('TERM','dumb')!='msys')or _nocolor:
52 colors_lst['USE']=False
53def get_term_cols():
54 return 80
55try:
56 import struct,fcntl,termios
57except ImportError:
58 pass
59else:
60 if got_tty:
61 def get_term_cols_real():
62 dummy_lines,cols=struct.unpack("HHHH",fcntl.ioctl(sys.stderr.fileno(),termios.TIOCGWINSZ,struct.pack("HHHH",0,0,0,0)))[:2]
63 return cols
64 try:
65 get_term_cols_real()
66 except Exception:
67 pass
68 else:
69 get_term_cols=get_term_cols_real
70get_term_cols.__doc__="""
71 Get the console width in characters.
72
73 :return: the number of characters per line
74 :rtype: int
75 """
76def get_color(cl):
77 if not colors_lst['USE']:return''
78 return colors_lst.get(cl,'')
79class color_dict(object):
80 def __getattr__(self,a):
81 return get_color(a)
82 def __call__(self,a):
83 return get_color(a)
84colors=color_dict()
85re_log=re.compile(r'(\w+): (.*)',re.M)
86class log_filter(logging.Filter):
87 def __init__(self,name=None):
88 pass
89 def filter(self,rec):
90 rec.c1=colors.PINK
91 rec.c2=colors.NORMAL
92 rec.zone=rec.module
93 if rec.levelno>=logging.INFO:
94 if rec.levelno>=logging.ERROR:
95 rec.c1=colors.RED
96 elif rec.levelno>=logging.WARNING:
97 rec.c1=colors.YELLOW
98 else:
99 rec.c1=colors.GREEN
100 return True
101 m=re_log.match(rec.msg)
102 if m:
103 rec.zone=m.group(1)
104 rec.msg=m.group(2)
105 if zones:
106 return getattr(rec,'zone','')in zones or'*'in zones
107 elif not verbose>2:
108 return False
109 return True
110class formatter(logging.Formatter):
111 def __init__(self):
112 logging.Formatter.__init__(self,LOG_FORMAT,HOUR_FORMAT)
113 def format(self,rec):
114 if rec.levelno>=logging.WARNING or rec.levelno==logging.INFO:
115 try:
116 msg=rec.msg.decode('utf-8')
117 except Exception:
118 msg=rec.msg
119 return'%s%s%s'%(rec.c1,msg,rec.c2)
120 return logging.Formatter.format(self,rec)
121log=None
122def debug(*k,**kw):
123 if verbose:
124 k=list(k)
125 k[0]=k[0].replace('\n',' ')
126 global log
127 log.debug(*k,**kw)
128def error(*k,**kw):
129 global log
130 log.error(*k,**kw)
131 if verbose>2:
132 st=traceback.extract_stack()
133 if st:
134 st=st[:-1]
135 buf=[]
136 for filename,lineno,name,line in st:
137 buf.append(' File "%s", line %d, in %s'%(filename,lineno,name))
138 if line:
139 buf.append(' %s'%line.strip())
140 if buf:log.error("\n".join(buf))
141def warn(*k,**kw):
142 global log
143 log.warn(*k,**kw)
144def info(*k,**kw):
145 global log
146 log.info(*k,**kw)
147def init_log():
148 global log
149 log=logging.getLogger('waflib')
150 log.handlers=[]
151 log.filters=[]
152 hdlr=logging.StreamHandler()
153 hdlr.setFormatter(formatter())
154 log.addHandler(hdlr)
155 log.addFilter(log_filter())
156 log.setLevel(logging.DEBUG)
157def make_logger(path,name):
158 logger=logging.getLogger(name)
159 hdlr=logging.FileHandler(path,'w')
160 formatter=logging.Formatter('%(message)s')
161 hdlr.setFormatter(formatter)
162 logger.addHandler(hdlr)
163 logger.setLevel(logging.DEBUG)
164 return logger
165def make_mem_logger(name,to_log,size=10000):
166 from logging.handlers import MemoryHandler
167 logger=logging.getLogger(name)
168 hdlr=MemoryHandler(size,target=to_log)
169 formatter=logging.Formatter('%(message)s')
170 hdlr.setFormatter(formatter)
171 logger.addHandler(hdlr)
172 logger.memhandler=hdlr
173 logger.setLevel(logging.DEBUG)
174 return logger
175def pprint(col,str,label='',sep='\n'):
176 sys.stderr.write("%s%s%s %s%s"%(colors(col),str,colors.NORMAL,label,sep))