Re: Why no flavor_USES helper?

From: Mel Pilgrim <list_freebsd_at_bluerosetech.com>
Date: Mon, 06 Sep 2021 15:14:42 UTC
On 2021-09-06 6:40, Baptiste Daroussin wrote:
> On Mon, Sep 06, 2021 at 06:33:29AM -0700, Mel Pilgrim wrote:
>> On 2021-09-06 1:16, Baptiste Daroussin wrote:
>>> On Sun, Sep 05, 2021 at 10:39:29AM -0700, Mel Pilgrim wrote:
>>>> The flavors helpers like flavor_RUN_DEPENDS are super useful, but I need to
>>>> modify USES based on flavor, and find that there is no helper for it.
>>>
>>> Besause USES are loader 100 lines earlier, meaning only USES are already
>>> processed when we expand the helper.
>>>
>>> Without getting to far in the technical details, USES and FLAVORS are basically
>>> expanded at the moment, in pre and post section, meaning one had to decide
>>> either we should allow USES to define flavors, or we should allow USES helpers.
>>
>> Is this why there odd race conditions between USES and FLAVORS where, for
>> example, if I have a FLAVOR that does USES+=pgsql and WANT_PGSQL, the
>> corresponding postgresqlN-* ports aren't added to *_DEPENDS?
> 
> I don't know, neither heard of that specific case, but it could be, if so, that
> sound like a bug in pgsql.mk, I am interesting in an example that show this
> behaviour.

I use an overlay with poudriere as part of a deployment system.  Part of 
it is ports-mgmt/superpkg, which uses FLAVORS to represent different 
server profiles.  It's mostly a series of lines like this:

.if ${FLAVOR} == mognet
USES+= ds hwtools hyve mailbox mx ns webbase zfstools

Which in turn references Mk/Uses files in the overlay. The one where I 
hit this apparent race condition is Mk/Uses/mailbox.mk which adds 
PostgreSQL server and contrib RUN_DEPENDS with these lines:

USES+=      pgsql phpenv
WANT_PGSQL= contrib server

.include "${PORTSDIR}/Mk/Uses/pgsql.mk"

Without that .include line, the postgres RUN_DEPENDS don't get added.

It's something specific to pgsql.mk.  The phpenv.mk file, a php analog 
to python:env, gets included from this file.  In another overlaid USES 
file, I have USES+=python:env and that also works fine.