aboutsummaryrefslogtreecommitdiff
path: root/backends.py
diff options
context:
space:
mode:
Diffstat (limited to 'backends.py')
-rw-r--r--backends.py32
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 = []