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
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
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
Hi Thomas You'll want to filter the requires, not the provides. Best Sandro
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?
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
Thanks Sandro for your quick support! https://koji.fedoraproject.org/koji/buildinfo?buildID=1699630