#! /usr/bin/env python
# encoding: utf-8
# WARNING! Do not edit! https://waf.io/book/index.html#_obtaining_the_waf_file

import sys
from waflib import ConfigSet,Logs,Options,Scripting,Task,Build,Configure,Node,Runner,TaskGen,Utils,Errors,Context
sys.modules['Environment']=ConfigSet
ConfigSet.Environment=ConfigSet.ConfigSet
sys.modules['Logs']=Logs
sys.modules['Options']=Options
sys.modules['Scripting']=Scripting
sys.modules['Task']=Task
sys.modules['Build']=Build
sys.modules['Configure']=Configure
sys.modules['Node']=Node
sys.modules['Runner']=Runner
sys.modules['TaskGen']=TaskGen
sys.modules['Utils']=Utils
sys.modules['Constants']=Context
Context.SRCDIR=''
Context.BLDDIR=''
from waflib.Tools import c_preproc
sys.modules['preproc']=c_preproc
from waflib.Tools import c_config
sys.modules['config_c']=c_config
ConfigSet.ConfigSet.copy=ConfigSet.ConfigSet.derive
ConfigSet.ConfigSet.set_variant=Utils.nada
Utils.pproc=Utils.subprocess
Build.BuildContext.add_subdirs=Build.BuildContext.recurse
Build.BuildContext.new_task_gen=Build.BuildContext.__call__
Build.BuildContext.is_install=0
Node.Node.relpath_gen=Node.Node.path_from
Utils.pproc=Utils.subprocess
Utils.get_term_cols=Logs.get_term_cols
def cmd_output(cmd,**kw):
	silent=False
	if'silent'in kw:
		silent=kw['silent']
		del(kw['silent'])
	if'e'in kw:
		tmp=kw['e']
		del(kw['e'])
		kw['env']=tmp
	kw['shell']=isinstance(cmd,str)
	kw['stdout']=Utils.subprocess.PIPE
	if silent:
		kw['stderr']=Utils.subprocess.PIPE
	try:
		p=Utils.subprocess.Popen(cmd,**kw)
		output=p.communicate()[0]
	except OSError as e:
		raise ValueError(str(e))
	if p.returncode:
		if not silent:
			msg="command execution failed: %s -> %r"%(cmd,str(output))
			raise ValueError(msg)
		output=''
	return output
Utils.cmd_output=cmd_output
def name_to_obj(self,s,env=None):
	if Logs.verbose:
		Logs.warn('compat: change "name_to_obj(name, env)" by "get_tgen_by_name(name)"')
	return self.get_tgen_by_name(s)
Build.BuildContext.name_to_obj=name_to_obj
def env_of_name(self,name):
	try:
		return self.all_envs[name]
	except KeyError:
		Logs.error('no such environment: '+name)
		return None
Build.BuildContext.env_of_name=env_of_name
def set_env_name(self,name,env):
	self.all_envs[name]=env
	return env
Configure.ConfigurationContext.set_env_name=set_env_name
def retrieve(self,name,fromenv=None):
	try:
		env=self.all_envs[name]
	except KeyError:
		env=ConfigSet.ConfigSet()
		self.prepare_env(env)
		self.all_envs[name]=env
	else:
		if fromenv:
			Logs.warn('The environment %s may have been configured already',name)
	return env
Configure.ConfigurationContext.retrieve=retrieve
Configure.ConfigurationContext.sub_config=Configure.ConfigurationContext.recurse
Configure.ConfigurationContext.check_tool=Configure.ConfigurationContext.load
Configure.conftest=Configure.conf
Configure.ConfigurationError=Errors.ConfigurationError
Utils.WafError=Errors.WafError
Options.OptionsContext.sub_options=Options.OptionsContext.recurse
Options.OptionsContext.tool_options=Context.Context.load
Options.Handler=Options.OptionsContext
Task.simple_task_type=Task.task_type_from_func=Task.task_factory
Task.Task.classes=Task.classes
def setitem(self,key,value):
	if key.startswith('CCFLAGS'):
		key=key[1:]
	self.table[key]=value
ConfigSet.ConfigSet.__setitem__=setitem
@TaskGen.feature('d')
@TaskGen.before('apply_incpaths')
def old_importpaths(self):
	if getattr(self,'importpaths',[]):
		self.includes=self.importpaths
from waflib import Context
eld=Context.load_tool
def load_tool(*k,**kw):
	ret=eld(*k,**kw)
	if'set_options'in ret.__dict__:
		if Logs.verbose:
			Logs.warn('compat: rename "set_options" to options')
		ret.options=ret.set_options
	if'detect'in ret.__dict__:
		if Logs.verbose:
			Logs.warn('compat: rename "detect" to "configure"')
		ret.configure=ret.detect
	return ret
Context.load_tool=load_tool
def get_curdir(self):
	return self.path.abspath()
Context.Context.curdir=property(get_curdir,Utils.nada)
def get_srcdir(self):
	return self.srcnode.abspath()
Configure.ConfigurationContext.srcdir=property(get_srcdir,Utils.nada)
def get_blddir(self):
	return self.bldnode.abspath()
Configure.ConfigurationContext.blddir=property(get_blddir,Utils.nada)
Configure.ConfigurationContext.check_message_1=Configure.ConfigurationContext.start_msg
Configure.ConfigurationContext.check_message_2=Configure.ConfigurationContext.end_msg
rev=Context.load_module
def load_module(path,encoding=None):
	ret=rev(path,encoding)
	if'set_options'in ret.__dict__:
		if Logs.verbose:
			Logs.warn('compat: rename "set_options" to "options" (%r)',path)
		ret.options=ret.set_options
	if'srcdir'in ret.__dict__:
		if Logs.verbose:
			Logs.warn('compat: rename "srcdir" to "top" (%r)',path)
		ret.top=ret.srcdir
	if'blddir'in ret.__dict__:
		if Logs.verbose:
			Logs.warn('compat: rename "blddir" to "out" (%r)',path)
		ret.out=ret.blddir
	Utils.g_module=Context.g_module
	Options.launch_dir=Context.launch_dir
	return ret
Context.load_module=load_module
old_post=TaskGen.task_gen.post
def post(self):
	self.features=self.to_list(self.features)
	if'cc'in self.features:
		if Logs.verbose:
			Logs.warn('compat: the feature cc does not exist anymore (use "c")')
		self.features.remove('cc')
		self.features.append('c')
	if'cstaticlib'in self.features:
		if Logs.verbose:
			Logs.warn('compat: the feature cstaticlib does not exist anymore (use "cstlib" or "cxxstlib")')
		self.features.remove('cstaticlib')
		self.features.append(('cxx'in self.features)and'cxxstlib'or'cstlib')
	if getattr(self,'ccflags',None):
		if Logs.verbose:
			Logs.warn('compat: "ccflags" was renamed to "cflags"')
		self.cflags=self.ccflags
	return old_post(self)
TaskGen.task_gen.post=post
def waf_version(*k,**kw):
	Logs.warn('wrong version (waf_version was removed in waf 1.6)')
Utils.waf_version=waf_version
import os
@TaskGen.feature('c','cxx','d')
@TaskGen.before('apply_incpaths','propagate_uselib_vars')
@TaskGen.after('apply_link','process_source')
def apply_uselib_local(self):
	env=self.env
	from waflib.Tools.ccroot import stlink_task
	self.uselib=self.to_list(getattr(self,'uselib',[]))
	self.includes=self.to_list(getattr(self,'includes',[]))
	names=self.to_list(getattr(self,'uselib_local',[]))
	get=self.bld.get_tgen_by_name
	seen=set()
	seen_uselib=set()
	tmp=Utils.deque(names)
	if tmp:
		if Logs.verbose:
			Logs.warn('compat: "uselib_local" is deprecated, replace by "use"')
	while tmp:
		lib_name=tmp.popleft()
		if lib_name in seen:
			continue
		y=get(lib_name)
		y.post()
		seen.add(lib_name)
		if getattr(y,'uselib_local',None):
			for x in self.to_list(getattr(y,'uselib_local',[])):
				obj=get(x)
				obj.post()
				if getattr(obj,'link_task',None):
					if not isinstance(obj.link_task,stlink_task):
						tmp.append(x)
		if getattr(y,'link_task',None):
			link_name=y.target[y.target.rfind(os.sep)+1:]
			if isinstance(y.link_task,stlink_task):
				env.append_value('STLIB',[link_name])
			else:
				env.append_value('LIB',[link_name])
			self.link_task.set_run_after(y.link_task)
			self.link_task.dep_nodes+=y.link_task.outputs
			tmp_path=y.link_task.outputs[0].parent.bldpath()
			if not tmp_path in env['LIBPATH']:
				env.prepend_value('LIBPATH',[tmp_path])
		for v in self.to_list(getattr(y,'uselib',[])):
			if v not in seen_uselib:
				seen_uselib.add(v)
				if not env['STLIB_'+v]:
					if not v in self.uselib:
						self.uselib.insert(0,v)
		if getattr(y,'export_includes',None):
			self.includes.extend(y.to_incnodes(y.export_includes))
@TaskGen.feature('cprogram','cxxprogram','cstlib','cxxstlib','cshlib','cxxshlib','dprogram','dstlib','dshlib')
@TaskGen.after('apply_link')
def apply_objdeps(self):
	names=getattr(self,'add_objects',[])
	if not names:
		return
	names=self.to_list(names)
	get=self.bld.get_tgen_by_name
	seen=[]
	while names:
		x=names[0]
		if x in seen:
			names=names[1:]
			continue
		y=get(x)
		if getattr(y,'add_objects',None):
			added=0
			lst=y.to_list(y.add_objects)
			lst.reverse()
			for u in lst:
				if u in seen:
					continue
				added=1
				names=[u]+names
			if added:
				continue
		y.post()
		seen.append(x)
		for t in getattr(y,'compiled_tasks',[]):
			self.link_task.inputs.extend(t.outputs)
@TaskGen.after('apply_link')
def process_obj_files(self):
	if not hasattr(self,'obj_files'):
		return
	for x in self.obj_files:
		node=self.path.find_resource(x)
		self.link_task.inputs.append(node)
@TaskGen.taskgen_method
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']
@Configure.conf
def define(self,key,val,quote=True,comment=''):
	old_define(self,key,val,quote,comment)
	if key.startswith('HAVE_'):
		self.env[key]=1
old_undefine=Configure.ConfigurationContext.__dict__['undefine']
@Configure.conf
def undefine(self,key,comment=''):
	old_undefine(self,key,comment)
	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)
def install_dir(self,path):
	if not path:
		return[]
	destpath=Utils.subst_vars(path,self.env)
	if self.is_install>0:
		Logs.info('* creating %s',destpath)
		Utils.check_dir(destpath)
	elif self.is_install<0:
		Logs.info('* removing %s',destpath)
		try:
			os.remove(destpath)
		except OSError:
			pass
Build.BuildContext.install_dir=install_dir
repl={'apply_core':'process_source','apply_lib_vars':'process_source','apply_obj_vars':'propagate_uselib_vars','exec_rule':'process_rule'}
def after(*k):
	k=[repl.get(key,key)for key in k]
	return TaskGen.after_method(*k)
def before(*k):
	k=[repl.get(key,key)for key in k]
	return TaskGen.before_method(*k)
TaskGen.before=before
