+++ /dev/null
-#! /usr/bin/env python
-# encoding: utf-8
-# WARNING! Do not edit! http://waf.googlecode.com/git/docs/wafbook/single.html#_obtaining_the_waf_file
-
-import os,re,sys,shutil
-from waflib import Utils,Errors
-exclude_regs='''
-**/*~
-**/#*#
-**/.#*
-**/%*%
-**/._*
-**/CVS
-**/CVS/**
-**/.cvsignore
-**/SCCS
-**/SCCS/**
-**/vssver.scc
-**/.svn
-**/.svn/**
-**/BitKeeper
-**/.git
-**/.git/**
-**/.gitignore
-**/.bzr
-**/.bzrignore
-**/.bzr/**
-**/.hg
-**/.hg/**
-**/_MTN
-**/_MTN/**
-**/.arch-ids
-**/{arch}
-**/_darcs
-**/_darcs/**
-**/.intlcache
-**/.DS_Store'''
-def split_path(path):
- return path.split('/')
-def split_path_cygwin(path):
- if path.startswith('//'):
- ret=path.split('/')[2:]
- ret[0]='/'+ret[0]
- return ret
- return path.split('/')
-re_sp=re.compile('[/\\\\]')
-def split_path_win32(path):
- if path.startswith('\\\\'):
- ret=re.split(re_sp,path)[2:]
- ret[0]='\\'+ret[0]
- return ret
- return re.split(re_sp,path)
-if sys.platform=='cygwin':
- split_path=split_path_cygwin
-elif Utils.is_win32:
- split_path=split_path_win32
-class Node(object):
- __slots__=('name','sig','children','parent','cache_abspath','cache_isdir','cache_sig')
- def __init__(self,name,parent):
- self.name=name
- self.parent=parent
- if parent:
- if name in parent.children:
- raise Errors.WafError('node %s exists in the parent files %r already'%(name,parent))
- parent.children[name]=self
- def __setstate__(self,data):
- self.name=data[0]
- self.parent=data[1]
- if data[2]is not None:
- self.children=data[2]
- if data[3]is not None:
- self.sig=data[3]
- def __getstate__(self):
- return(self.name,self.parent,getattr(self,'children',None),getattr(self,'sig',None))
- def __str__(self):
- return self.name
- def __repr__(self):
- return self.abspath()
- def __hash__(self):
- return id(self)
- def __eq__(self,node):
- return id(self)==id(node)
- def __copy__(self):
- raise Errors.WafError('nodes are not supposed to be copied')
- def read(self,flags='r',encoding='ISO8859-1'):
- return Utils.readf(self.abspath(),flags,encoding)
- def write(self,data,flags='w',encoding='ISO8859-1'):
- Utils.writef(self.abspath(),data,flags,encoding)
- def chmod(self,val):
- os.chmod(self.abspath(),val)
- def delete(self):
- try:
- if hasattr(self,'children'):
- shutil.rmtree(self.abspath())
- else:
- os.remove(self.abspath())
- except OSError:
- pass
- self.evict()
- def evict(self):
- del self.parent.children[self.name]
- def suffix(self):
- k=max(0,self.name.rfind('.'))
- return self.name[k:]
- def height(self):
- d=self
- val=-1
- while d:
- d=d.parent
- val+=1
- return val
- def listdir(self):
- lst=Utils.listdir(self.abspath())
- lst.sort()
- return lst
- def mkdir(self):
- if getattr(self,'cache_isdir',None):
- return
- try:
- self.parent.mkdir()
- except OSError:
- pass
- if self.name:
- try:
- os.makedirs(self.abspath())
- except OSError:
- pass
- if not os.path.isdir(self.abspath()):
- raise Errors.WafError('Could not create the directory %s'%self.abspath())
- try:
- self.children
- except AttributeError:
- self.children={}
- self.cache_isdir=True
- def find_node(self,lst):
- if isinstance(lst,str):
- lst=[x for x in split_path(lst)if x and x!='.']
- cur=self
- for x in lst:
- if x=='..':
- cur=cur.parent or cur
- continue
- try:
- ch=cur.children
- except AttributeError:
- cur.children={}
- else:
- try:
- cur=cur.children[x]
- continue
- except KeyError:
- pass
- cur=self.__class__(x,cur)
- try:
- os.stat(cur.abspath())
- except OSError:
- cur.evict()
- return None
- ret=cur
- try:
- os.stat(ret.abspath())
- except OSError:
- ret.evict()
- return None
- try:
- while not getattr(cur.parent,'cache_isdir',None):
- cur=cur.parent
- cur.cache_isdir=True
- except AttributeError:
- pass
- return ret
- def make_node(self,lst):
- if isinstance(lst,str):
- lst=[x for x in split_path(lst)if x and x!='.']
- cur=self
- for x in lst:
- if x=='..':
- cur=cur.parent or cur
- continue
- if getattr(cur,'children',{}):
- if x in cur.children:
- cur=cur.children[x]
- continue
- else:
- cur.children={}
- cur=self.__class__(x,cur)
- return cur
- def search_node(self,lst):
- if isinstance(lst,str):
- lst=[x for x in split_path(lst)if x and x!='.']
- cur=self
- for x in lst:
- if x=='..':
- cur=cur.parent or cur
- else:
- try:
- cur=cur.children[x]
- except(AttributeError,KeyError):
- return None
- return cur
- def path_from(self,node):
- c1=self
- c2=node
- c1h=c1.height()
- c2h=c2.height()
- lst=[]
- up=0
- while c1h>c2h:
- lst.append(c1.name)
- c1=c1.parent
- c1h-=1
- while c2h>c1h:
- up+=1
- c2=c2.parent
- c2h-=1
- while id(c1)!=id(c2):
- lst.append(c1.name)
- up+=1
- c1=c1.parent
- c2=c2.parent
- for i in range(up):
- lst.append('..')
- lst.reverse()
- return os.sep.join(lst)or'.'
- def abspath(self):
- try:
- return self.cache_abspath
- except AttributeError:
- pass
- if os.sep=='/':
- if not self.parent:
- val=os.sep
- elif not self.parent.name:
- val=os.sep+self.name
- else:
- val=self.parent.abspath()+os.sep+self.name
- else:
- if not self.parent:
- val=''
- elif not self.parent.name:
- val=self.name+os.sep
- else:
- val=self.parent.abspath().rstrip(os.sep)+os.sep+self.name
- self.cache_abspath=val
- return val
- def is_child_of(self,node):
- p=self
- diff=self.height()-node.height()
- while diff>0:
- diff-=1
- p=p.parent
- return id(p)==id(node)
- def ant_iter(self,accept=None,maxdepth=25,pats=[],dir=False,src=True,remove=True):
- dircont=self.listdir()
- dircont.sort()
- try:
- lst=set(self.children.keys())
- except AttributeError:
- self.children={}
- else:
- if remove:
- for x in lst-set(dircont):
- self.children[x].evict()
- for name in dircont:
- npats=accept(name,pats)
- if npats and npats[0]:
- accepted=[]in npats[0]
- node=self.make_node([name])
- isdir=os.path.isdir(node.abspath())
- if accepted:
- if isdir:
- if dir:
- yield node
- else:
- if src:
- yield node
- if getattr(node,'cache_isdir',None)or isdir:
- node.cache_isdir=True
- if maxdepth:
- for k in node.ant_iter(accept=accept,maxdepth=maxdepth-1,pats=npats,dir=dir,src=src,remove=remove):
- yield k
- raise StopIteration
- def ant_glob(self,*k,**kw):
- src=kw.get('src',True)
- dir=kw.get('dir',False)
- excl=kw.get('excl',exclude_regs)
- incl=k and k[0]or kw.get('incl','**')
- reflags=kw.get('ignorecase',0)and re.I
- def to_pat(s):
- lst=Utils.to_list(s)
- ret=[]
- for x in lst:
- x=x.replace('\\','/').replace('//','/')
- if x.endswith('/'):
- x+='**'
- lst2=x.split('/')
- accu=[]
- for k in lst2:
- if k=='**':
- accu.append(k)
- else:
- k=k.replace('.','[.]').replace('*','.*').replace('?','.').replace('+','\\+')
- k='^%s$'%k
- try:
- accu.append(re.compile(k,flags=reflags))
- except Exception ,e:
- raise Errors.WafError("Invalid pattern: %s"%k,e)
- ret.append(accu)
- return ret
- def filtre(name,nn):
- ret=[]
- for lst in nn:
- if not lst:
- pass
- elif lst[0]=='**':
- ret.append(lst)
- if len(lst)>1:
- if lst[1].match(name):
- ret.append(lst[2:])
- else:
- ret.append([])
- elif lst[0].match(name):
- ret.append(lst[1:])
- return ret
- def accept(name,pats):
- nacc=filtre(name,pats[0])
- nrej=filtre(name,pats[1])
- if[]in nrej:
- nacc=[]
- return[nacc,nrej]
- ret=[x for x in self.ant_iter(accept=accept,pats=[to_pat(incl),to_pat(excl)],maxdepth=kw.get('maxdepth',25),dir=dir,src=src,remove=kw.get('remove',True))]
- if kw.get('flat',False):
- return' '.join([x.path_from(self)for x in ret])
- return ret
- def is_src(self):
- cur=self
- x=id(self.ctx.srcnode)
- y=id(self.ctx.bldnode)
- while cur.parent:
- if id(cur)==y:
- return False
- if id(cur)==x:
- return True
- cur=cur.parent
- return False
- def is_bld(self):
- cur=self
- y=id(self.ctx.bldnode)
- while cur.parent:
- if id(cur)==y:
- return True
- cur=cur.parent
- return False
- def get_src(self):
- cur=self
- x=id(self.ctx.srcnode)
- y=id(self.ctx.bldnode)
- lst=[]
- while cur.parent:
- if id(cur)==y:
- lst.reverse()
- return self.ctx.srcnode.make_node(lst)
- if id(cur)==x:
- return self
- lst.append(cur.name)
- cur=cur.parent
- return self
- def get_bld(self):
- cur=self
- x=id(self.ctx.srcnode)
- y=id(self.ctx.bldnode)
- lst=[]
- while cur.parent:
- if id(cur)==y:
- return self
- if id(cur)==x:
- lst.reverse()
- return self.ctx.bldnode.make_node(lst)
- lst.append(cur.name)
- cur=cur.parent
- lst.reverse()
- if lst and Utils.is_win32 and len(lst[0])==2 and lst[0].endswith(':'):
- lst[0]=lst[0][0]
- return self.ctx.bldnode.make_node(['__root__']+lst)
- def find_resource(self,lst):
- if isinstance(lst,str):
- lst=[x for x in split_path(lst)if x and x!='.']
- node=self.get_bld().search_node(lst)
- if not node:
- self=self.get_src()
- node=self.find_node(lst)
- if node:
- if os.path.isdir(node.abspath()):
- return None
- return node
- def find_or_declare(self,lst):
- if isinstance(lst,str):
- lst=[x for x in split_path(lst)if x and x!='.']
- node=self.get_bld().search_node(lst)
- if node:
- if not os.path.isfile(node.abspath()):
- node.sig=None
- node.parent.mkdir()
- return node
- self=self.get_src()
- node=self.find_node(lst)
- if node:
- if not os.path.isfile(node.abspath()):
- node.sig=None
- node.parent.mkdir()
- return node
- node=self.get_bld().make_node(lst)
- node.parent.mkdir()
- return node
- def find_dir(self,lst):
- if isinstance(lst,str):
- lst=[x for x in split_path(lst)if x and x!='.']
- node=self.find_node(lst)
- try:
- if not os.path.isdir(node.abspath()):
- return None
- except(OSError,AttributeError):
- return None
- return node
- def change_ext(self,ext,ext_in=None):
- name=self.name
- if ext_in is None:
- k=name.rfind('.')
- if k>=0:
- name=name[:k]+ext
- else:
- name=name+ext
- else:
- name=name[:-len(ext_in)]+ext
- return self.parent.find_or_declare([name])
- def nice_path(self,env=None):
- return self.path_from(self.ctx.launch_node())
- def bldpath(self):
- return self.path_from(self.ctx.bldnode)
- def srcpath(self):
- return self.path_from(self.ctx.srcnode)
- def relpath(self):
- cur=self
- x=id(self.ctx.bldnode)
- while cur.parent:
- if id(cur)==x:
- return self.bldpath()
- cur=cur.parent
- return self.srcpath()
- def bld_dir(self):
- return self.parent.bldpath()
- def bld_base(self):
- s=os.path.splitext(self.name)[0]
- return self.bld_dir()+os.sep+s
- def get_bld_sig(self):
- try:
- return self.cache_sig
- except AttributeError:
- pass
- if not self.is_bld()or self.ctx.bldnode is self.ctx.srcnode:
- self.sig=Utils.h_file(self.abspath())
- self.cache_sig=ret=self.sig
- return ret
- search=search_node
-pickle_lock=Utils.threading.Lock()
-class Nod3(Node):
- pass