From 0e508bf81829ef29f0161836f643bf2edf495ced Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Tue, 21 Jul 2015 21:34:18 +0300 Subject: Added a extract_all_objects method to make recombining targets easier. Fixes #205. --- build.py | 7 ++++++- interpreter.py | 7 ++++++- test cases/common/88 extract all/extractor.h | 6 ++++++ test cases/common/88 extract all/four.c | 5 +++++ test cases/common/88 extract all/meson.build | 9 +++++++++ test cases/common/88 extract all/one.c | 5 +++++ test cases/common/88 extract all/prog.c | 10 ++++++++++ test cases/common/88 extract all/three.c | 5 +++++ test cases/common/88 extract all/two.c | 5 +++++ 9 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 test cases/common/88 extract all/extractor.h create mode 100644 test cases/common/88 extract all/four.c create mode 100644 test cases/common/88 extract all/meson.build create mode 100644 test cases/common/88 extract all/one.c create mode 100644 test cases/common/88 extract all/prog.c create mode 100644 test cases/common/88 extract all/three.c create mode 100644 test cases/common/88 extract all/two.c 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 + +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; +} -- cgit v1.1