diff options
Diffstat (limited to 'backends.py')
-rw-r--r-- | backends.py | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/backends.py b/backends.py index 8d71314..0fc8646 100644 --- a/backends.py +++ b/backends.py @@ -37,10 +37,9 @@ class TestSerialisation: # This class contains the basic functionality that is needed by all backends. # Feel free to move stuff in and out of it as you see fit. class Backend(): - def __init__(self, build, interp): + def __init__(self, build): self.build = build self.environment = build.environment - self.interpreter = interp self.processed_targets = {} self.dep_rules = {} self.build_to_src = os.path.relpath(self.environment.get_source_dir(), @@ -69,12 +68,18 @@ class Backend(): return filename def get_target_dir(self, target): - dirname = target.get_subdir() + if self.environment.coredata.layout == 'mirror': + dirname = target.get_subdir() + else: + dirname = 'meson-out' 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() + target.type_suffix()) + return os.path.join(self.get_target_dir(target), target.get_basename() + target.type_suffix()) + + def get_target_private_dir_abs(self, target): + dirname = self.get_target_private_dir(target) os.makedirs(os.path.join(self.environment.get_build_dir(), dirname), exist_ok=True) return dirname @@ -87,7 +92,7 @@ class Backend(): language = comp.get_language() suffix = '.' + comp.get_default_suffix() if language not in langlist: - outfilename = os.path.join(self.get_target_private_dir(target), target.name + '-unity' + suffix) + outfilename = os.path.join(self.get_target_private_dir_abs(target), target.name + '-unity' + suffix) outfileabs = os.path.join(self.environment.get_build_dir(), outfilename) outfileabs_tmp = outfileabs + '.tmp' abs_files.append(outfileabs) @@ -167,7 +172,7 @@ class Backend(): def determine_ext_objs(self, extobj, proj_dir_to_build_root=''): result = [] - targetdir = self.get_target_private_dir(extobj.target) + targetdir = self.get_target_private_dir_abs(extobj.target) suffix = '.' + self.environment.get_object_suffix() for osrc in extobj.srclist: osrc_base = osrc.fname @@ -187,7 +192,7 @@ class Backend(): def get_pch_include_args(self, compiler, target): args = [] - pchpath = self.get_target_private_dir(target) + pchpath = self.get_target_private_dir_abs(target) includeargs = compiler.get_include_args(pchpath) for lang in ['c', 'cpp']: p = target.get_pch(lang) @@ -223,7 +228,7 @@ class Backend(): # Fortran rquires extra include directives. if compiler.language == 'fortran': for lt in target.link_targets: - priv_dir = os.path.join(lt.subdir, lt.get_basename() + lt.type_suffix()) + priv_dir = os.path.join(self.get_target_dir(lt), lt.get_basename() + lt.type_suffix()) incflag = compiler.get_include_args(priv_dir) commands += incflag return commands @@ -254,8 +259,15 @@ class Backend(): if not isinstance(target, build.Executable): print(target) return [] - prospectives = target.get_transitive_rpaths() - return [os.path.join(self.environment.get_build_dir(), i) for i in prospectives if len(i) > 0] + prospectives = target.get_transitive_link_deps() + result = [] + for ld in prospectives: + if ld == '' or ld == '.': + continue + dirseg = os.path.join(self.environment.get_build_dir(), self.get_target_dir()) + if dirseg not in result: + result.append(dirseg) + return result def write_test_file(self, datafile): arr = [] |