aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter/interpreterobjects.py
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2022-02-27 21:38:04 -0500
committerEli Schwartz <eschwartz@archlinux.org>2022-04-13 17:28:01 -0400
commit0e3ed2f6559ff97e4ba85a4d723597017630d150 (patch)
tree983b0d3876c59cfcce1dc16d375901c34269a6f9 /mesonbuild/interpreter/interpreterobjects.py
parentb55349c2e9ac6f9e37e2fd6e7a8333f6893fbaa9 (diff)
downloadmeson-0e3ed2f6559ff97e4ba85a4d723597017630d150.zip
meson-0e3ed2f6559ff97e4ba85a4d723597017630d150.tar.gz
meson-0e3ed2f6559ff97e4ba85a4d723597017630d150.tar.bz2
dependencies: allow get_variable to expose files from subprojects
There are somewhat common, reasonable and legitimate use cases for a dependency to provide data files installed to /usr which are used as command inputs. When getting a dependency from a subproject, however, the attempt to directly construct an input file from a subproject results in a sandbox violation. This means not all dependencies can be wrapped as a subproject. One example is wayland-protocols XML files which get scanned and used to produce C source files. Teach Meson to recognize when a string path is the result of fetching a dep.get_variable(), and special case this to be exempt from subproject violations. A requirement of this is that the file must be installed by install_data() or install_subdir() because otherwise it is not actually representative of what a pkg-config dependency would provide.
Diffstat (limited to 'mesonbuild/interpreter/interpreterobjects.py')
-rw-r--r--mesonbuild/interpreter/interpreterobjects.py5
1 files changed, 3 insertions, 2 deletions
diff --git a/mesonbuild/interpreter/interpreterobjects.py b/mesonbuild/interpreter/interpreterobjects.py
index 39085e5..4aa5548 100644
--- a/mesonbuild/interpreter/interpreterobjects.py
+++ b/mesonbuild/interpreter/interpreterobjects.py
@@ -21,6 +21,7 @@ from ..interpreterbase import (
typed_pos_args, typed_kwargs, typed_operator,
noArgsFlattening, noPosargs, noKwargs, unholder_return,
flatten, resolve_second_level_holders, InterpreterException, InvalidArguments, InvalidCode)
+from ..interpreter.primitives import DependencyVariableString
from ..interpreter.type_checking import NoneType, ENV_SEPARATOR_KW
from ..dependencies import Dependency, ExternalLibrary, InternalDependency
from ..programs import ExternalProgram
@@ -483,14 +484,14 @@ class DependencyHolder(ObjectHolder[Dependency]):
default_varname = args[0]
if default_varname is not None:
FeatureNew('Positional argument to dependency.get_variable()', '0.58.0').use(self.subproject, self.current_node)
- return self.held_object.get_variable(
+ return DependencyVariableString(self.held_object.get_variable(
cmake=kwargs['cmake'] or default_varname,
pkgconfig=kwargs['pkgconfig'] or default_varname,
configtool=kwargs['configtool'] or default_varname,
internal=kwargs['internal'] or default_varname,
default_value=kwargs['default_value'],
pkgconfig_define=kwargs['pkgconfig_define'],
- )
+ ))
@FeatureNew('dependency.include_type', '0.52.0')
@noPosargs