If we can't find a .do file for a target, mark it as not is_generated.
This allows files to transition from generated to not-generated if the .do file is ever removed (ie. the user is changing things and the file is now a source file, not a target).
This commit is contained in:
parent
0979a6e666
commit
51bbdc6c5a
2 changed files with 17 additions and 7 deletions
18
builder.py
18
builder.py
|
|
@ -58,19 +58,23 @@ class BuildJob:
|
|||
# target doesn't need to be built; skip the whole task
|
||||
return self._after2(0)
|
||||
if (os.path.exists(t) and not os.path.exists(t + '/.')
|
||||
and not state.is_generated(t)
|
||||
and not os.path.exists('%s.do' % t)):
|
||||
# an existing source file that is not marked as a generated file.
|
||||
# This step is mentioned by djb in his notes. It turns out to be
|
||||
# important to prevent infinite recursion. For example, a rule
|
||||
# called default.c.do could be used to try to produce hello.c,
|
||||
# which is undesirable since hello.c existed already.
|
||||
and not state.is_generated(t)):
|
||||
# an existing source file that was not generated by us.
|
||||
# This step is mentioned by djb in his notes.
|
||||
# For example, a rule called default.c.do could be used to try
|
||||
# to produce hello.c, but we don't want that to happen if
|
||||
# hello.c was created by the end user.
|
||||
# FIXME: always refuse to redo any file that was modified outside
|
||||
# of redo? That would make it easy for someone to override a
|
||||
# file temporarily, and could be undone by deleting the file.
|
||||
state.unmark_as_generated(t)
|
||||
state.stamp_and_maybe_built(t)
|
||||
return self._after2(0)
|
||||
state.start(t)
|
||||
(dofile, basename, ext) = _find_do_file(t)
|
||||
if not dofile:
|
||||
if os.path.exists(t):
|
||||
state.unmark_as_generated(t)
|
||||
state.stamp_and_maybe_built(t)
|
||||
return self._after2(0)
|
||||
else:
|
||||
|
|
|
|||
6
state.py
6
state.py
|
|
@ -97,6 +97,12 @@ def stamp(t):
|
|||
|
||||
def unstamp(t):
|
||||
unlink(_stampname(t))
|
||||
unlink(_sname('dep', t))
|
||||
|
||||
|
||||
def unmark_as_generated(t):
|
||||
unstamp(t)
|
||||
unlink(_sname('gen', t))
|
||||
|
||||
|
||||
def stamped(t):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue