aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/modules/gnome.py18
-rwxr-xr-xtest cases/frameworks/7 gnome/gir/copy.py18
-rw-r--r--test cases/frameworks/7 gnome/gir/meson.build10
3 files changed, 39 insertions, 7 deletions
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
index c91cda6..ff4c681 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 0000000..fa70145
--- /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 b1e0fa1..64c49f7 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',