Re: I need support with a planned POSIX make extension

[email protected] (Christos Zoulas)
Newsgroups gmane.os.netbsd.devel.toolchain
Message-ID <[email protected]>
In article <20210709154331.wDTSm%[email protected]>,
(Joerg Schilling)  <[email protected]> wrote:
>Hi, 
>
>I am currently trying to get an orthogonal extension into POSIX make in order 
>to have at least an orthogonal variant as a choice instead of the incompatible
>GNU make extensions called:
>
>	:= that has been standardized in POSIX as ::= and that creates a 
>	   different type of make macro with different behavior
>
>	+= from GNU make that is incompatible to the much older += from
>	   SunPro Make. The incompatibility is that if a make macro has been
>	   created by the GNU := (POSIX ::=) instead of the standard 
>	   assignment operaror =, += first expands the right side before 
>	   appending the expanded result to the macro.
>
>	The different type of macros created with the GNU := is not
>	expanded at use time.
>
>The incompatible behavior from GNU make has the following problems:
>
>1)	expansion always could be prevented in a standard compliant way
>	by using $$(MACRO), instead of using a different macro type.
>
>2)	large makefiles that make heavy use of the include directive 
>	become highly unpredictable because you cannot know what a +=
>	operator will do, since the first definition of the related make
>	macro is most likely in a different include file.
>
>	I already filed a bug against POSIX for that and POSIX now recommends
>	to include at least one lower case letter in the name of a make
>	macro created via GNU make := (POSIX ::=).
>
>3)	The GNU make documentation is written so badly that most people
>	who use := do not know that this causes unexpected behavior with
>	the += operator.
>
>In order to have at least the choice of an orthogonal way of doing what 
>people expect, I defined and implemented two new operators:
>
>	:::=	Assigns to a make macro by first expanding the right
>		side of the assignment, but without creating a different
>		type of make macro.
>
>	+:=	Appends to a make macro by first expanding the right
>		side of the assignment, regardless of the type of the
>		make macro that is to the left.
>
>and I filed a bug against POSIX to enhance the standard to include these
>new operators, see:
>
>	https://www.austingroupbugs.net/view.php?id=1471
>
>BTW: I am the author and maintainer of smake and I am the current maintainer
>of SunPro Make as well. Both programs are part of the schilytools package
>and already include support for the new operators.
>
>The time to implement the new operators was 1-4 hours for each of the make
>implementations, so this is a really cheap extension.
>
>Given that bmake otherwise behaves like smake for :=, I hope that *BSD could
>be willing to support my enhancement.
>
>So my question is: would you be willing to implement support for :::= and +:=
>into bmake and publish that will to the POSIX bug tracking system?

I don't see an issue implementing them, but it feels to me that we are
creating more of a mess this way, because very few people will understand
and know which operator to use when and why.

I wish I could propose some more meaningful syntax, but if we are going
to rely on just punctuation, I don't have any better ideas.

Best,

christos
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.