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