diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2013-03-10 02:28:36 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2013-03-10 02:28:36 +0200 |
commit | 5c37665e5d3c228f721ee57823438272b55b1d2a (patch) | |
tree | cecd1eb499cbe8cb06608ca31767e8e5c523ac86 /backends.py | |
parent | b0b171f2b90ebbfe4bfd4cf42baf575770deaefa (diff) | |
download | meson-5c37665e5d3c228f721ee57823438272b55b1d2a.zip meson-5c37665e5d3c228f721ee57823438272b55b1d2a.tar.gz meson-5c37665e5d3c228f721ee57823438272b55b1d2a.tar.bz2 |
Support for easier #define declarations.
Diffstat (limited to 'backends.py')
-rwxr-xr-x | backends.py | 54 |
1 files changed, 39 insertions, 15 deletions
diff --git a/backends.py b/backends.py index 9ac6fbf..c30b65e 100755 --- a/backends.py +++ b/backends.py @@ -18,6 +18,7 @@ import os, sys, stat, re, pickle import interpreter, nodes import environment from meson_install import InstallData +from interpreter import InvalidArguments if environment.is_windows(): quote_char = '"' @@ -32,26 +33,49 @@ def shell_quote(cmdlist): def ninja_quote(text): return text.replace(' ', '$ ') +def do_replacement(regex, line, variables): + match = re.search(regex, line) + while match: + varname = match.group(1) + if varname in variables: + var = variables[varname] + if isinstance(var, str): + pass + elif isinstance(var, nodes.StringStatement): + var = var.get_value() + else: + raise RuntimeError('Tried to replace a variable with something other than a string.') + else: + var = '' + line = line.replace('@' + varname + '@', var) + match = re.search(regex, line) + return line + +def do_mesondefine(line, variables): + arr = line.split() + if len(arr) != 2: + raise interpreter.InvalidArguments('#cmakedefine does not contain exactly two tokens.') + varname = arr[1] + v = variables.get(varname, False) + if isinstance(v, bool): + value= v + elif isinstance(v, nodes.BoolStatement): + value = v.get_value() + else: + raise interpreter.InvalidArguments('#cmakedefine argument "%s" is not boolean.' % varname) + if value: + return '#define %s\n' % varname + return '/* undef %s */\n' % varname + def do_conf_file(src, dst, variables): data = open(src).readlines() regex = re.compile('@(.*?)@') result = [] for line in data: - match = re.search(regex, line) - while match: - varname = match.group(1) - if varname in variables: - var = variables[varname] - if isinstance(var, str): - pass - elif isinstance(var, nodes.StringStatement): - var = var.get_value() - else: - raise RuntimeError('Tried to replace a variable with something other than a string.') - else: - var = '' - line = line.replace('@' + varname + '@', var) - match = re.search(regex, line) + if line.startswith('#mesondefine'): + line = do_mesondefine(line, variables) + else: + line = do_replacement(regex, line, variables) result.append(line) dst_tmp = dst + '~' open(dst_tmp, 'w').writelines(result) |