aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/backend/backends.py1
-rw-r--r--mesonbuild/interpreter.py7
-rw-r--r--mesonbuild/minstall.py9
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)