porter's handbook documentation on avoiding != variable
assignments
Kris Kennaway
kris at FreeBSD.org
Sun Jul 20 10:49:32 UTC 2008
Matthew Seaman wrote:
> Kris Kennaway wrote:
>> Can someone add to the PH a version of the advice below? It might
>> need to be fleshed out a bit to provide more context.
>>
>> Kris
>>
>>> Variable assignments with != are bad! Try as hard as you can to
>>> avoid using them -- especially in Mk/*! Every time something
>>> processes your makefile it will spawn a command, even if it is not
>>> relevant for the operation being performed. If you need to run shell
>>> commands, try to isolate them within a makefile target. You can
>>> avoid code duplication by assigning the *shell commands* (not their
>>> output) to a variable and inserting it into your code block.
>>>
>>> e.g. instead of
>>>
>>> --
>>> VARIABLE!= do some shell stuff; do some other stuff
>>>
>>> target:
>>> echo ${VARIABLE}
>>> --
>>>
>>> do this (or similar):
>>>
>>> --
>>> VARIABLE_CMDS= do some shell stuff; do some other stuff
>>>
>>> target:
>>> echo $$(${VARIABLE_CMDS})
>>> --
>>>
>>> This defers the command execution to the point where the target runs,
>>> so in the case when the target is *not* run (e.g. during INDEX builds or
>>> other recursive port traversals), then you avoid wasting one or more
>>> process executions.
>
> Would it be acceptable to use something like:
>
> .if !defined(BUILDING_INDEX)
> VARIABLE!= something or other
> .endif
>
> or
> .if !make(describe)
> VARIABLE!= whatever
> .endif
No because that only avoids one particular case, not the default case :)
Kris
More information about the freebsd-ports
mailing list