Project

General

Profile

Actions

Misc #18756

closed

make V=1 or Q= for verbose?

Added by jaruga (Jun Aruga) about 2 years ago. Updated about 2 years ago.

Status:
Closed
Assignee:
-
[ruby-core:108414]

Description

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 <file path> 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_q.log jaruga (Jun Aruga), 04/28/2022 03:44 PM
make_v1.log (440 KB) make_v1.log jaruga (Jun Aruga), 04/28/2022 03:44 PM
make_main_o_q_debug.log (1001 Bytes) make_main_o_q_debug.log jaruga (Jun Aruga), 05/02/2022 05:57 PM
make_main_o_v1_debug.log (976 Bytes) make_main_o_v1_debug.log jaruga (Jun Aruga), 05/02/2022 05:57 PM

Updated by jaruga (Jun Aruga) about 2 years ago

I would attach the log files.

Oh I couldn't upload the log files due to "Internal Server Error" on Redmine..

Updated by jaruga (Jun Aruga) about 2 years ago

Oh I couldn't upload the log files due to "Internal Server Error" on Redmine..

I uploaded the log files now, as the internal server error issue above was fixed.

Updated by jaruga (Jun Aruga) about 2 years ago

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://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.

Updated by jaruga (Jun Aruga) about 2 years ago

  • Status changed from Closed to Feedback

So, my conclusion is the current logic for V and Q is intentional. And I would close this ticket.

Sorry for confusion. I changed my mind. I want to make V=1 print the logs like current Q=, because I think when users set make V=1, they expect verbose.

Updated by nobu (Nobuyoshi Nakada) about 2 years ago

Do not use Q=.
Q, Q1 and V1 are intermediate variables.
You may want to set ECHO0=echo unconditionally.

Updated by jaruga (Jun Aruga) about 2 years ago

  • Status changed from Feedback to Closed

nobu (Nobuyoshi Nakada) wrote in #note-7:

Do not use Q=.
Q, Q1 and V1 are intermediate variables.
You may want to set ECHO0=echo unconditionally.

Thanks for the info. I see a little bit difference of printed logs between make Q=, make install Q= and make V=1 ECHO0=echo and make install V=1 ECHO0=echo. But that's fine with me. I will use the V=1 ECHO0=echo.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0