From: "Michał Górny" <mgorny@gentoo.org>
To: gentoo-dev@lists.gentoo.org
Subject: Re: [gentoo-dev] [RFC] Forced/automatic USE flag constraints (codename: ENFORCED_USE)
Date: Wed, 31 May 2017 21:02:24 +0200 [thread overview]
Message-ID: <1496257344.25758.1.camel@gentoo.org> (raw)
In-Reply-To: <20170531193922.477245bb@gentoo.org>
[-- Attachment #1: Type: text/plain, Size: 4023 bytes --]
On śro, 2017-05-31 at 19:39 +0200, Alexis Ballier wrote:
> > > Again, you *need* to process the constraints in order. '!a?
> > > ( b ) !b? ( a )' is not deterministic when none of a and b are
> > > enabled otherwise.
> >
> > You can't rely on any particular order of constraints, especially when
> > eclass stacking comes into play. You could try defining some
> > constraint- sorting algorithm but it's going to be complex and it's
> > usefulness will be limited anyway due to various kinds of grouping.
>
>
> Better have some order: If half of the above constraint comes from
> ebuild and the other half comes from eclass, then PM might toggle 'a' or
> 'b' depending on the phase of the moon which is specifically what we're
> trying to avoid.
No, it can't. That's the whole point. The algorithm must be defined so
that it is always predictable independently of order (maybe except
the ordering inside ^^, ||, ??) and independently of how it's nested
(i.e. 'a? ( b? ( c ) )' must give the same result as 'b? ( a? ( c ) )').
If you start relying on stuff like ordering, you're one step from making
stuff suddenly fail or change meaning due to minor changes, like sorting
stuff.
> eclass stacking is not a problem: specify if it's append or prepend and
> be done.
What about multiple inherits with guards? Next thing I know, we end up
putting REQUIRED_USE outside guards (like we have to do with
EXPORT_FUNCTIONS now) because you need a specific order, and guards make
it unpredictable.
> Note that if you want to remove the need for an order, you'll need to
> ensure that all orderings of the constraints give the same result. It's
> not sufficient to "only" check all possible inputs.
That's the matter of the algorithm.
> Also, what happens if we applied all the constraints and obtained some
> useflags setting that still fails REQUIRED_USE check ?
It can't happen. If you can apply all the constraints, then implicitly
REQUIRED_USE is satisfied. If you can't apply all the constraints, then
it just fails. Of course, we want to ultimately avoid that case.
> > The point would be: by definition, the solver should be able to touch
> > *any* USE flag. If it can't, it mostly implies that you can't use
> > the automatic solver, and so the case is irrelevant for checking.
> > Attempting to go beyond that is going to give a lot of complexity
> > and most likely kill the whole idea.
> >
> > One thing we need to worry about are masks. We need to think about
> > them.
>
> It makes zero difference for any solver if you replace variables
> (useflags) by 'true' or 'false' constants (masked/forced/user-forced
> useflags). It's even simpler actually. Whether the formula is not
> constantly 'true' (ie REQUIRED_USE is useless) or constantly
> 'false' (ie there's no way to solve it) is equivalent to solving SAT.
> We likely don't want that for repoman running on php.
>
Well, probably yes. We just need to make sure to apply them correctly
in different contexts, to avoid accidentally skipping some constraints.
I think it would be reasonably to assume that:
a. flags masked/forced on LHS of implications (foo?) are evaluated
in place, i.e. either always require RHS or remove it completely:
foo? ( bar ) -> with foo forced, bar is always required
=> we should also force bar
b. flags masked/forced inside ^^, ??, || alter the contents/meaning --
in particular they might replace the whole construct with a single flag
or make it unsolvable:
^^ ( foo bar baz ) -> with foo forced, [bar baz] are never allowed
=> we should mask them
|| ( foo bar baz ) -> with foo forced, the constraint can be skipped
c. flags masked/forced otherwise can't be altered:
foo? ( bar ) -> with bar forced, we can skip the constraint.
-> with bar masked, foo should be masked as well
Does that cover all the contexts?
--
Best regards,
Michał Górny
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 988 bytes --]
next prev parent reply other threads:[~2017-05-31 19:02 UTC|newest]
Thread overview: 111+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-29 15:33 [gentoo-dev] [RFC] Forced/automatic USE flag constraints (codename: ENFORCED_USE) Michał Górny
2017-05-29 16:30 ` Kent Fredric
2017-05-29 16:44 ` Michał Górny
2017-05-29 18:00 ` Alexis Ballier
2017-05-29 21:23 ` Michał Górny
2017-05-29 21:31 ` Ciaran McCreesh
2017-05-29 22:01 ` Ulrich Mueller
2017-05-29 22:05 ` Ciaran McCreesh
2017-05-30 7:47 ` Alexis Ballier
2017-05-30 8:05 ` Ulrich Mueller
2017-05-30 8:10 ` Alexis Ballier
2017-05-30 7:42 ` Alexis Ballier
2017-05-30 8:22 ` Ciaran McCreesh
2017-05-30 8:46 ` Alexis Ballier
2017-05-30 8:56 ` Ciaran McCreesh
2017-05-30 9:25 ` Alexis Ballier
2017-05-30 12:00 ` Ulrich Mueller
2017-05-30 14:33 ` Michał Górny
2017-05-30 15:33 ` Alexis Ballier
2017-05-30 18:11 ` Michał Górny
2017-05-30 18:46 ` Alexis Ballier
2017-05-31 6:55 ` Michał Górny
2017-05-31 7:24 ` Ciaran McCreesh
2017-05-31 7:34 ` Alexis Ballier
2017-05-31 7:35 ` Michał Górny
2017-05-31 7:51 ` Ciaran McCreesh
2017-05-31 7:54 ` Alexis Ballier
2017-05-31 7:56 ` Alexis Ballier
2017-05-31 7:32 ` Alexis Ballier
2017-05-31 8:03 ` Michał Górny
2017-05-31 8:38 ` Alexis Ballier
2017-05-31 13:04 ` Michał Górny
2017-05-31 17:39 ` Alexis Ballier
2017-05-31 19:02 ` Michał Górny [this message]
2017-05-31 22:52 ` Ciaran McCreesh
2017-06-01 8:55 ` Alexis Ballier
2017-06-01 21:31 ` Michał Górny
2017-06-02 6:37 ` Michał Górny
2017-06-02 11:18 ` Alexis Ballier
2017-06-02 13:49 ` Michał Górny
2017-06-02 11:27 ` Alexis Ballier
2017-06-02 13:55 ` Michał Górny
2017-06-02 15:09 ` [gentoo-dev] " Martin Vaeth
2017-06-03 11:00 ` [gentoo-dev] " Alexis Ballier
2017-06-03 15:33 ` Michał Górny
2017-06-03 16:58 ` Alexis Ballier
2017-06-04 8:59 ` Alexis Ballier
2017-06-05 7:55 ` Alexis Ballier
2017-06-05 14:10 ` Michał Górny
2017-06-05 17:24 ` Alexis Ballier
2017-06-05 18:10 ` Michał Górny
2017-06-05 18:15 ` Ciaran McCreesh
2017-06-06 12:08 ` Alexis Ballier
2017-06-06 17:39 ` Michał Górny
2017-06-07 6:49 ` Michał Górny
2017-06-07 8:17 ` Alexis Ballier
2017-06-07 9:27 ` Michał Górny
2017-06-07 9:56 ` Alexis Ballier
2017-06-09 9:19 ` Michał Górny
2017-06-09 11:41 ` Alexis Ballier
2017-06-09 12:54 ` Michał Górny
2017-06-09 14:16 ` Alexis Ballier
2017-06-09 16:21 ` Michał Górny
2017-06-11 16:05 ` Alexis Ballier
2017-06-12 9:08 ` Alexis Ballier
2017-06-12 19:17 ` Michał Górny
2017-06-13 10:27 ` Alexis Ballier
2017-06-13 22:13 ` Michał Górny
2017-06-14 9:06 ` Alexis Ballier
2017-06-14 12:24 ` Michał Górny
2017-06-14 13:16 ` Alexis Ballier
2017-06-14 13:57 ` Michał Górny
2017-06-14 14:09 ` Alexis Ballier
2017-06-15 15:59 ` Michał Górny
2017-06-15 16:07 ` Alexis Ballier
2017-06-15 16:13 ` Ciaran McCreesh
2017-06-15 16:19 ` Alexis Ballier
2017-06-15 16:22 ` Ciaran McCreesh
2017-06-15 16:30 ` Alexis Ballier
2017-06-15 16:32 ` Ciaran McCreesh
2017-06-15 16:37 ` Alexis Ballier
2017-06-15 16:45 ` Ciaran McCreesh
2017-06-15 16:55 ` Alexis Ballier
2017-06-15 17:04 ` Ciaran McCreesh
2017-06-15 17:30 ` Alexis Ballier
2017-06-15 17:48 ` Ciaran McCreesh
2017-06-15 18:09 ` Alexis Ballier
2017-06-15 17:38 ` Michał Górny
2017-06-15 18:05 ` Alexis Ballier
2017-06-14 14:28 ` Alexis Ballier
2017-06-02 12:16 ` Alexis Ballier
2017-06-02 13:57 ` Michał Górny
2017-06-02 14:56 ` [gentoo-dev] " Martin Vaeth
2017-06-02 15:19 ` Ciaran McCreesh
2017-06-02 16:26 ` Martin Vaeth
2017-06-02 18:31 ` Martin Vaeth
2017-06-02 1:17 ` [gentoo-dev] " A. Wilcox
2017-06-02 1:28 ` Rich Freeman
2017-06-02 1:33 ` A. Wilcox
2017-06-02 5:08 ` Michał Górny
2017-05-31 12:38 ` [gentoo-dev] " Duncan
2017-05-30 21:13 ` [gentoo-dev] " Kent Fredric
2017-05-30 8:29 ` Michał Górny
2017-05-30 9:34 ` Alexis Ballier
2017-05-30 14:12 ` Michał Górny
2017-05-29 19:24 ` Ciaran McCreesh
2017-05-29 19:42 ` Michał Górny
2017-05-29 19:44 ` Ciaran McCreesh
2017-06-05 8:26 ` Alexis Ballier
2017-06-09 12:35 ` Jason A. Donenfeld
2017-06-09 12:42 ` Michał Górny
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1496257344.25758.1.camel@gentoo.org \
--to=mgorny@gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox