diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2022-06-16 11:29:41 -0400 |
---|---|---|
committer | Eli Schwartz <eschwartz93@gmail.com> | 2022-06-17 18:56:13 -0400 |
commit | 807cbcb350d2a0255cc71f753cce980a081289fb (patch) | |
tree | 2519339be7d828801b8dc51f428ec3215f6ea7ad | |
parent | 47426f3663f795ae9af59075297bf8215ae81f40 (diff) | |
download | meson-807cbcb350d2a0255cc71f753cce980a081289fb.zip meson-807cbcb350d2a0255cc71f753cce980a081289fb.tar.gz meson-807cbcb350d2a0255cc71f753cce980a081289fb.tar.bz2 |
external-project: Add depends kwarg
The unit test was racy but surprisingly never failed on CI. The reason
is we need to ensure ninja build somelib.so before running `make` into
the external project.
-rw-r--r-- | docs/markdown/External-Project-module.md | 5 | ||||
-rw-r--r-- | mesonbuild/modules/unstable_external_project.py | 16 | ||||
-rw-r--r-- | test cases/common/230 external project/libfoo/meson.build | 1 |
3 files changed, 17 insertions, 5 deletions
diff --git a/docs/markdown/External-Project-module.md b/docs/markdown/External-Project-module.md index 162d39d..f0bf2f7 100644 --- a/docs/markdown/External-Project-module.md +++ b/docs/markdown/External-Project-module.md @@ -87,6 +87,11 @@ Keyword arguments: and install the project will be printed onto Meson's stdout. - `env` : environment variables to set, such as `['NAME1=value1', 'NAME2=value2']`, a dictionary, or an [[@env]] object. +- `depends` : *Since 0.63.0* Specifies that this project depends on the specified + target(s) that must be built before running `make` to build this external + project. This should be used for example when the external project links to a + Meson `library()` that the `configure` script will find using the + `-uninstalled.pc` pkg-config file generated by Meson. Returns an [`ExternalProject`](#ExternalProject_object) object diff --git a/mesonbuild/modules/unstable_external_project.py b/mesonbuild/modules/unstable_external_project.py index 33a44d9..82e51e8 100644 --- a/mesonbuild/modules/unstable_external_project.py +++ b/mesonbuild/modules/unstable_external_project.py @@ -24,7 +24,7 @@ from ..compilers.compilers import CFLAGS_MAPPING from ..envconfig import ENV_VAR_PROG_MAP from ..dependencies import InternalDependency, PkgConfigDependency from ..interpreterbase import FeatureNew -from ..interpreter.type_checking import ENV_KW +from ..interpreter.type_checking import ENV_KW, DEPENDS_KW from ..interpreterbase.decorators import ContainerTypeInfo, KwargInfo, typed_kwargs, typed_pos_args from ..mesonlib import (EnvironmentException, MesonException, Popen_safe, MachineChoice, get_variable_regex, do_replacement, join_args, OptionKey) @@ -35,6 +35,7 @@ if T.TYPE_CHECKING: from . import ModuleState from ..interpreter import Interpreter from ..interpreterbase import TYPE_var + from ..build import BuildTarget, CustomTarget class Dependency(TypedDict): @@ -46,6 +47,7 @@ if T.TYPE_CHECKING: cross_configure_options: T.List[str] verbose: bool env: build.EnvironmentVariables + depends: T.List[T.Union[BuildTarget, CustomTarget]] class ExternalProject(NewExtensionModule): @@ -55,7 +57,8 @@ class ExternalProject(NewExtensionModule): configure_options: T.List[str], cross_configure_options: T.List[str], env: build.EnvironmentVariables, - verbose: bool): + verbose: bool, + extra_depends: T.List[T.Union['BuildTarget', 'CustomTarget']]): super().__init__() self.methods.update({'dependency': self.dependency_method, }) @@ -97,7 +100,7 @@ class ExternalProject(NewExtensionModule): self._configure(state) - self.targets = self._create_targets() + self.targets = self._create_targets(extra_depends) def _configure(self, state: 'ModuleState') -> None: if self.configure_command == 'waf': @@ -213,7 +216,7 @@ class ExternalProject(NewExtensionModule): m += '\nSee logs: ' + str(log_filename) raise MesonException(m) - def _create_targets(self) -> T.List['TYPE_var']: + def _create_targets(self, extra_depends: T.List[T.Union['BuildTarget', 'CustomTarget']]) -> T.List['TYPE_var']: cmd = self.env.get_build_command() cmd += ['--internal', 'externalproject', '--name', self.name, @@ -236,6 +239,7 @@ class ExternalProject(NewExtensionModule): [f'{self.name}.stamp'], depfile=f'{self.name}.d', console=True, + extra_depends=extra_depends, ) idir = build.InstallDir(self.subdir.as_posix(), @@ -282,6 +286,7 @@ class ExternalProjectModule(ExtensionModule): KwargInfo('cross_configure_options', ContainerTypeInfo(list, str), default=['--host=@HOST@'], listify=True), KwargInfo('verbose', bool, default=False), ENV_KW, + DEPENDS_KW.evolve(since='0.63.0'), ) def add_project(self, state: 'ModuleState', args: T.Tuple[str], kwargs: 'AddProject') -> ModuleReturnValue: configure_command = args[0] @@ -290,7 +295,8 @@ class ExternalProjectModule(ExtensionModule): kwargs['configure_options'], kwargs['cross_configure_options'], kwargs['env'], - kwargs['verbose']) + kwargs['verbose'], + kwargs['depends']) return ModuleReturnValue(project, project.targets) diff --git a/test cases/common/230 external project/libfoo/meson.build b/test cases/common/230 external project/libfoo/meson.build index 941e13f..a09341b 100644 --- a/test cases/common/230 external project/libfoo/meson.build +++ b/test cases/common/230 external project/libfoo/meson.build @@ -16,6 +16,7 @@ p = mod.add_project('configure', '--includedir=@PREFIX@/@INCLUDEDIR@', '--libext=' + libext, ], + depends: somelib, ) libfoo_dep = declare_dependency(link_with : somelib, |