diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2022-03-18 10:28:38 -0700 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2022-03-18 19:46:24 -0700 |
commit | f9445300b3015308fd6a3e0305cf8e5b7f002211 (patch) | |
tree | e63608c837b8d37b6924485cc7c8cf688355c449 /mesonbuild/build.py | |
parent | 7c20890a05481e97eee57a147f50237087a1c94e (diff) | |
download | meson-f9445300b3015308fd6a3e0305cf8e5b7f002211.zip meson-f9445300b3015308fd6a3e0305cf8e5b7f002211.tar.gz meson-f9445300b3015308fd6a3e0305cf8e5b7f002211.tar.bz2 |
structured_sources: fix subdir handling
We currently don't handle subdirectories correctly in
structured_sources, which is problematic. To make this easier to handle
correctly, I've simply changed `structured_sources` to only use Files
and not strings as an implementation detail.
Diffstat (limited to 'mesonbuild/build.py')
-rw-r--r-- | mesonbuild/build.py | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py index fbc1618..4f569a6 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -463,7 +463,7 @@ class StructuredSources(HoldableObject): represent the required filesystem layout. """ - sources: T.DefaultDict[str, T.List[T.Union[str, File, CustomTarget, CustomTargetIndex, GeneratedList]]] = field( + sources: T.DefaultDict[str, T.List[T.Union[File, CustomTarget, CustomTargetIndex, GeneratedList]]] = field( default_factory=lambda: defaultdict(list)) def __add__(self, other: StructuredSources) -> StructuredSources: @@ -475,30 +475,26 @@ class StructuredSources(HoldableObject): def __bool__(self) -> bool: return bool(self.sources) - def first_file(self) -> T.Union[str, File, CustomTarget, CustomTargetIndex, GeneratedList]: + def first_file(self) -> T.Union[File, CustomTarget, CustomTargetIndex, GeneratedList]: """Get the first source in the root :return: The first source in the root """ return self.sources[''][0] - def as_list(self) -> T.List[T.Union[str, File, CustomTarget, CustomTargetIndex, GeneratedList]]: + def as_list(self) -> T.List[T.Union[File, CustomTarget, CustomTargetIndex, GeneratedList]]: return list(itertools.chain.from_iterable(self.sources.values())) - def needs_copy(self, target: BuildTarget) -> bool: + def needs_copy(self) -> bool: """Do we need to create a structure in the build directory. This allows us to avoid making copies if the structures exists in the source dir. Which could happen in situations where a generated source only exists in some configurations """ - p = pathlib.Path(target.subdir) for files in self.sources.values(): for f in files: - if isinstance(f, str): - if not (target.environment.source_dir / p / f).exists(): - return True - elif isinstance(f, File): + if isinstance(f, File): if f.is_built: return True else: |