3 # WARNING! Do not edit! http://waf.googlecode.com/git/docs/wafbook/single.html#_obtaining_the_waf_file
5 import os,re,traceback,sys
6 _nocolor=os.environ.get('NOCOLOR','no')not in('no','0','false')
15 if not'JOBS'in os.environ:
16 os.environ['JOBS']='1'
18 wlock=threading.Lock()
19 class sync_stream(object):
20 def __init__(self,stream):
22 self.encoding=self.stream.encoding
26 self.stream.write(txt)
31 return self.stream.fileno()
35 return self.stream.isatty()
36 if not os.environ.get('NOSYNC',False):
37 if id(sys.stdout)==id(sys.__stdout__):
38 sys.stdout=sync_stream(sys.stdout)
39 sys.stderr=sync_stream(sys.stderr)
41 LOG_FORMAT="%(asctime)s %(c1)s%(zone)s%(c2)s %(message)s"
42 HOUR_FORMAT="%H:%M:%S"
45 colors_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',}
46 got_tty=not os.environ.get('TERM','dumb')in['dumb','emacs']
49 got_tty=sys.stderr.isatty()and sys.stdout.isatty()
50 except AttributeError:
52 if(not got_tty and os.environ.get('TERM','dumb')!='msys')or _nocolor:
53 colors_lst['USE']=False
57 import struct,fcntl,termios
62 def get_term_cols_real():
63 dummy_lines,cols=struct.unpack("HHHH",fcntl.ioctl(sys.stderr.fileno(),termios.TIOCGWINSZ,struct.pack("HHHH",0,0,0,0)))[:2]
70 get_term_cols=get_term_cols_real
71 get_term_cols.__doc__="""
72 Get the console width in characters.
74 :return: the number of characters per line
78 if not colors_lst['USE']:return''
79 return colors_lst.get(cl,'')
80 class color_dict(object):
81 def __getattr__(self,a):
86 re_log=re.compile(r'(\w+): (.*)',re.M)
87 class log_filter(logging.Filter):
88 def __init__(self,name=None):
94 if rec.levelno>=logging.INFO:
95 if rec.levelno>=logging.ERROR:
97 elif rec.levelno>=logging.WARNING:
102 m=re_log.match(rec.msg)
107 return getattr(rec,'zone','')in zones or'*'in zones
111 class formatter(logging.Formatter):
113 logging.Formatter.__init__(self,LOG_FORMAT,HOUR_FORMAT)
114 def format(self,rec):
115 if rec.levelno>=logging.WARNING or rec.levelno==logging.INFO:
117 msg=rec.msg.decode('utf-8')
120 return'%s%s%s'%(rec.c1,msg,rec.c2)
121 return logging.Formatter.format(self,rec)
126 k[0]=k[0].replace('\n',' ')
133 st=traceback.extract_stack()
137 for filename,lineno,name,line in st:
138 buf.append(' File "%s", line %d, in %s'%(filename,lineno,name))
140 buf.append(' %s'%line.strip())
141 if buf:log.error("\n".join(buf))
150 log=logging.getLogger('waflib')
153 hdlr=logging.StreamHandler()
154 hdlr.setFormatter(formatter())
156 log.addFilter(log_filter())
157 log.setLevel(logging.DEBUG)
158 def make_logger(path,name):
159 logger=logging.getLogger(name)
160 hdlr=logging.FileHandler(path,'w')
161 formatter=logging.Formatter('%(message)s')
162 hdlr.setFormatter(formatter)
163 logger.addHandler(hdlr)
164 logger.setLevel(logging.DEBUG)
166 def make_mem_logger(name,to_log,size=10000):
167 from logging.handlers import MemoryHandler
168 logger=logging.getLogger(name)
169 hdlr=MemoryHandler(size,target=to_log)
170 formatter=logging.Formatter('%(message)s')
171 hdlr.setFormatter(formatter)
172 logger.addHandler(hdlr)
173 logger.memhandler=hdlr
174 logger.setLevel(logging.DEBUG)
176 def pprint(col,str,label='',sep='\n'):
177 sys.stderr.write("%s%s%s %s%s"%(colors(col),str,colors.NORMAL,label,sep))