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

Mojca Miklavec mojca at macports.org
Sun Oct 28 07:43:53 UTC 2018


On Sat, 27 Oct 2018 at 20:06, Ryan Schmidt wrote:
> On Oct 27, 2018, at 12:53, Mojca Miklavec wrote:
> > On Fri, 26 Oct 2018 at 23:26, Joshua Root wrote:
> >
> >> 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.

Do you happen to have any suggestions for the fix?
I kind of ran out of ideas. I probably had the initial ticket open for
years, and when I committed these ports I thought this trick could
eventually work ...

Initially I tried to make these three installable side-by-side:
- x86_64-w64-mingw32-gcc-bootstrap
- x86_64-w64-mingw32-gcc-nothreads
- x86_64-w64-mingw32-gcc
I would remove files already installed by
x86_64-w64-mingw32-gcc-bootstrap from
x86_64-w64-mingw32-gcc-nothreads, and remove files installed by either
of the two from x86_64-w64-mingw32-gcc, but some files need to be
different (I remember that some header would include different files
depending on whether we were in bootstrap stage or in "fully
functional" stage), making my idea useless. Well, maybe I could have
another six ports providing just those conflicting headers in a
similarly messy way as I currently do with these gcc compilers ...

Thank you,
    Mojca


More information about the macports-dev mailing list