From 7f78bc42cbbc6399d4baca21b49a3ac43edf638d Mon Sep 17 00:00:00 2001 From: Daniel Colascione Date: Sun, 21 Jun 2020 17:40:25 -0700 Subject: Makefile: Fix regression in .SILENT rule Since commit d74e651b78 (Makefiles: Re-implement makefile target path escaping and quoting, 2020-04-10, v3.18.0-rc1~334^2~1), `WriteMakeRule` now correctly escapes `$` in make target paths as `$$`. However, this caused an existing call site to escape the `$(VERBOSE)` variable reference in the `.SILENT` prefix, making it ineffective. Sub-makefiles are invoked with `MAKESILENT`, so this bug matters only for the `all` target, which emits progress messages from toplevel. Before: # Suppress display of executed commands. $$(VERBOSE).SILENT: After: # Suppress display of executed commands. $(VERBOSE).SILENT: --- Source/cmLocalUnixMakefileGenerator3.cxx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index 4545a8e..de1461a 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -713,9 +713,10 @@ void cmLocalUnixMakefileGenerator3::WriteSpecialTargetsTop( // "VERBOSE=1" to be added as a make variable which will change the // name of this special target. This gives a make-time choice to // the user. - this->WriteMakeRule(makefileStream, - "Suppress display of executed commands.", - "$(VERBOSE).SILENT", no_depends, no_commands, false); + // Write directly to the stream since WriteMakeRule escapes '$'. + makefileStream << "#Suppress display of executed commands.\n" + "$(VERBOSE).SILENT:\n" + "\n"; } // Work-around for makes that drop rules that have no dependencies -- cgit v0.12