aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends.py14
-rw-r--r--build.py7
-rw-r--r--interpreter.py11
-rw-r--r--test cases/common/52 custom install dirs/installed_files.txt2
-rw-r--r--test cases/common/52 custom install dirs/meson.build4
-rw-r--r--test cases/common/52 custom install dirs/prog.c3
-rw-r--r--test cases/common/52 custom install dirs/sample.h6
7 files changed, 40 insertions, 7 deletions
diff --git a/backends.py b/backends.py
index 6e710f4..6a1109b 100644
--- a/backends.py
+++ b/backends.py
@@ -547,10 +547,12 @@ class NinjaBackend(Backend):
should_strip = self.environment.coredata.strip
for t in self.build.get_targets().values():
if t.should_install():
- if isinstance(t, build.Executable):
- outdir = bindir
- else:
- outdir = libdir
+ outdir = t.get_custom_install_dir()
+ if outdir is None:
+ if isinstance(t, build.Executable):
+ outdir = bindir
+ else:
+ outdir = libdir
i = [self.get_target_filename(t), outdir, t.get_aliaslist(), should_strip]
d.targets.append(i)
@@ -571,7 +573,9 @@ class NinjaBackend(Backend):
headers = self.build.get_headers()
for h in headers:
- outdir = os.path.join(incroot, h.get_subdir())
+ outdir = h.get_custom_install_dir()
+ if outdir is None:
+ outdir = os.path.join(incroot, h.get_subdir())
for f in h.get_sources():
abspath = os.path.join(self.environment.get_source_dir(), f) # FIXME
i = [abspath, outdir]
diff --git a/build.py b/build.py
index af0768e..3a2cd1e 100644
--- a/build.py
+++ b/build.py
@@ -194,6 +194,9 @@ class BuildTarget():
for i in self.link_targets:
result += i.get_rpaths()
return result
+
+ def get_custom_install_dir(self):
+ return self.custom_install_dir
def process_kwargs(self, kwargs):
self.copy_kwargs(kwargs)
@@ -236,6 +239,10 @@ class BuildTarget():
if not isinstance(deplist, list):
deplist = [deplist]
self.add_external_deps(deplist)
+ self.custom_install_dir = kwargs.get('install_dir', None)
+ if self.custom_install_dir is not None:
+ if not isinstance(self.custom_install_dir, str):
+ raise InvalidArguments('Custom_install_dir must be a string')
def get_subdir(self):
return self.subdir
diff --git a/interpreter.py b/interpreter.py
index 9f84816..1e74f40 100644
--- a/interpreter.py
+++ b/interpreter.py
@@ -52,13 +52,13 @@ class TryRunResultHolder(InterpreterObject):
def returncode_method(self, args, kwargs):
return self.res.returncode
-
+
def compiled_method(self, args, kwargs):
return self.res.compiled
def stdout_method(self, args, kwargs):
return self.res.stdout
-
+
def stderr_method(self, args, kwargs):
return self.res.stderr
@@ -267,6 +267,10 @@ class Headers(InterpreterObject):
InterpreterObject.__init__(self)
self.sources = sources
self.subdir = kwargs.get('subdir', '')
+ self.custom_install_dir = kwargs.get('install_dir', None)
+ if self.custom_install_dir is not None:
+ if not isinstance(self.custom_install_dir, str):
+ raise InterpreterException('Custom_install_dir must be a string.')
def set_subdir(self, subdir):
self.subdir = subdir
@@ -277,6 +281,9 @@ class Headers(InterpreterObject):
def get_sources(self):
return self.sources
+ def get_custom_install_dir(self):
+ return self.custom_install_dir
+
class Data(InterpreterObject):
def __init__(self, subdir, sources, kwargs):
InterpreterObject.__init__(self)
diff --git a/test cases/common/52 custom install dirs/installed_files.txt b/test cases/common/52 custom install dirs/installed_files.txt
new file mode 100644
index 0000000..a8a496c
--- /dev/null
+++ b/test cases/common/52 custom install dirs/installed_files.txt
@@ -0,0 +1,2 @@
+dib/dab/dub/prog
+some/dir/sample.h
diff --git a/test cases/common/52 custom install dirs/meson.build b/test cases/common/52 custom install dirs/meson.build
new file mode 100644
index 0000000..5f1919a
--- /dev/null
+++ b/test cases/common/52 custom install dirs/meson.build
@@ -0,0 +1,4 @@
+project('custom install dirs', 'c')
+
+executable('prog', 'prog.c', install : true, install_dir : 'dib/dab/dub')
+headers('sample.h', install_dir : 'some/dir')
diff --git a/test cases/common/52 custom install dirs/prog.c b/test cases/common/52 custom install dirs/prog.c
new file mode 100644
index 0000000..0f0061d
--- /dev/null
+++ b/test cases/common/52 custom install dirs/prog.c
@@ -0,0 +1,3 @@
+int main(int argc, char **arv) {
+ return 0;
+}
diff --git a/test cases/common/52 custom install dirs/sample.h b/test cases/common/52 custom install dirs/sample.h
new file mode 100644
index 0000000..dc030da
--- /dev/null
+++ b/test cases/common/52 custom install dirs/sample.h
@@ -0,0 +1,6 @@
+#ifndef SAMPLE_H
+#define SAMPLE_H
+
+int wackiness();
+
+#endif