Subject: Re: bug#8326: can't override dvi: target, or others with -local

From: Stefano Lattarini <[email-masked]>
Date: Wed, 23 Mar 2011 21:28:52 +0100

On Wednesday 23 March 2011, Karl Berry wrote:
> Aside from the discussion in #8289 about alternatives to the hardwired
> make dvi being run by make distcheck, there seems to be another problem,
> namely putting a simple
> dvi:
> in a Makefile.am doesn't work to override the default rule. I get an
> error like this:
> 
>   doc/Makefile.am:12: user target `dvi' defined here...
>   automake: ... overrides Automake target `dvi' defined here
>   doc/Makefile.am:12: consider using dvi-local instead of dvi
>
This happens almost surely because you have `override' warnings enabled,
and Automake is treating warnings as errors (do you have `-Wall -Werror'
in AM_INIT_AUTOMAKE, maybe?).  If you want to override an Automake-provided
target without complaints from Automake, you must disable the `override'
warnings, e.g., by using "AUTOMAKE_OPTIONS = -Wno-override" in the affected
Makefile.am (or by not using `-Wall' in AM_INIT_AUTOMAKE, even if I would
discourage this).

> Looking for the code that's enforcing this, I see in Rule.pm around line
> this comment:
> 	      # -am targets listed in %dependencies support a -local
> 	      # variant.  If the user tries to override TARGET or
> 	      # TARGET-am for which there exists a -local variant,
> 	      # just tell the user to use it.
> 
> But dvi-local does not suffice for the case at hand; that is, it can't
> be used to avoid rebuilding the dvi, as far as I can see.  Certainly
> merely adding dvi-local: does nothing in particular.  Is there another
> way?
>
See above.

> (Aside: I'm just curious, what can dvi-local actually be used for?
> If there's a known use for it, I suggest mentioning it in the doc.)
>
If there is a known use, I don't know it; sorry!

> As far as I can see, this behavior contradicts the documentation (node:
> Extending), which simply says:
> 
>    * As far as rules are concerned, a user-defined rule overrides any
>      `automake'-defined rule for the same target.
> 
> So my report is to suggest implementing that :).
>
That's already implemented (well, almost -- it's not true for few special
targets, like `all' and `check'; maybe we should fix this inconsistency?)

> Perhaps there should be a warning in case of such overrides,
>
See above.

> but a fatal "you can't do that"?
>
You must have enabled `-Werror' somewhere... could you please confirm?
Otherwise we have a bug.

> Else the doc should be changed.
> 
> At any rate, if there's a workaround to get a clean make distcheck with
> a PDF-only manual with the currently released automake, we'd like to know.
>
Adding:

  AUTOMAKE_OPTIONS = -Wno-override
  dvi:

to the relevant Makefile.am should be enough as a workaround (even if not
particularly clean).

> Thanks,
> Karl
 
HTH,
  Stefano