On Tue, 11 Apr 2017 03:29:25 +0700
"Vadim A. Misbakh-Soloviov" <gen...@mva.name> wrote:

> The purpose of TARGETS is that package holds only that TARGETs that it was 
> tested to work against

Targets are more than that.

Targets also regulate compilation stage for concurrency.

For instance:

If you have 2 pythons.

Imagine you have no TARGETS


  X depends on Y

Now, X and Y both compile against both pythons.

But you installed your packages like this:


python 2.7
Y 
python 3.5
X

Thus, when "Y" was installed, only python 2.7 could be an installation 
candidate,
so it only installed against python 2.7

But now, "X" will compile against both python 2.7 and python 3.5, but 
horrors!...

Python 3.5 doesn't have Y! 

Portage has no way of knowing this.

introduce targets.

install python 2.7
install Y with TARGETS='python2.7'
install python 3.5
install X with TARGETS='python2.7'  # no problem, because it doesn't try to 
compile against 3.5

But then you decide you wanted python 3.5 support after all

TARGETS="python3.5"

Install X

X[python3.5] requires Y[python3.5] 

Portage recognizes Y doesn't have python3.5 , and forces the useflag change and 
a recompile before installing X with python3.5

THIS IS WHY WE HAVE THIS.

The only reason this is "hell" is because users end up having to flip those 
toggles or set them globally, instead of portage intelligently
auto-setting them on an as-needed basis.

In essence, users have to micro-manage every portage decision, even though 
portage is making the decisions and the user is just bitching and rubber 
stamping it ;) 



Attachment: pgpfuaHBaWKOj.pgp
Description: OpenPGP digital signature

Reply via email to