aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2015-07-21 21:34:18 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2015-07-21 21:34:18 +0300
commit0e508bf81829ef29f0161836f643bf2edf495ced (patch)
treeb5a516ace99d56b4b8a58d6eaf65590b6bc744d1
parent1910b1eb4807650357ed2bb4690dca5158c65033 (diff)
downloadmeson-0e508bf81829ef29f0161836f643bf2edf495ced.zip
meson-0e508bf81829ef29f0161836f643bf2edf495ced.tar.gz
meson-0e508bf81829ef29f0161836f643bf2edf495ced.tar.bz2
Added a extract_all_objects method to make recombining targets easier. Fixes #205.
-rw-r--r--build.py7
-rw-r--r--interpreter.py7
-rw-r--r--test cases/common/88 extract all/extractor.h6
-rw-r--r--test cases/common/88 extract all/four.c5
-rw-r--r--test cases/common/88 extract all/meson.build9
-rw-r--r--test cases/common/88 extract all/one.c5
-rw-r--r--test cases/common/88 extract all/prog.c10
-rw-r--r--test cases/common/88 extract all/three.c5
-rw-r--r--test cases/common/88 extract all/two.c5
9 files changed, 57 insertions, 2 deletions
diff --git a/build.py b/build.py
index 9cdd06e..04f59ab 100644
--- a/build.py
+++ b/build.py
@@ -159,7 +159,9 @@ class BuildTarget():
self.process_objectlist(objects)
self.process_kwargs(kwargs, environment)
self.check_unknown_kwargs(kwargs)
- if len(self.sources) == 0 and len(self.generated) == 0:
+ if len(self.sources) == 0 and \
+ len(self.generated) == 0 and \
+ len(self.objects) == 0:
raise InvalidArguments('Build target %s has no sources.' % name)
self.validate_sources()
@@ -255,6 +257,9 @@ class BuildTarget():
obj_src.append(src)
return ExtractedObjects(self, obj_src)
+ def extract_all_objects(self):
+ return ExtractedObjects(self, self.sources)
+
def get_rpaths(self):
return self.get_transitive_rpaths()
diff --git a/interpreter.py b/interpreter.py
index 5f74215..2349696 100644
--- a/interpreter.py
+++ b/interpreter.py
@@ -429,7 +429,8 @@ class BuildTargetHolder(InterpreterObject):
def __init__(self, target):
super().__init__()
self.held_object = target
- self.methods.update({'extract_objects' : self.extract_objects_method})
+ self.methods.update({'extract_objects' : self.extract_objects_method,
+ 'extract_all_objects' : self.extract_all_objects_method})
def is_cross(self):
return self.held_object.is_cross()
@@ -438,6 +439,10 @@ class BuildTargetHolder(InterpreterObject):
gobjs = self.held_object.extract_objects(args)
return GeneratedObjectsHolder(gobjs)
+ def extract_all_objects_method(self, args, kwargs):
+ gobjs = self.held_object.extract_all_objects()
+ return GeneratedObjectsHolder(gobjs)
+
class ExecutableHolder(BuildTargetHolder):
def __init__(self, target):
super().__init__(target)
diff --git a/test cases/common/88 extract all/extractor.h b/test cases/common/88 extract all/extractor.h
new file mode 100644
index 0000000..d0917a1
--- /dev/null
+++ b/test cases/common/88 extract all/extractor.h
@@ -0,0 +1,6 @@
+#pragma once
+
+int func1();
+int func2();
+int func3();
+int func4();
diff --git a/test cases/common/88 extract all/four.c b/test cases/common/88 extract all/four.c
new file mode 100644
index 0000000..5ca6696
--- /dev/null
+++ b/test cases/common/88 extract all/four.c
@@ -0,0 +1,5 @@
+#include"extractor.h"
+
+int func4() {
+ return 4;
+}
diff --git a/test cases/common/88 extract all/meson.build b/test cases/common/88 extract all/meson.build
new file mode 100644
index 0000000..91a8d5f
--- /dev/null
+++ b/test cases/common/88 extract all/meson.build
@@ -0,0 +1,9 @@
+project('extract all', 'c')
+
+a = static_library('a', 'one.c', 'two.c')
+b = static_library('b', 'three.c', 'four.c')
+c = static_library('c',
+ objects : [a.extract_all_objects(), b.extract_all_objects()])
+
+e = executable('proggie', 'prog.c', link_with : c)
+test('extall', e)
diff --git a/test cases/common/88 extract all/one.c b/test cases/common/88 extract all/one.c
new file mode 100644
index 0000000..cfb0157
--- /dev/null
+++ b/test cases/common/88 extract all/one.c
@@ -0,0 +1,5 @@
+#include"extractor.h"
+
+int func1() {
+ return 1;
+}
diff --git a/test cases/common/88 extract all/prog.c b/test cases/common/88 extract all/prog.c
new file mode 100644
index 0000000..57a4c64
--- /dev/null
+++ b/test cases/common/88 extract all/prog.c
@@ -0,0 +1,10 @@
+#include"extractor.h"
+#include<stdio.h>
+
+int main(int argc, char **argv) {
+ if((1+2+3+4) != (func1() + func2() + func3() + func4())) {
+ printf("Arithmetic is fail.\n");
+ return 1;
+ }
+ return 0;
+}
diff --git a/test cases/common/88 extract all/three.c b/test cases/common/88 extract all/three.c
new file mode 100644
index 0000000..c410046
--- /dev/null
+++ b/test cases/common/88 extract all/three.c
@@ -0,0 +1,5 @@
+#include"extractor.h"
+
+int func3() {
+ return 3;
+}
diff --git a/test cases/common/88 extract all/two.c b/test cases/common/88 extract all/two.c
new file mode 100644
index 0000000..3ece512
--- /dev/null
+++ b/test cases/common/88 extract all/two.c
@@ -0,0 +1,5 @@
+#include"extractor.h"
+
+int func2() {
+ return 2;
+}