summaryrefslogtreecommitdiffstats
path: root/waftools/waf_customizations.py
blob: f0db04c6144e338a0df7deeca240f45444d6fed7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from waflib.Configure import conf

@conf
def get_config_header(self, defines=True, headers=False, define_prefix=''):
    """
    Only difference is it outputs `#define VAR 0` or `#define VAR value`
    instead of `#undef VAR` or `#define VAR val`.
    """
    from waflib.Tools.c_config import DEFKEYS, INCKEYS
    lst = []
    if headers:
        for x in self.env[INCKEYS]:
            lst.append('#include <%s>' % x)

    if defines:
        for x in self.env[DEFKEYS]:
            val = self.is_defined(x) and self.get_define(x) or "0"
            lst.append('#define %s %s' % (define_prefix + x, val))

    return "\n".join(lst)

from waflib import TaskGen

@TaskGen.extension('.m')
def m_hook(self, node):
    """
    Makes waf call the c compiler for objective-c files
    """
    return self.create_compiled_task('c', node)

def try_last_linkflags(cls):
    try:
        return cls.orig_run_str + ' ${LAST_LINKFLAGS}'
    except AttributeError:
        try:
            return cls.hcode + ' ${LAST_LINKFLAGS}'
        except TypeError:
            return cls.hcode.decode('iso8859-1') + ' ${LAST_LINKFLAGS}'

def build(ctx):
    from waflib import Task

    cls = Task.classes['cprogram']
    class cprogram(cls):
        run_str = try_last_linkflags(cls)

    cls = Task.classes['cshlib']
    class cshlib(cls):
        run_str = try_last_linkflags(cls)

    cls = Task.classes['macplist']
    class macplist(cls):
        def run(self):
            from waflib import Utils
            if getattr(self, 'code', None):
                txt = self.code
            else:
                txt = self.inputs[0].read()
            txt = Utils.subst_vars(txt, self.env)
            self.outputs[0].write(txt)