aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/build.py13
-rw-r--r--mesonbuild/interpreter.py4
2 files changed, 16 insertions, 1 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index f2a6d9c..df67c8e 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -138,6 +138,19 @@ class Build:
self.find_overrides = {}
self.searched_programs = set() # The list of all programs that have been searched for.
+ def copy(self):
+ other = Build(self.environment)
+ for k, v in self.__dict__.items():
+ if isinstance(v, (list, dict, set, OrderedDict)):
+ other.__dict__[k] = v.copy()
+ else:
+ other.__dict__[k] = v
+ return other
+
+ def merge(self, other):
+ for k, v in other.__dict__.items():
+ self.__dict__[k] = v
+
def add_compiler(self, compiler):
if self.static_linker is None and compiler.needs_static_linker():
self.static_linker = self.environment.detect_static_linker(compiler)
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 66f7f02..8717a83 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -2286,7 +2286,8 @@ external dependencies (including libraries) must go to "dependencies".''')
with mlog.nested():
try:
mlog.log('\nExecuting subproject', mlog.bold(dirname), '\n')
- subi = Interpreter(self.build, self.backend, dirname, subdir, self.subproject_dir,
+ new_build = self.build.copy()
+ subi = Interpreter(new_build, self.backend, dirname, subdir, self.subproject_dir,
self.modules, default_options)
subi.subprojects = self.subprojects
@@ -2312,6 +2313,7 @@ external dependencies (including libraries) must go to "dependencies".''')
self.subprojects.update(subi.subprojects)
self.subprojects[dirname] = SubprojectHolder(subi, self.subproject_dir, dirname)
self.build_def_files += subi.build_def_files
+ self.build.merge(subi.build)
return self.subprojects[dirname]
def get_option_internal(self, optname):