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