Merge pull request #1857 from aradi/configure-subsval

Configure subsval
This commit is contained in:
Jussi Pakkanen 2017-06-03 21:29:01 +03:00 committed by GitHub
commit 3f6c55b9b3
7 changed files with 31 additions and 1 deletions

View File

@ -124,7 +124,7 @@ When a list of strings is passed to the `command:` keyword argument, it takes an
These are all the supported keyword arguments: These are all the supported keyword arguments:
- `input` the input file name. If it's not specified in configuration mode, all the variables in the `configuration:` object (see above) are written to the `output:` file. - `input` the input file name. If it's not specified in configuration mode, all the variables in the `configuration:` object (see above) are written to the `output:` file.
- `output` the output file name. In configuration mode, the permissions of the input file (if it is specified) are copied to the output file. - `output` the output file name (since v0.41.0, may contain `@PLAINNAME@` or `@BASENAME@` substitutions). In configuration mode, the permissions of the input file (if it is specified) are copied to the output file.
- `configuration` as explained above, this is where you pass the configuration data object as returned by `configuration_data()` - `configuration` as explained above, this is where you pass the configuration data object as returned by `configuration_data()`
- `command` as explained above, if specified, Meson does not create the file itself but rather runs the specified command, which allows you to do fully custom file generation - `command` as explained above, if specified, Meson does not create the file itself but rather runs the specified command, which allows you to do fully custom file generation
- `install_dir` the subdirectory to install the generated file to (e.g. `share/myproject`), if omitted the file is not installed. - `install_dir` the subdirectory to install the generated file to (e.g. `share/myproject`), if omitted the file is not installed.

View File

@ -67,3 +67,7 @@ coverage must be combined before producing a report (`coverage3 combine`.)
All known issues have been fixed and Meson can now build reproducible Debian All known issues have been fixed and Meson can now build reproducible Debian
packages out of the box. packages out of the box.
## Extended template substitution in configure_file
The output argument of `configure_file()` is parsed for @BASENAME@ and
@PLAINNAME@ substitutions.

View File

@ -2344,6 +2344,10 @@ class Interpreter(InterpreterBase):
output = kwargs['output'] output = kwargs['output']
if not isinstance(output, str): if not isinstance(output, str):
raise InterpreterException('Output file name must be a string') raise InterpreterException('Output file name must be a string')
if ifile_abs:
values = mesonlib.get_filenames_templates_dict([ifile_abs], None)
outputs = mesonlib.substitute_values([output], values)
output = outputs[0]
if os.path.split(output)[0] != '': if os.path.split(output)[0] != '':
raise InterpreterException('Output file name must not contain a subdirectory.') raise InterpreterException('Output file name must not contain a subdirectory.')
(ofile_path, ofile_fname) = os.path.split(os.path.join(self.subdir, output)) (ofile_path, ofile_fname) = os.path.split(os.path.join(self.subdir, output))

View File

@ -0,0 +1,2 @@
/* Dummy file */
#define RESULTA @ZERO@

View File

@ -0,0 +1,2 @@
/* Dummy file */
#define RESULTB @ZERO@

View File

@ -74,3 +74,15 @@ configure_file(output : 'config3.h',
configuration : dump) configuration : dump)
test('Configless.', executable('dumpprog', 'dumpprog.c')) test('Configless.', executable('dumpprog', 'dumpprog.c'))
# Config file generation in a loop with @BASENAME@ substitution
dump = configuration_data()
dump.set('ZERO', 0)
config_templates = files(['config4a.h.in', 'config4b.h.in'])
foreach config_template : config_templates
configure_file(input : config_template, output : '@BASENAME@',
configuration : dump)
endforeach
test('Substituted', executable('prog4', 'prog4.c'))

View File

@ -0,0 +1,6 @@
#include <config4a.h>
#include <config4b.h>
int main(int argc, char **argv) {
return RESULTA + RESULTB;
}