aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Schneider <nioncode+git@gmail.com>2016-03-17 12:37:38 +0100
committerNicolas Schneider <nioncode+git@gmail.com>2016-03-17 12:37:38 +0100
commitd72cc6e6f84812c2fb2d43bc823e36a01f594616 (patch)
tree3138c1854304f8b39d35ec9dc1d838faf1dde801
parenta3004652eaa8eef877ccf009e7a6ec8e32ad3475 (diff)
downloadmeson-d72cc6e6f84812c2fb2d43bc823e36a01f594616.zip
meson-d72cc6e6f84812c2fb2d43bc823e36a01f594616.tar.gz
meson-d72cc6e6f84812c2fb2d43bc823e36a01f594616.tar.bz2
vs2010: fix object extraction
1. Dependencies must be set up with the target's id instead of its basename. 2. Extracted object output file names must not include the directory prefix, because MSBuild puts all object files into the same directory and names them srcfilename.obj instead of dir/filename.obj or dir_filename.obj.
-rw-r--r--mesonbuild/backend/backends.py13
-rw-r--r--mesonbuild/backend/vs2010backend.py6
2 files changed, 12 insertions, 7 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index 286afa9..fcb16ee 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=''):
+ def flatten_object_list(self, target, proj_dir_to_build_root='', include_dir_names=True):
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)
+ obj_list += self.determine_ext_objs(obj, proj_dir_to_build_root, include_dir_names)
else:
raise MesonException('Unknown data type in object list.')
return obj_list
@@ -207,7 +207,7 @@ class Backend():
return c
raise RuntimeError('Unreachable code')
- def determine_ext_objs(self, extobj, proj_dir_to_build_root=''):
+ def determine_ext_objs(self, extobj, proj_dir_to_build_root='', include_dir_names=True):
result = []
targetdir = self.get_target_private_dir(extobj.target)
suffix = '.' + self.environment.get_object_suffix()
@@ -221,7 +221,12 @@ class Backend():
if pathsegs[0] == 'subprojects':
pathsegs = pathsegs[2:]
fixedpath = os.sep.join(pathsegs)
- objbase = osrc.fname.replace('/', '_').replace('\\', '_')
+ 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)
result.append(objname)
diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py
index a72681b..5a9211f 100644
--- a/mesonbuild/backend/vs2010backend.py
+++ b/mesonbuild/backend/vs2010backend.py
@@ -36,7 +36,7 @@ class Vs2010Backend(backends.Backend):
super().__init__(build)
self.project_file_version = '10.0.30319.1'
# foo.c compiles to foo.obj, not foo.c.obj
- self.source_suffix_in_obj = False
+ self.source_suffix_in_objs = False
def generate_custom_generator_commands(self, target, parent_node):
all_output_files = []
@@ -116,7 +116,7 @@ class Vs2010Backend(backends.Backend):
result = {}
for o in obj_list:
if isinstance(o, build.ExtractedObjects):
- result[o.target.get_basename()] = True
+ result[o.target.get_id()] = True
return result.keys()
def determine_deps(self, p):
@@ -492,7 +492,7 @@ class Vs2010Backend(backends.Backend):
rel_path = self.relpath(lobj.subdir, target.subdir)
linkname = os.path.join(rel_path, lobj.get_import_filename())
additional_links.append(linkname)
- for o in self.flatten_object_list(target, down):
+ for o in self.flatten_object_list(target, down, include_dir_names=False):
assert(isinstance(o, str))
additional_links.append(o)
if len(additional_links) > 0: