summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Brunet <charles.brunet@optelgroup.com>2025-01-07 10:12:01 -0500
committerJussi Pakkanen <jpakkane@gmail.com>2025-01-07 20:43:28 +0200
commitb7260e803151654d0ca83f033defeaa20e07bb68 (patch)
tree3698228062d648da26e8a5ed401f004ddc04129d
parenta4cb40bde488cc548e39fbd2e536e25a833f2484 (diff)
downloadmeson-b7260e803151654d0ca83f033defeaa20e07bb68.tar.gz
Fix internal dependency names
Internal dependency names were generated from object id. This cause problem when objects are copied, especially when generating partial dependency, or when extracting shared or static dependencies from both_library, because dependency names in target and dependencies introspection files become unrelated. This fixes that by generating the dependency name from the internal id, and by using that base name when generating partial dependencies.
-rw-r--r--mesonbuild/build.py3
-rw-r--r--mesonbuild/dependencies/base.py9
2 files changed, 8 insertions, 4 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 35f1f24a4..ca4e5d5a7 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -1364,7 +1364,8 @@ class BuildTarget(Target):
[],
dep.get_compile_args(),
dep.get_link_args(),
- [], [], [], [], [], {}, [], [], [])
+ [], [], [], [], [], {}, [], [], [],
+ dep.name)
self.external_deps.append(extpart)
# Deps of deps.
self.add_deps(dep.ext_deps)
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index ed6138a7e..9c05419b9 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -111,7 +111,7 @@ class Dependency(HoldableObject):
# This allows two Dependencies to be compared even after being copied.
# The purpose is to allow the name to be changed, but still have a proper comparison
self._id = uuid.uuid4().int
- self.name = f'dep{id(self)}'
+ self.name = f'dep{self._id}'
self.version: T.Optional[str] = None
self.language: T.Optional[str] = None # None means C-like
self.is_found = False
@@ -278,7 +278,8 @@ class InternalDependency(Dependency):
extra_files: T.Sequence[mesonlib.File],
ext_deps: T.List[Dependency], variables: T.Dict[str, str],
d_module_versions: T.List[T.Union[str, int]], d_import_dirs: T.List['IncludeDirs'],
- objects: T.List['ExtractedObjects']):
+ objects: T.List['ExtractedObjects'],
+ name: T.Optional[str] = None):
super().__init__(DependencyTypeName('internal'), {})
self.version = version
self.is_found = True
@@ -296,6 +297,8 @@ class InternalDependency(Dependency):
self.d_features['versions'] = d_module_versions
if d_import_dirs:
self.d_features['import_dirs'] = d_import_dirs
+ if name:
+ self.name = name
def __deepcopy__(self, memo: T.Dict[int, 'InternalDependency']) -> 'InternalDependency':
result = self.__class__.__new__(self.__class__)
@@ -335,7 +338,7 @@ class InternalDependency(Dependency):
return InternalDependency(
self.version, final_includes, final_compile_args,
final_link_args, final_libraries, final_whole_libraries,
- final_sources, final_extra_files, final_deps, self.variables, [], [], [])
+ final_sources, final_extra_files, final_deps, self.variables, [], [], [], self.name)
def get_include_dirs(self) -> T.List['IncludeDirs']:
return self.include_directories