aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/backend/ninjabackend.py
diff options
context:
space:
mode:
authorFilipe Brandenburger <filbranden@google.com>2018-04-24 21:39:59 -0700
committerNirbheek Chauhan <nirbheek.chauhan@gmail.com>2018-06-02 04:50:32 +0000
commit05c43cdcd19db98d53d5c9f1b50028d881471c2f (patch)
tree233a3a010cc132e4ce5cc26deb95afcd12243781 /mesonbuild/backend/ninjabackend.py
parent0ccc0e92d114a281ba99fd668f36e69670a0af68 (diff)
downloadmeson-05c43cdcd19db98d53d5c9f1b50028d881471c2f.zip
meson-05c43cdcd19db98d53d5c9f1b50028d881471c2f.tar.gz
meson-05c43cdcd19db98d53d5c9f1b50028d881471c2f.tar.bz2
Add 'install_mode' to all installable targets
This makes it possible to customize permissions of all installable targets, such as executable(), libraries, man pages, header files and custom or generated targets. This is useful, for instance, to install setuid/setgid binaries, which was hard to accomplish without access to this attribute.
Diffstat (limited to 'mesonbuild/backend/ninjabackend.py')
-rw-r--r--mesonbuild/backend/ninjabackend.py15
1 files changed, 8 insertions, 7 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index c7e194e..1aff06f 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -724,6 +724,7 @@ int dummy;
"Pass 'false' for outputs that should not be installed and 'true' for\n" \
'using the default installation directory for an output.'
raise MesonException(m.format(t.name, num_out, t.get_outputs(), num_outdirs))
+ install_mode = t.get_custom_install_mode()
# Install the target output(s)
if isinstance(t, build.BuildTarget):
should_strip = self.get_option_for_target('strip', t)
@@ -731,7 +732,7 @@ int dummy;
# Done separately because of strip/aliases/rpath
if outdirs[0] is not False:
i = [self.get_target_filename(t), outdirs[0],
- t.get_aliases(), should_strip, t.install_rpath]
+ t.get_aliases(), should_strip, t.install_rpath, install_mode]
d.targets.append(i)
# On toolchains/platforms that use an import library for
# linking (separate from the shared library with all the
@@ -749,7 +750,7 @@ int dummy;
implib_install_dir,
# It has no aliases, should not be stripped, and
# doesn't have an install_rpath
- {}, False, '']
+ {}, False, '', install_mode]
d.targets.append(i)
# Install secondary outputs. Only used for Vala right now.
if num_outdirs > 1:
@@ -758,7 +759,7 @@ int dummy;
if outdir is False:
continue
f = os.path.join(self.get_target_dir(t), output)
- d.targets.append([f, outdir, {}, False, None])
+ d.targets.append([f, outdir, {}, False, None, install_mode])
elif isinstance(t, build.CustomTarget):
# If only one install_dir is specified, assume that all
# outputs will be installed into it. This is for
@@ -770,14 +771,14 @@ int dummy;
if num_outdirs == 1 and num_out > 1:
for output in t.get_outputs():
f = os.path.join(self.get_target_dir(t), output)
- d.targets.append([f, outdirs[0], {}, False, None])
+ d.targets.append([f, outdirs[0], {}, False, None, install_mode])
else:
for output, outdir in zip(t.get_outputs(), outdirs):
# User requested that we not install this output
if outdir is False:
continue
f = os.path.join(self.get_target_dir(t), output)
- d.targets.append([f, outdir, {}, False, None])
+ d.targets.append([f, outdir, {}, False, None, install_mode])
def generate_custom_install_script(self, d):
result = []
@@ -809,7 +810,7 @@ int dummy;
msg = 'Invalid header type {!r} can\'t be installed'
raise MesonException(msg.format(f))
abspath = f.absolute_path(srcdir, builddir)
- i = [abspath, outdir]
+ i = [abspath, outdir, h.get_custom_install_mode()]
d.headers.append(i)
def generate_man_install(self, d):
@@ -823,7 +824,7 @@ int dummy;
subdir = os.path.join(manroot, 'man' + num)
srcabs = f.absolute_path(self.environment.get_source_dir(), self.environment.get_build_dir())
dstabs = os.path.join(subdir, os.path.basename(f.fname) + '.gz')
- i = [srcabs, dstabs]
+ i = [srcabs, dstabs, m.get_custom_install_mode()]
d.man.append(i)
def generate_data_install(self, d):