diff options
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/backend/backends.py | 1 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 7 | ||||
-rw-r--r-- | mesonbuild/minstall.py | 9 |
3 files changed, 13 insertions, 4 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py index caec761..badc2d0 100644 --- a/mesonbuild/backend/backends.py +++ b/mesonbuild/backend/backends.py @@ -137,6 +137,7 @@ class ExecutableSerialisation: self.extra_paths = extra_paths self.capture = capture self.pickled = False + self.skip_if_destdir = False class TestSerialisation: def __init__(self, name: str, project: str, suite: str, fname: T.List[str], diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index ceaa29a..0ce0fe8 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -2015,15 +2015,20 @@ class MesonMain(InterpreterObject): '0.55.0', self.interpreter.subproject) return script_args - @permittedKwargs(set()) + @FeatureNewKwargs('add_install_script', '0.57.0', ['skip_if_destdir']) + @permittedKwargs({'skip_if_destdir'}) def add_install_script_method(self, args: 'T.Tuple[T.Union[str, mesonlib.File, ExecutableHolder], T.Union[str, mesonlib.File, CustomTargetHolder, CustomTargetIndexHolder, ConfigureFileHolder], ...]', 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 self.build.install_scripts.append(script) @permittedKwargs(set()) diff --git a/mesonbuild/minstall.py b/mesonbuild/minstall.py index db08dfe..18dca8b 100644 --- a/mesonbuild/minstall.py +++ b/mesonbuild/minstall.py @@ -429,7 +429,7 @@ class Installer: self.install_man(d, dm, destdir, fullprefix) self.install_data(d, dm, destdir, fullprefix) restore_selinux_contexts() - self.run_install_script(d, fullprefix) + self.run_install_script(d, destdir, fullprefix) if not self.did_install_something: self.log('Nothing to install.') if not self.options.quiet and self.preserved_file_count > 0: @@ -483,7 +483,7 @@ class Installer: self.did_install_something = True set_mode(outfilename, install_mode, d.install_umask) - def run_install_script(self, d: InstallData, fullprefix: str) -> None: + def run_install_script(self, d: InstallData, destdir: str, fullprefix: str) -> None: env = {'MESON_SOURCE_ROOT': d.source_dir, 'MESON_BUILD_ROOT': d.build_dir, 'MESON_INSTALL_PREFIX': d.prefix, @@ -494,8 +494,11 @@ class Installer: env['MESON_INSTALL_QUIET'] = '1' for i in d.install_scripts: - self.did_install_something = True # Custom script must report itself if it does nothing. name = ' '.join(i.cmd_args) + if i.skip_if_destdir and destdir: + self.log('Skipping custom install script because DESTDIR is set {!r}'.format(name)) + continue + self.did_install_something = True # Custom script must report itself if it does nothing. self.log('Running custom install script {!r}'.format(name)) try: rc = run_exe(i, env) |