aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.py4
-rwxr-xr-xenvironment.py5
-rwxr-xr-xinterpreter.py14
-rwxr-xr-xshellgenerator.py1
-rw-r--r--test cases/23 global arg/builder.txt11
-rw-r--r--test cases/23 global arg/prog.c7
-rw-r--r--test cases/23 global arg/prog.cc5
7 files changed, 47 insertions, 0 deletions
diff --git a/build.py b/build.py
index 67426c9..25e2389 100644
--- a/build.py
+++ b/build.py
@@ -24,6 +24,7 @@ class Build:
self.project = None
self.targets = {}
self.compilers = []
+ self.global_args = {}
self.tests = []
self.headers = []
self.man = []
@@ -51,3 +52,6 @@ class Build:
def get_configure_files(self):
return self.configure_files
+
+ def get_global_flags(self, compiler):
+ return self.global_args.get(compiler.get_language(), [])
diff --git a/environment.py b/environment.py
index d6ad403..9938235 100755
--- a/environment.py
+++ b/environment.py
@@ -30,6 +30,10 @@ class CCompiler():
self.exelist = exelist
else:
raise TypeError('Unknown argument to CCompiler')
+ self.language = 'c'
+
+ def get_language(self):
+ return self.language
def get_exelist(self):
return self.exelist
@@ -82,6 +86,7 @@ class CCompiler():
class CXXCompiler(CCompiler):
def __init__(self, exelist):
CCompiler.__init__(self, exelist)
+ self.language = 'c++'
def can_compile(self, filename):
suffix = filename.split('.')[-1]
diff --git a/interpreter.py b/interpreter.py
index 13d3c8f..e74030c 100755
--- a/interpreter.py
+++ b/interpreter.py
@@ -262,6 +262,7 @@ class Interpreter():
'data' : self.func_data,
'configure_file' : self.func_configure_file,
'include_directories' : self.func_include_directories,
+ 'add_global_arguments' : self.func_add_global_arguments,
}
def get_variables(self):
@@ -428,6 +429,19 @@ class Interpreter():
i = IncludeDirs(self.subdir, args)
return i
+ def func_add_global_arguments(self, node, args):
+ for a in args:
+ if not isinstance(a, str):
+ raise InvalidArguments('Line %d: Argument %s is not a string.' % (node.lineno(), str(a)))
+ if len(self.build.get_targets()) > 0:
+ raise InvalidCode('Line %d: global flags can not be set once any build target is defined.' % node.lineno())
+ lang = args[0].lower()
+ switches = args[1:]
+ if lang in self.build.global_args:
+ self.build.global_args[lang] += switches
+ else:
+ self.build.global_args[lang] = switches
+
def flatten(self, args):
result = []
for a in args:
diff --git a/shellgenerator.py b/shellgenerator.py
index 5c7ce2e..ad375b2 100755
--- a/shellgenerator.py
+++ b/shellgenerator.py
@@ -209,6 +209,7 @@ echo Run compile.sh before this or bad things will happen.
def generate_basic_compiler_arguments(self, target, compiler):
commands = []
commands += compiler.get_exelist()
+ commands += self.build.get_global_flags(compiler)
commands += compiler.get_debug_flags()
commands += compiler.get_std_warn_flags()
commands += compiler.get_compile_only_flags()
diff --git a/test cases/23 global arg/builder.txt b/test cases/23 global arg/builder.txt
new file mode 100644
index 0000000..a768864
--- /dev/null
+++ b/test cases/23 global arg/builder.txt
@@ -0,0 +1,11 @@
+project('global arg test', 'c++', 'c')
+
+add_global_arguments('c', '-Werror', '-DMYTHING')
+add_global_arguments('c++', '-Werror', '-std=c++11')
+
+exe1 = executable('prog', 'prog.c')
+exe2 = executable('prog2', 'prog.cc')
+
+add_test('prog1', exe1)
+add_test('prog2', exe2)
+
diff --git a/test cases/23 global arg/prog.c b/test cases/23 global arg/prog.c
new file mode 100644
index 0000000..5992d15
--- /dev/null
+++ b/test cases/23 global arg/prog.c
@@ -0,0 +1,7 @@
+#ifndef MYTHING
+#error "Global argument not set"
+#endif
+
+int main(int argc, char **argv) {
+ return 0;
+}
diff --git a/test cases/23 global arg/prog.cc b/test cases/23 global arg/prog.cc
new file mode 100644
index 0000000..fb9590e
--- /dev/null
+++ b/test cases/23 global arg/prog.cc
@@ -0,0 +1,5 @@
+#include<unordered_map>
+
+int main(int argc, char **argv) {
+ return 0;
+}