bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Potential Bug: `.PHONY` targets and order-only prerequisites


From: Jacob Kopczynski
Subject: Re: Potential Bug: `.PHONY` targets and order-only prerequisites
Date: Wed, 18 May 2022 14:36:50 -0700

The thing that the docs refer to as "impose order" is not a single thing, but two. I would characterize a normal prerequisite as doing three things rather than two:
- update-marking: cause a target to be marked out of date if the prereq is marked out of date
- require-existence: require the prereq to be built successfully at least once before the target is built
- imposed-order: require the prereq to be built before the target, if both are being built
A prereq which truly was order-only would exclusively do the last one, imposing order. The "order-only" prereqs as they stand do both imposed-order and require-existence. For .PHONY targets, require-existence always mandates update-marking, which is why the overlap between those two cases is particularly confusing - a phony target which drops only update-marking is a contradiction in terms, so the natural assumption to make is that the effect of "order-only" prereqs is not that, and is instead something non-paradoxical.

I looked deeper into the list archives and saw that this discussion has come up before; Stefano Lattarini experienced the same problem in 2012 (thread starts 2012/06/11). Phillip Guenther said that this pure-order effect is not achievable with the structure of make, which presumably remains true.

I agree with Lattarini's recommendations, which I'll reproduce below for convenience. The primary one was the suggestion of alternate names that might be used for what are currently called order-only prerequisites - "existence-only prerequisites" seems like the clearest one to me.

Thanks,
Jacob

Lattarini:
  - the name "order-only prerequisites" is IMHO poorly chosen, and don't
    really correspond to their actual semantics; a more appropriate might
    be "weak prerequisites" or "existence-only prerequisites";
  - the explanation given in the manual is imprecise and confusing; since
    the explanation you've given here is OTOH very clear and concise, I
    suggest you report it in the manual;
  - it might make sense to state explicitly that order-only prereqs
    which are phony behave in all ways like standard prerequisites.
The referenced 'explanation you've given here' is from Paul Smith - presumably the same one that has responded to me? It was
No, that's not how order-only prerequisites work.  An order-only
prerequisite is treated identically to a normal prerequisite except for
exactly one thing: when make checks to see if a target needs to be
remade, the time-last-modified values for any order-only prerequisites
are not considered.

On Wed, May 18, 2022 at 11:14 AM Paul Smith <psmith@gnu.org> wrote:
On Wed, 2022-05-18 at 10:22 -0700, Jacob Kopczynski wrote:
> I believe I understand. The name "order-only" is highly misleading
> and should be changed - it does considerably more than "only"
> "order"; the only thing it does not do is check the timestamp.

As described in the docs there are only two things a prerequisite can
do: impose order and effect the out-of-date decision of the target.
Order-only prerequisites do one of them (impose order) and don't do the
other (effect out-of-date decisions).

What are the "considerably more" things that order-only prerequisites
do, besides impose order?

I do agree that the docs need clarification though.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]