diff options
-rw-r--r-- | backends.py | 4 | ||||
-rw-r--r-- | environment.py | 10 | ||||
-rw-r--r-- | test cases/common/59 object generator/meson.build | 18 | ||||
-rwxr-xr-x | test cases/common/59 object generator/obj_generator.py | 18 | ||||
-rw-r--r-- | test cases/common/59 object generator/prog.c | 5 | ||||
-rw-r--r-- | test cases/common/59 object generator/source.c | 3 |
6 files changed, 56 insertions, 2 deletions
diff --git a/backends.py b/backends.py index ff9a20b..60c3818 100644 --- a/backends.py +++ b/backends.py @@ -224,7 +224,9 @@ class Backend(): unity_deps = [] # Generated sources that must be built before compiling a Unity target. for genlist in target.get_generated_sources(): for src in genlist.get_outfilelist(): - if not self.environment.is_header(src): + if self.environment.is_object(src): + obj_list.append(os.path.join(self.get_target_dir(target), target.get_basename() + '.dir', src)) + elif not self.environment.is_header(src): if is_unity: if '/' in src: rel_src = src diff --git a/environment.py b/environment.py index a62a4a6..c6b9add 100644 --- a/environment.py +++ b/environment.py @@ -1068,6 +1068,7 @@ header_suffixes = ['h', 'hh', 'hpp', 'hxx', 'H'] cpp_suffixes = ['cc', 'cpp', 'cxx', 'h', 'hh', 'hpp', 'hxx', 'c++'] c_suffixes = ['c'] clike_suffixes = c_suffixes + cpp_suffixes +obj_suffixes = ['o', 'obj'] def is_header(fname): suffix = fname.split('.')[-1] @@ -1077,6 +1078,10 @@ def is_source(fname): suffix = fname.split('.')[-1] return suffix in clike_suffixes +def is_object(fname): + suffix = fname.split('.')[-1] + return suffix in obj_suffixes + class Environment(): private_dir = 'meson-private' log_dir = 'meson-logs' @@ -1158,10 +1163,13 @@ class Environment(): def is_header(self, fname): return is_header(fname) - + def is_source(self, fname): return is_source(fname) + def is_object(self, fname): + return is_object(fname) + def merge_options(self, options): for (name, value) in options.items(): if name not in self.coredata.user_options: diff --git a/test cases/common/59 object generator/meson.build b/test cases/common/59 object generator/meson.build new file mode 100644 index 0000000..34fb897 --- /dev/null +++ b/test cases/common/59 object generator/meson.build @@ -0,0 +1,18 @@ +project('object generator', 'c') + +python = find_program('python3') + +# Note that this will not add a dependency to the compiler executable. +# Code will not be rebuilt if it changes. +comp = '@0@/@1@'.format(meson.current_source_dir(), 'obj_generator.py') + +# Generate a header file that needs to be included. +gen = generator(python, + output : '@BASENAME@.o', + arguments : [comp, '@INPUT@', '@OUTPUT@']) + +generated = gen.process('source.c') + +e = executable('prog', 'prog.c', generated) + +test('objgen', e)
\ No newline at end of file diff --git a/test cases/common/59 object generator/obj_generator.py b/test cases/common/59 object generator/obj_generator.py new file mode 100755 index 0000000..f644843 --- /dev/null +++ b/test cases/common/59 object generator/obj_generator.py @@ -0,0 +1,18 @@ +#!/usr/bin/python3 + +# Mimic a binary that generates an object file (e.g. windres). + +import sys, shutil, subprocess + +if __name__ == '__main__': + if len(sys.argv) != 3: + print(sys.argv[0], 'input_file output_file') + sys.exit(1) + ifile = sys.argv[1] + ofile = sys.argv[2] + if shutil.which('cl'): + cmd = ['cl', '/nologo', '/Fo'+ofile, '/c', ifile] + else: + cmd = ['cc', '-c', ifile, '-o', ofile] + sys.exit(subprocess.call(cmd)) + diff --git a/test cases/common/59 object generator/prog.c b/test cases/common/59 object generator/prog.c new file mode 100644 index 0000000..ce5c1cb --- /dev/null +++ b/test cases/common/59 object generator/prog.c @@ -0,0 +1,5 @@ +int func_in_obj(); + +int main(int argc, char **argv) { + return func_in_obj(); +} diff --git a/test cases/common/59 object generator/source.c b/test cases/common/59 object generator/source.c new file mode 100644 index 0000000..a6920d1 --- /dev/null +++ b/test cases/common/59 object generator/source.c @@ -0,0 +1,3 @@ +int func_in_obj() { + return 0; +} |