Bug 1922702 - api-ms-win-core-synch-l1-2-0.dll missing from standard dlls
Summary: api-ms-win-core-synch-l1-2-0.dll missing from standard dlls
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: mingw-binutils
Version: rawhide
Hardware: All
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Kalev Lember
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: 1923595
TreeView+ depends on / blocked
 
Reported: 2021-01-30 23:09 UTC by Thomas Sailer
Modified: 2021-02-02 07:40 UTC (History)
9 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2021-02-02 07:40:57 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description Thomas Sailer 2021-01-30 23:09:50 UTC
Description of problem:
DEBUG util.py:444:    - nothing provides mingw32(api-ms-win-core-synch-l1-2-0.dll) needed by mingw32-boost-1.75.0-1.fc34.noarch
DEBUG util.py:444:   Problem 2: conflicting requests
DEBUG util.py:444:    - nothing provides mingw64(api-ms-win-core-synch-l1-2-0.dll) needed by mingw64-boost-1.75.0-1.fc34.noarch


Version-Release number of selected component (if applicable):
mingw32-filesystem 116-1.fc33
mingw64-filesystem 116-1.fc33

How reproducible:
always

Steps to Reproduce:
1.dnf install mingw32-boost mingw64-boost

Actual results:
- nothing provides mingw32(api-ms-win-core-synch-l1-2-0.dll) needed by mingw32-boost-1.75.0-1.fc34.noarch
- nothing provides mingw64(api-ms-win-core-synch-l1-2-0.dll) needed by mingw64-boost-1.75.0-1.fc34.noarch


Expected results:
package installs

Additional info:
could api-ms-win-core-synch-l1-2-0.dll please be added to standard-dlls-mingw32 and standard-dlls-mingw64? boost 1.75 needs it...

Thanks

Comment 1 Sandro Mani 2021-02-01 11:04:30 UTC
These are Windows API umbrella libraries which are meant to be dlopened (aka LoadLibrary on Windows), see [1]. These are not "physical" libraries provided by mingw. I see

libs/atomic/src/wait_ops_windows.cpp:            boost::winapi::HMODULE_ kernel_base = boost::winapi::get_module_handle(L"api-ms-win-core-synch-l1-2-0.dll");

and it then appears as referenced DLL in libboost_atomic-mt-x64.dll:

mingw-objdump -p libboost_atomic-mt-x64.dll | grep core
        DLL Name: api-ms-win-core-synch-l1-2-0.dll

(the requires of the RPM being generated based on the objdump output). I'd say this is a bug in objdump, but I need to investigate more. In the meantime, please filter out the requires from the RPM.


[1] https://stackoverflow.com/questions/47529106/what-are-api-ms-win-lx-x-x-dll-umbrella-libraries/47530043#47530043

Comment 2 Thomas Sailer 2021-02-01 17:39:56 UTC
Thanks Sandro!

Do you have any info on how to do the filtering?

I have added:
%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^mingw(32|64)\\(api-ms-.*dll\\)$

and tested the regex against mingw32(api-ms-win-core-synch-l1-2-0.dll) and mingw64(api-ms-win-core-synch-l1-2-0.dll), it matches, but the package built that way still has the requires... How can this be debugged?

BR, Thomas

Comment 3 Sandro Mani 2021-02-01 17:48:45 UTC
Hi Thomas

You'll want to filter the requires, not the provides.

Best
Sandro

Comment 4 Thomas Sailer 2021-02-01 20:51:09 UTC
Hi Sandro,

uhoh embarrassing... I changed it to:
%global __requires_exclude %{?__requires_exclude:%__requires_exclude|}^mingw(32|64)\\(api-ms-.*dll\\)$

but it still doesn't work.

Log says:
warning: Deprecated external dependency generator is used!
Finding  Provides: /usr/lib/rpm/mingw-find-provides.sh mingw32 mingw64
Finding  Requires(interp): 
Finding  Requires(rpmlib): 
Finding  Requires(verify): 
Finding  Requires(pre): 
Finding  Requires(post): 
Finding  Requires(preun): 
Finding  Requires(postun): 
Finding  Requires(pretrans): 
Finding  Requires(posttrans): 
Finding  Requires: /usr/lib/rpm/mingw-find-requires.sh mingw32 mingw64
Finding  Conflicts: 
Finding  Obsoletes: 
Finding  Recommends: 
Finding  Suggests: 
Finding  Supplements: 
Finding  Enhances: 
Provides: ....
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: mingw64(advapi32.dll) mingw64(api-ms-win-core-synch-l1-2-0.dll) mingw64(icui18n67.dll) mingw64(icuuc67.dll) mingw64(kernel32.dll) mingw64(libboost_chrono-mt-x64.dll) mingw64(libboost_chrono-x64.dll) mingw64(libboost_context-mt-x64.dll) mingw64(libboost_filesystem-mt-x64.dll) mingw64(libboost_filesystem-x64.dll) mingw64(libboost_log-mt-x64.dll) mingw64(libboost_log-x64.dll) mingw64(libboost_regex-mt-x64.dll) mingw64(libboost_regex-x64.dll) mingw64(libboost_serialization-mt-x64.dll) mingw64(libboost_serialization-x64.dll) mingw64(libboost_thread-mt-x64.dll) mingw64(libbz2-1.dll) mingw64(libgcc_s_seh-1.dll) mingw64(libssp-0.dll) mingw64(libstdc++-6.dll) mingw64(libwinpthread-1.dll) mingw64(msvcrt.dll) mingw64(secur32.dll) mingw64(ws2_32.dll) mingw64(zlib1.dll) mingw64-crt mingw64-filesystem >= 95

Does filtering with __requires_exclude work with the external dependency generator?

Comment 5 Sandro Mani 2021-02-01 21:01:16 UTC
Good question, not sure whether it works with external generators.

I've moved ahead to filter these directly in the requires generator script [1]. As soon as mingw-filesystem-117-1.fc34 has appeared in the buildroot, it should be sufficient to just rebuild mingw-boost.

[1] https://src.fedoraproject.org/rpms/mingw-filesystem/c/9e2af704169d8d4acab5a26f187172faa28959eb?branch=master

Comment 6 Thomas Sailer 2021-02-02 07:40:32 UTC
Thanks Sandro for your quick support!

https://koji.fedoraproject.org/koji/buildinfo?buildID=1699630


Note You need to log in before you can comment on or make changes to this bug.