aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/interpreter.py6
-rwxr-xr-xrun_unittests.py7
-rw-r--r--test cases/unit/92 new subproject in configured project/meson.build7
-rw-r--r--test cases/unit/92 new subproject in configured project/meson_options.txt3
-rw-r--r--test cases/unit/92 new subproject in configured project/subprojects/sub/foo.c6
-rw-r--r--test cases/unit/92 new subproject in configured project/subprojects/sub/meson.build7
6 files changed, 35 insertions, 1 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 98c5713..ea65bc6 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -3185,7 +3185,11 @@ external dependencies (including libraries) must go to "dependencies".''')
# have any effect.
self.project_default_options = mesonlib.stringlistify(kwargs.get('default_options', []))
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.update(self.default_project_options)
self.coredata.init_builtins(self.subproject)
diff --git a/run_unittests.py b/run_unittests.py
index f7f9fd5..acd775c 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -5544,6 +5544,13 @@ class AllPlatformTests(BasePlatformTests):
check_installed_files(['--skip-subprojects', 'bar'], main_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):
'''
diff --git a/test cases/unit/92 new subproject in configured project/meson.build b/test cases/unit/92 new subproject in configured project/meson.build
new file mode 100644
index 0000000..b82aa41
--- /dev/null
+++ b/test cases/unit/92 new subproject in configured project/meson.build
@@ -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
diff --git a/test cases/unit/92 new subproject in configured project/meson_options.txt b/test cases/unit/92 new subproject in configured project/meson_options.txt
new file mode 100644
index 0000000..12d8395
--- /dev/null
+++ b/test cases/unit/92 new subproject in configured project/meson_options.txt
@@ -0,0 +1,3 @@
+# SPDX-license-identifier: Apache-2.0
+# Copyright © 2021 Intel Corporation
+option('use-sub', type : 'boolean', value : false)
diff --git a/test cases/unit/92 new subproject in configured project/subprojects/sub/foo.c b/test cases/unit/92 new subproject in configured project/subprojects/sub/foo.c
new file mode 100644
index 0000000..9713d9f
--- /dev/null
+++ b/test cases/unit/92 new subproject in configured project/subprojects/sub/foo.c
@@ -0,0 +1,6 @@
+/* SPDX-license-identifier: Apache-2.0 */
+/* Copyright © 2021 Intel Corporation */
+
+int func(void) {
+ return 1;
+}
diff --git a/test cases/unit/92 new subproject in configured project/subprojects/sub/meson.build b/test cases/unit/92 new subproject in configured project/subprojects/sub/meson.build
new file mode 100644
index 0000000..a833b0c
--- /dev/null
+++ b/test cases/unit/92 new subproject in configured project/subprojects/sub/meson.build
@@ -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)