3 from waflib
import Utils
, Task
, Errors
, Logs
4 from waflib
.Configure
import conf
5 from waflib
.TaskGen
import extension
, taskgen_method
8 'JS': {'tgt': '--js', 'ext_out': ['.js']},
9 'LUA': {'tgt': '--lua', 'ext_out': ['.lua']},
10 'SWF': {'tgt': '--swf', 'ext_out': ['.swf']},
11 'NEKO': {'tgt': '--neko', 'ext_out': ['.n']},
12 'PHP': {'tgt': '--php', 'ext_out': ['.php']},
13 'CPP': {'tgt': '--cpp', 'ext_out': ['.h', '.cpp']},
14 'CPPIA': {'tgt': '--cppia', 'ext_out': ['.cppia']},
15 'CS': {'tgt': '--cs', 'ext_out': ['.cs']},
16 'JAVA': {'tgt': '--java', 'ext_out': ['.java']},
17 'JVM': {'tgt': '--jvm', 'ext_out': ['.jar']},
18 'PYTHON': {'tgt': '--python', 'ext_out': ['.py']},
19 'HL': {'tgt': '--hl', 'ext_out': ['.hl']},
20 'HLC': {'tgt': '--hl', 'ext_out': ['.h', '.c']},
24 def check_haxe_pkg(self
, **kw
):
25 self
.find_program('haxelib')
27 if not libs
or not (type(libs
) == str or (type(libs
) == list and all(isinstance(s
, str) for s
in libs
))):
28 self
.fatal('Specify correct libs value in ensure call')
30 fetch
= kw
.get('fetch')
31 if not fetch
is None and not type(fetch
) == bool:
32 self
.fatal('Specify correct fetch value in ensure call')
34 libs
= [libs
] if type(libs
) == str else libs
38 self
.start_msg('Checking for library %s' % lib
)
39 output
= self
.cmd_and_log(self
.env
.HAXELIB
+ ['list', lib
])
40 except Errors
.WafError
:
42 self
.fatal('Can\'t run haxelib list, ensuring halted')
46 self
.end_msg(lib
in output
)
53 status
= self
.exec_command(self
.env
.HAXELIB
+ ['install', lib
])
56 self
.fatal('Can\'t get %s with haxelib, ensuring halted' % lib
)
59 self
.end_msg('downloaded', color
='YELLOW')
60 except Errors
.WafError
:
62 self
.fatal('Can\'t run haxelib install, ensuring halted')
64 postfix
= kw
.get('uselib_store') or lib
.upper()
65 self
.env
.append_unique('LIB_' + postfix
, lib
)
68 self
.fatal('Can\'t find libraries in haxelib list, ensuring halted')
71 class haxe(Task
.Task
):
72 vars = ['HAXE_VERSION', 'HAXE_FLAGS']
76 cmd
= self
.env
.HAXE
+ self
.env
.HAXE_FLAGS_DEFAULT
+ self
.env
.HAXE_FLAGS
77 return self
.exec_command(cmd
)
79 for COMP
in HAXE_COMPILERS
:
80 # create runners for each compile target
81 type("haxe_" + COMP
, (haxe
,), {'ext_out': HAXE_COMPILERS
[COMP
]['ext_out']})
85 errmsg
= '%s not found, specify correct value'
87 compiler
= HAXE_COMPILERS
[self
.compiler
]
88 comp_tgt
= compiler
['tgt']
89 comp_mod
= '/main.c' if self
.compiler
== 'HLC' else ''
90 except (AttributeError, KeyError):
91 self
.bld
.fatal(errmsg
% 'COMPILER' + ': ' + ', '.join(HAXE_COMPILERS
.keys()))
94 self
.env
.append_value(
96 [comp_tgt
, self
.path
.get_bld().make_node(self
.target
+ comp_mod
).abspath()])
97 if hasattr(self
, 'use'):
98 if not (type(self
.use
) == str or type(self
.use
) == list):
99 self
.bld
.fatal(errmsg
% 'USE')
101 self
.use
= [self
.use
] if type(self
.use
) == str else self
.use
104 if self
.env
['LIB_' + dep
]:
105 for lib
in self
.env
['LIB_' + dep
]:
106 self
.env
.append_value('HAXE_FLAGS', ['-lib', lib
])
108 if hasattr(self
, 'res'):
109 if not type(self
.res
) == str:
110 self
.bld
.fatal(errmsg
% 'RES')
112 self
.env
.append_value('HAXE_FLAGS', ['-D', 'resourcesPath=%s' % self
.res
])
115 def haxe_hook(self
, node
):
116 if len(self
.source
) > 1:
117 self
.bld
.fatal('Use separate task generators for multiple files')
121 tgt
= self
.path
.get_bld().find_or_declare(self
.target
)
124 self
.create_task('haxe_' + self
.compiler
, src
, tgt
)
127 def check_haxe(self
, mini
=None, maxi
=None):
128 self
.start_msg('Checking for haxe version')
132 self
.cmd_and_log(self
.env
.HAXE
+ ['-version'])).group()
133 except Errors
.WafError
:
135 self
.fatal('Can\'t get haxe version')
138 if mini
and Utils
.num2ver(curr
) < Utils
.num2ver(mini
):
139 self
.end_msg('wrong', color
='RED')
140 self
.fatal('%s is too old, need >= %s' % (curr
, mini
))
142 if maxi
and Utils
.num2ver(curr
) > Utils
.num2ver(maxi
):
143 self
.end_msg('wrong', color
='RED')
144 self
.fatal('%s is too new, need <= %s' % (curr
, maxi
))
146 self
.end_msg(curr
, color
='GREEN')
147 self
.env
.HAXE_VERSION
= curr
150 self
.env
.append_value(
151 'HAXE_FLAGS_DEFAULT',
152 ['-D', 'no-compilation', '-cp', self
.path
.abspath()])
153 Logs
.warn('Default flags: %s' % ' '.join(self
.env
.HAXE_FLAGS_DEFAULT
))
154 self
.find_program('haxe')