automake-ng
[Top][All Lists]
Advanced

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

Re: [Automake-NG] [PATCH] [ng] suffix: drop Automake-time chaining of su


From: Dave Hart
Subject: Re: [Automake-NG] [PATCH] [ng] suffix: drop Automake-time chaining of suffix rules
Date: Sun, 27 May 2012 04:29:02 +0000

On Sat, May 26, 2012 at 5:22 PM, Stefano Lattarini
<address@hidden> wrote:
> This change simplifies the Automake::Rule module a little, moves yet
> more logic from Automake runtime to GNU make runtime (in the spirit of
> Automake-NG), and gets us rid of some never-documented nor completely
> specified Automake magics.  OTOH, it also breaks some idioms that, while
> only relevant for uncommon cases, have been working since the first
> Automake releases.  Still, it is easy to slightly modify those idioms to
> have the use cases they were catering to correctly handled with the new
> semantics (examples of this are given below); the only downside being the
> need of a little more verbosity and explicitness on the user's part.
>
> So, with the present change, automake starts using a much simpler and
> dumber algorithm to determine how to build an object associated to a
> source whose extension in not one of those it handles internally.

Does this simpler and dumber algorithm benefit developers or end-users
of Automake-consuming projects?  For example, does the simpler
algorithm avoid particular perils of the traditional approach, or
simplify handling of unhandled filename extensions for Makefile.am
maintainers?

> Mainline Automake used to follow the chain of user-defined pattern rules

s/used to follow/follows/

> to determine how to build the object file deriving from a source file
> with a custom user extension; for example, upon reading:
>
>     %.cc: %.zoo:
>             $(preprocess) $< > $@
>     bin_PROGRAMS = foo
>     foo_SOURCES = bar.zoo
>
> automake knew that it has to bring in the C++ support (compilation rules,
> requirement for AC_PROG_CXX in configure.ac, etc), and use the C++ linker
> to link the 'foo' executable.
>
> But after the present change, automake *won't follow those implicit
> chains of pattern rules* anymore; so that the idiom above will have to
> be re-worked like follows to preserve its intent and behaviour:
>
>     %.cc: %.zoo:
>             $(preprocess) $< > $@
>     bin_PROGRAMS = foo
>     # The use of '.cc' is required to let Automake know to bring in
>     # stuff for the handling of C++ compilation, and to use the C++
>     # linker to build 'foo'.
>     nodist_foo_SOURCES = bar.cc
>     EXTRA_DIST = foo.zoo
>
> Finally, we must note another, slightly annoying first consequence of
> this change of semantics: one can't use anymore "header files" with
> extensions unrecognized to Automake anymore; for example, an usage like
> this:
>
>    # Won't work anymore: will cause errors at make runtime.
>    %.h: %.my-hdr
>          $(preprocess-header) $< >$@
>    foo_SOURCES = foo.c bar.my-hdr
>    BUILT_SOURCES = bar.h
>
> will cause the generated Makefile to die on "make all", with an error
> like:
>
>    make[1]: *** No rule to make target 'bar.o', needed by 'zardoz'.  Stop.
>
> while an usage like this:
>
>    # Won't work anymore: will cause errors at automake runtime.
>    %.h: %.my-hdr
>          $(preprocess-header) $< >$@
>    foo_SOURCES = foo.c foo.my-hdr
>    BUILT_SOURCES = foo.h
>
> will cause automake itself to die, reporting an error like:
>
>    object 'foo.$(OBJEXT)' created by 'foo.my-hdr' and 'foo.c'
>
> We don't believe the above breakage is a real issue though, because
> the use case can still be served by placing the "non standard" headers
> in EXTRA_DIST rather than in a _SOURCES variable:
>
>    # This will work.
>    %.h: %.my-hdr
>          $(preprocess-header) $< >$@
>    foo_SOURCES = foo.c
>    EXTRA_DIST = foo.my-hdr
>    BUILT_SOURCES = foo.h

I am not using Automake-NG at this point, but I am interested in
following its development just in case mainline Automake earns the
past tense.  I wonder whether breaking existing Makefile.am practice
here is counterbalanced by some benefit to developers using
Automake-NG or their end-users, or if the benefit is solely in
simplicity and maintainability of Automake-NG.  In the latter case, I
suggest considering deferring backwards-incompatible changes until
after the first few releases to ease transition to Automake-NG.

Cheers,
Dave Hart



reply via email to

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