aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/backend/backends.py
diff options
context:
space:
mode:
authorNicolas Schneider <nioncode+git@gmail.com>2016-03-25 09:49:30 +0100
committerNicolas Schneider <nioncode+git@gmail.com>2016-03-25 09:49:30 +0100
commit8787ec3ea2aa2b06c48ef917a396e8912ad05303 (patch)
tree841c1d3b1de894709a1a1a0ff170c81b0e5597c7 /mesonbuild/backend/backends.py
parent3de7c3471406b3e800b4b87c15febb49e73a9d53 (diff)
downloadmeson-8787ec3ea2aa2b06c48ef917a396e8912ad05303.zip
meson-8787ec3ea2aa2b06c48ef917a396e8912ad05303.tar.gz
meson-8787ec3ea2aa2b06c48ef917a396e8912ad05303.tar.bz2
vs2010: fix object extraction with same source file name
This also refactors determine_ext_objs() to use inheritance instead of a method flag for determining the object output name.
Diffstat (limited to 'mesonbuild/backend/backends.py')
-rw-r--r--mesonbuild/backend/backends.py23
1 files changed, 8 insertions, 15 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index 8d0b0f6..af3f9f2 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -142,7 +142,7 @@ class Backend():
return os.path.relpath(os.path.join('dummyprefixdir', todir),\
os.path.join('dummyprefixdir', fromdir))
- def flatten_object_list(self, target, proj_dir_to_build_root='', include_dir_names=True):
+ def flatten_object_list(self, target, proj_dir_to_build_root=''):
obj_list = []
for obj in target.get_objects():
if isinstance(obj, str):
@@ -150,7 +150,7 @@ class Backend():
self.build_to_src, target.get_subdir(), obj)
obj_list.append(o)
elif isinstance(obj, build.ExtractedObjects):
- obj_list += self.determine_ext_objs(obj, proj_dir_to_build_root, include_dir_names)
+ obj_list += self.determine_ext_objs(obj, proj_dir_to_build_root)
else:
raise MesonException('Unknown data type in object list.')
return obj_list
@@ -210,28 +210,21 @@ class Backend():
return c
raise RuntimeError('Unreachable code')
- def determine_ext_objs(self, extobj, proj_dir_to_build_root='', include_dir_names=True):
+ def object_filename_from_source(self, target, source):
+ return source.fname.replace('/', '_').replace('\\', '_') + '.' + self.environment.get_object_suffix()
+
+ def determine_ext_objs(self, extobj, proj_dir_to_build_root=''):
result = []
targetdir = self.get_target_private_dir(extobj.target)
- suffix = '.' + self.environment.get_object_suffix()
for osrc in extobj.srclist:
- osrc_base = osrc.fname
- if not self.source_suffix_in_objs:
- osrc_base = '.'.join(osrc.split('.')[:-1])
# If extracting in a subproject, the subproject
# name gets duplicated in the file name.
pathsegs = osrc.subdir.split(os.sep)
if pathsegs[0] == 'subprojects':
pathsegs = pathsegs[2:]
fixedpath = os.sep.join(pathsegs)
- if include_dir_names:
- objbase = osrc_base.replace('/', '_').replace('\\', '_')
- else:
- # vs2010 backend puts all obj files without directory prefixes into build dir, so just
- # use the file name without a directory (will be stripped by os.path.basename() below).
- objbase = osrc_base
- objname = os.path.join(proj_dir_to_build_root,
- targetdir, os.path.basename(objbase) + suffix)
+ objname = os.path.join(proj_dir_to_build_root, targetdir,
+ self.object_filename_from_source(extobj.target, osrc))
result.append(objname)
return result