[Top][All Lists]

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

Re: [PATCH 0/1] old-fashioned suffix rules cannot have any prerequisites

From: Paul Smith
Subject: Re: [PATCH 0/1] old-fashioned suffix rules cannot have any prerequisites
Date: Wed, 01 Apr 2020 21:00:15 -0400

Sorry, somehow the original email went by me.

On Thu, 2020-04-02 at 02:01 +0200, Bruno Haible wrote:
> Petr Ovtchenkov wrote in
> <https://lists.gnu.org/archive/html/bug-gnulib/2020-04/msg00000.html>
> > Template po/Makefile.in.in use old-fashioned suffix rules
> > for generating .gmo. But this rules do not allow any prerequisites.
> > 
> > See:https://www.gnu.org/software/make/manual/html_node/Suffix-Rules.html#Suffix-Rules
> > 
> > <snip>
> >    Suffix rules cannot have any prerequisites of their own. If they have
> >    any, they are treated as normal files with funny names, not as suffix
> >    rules. Thus, the rule:
> >    ...
> > </snip>
> > 
> > This lead to problem when used relatively new GNU Make:
> > <snip>
> >    make[3]: *** No rule to make target 'en.gmo', needed by ...
> > </snip>
> Please, to make it easier for me to reproduce, could you tell which
> version of GNU make you're using?

There should be no final version of GNU make that shows this as an
error.  In the final release 4.3, the following appears in the NEWS

> * NOTE: Deprecated behavior.
>   Contrary to the documentation, suffix rules with prerequisites are being
>   treated BOTH as simple targets AND as pattern rules.  Further, the
>   prerequisites are ignored by the pattern rules.  POSIX specifies that in
>   order to be a suffix rule there can be no prerequisites defined.  In this
>   release if POSIX mode is enabled then rules with prerequisites cannot be
>   suffix rules.  If POSIX mode is not enabled then the previous behavior is
>   preserved (a pattern rule with no extra prerequisites is created) AND a
>   warning about this behavior is generated:
>     warning: ignoring prerequisites on suffix rule definition
>   The POSIX behavior will be adopted as the only behavior in a future release
>   of GNU make so please resolve any warnings.

So, you should be seeing a warning, not an error, in GNU make 4.3. 
There were some prereleases of GNU make 4.3 created where this was an

> > In this patch I am avoid significant changes and gmake-specific
> > syntax.
> But % pattern rules are GNU make specific syntax, since this syntax
> is not specified by POSIX [1]. I fear that I'll have to use a more
> complicated fix...

Correct, you cannot use pattern rules in portable makefiles.  The only
problematic rule is this one:

  .po.gmo: $(srcdir)/$(DOMAIN).pot

The other changes are not necessary.

I should point out that even in older versions of GNU make where the
syntax in question didn't generate any warnings or errors, it never
worked as desired: the extra prerequisite are completely ignored.

You can easily confirm this by running "make -p" with this makefile and
in the rule database; locate the pattern rule and you will see:

  %.gmo: %.po
  #  recipe to execute (from 'Makefile', line 111):
        @lang=`echo $* | sed -e 's,.*/,,'`; \

As you can see, there is no prerequisite for the .pot file here.

In short, in no version of GNU make did the suffix rule defined here
ever actually do what was desired and there will be no loss of
functionality by simply removing the extra prerequisite completely:

          @lang=`echo $* | sed -e 's,.*/,,'`; \

If you really do want the .gmo files to list the .pot file as a
prerequisite you'll need to create a separate prerequisite statement
for that, for all versions of GNU make.


reply via email to

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