Menu

#2060 mingw-developer-toolkit meta package

INSTALLER
assigned
Task
none
Unknown
False
2013-09-26
2013-09-22
Earnie Boyd
No

Who wants to claim to fix this one?

mingw-get install mingw-developer-toolkit

Gives the dreaded extraction failed cannot replace error for many of the sub packages.

Discussion

  • Keith Marshall

    Keith Marshall - 2013-09-24

    Which tells you that you may still have conflicting requirements specifications, (or that your installation arena has become polluted by artefacts from defunct -- improperly removed -- packages).

    I'm not volunteering to fix this, but FWIW, I created a completely clean sandbox, ran mingw-get-setup.exe from mingw-get-0.6.1-beta-20130910-1, and then installed the mingw-developer-toolkit, without the slightest hint of any file collision; it installed the following 89 packages:--

    $ grep release var/lib/mingw-get/data/man*.xml | sed 's,.*=",,;s,".*,,' | sort | tee x.x | wc -l > z.z; cat x.x z.z
    autoconf-10-1-mingw32-bin.tar.lzma
    autoconf2.1-2.13-4-mingw32-bin.tar.lzma
    autoconf2.5-2.68-1-mingw32-bin.tar.lzma
    autogen-5.10.1-1-msys-1.0.15-bin.tar.lzma
    automake-4-1-mingw32-bin.tar.lzma
    automake1.10-1.10.2-1-mingw32-bin.tar.lzma
    automake1.11-1.11.1-1-mingw32-bin.tar.lzma
    automake1.4-1.4p6-1-mingw32-bin.tar.lzma
    automake1.5-1.5-1-mingw32-bin.tar.lzma
    automake1.6-1.6.3-1-mingw32-bin.tar.lzma
    automake1.7-1.7.9-1-mingw32-bin.tar.lzma
    automake1.8-1.8.5-1-mingw32-bin.tar.lzma
    automake1.9-1.9.6-3-mingw32-bin.tar.lzma
    bash-3.1.17-4-msys-1.0.16-bin.tar.lzma
    bison-2.4.2-1-msys-1.0.13-bin.tar.lzma
    bsdcpio-2.8.3-1-msys-1.0.13-bin.tar.lzma
    bsdtar-2.8.3-1-msys-1.0.13-bin.tar.lzma
    bzip2-1.0.6-1-msys-1.0.17-bin.tar.lzma
    coreutils-5.97-3-msys-1.0.13-bin.tar.lzma
    coreutils-5.97-3-msys-1.0.13-ext.tar.lzma
    cvs-1.12.13-2-msys-1.0.13-bin.tar.lzma
    diffstat-1.54-1-msys-1.0.17-bin.tar.lzma
    diffutils-2.8.7.20071206cvs-3-msys-1.0.13-bin.tar.lzma
    dos2unix-6.0.3-1-msys-1.0.17-bin.tar.lzma
    file-5.04-1-msys-1.0.13-bin.tar.lzma
    findutils-4.4.2-2-msys-1.0.13-bin.tar.lzma
    flex-2.5.35-2-msys-1.0.13-bin.tar.lzma
    gawk-3.1.7-2-msys-1.0.13-bin.tar.lzma
    gettext-0.18.3.1-1-mingw32-bin.tar.lzma
    gettext-0.18.3.1-1-mingw32-dev.tar.lzma
    gettext-0.18.3.1-1-mingw32-dll.tar.lzma
    grep-2.5.4-2-msys-1.0.13-bin.tar.lzma
    guile-1.8.7-2-msys-1.0.15-bin.tar.lzma
    gzip-1.3.12-2-msys-1.0.13-bin.tar.lzma
    inetutils-1.7-1-msys-1.0.13-bin.tar.lzma
    less-436-2-msys-1.0.13-bin.tar.lzma
    libarchive-2.8.3-1-msys-1.0.13-dll-2.tar.lzma
    libbz2-1.0.6-1-msys-1.0.17-dll-1.tar.lzma
    libcrypt-1.1_1-3-msys-1.0.13-dll-0.tar.lzma
    libexpat-2.0.1-1-msys-1.0.13-dll-1.tar.lzma
    libgcc-4.8.1-1-mingw32-dll-1.tar
    libgdbm-1.8.3-3-msys-1.0.13-dll-3.tar.lzma
    libgmp-5.0.1-1-msys-1.0.13-dll-10.tar.lzma
    libgmp-5.1.2-1-mingw32-dll-10.tar
    libguile-1.8.7-2-msys-1.0.15-dll-17.tar.lzma
    libguile-1.8.7-2-msys-1.0.15-rtm.tar.lzma
    libiconv-1.14-1-msys-1.0.17-dll-2.tar.lzma
    libiconv-1.14-3-mingw32-bin.tar.lzma
    libiconv-1.14-3-mingw32-dev.tar.lzma
    libiconv-1.14-3-mingw32-dll.tar.lzma
    libintl-0.18.1.1-1-msys-1.0.17-dll-8.tar.lzma
    libltdl-2.4-1-mingw32-dev.tar.lzma
    libltdl-2.4-1-mingw32-dll-7.tar.lzma
    libltdl-2.4-1-msys-1.0.15-dll-7.tar.lzma
    liblzma-5.0.3-1-msys-1.0.17-dll-5.tar.lzma
    libmagic-5.04-1-msys-1.0.13-dll-1.tar.lzma
    libminires-1.02_1-2-msys-1.0.13-dll.tar.lzma
    libmpc-1.0.1-1-mingw32-dll-2.tar
    libmpfr-3.1.2-1-mingw32-dll-1.tar
    libopenssl-1.0.0-1-msys-1.0.13-dll-100.tar.lzma
    libopts-5.10.1-1-msys-1.0.15-dll-25.tar.lzma
    libpopt-1.15-2-msys-1.0.13-dll-0.tar.lzma
    libregex-1.20090805-2-msys-1.0.13-dll-1.tar.lzma
    libtermcap-0.20050421_1-2-msys-1.0.13-dll-0.tar.lzma
    libtool-2.4-1-mingw32-bin.tar.lzma
    libxml2-2.7.6-1-msys-1.0.13-dll-2.tar.lzma
    lndir-1.0.1-2-msys-1.0.13-bin.tar.lzma
    m4-1.4.16-2-msys-1.0.17-bin.tar.lzma
    make-3.81-3-msys-1.0.13-bin.tar.lzma
    mingw-get-0.6.1-mingw32-beta-20130910-1-bin.tar.xz
    mingw-get-0.6.1-mingw32-beta-20130910-1-gui.tar.xz
    mingw-get-0.6.1-mingw32-beta-20130910-1-lic.tar.xz
    mktemp-1.6-2-msys-1.0.13-bin.tar.lzma
    msysCORE-1.0.18-1-msys-1.0.18-bin.tar.lzma
    msysCORE-1.0.18-1-msys-1.0.18-doc.tar.lzma
    msysCORE-1.0.18-1-msys-1.0.18-ext.tar.lzma
    msysCORE-1.0.18-1-msys-1.0.18-lic.tar.lzma
    openssh-5.4p1-1-msys-1.0.13-bin.tar.lzma
    openssl-1.0.0-1-msys-1.0.13-bin.tar.lzma
    patch-2.6.1-1-msys-1.0.13-bin.tar.lzma
    perl-5.8.8-1-msys-1.0.17-bin.tar.lzma
    rsync-3.0.8-1-msys-1.0.17-bin.tar.lzma
    sed-4.2.1-2-msys-1.0.13-bin.tar.lzma
    tar-1.23-1-msys-1.0.13-bin.tar.lzma
    termcap-0.20050421_1-2-msys-1.0.13-bin.tar.lzma
    texinfo-4.13a-2-msys-1.0.13-bin.tar.lzma
    vim-7.3-2-msys-1.0.16-bin.tar.lzma
    xz-5.0.3-1-msys-1.0.17-bin.tar.lzma
    zlib-1.2.7-1-msys-1.0.17-dll.tar.lzma
    89
    

    Note that, although GCC hasn't been installed, some of its associated DLLs have been. Should they be requirements of mingw-developer-toolkit, in the absence GCC itself? Or should GCC also be required? I don't know.

    Of those packages listed, all appear to be latest available versions, except for libgcc-4.8.1-1-mingw32-dll-1.tar; is there an incorrectly specified requirement there? Again, I don't know.

     

    Last edit: Keith Marshall 2013-09-24
  • Keith Marshall

    Keith Marshall - 2013-09-24

    I'm getting closer to volunteering; there seems to be some very strange factor at play, here.

    As a further step, I ran

    $ mingw-get install mingw32-base 2>&1 | tee err.log
    

    in my sandbox, on top of the preceding mingw-developer-toolkit installation; it showed me three collision reports:

    install: libiconv-1.14-3-mingw32-dll.tar.lzma
     installing libiconv-1.14-3-mingw32-dll.tar.lzma
    mingw-get.exe: *** ERROR *** c:\mingw\sandbox\/bin/libcharset-1.dll: extraction failed
    mingw-get.exe: *** ERROR *** c:\mingw\sandbox\/bin/libcharset-1.dll: probable package conflict; existing file not overwritten
    mingw-get.exe: *** ERROR *** c:\mingw\sandbox\/bin/libiconv-2.dll: extraction failed
    mingw-get.exe: *** ERROR *** c:\mingw\sandbox\/bin/libiconv-2.dll: probable package conflict; existing file not overwritten
    .
    .
    .
    install: libintl-0.18.1.1-2-mingw32-dll-8.tar.lzma
     installing libintl-0.18.1.1-2-mingw32-dll-8.tar.lzma
    mingw-get.exe: *** ERROR *** c:\mingw\sandbox\/bin/libintl-8.dll: extraction failed
    mingw-get.exe: *** ERROR *** c:\mingw\sandbox\/bin/libintl-8.dll: probable package conflict; existing file not overwritten
    

    The first two are puzzling:

    $ cat `grep libcharset-1.dll var/lib/mingw-get/data/man*.xml | cut -d: -f1`
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <package id="manifest-0-036-df66-45fed3">
        <release tarname="libiconv-1.14-3-mingw32-dll.tar.lzma" />
        <references>
            <sysroot id="sysroot-0-002-a7c6-d7dbb5" />
        </references>
        <manifest>
            <dir path="bin" />
            <file path="bin/libcharset-1.dll" />
            <file path="bin/libiconv-2.dll" />
        </manifest>
    </package>
    

    clearly shows that both bin/libcharset-1.dll and bin/libiconv-2.dll were previously installed by the very same libiconv-1.14-3-mingw32-dll.tar.lzma package which mingw-get is now trying to install again; (it was previously installed as a requirement of mingw-developer-toolkit). This begs the question: why is mingw-get trying to install this again? It is supposed to know that it is already installed, already at a suitable release point, and should be leaving it alone. I'll need to investigate this further.

    The libintl-8.dll issue is different; libintl-0.18.1.1-2-mingw32-dll-8.tar.lzma is not listed among the packages installed as requirements of mingw-developer-toolkit, but

    $ cat `grep libintl-8.dll var/lib/mingw-get/data/man*.xml | cut -d: -f1`
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <package id="manifest-0-039-59f3-ed3d8f">
        <release tarname="gettext-0.18.3.1-1-mingw32-dll.tar.lzma" />
        <references>
            <sysroot id="sysroot-0-002-a7c6-d7dbb5" />
        </references>
        <manifest>
            <dir path="bin" />
            <file path="bin/libgettextlib-0-18-3.dll" />
            <file path="bin/libgettextpo-0.dll" />
            <file path="bin/libgettextsrc-0-18-3.dll" />
            <file path="bin/libintl-8.dll" />
        </manifest>
    </package>
    

    shows us that libintl-8.dll was previously delivered by gettext-0.18.3.1-1-mingw32-dll.tar.lzma, (which is among the packages installed as requirements of mingw-developer-toolkit), and therein lies the conflict.

     
  • Keith Marshall

    Keith Marshall - 2013-09-24

    Running the CLI version of mingw-get, with dependency resolver debug tracing enabled, e.g. (after clearing the sandbox of all but the package cache, then reinstalling up to mingw-developer-toolkit):

    $ bin/mingw-get.exe --trace=0x0200 install mingw32-base 2>&1 | tee trace-2.log
    

    provides some enlightenment. There is a specification defect, for libiconv-1.14-3: its DLL component references erroneously omit the interface version specification.

    Attached files, trace-1.log and trace-2.log, show the traces for installing mingw-developer-toolkit and then mingw32-base respectively, with the defective specification still in place. trace-3.log shows the mingw32-base installation phase, from repeating the entire exercise again with the interface version omissions for libiconv-1.14-3 corrected in my local catalogue, (I also noticed similar omissions for other DLLs, which I did not correct); notice how the conflicts for the two DLLs provided by this package are no longer reported.

    Of course, fixing these defective DLL references, (which is a necessary action), doesn't completely explain this issue; the question still remains: why, having identified this improperly specified DLL as a viable candidate, did mingw-get then fail to identify it as "already installed"? That's a side issue for me to follow up.

     

    Last edit: Keith Marshall 2013-09-24
  • Keith Marshall

    Keith Marshall - 2013-09-25
    • labels: --> package specification, interface version, component version
    • status: unread --> assigned
    • assigned_to: Earnie Boyd
     
  • Keith Marshall

    Keith Marshall - 2013-09-25

    The mingw-get bug is that interface version matching is mishandled; see [#2063].

    At least one package specification bug is that, e.g. libiconv-1.14-3 (among others), specifies its release tarname attribute improperly. An implicit requirement of the issues discussed here, as they relate to [#2063], is that the interface version must be specified within the release tarname of any component package which delivers a versioned DLL, as it must also be specified within any <requires /> reference; perhaps this formal statement of that requirement is necessary, since libiconv-1.14-3 and some recent gcc packages seem to ignore it.

     

    Related

    Issues: #2063

  • Earnie Boyd

    Earnie Boyd - 2013-09-25

    I see the issues with libmpc, libmpfr, libiconv, libgcc, libssp, libgomp and will be taking care of those by the weekend. I need to make sure that the most of the scenarios are covered before publishing the changes.

    The linked discussion may require me to throw up but so be it; I half remember the conversation but at the time had little to no time to involve myself with it. I may open a ticket for discussion further on the DLL piece.

    I've figured out how to resolve the backward upgrade issue with missing objects as well, it is an ordering issue in the prior packages. I just need to move libgcc after libgomp and libssp in the "bin" component for all releases.

     
  • Keith Marshall

    Keith Marshall - 2013-09-26

    The linked discussion may require me to throw up but so be it; I half remember the conversation but at the time had little to no time to involve myself with it. I may open a ticket for discussion further on the DLL piece.

    I'm reasonably convinced that Chuck's evaluation is sound. When a (component) package delivers a DLL with a specifically versioned interface, that needs to be reflected in the metadata conveyed by the canonical tarname attribute; it must be possible to concurrently install such a component package alongside an alternative version with a different interface, and that would effectively become a distinct component of the same package, distinguished by its differing interface version number.

    One potential issue, which may merit further discussion, is the bundling of two DLLs with differing interface versions, as is the case of libiconv-2.dll and libcharset-1.dll within a common libiconv component package; one might argue that they should be segregated into their own individual component packages. Irrespective of this, it remains my opinion that it is a bug for mingw-get to select a component package with unversioned metadata, as a viable candidate to satisfy a version specific requirement, the more so when it then ignores the already installed state of that component package, because its version metadata doesn't match!

    I've figured out how to resolve the backward upgrade issue with missing objects as well, it is an ordering issue in the prior packages. I just need to move libgcc after libgomp and libssp in the "bin" component for all releases.

    But that's not really a solution; more of a fragile work around. The order in which dependencies are specified shouldn't matter. Your work around is worthwhile, as an interim measure, but the real solution is to fix [#2064].

     

    Related

    Issues: #2064

  • Earnie Boyd

    Earnie Boyd - 2013-09-26

    I have mingw-developer-toolkit installing without complaint in my local sandbox; I'll publish the changes later tonight.

    A further discussion on handling DLL is warranted, should that happen on list or with a ticket?

     
    • Keith Marshall

      Keith Marshall - 2013-09-26

      A further discussion on handling DLL is warranted, should that happen on list or with a ticket?

      I'm not convinced there's a burning need to discuss much, but if you think it necessary, on list would be better IMO.

       
      • Earnie Boyd

        Earnie Boyd - 2013-09-26

        I'm thinking through this but we actually have a dilemma in that the package naming for the library needs the dll versioning and not just the release. It isn't setup that way currently but since I'm beginning to lean toward agreeing here we need to fix an issue. Using libmpc as an example, the requires specifier should be able to state eq="mingw32-libmpc-3" or eq="mingw32-libmpc-2" for earlier versions where mingw32-libmpc-3 and mingw32-libmpc-2 are package names and not release tarname names. The release tarname shouldn't carry the dll version number although it doesn't hurt either way; but I can understand a need to deliver them individually.

         
    • Earnie Boyd

      Earnie Boyd - 2013-09-26

      I have published the changed catalogues in order to prevent the remaining errors. I tested downgrading and installing mingw-developer-tools. Should we close this one?

       
      • Keith Marshall

        Keith Marshall - 2013-09-26

        I have published the changed catalogues in order to prevent the remaining errors.

        Thanks.

        Should we close this one?

        It's your ticket, so if you're happy with the resolution, by all means go ahead. I think we have the related residual mingw-get issues covered by other tickets.