interpreter: correctly track whether a subproject is initialized
The way the tracking is currently done it works if no new subprojects are added to a configured build directory. For cases where we want to add a new subproject, it fails because we don't initialize builtins for that subproject. This corrects that by checking to see if the subproject already exists, and if it doesn't initializes the bultins for it. Fixes: #8421
This commit is contained in:
parent
ec5fe58e6d
commit
e079553959
|
@ -3185,7 +3185,11 @@ external dependencies (including libraries) must go to "dependencies".''')
|
||||||
# have any effect.
|
# have any effect.
|
||||||
self.project_default_options = mesonlib.stringlistify(kwargs.get('default_options', []))
|
self.project_default_options = mesonlib.stringlistify(kwargs.get('default_options', []))
|
||||||
self.project_default_options = coredata.create_options_dict(self.project_default_options, self.subproject)
|
self.project_default_options = coredata.create_options_dict(self.project_default_options, self.subproject)
|
||||||
if self.environment.first_invocation:
|
|
||||||
|
# If this is the first invocation we alway sneed to initialize
|
||||||
|
# builtins, if this is a subproject that is new in a re-invocation we
|
||||||
|
# need to initialize builtins for that
|
||||||
|
if self.environment.first_invocation or (self.subproject != '' and self.subproject not in self.subprojects):
|
||||||
default_options = self.project_default_options.copy()
|
default_options = self.project_default_options.copy()
|
||||||
default_options.update(self.default_project_options)
|
default_options.update(self.default_project_options)
|
||||||
self.coredata.init_builtins(self.subproject)
|
self.coredata.init_builtins(self.subproject)
|
||||||
|
|
|
@ -5544,6 +5544,13 @@ class AllPlatformTests(BasePlatformTests):
|
||||||
check_installed_files(['--skip-subprojects', 'bar'], main_expected)
|
check_installed_files(['--skip-subprojects', 'bar'], main_expected)
|
||||||
check_installed_files(['--skip-subprojects', 'another'], all_expected)
|
check_installed_files(['--skip-subprojects', 'another'], all_expected)
|
||||||
|
|
||||||
|
def test_adding_subproject_to_configure_project(self) -> None:
|
||||||
|
srcdir = os.path.join(self.unit_test_dir, '92 new subproject in configured project')
|
||||||
|
self.init(srcdir)
|
||||||
|
self.build()
|
||||||
|
self.setconf('-Duse-sub=true')
|
||||||
|
self.build()
|
||||||
|
|
||||||
|
|
||||||
class FailureTests(BasePlatformTests):
|
class FailureTests(BasePlatformTests):
|
||||||
'''
|
'''
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
# SPDX-license-identifier: Apache-2.0
|
||||||
|
# Copyright © 2021 Intel Corporation
|
||||||
|
project('existing project with new subproject', 'c')
|
||||||
|
|
||||||
|
if get_option('use-sub')
|
||||||
|
dep = subproject('sub')
|
||||||
|
endif
|
|
@ -0,0 +1,3 @@
|
||||||
|
# SPDX-license-identifier: Apache-2.0
|
||||||
|
# Copyright © 2021 Intel Corporation
|
||||||
|
option('use-sub', type : 'boolean', value : false)
|
|
@ -0,0 +1,6 @@
|
||||||
|
/* SPDX-license-identifier: Apache-2.0 */
|
||||||
|
/* Copyright © 2021 Intel Corporation */
|
||||||
|
|
||||||
|
int func(void) {
|
||||||
|
return 1;
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
# SPDX-license-identifier: Apache-2.0
|
||||||
|
# Copyright © 2021 Intel Corporation
|
||||||
|
project('new subproject', 'c')
|
||||||
|
|
||||||
|
l = library('foo', 'foo.c')
|
||||||
|
|
||||||
|
dep = declare_dependency(link_with : l)
|
Loading…
Reference in New Issue