diff options
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/build.py | 13 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 4 |
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): |