aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-03-11 12:57:35 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2017-04-02 00:04:45 +0300
commit294abe244f100272f358b7f52813554399c44023 (patch)
treec4108f94d3d0a1e8991e029a581f21d1ec073348
parent7b66ff8921f4e4c2e878739380d9a0496f52b112 (diff)
downloadmeson-294abe244f100272f358b7f52813554399c44023.zip
meson-294abe244f100272f358b7f52813554399c44023.tar.gz
meson-294abe244f100272f358b7f52813554399c44023.tar.bz2
Use relative object file name for unity files everywhere.
-rw-r--r--mesonbuild/backend/backends.py16
-rw-r--r--mesonbuild/backend/vs2010backend.py2
2 files changed, 10 insertions, 8 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index b268222..eaef7d3 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -269,11 +269,13 @@ class Backend:
raise MesonException(m.format(target.name))
return l
- def object_filename_from_source(self, target, source):
+ def object_filename_from_source(self, target, source, is_unity):
if isinstance(source, mesonlib.File):
source = source.fname
# foo.vala files compile down to foo.c and then foo.c.o, not foo.vala.o
if source.endswith('.vala'):
+ if is_unity:
+ return source[:-5] + '.c.' + self.environment.get_object_suffix()
source = os.path.join(self.get_target_private_dir(target), source[:-5] + '.c')
return source.replace('/', '_').replace('\\', '_') + '.' + self.environment.get_object_suffix()
@@ -286,15 +288,15 @@ class Backend:
if self.environment.coredata.get_builtin_option('unity'):
comp = get_compiler_for_source(extobj.target.compilers.values(),
extobj.srclist[0])
- # The unity object name uses the full absolute path of the source file
- osrc = os.path.join(self.get_target_private_dir_abs(extobj.target),
- self.get_unity_source_filename(extobj.target,
- comp.get_default_suffix()))
- objname = self.object_filename_from_source(extobj.target, osrc)
+ # There is a potential conflict here, but it is unlikely that
+ # anyone both enables unity builds and has a file called foo-unity.cpp.
+ osrc = self.get_unity_source_filename(extobj.target,
+ comp.get_default_suffix())
+ objname = self.object_filename_from_source(extobj.target, osrc, True)
objpath = os.path.join(proj_dir_to_build_root, targetdir, objname)
return [objpath]
for osrc in extobj.srclist:
- objname = self.object_filename_from_source(extobj.target, osrc)
+ objname = self.object_filename_from_source(extobj.target, osrc, False)
objpath = os.path.join(proj_dir_to_build_root, targetdir, objname)
result.append(objpath)
return result
diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py
index be9dfdd..902e95f 100644
--- a/mesonbuild/backend/vs2010backend.py
+++ b/mesonbuild/backend/vs2010backend.py
@@ -87,7 +87,7 @@ class Vs2010Backend(backends.Backend):
self.vs_version = '2010'
self.windows_target_platform_version = None
- def object_filename_from_source(self, target, source):
+ def object_filename_from_source(self, target, source, is_unity=False):
basename = os.path.basename(source.fname)
filename_without_extension = '.'.join(basename.split('.')[:-1])
if basename in self.sources_conflicts[target.get_id()]: