Anonymous | Login | 2024-10-09 02:52 UTC |
Main | My View | View Issues | Change Log | Docs |
Viewing Issue Simple Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||
ID | Category | Severity | Type | Date Submitted | Last Update | ||
0001471 | [Issue 8 drafts] Shell and Utilities | Editorial | Enhancement Request | 2021-05-16 12:15 | 2024-06-11 09:12 | ||
Reporter | joerg | View Status | public | ||||
Assigned To | |||||||
Priority | normal | Resolution | Accepted As Marked | ||||
Status | Closed | Product Version | |||||
Name | Jörg Schilling | ||||||
Organization | |||||||
User Reference | |||||||
Section | make | ||||||
Page Number | 2888- | ||||||
Line Number | 97001- | ||||||
Final Accepted Text | See Note: 0005440. | ||||||
Summary | 0001471: Add an orthogonal interface for immediate macro expansion definitions to make | ||||||
Description |
GNU make introduced a ::= macro assignment where the value is first expanded and then assigned. This has pitfalls, as it at the same time introduces a non-predictive behavior of the (since 35 years existing) += operator. In order to allow predictive behavior, two new operators should be introduced: macro:::=value and macro +:=value The first (:::=) causes an assignment with immediate expansion but is creating the same macro type as reated with macro=value. Macros created with macro:::=value are delayed appended with macro +=value as usual. The second (+:=) causes an append assignment with immediate expansion, regardless of whether the macro has been created by macro=value, macro::=value or macro:::=value before. This feature is implemented by SunPro Make and smake since a while, see the current SunPro Man Page at: http://schilytools.sourceforge.net/man/man1/make.1s.html [^] and the current smake man page at: http://schilytools.sourceforge.net/man/man1/smake.1.html [^] |
||||||
Desired Action |
On page 2888 line 97001 change macro=value macro::=value to macro=value macro::=value macro:::=value After page 2894 line 97263 add: The following form defines a normal delayed-expansion macro (replacing any previous definition of the macro named by string1): string1 :::= [string2] by immediately expanding string2 before assigning the value. After page 2895 line 97282 add: The following form (the append form) appends additional text to the value of a macro: string1 +:= [string2] When using this append form: - If the macro named by string1 does not exist, this form shall be equivalent to the immediate-expansion form string1 :::= [string2] - If the macro named by string1 exists, then a <space> or <tab> character followed by the evaluation of string2 shall be appended to the value currently assigned to the macro named by string1. |
||||||
Tags | issue8 | ||||||
Attached Files | |||||||
|
Relationships | ||||||
|
Notes | |
(0005356) shware_systems (reporter) 2021-05-16 14:35 |
Personally, I'd rather see ":+=" than ":::=", as keeping operators under 4 chars long, harder to typo, and more mnemonic of being related to "+:=" in intent. While this would be a breaking change for the relatively few SunPro make files that use the 4 char form now, it'll be clearer for users of other makes that add this. |
(0005357) psmith (developer) 2021-05-16 17:18 |
I don't see a need for these new operators to be standardized. GNU make has implemented the immediate/delayed assignment operators more or less as they are described in the standard today for over 25 years and there haven't been any requests that I recall to add more capabilities such as the ones described here. |
(0005358) shware_systems (reporter) 2021-05-16 19:02 |
On the phone calls where this was originally brought up cases were brought up where assignment expressions executed later could have different results depending on the initial assignment. This could break boilerplate makefiles user provided makefiles were expected to reference, resulting in a much larger documentation requirement for those files to let end users know those variables were sensitive. The addition of these allows such boilerplate to be insensitive to which type of original assignment happened, and this was considered of enough future usability Jeorg was asked to put this ER together. |
(0005359) kre (reporter) 2021-05-16 19:12 |
Something existing only in SunPro make (and smake, which is more or less a derivative) is clearly not the standard. For any of this to be adopted, it would need to have been implemented by at least a couple of other relatively major make implementations. It doesn't matter in the slightest what problems it might solve, this group is not a legislature, and should never be attempting to force implementations into something that their users are not demanding. |
(0005360) shware_systems (reporter) 2021-05-16 19:49 |
As something addressing possible portability issues I believe additions like this are in scope for the standard. If you can point to where they are explicitly excluded from consideration that I've missed somehow I'll be hapy to look at that. The criteria I'm aware of for such additions is that it has been implemented at least once as proof of concept, not that all known implementations have to have adopted it. These now have 2 implementations. |
(0005361) joerg (reporter) 2021-05-16 21:26 edited on: 2021-05-16 21:27 |
Re: Note: 0005359 smake is much older than SunPro Make and I am very sure that SunPro Make is not based on smake. So we have two completely independent implementations that implement the proposal with different implementation problems. Also note that Mark already mentioned that a single implementation is sufficient to prevent this proposal from being a POSIX invention. Finally the GNU make ::= addition was implemented by one make variant only and is (in constrast to this proposal) really hard to implement in other makes. Adding this proposal to a cleanly written make takes approx. 2-4 hours, so be sure whether you like to spend more time in arguing than it would take to implement. BTW: The number of halfway POSIX compliant make implementations is very modest. |
(0005363) psmith (developer) 2021-05-22 19:02 |
Regardless of code provenance it's hard to consider SunPro make and smake "independent implementations" when one person is maintaining and updating both of them. These new operators have been available for about two months now: I don't see how it's possible that any users, other than the maintainers perhaps, have had a chance to use even the original ::= much less come to the conclusion that there's a problem and decide they need new alternatives. I won't argue that "::=" was implemented by one make variant. However, the capability was available and proven in GNU make for decades, not months, and was heavily used in almost all GNU make-specific makefiles; additionally the concept of an immediately expanded variable is simple and powerful and something that many users want; that may be why it was adopted. In contrast, these new assignment operators seem (to me) to be esoteric and rarely needed. As I mentioned above, I don't recall any requests for anything like these new operators from the GNU make userbase in the last 25+ years. Regarding amount of work to implement these new operators: it might be true that in terms of the bare code it's not excessively difficult (I'm not sure but I have no reason to disagree offhand). However just because it's not a lot of work doesn't mean it belongs in the standard. Also consider that in addition to the code changes there is more work that needs to be done: There will have to be a suite of regression tests added to GNU make verify these new operators behave with all the existing operators and in all contexts. These new operators have to be documented. GNU make provides a full user's manual, in addition to the man page, which is expected to include thorough details of their behavior, clear explanations of how they differ from the other operators, as well as practical examples of when and how these operators might be used. Simply adding the text above won't be sufficient. Finally, GNU make has other facilities beyond POSIX, and these new operators will have to be tested with them as well; target- and pattern-specific variable assignments at least certainly need to be considered. Fundamentally, I'm not convinced that there's any need for these operators to appear in the standard. |
(0005393) geoffclare (manager) 2021-07-08 16:43 |
During the July 8, 2021 teleconference Joerg claimed that the proposed behaviour for :::= is the same as the behaviour of := in BSD make. It is surprising that this has not been mentioned before in this bug, so can someone with access to BSD make confirm this? I.e. does this: printf 'A = 1\nB := $$(A)\nall:\n\techo '\''$(B)'\''\n' | make -f - output 1, or does it output $(A) like GNU make? |
(0005394) hvd (reporter) 2021-07-08 16:57 |
> I.e. does this: > printf 'A = 1\nB := $$(A)\nall:\n\techo '\''$(B)'\''\n' | make -f - > output 1, or does it output $(A) like GNU make? With bmake (http://crufty.net/help/sjg/bmake.html, [^] a portable version of NetBSD make), this outputs 1. |
(0005395) steffen (reporter) 2021-07-08 19:30 |
#?0|kent:toolbox.git$ printf 'A = 1\nB := $$(A)\nall:\n\techo '\''$(B)'\''\n' | make -f - echo '$(A)' $(A) #?0|kent:toolbox.git$ printf 'A = 1\nB := $$(A)\nall:\n\techo '\''$(B)'\''\n' | smake -f - smake: WARNING: Nonportable ':=' assignment found for macro 'B' in line 2 col 4 of 'Standard in' ...echo '1' 1 #?0|kent:toolbox.git$ printf 'A = 1\nB := $$(A)\nall:\n\techo '\''$(B)'\''\n' | bmake -f - echo '1' 1 |
(0005396) steffen (reporter) 2021-07-08 19:32 |
P.S.: bmake is also used on FreeBSD. Output with the newest version under Linux. |
(0005397) kre (reporter) 2021-07-08 20:01 |
On actual NetBSD, both an oldish NetBSD 8 (from Jan 2018) and an (almost) current HEAD jinx$ printf 'A = 1\nB := $$(A)\nall:\n\techo '\''$(B)'\''\n' | make -sf - $(A) netbsd# printf 'A = 1\nB := $$(A)\nall:\n\techo '\''$(B)'\''\n' | make -sf - $(A) (I added the -s to supress the echo command itself). I am not sure why Simon's bmake appears to be different, I will ask him. But I suspect the answer will be the same as the last time I asked something like this (paraphrasing) "bmake doesn't get updated very often". When I look on NetBSD 6 vintage systems (circa 2013) ... munnari$ printf 'A = 1\nB := $$(A)\nall:\n\techo '\''$(B)'\''\n' | make -sf - 1 So this looks to be something that was changed sometime between 2013 and 2018. |
(0005398) steffen (reporter) 2021-07-08 20:21 |
.. i had not seen hvd's posting at first. But here, no, this is the very very current bmake that has been imported into FreeBSD about two weeks ago or so. I package it for a Linux distribution. t$ prt-get info bmake Name: bmake Path: /usr/ports/contrib Version: 20210621 Release: 1 Description: NetBSD make program URL: http://www.crufty.net/help/sjg/bmake.html [^] Maintainer: Steffen Nurpmeso, steffen at sdaoden dot eu P.S.: the portable branch requires two tests to be disabled on Linux. Interesting problem, the standard is explicit and says signals which were not ignored upon program start _only_. Which i deem problematic for SIGINT for example, given that bmake at least supports interrupt handlers etc. Let's see what the future brings. The standard is like this, however. |
(0005399) steffen (reporter) 2021-07-08 20:34 |
P.S.: to be explicit, the tests have to be disabled only if running in an unshare(1) based container "as in" /usr/bin/unshare --ipc --uts --pid --fork make because that seems to ignore SIGINT++. |
(0005400) kre (reporter) 2021-07-08 21:15 |
Simon says (just had to start like that!) : The answer is "it depends" ;-) Tranditionally it would have output 1 and still does if .MAKE.SAVE_DOLLARS=no The behavior was changed a few years ago (to be more compatible with GNU make ;-), so now it outputs $(A) by default. I added .MAKE.SAVE_DOLLARS so that the traditional behavior (which my dirdeps.mk depends on) can be selected. In recent bmake it all depends on the value of .MAKE.SAVE_DOLLARS there are a couple of *.mk files in bmake that set .MAKE.SAVE_DOLLARS=no He also said he would take a look at this issue (I sent him its URL) but perhaps not for a few days. |
(0005401) steffen (reporter) 2021-07-08 22:33 |
Yes. $ printf 'A = 1\nB := $$(A)\nall:\n\techo '\''$(B)'\''\n' | bmake .MAKE.SAVE_DOLLARS=yes -f - echo '$(A)' $(A) You have new mail in /var/mail/steffen And it is nicely documented also .MAKE.SAVE_DOLLARS value should be a boolean that controls whether ‘$$’ are preserved when doing ‘:=’ assignments. The default is false, for backwards compatibility. Set to true for com‐ patability with other makes. If set to false, ‘$$’ becomes ‘$’ per normal evaluation rules. Well i did not know (read the manual!), but i also will not change the defaults for the package i maintain. |
(0005402) steffen (reporter) 2021-07-08 22:33 |
Thanks, kre. |
(0005403) joerg (reporter) 2021-07-10 12:30 |
Re: Note: 0005393 Geoff, your test script is unfortunately not sufficient to investigate and understand the problem caused by the deviating behavior implemented in GNU make. This is because there are two deviations in GNU make compared to other make implementations and your script only tests for one of them. To test for the other deviation, you could use this script: printf 'A = immediate\nB := b\nB += $A\nA = delayed\nall:\n\techo '\''$(B)'\''\n' | $MAKE -s -f - smake prints: smake: WARNING: Nonportable ':=' assignment found for macro 'B' in line 2 col 4 of 'Standard in' b delayed bmake prints: b delayed and gmake prints: b immediate As you see, smake and bmake fully agree and the deviating behavior from gmake never should have made it into the standard. In special: If the gmake documentation would have clearly pointed to it's deviating behavior, I would have protested against 0000330 When 0000330 was discussed in the teleconference. During that teleconference, I was assuming, gmake was aligned with the behavior of other make implementations like smake and bmake. Note that the change in bmake regarding the expansion of := macros at use time (see your test script) has been introduced after 2015, which is years after 0000330 was closed with a wrong decision. Also note that the tool people from netbsd yesterday clearly judged that the deviating gmake behavior for += tested with the script from this bugnote is seen as a bug by them. |
(0005404) psmith (developer) 2021-07-10 18:03 |
I reject the assertion that GNU make's documentation doesn't clearly define the behavior of "+=" in the context of immediately expanded variables. There's an entire section of the manual devoted to this, with examples: https://www.gnu.org/software/make/manual/html_node/Appending.html [^] I also don't agree that this behavior wasn't well-described by the request to add ::= and += to the standard. I can't speak to what was or wasn't discussed in the teleconference but the change text is clear: > The following form (the "append" form) modifies a macro by appending additional text to it: > string1 += [string2] > > After the append form: > ... > * If the macro exists and is an immediately-expanded macro, it appends a space and the > evaluation of string2 to the value currently assigned to string1. > ... and this text survived more or less intact through to the final wording. There was nothing hidden about this. Regarding this proposal, I am ambivalent on +:=. One reason I'm ambivalent is that in 25+ years of maintaining GNU make I don't ever recall anyone wanting the ability to add immediately expanded text to a deferred expansion variable. The other reason is that this same behavior can already be had, although it requires using two variables: This: D = a D +:= $(VAR) can be written: D = a I ::= $(VAR) D += $I If it's really the case that you always want this behavior then that's annoying. But as I said, no one has ever asked for this so I question whether it's really something people need a lot. If people use it only occasionally then the two-variable version might even be preferred as more clearly understandable. Another reason for my ambivalence is that these do exactly the same thing: A ::= b A += $(VAR) and A ::= b A +:= $(VAR) which makes the latter seem redundant to me. The :::= operator seems wholly unnecessary. We have two types of variables and we have two assignment operators for them, which is sufficient. If there is a case to be made that putting an already-expanded value into a delayed expansion macro is useful then this: A :::= $(VAR) can be replaced by: A = A +:= $(VAR) or using the current POSIX standard with no changes: A = I ::= $(VAR) A += $I |
(0005405) mirabilos (reporter) 2021-07-10 21:26 |
On MirMake (inherited from OpenBSD make), it outputs 1. |
(0005406) joerg (reporter) 2021-07-15 14:51 edited on: 2021-07-15 14:52 |
In 37+ years of maintaining smake, I did never receive a request to implement the := behavior from GNU make and no other make variant did implement that behavior. I therefore seriously doubt that there is a need for that GNU make feature. |
(0005407) joerg (reporter) 2021-07-17 10:35 edited on: 2021-07-22 15:13 |
As a result from the last teleconference, I decided that things could only be understood, if all aspects of the behavior are tested and documented. There are four aspects with the various := implementations. Only three of them may be tested by a makefile: The first row is related to the behavior of recent bmake versions and lets you see whether $$ is "expanded" to $ at the right side of a := assignment, or whether $$ is forwarded as $$. WARNING: The observed behavior here may also be influenced from whether the make macro is expanded at use time or not, see gmake notes below. So this test is only significant while comparing different bmake versions. The second row checks whether := results in an immediate expansion of the right side before assigning the result to the macro. All make implementations behave the same here, so this test is only present for completeness. The third row checks whether += appends using immediate expansion or whether the appended text is expanded delayed at use time. This is where GNU make is incompatible with all other make implementations, as gmake behaves different with += if the macro has been initially created with :=. printf 'A = immediate\nB := $$A $A\nB += $A\nA = delayed\nall:\n\techo '\''$(B)'\''\n' | smake -s -f - prints: smake: WARNING: Nonportable ':=' assignment found for macro 'B' in line 2 col 4 of 'Standard in' delayed immediate delayed printf 'A = immediate\nB := $$A $A\nB += $A\nA = delayed\nall:\n\techo '\''$(B)'\''\n' | bmake-20150505 -s -f - prints: delayed immediate delayed printf 'A = immediate\nB := $$A $A\nB += $A\nA = delayed\nall:\n\techo '\''$(B)'\''\n' | bmake-2020-04-03 -s -f - prints: $A immediate delayed printf 'A = immediate\nB := $$A $A\nB += $A\nA = delayed\nall:\n\techo '\''$(B)'\''\n' | bmake-2021-06-21 -s -f - prints: delayed immediate delayed printf 'A = immediate\nB := $$A $A\nB += $A\nA = delayed\nall:\n\techo '\''$(B)'\''\n' | gmake -s -f - prints: $A immediate immediate What is not testable by this test but by looking at the internal values of the variable via -p is whether make macros created via := are expanded at use time. Only gmake does not expand such macros at use time. All other make implementation from above expand such macros at use time. As you see, the recent change in bmake, related to $$ expansion, does definitely not result in gmake compatibility. But the most recent bmake is by default compatible to the bmake from 2015 again and it seems that at least for the last 20 years, smake and bmake did implement identical behavior. |
(0005408) psmith (developer) 2021-07-18 03:22 |
> In 37+ years of maintaining smake, I did never receive a request to implement the := behavior from GNU make In that case we can conclude is that this difference in behavior is of little or no concern to users, since they have not requested that either version be changed to support the other. That certainly doesn't *strengthen* the argument that we need to modify the standard to provide both models. > There are four aspects with the various := implementations. I'm sorry but I didn't understand the goal of these examples. They certainly do show that the behavior of := is different among different implementations, which is no surprise (at least not to me): that's why the := operator was NOT added to the standard and ::= was added instead. If BSD make users want the BSD make behavior of :=, they have := and they can continue to use it. If they want to change it in some way, for some reason, with or without an option, again that's up to the BSD make maintainers. Why is that a discussion for the POSIX committee? This issue is proposing two NEW make operators: why should these new operators be added to the standard? The difference in behavior from the current set of available operators is obscure (as we've heard, no user has requested that either version of the behavior be changed) and there are ways to achieve the behavior these new operators provide using features available in the current POSIX standard, as shown above. I've also read through the etherpad notes from 2021-07-15 and there seems to be confusion and false information there. In particular, it is not true that GNU make is not conforming to POSIX with respect to variable expansion. If someone thinks otherwise, please provide a POSIX-conforming makefile which exhibits incorrect variable expansion behavior in GNU make. |
(0005409) geoffclare (manager) 2021-07-19 08:43 |
> As you see, the recent change in bmake, related to $$ expansion, > does definitely not result in gmake compatibility. The statement about gmake compatibility was made in the context of how $$ is expanded. Obviously it is intended to indicate only that they have made $$ handling (more) compatible, not macro expansion in general. And it certainly is more compatible in that respect, as $$$$ on the right hand side of := now ends up being expanded to $$ instead of $. |
(0005410) steffen (reporter) 2021-07-19 12:30 |
..and especially there was no > As you see, the recent change in bmake, related to $$ expansion, > does definitely not result in gmake compatibility. "recent change"; instead bmake added support for the notion, but did not make it its default, at least not in the set of makefiles that define the rules bmake uses by default in it portable incarnation. |
(0005411) joerg (reporter) 2021-07-19 13:41 edited on: 2021-07-19 14:01 |
Well, the bmake from NeBSD pkgsrc with a Changelog from April 3 2020 by default does not expand $$. Which version did you test? |
(0005412) steffen (reporter) 2021-07-19 13:55 |
I guess you were asking Geoff, but nonetheless ($PKG comes from "system"): # Description: NetBSD make program # URL: http://www.crufty.net/help/sjg/bmake.html [^] # Maintainer: Steffen Nurpmeso, steffen at sdaoden dot eu name=bmake version=20210621 release=1 source=(http://www.crufty.net/ftp/pub/sjg/${name}-${version}.tar.gz) [^] build() { cd ${name} sed -i'' -e '/cmd-interrupt$/d' -e '/var-op-shell$/d' unit-tests/Makefile mkdir -p build cd build sh ../boot-strap --with-default-sys-path=/usr/share/mk sh ../boot-strap --prefix=/usr \ --with-mksrc=/usr/share/mk \ --install-destdir="${PKG}" op=install chmod g-w "${PKG}"/usr/bin "${PKG}"/usr/share/mk rm -rf "${PKG}"/usr/share/man/cat1 mkdir "${PKG}"/usr/share/man/man1 cp ../bmake.1 "${PKG}"/usr/share/man/man1/ } |
(0005413) joerg (reporter) 2021-07-19 14:10 |
Thank you! So it seems that I should edit my Note: 0005407 that a recent bmake is fully aligned with smake again and the version 2020-04-03 was an exception. That makes things much easier... |
(0005414) geoffclare (manager) 2021-07-23 09:45 edited on: 2021-07-23 12:26 |
In yesterday's call we discussed whether, if we standardise BSD/bmake := as :::=, we would do so with or without $$ being preserved. Previously I had thought that if we went with the non-preserving behaviour, we could add some APPLICATION USAGE advising users to put $$$$ in values assigned with :::= in order to yield a single $ when expanded at use time. However, I now see that this only works for the simple case where a macro is used directly in a rule. If there are any intermediate := assignments, they each add another level of re-evaluation:$ printf 'A := $$$$$$$$\nB := $(A)\nall:\n\techo $(B)\n' | bmake -f - echo $ $ $ printf 'A := $$$$$$$$$$$$$$$$\nB := $(A)\nC := $(B)\nall:\n\techo $(C)\n' | bmake -f - echo $ $ Worse still, if there are two rules that end up using the macro via different numbers of intermediate := assignments, it is impossible to put a string of $'s in the original value that will end up as a single $ in both rules (unless a single $ in the original value wouldn't have been expanded anyway). This problem is presumably why .MAKE.SAVE_DOLLARS was added. The behaviour with it true seems greatly preferable to me, and I think the standard should require it for :::= (if we add it), although without specifying .MAKE.SAVE_DOLLARS. This would leave BSD/bmake implementors with two choices in order to conform: 1. Have :::= not be identical to :=, in that it is not affected by .MAKE.SAVE_DOLLARS but instead always preserves $$. 2. Have :::= be identical to :=, with .MAKE.SAVE_DOLLARS=true as the default (at least for makefiles that contain a .POSIX target). I would like to hear what BSD/bmake implementors and users think about this. |
(0005415) joerg (reporter) 2021-07-23 17:27 |
The bmake Changelog mentions a modification that $$ was preserved when using := starting from 2016-02-17 and the comment does not include a hint that this was related to gmake. Two days later, .MAKE.SAVE_DOLLARS was introduced and the default was set to false to achieve compatibility with older versions. Given that := did exist in smake and bmake since a longer time without that $$ exception, it is obvious that not expanding $$ is only needed in very rare corner cases. The oldest version of bsd make in the netbsd version control is from 1993 and already supports the := assignment. Smake started to support := 10 years later. |
(0005421) geoffclare (manager) 2021-07-29 08:17 edited on: 2021-07-29 08:17 |
Re: Note: 0005414 I agree that not expanding $$ is likely only needed in rare cases. However, I think the need to expand $$ is even rarer, and probably non-existent. The vast majority of uses of := work the same either way. Before the changes in 2016, the only reason anyone had to put $$$$ on the rhs of a := would be as a work-around for it being expanded twice (or more). I assume the reason the default is not to preserve $$ is because there were existing makefiles where people has used this work-around, and defaulting to preserving $$ would break them. If $$ had always been preserved, those makefiles would not have needed to use $$$$ in the first place. We should not make the same mistake with :::= |
(0005423) psmith (developer) 2021-07-29 18:07 |
Until someone can explain to me the advantage of adding Yet Another Assignment Operator to make, I'm not excited about spending effort adding it to GNU make. If there's behavior which is already implemented across all variants of make then that's obviously appropriate for standardization. If there's behavior which is used widely in makefiles, proving it has real utility for users, AND it provides behaviors which are not currently available in the standard, then that could be appropriate for standardization as well. Just because a facility _exists_ in a subset of variants of make, even if it has existed for a long time, is not by itself sufficient justification IMO. I haven't seen evidence that the difference between the behavior of POSIX ::= and BSD make := is something that users care about and that makefiles want to take advantage of, such that it warrants a new operator. I've also pointed out above that the behavior of BSD make := can be obtained in terms of the existing POSIX ::= operator (although you do need to add an extra variable to do it). |
(0005440) Don Cragun (manager) 2021-08-12 15:19 edited on: 2021-08-12 15:25 |
On page 2888 line 97001 change:macro=value to macro=value After page 2894 line 97263 add: The following form defines a delayed-expansion macro (replacing any previous definition of the macro named by string1): On page 2895 line 97310, change: The macro $$ shall be replaced by the single character '$'. to: The string "$$" shall be replaced by the single character '$', except during the immediate expansion performed for the :::= operator, where it shall be left unmodified. On page 2910 line 97956, change: Therefore, the standard developers opted to require a new operator "::=" with specific semantics; this operator has semantics closest to the GNU make implementation of ":=", where '$' occurring in the immediate expansion of string2 are not further expanded in subsequent use of the macro, and it was felt that other implementations could easily support the required semantics. to: Therefore, the standard developers opted to require two new operators, "::=" and ":::=", with specific semantics; the "::=" operator has semantics closest to the GNU make implementation of ":=", where '$' occurring in the immediate expansion of string2 are not further expanded in subsequent use of the macro, and the ":::=" operator has semantics closest to the BSD make and smake implementations of ":=", where immediate expansion is performed when assigning to a delayed-expansion macro and "$$" is preserved. It was felt that other implementations could easily support the required semantics. |
Issue History | |||
Date Modified | Username | Field | Change |
2021-05-16 12:15 | joerg | New Issue | |
2021-05-16 12:15 | joerg | Name | => Jörg Schilling |
2021-05-16 12:15 | joerg | Section | => make |
2021-05-16 12:15 | joerg | Page Number | => 2888- |
2021-05-16 12:15 | joerg | Line Number | => 97001- |
2021-05-16 14:35 | shware_systems | Note Added: 0005356 | |
2021-05-16 17:18 | psmith | Note Added: 0005357 | |
2021-05-16 19:02 | shware_systems | Note Added: 0005358 | |
2021-05-16 19:12 | kre | Note Added: 0005359 | |
2021-05-16 19:49 | shware_systems | Note Added: 0005360 | |
2021-05-16 21:26 | joerg | Note Added: 0005361 | |
2021-05-16 21:27 | joerg | Note Edited: 0005361 | |
2021-05-22 19:02 | psmith | Note Added: 0005363 | |
2021-07-08 16:43 | geoffclare | Note Added: 0005393 | |
2021-07-08 16:57 | hvd | Note Added: 0005394 | |
2021-07-08 19:30 | steffen | Note Added: 0005395 | |
2021-07-08 19:32 | steffen | Note Added: 0005396 | |
2021-07-08 20:01 | kre | Note Added: 0005397 | |
2021-07-08 20:21 | steffen | Note Added: 0005398 | |
2021-07-08 20:34 | steffen | Note Added: 0005399 | |
2021-07-08 21:15 | kre | Note Added: 0005400 | |
2021-07-08 22:33 | steffen | Note Added: 0005401 | |
2021-07-08 22:33 | steffen | Note Added: 0005402 | |
2021-07-10 12:30 | joerg | Note Added: 0005403 | |
2021-07-10 18:03 | psmith | Note Added: 0005404 | |
2021-07-10 21:26 | mirabilos | Note Added: 0005405 | |
2021-07-15 14:51 | joerg | Note Added: 0005406 | |
2021-07-15 14:52 | joerg | Note Edited: 0005406 | |
2021-07-17 10:35 | joerg | Note Added: 0005407 | |
2021-07-18 03:22 | psmith | Note Added: 0005408 | |
2021-07-19 08:43 | geoffclare | Note Added: 0005409 | |
2021-07-19 12:30 | steffen | Note Added: 0005410 | |
2021-07-19 13:41 | joerg | Note Added: 0005411 | |
2021-07-19 13:55 | steffen | Note Added: 0005412 | |
2021-07-19 14:01 | joerg | Note Edited: 0005411 | |
2021-07-19 14:10 | joerg | Note Added: 0005413 | |
2021-07-19 14:19 | joerg | Note Edited: 0005407 | |
2021-07-22 15:13 | joerg | Note Edited: 0005407 | |
2021-07-23 09:45 | geoffclare | Note Added: 0005414 | |
2021-07-23 12:26 | geoffclare | Note Edited: 0005414 | |
2021-07-23 17:27 | joerg | Note Added: 0005415 | |
2021-07-29 08:17 | geoffclare | Note Added: 0005421 | |
2021-07-29 08:17 | geoffclare | Note Edited: 0005421 | |
2021-07-29 18:07 | psmith | Note Added: 0005423 | |
2021-08-12 15:19 | Don Cragun | Note Added: 0005440 | |
2021-08-12 15:20 | Don Cragun | Final Accepted Text | => See Note: 0005440. |
2021-08-12 15:20 | Don Cragun | Status | New => Resolved |
2021-08-12 15:20 | Don Cragun | Resolution | Open => Accepted As Marked |
2021-08-12 15:20 | Don Cragun | Tag Attached: issue8 | |
2021-08-12 15:23 | Don Cragun | Note Edited: 0005440 | |
2021-08-12 15:25 | Don Cragun | Note Edited: 0005440 | |
2021-08-16 11:13 | geoffclare | Status | Resolved => Applied |
2021-08-19 11:05 | geoffclare | Relationship added | related to 0001513 |
2024-06-11 09:12 | agadmin | Status | Applied => Closed |
Mantis 1.1.6[^] Copyright © 2000 - 2008 Mantis Group |