예제 #1
0
파일: errcheck.py 프로젝트: SjB/waf
def enhance_lib():
	"""
	modify existing classes and methods
	"""
	for m in meths_typos:
		replace(m)

	# catch '..' in ant_glob patterns
	old_ant_glob = Node.Node.ant_glob
	def ant_glob(self, *k, **kw):
		for x in k[0].split('/'):
			if x == '..':
				Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'" % k[0])
		return old_ant_glob(self, *k, **kw)
	Node.Node.ant_glob = ant_glob

	# catch conflicting ext_in/ext_out/before/after declarations
	old = Task.is_before
	def is_before(t1, t2):
		ret = old(t1, t2)
		if ret and old(t2, t1):
			Logs.error('Contradictory order constraints in classes %r %r' % (t1, t2))
		return ret
	Task.is_before = is_before

	# check for bld(feature='cshlib') where no 'c' is given - this can be either a mistake or on purpose
	# so we only issue a warning
	def check_err_features(self):
		lst = self.to_list(self.features)
		if 'shlib' in lst:
			Logs.error('feature shlib -> cshlib, dshlib or cxxshlib')
		for x in ('c', 'cxx', 'd', 'fc'):
			if not x in lst and lst and lst[0] in [x+y for y in ('program', 'shlib', 'stlib')]:
				Logs.error('%r features is probably missing %r' % (self, x))
	TaskGen.feature('*')(check_err_features)
예제 #2
0
파일: errcheck.py 프로젝트: RunarFreyr/waz
def enhance_lib():
	for m in meths_typos:
		replace(m)
	old_ant_glob=Node.Node.ant_glob
	def ant_glob(self,*k,**kw):
		for x in k[0].split('/'):
			if x=='..':
				Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'"%k[0])
		return old_ant_glob(self,*k,**kw)
	Node.Node.ant_glob=ant_glob
	old=Task.is_before
	def is_before(t1,t2):
		ret=old(t1,t2)
		if ret and old(t2,t1):
			Logs.error('Contradictory order constraints in classes %r %r'%(t1,t2))
		return ret
	Task.is_before=is_before
	def check_err_features(self):
		lst=self.to_list(self.features)
		if'shlib'in lst:
			Logs.error('feature shlib -> cshlib, dshlib or cxxshlib')
		for x in('c','cxx','d','fc'):
			if not x in lst and lst and lst[0]in[x+y for y in('program','shlib','stlib')]:
				Logs.error('%r features is probably missing %r'%(self,x))
	TaskGen.feature('*')(check_err_features)
예제 #3
0
def enhance_lib():
	for m in meths_typos:
		replace(m)
	old_ant_glob=Node.Node.ant_glob
	def ant_glob(self,*k,**kw):
		if k:
			lst=Utils.to_list(k[0])
			for pat in lst:
				if'..'in pat.split('/'):
					Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'"%k[0])
		return old_ant_glob(self,*k,**kw)
	Node.Node.ant_glob=ant_glob
	old=Task.is_before
	def is_before(t1,t2):
		ret=old(t1,t2)
		if ret and old(t2,t1):
			Logs.error('Contradictory order constraints in classes %r %r'%(t1,t2))
		return ret
	Task.is_before=is_before
	def check_err_features(self):
		lst=self.to_list(self.features)
		if'shlib'in lst:
			Logs.error('feature shlib -> cshlib, dshlib or cxxshlib')
		for x in('c','cxx','d','fc'):
			if not x in lst and lst and lst[0]in[x+y for y in('program','shlib','stlib')]:
				Logs.error('%r features is probably missing %r'%(self,x))
	TaskGen.feature('*')(check_err_features)
	def check_err_order(self):
		if not hasattr(self,'rule'):
			for x in('before','after','ext_in','ext_out'):
				if hasattr(self,x):
					Logs.warn('Erroneous order constraint %r on non-rule based task generator %r'%(x,self))
		else:
			for x in('before','after'):
				for y in self.to_list(getattr(self,x,[])):
					if not Task.classes.get(y,None):
						Logs.error('Erroneous order constraint %s=%r on %r'%(x,y,self))
	TaskGen.feature('*')(check_err_order)
	old_compile=Build.BuildContext.compile
	def check_compile(self):
		check_invalid_constraints(self)
		try:
			ret=old_compile(self)
		finally:
			check_same_targets(self)
		return ret
	Build.BuildContext.compile=check_compile
	def getattri(self,name,default=None):
		if name=='append'or name=='add':
			raise Errors.WafError('env.append and env.add do not exist: use env.append_value/env.append_unique')
		elif name=='prepend':
			raise Errors.WafError('env.prepend does not exist: use env.prepend_value')
		if name in self.__slots__:
			return object.__getattr__(self,name,default)
		else:
			return self[name]
	ConfigSet.ConfigSet.__getattr__=getattri
예제 #4
0
파일: errcheck.py 프로젝트: ita1024/node
def enhance_lib():
	"""
	modify existing classes and methods
	"""
	for m in meths_typos:
		replace(m)

	# catch '..' in ant_glob patterns
	old_ant_glob = Node.Node.ant_glob
	def ant_glob(self, *k, **kw):
		for x in k[0].split('/'):
			if x == '..':
				Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'" % k[0])
		return old_ant_glob(self, *k, **kw)
	Node.Node.ant_glob = ant_glob

	# catch conflicting ext_in/ext_out/before/after declarations
	old = Task.is_before
	def is_before(t1, t2):
		ret = old(t1, t2)
		if ret and old(t2, t1):
			Logs.error('Contradictory order constraints in classes %r %r' % (t1, t2))
		return ret
	Task.is_before = is_before

	# check for bld(feature='cshlib') where no 'c' is given - this can be either a mistake or on purpose
	# so we only issue a warning
	def check_err_features(self):
		lst = self.to_list(self.features)
		if 'shlib' in lst:
			Logs.error('feature shlib -> cshlib, dshlib or cxxshlib')
		for x in ('c', 'cxx', 'd', 'fc'):
			if not x in lst and lst and lst[0] in [x+y for y in ('program', 'shlib', 'stlib')]:
				Logs.error('%r features is probably missing %r' % (self, x))
	TaskGen.feature('*')(check_err_features)

	# check for @extension used with @feature/@before/@after
	old_compile = Build.BuildContext.compile
	def check_compile(self):
		feat = set([])
		for x in list(TaskGen.feats.values()):
			feat.union(set(x))
		for (x, y) in TaskGen.task_gen.prec.items():
			feat.add(x)
			feat.union(set(y))
		ext = set([])
		for x in TaskGen.task_gen.mappings.values():
			ext.add(x.__name__)
		invalid = ext & feat
		if invalid:
			Logs.error('The methods %r have invalid annotations:  @extension <-> @feature/@before/@after' % list(invalid))

		return old_compile(self)
	Build.BuildContext.compile = check_compile
예제 #5
0
파일: errcheck.py 프로젝트: spo11/archlinux
def enhance_lib():
	for m in meths_typos:
		replace(m)
	old_ant_glob=Node.Node.ant_glob
	def ant_glob(self,*k,**kw):
		if k:
			for x in k[0].split('/'):
				if x=='..':
					Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'"%k[0])
		return old_ant_glob(self,*k,**kw)
	Node.Node.ant_glob=ant_glob
	old=Task.is_before
	def is_before(t1,t2):
		ret=old(t1,t2)
		if ret and old(t2,t1):
			Logs.error('Contradictory order constraints in classes %r %r'%(t1,t2))
		return ret
	Task.is_before=is_before
	def check_err_features(self):
		lst=self.to_list(self.features)
		if'shlib'in lst:
			Logs.error('feature shlib -> cshlib, dshlib or cxxshlib')
		for x in('c','cxx','d','fc'):
			if not x in lst and lst and lst[0]in[x+y for y in('program','shlib','stlib')]:
				Logs.error('%r features is probably missing %r'%(self,x))
	TaskGen.feature('*')(check_err_features)
	old_compile=Build.BuildContext.compile
	def check_compile(self):
		feat=set([])
		for x in list(TaskGen.feats.values()):
			feat.union(set(x))
		for(x,y)in TaskGen.task_gen.prec.items():
			feat.add(x)
			feat.union(set(y))
		ext=set([])
		for x in TaskGen.task_gen.mappings.values():
			ext.add(x.__name__)
		invalid=ext&feat
		if invalid:
			Logs.error('The methods %r have invalid annotations:  @extension <-> @feature/@before/@after'%list(invalid))
		return old_compile(self)
	Build.BuildContext.compile=check_compile
	def getattr(self,name):
		if name=='append'or name=='add':
			raise Errors.WafError('env.append and env.add do not exist: use env.append_value/env.append_unique')
		elif name=='prepend':
			raise Errors.WafError('env.prepend does not exist: use env.prepend_value')
		if name in self.__slots__:
			return object.__getattr__(self,name)
		else:
			return self[name]
	ConfigSet.ConfigSet.__getattr__=getattr
예제 #6
0
파일: errcheck.py 프로젝트: ldiez/GWNSyM
def enhance_lib():
    for m in meths_typos:
        replace(m)
    old_ant_glob = Node.Node.ant_glob

    def ant_glob(self, *k, **kw):
        for x in k[0].split('/'):
            if x == '..':
                Logs.error(
                    "In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'"
                    % k[0])
        return old_ant_glob(self, *k, **kw)

    Node.Node.ant_glob = ant_glob
    old = Task.is_before

    def is_before(t1, t2):
        ret = old(t1, t2)
        if ret and old(t2, t1):
            Logs.error('Contradictory order constraints in classes %r %r' %
                       (t1, t2))
        return ret

    Task.is_before = is_before

    def check_err_features(self):
        lst = self.to_list(self.features)
        if 'shlib' in lst:
            Logs.error('feature shlib -> cshlib, dshlib or cxxshlib')
        for x in ('c', 'cxx', 'd', 'fc'):
            if not x in lst and lst and lst[0] in [
                    x + y for y in ('program', 'shlib', 'stlib')
            ]:
                Logs.error('%r features is probably missing %r' % (self, x))

    TaskGen.feature('*')(check_err_features)
예제 #7
0
파일: go.py 프로젝트: cawka/waf-old-fork
		set_def('GO_PLATFORM', platform.machine())

	if conf.env.GO_PLATFORM == 'x86_64':
		set_def('GO_COMPILER', '6g')
		set_def('GO_LINKER', '6l')
	elif conf.env.GO_PLATFORM in ('i386', 'i486', 'i586', 'i686'):
		set_def('GO_COMPILER', '8g')
		set_def('GO_LINKER', '8l')
	elif conf.env.GO_PLATFORM == 'arm':
		set_def('GO_COMPILER', '5g')
		set_def('GO_LINKER', '5l')
		set_def('GO_EXTENSION', '.5')

	if not (conf.env.GO_COMPILER or conf.env.GO_LINKER):
		raise conf.fatal('Unsupported platform ' + platform.machine())

	set_def('GO_PACK', 'gopack')
	set_def('gopackage_PATTERN', '%s.a')
	set_def('CPPPATH_ST', '-I%s')

	set_def('GOMAKE_FLAGS', ['--quiet'])
	conf.find_program(conf.env.GO_COMPILER, var='GOC')
	conf.find_program(conf.env.GO_LINKER,   var='GOL')
	conf.find_program(conf.env.GO_PACK,     var='GOP')

	conf.find_program('cgo',                var='CGO')

TaskGen.feature('go')(process_use)
TaskGen.feature('go')(propagate_uselib_vars)

예제 #8
0
파일: conf.py 프로젝트: kenmasumitsu/waf
	def deco(func):
		exclude_taskgen.append(func.__name__)
		setattr(task_gen, func.__name__, func)
		for fun_name in k:
			if not fun_name in task_gen.prec[func.__name__]:
				task_gen.prec[func.__name__].append(fun_name)
		fix_fun_doc(func)
		append_doc(func, 'after', k)
		return func
	return deco
after.__doc__ = TaskGen.after.__doc__
TaskGen.after = after

# replay existing methods
TaskGen.taskgen_method(TaskGen.to_nodes)
TaskGen.feature('*')(TaskGen.process_source)
TaskGen.feature('*')(TaskGen.process_rule)
TaskGen.before('process_source')(TaskGen.process_rule)
TaskGen.feature('seq')(TaskGen.sequence_order)
TaskGen.extension('.pc.in')(TaskGen.add_pcfile)
TaskGen.feature('subst')(TaskGen.process_subst)
TaskGen.before('process_source','process_rule')(TaskGen.process_subst)

from waflib.Task import Task

Task.__dict__['post_run'].__doc__ = "Update the cache files (executed by threads). Override in subclasses."


from waflib import Configure, Build, Errors
confmeths = []
def conf(f):
예제 #9
0
                except fypp.FyppError as err:
                        msg = ("%s [%s:%d]"
                               % (err.msg, err.fname, err.span[0] + 1))
                        raise FyppPreprocError(msg)
		return 0

	def scan(self):
		parser = FyppIncludeParser(self.generator.includes_nodes)
		nodes, names = parser.parse(self.inputs[0])
		if Logs.verbose:
			Logs.debug('deps: deps for %r: %r; unresolved: %r' 
				% (self.inputs, nodes, names))
		return (nodes, names)


TaskGen.feature('fypp')(Tools.ccroot.propagate_uselib_vars)
TaskGen.feature('fypp')(Tools.ccroot.apply_incpaths)



################################################################################
# Helper routines
################################################################################

class FyppIncludeParser(object):

	'''Parser for include directives in files preprocessed by Fypp.

	It can not handle conditional includes.
	'''
예제 #10
0
파일: errcheck.py 프로젝트: mirsys/glmark2
def enhance_lib():
    for m in meths_typos:
        replace(m)

    def ant_glob(self, *k, **kw):
        if k:
            lst = Utils.to_list(k[0])
            for pat in lst:
                if ".." in pat.split("/"):
                    Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'" % k[0])
        if kw.get("remove", True):
            try:
                if self.is_child_of(self.ctx.bldnode) and not kw.get("quiet", False):
                    Logs.error(
                        "Using ant_glob on the build folder (%r) is dangerous (quiet=True to disable this warning)"
                        % self
                    )
            except AttributeError:
                pass
        return self.old_ant_glob(*k, **kw)

    Node.Node.old_ant_glob = Node.Node.ant_glob
    Node.Node.ant_glob = ant_glob
    old = Task.is_before

    def is_before(t1, t2):
        ret = old(t1, t2)
        if ret and old(t2, t1):
            Logs.error("Contradictory order constraints in classes %r %r" % (t1, t2))
        return ret

    Task.is_before = is_before

    def check_err_features(self):
        lst = self.to_list(self.features)
        if "shlib" in lst:
            Logs.error("feature shlib -> cshlib, dshlib or cxxshlib")
        for x in ("c", "cxx", "d", "fc"):
            if not x in lst and lst and lst[0] in [x + y for y in ("program", "shlib", "stlib")]:
                Logs.error("%r features is probably missing %r" % (self, x))

    TaskGen.feature("*")(check_err_features)

    def check_err_order(self):
        if not hasattr(self, "rule"):
            for x in ("before", "after", "ext_in", "ext_out"):
                if hasattr(self, x):
                    Logs.warn("Erroneous order constraint %r on non-rule based task generator %r" % (x, self))
        else:
            for x in ("before", "after"):
                for y in self.to_list(getattr(self, x, [])):
                    if not Task.classes.get(y, None):
                        Logs.error("Erroneous order constraint %s=%r on %r" % (x, y, self))

    TaskGen.feature("*")(check_err_order)

    def check_compile(self):
        check_invalid_constraints(self)
        try:
            ret = self.orig_compile()
        finally:
            check_same_targets(self)
        return ret

    Build.BuildContext.orig_compile = Build.BuildContext.compile
    Build.BuildContext.compile = check_compile

    def use_rec(self, name, **kw):
        try:
            y = self.bld.get_tgen_by_name(name)
        except Errors.WafError:
            pass
        else:
            idx = self.bld.get_group_idx(self)
            odx = self.bld.get_group_idx(y)
            if odx > idx:
                msg = "Invalid 'use' across build groups:"
                if Logs.verbose > 1:
                    msg += "\n  target %r\n  uses:\n  %r" % (self, y)
                else:
                    msg += " %r uses %r (try 'waf -v -v' for the full error)" % (self.name, name)
                raise Errors.WafError(msg)
        self.orig_use_rec(name, **kw)

    TaskGen.task_gen.orig_use_rec = TaskGen.task_gen.use_rec
    TaskGen.task_gen.use_rec = use_rec

    def getattri(self, name, default=None):
        if name == "append" or name == "add":
            raise Errors.WafError("env.append and env.add do not exist: use env.append_value/env.append_unique")
        elif name == "prepend":
            raise Errors.WafError("env.prepend does not exist: use env.prepend_value")
        if name in self.__slots__:
            return object.__getattr__(self, name, default)
        else:
            return self[name]

    ConfigSet.ConfigSet.__getattr__ = getattri
예제 #11
0
파일: compat15.py 프로젝트: RunarFreyr/waz
old_undefine = Configure.ConfigurationContext.__dict__["undefine"]


def undefine(self, key):
    old_undefine(self, key)
    if key.startswith("HAVE_"):
        self.env[key] = 0


def set_incdirs(self, val):
    Logs.warn('compat: change "export_incdirs" by "export_includes"')
    self.export_includes = val


TaskGen.task_gen.export_incdirs = property(None, set_incdirs)

TaskGen.feature("d")(old_importpaths)
TaskGen.before("apply_incpaths")(old_importpaths)
TaskGen.feature("c", "cxx", "d")(apply_uselib_local)
TaskGen.before("apply_incpaths", "propagate_uselib_vars")(apply_uselib_local)
TaskGen.after("apply_link", "process_source")(apply_uselib_local)
TaskGen.feature("cprogram", "cxxprogram", "cstlib", "cxxstlib", "cshlib", "cxxshlib", "dprogram", "dstlib", "dshlib")(
    apply_objdeps
)
TaskGen.after("apply_link")(apply_objdeps)
TaskGen.after("apply_link")(process_obj_files)
TaskGen.taskgen_method(add_obj_file)
Configure.conf(define)
Configure.conf(undefine)
예제 #12
0
파일: errcheck.py 프로젝트: Jajcus/jack2
def enhance_lib():
	"""
	modify existing classes and methods
	"""
	for m in meths_typos:
		replace(m)

	# catch '..' in ant_glob patterns
	def ant_glob(self, *k, **kw):
		if k:
			lst=Utils.to_list(k[0])
			for pat in lst:
				if '..' in pat.split('/'):
					Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'" % k[0])
		if kw.get('remove', True):
			try:
				if self.is_child_of(self.ctx.bldnode) and not kw.get('quiet', False):
					Logs.error('Using ant_glob on the build folder (%r) is dangerous (quiet=True to disable this warning)' % self)
			except AttributeError:
				pass
		return self.old_ant_glob(*k, **kw)
	Node.Node.old_ant_glob = Node.Node.ant_glob
	Node.Node.ant_glob = ant_glob

	# catch conflicting ext_in/ext_out/before/after declarations
	old = Task.is_before
	def is_before(t1, t2):
		ret = old(t1, t2)
		if ret and old(t2, t1):
			Logs.error('Contradictory order constraints in classes %r %r' % (t1, t2))
		return ret
	Task.is_before = is_before

	# check for bld(feature='cshlib') where no 'c' is given - this can be either a mistake or on purpose
	# so we only issue a warning
	def check_err_features(self):
		lst = self.to_list(self.features)
		if 'shlib' in lst:
			Logs.error('feature shlib -> cshlib, dshlib or cxxshlib')
		for x in ('c', 'cxx', 'd', 'fc'):
			if not x in lst and lst and lst[0] in [x+y for y in ('program', 'shlib', 'stlib')]:
				Logs.error('%r features is probably missing %r' % (self, x))
	TaskGen.feature('*')(check_err_features)

	# check for erroneous order constraints
	def check_err_order(self):
		if not hasattr(self, 'rule') and not 'subst' in Utils.to_list(self.features):
			for x in ('before', 'after', 'ext_in', 'ext_out'):
				if hasattr(self, x):
					Logs.warn('Erroneous order constraint %r on non-rule based task generator %r' % (x, self))
		else:
			for x in ('before', 'after'):
				for y in self.to_list(getattr(self, x, [])):
					if not Task.classes.get(y, None):
						Logs.error('Erroneous order constraint %s=%r on %r (no such class)' % (x, y, self))
	TaskGen.feature('*')(check_err_order)

	# check for @extension used with @feature/@before_method/@after_method
	def check_compile(self):
		check_invalid_constraints(self)
		try:
			ret = self.orig_compile()
		finally:
			check_same_targets(self)
		return ret
	Build.BuildContext.orig_compile = Build.BuildContext.compile
	Build.BuildContext.compile = check_compile

	# check for invalid build groups #914
	def use_rec(self, name, **kw):
		try:
			y = self.bld.get_tgen_by_name(name)
		except Errors.WafError:
			pass
		else:
			idx = self.bld.get_group_idx(self)
			odx = self.bld.get_group_idx(y)
			if odx > idx:
				msg = "Invalid 'use' across build groups:"
				if Logs.verbose > 1:
					msg += '\n  target %r\n  uses:\n  %r' % (self, y)
				else:
					msg += " %r uses %r (try 'waf -v -v' for the full error)" % (self.name, name)
				raise Errors.WafError(msg)
		self.orig_use_rec(name, **kw)
	TaskGen.task_gen.orig_use_rec = TaskGen.task_gen.use_rec
	TaskGen.task_gen.use_rec = use_rec

	# check for env.append
	def getattri(self, name, default=None):
		if name == 'append' or name == 'add':
			raise Errors.WafError('env.append and env.add do not exist: use env.append_value/env.append_unique')
		elif name == 'prepend':
			raise Errors.WafError('env.prepend does not exist: use env.prepend_value')
		if name in self.__slots__:
			return object.__getattr__(self, name, default)
		else:
			return self[name]
	ConfigSet.ConfigSet.__getattr__ = getattri
예제 #13
0
파일: conf.py 프로젝트: zeus911/waf-2
        for fun_name in k:
            if not fun_name in task_gen.prec[func.__name__]:
                task_gen.prec[func.__name__].append(fun_name)
        fix_fun_doc(func)
        append_doc(func, 'after', k)
        return func

    return deco


after.__doc__ = TaskGen.after.__doc__
TaskGen.after = after

# replay existing methods
TaskGen.taskgen_method(TaskGen.to_nodes)
TaskGen.feature('*')(TaskGen.process_source)
TaskGen.feature('*')(TaskGen.process_rule)
TaskGen.before('process_source')(TaskGen.process_rule)
TaskGen.feature('seq')(TaskGen.sequence_order)
TaskGen.extension('.pc.in')(TaskGen.add_pcfile)
TaskGen.feature('subst')(TaskGen.process_subst)
TaskGen.before('process_source', 'process_rule')(TaskGen.process_subst)

from waflib.Task import Task

Task.__dict__[
    'post_run'].__doc__ = "Update the cache files (executed by threads). Override in subclasses."

from waflib import Configure, Build
confmeths = []
예제 #14
0
		self.link_task.inputs.append(node)
def add_obj_file(self,file):
	if not hasattr(self,'obj_files'):self.obj_files=[]
	if not'process_obj_files'in self.meths:self.meths.append('process_obj_files')
	self.obj_files.append(file)
old_define=Configure.ConfigurationContext.__dict__['define']
def define(self,key,val,quote=True):
	old_define(self,key,val,quote)
	if key.startswith('HAVE_'):
		self.env[key]=1
old_undefine=Configure.ConfigurationContext.__dict__['undefine']
def undefine(self,key):
	old_undefine(self,key)
	if key.startswith('HAVE_'):
		self.env[key]=0
def set_incdirs(self,val):
	Logs.warn('compat: change "export_incdirs" by "export_includes"')
	self.export_includes=val
TaskGen.task_gen.export_incdirs=property(None,set_incdirs)

TaskGen.feature('d')(old_importpaths)
TaskGen.before('apply_incpaths')(old_importpaths)
TaskGen.feature('c','cxx','d')(apply_uselib_local)
TaskGen.before('apply_incpaths','propagate_uselib_vars')(apply_uselib_local)
TaskGen.after('apply_link','process_source')(apply_uselib_local)
TaskGen.feature('cprogram','cxxprogram','cstlib','cxxstlib','cshlib','cxxshlib','dprogram','dstlib','dshlib')(apply_objdeps)
TaskGen.after('apply_link')(apply_objdeps)
TaskGen.after('apply_link')(process_obj_files)
TaskGen.taskgen_method(add_obj_file)
Configure.conf(define)
Configure.conf(undefine)
예제 #15
0
파일: lua.py 프로젝트: RunarFreyr/waz
#! /usr/bin/env python
# encoding: utf-8
# WARNING! All changes made to this file will be lost!

from waflib import TaskGen,Utils
TaskGen.declare_chain(name='luac',rule='${LUAC} -s -o ${TGT} ${SRC}',ext_in='.lua',ext_out='.luac',reentrant=False)
def init_lua(self):
	self.default_chmod=Utils.O755
def configure(conf):
	conf.find_program('luac',var='LUAC')

TaskGen.feature('lua')(init_lua)
예제 #16
0
파일: compat15.py 프로젝트: spo11/archlinux
		self.link_task.inputs.append(node)
def add_obj_file(self,file):
	if not hasattr(self,'obj_files'):self.obj_files=[]
	if not'process_obj_files'in self.meths:self.meths.append('process_obj_files')
	self.obj_files.append(file)
old_define=Configure.ConfigurationContext.__dict__['define']
def define(self,key,val,quote=True):
	old_define(self,key,val,quote)
	if key.startswith('HAVE_'):
		self.env[key]=1
old_undefine=Configure.ConfigurationContext.__dict__['undefine']
def undefine(self,key):
	old_undefine(self,key)
	if key.startswith('HAVE_'):
		self.env[key]=0
def set_incdirs(self,val):
	Logs.warn('compat: change "export_incdirs" by "export_includes"')
	self.export_includes=val
TaskGen.task_gen.export_incdirs=property(None,set_incdirs)

TaskGen.feature('d')(old_importpaths)
TaskGen.before('apply_incpaths')(old_importpaths)
TaskGen.feature('c','cxx','d')(apply_uselib_local)
TaskGen.before('apply_incpaths','propagate_uselib_vars')(apply_uselib_local)
TaskGen.after('apply_link','process_source')(apply_uselib_local)
TaskGen.feature('cprogram','cxxprogram','cstlib','cxxstlib','cshlib','cxxshlib','dprogram','dstlib','dshlib')(apply_objdeps)
TaskGen.after('apply_link')(apply_objdeps)
TaskGen.after('apply_link')(process_obj_files)
TaskGen.taskgen_method(add_obj_file)
Configure.conf(define)
Configure.conf(undefine)
예제 #17
0
파일: conf.py 프로젝트: yotann/waf
        for fun_name in k:
            if not fun_name in task_gen.prec[func.__name__]:
                task_gen.prec[func.__name__].append(fun_name)
        fix_fun_doc(func)
        append_doc(func, "after", k)
        return func

    return deco


after.__doc__ = TaskGen.after.__doc__
TaskGen.after = after

# replay existing methods
TaskGen.taskgen_method(TaskGen.to_nodes)
TaskGen.feature("*")(TaskGen.process_source)
TaskGen.feature("*")(TaskGen.process_rule)
TaskGen.before("process_source")(TaskGen.process_rule)
TaskGen.feature("seq")(TaskGen.sequence_order)
TaskGen.extension(".pc.in")(TaskGen.add_pcfile)
TaskGen.feature("subst")(TaskGen.process_subst)
TaskGen.before("process_source", "process_rule")(TaskGen.process_subst)

from waflib.Task import Task

Task.__dict__["post_run"].__doc__ = "Update the cache files (executed by threads). Override in subclasses."


from waflib import Configure, Build

confmeths = []
예제 #18
0
파일: errcheck.py 프로젝트: jgoppert/mavsim
def enhance_lib():
    for m in meths_typos:
        replace(m)
    old_ant_glob = Node.Node.ant_glob

    def ant_glob(self, *k, **kw):
        if k:
            lst = Utils.to_list(k[0])
            for pat in lst:
                if ".." in pat.split("/"):
                    Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'" % k[0])
        return old_ant_glob(self, *k, **kw)

    Node.Node.ant_glob = ant_glob
    old = Task.is_before

    def is_before(t1, t2):
        ret = old(t1, t2)
        if ret and old(t2, t1):
            Logs.error("Contradictory order constraints in classes %r %r" % (t1, t2))
        return ret

    Task.is_before = is_before

    def check_err_features(self):
        lst = self.to_list(self.features)
        if "shlib" in lst:
            Logs.error("feature shlib -> cshlib, dshlib or cxxshlib")
        for x in ("c", "cxx", "d", "fc"):
            if not x in lst and lst and lst[0] in [x + y for y in ("program", "shlib", "stlib")]:
                Logs.error("%r features is probably missing %r" % (self, x))

    TaskGen.feature("*")(check_err_features)

    def check_err_order(self):
        if not hasattr(self, "rule"):
            for x in ("before", "after", "ext_in", "ext_out"):
                if hasattr(self, x):
                    Logs.warn("Erroneous order constraint %r on non-rule based task generator %r" % (x, self))
        else:
            for x in ("before", "after"):
                for y in self.to_list(getattr(self, x, [])):
                    if not Task.classes.get(y, None):
                        Logs.error("Erroneous order constraint %s=%r on %r" % (x, y, self))

    TaskGen.feature("*")(check_err_order)
    old_compile = Build.BuildContext.compile

    def check_compile(self):
        check_invalid_constraints(self)
        try:
            ret = old_compile(self)
        finally:
            check_same_targets(self)
        return ret

    Build.BuildContext.compile = check_compile

    def getattri(self, name, default=None):
        if name == "append" or name == "add":
            raise Errors.WafError("env.append and env.add do not exist: use env.append_value/env.append_unique")
        elif name == "prepend":
            raise Errors.WafError("env.prepend does not exist: use env.prepend_value")
        if name in self.__slots__:
            return object.__getattr__(self, name, default)
        else:
            return self[name]

    ConfigSet.ConfigSet.__getattr__ = getattri
예제 #19
0
파일: errcheck.py 프로젝트: sky4D/mavsim
def enhance_lib():
    for m in meths_typos:
        replace(m)
    old_ant_glob = Node.Node.ant_glob

    def ant_glob(self, *k, **kw):
        if k:
            lst = Utils.to_list(k[0])
            for pat in lst:
                if '..' in pat.split('/'):
                    Logs.error(
                        "In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'"
                        % k[0])
        return old_ant_glob(self, *k, **kw)

    Node.Node.ant_glob = ant_glob
    old = Task.is_before

    def is_before(t1, t2):
        ret = old(t1, t2)
        if ret and old(t2, t1):
            Logs.error('Contradictory order constraints in classes %r %r' %
                       (t1, t2))
        return ret

    Task.is_before = is_before

    def check_err_features(self):
        lst = self.to_list(self.features)
        if 'shlib' in lst:
            Logs.error('feature shlib -> cshlib, dshlib or cxxshlib')
        for x in ('c', 'cxx', 'd', 'fc'):
            if not x in lst and lst and lst[0] in [
                    x + y for y in ('program', 'shlib', 'stlib')
            ]:
                Logs.error('%r features is probably missing %r' % (self, x))

    TaskGen.feature('*')(check_err_features)

    def check_err_order(self):
        if not hasattr(self, 'rule'):
            for x in ('before', 'after', 'ext_in', 'ext_out'):
                if hasattr(self, x):
                    Logs.warn(
                        'Erroneous order constraint %r on non-rule based task generator %r'
                        % (x, self))
        else:
            for x in ('before', 'after'):
                for y in self.to_list(getattr(self, x, [])):
                    if not Task.classes.get(y, None):
                        Logs.error('Erroneous order constraint %s=%r on %r' %
                                   (x, y, self))

    TaskGen.feature('*')(check_err_order)
    old_compile = Build.BuildContext.compile

    def check_compile(self):
        check_invalid_constraints(self)
        try:
            ret = old_compile(self)
        finally:
            check_same_targets(self)
        return ret

    Build.BuildContext.compile = check_compile

    def getattri(self, name, default=None):
        if name == 'append' or name == 'add':
            raise Errors.WafError(
                'env.append and env.add do not exist: use env.append_value/env.append_unique'
            )
        elif name == 'prepend':
            raise Errors.WafError(
                'env.prepend does not exist: use env.prepend_value')
        if name in self.__slots__:
            return object.__getattr__(self, name, default)
        else:
            return self[name]

    ConfigSet.ConfigSet.__getattr__ = getattri
예제 #20
0
def enhance_lib():
    """
	modify existing classes and methods
	"""
    for m in meths_typos:
        replace(m)

        # catch '..' in ant_glob patterns
    old_ant_glob = Node.Node.ant_glob

    def ant_glob(self, *k, **kw):
        if k:
            lst = Utils.to_list(k[0])
            for pat in lst:
                if ".." in pat.split("/"):
                    Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'" % k[0])
        return old_ant_glob(self, *k, **kw)

    Node.Node.ant_glob = ant_glob

    # catch conflicting ext_in/ext_out/before/after declarations
    old = Task.is_before

    def is_before(t1, t2):
        ret = old(t1, t2)
        if ret and old(t2, t1):
            Logs.error("Contradictory order constraints in classes %r %r" % (t1, t2))
        return ret

    Task.is_before = is_before

    # check for bld(feature='cshlib') where no 'c' is given - this can be either a mistake or on purpose
    # so we only issue a warning
    def check_err_features(self):
        lst = self.to_list(self.features)
        if "shlib" in lst:
            Logs.error("feature shlib -> cshlib, dshlib or cxxshlib")
        for x in ("c", "cxx", "d", "fc"):
            if not x in lst and lst and lst[0] in [x + y for y in ("program", "shlib", "stlib")]:
                Logs.error("%r features is probably missing %r" % (self, x))

    TaskGen.feature("*")(check_err_features)

    # check for erroneous order constraints
    def check_err_order(self):
        if not hasattr(self, "rule"):
            for x in ("before", "after", "ext_in", "ext_out"):
                if hasattr(self, x):
                    Logs.warn("Erroneous order constraint %r on non-rule based task generator %r" % (x, self))
        else:
            for x in ("before", "after"):
                for y in self.to_list(getattr(self, x, [])):
                    if not Task.classes.get(y, None):
                        Logs.error("Erroneous order constraint %s=%r on %r" % (x, y, self))

    TaskGen.feature("*")(check_err_order)

    # check for @extension used with @feature/@before_method/@after_method
    def check_compile(self):
        check_invalid_constraints(self)
        try:
            ret = self.orig_compile()
        finally:
            check_same_targets(self)
        return ret

    Build.BuildContext.orig_compile = Build.BuildContext.compile
    Build.BuildContext.compile = check_compile

    # check for invalid build groups #914
    def use_rec(self, name, **kw):
        try:
            y = self.bld.get_tgen_by_name(name)
        except Errors.WafError:
            pass
        else:
            idx = self.bld.get_group_idx(self)
            odx = self.bld.get_group_idx(y)
            if odx > idx:
                msg = "Invalid 'use' across build groups:"
                if Logs.verbose > 1:
                    msg += "\n  target %r\n  uses:\n  %r" % (self, y)
                else:
                    msg += " %r uses %r (try 'waf -v -v' for the full error)" % (self.name, name)
                raise Errors.WafError(msg)
        self.orig_use_rec(name, **kw)

    TaskGen.task_gen.orig_use_rec = TaskGen.task_gen.use_rec
    TaskGen.task_gen.use_rec = use_rec

    # check for env.append
    def getattri(self, name, default=None):
        if name == "append" or name == "add":
            raise Errors.WafError("env.append and env.add do not exist: use env.append_value/env.append_unique")
        elif name == "prepend":
            raise Errors.WafError("env.prepend does not exist: use env.prepend_value")
        if name in self.__slots__:
            return object.__getattr__(self, name, default)
        else:
            return self[name]

    ConfigSet.ConfigSet.__getattr__ = getattri
예제 #21
0
파일: go.py 프로젝트: DigitalDan05/waf
		set_def('GO_PLATFORM', platform.machine())

	if conf.env.GO_PLATFORM == 'x86_64':
		set_def('GO_COMPILER', '6g')
		set_def('GO_LINKER', '6l')
	elif conf.env.GO_PLATFORM in ('i386', 'i486', 'i586', 'i686'):
		set_def('GO_COMPILER', '8g')
		set_def('GO_LINKER', '8l')
	elif conf.env.GO_PLATFORM == 'arm':
		set_def('GO_COMPILER', '5g')
		set_def('GO_LINKER', '5l')
		set_def('GO_EXTENSION', '.5')

	if not (conf.env.GO_COMPILER or conf.env.GO_LINKER):
		raise conf.fatal('Unsupported platform ' + platform.machine())

	set_def('GO_PACK', 'gopack')
	set_def('gopackage_PATTERN', '%s.a')
	set_def('CPPPATH_ST', '-I%s')

	set_def('GOMAKE_FLAGS', ['--quiet'])
	conf.find_program(conf.env.GO_COMPILER, var='GOC')
	conf.find_program(conf.env.GO_LINKER,   var='GOL')
	conf.find_program(conf.env.GO_PACK,     var='GOP')

	conf.find_program('cgo',                var='CGO')

TaskGen.feature('go')(process_use)
TaskGen.feature('go')(propagate_uselib_vars)

예제 #22
0
파일: errcheck.py 프로젝트: jrossi/waf
def enhance_lib():
	"""
	modify existing classes and methods
	"""
	for m in meths_typos:
		replace(m)

	# catch '..' in ant_glob patterns
	old_ant_glob = Node.Node.ant_glob
	def ant_glob(self, *k, **kw):
		if k:
			for x in k[0].split('/'):
				if x == '..':
					Logs.error("In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'" % k[0])
		return old_ant_glob(self, *k, **kw)
	Node.Node.ant_glob = ant_glob

	# catch conflicting ext_in/ext_out/before/after declarations
	old = Task.is_before
	def is_before(t1, t2):
		ret = old(t1, t2)
		if ret and old(t2, t1):
			Logs.error('Contradictory order constraints in classes %r %r' % (t1, t2))
		return ret
	Task.is_before = is_before

	# check for bld(feature='cshlib') where no 'c' is given - this can be either a mistake or on purpose
	# so we only issue a warning
	def check_err_features(self):
		lst = self.to_list(self.features)
		if 'shlib' in lst:
			Logs.error('feature shlib -> cshlib, dshlib or cxxshlib')
		for x in ('c', 'cxx', 'd', 'fc'):
			if not x in lst and lst and lst[0] in [x+y for y in ('program', 'shlib', 'stlib')]:
				Logs.error('%r features is probably missing %r' % (self, x))
	TaskGen.feature('*')(check_err_features)

	# check for erroneous order constraints
	def check_err_order(self):
		if not hasattr(self, 'rule'):
			for x in ('before', 'after', 'ext_in', 'ext_out'):
				if hasattr(self, x):
					Logs.warn('Erroneous order constraint %r on non-rule based task generator %r' % (x, self))
		else:
			for x in ('before', 'after'):
				for y in self.to_list(getattr(self, x, [])):
					if not Task.classes.get(y, None):
						Logs.error('Erroneous order constraint %s=%r on %r' % (x, y, self))
	TaskGen.feature('*')(check_err_order)

	# check for @extension used with @feature/@before_method/@after_method
	old_compile = Build.BuildContext.compile
	def check_compile(self):
		feat = set([])
		for x in list(TaskGen.feats.values()):
			feat.union(set(x))
		for (x, y) in TaskGen.task_gen.prec.items():
			feat.add(x)
			feat.union(set(y))
		ext = set([])
		for x in TaskGen.task_gen.mappings.values():
			ext.add(x.__name__)
		invalid = ext & feat
		if invalid:
			Logs.error('The methods %r have invalid annotations:  @extension <-> @feature/@before_method/@after_method' % list(invalid))

		# the build scripts have been read, so we can check for invalid after/before attributes on task classes
		for cls in list(Task.classes.values()):
			for x in ('before', 'after'):
				for y in Utils.to_list(getattr(cls, x, [])):
					if not Task.classes.get(y, None):
						Logs.error('Erroneous order constraint %r=%r on task class %r' % (x, y, cls.__name__))

		return old_compile(self)
	Build.BuildContext.compile = check_compile

	# check for env.append
	def getattri(self, name, default=None):
		if name == 'append' or name == 'add':
			raise Errors.WafError('env.append and env.add do not exist: use env.append_value/env.append_unique')
		elif name == 'prepend':
			raise Errors.WafError('env.prepend does not exist: use env.prepend_value')
		if name in self.__slots__:
			return object.__getattr__(self, name, default)
		else:
			return self[name]
	ConfigSet.ConfigSet.__getattr__ = getattri
예제 #23
0
def enhance_lib():
    for m in meths_typos:
        replace(m)

    def ant_glob(self, *k, **kw):
        if k:
            lst = Utils.to_list(k[0])
            for pat in lst:
                if '..' in pat.split('/'):
                    Logs.error(
                        "In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'"
                        % k[0])
        if kw.get('remove', True):
            try:
                if self.is_child_of(
                        self.ctx.bldnode) and not kw.get('quiet', False):
                    Logs.error(
                        'Using ant_glob on the build folder (%r) is dangerous (quiet=True to disable this warning)'
                        % self)
            except AttributeError:
                pass
        return self.old_ant_glob(*k, **kw)

    Node.Node.old_ant_glob = Node.Node.ant_glob
    Node.Node.ant_glob = ant_glob
    old = Task.is_before

    def is_before(t1, t2):
        ret = old(t1, t2)
        if ret and old(t2, t1):
            Logs.error('Contradictory order constraints in classes %r %r' %
                       (t1, t2))
        return ret

    Task.is_before = is_before

    def check_err_features(self):
        lst = self.to_list(self.features)
        if 'shlib' in lst:
            Logs.error('feature shlib -> cshlib, dshlib or cxxshlib')
        for x in ('c', 'cxx', 'd', 'fc'):
            if not x in lst and lst and lst[0] in [
                    x + y for y in ('program', 'shlib', 'stlib')
            ]:
                Logs.error('%r features is probably missing %r' % (self, x))

    TaskGen.feature('*')(check_err_features)

    def check_err_order(self):
        if not hasattr(self, 'rule') and not 'subst' in Utils.to_list(
                self.features):
            for x in ('before', 'after', 'ext_in', 'ext_out'):
                if hasattr(self, x):
                    Logs.warn(
                        'Erroneous order constraint %r on non-rule based task generator %r'
                        % (x, self))
        else:
            for x in ('before', 'after'):
                for y in self.to_list(getattr(self, x, [])):
                    if not Task.classes.get(y, None):
                        Logs.error(
                            'Erroneous order constraint %s=%r on %r (no such class)'
                            % (x, y, self))

    TaskGen.feature('*')(check_err_order)

    def check_compile(self):
        check_invalid_constraints(self)
        try:
            ret = self.orig_compile()
        finally:
            check_same_targets(self)
        return ret

    Build.BuildContext.orig_compile = Build.BuildContext.compile
    Build.BuildContext.compile = check_compile

    def use_rec(self, name, **kw):
        try:
            y = self.bld.get_tgen_by_name(name)
        except Errors.WafError:
            pass
        else:
            idx = self.bld.get_group_idx(self)
            odx = self.bld.get_group_idx(y)
            if odx > idx:
                msg = "Invalid 'use' across build groups:"
                if Logs.verbose > 1:
                    msg += '\n  target %r\n  uses:\n  %r' % (self, y)
                else:
                    msg += " %r uses %r (try 'waf -v -v' for the full error)" % (
                        self.name, name)
                raise Errors.WafError(msg)
        self.orig_use_rec(name, **kw)

    TaskGen.task_gen.orig_use_rec = TaskGen.task_gen.use_rec
    TaskGen.task_gen.use_rec = use_rec

    def getattri(self, name, default=None):
        if name == 'append' or name == 'add':
            raise Errors.WafError(
                'env.append and env.add do not exist: use env.append_value/env.append_unique'
            )
        elif name == 'prepend':
            raise Errors.WafError(
                'env.prepend does not exist: use env.prepend_value')
        if name in self.__slots__:
            return object.__getattr__(self, name, default)
        else:
            return self[name]

    ConfigSet.ConfigSet.__getattr__ = getattri
예제 #24
0
def enhance_lib():
    for m in meths_typos:
        replace(m)
    old_ant_glob = Node.Node.ant_glob

    def ant_glob(self, *k, **kw):
        if k:
            for x in k[0].split('/'):
                if x == '..':
                    Logs.error(
                        "In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'"
                        % k[0])
        return old_ant_glob(self, *k, **kw)

    Node.Node.ant_glob = ant_glob
    old = Task.is_before

    def is_before(t1, t2):
        ret = old(t1, t2)
        if ret and old(t2, t1):
            Logs.error('Contradictory order constraints in classes %r %r' %
                       (t1, t2))
        return ret

    Task.is_before = is_before

    def check_err_features(self):
        lst = self.to_list(self.features)
        if 'shlib' in lst:
            Logs.error('feature shlib -> cshlib, dshlib or cxxshlib')
        for x in ('c', 'cxx', 'd', 'fc'):
            if not x in lst and lst and lst[0] in [
                    x + y for y in ('program', 'shlib', 'stlib')
            ]:
                Logs.error('%r features is probably missing %r' % (self, x))

    TaskGen.feature('*')(check_err_features)

    def check_err_order(self):
        if not hasattr(self, 'rule'):
            for x in ('before', 'after', 'ext_in', 'ext_out'):
                if hasattr(self, x):
                    Logs.warn(
                        'Erroneous order constraint %r on non-rule based task generator %r'
                        % (x, self))
        else:
            for x in ('before', 'after'):
                for y in self.to_list(getattr(self, x, [])):
                    if not Task.classes.get(y, None):
                        Logs.error('Erroneous order constraint %s=%r on %r' %
                                   (x, y, self))

    TaskGen.feature('*')(check_err_order)
    old_compile = Build.BuildContext.compile

    def check_compile(self):
        feat = set([])
        for x in list(TaskGen.feats.values()):
            feat.union(set(x))
        for (x, y) in TaskGen.task_gen.prec.items():
            feat.add(x)
            feat.union(set(y))
        ext = set([])
        for x in TaskGen.task_gen.mappings.values():
            ext.add(x.__name__)
        invalid = ext & feat
        if invalid:
            Logs.error(
                'The methods %r have invalid annotations:  @extension <-> @feature/@before_method/@after_method'
                % list(invalid))
        for cls in list(Task.classes.values()):
            for x in ('before', 'after'):
                for y in Utils.to_list(getattr(cls, x, [])):
                    if not Task.classes.get(y, None):
                        Logs.error(
                            'Erroneous order constraint %r=%r on task class %r'
                            % (x, y, cls.__name__))
        return old_compile(self)

    Build.BuildContext.compile = check_compile

    def getattri(self, name, default=None):
        if name == 'append' or name == 'add':
            raise Errors.WafError(
                'env.append and env.add do not exist: use env.append_value/env.append_unique'
            )
        elif name == 'prepend':
            raise Errors.WafError(
                'env.prepend does not exist: use env.prepend_value')
        if name in self.__slots__:
            return object.__getattr__(self, name, default)
        else:
            return self[name]

    ConfigSet.ConfigSet.__getattr__ = getattri
예제 #25
0
            tool.process_file(infile, outfile)
        except fypp.FyppError as err:
            msg = ("%s [%s:%d]" % (err.msg, err.fname, err.span[0] + 1))
            raise FyppPreprocError(msg)
        return 0

    def scan(self):
        parser = FyppIncludeParser(self.generator.includes_nodes)
        nodes, names = parser.parse(self.inputs[0])
        if Logs.verbose:
            Logs.debug('deps: deps for %r: %r; unresolved: %r' %
                       (self.inputs, nodes, names))
        return (nodes, names)


TaskGen.feature('fypp')(Tools.ccroot.propagate_uselib_vars)
TaskGen.feature('fypp')(Tools.ccroot.apply_incpaths)

################################################################################
# Helper routines
################################################################################


class FyppIncludeParser(object):
    '''Parser for include directives in files preprocessed by Fypp.

	It can not handle conditional includes.
	'''

    # Include file pattern, opening and closing quoute must be replaced inside.
    INCLUDE_PATTERN = re.compile(r'^\s*#:include\s*(["\'])(?P<incfile>.+?)\1',
예제 #26
0
def enhance_lib():
    """
	Modifies existing classes and methods to enable error verification
	"""
    for m in meths_typos:
        replace(m)

    # catch '..' in ant_glob patterns
    def ant_glob(self, *k, **kw):
        if k:
            lst = Utils.to_list(k[0])
            for pat in lst:
                sp = pat.split('/')
                if '..' in sp:
                    Logs.error(
                        "In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'",
                        k[0])
                if '.' in sp:
                    Logs.error(
                        "In ant_glob pattern %r: '.' means 'one dot', not 'current directory'",
                        k[0])
        if kw.get('remove', True):
            try:
                if self.is_child_of(self.ctx.bldnode) and not kw.get('quiet'):
                    Logs.error(
                        'Using ant_glob on the build folder (%r) is dangerous (quiet=True to disable this warning)',
                        self)
            except AttributeError:
                pass
        return self.old_ant_glob(*k, **kw)

    Node.Node.old_ant_glob = Node.Node.ant_glob
    Node.Node.ant_glob = ant_glob

    # catch conflicting ext_in/ext_out/before/after declarations
    old = Task.is_before

    def is_before(t1, t2):
        ret = old(t1, t2)
        if ret and old(t2, t1):
            Logs.error('Contradictory order constraints in classes %r %r', t1,
                       t2)
        return ret

    Task.is_before = is_before

    # check for bld(feature='cshlib') where no 'c' is given - this can be either a mistake or on purpose
    # so we only issue a warning
    def check_err_features(self):
        lst = self.to_list(self.features)
        if 'shlib' in lst:
            Logs.error('feature shlib -> cshlib, dshlib or cxxshlib')
        for x in ('c', 'cxx', 'd', 'fc'):
            if not x in lst and lst and lst[0] in [
                    x + y for y in ('program', 'shlib', 'stlib')
            ]:
                Logs.error('%r features is probably missing %r', self, x)

    TaskGen.feature('*')(check_err_features)

    # check for erroneous order constraints
    def check_err_order(self):
        if not hasattr(self, 'rule') and not 'subst' in Utils.to_list(
                self.features):
            for x in ('before', 'after', 'ext_in', 'ext_out'):
                if hasattr(self, x):
                    Logs.warn(
                        'Erroneous order constraint %r on non-rule based task generator %r',
                        x, self)
        else:
            for x in ('before', 'after'):
                for y in self.to_list(getattr(self, x, [])):
                    if not Task.classes.get(y):
                        Logs.error(
                            'Erroneous order constraint %s=%r on %r (no such class)',
                            x, y, self)

    TaskGen.feature('*')(check_err_order)

    # check for @extension used with @feature/@before_method/@after_method
    def check_compile(self):
        check_invalid_constraints(self)
        try:
            ret = self.orig_compile()
        finally:
            check_same_targets(self)
        return ret

    Build.BuildContext.orig_compile = Build.BuildContext.compile
    Build.BuildContext.compile = check_compile

    # check for invalid build groups #914
    def use_rec(self, name, **kw):
        try:
            y = self.bld.get_tgen_by_name(name)
        except Errors.WafError:
            pass
        else:
            idx = self.bld.get_group_idx(self)
            odx = self.bld.get_group_idx(y)
            if odx > idx:
                msg = "Invalid 'use' across build groups:"
                if Logs.verbose > 1:
                    msg += '\n  target %r\n  uses:\n  %r' % (self, y)
                else:
                    msg += " %r uses %r (try 'waf -v -v' for the full error)" % (
                        self.name, name)
                raise Errors.WafError(msg)
        self.orig_use_rec(name, **kw)

    TaskGen.task_gen.orig_use_rec = TaskGen.task_gen.use_rec
    TaskGen.task_gen.use_rec = use_rec

    # check for env.append
    def _getattr(self, name, default=None):
        if name == 'append' or name == 'add':
            raise Errors.WafError(
                'env.append and env.add do not exist: use env.append_value/env.append_unique'
            )
        elif name == 'prepend':
            raise Errors.WafError(
                'env.prepend does not exist: use env.prepend_value')
        if name in self.__slots__:
            return super(ConfigSet.ConfigSet, self).__getattr__(name, default)
        else:
            return self[name]

    ConfigSet.ConfigSet.__getattr__ = _getattr
예제 #27
0
def enhance_lib():
    """
    Modifies existing classes and methods to enable error verification
    """
    for m in meths_typos:
        replace(m)

    # catch '..' in ant_glob patterns
    def ant_glob(self, *k, **kw):
        if k:
            lst = Utils.to_list(k[0])
            for pat in lst:
                sp = pat.split("/")
                if ".." in sp:
                    Logs.error(
                        "In ant_glob pattern %r: '..' means 'two dots', not 'parent directory'",
                        k[0],
                    )
                if "." in sp:
                    Logs.error(
                        "In ant_glob pattern %r: '.' means 'one dot', not 'current directory'",
                        k[0],
                    )
        return self.old_ant_glob(*k, **kw)

    Node.Node.old_ant_glob = Node.Node.ant_glob
    Node.Node.ant_glob = ant_glob

    # catch ant_glob on build folders
    def ant_iter(
        self,
        accept=None,
        maxdepth=25,
        pats=[],
        dir=False,
        src=True,
        remove=True,
        quiet=False,
    ):
        if remove:
            try:
                if self.is_child_of(self.ctx.bldnode) and not quiet:
                    quiet = True
                    Logs.error(
                        "Calling ant_glob on build folders (%r) is dangerous: add quiet=True / remove=False",
                        self,
                    )
            except AttributeError:
                pass
        return self.old_ant_iter(accept, maxdepth, pats, dir, src, remove,
                                 quiet)

    Node.Node.old_ant_iter = Node.Node.ant_iter
    Node.Node.ant_iter = ant_iter

    # catch conflicting ext_in/ext_out/before/after declarations
    old = Task.is_before

    def is_before(t1, t2):
        ret = old(t1, t2)
        if ret and old(t2, t1):
            Logs.error("Contradictory order constraints in classes %r %r", t1,
                       t2)
        return ret

    Task.is_before = is_before

    # check for bld(feature='cshlib') where no 'c' is given - this can be either a mistake or on purpose
    # so we only issue a warning
    def check_err_features(self):
        lst = self.to_list(self.features)
        if "shlib" in lst:
            Logs.error("feature shlib -> cshlib, dshlib or cxxshlib")
        for x in ("c", "cxx", "d", "fc"):
            if (not x in lst and lst and lst[0]
                    in [x + y for y in ("program", "shlib", "stlib")]):
                Logs.error("%r features is probably missing %r", self, x)

    TaskGen.feature("*")(check_err_features)

    # check for erroneous order constraints
    def check_err_order(self):
        if not hasattr(self, "rule") and not "subst" in Utils.to_list(
                self.features):
            for x in ("before", "after", "ext_in", "ext_out"):
                if hasattr(self, x):
                    Logs.warn(
                        "Erroneous order constraint %r on non-rule based task generator %r",
                        x,
                        self,
                    )
        else:
            for x in ("before", "after"):
                for y in self.to_list(getattr(self, x, [])):
                    if not Task.classes.get(y):
                        Logs.error(
                            "Erroneous order constraint %s=%r on %r (no such class)",
                            x,
                            y,
                            self,
                        )

    TaskGen.feature("*")(check_err_order)

    # check for @extension used with @feature/@before_method/@after_method
    def check_compile(self):
        check_invalid_constraints(self)
        try:
            ret = self.orig_compile()
        finally:
            check_same_targets(self)
        return ret

    Build.BuildContext.orig_compile = Build.BuildContext.compile
    Build.BuildContext.compile = check_compile

    # check for invalid build groups #914
    def use_rec(self, name, **kw):
        try:
            y = self.bld.get_tgen_by_name(name)
        except Errors.WafError:
            pass
        else:
            idx = self.bld.get_group_idx(self)
            odx = self.bld.get_group_idx(y)
            if odx > idx:
                msg = "Invalid 'use' across build groups:"
                if Logs.verbose > 1:
                    msg += f"\n  target {self!r}\n  uses:\n  {y!r}"
                else:
                    msg += f" {self.name!r} uses {name!r} (try 'waf -v -v' for the full error)"
                raise Errors.WafError(msg)
        self.orig_use_rec(name, **kw)

    TaskGen.task_gen.orig_use_rec = TaskGen.task_gen.use_rec
    TaskGen.task_gen.use_rec = use_rec

    # check for env.append
    def _getattr(self, name, default=None):
        if name == "append" or name == "add":
            raise Errors.WafError(
                "env.append and env.add do not exist: use env.append_value/env.append_unique"
            )
        elif name == "prepend":
            raise Errors.WafError(
                "env.prepend does not exist: use env.prepend_value")
        if name in self.__slots__:
            return super(ConfigSet.ConfigSet, self).__getattr__(name, default)
        else:
            return self[name]

    ConfigSet.ConfigSet.__getattr__ = _getattr
예제 #28
0
파일: lua.py 프로젝트: ldiez/GWNSyM
#! /usr/bin/env python
# encoding: utf-8
# WARNING! All changes made to this file will be lost!

from waflib import TaskGen, Utils
TaskGen.declare_chain(name='luac',
                      rule='${LUAC} -s -o ${TGT} ${SRC}',
                      ext_in='.lua',
                      ext_out='.luac',
                      reentrant=False)


def init_lua(self):
    self.default_chmod = Utils.O755


def configure(conf):
    conf.find_program('luac', var='LUAC')


TaskGen.feature('lua')(init_lua)