[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 7/6] Makefile: Make Makefile depend on generated qga files, t
From: |
Markus Armbruster |
Subject: |
Re: [PATCH 7/6] Makefile: Make Makefile depend on generated qga files, too |
Date: |
Wed, 04 Dec 2019 07:56:45 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) |
Eric Blake <address@hidden> writes:
> On 11/29/19 3:59 AM, Markus Armbruster wrote:
>> Generated .h need to be generated before compiling any .c using them.
>> To know which .h a .c uses, we need to compile it.
>>
>> Since commit 4115852bb0 "build: do not sprinkle around
>> GENERATED_HEADERS dependencies", we break this circular dependency the
>> simple & stupid way: the generated headers are a prerequisite of
>> Makefile, which causes Make to generate them first, then start over.
>
> which is a pain when using 'make --dry-run' to see what would get
> built (a dependency of Makefile _is_ rebuilt if Makefile itself has to
> be updated), but not the fault of this patch.
Yes.
>> Except for qga we still use the older method of making all its .o
>> summarily depend on all its generated .h (commit 016c77ad62 "Makefile:
>> add missing deps on $(GENERATED_HEADERS)").
>>
>> Add qga's generated files to generated-files-y to get rid of this
>> exception.
>>
>> Signed-off-by: Markus Armbruster <address@hidden>
>> ---
>> Makefile | 21 +++++++++++----------
>> 1 file changed, 11 insertions(+), 10 deletions(-)
>
> Reviewed-by: Eric Blake <address@hidden>
Thanks!
>> +++ b/Makefile
>> @@ -130,6 +130,15 @@ GENERATED_QAPI_FILES += qapi/qapi-doc.texi
>> generated-files-y += $(GENERATED_QAPI_FILES)
>> +GENERATED_QGA_FILES := qga-qapi-types.c qga-qapi-types.h
>> +GENERATED_QGA_FILES += qga-qapi-visit.c qga-qapi-visit.h
>> +GENERATED_QGA_FILES += qga-qapi-commands.h qga-qapi-commands.c
>> +GENERATED_QGA_FILES += qga-qapi-init-commands.h qga-qapi-init-commands.c
>> +GENERATED_QGA_FILES += qga-qapi-doc.texi
>> +GENERATED_QGA_FILES := $(addprefix qga/qapi-generated/,
>> $(GENERATED_QGA_FILES))
>
> Would it be worth using two separate variable names (maybe
> GENERATED_QGA_BASEFILES for the first list) rather than exploiting the
> arcane knowledge that consecutive use of := causes GNU make to rewrite
> an existing variable with new contents?
Our rules.mak relies on this already. It's full of magic, which
admittedly diminishes its suitability to serve as a good example.
Your worry might be rooted in old "=" burns. "=" makes the variable
recursively expanded, and
GENERATED_QGA_FILES = $(addprefix qga/qapi-generated/,
$(GENERATED_QGA_FILES))
would be an infinite loop. ":=" makes it simply expanded; there's not
even a loop, let alone an infinite one. The GNU Make manual explains
this clearly at
https://www.gnu.org/software/make/manual/html_node/Flavors.html
Aside: there's a reason one of the two flavors is called "simple". It
could additionally be called "not as slow". One of my pet makefile
peeves: unthinking use of recursively expanded variables, complicating
semantics and slowing down builds.
Back to this patch. I had started to write the thing in longhand, but
got tired of repeating qga/qapi-generated/, so I factored that out.
Would longhand be easier to understand?