[aur-general] Cycled dependencies in AUR

Caleb Maclennan caleb at alerque.com
Tue Aug 24 17:45:04 UTC 2021


On 2021-08-24 19:11, Hugo Osvaldo Barrera via aur-general wrote:
> On Tue, 24 Aug 2021, at 15:12, Mikhail f. Shiryaev via aur-general 
> wrote:
>> The same is valid for package ruby-rubocop-performance [6] that is
>> dependency for rubocop check and requires it to be built
> 
> There's not really much that can be done to work around this, since
> the dependency also exists upstream. Potentially, AUR helpers can
> detect these scenarios and do a first pass with `--nocheck`, and then
> a second rebuild.

I don't know of *any* that do that yet, and even instructing users to do 
this by hand is difficult. As a *packager* building packages for my own 
package repo it takes quite a bit of brain power and trial/error to sort 
out what order to build. I tihnk I'd have to agree with Mikail here that 
this is leaves room for improvement, and AUR packages should make 
concessions for this.

> Note that this isn't the only instance of a circular dependency like 
> this.
> Another known similar situation is rust, which requires rust to be
> built [1]. Again,the package only reflects upstream's situation.

There are lots of other instances of this, but I'm not sure Rust is 
really the same. Rust has a bootstrap issue with *building* itself, but 
that is ⓐ not an issue for end users because a binary package for it 
exists in the repos and the bother of bootstrapping it is on packagers, 
and ⓑ is not at all the same as a test suite that introduces a circular 
loop.

Incidentally I just rehashed one of these in Python the other day 
(again). The upstream projects in the Python font tooling world 
regularly assume their test suites are run with Tox and/or something 
that can just `pip` out for a wheel of whatever they need to run. There 
are at least 3 different loops over about 15 packages.

My solution to the loop I was dealing with (besides opening an upstream 
bug report[1]) was to look around the circular loop for where something 
was only a *checkdepends* and disable the checks by default for that 
package. This is less than ideal too, but I think it's better than piles 
of users frustrated because they can't able to build anything and 
otherwise fully functional packages claiming they aren't able to satisfy 
dependencies.

I experimented with adding code to leave the tests but keep them from 
running, such as adding this:

BUILDENV+=(!check)

This works for local builds with `makepkg` but it doesn't work for 
chroot builds and it doesn't work for most AUR helpers. Frustratingly 
the `options=()` field can't touch this either. I suppose I could get 
more aggressive with a custom env var check to inject the check deps and 
function if found so at least I as the packages maintainer can build it 
with checks, but that feels ugly.

I too feel like there should be a better way to handle this. I don't 
know what it is.

Caleb

[1] https://github.com/typemytype/booleanOperations/issues/64


More information about the aur-general mailing list