diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py index c91cda66f..ff4c681b5 100644 --- a/mesonbuild/modules/gnome.py +++ b/mesonbuild/modules/gnome.py @@ -35,6 +35,7 @@ from ..mesonlib import ( from ..dependencies import Dependency, PkgConfigDependency, InternalDependency from ..interpreterbase import noPosargs, noKwargs, permittedKwargs, FeatureNew, FeatureNewKwargs, FeatureDeprecatedKwargs from ..programs import ExternalProgram, OverrideProgram +from ..build import CustomTarget, CustomTargetIndex, GeneratedList if T.TYPE_CHECKING: from ..compilers import Compiler @@ -709,8 +710,9 @@ class GnomeModule(ExtensionModule): return gir_filelist_filename - def _make_gir_target(self, state, girfile, scan_command, depends, kwargs): - scankwargs = {'output': girfile, + def _make_gir_target(self, state, girfile, scan_command, generated_files, depends, kwargs): + scankwargs = {'input': generated_files, + 'output': girfile, 'command': scan_command, 'depends': depends} @@ -724,8 +726,9 @@ class GnomeModule(ExtensionModule): return GirTarget(girfile, state.subdir, state.subproject, scankwargs) - def _make_typelib_target(self, state, typelib_output, typelib_cmd, kwargs): + def _make_typelib_target(self, state, typelib_output, typelib_cmd, generated_files, kwargs): typelib_kwargs = { + 'input': generated_files, 'output': typelib_output, 'command': typelib_cmd, } @@ -801,7 +804,7 @@ class GnomeModule(ExtensionModule): 'export_packages', 'includes', 'dependencies', 'link_with', 'include_directories', 'install', 'install_dir_gir', 'install_dir_typelib', 'extra_args', 'packages', 'header', 'build_by_default', 'fatal_warnings'}) - def generate_gir(self, state, args, kwargs): + def generate_gir(self, state, args, kwargs: T.Dict[str, T.Any]): if not args: raise MesonException('generate_gir takes at least one argument') if kwargs.get('install_dir'): @@ -881,7 +884,9 @@ class GnomeModule(ExtensionModule): if fatal_warnings: scan_command.append('--warn-error') - scan_target = self._make_gir_target(state, girfile, scan_command, depends, kwargs) + generated_files = [unholder(f) for f in libsources if isinstance(unholder(f), (GeneratedList, CustomTarget, CustomTargetIndex))] + + scan_target = self._make_gir_target(state, girfile, scan_command, generated_files, depends, kwargs) typelib_output = f'{ns}-{nsversion}.typelib' typelib_cmd = [gicompiler, scan_target, '--output', '@OUTPUT@'] @@ -890,7 +895,8 @@ class GnomeModule(ExtensionModule): for incdir in typelib_includes: typelib_cmd += ["--includedir=" + incdir] - typelib_target = self._make_typelib_target(state, typelib_output, typelib_cmd, kwargs) + typelib_target = self._make_typelib_target(state, typelib_output, typelib_cmd, generated_files, kwargs) + self._devenv_append('GI_TYPELIB_PATH', os.path.join(state.environment.get_build_dir(), state.subdir)) rv = [scan_target, typelib_target] diff --git a/test cases/frameworks/7 gnome/gir/copy.py b/test cases/frameworks/7 gnome/gir/copy.py new file mode 100755 index 000000000..fa70145b5 --- /dev/null +++ b/test cases/frameworks/7 gnome/gir/copy.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: Apache-2.0 +# Copyright © 2021 Intel Corproation + +import argparse +import shutil + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument('src') + parser.add_argument('dest') + args = parser.parse_args() + + shutil.copy(args.src, args.dest) + + +if __name__ == "__main__": + main() diff --git a/test cases/frameworks/7 gnome/gir/meson.build b/test cases/frameworks/7 gnome/gir/meson.build index b1e0fa1fe..64c49f729 100644 --- a/test cases/frameworks/7 gnome/gir/meson.build +++ b/test cases/frameworks/7 gnome/gir/meson.build @@ -3,6 +3,14 @@ subdir('dep1') libsources = ['meson-sample.c', 'meson-sample.h'] lib2sources = ['meson-sample2.c', 'meson-sample2.h'] +gen_source = custom_target( + 'meson_smaple3.h', + input : 'meson-sample.h', + output : 'meson-sample3.h', + command : [find_program('copy.py'), '@INPUT@', '@OUTPUT@'], + build_by_default : false, # this will force a race condition if one exists +) + girlib = shared_library( 'gir_lib', sources : libsources, @@ -28,7 +36,7 @@ fake_dep = dependency('no-way-this-exists', required: false) gnome.generate_gir( girlib, girlib2, - sources : libsources + lib2sources, + sources : [libsources, lib2sources, gen_source], nsversion : '1.0', namespace : 'Meson', symbol_prefix : 'meson',