diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2022-08-24 13:11:00 -0700 |
---|---|---|
committer | Eli Schwartz <eschwartz93@gmail.com> | 2022-08-24 22:50:35 -0400 |
commit | c02d7fe119b8f936d10741e73abbc40a4a450ce5 (patch) | |
tree | 83b8e787fc393ba11cb475b678e093f8507ee552 /mesonbuild/backend/backends.py | |
parent | a044f42308b576f0739e50fec7e03327b4b4c66a (diff) | |
download | meson-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.py | 23 |
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: |