Can override install directory on a target-by-target basis.
This commit is contained in:
parent
d84d70fa9a
commit
51827d4484
14
backends.py
14
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]
|
||||
|
|
7
build.py
7
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
|
||||
|
|
|
@ -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…
Reference in New Issue