source: waflib/Tools/vala.py @ eadd8d5

feature/autosinkfeature/cnnfeature/cnn_orgfeature/constantqfeature/crepefeature/crepe_orgfeature/pitchshiftfeature/pydocstringsfeature/timestretchfix/ffmpeg5pitchshiftsamplertimestretchyinfft+
Last change on this file since eadd8d5 was 0fa325b, checked in by Paul Brossier <piem@piem.org>, 11 years ago

waf: unpack

  • Property mode set to 100644
File size: 7.8 KB
Line 
1#! /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.path,shutil,re
6from waflib import Context,Task,Utils,Logs,Options,Errors
7from waflib.TaskGen import extension,taskgen_method
8from waflib.Configure import conf
9class valac(Task.Task):
10        vars=["VALAC","VALAC_VERSION","VALAFLAGS"]
11        ext_out=['.h']
12        def run(self):
13                cmd=[self.env['VALAC']]+self.env['VALAFLAGS']
14                cmd.extend([a.abspath()for a in self.inputs])
15                ret=self.exec_command(cmd,cwd=self.outputs[0].parent.abspath())
16                if ret:
17                        return ret
18                for x in self.outputs:
19                        if id(x.parent)!=id(self.outputs[0].parent):
20                                shutil.move(self.outputs[0].parent.abspath()+os.sep+x.name,x.abspath())
21                if self.generator.dump_deps_node:
22                        self.generator.dump_deps_node.write('\n'.join(self.generator.packages))
23                return ret
24valac=Task.update_outputs(valac)
25@taskgen_method
26def init_vala_task(self):
27        self.profile=getattr(self,'profile','gobject')
28        if self.profile=='gobject':
29                self.uselib=Utils.to_list(getattr(self,'uselib',[]))
30                if not'GOBJECT'in self.uselib:
31                        self.uselib.append('GOBJECT')
32        def addflags(flags):
33                self.env.append_value('VALAFLAGS',flags)
34        if self.profile:
35                addflags('--profile=%s'%self.profile)
36        if hasattr(self,'threading'):
37                if self.profile=='gobject':
38                        if not'GTHREAD'in self.uselib:
39                                self.uselib.append('GTHREAD')
40                else:
41                        Logs.warn("Profile %s means no threading support"%self.profile)
42                        self.threading=False
43                if self.threading:
44                        addflags('--threading')
45        valatask=self.valatask
46        self.is_lib='cprogram'not in self.features
47        if self.is_lib:
48                addflags('--library=%s'%self.target)
49                h_node=self.path.find_or_declare('%s.h'%self.target)
50                valatask.outputs.append(h_node)
51                addflags('--header=%s'%h_node.name)
52                valatask.outputs.append(self.path.find_or_declare('%s.vapi'%self.target))
53                if getattr(self,'gir',None):
54                        gir_node=self.path.find_or_declare('%s.gir'%self.gir)
55                        addflags('--gir=%s'%gir_node.name)
56                        valatask.outputs.append(gir_node)
57        self.vala_target_glib=getattr(self,'vala_target_glib',getattr(Options.options,'vala_target_glib',None))
58        if self.vala_target_glib:
59                addflags('--target-glib=%s'%self.vala_target_glib)
60        addflags(['--define=%s'%x for x in getattr(self,'vala_defines',[])])
61        packages_private=Utils.to_list(getattr(self,'packages_private',[]))
62        addflags(['--pkg=%s'%x for x in packages_private])
63        def _get_api_version():
64                api_version='1.0'
65                if hasattr(Context.g_module,'API_VERSION'):
66                        version=Context.g_module.API_VERSION.split(".")
67                        if version[0]=="0":
68                                api_version="0."+version[1]
69                        else:
70                                api_version=version[0]+".0"
71                return api_version
72        self.includes=Utils.to_list(getattr(self,'includes',[]))
73        self.uselib=self.to_list(getattr(self,'uselib',[]))
74        valatask.install_path=getattr(self,'install_path','')
75        valatask.vapi_path=getattr(self,'vapi_path','${DATAROOTDIR}/vala/vapi')
76        valatask.pkg_name=getattr(self,'pkg_name',self.env['PACKAGE'])
77        valatask.header_path=getattr(self,'header_path','${INCLUDEDIR}/%s-%s'%(valatask.pkg_name,_get_api_version()))
78        valatask.install_binding=getattr(self,'install_binding',True)
79        self.packages=packages=Utils.to_list(getattr(self,'packages',[]))
80        self.vapi_dirs=vapi_dirs=Utils.to_list(getattr(self,'vapi_dirs',[]))
81        includes=[]
82        if hasattr(self,'use'):
83                local_packages=Utils.to_list(self.use)[:]
84                seen=[]
85                while len(local_packages)>0:
86                        package=local_packages.pop()
87                        if package in seen:
88                                continue
89                        seen.append(package)
90                        try:
91                                package_obj=self.bld.get_tgen_by_name(package)
92                        except Errors.WafError:
93                                continue
94                        package_name=package_obj.target
95                        package_node=package_obj.path
96                        package_dir=package_node.path_from(self.path)
97                        for task in package_obj.tasks:
98                                for output in task.outputs:
99                                        if output.name==package_name+".vapi":
100                                                valatask.set_run_after(task)
101                                                if package_name not in packages:
102                                                        packages.append(package_name)
103                                                if package_dir not in vapi_dirs:
104                                                        vapi_dirs.append(package_dir)
105                                                if package_dir not in includes:
106                                                        includes.append(package_dir)
107                        if hasattr(package_obj,'use'):
108                                lst=self.to_list(package_obj.use)
109                                lst.reverse()
110                                local_packages=[pkg for pkg in lst if pkg not in seen]+local_packages
111        addflags(['--pkg=%s'%p for p in packages])
112        for vapi_dir in vapi_dirs:
113                v_node=self.path.find_dir(vapi_dir)
114                if not v_node:
115                        Logs.warn('Unable to locate Vala API directory: %r'%vapi_dir)
116                else:
117                        addflags('--vapidir=%s'%v_node.abspath())
118                        addflags('--vapidir=%s'%v_node.get_bld().abspath())
119        self.dump_deps_node=None
120        if self.is_lib and self.packages:
121                self.dump_deps_node=self.path.find_or_declare('%s.deps'%self.target)
122                valatask.outputs.append(self.dump_deps_node)
123        self.includes.append(self.bld.srcnode.abspath())
124        self.includes.append(self.bld.bldnode.abspath())
125        for include in includes:
126                try:
127                        self.includes.append(self.path.find_dir(include).abspath())
128                        self.includes.append(self.path.find_dir(include).get_bld().abspath())
129                except AttributeError:
130                        Logs.warn("Unable to locate include directory: '%s'"%include)
131        if self.is_lib and valatask.install_binding:
132                headers_list=[o for o in valatask.outputs if o.suffix()==".h"]
133                try:
134                        self.install_vheader.source=headers_list
135                except AttributeError:
136                        self.install_vheader=self.bld.install_files(valatask.header_path,headers_list,self.env)
137                vapi_list=[o for o in valatask.outputs if(o.suffix()in(".vapi",".deps"))]
138                try:
139                        self.install_vapi.source=vapi_list
140                except AttributeError:
141                        self.install_vapi=self.bld.install_files(valatask.vapi_path,vapi_list,self.env)
142                gir_list=[o for o in valatask.outputs if o.suffix()=='.gir']
143                try:
144                        self.install_gir.source=gir_list
145                except AttributeError:
146                        self.install_gir=self.bld.install_files(getattr(self,'gir_path','${DATAROOTDIR}/gir-1.0'),gir_list,self.env)
147@extension('.vala','.gs')
148def vala_file(self,node):
149        try:
150                valatask=self.valatask
151        except AttributeError:
152                valatask=self.valatask=self.create_task('valac')
153                self.init_vala_task()
154        valatask.inputs.append(node)
155        c_node=node.change_ext('.c')
156        valatask.outputs.append(c_node)
157        self.source.append(c_node)
158@conf
159def find_valac(self,valac_name,min_version):
160        valac=self.find_program(valac_name,var='VALAC')
161        try:
162                output=self.cmd_and_log(valac+' --version')
163        except Exception:
164                valac_version=None
165        else:
166                ver=re.search(r'\d+.\d+.\d+',output).group(0).split('.')
167                valac_version=tuple([int(x)for x in ver])
168        self.msg('Checking for %s version >= %r'%(valac_name,min_version),valac_version,valac_version and valac_version>=min_version)
169        if valac and valac_version<min_version:
170                self.fatal("%s version %r is too old, need >= %r"%(valac_name,valac_version,min_version))
171        self.env['VALAC_VERSION']=valac_version
172        return valac
173@conf
174def check_vala(self,min_version=(0,8,0),branch=None):
175        if not branch:
176                branch=min_version[:2]
177        try:
178                find_valac(self,'valac-%d.%d'%(branch[0],branch[1]),min_version)
179        except self.errors.ConfigurationError:
180                find_valac(self,'valac',min_version)
181@conf
182def check_vala_deps(self):
183        if not self.env['HAVE_GOBJECT']:
184                pkg_args={'package':'gobject-2.0','uselib_store':'GOBJECT','args':'--cflags --libs'}
185                if getattr(Options.options,'vala_target_glib',None):
186                        pkg_args['atleast_version']=Options.options.vala_target_glib
187                self.check_cfg(**pkg_args)
188        if not self.env['HAVE_GTHREAD']:
189                pkg_args={'package':'gthread-2.0','uselib_store':'GTHREAD','args':'--cflags --libs'}
190                if getattr(Options.options,'vala_target_glib',None):
191                        pkg_args['atleast_version']=Options.options.vala_target_glib
192                self.check_cfg(**pkg_args)
193def configure(self):
194        self.load('gnu_dirs')
195        self.check_vala_deps()
196        self.check_vala()
197        self.env.VALAFLAGS=['-C','--quiet']
198def options(opt):
199        opt.load('gnu_dirs')
200        valaopts=opt.add_option_group('Vala Compiler Options')
201        valaopts.add_option('--vala-target-glib',default=None,dest='vala_target_glib',metavar='MAJOR.MINOR',help='Target version of glib for Vala GObject code generation')
Note: See TracBrowser for help on using the repository browser.