Simplify path-determination in compile-generation.
@@ -2102,24 +2102,23 @@ rule FORTRAN_DEP_HACK
self.target_arg_cache[key] = commands
commands = CompilerArgs(commands.compiler, commands)
- if isinstance(src, mesonlib.File) and src.is_built:
- rel_src = os.path.join(src.subdir, src.fname)
- if os.path.isabs(rel_src):
- assert(rel_src.startswith(self.environment.get_build_dir()))
- rel_src = rel_src[len(self.environment.get_build_dir()) + 1:]
- abs_src = os.path.join(self.environment.get_build_dir(), rel_src)
- elif isinstance(src, mesonlib.File):
+ if isinstance(src, File):
+ source_dir = self.environment.get_source_dir()
+ build_dir = self.environment.get_build_dir()
+ abs_src = src.absolute_path(source_dir, build_dir)
rel_src = src.rel_to_builddir(self.build_to_src)
- abs_src = src.absolute_path(self.environment.get_source_dir(),
- self.environment.get_build_dir())
+ if src.is_built:
+ assert abs_src.startswith(build_dir)
+ if os.path.isabs(rel_src):
+ rel_src = rel_src[len(build_dir) + 1:]
+ else:
+ # Source files may not be from the source directory if they originate in source-only libraries,
+ # so we can't assert that the absolute path is anywhere in particular.
+ pass
elif is_generated:
raise AssertionError('BUG: broken generated source file handling for {!r}'.format(src))
- else:
- if isinstance(src, File):
- rel_src = src.rel_to_builddir(self.build_to_src)
else:
raise InvalidArguments('Invalid source type: {!r}'.format(src))
- abs_src = os.path.join(self.environment.get_build_dir(), rel_src)
if isinstance(src, File):
if src.is_built:
src_filename = os.path.join(src.subdir, src.fname)
