On 2018-03-26 13:48, Masahiro Yamada wrote: > 2018-03-26 8:09 GMT+09:00 Rasmus Villemoes <linux@xxxxxxxxxxxxxxxxxx>: >> The latest official Make release is 4.2.1 from mid-2016, but the current >> git release has this relevant note in the NEWS file: >> >> * WARNING: Backward-incompatibility! >> Number signs (#) appearing inside a macro reference or function invocation >> no longer introduce comments and should not be escaped with backslashes: >> thus a call such as: >> foo := $(shell echo '#') >> is legal. Previously the number sign needed to be escaped, for example: >> foo := $(shell echo '\#') >> Now this latter will resolve to "\#". If you want to write makefiles >> portable to both versions, assign the number sign to a variable: >> C := \# >> foo := $(shell echo '$C') >> This was claimed to be fixed in 3.81, but wasn't, for some reason. >> To detect this change search for 'nocomment' in the .FEATURES variable. >> >> Prepare for whatever future Make release contains that change by fixing >> up the .cmd file escaping - without this, make always thinks the command >> string has changed and hence rebuilds everything. >> >> Signed-off-by: Rasmus Villemoes <linux@xxxxxxxxxxxxxxxxxx> >> --- >> So the previous patch made everything build, but building again >> revealed that this central place very much also needed fixing. >> >> scripts/Kbuild.include | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include >> index 065324a8046f..7a926e4688f4 100644 >> --- a/scripts/Kbuild.include >> +++ b/scripts/Kbuild.include >> @@ -10,6 +10,7 @@ space := $(empty) $(empty) >> space_escape := _-_SPACE_-_ >> right_paren := ) >> left_paren := ( >> +pound := \# >> >> ### >> # Name of target with a '.' as filename prefix. foo/bar.o => foo/.bar.o >> @@ -328,7 +329,7 @@ endif >> # (needed for make) >> # Replace >'< with >'\''< to be able to enclose the whole string in '...' >> # (needed for the shell) >> -make-cmd = $(call escsq,$(subst \#,\\\#,$(subst $$,$$$$,$(cmd_$(1))))) >> +make-cmd = $(call escsq,$(subst $(pound),\\$(pound),$(subst $$,$$$$,$(cmd_$(1))))) >> > > Thanks for the patch, but this changes the behavior. > With '#' replaced with $(pound), '\\' does not escape anything, > so it is treated as '\\'. > > > The following keeps the current behavior: > > make-cmd = $(call escsq,$(subst $(pound),\$(pound),$(subst > $$,$$$$,$(cmd_$(1))))) > > > > But, I think the following is an even better fix: > > make-cmd = $(call escsq,$(subst $(pound),$$(pound),$(subst > $$,$$$$,$(cmd_$(1))))) Makefile quoting has never been my strong suit. I actually thought I tested my change by looking at some .o.cmd files containing \# before and after, but I was fooled by tools/ containing and using their own copy of make-cmd - so tools/build/Build.include will also need fixing. Yes, writing $(pound) to the .cmd file seems like the safest choice. Do you want me to respin or can/will you do the patch(es) yourself? Rasmus -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html