From: "jaruga (Jun Aruga)" Date: 2022-05-02T17:57:28+00:00 Subject: [ruby-core:108457] [Ruby master Misc#18756] make V=1 or Q= for verbose? Issue #18756 has been updated by jaruga (Jun Aruga). Status changed from Open to Closed File make_main_o_v1_debug.log added File make_main_o_q_debug.log added To simplify the difference, I tested only running the target `$(MAINOBJ)` in `uncommon.mk`, adding the debug log below in `uncommon.mk`. ``` $(MAINOBJ): $(srcdir)/$(MAINSRC) @echo "n: $(n)" @echo "V: $(V)" @echo "Q: $(Q)" @echo "ECHO1: $(ECHO1)" @echo "ECHO0: $(ECHO0)" @echo "ECHO: $(ECHO)" $(ECHO) compiling $(srcdir)/$(MAINSRC) $(Q) $(CC) $(MAINCPPFLAGS) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(srcdir)/$(MAINSRC) ``` I executed as follows. ``` git clean -fdx autoconf ./configure ``` In the case of `Q=`, the `compiling ./main.c` is printed. ``` rm main.o make Q= main.o 2>&1 | tee make_main_o_q_debug.log n: : V: 0 Q: ECHO1: 0 ECHO0: echo ECHO: @echo compiling ./main.c gcc -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Werror=deprecated-declarations -Werror=div-by-zero -Werror=duplicated-cond -Werror=implicit-function-declaration -Werror=implicit-int -Werror=misleading-indentation -Werror=pointer-arith -Werror=write-strings -Werror=old-style-definition -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Werror=undef -std=gnu99 -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -DRUBY_DEVEL=1 -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -fPIE -I. -I.ext/include/x86_64-linux -I./include -I. -I./enc/unicode/14.0.0 -o main.o -c ./main.c ``` In the case of `V=1`, the `compiling ./main.c` is not printed. ``` rm main.o make V=1 main.o 2>&1 | tee make_main_o_v1_debug.log n: : V: 1 Q: ECHO1: : ECHO0: : ECHO: @: gcc -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Werror=deprecated-declarations -Werror=div-by-zero -Werror=duplicated-cond -Werror=implicit-function-declaration -Werror=implicit-int -Werror=misleading-indentation -Werror=pointer-arith -Werror=write-strings -Werror=old-style-definition -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Werror=undef -std=gnu99 -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -DRUBY_DEVEL=1 -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -fPIE -I. -I.ext/include/x86_64-linux -I./include -I. -I./enc/unicode/14.0.0 -o main.o -c ./main.c ``` The difference comes from the `ECHO1` setting in `Makefile.in`. In my assumption on the line, if `V` equals `1` the `ECHO1` is set as `$n` (= `:`), otherwise `ECHO1` is set as the value of `V`. I couldn't find the this syntax in the [GNU make official document](https://www.gnu.org/software/make/manual/make.html). https://github.com/ruby/ruby/blob/049303eff39d654f198b441e8e5f0f5b75a25e74/template/Makefile.in#L9 ``` ECHO1 = $(V:1=$n) ``` So, my conclusion is the current logic for `V` and `Q` is intentional. And I would close this ticket. ---------------------------------------- Misc #18756: make V=1 or Q= for verbose? https://bugs.ruby-lang.org/issues/18756#change-97495 * Author: jaruga (Jun Aruga) * Status: Closed * Priority: Normal ---------------------------------------- This is a question about `make V=1` and `make Q=`. Seeing the code, it seems `make V=1` is for a kind of official use rather than `make Q=`. https://github.com/ruby/ruby/blob/0bab4c4addef3421f8ff1c45564f4a392b860f15/common.mk#L9-L15 However when I tested how to log between `make V=1` and `make Q=` on the latest master `0bab4c4addef3421f8ff1c45564f4a392b860f15`. Against my expectation, the result was that the `Q=` printed more log than `V=1`. I would attach the log files. Is it intentional? ``` autoconf ./configure make Q= 2>&1 | tee make_q.log ``` ``` autoconf ./configure make V=1 2>&1 | tee make_v1.log ``` ``` $ diff make_q.log make_v1.log | head -10 19d18 < compiling ./main.c 21d19 < compiling dmydln.c 23d20 < generating id.h 27d23 < generating miniprelude.c 31d26 < compiling miniinit.c ``` I am trying to find which part prints the `...ing ` lines to the log. The lines below might be clue. But I am not sure about it so far due to my limitation of understanding `Makefile` syntax. https://github.com/ruby/ruby/blob/0bab4c4addef3421f8ff1c45564f4a392b860f15/template/Makefile.in#L9 ``` ECHO1 = $(V:1=$n) ``` https://github.com/ruby/ruby/blob/0bab4c4addef3421f8ff1c45564f4a392b860f15/template/exts.mk.tmpl#L6 ``` ECHO1 = $(V:1=$n) ECHO = $(ECHO1:0=@echo) ``` ---Files-------------------------------- make_q.log (442 KB) make_v1.log (440 KB) make_main_o_q_debug.log (1001 Bytes) make_main_o_v1_debug.log (976 Bytes) -- https://bugs.ruby-lang.org/ Unsubscribe: