[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
Re: [PATCH 7/6] Makefile: Make Makefile depend on generated qga files, too
Wed, 04 Dec 2019 14:19:14 +0100
Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux)
Eric Blake <address@hidden> writes:
> On 12/4/19 12:56 AM, Markus Armbruster wrote:
>>>> +++ 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/,
>>> 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/,
> Indeed, but I have to refer to the manual to remind myself of whether
> = or := is what I want in a given situation.
Trust me, you're either sure you want "=", or you want ":=".
On a green field, I recommend a hard rule "no = without a comment
>> 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
>> 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?
> It's more verbose. My suggestion was more:
> GENERATED_QGA_BASENAMES := qga-qapi-types.c qga-qapi-types.h
> GENERATED_QGA_BASENAMES += qga-qapi-visit.c qga-qapi-visit.h
> GENERATED_QGA_FILES := $(addprefix qga/qapi-generated/,
> to avoid the reassignment-to-self issue altogether, while still
> remaining concise compared to longhand.
Either way, we use multiple assignments to build GENERATED_QGA_FILES.
The only difference is that the version using two variables would also
work with recursive expansion, due to the magic of +=.