aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuilder.py1
-rwxr-xr-xgenerators.py15
2 files changed, 11 insertions, 5 deletions
diff --git a/builder.py b/builder.py
index 4c4510a..daa7cec 100755
--- a/builder.py
+++ b/builder.py
@@ -96,5 +96,6 @@ if __name__ == '__main__':
builder = BuilderApp(dir1, dir2, options)
print ('Source dir: ' + builder.source_dir)
print ('Build dir: ' + builder.build_dir)
+ os.chdir(builder.build_dir)
builder.generate()
diff --git a/generators.py b/generators.py
index 6d2e590..643e4f5 100755
--- a/generators.py
+++ b/generators.py
@@ -53,6 +53,8 @@ class Generator():
self.environment = build.environment
self.interpreter = interp
self.processed_targets = {}
+ self.build_to_src = os.path.relpath(self.environment.get_source_dir(),
+ self.environment.get_build_dir())
def get_compiler_for_source(self, src):
for i in self.build.compilers:
@@ -66,13 +68,13 @@ class Generator():
return filename
def get_target_dir(self, target):
- dirname = os.path.join(self.environment.get_build_dir(), target.get_subdir())
- os.makedirs(dirname, exist_ok=True)
+ dirname = target.get_subdir()
+ os.makedirs(os.path.join(self.environment.get_build_dir(), dirname), exist_ok=True)
return dirname
def get_target_private_dir(self, target):
dirname = os.path.join(self.get_target_dir(target), target.get_basename() + '.dir')
- os.makedirs(dirname, exist_ok=True)
+ os.makedirs(os.path.join(self.environment.get_build_dir(), dirname), exist_ok=True)
return dirname
def generate_target(self, target, outfile):
@@ -127,7 +129,10 @@ class Generator():
if not isinstance(d, interpreter.StaticLibrary) and\
not isinstance(d, interpreter.SharedLibrary):
raise RuntimeError('Tried to link with a non-library target "%s".' % d.get_basename())
- args.append(self.get_target_filename(d))
+ fname = self.get_target_filename(d)
+ if '/' not in fname:
+ fname = './' + fname # Hack to make ldd find the library.
+ args.append(fname)
return args
class NinjaGenerator(Generator):
@@ -197,7 +202,7 @@ class NinjaGenerator(Generator):
def generate_single_compile(self, target, outfile, src):
compiler = self.get_compiler_for_source(src)
commands = self.generate_basic_compiler_flags(target, compiler)
- abs_src = os.path.join(self.environment.get_source_dir(), target.get_source_subdir(), src)
+ abs_src = os.path.join(self.build_to_src, target.get_source_subdir(), src)
abs_obj = os.path.join(self.get_target_private_dir(target), src)
abs_obj += '.' + self.environment.get_object_suffix()
for i in target.get_include_dirs():