automake
[Top][All Lists]
Advanced

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

Re: POSIX make standardization wish list


From: Eric Blake
Subject: Re: POSIX make standardization wish list
Date: Fri, 15 Oct 2010 15:12:57 -0600
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.9) Gecko/20100921 Fedora/3.1.4-1.fc13 Mnenhy/0.8.3 Thunderbird/3.1.4

[adding the GNU automake list, as an interested party in the current spate of proposals for improving POSIX make; other messages start: http://thread.gmane.org/gmane.comp.standards.posix.austin.general/3102]

On 10/15/2010 02:27 AM, tom honermann wrote:
Thanks to David Wheeler for pushing for additional standardization of
the make utility. As long as we're
on the subject, I thought I'd throw out my wish list of features I'd
like to see POSIX standardize.

GNU Automake would really like to standardize double variable indirection:

http://lists.gnu.org/archive/html/automake/2009-04/msg00040.html

- To allow to override the silencing at 'make' run time, we use of a
makefile construct with recursive variable expansion $(var1$(var2)).
This is not specified by POSIX, and so might not be portable to all
kinds of 'make' implementations.  That means, if your package has the
option 'silent-rules' enabled, then even with V=1, a strict POSIX 'make'
may barf on this construct.

Now, before anyone screams: all 'make' implementations that I could get
hold of *do* accept this construct correctly; that includes IRIX 6.5,
AIX 4.3.3, Tru64 4.0D, Solaris 2.6, HP-UX 10.20, NetBSD, FreeBSD,
OpenBSD, and of course GNU; Also, we tried an alternative implementation
that uses only constructs specified in POSIX, but that turned out to be
*a* *lot* *less* portable in practice.


http://lists.gnu.org/archive/html/automake-patches/2008-12/msg00027.html

2) We replace it with a functionality that is compliant.

I thought I finally had an idea to remain compliant:  you can legally
have macros on the left hand side of macro assignments.  For example,
you can have
  foo$(var) = bar

where $(var) is evaluated at the time this line is parsed.  Of course
this allows to pass only one bit of information per $(var).

I have reworked the patch a bit to this end; see below.  Unfortunately,
while this is Posix-compliant AFAICS, it is rather unportable and fails
silently with several vendor makes (e.g., IRIX, HP-UX).

I haven't found another way yet.  If we can't find one, then your choice
of $(var1$(var2)) is certainly better than nothing, in combination with
(1).

--
Eric Blake   address@hidden    +1-801-349-2682
Libvirt virtualization library http://libvirt.org



reply via email to

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