From 07dde545d93b16c6bb4db443ffb7fbd75b3414de Mon Sep 17 00:00:00 2001 From: Niklas Claesson Date: Mon, 18 Sep 2017 18:09:41 +0200 Subject: Add @PLAINNAME@ and @BASENAME@ to arguments argument for Generator Fixes #1282 --- mesonbuild/backend/ninjabackend.py | 2 +- mesonbuild/backend/vs2010backend.py | 2 +- mesonbuild/build.py | 6 ++++-- test cases/common/98 gen extra/meson.build | 19 +++++++++++++++++++ test cases/common/98 gen extra/name.l | 3 +++ 5 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 test cases/common/98 gen extra/name.l diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index cd92972..2188074 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -1784,7 +1784,6 @@ rule FORTRAN_DEP_HACK exe_arr = self.exe_object_to_cmd_array(exe) infilelist = genlist.get_inputs() outfilelist = genlist.get_outputs() - base_args = generator.get_arglist() extra_dependencies = [os.path.join(self.build_to_src, i) for i in genlist.extra_depends] source_target_dir = self.get_target_source_dir(target) for i in range(len(infilelist)): @@ -1794,6 +1793,7 @@ rule FORTRAN_DEP_HACK sole_output = '' curfile = infilelist[i] infilename = curfile.rel_to_builddir(self.build_to_src) + 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] if generator.depfile is None: diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py index 0bbc17c..5c2f836 100644 --- a/mesonbuild/backend/vs2010backend.py +++ b/mesonbuild/backend/vs2010backend.py @@ -106,7 +106,6 @@ class Vs2010Backend(backends.Backend): infilelist = genlist.get_inputs() outfilelist = genlist.get_outputs() exe_arr = self.exe_object_to_cmd_array(exe) - base_args = generator.get_arglist() idgroup = ET.SubElement(parent_node, 'ItemGroup') for i in range(len(infilelist)): if len(infilelist) == len(outfilelist): @@ -115,6 +114,7 @@ class Vs2010Backend(backends.Backend): sole_output = '' curfile = infilelist[i] infilename = os.path.join(down, curfile.rel_to_builddir(self.build_to_src)) + base_args = generator.get_arglist(infilename) outfiles_rel = genlist.get_outputs_for(curfile) outfiles = [os.path.join(target_private_dir, of) for of in outfiles_rel] generator_output_files += outfiles diff --git a/mesonbuild/build.py b/mesonbuild/build.py index 89689d7..39c900e 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -1075,8 +1075,10 @@ class Generator: basename = os.path.splitext(plainname)[0] return self.depfile.replace('@BASENAME@', basename).replace('@PLAINNAME@', plainname) - def get_arglist(self): - return self.arglist + def get_arglist(self, inname): + plainname = os.path.split(inname)[1] + basename = os.path.splitext(plainname)[0] + return [x.replace('@BASENAME@', basename).replace('@PLAINNAME@', plainname) for x in self.arglist] def process_files(self, name, files, state, extra_args=[]): output = GeneratedList(self, extra_args=extra_args) diff --git a/test cases/common/98 gen extra/meson.build b/test cases/common/98 gen extra/meson.build index 52ed847..897ef41 100644 --- a/test cases/common/98 gen extra/meson.build +++ b/test cases/common/98 gen extra/meson.build @@ -11,3 +11,22 @@ g2 = gen.process('name.dat', extra_args: '--upper') test('basic', executable('basic', 'plain.c', g1)) test('upper', executable('upper', 'upper.c', g2)) + +cp = find_program('cp') +basename_gen = generator(cp, + output : '@BASENAME@.c', + arguments : ['@INPUT@', join_paths('@BUILD_DIR@', '@BASENAME@.c')]) + +# This test should produce a name.c +basename_src = basename_gen.process('name.l') + +test('basename', executable('basename', basename_src)) + +plainname_gen = generator(cp, + output : '@PLAINNAME@.c', + arguments : ['@INPUT@', join_paths('@BUILD_DIR@', '@PLAINNAME@.c')]) + +# This test should produce a name.l.c +plainname_src = plainname_gen.process('name.l') + +test('plainname', executable('plainname', plainname_src)) diff --git a/test cases/common/98 gen extra/name.l b/test cases/common/98 gen extra/name.l new file mode 100644 index 0000000..3adda4f --- /dev/null +++ b/test cases/common/98 gen extra/name.l @@ -0,0 +1,3 @@ +int main() { +return 0; +} -- cgit v1.1 From 63ada0ce26024f1f961497c4ae09796571d02114 Mon Sep 17 00:00:00 2001 From: Niklas Claesson Date: Wed, 20 Sep 2017 19:24:26 +0200 Subject: Update according to input --- test cases/common/98 gen extra/meson.build | 16 +++++++-------- test cases/common/98 gen extra/srcgen2.py | 32 ++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 test cases/common/98 gen extra/srcgen2.py diff --git a/test cases/common/98 gen extra/meson.build b/test cases/common/98 gen extra/meson.build index 897ef41..772f52e 100644 --- a/test cases/common/98 gen extra/meson.build +++ b/test cases/common/98 gen extra/meson.build @@ -12,21 +12,19 @@ g2 = gen.process('name.dat', extra_args: '--upper') test('basic', executable('basic', 'plain.c', g1)) test('upper', executable('upper', 'upper.c', g2)) -cp = find_program('cp') -basename_gen = generator(cp, - output : '@BASENAME@.c', - arguments : ['@INPUT@', join_paths('@BUILD_DIR@', '@BASENAME@.c')]) +prog2 = find_program('srcgen2.py') +basename_gen = generator(prog2, + output : ['@BASENAME@.tab.c', '@BASENAME@.tab.h'], + arguments : ['@BUILD_DIR@', '@BASENAME@', '@INPUT@']) -# This test should produce a name.c basename_src = basename_gen.process('name.l') test('basename', executable('basename', basename_src)) -plainname_gen = generator(cp, - output : '@PLAINNAME@.c', - arguments : ['@INPUT@', join_paths('@BUILD_DIR@', '@PLAINNAME@.c')]) +plainname_gen = generator(prog2, + output : ['@PLAINNAME@.tab.c', '@PLAINNAME@.tab.h'], + arguments : ['@BUILD_DIR@', '@PLAINNAME@', '@INPUT@']) -# This test should produce a name.l.c plainname_src = plainname_gen.process('name.l') test('plainname', executable('plainname', plainname_src)) diff --git a/test cases/common/98 gen extra/srcgen2.py b/test cases/common/98 gen extra/srcgen2.py new file mode 100644 index 0000000..9cdf12d --- /dev/null +++ b/test cases/common/98 gen extra/srcgen2.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 + +import os +import sys +import argparse + +parser = argparse.ArgumentParser() +parser.add_argument('target_dir', + help='the target dir') +parser.add_argument('stem', + help='the stem') +parser.add_argument('input', + help='the input file') + +options = parser.parse_args(sys.argv[1:]) + +with open(options.input) as f: + content = f.read() + + +output_c = os.path.join(options.target_dir, options.stem + ".tab.c") +with open(output_c, 'w') as f: + f.write(content) + + +output_h = os.path.join(options.target_dir, options.stem + ".tab.h") +h_content = '''#pragma once + +int myfun(void); +''' +with open(output_h, 'w') as f: + f.write(h_content) -- cgit v1.1