source: waflib/Tools/cs.py @ 8e7d66f

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

waf: unpack

  • Property mode set to 100644
File size: 4.0 KB
RevLine 
[0fa325b]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
5from waflib import Utils,Task,Options,Logs,Errors
6from waflib.TaskGen import before_method,after_method,feature
7from waflib.Tools import ccroot
8from waflib.Configure import conf
9import os,tempfile
10ccroot.USELIB_VARS['cs']=set(['CSFLAGS','ASSEMBLIES','RESOURCES'])
11ccroot.lib_patterns['csshlib']=['%s']
12@feature('cs')
13@before_method('process_source')
14def apply_cs(self):
15        cs_nodes=[]
16        no_nodes=[]
17        for x in self.to_nodes(self.source):
18                if x.name.endswith('.cs'):
19                        cs_nodes.append(x)
20                else:
21                        no_nodes.append(x)
22        self.source=no_nodes
23        bintype=getattr(self,'bintype',self.gen.endswith('.dll')and'library'or'exe')
24        self.cs_task=tsk=self.create_task('mcs',cs_nodes,self.path.find_or_declare(self.gen))
25        tsk.env.CSTYPE='/target:%s'%bintype
26        tsk.env.OUT='/out:%s'%tsk.outputs[0].abspath()
27        self.env.append_value('CSFLAGS','/platform:%s'%getattr(self,'platform','anycpu'))
28        inst_to=getattr(self,'install_path',bintype=='exe'and'${BINDIR}'or'${LIBDIR}')
29        if inst_to:
30                mod=getattr(self,'chmod',bintype=='exe'and Utils.O755 or Utils.O644)
31                self.install_task=self.bld.install_files(inst_to,self.cs_task.outputs[:],env=self.env,chmod=mod)
32@feature('cs')
33@after_method('apply_cs')
34def use_cs(self):
35        names=self.to_list(getattr(self,'use',[]))
36        get=self.bld.get_tgen_by_name
37        for x in names:
38                try:
39                        y=get(x)
40                except Errors.WafError:
41                        self.env.append_value('CSFLAGS','/reference:%s'%x)
42                        continue
43                y.post()
44                tsk=getattr(y,'cs_task',None)or getattr(y,'link_task',None)
45                if not tsk:
46                        self.bld.fatal('cs task has no link task for use %r'%self)
47                self.cs_task.dep_nodes.extend(tsk.outputs)
48                self.cs_task.set_run_after(tsk)
49                self.env.append_value('CSFLAGS','/reference:%s'%tsk.outputs[0].abspath())
50@feature('cs')
51@after_method('apply_cs','use_cs')
52def debug_cs(self):
53        csdebug=getattr(self,'csdebug',self.env.CSDEBUG)
54        if not csdebug:
55                return
56        node=self.cs_task.outputs[0]
57        if self.env.CS_NAME=='mono':
58                out=node.parent.find_or_declare(node.name+'.mdb')
59        else:
60                out=node.change_ext('.pdb')
61        self.cs_task.outputs.append(out)
62        try:
63                self.install_task.source.append(out)
64        except AttributeError:
65                pass
66        if csdebug=='pdbonly':
67                val=['/debug+','/debug:pdbonly']
68        elif csdebug=='full':
69                val=['/debug+','/debug:full']
70        else:
71                val=['/debug-']
72        self.env.append_value('CSFLAGS',val)
73class mcs(Task.Task):
74        color='YELLOW'
75        run_str='${MCS} ${CSTYPE} ${CSFLAGS} ${ASS_ST:ASSEMBLIES} ${RES_ST:RESOURCES} ${OUT} ${SRC}'
76        def exec_command(self,cmd,**kw):
77                bld=self.generator.bld
78                try:
79                        if not kw.get('cwd',None):
80                                kw['cwd']=bld.cwd
81                except AttributeError:
82                        bld.cwd=kw['cwd']=bld.variant_dir
83                try:
84                        tmp=None
85                        if isinstance(cmd,list)and len(' '.join(cmd))>=8192:
86                                program=cmd[0]
87                                cmd=[self.quote_response_command(x)for x in cmd]
88                                (fd,tmp)=tempfile.mkstemp()
89                                os.write(fd,'\r\n'.join(i.replace('\\','\\\\')for i in cmd[1:]))
90                                os.close(fd)
91                                cmd=[program,'@'+tmp]
92                        ret=self.generator.bld.exec_command(cmd,**kw)
93                finally:
94                        if tmp:
95                                try:
96                                        os.remove(tmp)
97                                except OSError:
98                                        pass
99                return ret
100        def quote_response_command(self,flag):
101                if flag.lower()=='/noconfig':
102                        return''
103                if flag.find(' ')>-1:
104                        for x in('/r:','/reference:','/resource:','/lib:','/out:'):
105                                if flag.startswith(x):
106                                        flag='%s"%s"'%(x,flag[len(x):])
107                                        break
108                        else:
109                                flag='"%s"'%flag
110                return flag
111def configure(conf):
112        csc=getattr(Options.options,'cscbinary',None)
113        if csc:
114                conf.env.MCS=csc
115        conf.find_program(['csc','mcs','gmcs'],var='MCS')
116        conf.env.ASS_ST='/r:%s'
117        conf.env.RES_ST='/resource:%s'
118        conf.env.CS_NAME='csc'
119        if str(conf.env.MCS).lower().find('mcs')>-1:
120                conf.env.CS_NAME='mono'
121def options(opt):
122        opt.add_option('--with-csc-binary',type='string',dest='cscbinary')
123class fake_csshlib(Task.Task):
124        color='YELLOW'
125        inst_to=None
126        def runnable_status(self):
127                for x in self.outputs:
128                        x.sig=Utils.h_file(x.abspath())
129                return Task.SKIP_ME
130@conf
131def read_csshlib(self,name,paths=[]):
132        return self(name=name,features='fake_lib',lib_paths=paths,lib_type='csshlib')
Note: See TracBrowser for help on using the repository browser.