Can override install directory on a target-by-target basis.

pull/15/head
Jussi Pakkanen 11 years ago
parent d84d70fa9a
commit 51827d4484
  1. 14
      backends.py
  2. 7
      build.py
  3. 11
      interpreter.py
  4. 2
      test cases/common/52 custom install dirs/installed_files.txt
  5. 4
      test cases/common/52 custom install dirs/meson.build
  6. 3
      test cases/common/52 custom install dirs/prog.c
  7. 6
      test cases/common/52 custom install dirs/sample.h

@ -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]

@ -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

@ -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)

@ -0,0 +1,2 @@
dib/dab/dub/prog
some/dir/sample.h

@ -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')

@ -0,0 +1,3 @@
int main(int argc, char **arv) {
return 0;
}

@ -0,0 +1,6 @@
#ifndef SAMPLE_H
#define SAMPLE_H
int wackiness();
#endif
Loading…
Cancel
Save