URL:
<
https://savannah.gnu.org/bugs/?60036>
Summary: Incorrect MAKEFLAGS after $(shell) function call
Project: make
Submitted by: None
Submitted on: Ср 10 фев 2021 19:33:22
Severity: 3 - Normal
Item Group: Bug
Status: None
Privacy: Public
Assigned to: None
Open/Closed: Open
Discussion Lock: Any
Component Version: 4.3
Operating System: MS Windows
Fixed Release: None
Triage Status: None
_______________________________________________________
Details:
After recursive make call if top-level Makefile set -Otarget and sub-make has
$(shell) function call then MAKEFLAGS exposes all internal values hidden from
user (-j and --jobserver-auth for example). It leads to false warning message
as if -j option specified in Makefile.
It happens because $(shell) function handler invokes define_makeflags(1, 0):
1. define_makeflags()
2. prepare_mutex_handle_string()
3. sync_init()
4. setup_tmpfile()
5. output_start()
6. func_shell_base()
Looks like MAKEFLAGS variable takes its full contents too early. I'm not
familiar with make internals but does it really necessary to do output_start()
in func_shell_base()?
Example Makefile:
start_time := $(shell echo %time%)
MAKEFLAGS += --no-print-directory
MAKEFLAGS += --output-sync=target
.PHONY: all
all:
$(MAKE) build-$@
.PHONY: build-all
build-all:
@echo $@
Output of 'make -j8':
make build-all
make[1]: warning: -j8 forced in makefile: resetting jobserver mode.
build-all
_______________________________________________________
Reply to this item at:
<
https://savannah.gnu.org/bugs/?60036>
_______________________________________________
Сообщение отправлено по Savannah
https://savannah.gnu.org/