On Sat, 28 Feb 2009, Ralf Wildenhues wrote:
> * Allan Caffee wrote on Thu, Feb 26, 2009 at 02:49:16PM CET:
> > That is certainly one possibility.  Unfortunately though that means that
> > in the Makefile.am files you _must_ use += since Automake will error out
> > if you assign more than one value to a variable (within the same
> > Automake conditional block).
>
> Which is a good thing: two assignments are a potential error, and will
> often result in something undesirable.

Very true.

> > Modern Automake does support appending.  But only appending to a
> > variable that has already been set.
>
> Yes.  This is done primarily to be able to diagnose typos, e.g.,
>   foolish =
>   foo1ish += bar
>
> (no pun intended, BTW), but also to provide more deterministic semantics
> in the presence of conditionals (I don't remember the details).
>
> Is it worth the hassle?  It's certainly a trade-off:
> - more work due to required initializations of all variables,
> - OTOH typos in variables can have rather subtle implications,
>   esp. if those variables are of the "magic automake" kind.

I had never thought of it that way, that does seem like a pretty useful
check.

> I suppose a more sophisticated implementation would allow to let
> automake work in a mode that wouldn't error out on += for uninitialized
> variables (e.g., with a command line switch -Wno-var-append or so).
>
> [...]
>
> I think thinking through the special cases that can come up with
> conditionals would be most of the work.  If you want to contribute a
> patch, please read the HACKING file in the git tree.

Actually the more I think about what I wanted to do the messier it
seems.  In order to abstract whatever changes were made in the snippet
completely from the Makefile.am using this approach we would have to
allow `=' to be semantically identical to `+='.  For obvious reasons,
including those you mentioned, this would be _very_ ill advised.

I was thinking instead it might be worthwhile to provide a hook target
like the one I mentioned in a previous post.  For example imagine the
following scenario:

        am/doxygen.am:
distclean-am-hook:
        -rm -rf Doxyfile doc/html
# ...

        am/dist_rpm.am:
distclean-am-hook:
        -rm -f template.spec
# ...

        Makefile.am:
include $(top_srcdir)/am/doxygen.am
include $(top_srcdir)/am/dist_rpm.am

In such a case Automake could rename these targets to
am--distclean-am-hook-1 and am--distclean-am-hook-2 respectively and add
them to as dependencies of distclean-am.  This would allow third party
snippets to clean up after themselves without any effort on the
maintainer of Makefile.am and without messing around with user-space
variables.  Would this be an acceptable extension to Automake?

~Allan


Reply via email to