diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2017-03-11 12:57:35 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2017-04-02 00:04:45 +0300 |
commit | 294abe244f100272f358b7f52813554399c44023 (patch) | |
tree | c4108f94d3d0a1e8991e029a581f21d1ec073348 | |
parent | 7b66ff8921f4e4c2e878739380d9a0496f52b112 (diff) | |
download | meson-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.py | 16 | ||||
-rw-r--r-- | mesonbuild/backend/vs2010backend.py | 2 |
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()]: |