aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/backend/backends.py
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2022-08-24 13:11:00 -0700
committerEli Schwartz <eschwartz93@gmail.com>2022-08-24 22:50:35 -0400
commitc02d7fe119b8f936d10741e73abbc40a4a450ce5 (patch)
tree83b8e787fc393ba11cb475b678e093f8507ee552 /mesonbuild/backend/backends.py
parenta044f42308b576f0739e50fec7e03327b4b4c66a (diff)
downloadmeson-c02d7fe119b8f936d10741e73abbc40a4a450ce5.zip
meson-c02d7fe119b8f936d10741e73abbc40a4a450ce5.tar.gz
meson-c02d7fe119b8f936d10741e73abbc40a4a450ce5.tar.bz2
backend/ninja: properly track objects extracted from fortran sources
We need this to ensure that .mod files are created before we start compiling, and to ensure that the proper include directory arguments are generated.
Diffstat (limited to 'mesonbuild/backend/backends.py')
-rw-r--r--mesonbuild/backend/backends.py23
1 files changed, 14 insertions, 9 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index 42f6255..6723b97 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -305,7 +305,7 @@ class Backend:
elif isinstance(t, build.CustomTargetIndex):
filename = t.get_outputs()[0]
else:
- assert isinstance(t, build.BuildTarget)
+ assert isinstance(t, build.BuildTarget), t
filename = t.get_filename()
return os.path.join(self.get_target_dir(t), filename)
@@ -452,18 +452,20 @@ class Backend:
return os.path.relpath(os.path.join('dummyprefixdir', todir),
os.path.join('dummyprefixdir', fromdir))
- def flatten_object_list(self, target: build.BuildTarget, proj_dir_to_build_root: str = '') -> T.List[str]:
- obj_list = self._flatten_object_list(target, target.get_objects(), proj_dir_to_build_root)
- return list(dict.fromkeys(obj_list))
+ def flatten_object_list(self, target: build.BuildTarget, proj_dir_to_build_root: str = ''
+ ) -> T.Tuple[T.List[str], T.List[build.BuildTargetTypes]]:
+ obj_list, deps = self._flatten_object_list(target, target.get_objects(), proj_dir_to_build_root)
+ return list(dict.fromkeys(obj_list)), deps
def determine_ext_objs(self, objects: build.ExtractedObjects, proj_dir_to_build_root: str = '') -> T.List[str]:
- obj_list = self._flatten_object_list(objects.target, [objects], proj_dir_to_build_root)
+ obj_list, _ = self._flatten_object_list(objects.target, [objects], proj_dir_to_build_root)
return list(dict.fromkeys(obj_list))
def _flatten_object_list(self, target: build.BuildTarget,
objects: T.Sequence[T.Union[str, 'File', build.ExtractedObjects]],
- proj_dir_to_build_root: str) -> T.List[str]:
+ proj_dir_to_build_root: str) -> T.Tuple[T.List[str], T.List[build.BuildTargetTypes]]:
obj_list: T.List[str] = []
+ deps: T.List[build.BuildTargetTypes] = []
for obj in objects:
if isinstance(obj, str):
o = os.path.join(proj_dir_to_build_root,
@@ -480,11 +482,14 @@ class Backend:
obj_list.append(obj.rel_to_builddir(o))
elif isinstance(obj, build.ExtractedObjects):
if obj.recursive:
- obj_list += self._flatten_object_list(obj.target, obj.objlist, proj_dir_to_build_root)
- obj_list += self._determine_ext_objs(obj, proj_dir_to_build_root)
+ objs, d = self._flatten_object_list(obj.target, obj.objlist, proj_dir_to_build_root)
+ obj_list.extend(objs)
+ deps.extend(d)
+ obj_list.extend(self._determine_ext_objs(obj, proj_dir_to_build_root))
+ deps.append(obj.target)
else:
raise MesonException('Unknown data type in object list.')
- return obj_list
+ return obj_list, deps
@staticmethod
def is_swift_target(target: build.BuildTarget) -> bool: