1
2
3
4
5 "This hook is called when the class cpp/cc task generator encounters a '.rc' file: X{.rc -> [.res|.rc.o]}"
6
7 import os, sys
8 import TaskGen, Task
9 from Utils import quote_whitespace
10 from TaskGen import extension
11
12 EXT_WINRC = ['.rc']
13
14 winrc_str = '${WINRC} ${_CPPDEFFLAGS} ${_CXXDEFFLAGS} ${_CCDEFFLAGS} ${WINRCFLAGS} ${_CPPINCFLAGS} ${_CXXINCFLAGS} ${_CCINCFLAGS} ${WINRC_TGT_F}${TGT} ${WINRC_SRC_F}${SRC}'
18 obj_ext = '.rc.o'
19 if self.env['WINRC_TGT_F'] == '/fo ': obj_ext = '.res'
20
21 rctask = self.create_task('winrc')
22 rctask.set_inputs(node)
23 rctask.set_outputs(node.change_ext(obj_ext))
24
25
26 self.compiled_tasks.append(rctask)
27
28
29 Task.simple_task_type('winrc', winrc_str, color='BLUE', before='cc cxx')
32 v = conf.env
33
34 cc = os.path.basename(''.join(v['CC']).lower())
35 cxx = os.path.basename(''.join(v['CXX']).lower())
36
37
38 if cc in ['gcc', 'cc', 'g++', 'c++']:
39 winrc = conf.find_program('windres', var='WINRC')
40 v['WINRC_TGT_F'] = '-o '
41 v['WINRC_SRC_F'] = '-i '
42 elif cc == 'cl.exe' or cxx == 'cl.exe':
43 winrc = conf.find_program('RC', var='WINRC')
44 v['WINRC_TGT_F'] = '/fo '
45 v['WINRC_SRC_F'] = ' '
46 else:
47 return 0
48
49 if not winrc:
50 conf.fatal('winrc was not found!!')
51 else:
52 v['WINRC'] = quote_whitespace(winrc)
53
54 v['WINRCFLAGS'] = ''
55