On Wed, 03 Feb 2016 23:52:08 +0100, Bo Ørsted Andresen wrote:

<snippity>

> 2) Change all our labels from defining when a dependency is used to
> defining how it is used. E.g. read:, import:, link:, exec:, etc.
> 
> If this needs more fleshing out, I'll leave that to eternaleye..
> 
> This might provide a lot of additional granularity but may also make the
> common case too complicated?

It's less changing them _from_ when a dependency is used, and more 
_adding_ how it is used as a separate thing.

There'd basically be two axes for dependencies: When it needs to be 
present, and how it is used.

On the "how" axis, I've wound up with:
- read: the dep contains data files which will be read by the package
- import: the dep contains code that will become part of the package
- link: the dep contains code that the package will refer to
- exec: the dep contains executables that the package will run

On the "when" axis, I feel the sensible values are:
- fetch: the dep is needed to download the package
- build: the dep is needed to go from source to binary
- test: the dep is needed when tests are run
- install: the dep is needed to run preinst/postinst/etc hooks
- use: the dep is needed when the package is used by the end user (or 
other packages)

Note "use" rather than "run" - "use" time is when a package can _satisfy_ 
dependencies, including read, build, and exec; only the last is apropos 
to "run".

The behavior of these regarding cross is as follows:

read: required on host, regardless of timing
import: required on target, regardless of timing
link: required on target, regardless of timing
exec: required on host at fetch and build; required on target at test, 
install, and use. At fetch and build time, dependencies of exec deps have 
their target == host.

To give some examples:

scm-git.exlib would add

fetch=exec:
        dev-scm/git

app-text/dblatex would contain

use=read:
        app-text/docbook-xml-dtd

cmake.exlib would add

build=exec:
        sys-devel/cmake

x11-libs/libXv would have:

build=import:
        x11-proto/videoproto

but also:

build+use=link:
        x11-libs/libX11


However, there are further cases as well.

For example, link implies _continuity_ of the dependency, while import 
does not - build+run=import would permit the build and run dependencies 
to be satisfied by different IDs, while build+run=link would, at least 
aspirationally, mean that they should be the same. This is useful in the 
case of static libraries and binaries: Presume LLVM was static-only, and 
that clang produced both a static binary and (under parts:devel) a static 
library. It should then have the following dependency:

build=import:
        dev-lang/llvm

use=import:
        parts:devel? ( dev-lang/llvm )

That is, if another package requires clang's devel part, then clang 
requires LLVM be present - but it explicitly need not be the same build 
of LLVM.

Another corner case is C++ dependencies with templates. These contain 
code that is both imported and linked, like so:

build+use=import+link:
        dev-lang/boost [[ note = [ not header-only ] ]]

As import shows that code was brought into the image itself, it probably 
should record the exact ID that satisfied it. This would allow tracking 
such things for security masks.


_______________________________________________
Exherbo-dev mailing list
[email protected]
http://lists.exherbo.org/mailman/listinfo/exherbo-dev

Reply via email to