How to make sure that one port gets updated before another? (MinGW)

Ryan Schmidt ryandesign at macports.org
Sat Oct 27 18:06:29 UTC 2018



On Oct 27, 2018, at 12:53, Mojca Miklavec wrote:

> On Fri, 26 Oct 2018 at 23:26, Joshua Root wrote:
> 
>> If dependencies didn't get upgraded before their dependents, there would
>> be a lot of serious problems. Since we don't see that,
> 
> Except ... hmmm ...
>    https://trac.macports.org/ticket/57457
>    Travis CI: Sometimes declared dependencies aren't installed
> ?

That's a problem I've only ever seen on Travis CI; I can't explain why since I haven't attempted to understand what we're doing on Travis.


>> let's assume
>> something else is going on here. Is there an actual circular dependency?
> 
> That's why I came up to ask for someone's help.
> 
> For the port x86_64-w64-mingw32-crt there is
>    depends_build bin:x86_64-w64-mingw32-gcc:x86_64-w64-mingw32-gcc-bootstrap
> which is satisfied by either of these:
> - x86_64-w64-mingw32-gcc-bootstrap
> - x86_64-w64-mingw32-gcc-nothreads
> - x86_64-w64-mingw32-gcc
> 
> For the port x86_64-w64-mingw32-winpthreads there is now
>    depends_build \
>        path:x86_64-w64-mingw32/lib/libgcc_s.a:x86_64-w64-mingw32-gcc-nothreads
> \
>        port:x86_64-w64-mingw32-crt
> where the first dependency is satisfied by either of the two:
> - x86_64-w64-mingw32-gcc-nothreads
> - x86_64-w64-mingw32-gcc
> 
> Further, the port x86_64-w64-mingw32-gcc-nothreads depends on:
>    depends_lib port:x86_64-w64-mingw32-crt
>    depends_build bin:x86_64-w64-mingw32-gcc:x86_64-w64-mingw32-gcc-bootstrap
> and the port x86_64-w64-mingw32-gcc depends on
>    depends_lib
>        port:x86_64-w64-mingw32-crt \
>        port:x86_64-w64-mingw32-winpthreads
>   depends_build \
>        path:x86_64-w64-mingw32/lib/libgcc_s.a:x86_64-w64-mingw32-gcc-nothreads
> 
> At the time of updating both of these ports are deactivated:
>    x86_64-w64-mingw32-gcc-bootstrap
>    x86_64-w64-mingw32-gcc-nothreads
> and only
>    x86_64-w64-mingw32-gcc
> is activated.
> 
> So in theory crt and winpthreads are runtime dependencies of gcc,
> while gcc could in theory be considered a *build* dependency of both
> crt and winpthreads. I don't know whether that counts as a dependency
> cycle or not. But gcc is up to date.

Then yes, in that situation (where x86_64-w64-mingw32-gcc is active) there are two dependency cycles:

x86_64-w64-mingw32-crt depends on x86_64-w64-mingw32-gcc
x86_64-w64-mingw32-gcc depends on x86_64-w64-mingw32-crt

x86_64-w64-mingw32-winpthreads depends on x86_64-w64-mingw32-gcc
x86_64-w64-mingw32-gcc depends on x86_64-w64-mingw32-winpthreads

MacPorts does not support dependency cycles. I don't think there's any code in MacPorts for detecting dependency cycles, so MacPorts behavior when there is a dependency cycle is undefined. Portfile authors must ensure no dependency cycles exist.



More information about the macports-dev mailing list