configure_file: make input arg optional if command is used

Fixes #1476
pull/1541/head
Tim-Philipp Müller 8 years ago committed by Jussi Pakkanen
parent 9929e0efac
commit 8cc89e468d
  1. 8
      mesonbuild/interpreter.py
  2. 14
      test cases/common/16 configure file/generator-without-input-file.py
  3. 1
      test cases/common/16 configure file/installed_files.txt
  4. 10
      test cases/common/16 configure file/meson.build

@ -2280,6 +2280,7 @@ class Interpreter(InterpreterBase):
'they are mutually exclusive.')
# Validate input
inputfile = None
ifile_abs = None
if 'input' in kwargs:
inputfile = kwargs['input']
if isinstance(inputfile, list):
@ -2290,8 +2291,8 @@ class Interpreter(InterpreterBase):
if not isinstance(inputfile, (str, mesonlib.File)):
raise InterpreterException('Input must be a string or a file')
ifile_abs = os.path.join(self.environment.source_dir, self.subdir, inputfile)
elif 'command' in kwargs:
raise InterpreterException('Required keyword argument \'input\' missing')
elif 'command' in kwargs and '@INPUT@' in kwargs['command']:
raise InterpreterException('@INPUT@ used as command argument, but no input file specified.')
# Validate output
output = kwargs['output']
if not isinstance(output, str):
@ -2320,7 +2321,10 @@ class Interpreter(InterpreterBase):
# We use absolute paths for input and output here because the cwd
# that the command is run from is 'unspecified', so it could change.
# Currently it's builddir/subdir for in_builddir else srcdir/subdir.
if ifile_abs:
values = mesonlib.get_filenames_templates_dict([ifile_abs], [ofile_abs])
else:
values = mesonlib.get_filenames_templates_dict(None, [ofile_abs])
# Substitute @INPUT@, @OUTPUT@, etc here.
cmd = mesonlib.substitute_values(kwargs['command'], values)
mlog.log('Configuring', mlog.bold(output), 'with command')

@ -0,0 +1,14 @@
#!/usr/bin/env python3
import sys, os
from pathlib import Path
if len(sys.argv) != 2:
print("Wrong amount of parameters.")
build_dir = Path(os.environ['MESON_BUILD_ROOT'])
subdir = Path(os.environ['MESON_SUBDIR'])
outputf = Path(sys.argv[1])
with outputf.open('w') as ofile:
ofile.write("#define ZERO_RESULT 0\n")

@ -1,3 +1,4 @@
usr/share/appdir/config2.h
usr/share/appdir/config2b.h
usr/share/appdireh/config2-1.h
usr/share/appdirok/config2-2.h

@ -36,6 +36,16 @@ configure_file(input : 'dummy.dat',
install_dir : 'share/appdir')
run_command(check_file, join_paths(meson.current_build_dir(), 'config2.h'))
# Same again as before, but an input file should not be required in
# this case where we use a command/script to generate the output file.
genscript2b = '@0@/generator-without-input-file.py'.format(meson.current_source_dir())
ofile2b = '@0@/config2b.h'.format(meson.current_build_dir())
configure_file(
output : 'config2b.h',
command : [genprog, genscript2b, ofile2b],
install_dir : 'share/appdir')
run_command(check_file, join_paths(meson.current_build_dir(), 'config2b.h'))
found_script = find_program('generator.py')
# More configure_file tests in here
subdir('subdir')

Loading…
Cancel
Save