aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r--mesonbuild/interpreter.py33
1 files changed, 30 insertions, 3 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 2c1f8f1..970ab7c 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -456,12 +456,13 @@ class DataHolder(InterpreterObject):
return self.held_object.install_dir
class InstallDir(InterpreterObject):
- def __init__(self, src_subdir, inst_subdir, install_dir, install_mode):
+ def __init__(self, src_subdir, inst_subdir, install_dir, install_mode, exclude):
InterpreterObject.__init__(self)
self.source_subdir = src_subdir
self.installable_subdir = inst_subdir
self.install_dir = install_dir
self.install_mode = install_mode
+ self.exclude = exclude
class Man(InterpreterObject):
@@ -1297,7 +1298,7 @@ permitted_kwargs = {'add_global_arguments': {'language'},
'install_data': {'install_dir', 'install_mode', 'sources'},
'install_headers': {'install_dir', 'subdir'},
'install_man': {'install_dir'},
- 'install_subdir': {'install_dir', 'install_mode'},
+ 'install_subdir': {'exclude_files', 'exclude_directories', 'install_dir', 'install_mode'},
'jar': jar_kwargs,
'project': {'version', 'meson_version', 'default_options', 'license', 'subproject_dir'},
'run_target': {'command', 'depends'},
@@ -2442,13 +2443,39 @@ class Interpreter(InterpreterBase):
def func_install_subdir(self, node, args, kwargs):
if len(args) != 1:
raise InvalidArguments('Install_subdir requires exactly one argument.')
+ subdir = args[0]
if 'install_dir' not in kwargs:
raise InvalidArguments('Missing keyword argument install_dir')
install_dir = kwargs['install_dir']
if not isinstance(install_dir, str):
raise InvalidArguments('Keyword argument install_dir not a string.')
+ if 'exclude_files' in kwargs:
+ exclude = kwargs['exclude_files']
+ if not isinstance(exclude, list):
+ exclude = [exclude]
+ for f in exclude:
+ if not isinstance(f, str):
+ raise InvalidArguments('Exclude argument not a string.')
+ elif os.path.isabs(f):
+ raise InvalidArguments('Exclude argument cannot be absolute.')
+ exclude_files = {os.path.join(subdir, f) for f in exclude}
+ else:
+ exclude_files = set()
+ if 'exclude_directories' in kwargs:
+ exclude = kwargs['exclude_directories']
+ if not isinstance(exclude, list):
+ exclude = [exclude]
+ for d in exclude:
+ if not isinstance(d, str):
+ raise InvalidArguments('Exclude argument not a string.')
+ elif os.path.isabs(d):
+ raise InvalidArguments('Exclude argument cannot be absolute.')
+ exclude_directories = {os.path.join(subdir, f) for f in exclude}
+ else:
+ exclude_directories = set()
+ exclude = (exclude_files, exclude_directories)
install_mode = self._get_kwarg_install_mode(kwargs)
- idir = InstallDir(self.subdir, args[0], install_dir, install_mode)
+ idir = InstallDir(self.subdir, subdir, install_dir, install_mode, exclude)
self.build.install_dirs.append(idir)
return idir