|
31 | 31 | from ..interpreterbase import Disabler, disablerIfNotFound |
32 | 32 | from ..interpreterbase import FeatureNew, FeatureDeprecated, FeatureBroken, FeatureNewKwargs |
33 | 33 | from ..interpreterbase import ObjectHolder, ContextManagerObject |
34 | | -from ..interpreterbase import stringifyUserArguments, resolve_second_level_holders |
| 34 | +from ..interpreterbase import stringifyUserArguments |
35 | 35 | from ..modules import ExtensionModule, ModuleObject, MutableModuleObject, NewExtensionModule, NotFoundExtensionModule |
36 | 36 | from ..optinterpreter import optname_regex |
37 | 37 |
|
@@ -690,7 +690,6 @@ def func_files(self, node: mparser.FunctionNode, args: T.Tuple[T.List[str]], kwa |
690 | 690 | KwargInfo('version', (str, NoneType)), |
691 | 691 | KwargInfo('objects', ContainerTypeInfo(list, build.ExtractedObjects), listify=True, default=[], since='1.1.0'), |
692 | 692 | ) |
693 | | - @noSecondLevelHolderResolving |
694 | 693 | def func_declare_dependency(self, node: mparser.BaseNode, args: T.List[TYPE_var], |
695 | 694 | kwargs: kwtypes.FuncDeclareDependency) -> dependencies.Dependency: |
696 | 695 | deps = kwargs['dependencies'] |
@@ -1917,15 +1916,12 @@ def func_jar(self, node: mparser.BaseNode, |
1917 | 1916 | @permittedKwargs(known_build_target_kwargs) |
1918 | 1917 | @typed_pos_args('build_target', str, varargs=SOURCES_VARARGS) |
1919 | 1918 | @typed_kwargs('build_target', *BUILD_TARGET_KWS, allow_unknown=True) |
1920 | | - @noSecondLevelHolderResolving |
1921 | 1919 | def func_build_target(self, node: mparser.BaseNode, |
1922 | 1920 | args: T.Tuple[str, SourcesVarargsType], |
1923 | 1921 | kwargs: kwtypes.BuildTarget |
1924 | 1922 | ) -> T.Union[build.Executable, build.StaticLibrary, build.SharedLibrary, |
1925 | 1923 | build.SharedModule, build.BothLibraries, build.Jar]: |
1926 | 1924 | target_type = kwargs['target_type'] |
1927 | | - if target_type not in {'both_libraries', 'library'}: |
1928 | | - args, kwargs = resolve_second_level_holders(args, kwargs) |
1929 | 1925 |
|
1930 | 1926 | if target_type == 'executable': |
1931 | 1927 | return self.build_target(node, args, kwargs, build.Executable) |
@@ -2172,13 +2168,19 @@ def func_run_target(self, node: mparser.FunctionNode, args: T.Tuple[str], |
2172 | 2168 | @FeatureNew('alias_target', '0.52.0') |
2173 | 2169 | @typed_pos_args('alias_target', str, varargs=(build.Target, build.BothLibraries), min_varargs=1) |
2174 | 2170 | @noKwargs |
2175 | | - @noSecondLevelHolderResolving |
2176 | 2171 | def func_alias_target(self, node: mparser.BaseNode, args: T.Tuple[str, T.List[T.Union[build.Target, build.BothLibraries]]], |
2177 | 2172 | kwargs: TYPE_kwargs) -> build.AliasTarget: |
2178 | 2173 | name, deps = args |
2179 | 2174 | if any(isinstance(d, build.RunTarget) for d in deps): |
2180 | 2175 | FeatureNew.single_use('alias_target that depends on run_targets', '0.60.0', self.subproject) |
2181 | | - tg = build.AliasTarget(name, deps, self.subdir, self.subproject, self.environment) |
| 2176 | + real_deps: T.List[build.Target] = [] |
| 2177 | + for d in deps: |
| 2178 | + if isinstance(d, build.BothLibraries): |
| 2179 | + real_deps.append(d.shared) |
| 2180 | + real_deps.append(d.static) |
| 2181 | + else: |
| 2182 | + real_deps.append(d) |
| 2183 | + tg = build.AliasTarget(name, real_deps, self.subdir, self.subproject, self.environment) |
2182 | 2184 | self.add_target(name, tg) |
2183 | 2185 | return tg |
2184 | 2186 |
|
@@ -3284,16 +3286,18 @@ def build_both_libraries(self, node: mparser.BaseNode, args: T.Tuple[str, Source |
3284 | 3286 | # Keep only compilers used for linking |
3285 | 3287 | static_lib.compilers = {k: v for k, v in static_lib.compilers.items() if k in compilers.clink_langs} |
3286 | 3288 |
|
| 3289 | + # Cross reference them to implement as_shared() and as_static() methods. |
| 3290 | + shared_lib.set_static(static_lib) |
| 3291 | + static_lib.set_shared(shared_lib) |
| 3292 | + |
3287 | 3293 | return build.BothLibraries(shared_lib, static_lib, preferred_library) |
3288 | 3294 |
|
3289 | 3295 | def build_library(self, node: mparser.BaseNode, args: T.Tuple[str, SourcesVarargsType], kwargs: kwtypes.Library): |
3290 | 3296 | default_library = self.coredata.get_option(OptionKey('default_library', subproject=self.subproject)) |
3291 | 3297 | assert isinstance(default_library, str), 'for mypy' |
3292 | 3298 | if default_library == 'shared': |
3293 | | - args, kwargs = resolve_second_level_holders(args, kwargs) |
3294 | 3299 | return self.build_target(node, args, T.cast('kwtypes.StaticLibrary', kwargs), build.SharedLibrary) |
3295 | 3300 | elif default_library == 'static': |
3296 | | - args, kwargs = resolve_second_level_holders(args, kwargs) |
3297 | 3301 | return self.build_target(node, args, T.cast('kwtypes.SharedLibrary', kwargs), build.StaticLibrary) |
3298 | 3302 | elif default_library == 'both': |
3299 | 3303 | return self.build_both_libraries(node, args, kwargs) |
|
0 commit comments