Idea: Standard way to negate special targets

Problem:

Sometimes you want to set a default value using a
special target, but in a few cases you want to *disable*
the special target.

For example, you might want to use:
.ONESHELL:
for *almost* all the rules, except for a few rules
where you want to *disable* .ONESHELL.

There currently isn't a way to do this.

Proposed solution:

Add a syntax to *disable* a special target for
a particular rule.  I propose that it be
a whitespace-surrounded "!" in the prerequisites
followed by the special target being disabled. E.g.:

~~~~
.ONESHELL:

tricky_target: ! .ONESHELL prerequisite
~~~~

Having a reusable syntactic solution seems better
than having weird special cases.  It means there's less to remember
(the same approach works every time) and it's easy to generalize.

I propose that disabling a special target *NOT* be inherited.
If you call on something else, and it wants to disable a
special target, then it has to do the same thing.

I know of no other use for "!" in prerequisites.
If that's not okay, perhaps ".NOT" would be a good alternative.

--- David A. Wheeler

_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to