aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-06-02 16:01:29 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2013-06-02 16:01:29 +0300
commita51036fd7de1dcb3620a05e737a82488b12c95d7 (patch)
tree6a91c7e757770b745ea2fab05f4b048ca058d93d
parented5528ba18c9df82dbe4f6947b9040d21a7ffb21 (diff)
downloadmeson-a51036fd7de1dcb3620a05e737a82488b12c95d7.zip
meson-a51036fd7de1dcb3620a05e737a82488b12c95d7.tar.gz
meson-a51036fd7de1dcb3620a05e737a82488b12c95d7.tar.bz2
Reworked configure file generation.
-rwxr-xr-xbackends.py21
-rwxr-xr-xinterpreter.py23
-rw-r--r--test cases/common/36 define10/config.h.in2
-rw-r--r--test cases/common/36 define10/meson.build12
-rw-r--r--test cases/common/36 define10/prog.c13
5 files changed, 58 insertions, 13 deletions
diff --git a/backends.py b/backends.py
index 6684aea..7bea10a 100755
--- a/backends.py
+++ b/backends.py
@@ -57,16 +57,21 @@ def do_mesondefine(line, confdata):
if len(arr) != 2:
raise interpreter.InvalidArguments('#mesondefine does not contain exactly two tokens.')
varname = arr[1]
- v = confdata.get(varname, False)
+ try:
+ v = confdata.get(varname)
+ except KeyError:
+ return '/* undef %s */\n' % varname
+ if isinstance(v, nodes.BoolStatement):
+ v = v.get_value()
if isinstance(v, bool):
- value= v
- elif isinstance(v, nodes.BoolStatement):
- value = v.get_value()
+ if v:
+ return '#define %s\n' % varname
+ else:
+ return '#undef %s\n' % varname
+ elif isinstance(v, int):
+ return '#define %s %d\n' % (varname, v)
else:
- raise interpreter.InvalidArguments('#mesondefine argument "%s" is not boolean.' % varname)
- if value:
- return '#define %s\n' % varname
- return '/* undef %s */\n' % varname
+ raise interpreter.InvalidArguments('#mesondefine argument "%s" is of unknown type.' % varname)
def do_conf_file(src, dst, confdata):
data = open(src).readlines()
diff --git a/interpreter.py b/interpreter.py
index ede7e1b..9f6b075 100755
--- a/interpreter.py
+++ b/interpreter.py
@@ -46,15 +46,17 @@ class ConfigurationData(InterpreterObject):
super().__init__()
self.used = False # These objects become immutable after use in configure_file.
self.values = {}
- self.methods.update({'set': self.set_method})
-
+ self.methods.update({'set': self.set_method,
+ 'set10': self.set10_method,
+ })
+
def is_used(self):
return self.used
def mark_used(self):
self.used = True
- def set_method(self, args, kwargs):
+ def validate_args(self, args):
if len(args) != 2:
raise InterpreterException("Configuration set requires 2 arguments.")
if self.used:
@@ -63,10 +65,21 @@ class ConfigurationData(InterpreterObject):
val = args[1]
if not isinstance(name, str):
raise InterpreterException("First argument to set must be a string.")
+ return (name, val)
+
+ def set_method(self, args, kwargs):
+ (name, val) = self.validate_args(args)
self.values[name] = val
+
+ def set10_method(self, args, kwargs):
+ (name, val) = self.validate_args(args)
+ if val:
+ self.values[name] = 1
+ else:
+ self.values[name] = 0
- def get(self, *args):
- return self.values.get(*args)
+ def get(self, name):
+ return self.values[name]
def keys(self):
return self.values.keys()
diff --git a/test cases/common/36 define10/config.h.in b/test cases/common/36 define10/config.h.in
new file mode 100644
index 0000000..dc77346
--- /dev/null
+++ b/test cases/common/36 define10/config.h.in
@@ -0,0 +1,2 @@
+#mesondefine ONE
+#mesondefine ZERO
diff --git a/test cases/common/36 define10/meson.build b/test cases/common/36 define10/meson.build
new file mode 100644
index 0000000..94f02a1
--- /dev/null
+++ b/test cases/common/36 define10/meson.build
@@ -0,0 +1,12 @@
+project('set10test', 'c')
+
+conf = configuration_data()
+conf.set10('ONE', true)
+conf.set10('ZERO', false)
+
+configure_file(input : 'config.h.in',
+ output : 'config.h',
+ configuration : conf)
+
+exe = executable('prog', 'prog.c', include_dirs : include_directories('.'))
+test('10test', exe)
diff --git a/test cases/common/36 define10/prog.c b/test cases/common/36 define10/prog.c
new file mode 100644
index 0000000..10e94f1
--- /dev/null
+++ b/test cases/common/36 define10/prog.c
@@ -0,0 +1,13 @@
+#include<stdio.h>
+#include"config.h"
+
+int main(int argc, char **argv) {
+ if(ONE != 1) {
+ fprintf(stderr, "ONE is not 1.\n");
+ return 1;
+ }
+ if(ZERO != 0) {
+ fprintf(stderr, "ZERO is not 0.\n");
+ }
+ return 0;
+}