generator: add dependency on generator in source tree

If find_program() returns a file from the source directory, anything
that uses it should add the file to the dependencies, so that they are
rebuilt whenever the script changes.  Generator is not doing that.

While at it, I am doing two related fixes:

- Generator is not checking whther the generator actually was found,
resulting in a Python error involving NoneType if it isn't.  To minimize
backwards compatibility issues, I am only raising the error when
g.process() is acutally called.

- the error message for custom_target with a nonexisting program
erroneously mention a not-found external program "nonexistingprogram".
The new error is similar to the one I am adding for generators.
pull/4747/merge
Paolo Bonzini 6 years ago committed by Nirbheek Chauhan
parent ad0ba6a911
commit b9774b4485
  1. 2
      mesonbuild/backend/ninjabackend.py
  2. 12
      mesonbuild/build.py

@ -1757,7 +1757,7 @@ rule FORTRAN_DEP_HACK%s
exe_arr = self.exe_object_to_cmd_array(exe)
infilelist = genlist.get_inputs()
outfilelist = genlist.get_outputs()
extra_dependencies = [os.path.join(self.build_to_src, i) for i in genlist.extra_depends]
extra_dependencies = self.get_custom_target_depend_files(genlist)
for i in range(len(infilelist)):
curfile = infilelist[i]
if len(generator.outputs) == 1:

@ -1365,8 +1365,17 @@ class GeneratedList:
self.outfilelist = []
self.outmap = {}
self.extra_depends = []
self.depend_files = []
self.preserve_path_from = preserve_path_from
self.extra_args = extra_args
if isinstance(generator.exe, dependencies.ExternalProgram):
if not generator.exe.found():
raise InvalidArguments('Tried to use not-found external program as generator')
path = generator.exe.get_path()
if os.path.isabs(path):
# Can only add a dependency on an external program which we
# know the absolute path of
self.depend_files.append(File.from_absolute_file(path))
def add_preserved_path_segment(self, infile, outfiles, state):
result = []
@ -1962,8 +1971,7 @@ class CustomTarget(Target):
final_cmd.append(c)
elif isinstance(c, dependencies.ExternalProgram):
if not c.found():
m = 'Tried to use not-found external program {!r} in "command"'
raise InvalidArguments(m.format(c.name))
raise InvalidArguments('Tried to use not-found external program in "command"')
path = c.get_path()
if os.path.isabs(path):
# Can only add a dependency on an external program which we

Loading…
Cancel
Save