interpreter: when overriding a dependency make its name match
Otherwise internal dependencies have auto-generated names that are not human readable. Instead, use the name that the dependency overrides. For example: ```meson meson.override_dependency('zlib', declare_dependency()) dep_zlib = dependency('zlib') assert(dep_zlib.name() == 'zlib') ``` Fixes: #12967
This commit is contained in:
parent
6d713e40f8
commit
b1340e9bb1
|
@ -1,8 +1,9 @@
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
# Copyright 2012-2021 The Meson development team
|
# Copyright 2012-2021 The Meson development team
|
||||||
# Copyright © 2021 Intel Corporation
|
# Copyright © 2021-2024 Intel Corporation
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import copy
|
||||||
import os
|
import os
|
||||||
import typing as T
|
import typing as T
|
||||||
|
|
||||||
|
@ -347,6 +348,16 @@ class MesonMain(MesonInterpreterObject):
|
||||||
if not name:
|
if not name:
|
||||||
raise InterpreterException('First argument must be a string and cannot be empty')
|
raise InterpreterException('First argument must be a string and cannot be empty')
|
||||||
|
|
||||||
|
# Make a copy since we're going to mutate.
|
||||||
|
#
|
||||||
|
# dep = declare_dependency()
|
||||||
|
# meson.override_dependency('foo', dep)
|
||||||
|
# meson.override_dependency('foo-1.0', dep)
|
||||||
|
# dep = dependency('foo')
|
||||||
|
# dep.name() # == 'foo-1.0'
|
||||||
|
dep = copy.copy(dep)
|
||||||
|
dep.name = name
|
||||||
|
|
||||||
optkey = OptionKey('default_library', subproject=self.interpreter.subproject)
|
optkey = OptionKey('default_library', subproject=self.interpreter.subproject)
|
||||||
default_library = self.interpreter.coredata.get_option(optkey)
|
default_library = self.interpreter.coredata.get_option(optkey)
|
||||||
assert isinstance(default_library, str), 'for mypy'
|
assert isinstance(default_library, str), 'for mypy'
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
# Copyright 2016-2023 The Meson Developers
|
||||||
|
# Copyright © 2024 Intel Corporation
|
||||||
|
|
||||||
project('proj', 'c')
|
project('proj', 'c')
|
||||||
subproject('sub')
|
subproject('sub')
|
||||||
libSub = dependency('sub', fallback: ['sub', 'libSub'])
|
libSub = dependency('sub', fallback: ['sub', 'libSub'])
|
||||||
|
@ -6,7 +10,19 @@ exe = executable('prog', 'prog.c', dependencies: libSub)
|
||||||
test('subproject subdir', exe)
|
test('subproject subdir', exe)
|
||||||
|
|
||||||
# Verify the subproject has placed dependency override.
|
# Verify the subproject has placed dependency override.
|
||||||
dependency('sub-1.0')
|
d = dependency('sub-1.0')
|
||||||
|
|
||||||
|
# verify that the name is the overridden name
|
||||||
|
assert(d.name() == 'sub-1.0', 'name was not properly set, should have been "sub-1.0", but was @0@'.format(d.name()))
|
||||||
|
|
||||||
|
# Verify that when a dependency object is used for two overrides, the correct
|
||||||
|
# name is used
|
||||||
|
meson.override_dependency('new-dep', d)
|
||||||
|
d2 = dependency('new-dep')
|
||||||
|
assert(d2.name() == 'new-dep', 'name was not properly set, should have been "new-dep", but was @0@'.format(d2.name()))
|
||||||
|
|
||||||
|
# And that the old dependency wasn't changed
|
||||||
|
assert(d.name() == 'sub-1.0', 'original dependency was mutated.')
|
||||||
|
|
||||||
# Verify we can now take 'sub' dependency without fallback, but only version 1.0.
|
# Verify we can now take 'sub' dependency without fallback, but only version 1.0.
|
||||||
dependency('sub')
|
dependency('sub')
|
||||||
|
|
Loading…
Reference in New Issue