From 658442bef43c92da9efb1213e7fb25be85532eb1 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Mon, 18 Dec 2017 20:08:00 +0200 Subject: Can declare file generation in one dir and use the output in another. --- mesonbuild/backend/ninjabackend.py | 10 +++++++--- mesonbuild/backend/vs2010backend.py | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) (limited to 'mesonbuild/backend') diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 1057892..3fb37ea 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -1787,8 +1787,11 @@ rule FORTRAN_DEP_HACK continue self.generate_genlist_for_target(genlist, target, outfile) - def replace_paths(self, target, args): - source_target_dir = self.get_target_source_dir(target) + def replace_paths(self, target, args, override_subdir=None): + if override_subdir: + source_target_dir = os.path.join(self.build_to_src, override_subdir) + else: + source_target_dir = self.get_target_source_dir(target) relout = self.get_target_private_dir(target) args = [x.replace("@SOURCE_DIR@", self.build_to_src).replace("@BUILD_DIR@", relout) for x in args] @@ -1799,6 +1802,7 @@ rule FORTRAN_DEP_HACK def generate_genlist_for_target(self, genlist, target, outfile): generator = genlist.get_generator() + subdir = genlist.subdir exe = generator.get_exe() exe_arr = self.exe_object_to_cmd_array(exe) infilelist = genlist.get_inputs() @@ -1830,7 +1834,7 @@ rule FORTRAN_DEP_HACK if sole_output == '': outfilelist = outfilelist[len(generator.outputs):] relout = self.get_target_private_dir(target) - args = self.replace_paths(target, args) + args = self.replace_paths(target, args, override_subdir=subdir) cmdlist = exe_arr + self.replace_extra_args(args, genlist) if generator.capture: exe_data = self.serialize_executable( diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py index e872a04..1720569 100644 --- a/mesonbuild/backend/vs2010backend.py +++ b/mesonbuild/backend/vs2010backend.py @@ -88,7 +88,6 @@ class Vs2010Backend(backends.Backend): custom_target_include_dirs = [] custom_target_output_files = [] target_private_dir = self.relpath(self.get_target_private_dir(target), self.get_target_dir(target)) - source_target_dir = self.get_target_source_dir(target) down = self.target_to_build_root(target) for genlist in target.get_generated_sources(): if isinstance(genlist, (build.CustomTarget, build.CustomTargetIndex)): @@ -104,6 +103,7 @@ class Vs2010Backend(backends.Backend): exe = generator.get_exe() infilelist = genlist.get_inputs() outfilelist = genlist.get_outputs() + source_dir = os.path.join(self.environment.get_source_dir(), genlist.subdir) exe_arr = self.exe_object_to_cmd_array(exe) idgroup = ET.SubElement(parent_node, 'ItemGroup') for i in range(len(infilelist)): -- cgit v1.1 From 27d4a611a54251dfab968e3cb111d8cbd6b88254 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Thu, 21 Dec 2017 23:06:14 +0200 Subject: Fix Windows. --- mesonbuild/backend/ninjabackend.py | 1 + mesonbuild/backend/vs2010backend.py | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'mesonbuild/backend') diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 3fb37ea..c020458 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -1798,6 +1798,7 @@ rule FORTRAN_DEP_HACK args = [x.replace("@CURRENT_SOURCE_DIR@", source_target_dir) for x in args] args = [x.replace("@SOURCE_ROOT@", self.build_to_src).replace("@BUILD_ROOT@", '.') for x in args] + args = [x.replace('\\', '/') for x in args] return args def generate_genlist_for_target(self, genlist, target, outfile): diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py index 1720569..b53bd17 100644 --- a/mesonbuild/backend/vs2010backend.py +++ b/mesonbuild/backend/vs2010backend.py @@ -103,7 +103,7 @@ class Vs2010Backend(backends.Backend): exe = generator.get_exe() infilelist = genlist.get_inputs() outfilelist = genlist.get_outputs() - source_dir = os.path.join(self.environment.get_source_dir(), genlist.subdir) + source_dir = os.path.join(self.build_to_src, genlist.subdir) exe_arr = self.exe_object_to_cmd_array(exe) idgroup = ET.SubElement(parent_node, 'ItemGroup') for i in range(len(infilelist)): @@ -123,10 +123,11 @@ class Vs2010Backend(backends.Backend): args = [x.replace("@SOURCE_DIR@", self.environment.get_source_dir()) .replace("@BUILD_DIR@", target_private_dir) for x in args] - args = [x.replace("@CURRENT_SOURCE_DIR@", source_target_dir) for x in args] + args = [x.replace("@CURRENT_SOURCE_DIR@", source_dir) for x in args] args = [x.replace("@SOURCE_ROOT@", self.environment.get_source_dir()) .replace("@BUILD_ROOT@", self.environment.get_build_dir()) for x in args] + args = [x.replace('\\', '/') for x in args] cmd = exe_arr + self.replace_extra_args(args, genlist) if generator.capture: exe_data = self.serialize_executable( -- cgit v1.1