aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2021-08-12 22:13:51 -0400
committerXavier Claessens <xclaesse@gmail.com>2021-08-17 15:19:18 -0400
commit8c5aa031b5ffb4eb3c61083072dcab49c8927d45 (patch)
treef62800f365cf6706fab33283436cbeef7df7206f /mesonbuild/interpreter
parent6d055b1e27dc6fc0fac967fbe2f439758a4c5d07 (diff)
downloadmeson-8c5aa031b5ffb4eb3c61083072dcab49c8927d45.zip
meson-8c5aa031b5ffb4eb3c61083072dcab49c8927d45.tar.gz
meson-8c5aa031b5ffb4eb3c61083072dcab49c8927d45.tar.bz2
Add install tags
Fixes: #7007.
Diffstat (limited to 'mesonbuild/interpreter')
-rw-r--r--mesonbuild/interpreter/interpreter.py24
-rw-r--r--mesonbuild/interpreter/mesonmain.py15
2 files changed, 24 insertions, 15 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index ab7efa0..535229c 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -1598,6 +1598,7 @@ external dependencies (including libraries) must go to "dependencies".''')
def func_subdir_done(self, node, args, kwargs):
raise SubdirDoneRequest()
+ @FeatureNewKwargs('custom_target', '0.60.0', ['install_tag'])
@FeatureNewKwargs('custom_target', '0.57.0', ['env'])
@FeatureNewKwargs('custom_target', '0.48.0', ['console'])
@FeatureNewKwargs('custom_target', '0.47.0', ['install_mode', 'build_always_stale'])
@@ -1606,7 +1607,7 @@ external dependencies (including libraries) must go to "dependencies".''')
@permittedKwargs({'input', 'output', 'command', 'install', 'install_dir', 'install_mode',
'build_always', 'capture', 'depends', 'depend_files', 'depfile',
'build_by_default', 'build_always_stale', 'console', 'env',
- 'feed'})
+ 'feed', 'install_tag'})
@typed_pos_args('custom_target', str)
def func_custom_target(self, node: mparser.FunctionNode, args: T.Tuple[str], kwargs: 'TYPE_kwargs') -> build.CustomTarget:
if 'depfile' in kwargs and ('@BASENAME@' in kwargs['depfile'] or '@PLAINNAME@' in kwargs['depfile']):
@@ -1903,6 +1904,7 @@ This will become a hard error in the future.''' % kwargs['input'], location=self
KwargInfo('sources', ContainerTypeInfo(list, (str, mesonlib.File)), listify=True, default=[]),
KwargInfo('rename', ContainerTypeInfo(list, str), default=[], listify=True, since='0.46.0'),
INSTALL_MODE_KW.evolve(since='0.38.0'),
+ KwargInfo('install_tag', str, since='0.60.0'),
)
def func_install_data(self, node: mparser.BaseNode,
args: T.Tuple[T.List['mesonlib.FileOrString']],
@@ -1915,12 +1917,14 @@ This will become a hard error in the future.''' % kwargs['input'], location=self
'"rename" and "sources" argument lists must be the same length if "rename" is given. '
f'Rename has {len(rename)} elements and sources has {len(sources)}.')
- return self.install_data_impl(sources, kwargs['install_dir'], kwargs['install_mode'], rename)
+ return self.install_data_impl(sources, kwargs['install_dir'], kwargs['install_mode'], rename,
+ kwargs['install_tag'])
def install_data_impl(self, sources: T.List[mesonlib.File], install_dir: str,
- install_mode: FileMode, rename: T.Optional[str]) -> build.Data:
+ install_mode: FileMode, rename: T.Optional[str],
+ tag: T.Optional[str]) -> build.Data:
"""Just the implementation with no validation."""
- data = build.Data(sources, install_dir, install_mode, self.subproject, rename)
+ data = build.Data(sources, install_dir, install_mode, self.subproject, rename, tag)
self.build.data.append(data)
return data
@@ -1928,6 +1932,7 @@ This will become a hard error in the future.''' % kwargs['input'], location=self
@typed_kwargs(
'install_subdir',
KwargInfo('install_dir', str, required=True),
+ KwargInfo('install_tag', str, since='0.60.0'),
KwargInfo('strip_directory', bool, default=False),
KwargInfo('exclude_files', ContainerTypeInfo(list, str),
default=[], listify=True, since='0.42.0',
@@ -1947,7 +1952,8 @@ This will become a hard error in the future.''' % kwargs['input'], location=self
kwargs['install_mode'],
exclude,
kwargs['strip_directory'],
- self.subproject)
+ self.subproject,
+ install_tag=kwargs['install_tag'])
self.build.install_dirs.append(idir)
return idir
@@ -1956,9 +1962,10 @@ This will become a hard error in the future.''' % kwargs['input'], location=self
@FeatureNewKwargs('configure_file', '0.41.0', ['capture'])
@FeatureNewKwargs('configure_file', '0.50.0', ['install'])
@FeatureNewKwargs('configure_file', '0.52.0', ['depfile'])
+ @FeatureNewKwargs('configure_file', '0.60.0', ['install_tag'])
@permittedKwargs({'input', 'output', 'configuration', 'command', 'copy', 'depfile',
'install_dir', 'install_mode', 'capture', 'install', 'format',
- 'output_format', 'encoding'})
+ 'output_format', 'encoding', 'install_tag'})
@noPosargs
def func_configure_file(self, node, args, kwargs):
if 'output' not in kwargs:
@@ -2139,7 +2146,10 @@ This will become a hard error in the future.''' % kwargs['input'], location=self
'is true')
cfile = mesonlib.File.from_built_file(ofile_path, ofile_fname)
install_mode = self._get_kwarg_install_mode(kwargs)
- self.build.data.append(build.Data([cfile], idir, install_mode, self.subproject))
+ install_tag = kwargs.get('install_tag')
+ if install_tag is not None and not isinstance(install_tag, str):
+ raise InvalidArguments('install_tag keyword argument must be string')
+ self.build.data.append(build.Data([cfile], idir, install_mode, self.subproject, install_tag=install_tag))
return mesonlib.File.from_built_file(self.subdir, output)
def extract_incdirs(self, kwargs):
diff --git a/mesonbuild/interpreter/mesonmain.py b/mesonbuild/interpreter/mesonmain.py
index 97a695b..ea16b46 100644
--- a/mesonbuild/interpreter/mesonmain.py
+++ b/mesonbuild/interpreter/mesonmain.py
@@ -7,9 +7,9 @@ from .. import mlog
from ..mesonlib import MachineChoice, OptionKey
from ..programs import OverrideProgram, ExternalProgram
-from ..interpreterbase import (MesonInterpreterObject, FeatureNewKwargs, FeatureNew, FeatureDeprecated,
+from ..interpreterbase import (MesonInterpreterObject, FeatureNew, FeatureDeprecated,
typed_pos_args, permittedKwargs, noArgsFlattening, noPosargs, noKwargs,
- MesonVersionString, InterpreterException)
+ typed_kwargs, KwargInfo, MesonVersionString, InterpreterException)
from .interpreterobjects import (ExecutableHolder, ExternalProgramHolder,
CustomTargetHolder, CustomTargetIndexHolder,
@@ -107,20 +107,19 @@ class MesonMain(MesonInterpreterObject):
'0.55.0', self.interpreter.subproject)
return script_args
- @FeatureNewKwargs('add_install_script', '0.57.0', ['skip_if_destdir'])
- @permittedKwargs({'skip_if_destdir'})
+ @typed_kwargs('add_install_script',
+ KwargInfo('skip_if_destdir', bool, default=False, since='0.57.0'),
+ KwargInfo('install_tag', str, since='0.60.0'))
def add_install_script_method(self, args: 'T.Tuple[T.Union[str, mesonlib.File, ExecutableHolder], T.Union[str, mesonlib.File, CustomTargetHolder, CustomTargetIndexHolder], ...]', kwargs):
if len(args) < 1:
raise InterpreterException('add_install_script takes one or more arguments')
if isinstance(args[0], mesonlib.File):
FeatureNew.single_use('Passing file object to script parameter of add_install_script',
'0.57.0', self.interpreter.subproject)
- skip_if_destdir = kwargs.get('skip_if_destdir', False)
- if not isinstance(skip_if_destdir, bool):
- raise InterpreterException('skip_if_destdir keyword argument must be boolean')
script_args = self._process_script_args('add_install_script', args[1:], allow_built=True)
script = self._find_source_script(args[0], script_args)
- script.skip_if_destdir = skip_if_destdir
+ script.skip_if_destdir = kwargs['skip_if_destdir']
+ script.tag = kwargs['install_tag']
self.build.install_scripts.append(script)
@permittedKwargs(set())