summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Lamot <pierre@videolabs.io>2024-08-07 16:32:20 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2024-10-12 21:30:14 +0300
commite1c09ee25f8e4efb064acd3f87c539d7319a90ee (patch)
treee846f87adfe8284c7b84bafcb06ec0ff4ef885d9
parent304207b9d26fc8c2450e15af7260e850cbe97189 (diff)
downloadmeson-e1c09ee25f8e4efb064acd3f87c539d7319a90ee.tar.gz
backend/ninja: fix bad @OUTPUTn@ replacements
`outfilelist` is the output list of the target, while `outfiles` is the output list of the individual commands Bug: mesonbuild/meson/pull/13304#issuecomment-2226398671
-rw-r--r--mesonbuild/backend/ninjabackend.py24
1 files changed, 11 insertions, 13 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 675248962..ee86c27e0 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -2605,17 +2605,18 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
subdir = genlist.subdir
exe = generator.get_exe()
infilelist = genlist.get_inputs()
- outfilelist = genlist.get_outputs()
extra_dependencies = self.get_target_depend_files(genlist)
- for i, curfile in enumerate(infilelist):
- if len(generator.outputs) == 1:
- sole_output = os.path.join(self.get_target_private_dir(target), outfilelist[i])
- else:
- sole_output = f'{curfile}'
+ for curfile in infilelist:
infilename = curfile.rel_to_builddir(self.build_to_src, self.get_target_private_dir(target))
base_args = generator.get_arglist(infilename)
outfiles = genlist.get_outputs_for(curfile)
- outfiles = [os.path.join(self.get_target_private_dir(target), of) for of in outfiles]
+ outfilespriv = [os.path.join(self.get_target_private_dir(target), of) for of in outfiles]
+
+ if len(generator.outputs) == 1:
+ sole_output = outfilespriv[0]
+ else:
+ sole_output = f'{curfile}'
+
if generator.depfile is None:
rulename = 'CUSTOM_COMMAND'
args = base_args
@@ -2626,19 +2627,16 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
args = [x.replace('@DEPFILE@', depfile) for x in base_args]
args = [x.replace("@INPUT@", infilename).replace('@OUTPUT@', sole_output)
for x in args]
- args = self.replace_outputs(args, self.get_target_private_dir(target), outfilelist)
- # We have consumed output files, so drop them from the list of remaining outputs.
- if len(generator.outputs) > 1:
- outfilelist = outfilelist[len(generator.outputs):]
+ args = self.replace_outputs(args, self.get_target_private_dir(target), outfiles)
args = self.replace_paths(target, args, override_subdir=subdir)
cmdlist, reason = self.as_meson_exe_cmdline(exe,
self.replace_extra_args(args, genlist),
- capture=outfiles[0] if generator.capture else None,
+ capture=outfilespriv[0] if generator.capture else None,
env=genlist.env)
abs_pdir = os.path.join(self.environment.get_build_dir(), self.get_target_dir(target))
os.makedirs(abs_pdir, exist_ok=True)
- elem = NinjaBuildElement(self.all_outputs, outfiles, rulename, infilename)
+ elem = NinjaBuildElement(self.all_outputs, outfilespriv, rulename, infilename)
elem.add_dep([self.get_target_filename(x) for x in generator.depends])
if generator.depfile is not None:
elem.add_item('DEPFILE', depfile)