#1324 Library conflict: volk (GNU Radio) and volk (Vulkan SDK)
Closed: accepted 9 months ago by jexposit. Opened 10 months ago by jexposit.

Conflicting packages

The next version of vulkan-tools (v1.3.272) includes a dependency to the volk (Vulkan SDK) library that'll need to be packaged.

However, there is already a volk (GNU Radio) library available for Fedora that will conflict with it.

Upstream rename

Issues were already opened by a Debian packager and by a volk (GNU Radio) maintainer to check if volk (Vulkan SDK) would be open the remane their library:

It doesn't look like the maintainer is open to rename the library.

No conflicting files (for the moment)

At the moment of writing this, there are no conflicting files between both packages. However, a conflict might happen in the future if, for example, volk (Vulkan SDK) starts distributing a shared library.

Files installed by volk (GNU Radio):

$ dnf repoquery -l volk
/usr/bin/volk-config-info
/usr/bin/volk_modtool
/usr/bin/volk_profile
/usr/lib/.build-id
/usr/lib/.build-id/02
/usr/lib/.build-id/02/d9e51e952b72137eb756a70388f27ba68c766e
/usr/lib/.build-id/c2
/usr/lib/.build-id/c2/b0427a15c53f8f49d94408acdb19fb83d0bdc3
/usr/lib/.build-id/e5
/usr/lib/.build-id/e5/badf6223cc6a3278d05ee9c35e426eee0cef8a
/usr/lib/libvolk.so.3.0
/usr/lib/libvolk.so.3.0.0
/usr/lib/python3.12/site-packages/volk_modtool
/usr/lib/python3.12/site-packages/volk_modtool/__init__.py
/usr/lib/python3.12/site-packages/volk_modtool/__init__.pyc
/usr/lib/python3.12/site-packages/volk_modtool/__init__.pyo
/usr/lib/python3.12/site-packages/volk_modtool/__pycache__
/usr/lib/python3.12/site-packages/volk_modtool/__pycache__/__init__.cpython-312.opt-1.pyc
/usr/lib/python3.12/site-packages/volk_modtool/__pycache__/__init__.cpython-312.pyc
/usr/lib/python3.12/site-packages/volk_modtool/__pycache__/cfg.cpython-312.opt-1.pyc
/usr/lib/python3.12/site-packages/volk_modtool/__pycache__/cfg.cpython-312.pyc
/usr/lib/python3.12/site-packages/volk_modtool/__pycache__/volk_modtool_generate.cpython-312.opt-1.pyc
/usr/lib/python3.12/site-packages/volk_modtool/__pycache__/volk_modtool_generate.cpython-312.pyc
/usr/lib/python3.12/site-packages/volk_modtool/cfg.py
/usr/lib/python3.12/site-packages/volk_modtool/cfg.pyc
/usr/lib/python3.12/site-packages/volk_modtool/cfg.pyo
/usr/lib/python3.12/site-packages/volk_modtool/volk_modtool_generate.py
/usr/lib/python3.12/site-packages/volk_modtool/volk_modtool_generate.pyc
/usr/lib/python3.12/site-packages/volk_modtool/volk_modtool_generate.pyo
/usr/share/doc/volk
/usr/share/doc/volk/CHANGELOG.md
/usr/share/doc/volk/README.md
/usr/share/licenses/volk
/usr/share/licenses/volk/COPYING
/usr/bin/volk-config-info
/usr/bin/volk_modtool
/usr/bin/volk_profile
/usr/lib/.build-id
/usr/lib/.build-id/4f
/usr/lib/.build-id/4f/cda756279d9944dc849572fffe4f2380cd1424
/usr/lib/.build-id/52
/usr/lib/.build-id/52/a58be65baa0858b6f5e9ecb5b3d022331a26fc
/usr/lib/.build-id/5c
/usr/lib/.build-id/5c/989629bf87e8ae69f7988e33d70858302a6bfd
/usr/lib64/libvolk.so.3.0
/usr/lib64/libvolk.so.3.0.0
/usr/lib64/python3.12/site-packages/volk_modtool
/usr/lib64/python3.12/site-packages/volk_modtool/__init__.py
/usr/lib64/python3.12/site-packages/volk_modtool/__init__.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/__init__.pyo
/usr/lib64/python3.12/site-packages/volk_modtool/__pycache__
/usr/lib64/python3.12/site-packages/volk_modtool/__pycache__/__init__.cpython-312.opt-1.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/__pycache__/__init__.cpython-312.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/__pycache__/cfg.cpython-312.opt-1.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/__pycache__/cfg.cpython-312.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/__pycache__/volk_modtool_generate.cpython-312.opt-1.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/__pycache__/volk_modtool_generate.cpython-312.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/cfg.py
/usr/lib64/python3.12/site-packages/volk_modtool/cfg.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/cfg.pyo
/usr/lib64/python3.12/site-packages/volk_modtool/volk_modtool_generate.py
/usr/lib64/python3.12/site-packages/volk_modtool/volk_modtool_generate.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/volk_modtool_generate.pyo
/usr/share/doc/volk
/usr/share/doc/volk/CHANGELOG.md
/usr/share/doc/volk/README.md
/usr/share/licenses/volk
/usr/share/licenses/volk/COPYING
/usr/bin/volk-config-info
/usr/bin/volk_modtool
/usr/bin/volk_profile
/usr/lib/.build-id
/usr/lib/.build-id/5e
/usr/lib/.build-id/5e/f3a6e1707a9fb380281da35b40212477be9c33
/usr/lib/.build-id/65
/usr/lib/.build-id/65/e9efc0b709a1a62c00d1b2150caefe9ca2d484
/usr/lib/.build-id/e2
/usr/lib/.build-id/e2/8d99496a1e6bbf219dde85c853580a11815de2
/usr/lib/libvolk.so.3.0
/usr/lib/libvolk.so.3.0.0
/usr/lib/python3.12/site-packages/volk_modtool
/usr/lib/python3.12/site-packages/volk_modtool/__init__.py
/usr/lib/python3.12/site-packages/volk_modtool/__init__.pyc
/usr/lib/python3.12/site-packages/volk_modtool/__init__.pyo
/usr/lib/python3.12/site-packages/volk_modtool/__pycache__
/usr/lib/python3.12/site-packages/volk_modtool/__pycache__/__init__.cpython-312.opt-1.pyc
/usr/lib/python3.12/site-packages/volk_modtool/__pycache__/__init__.cpython-312.pyc
/usr/lib/python3.12/site-packages/volk_modtool/__pycache__/cfg.cpython-312.opt-1.pyc
/usr/lib/python3.12/site-packages/volk_modtool/__pycache__/cfg.cpython-312.pyc
/usr/lib/python3.12/site-packages/volk_modtool/__pycache__/volk_modtool_generate.cpython-312.opt-1.pyc
/usr/lib/python3.12/site-packages/volk_modtool/__pycache__/volk_modtool_generate.cpython-312.pyc
/usr/lib/python3.12/site-packages/volk_modtool/cfg.py
/usr/lib/python3.12/site-packages/volk_modtool/cfg.pyc
/usr/lib/python3.12/site-packages/volk_modtool/cfg.pyo
/usr/lib/python3.12/site-packages/volk_modtool/volk_modtool_generate.py
/usr/lib/python3.12/site-packages/volk_modtool/volk_modtool_generate.pyc
/usr/lib/python3.12/site-packages/volk_modtool/volk_modtool_generate.pyo
/usr/share/doc/volk
/usr/share/doc/volk/CHANGELOG.md
/usr/share/doc/volk/README.md
/usr/share/licenses/volk
/usr/share/licenses/volk/COPYING
/usr/bin/volk-config-info
/usr/bin/volk_modtool
/usr/bin/volk_profile
/usr/lib/.build-id
/usr/lib/.build-id/60
/usr/lib/.build-id/60/124cd4ba096990e96084ae0ae7c60cd58f0b8b
/usr/lib/.build-id/68
/usr/lib/.build-id/68/3cbf5fc7dbb85895bfe3e15e5b331d44c6d63a
/usr/lib/.build-id/c5
/usr/lib/.build-id/c5/62f5fbbfa39994f9716f720654edd86cbfecad
/usr/lib64/libvolk.so.3.0
/usr/lib64/libvolk.so.3.0.0
/usr/lib64/python3.12/site-packages/volk_modtool
/usr/lib64/python3.12/site-packages/volk_modtool/__init__.py
/usr/lib64/python3.12/site-packages/volk_modtool/__init__.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/__init__.pyo
/usr/lib64/python3.12/site-packages/volk_modtool/__pycache__
/usr/lib64/python3.12/site-packages/volk_modtool/__pycache__/__init__.cpython-312.opt-1.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/__pycache__/__init__.cpython-312.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/__pycache__/cfg.cpython-312.opt-1.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/__pycache__/cfg.cpython-312.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/__pycache__/volk_modtool_generate.cpython-312.opt-1.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/__pycache__/volk_modtool_generate.cpython-312.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/cfg.py
/usr/lib64/python3.12/site-packages/volk_modtool/cfg.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/cfg.pyo
/usr/lib64/python3.12/site-packages/volk_modtool/volk_modtool_generate.py
/usr/lib64/python3.12/site-packages/volk_modtool/volk_modtool_generate.pyc
/usr/lib64/python3.12/site-packages/volk_modtool/volk_modtool_generate.pyo
/usr/share/doc/volk
/usr/share/doc/volk/CHANGELOG.md
/usr/share/doc/volk/README.md
/usr/share/licenses/volk
/usr/share/licenses/volk/COPYING

Files installed by volk (Vulkan SDK):

/usr
├── include
│   ├── volk.c
│   └── volk.h
└── lib64
    ├── cmake
    │   └── volk
    │       ├── volkConfig.cmake
    │       ├── volkConfigVersion.cmake
    │       ├── volkTargets.cmake
    │       └── volkTargets-release.cmake
    └── libvolk.a

Possible solutions

In addition to the obvious prefix for the volk (Vulkan SDK) package (vulkan-volk), I could patch it to rename the installed files so they look like:

/usr
├── include
│   └── vulkan_volk
│       ├── volk.c
│       └── volk.h
└── lib64
    ├── cmake
    │   └── vulkan_volk
    │       ├── vulkan_volkConfig.cmake
    │       ├── vulkan_volkConfigVersion.cmake
    │       ├── vulkan_volkTargets.cmake
    │       └── vulkan_volkTargets-release.cmake
    └── libvulkan_volk.a

And patch vulkan-tools, the only package that requires volk (Vulkan SDK) so far, to use the right prefix.

The downside of this approach is that users compiling a program using volk (Vulkan SDK) might find issues compiling it in other distros.

Any other ideas to fix this conflict?


Could the vulkan-tools get an option for volk include/static lib location? It could also get some form of autodetection to find the correct path. Or if the vulkan-tools is the only consumer, maybe try to convince upstream to change the name to vulkan-volk.

It seems there are currently 4 packages consuming gnuradio volk, one of them is not maintained by me. I think rename/re-review here and updates for seamless transition would be quite painful process.

Could the vulkan-tools get an option for volk include/static lib location?

At least downstream, yes. Not sure if upstream would be interested in the change.

If we patch (vulkan-)volk to prefix the installed files like:

/usr/include/vulkan_volk/volk.h
/usr/include/vulkan_volk/volk.c
/usr/lib64/libvulkan_volk.a
/usr/lib64/cmake/vulkan_volk/volkTargets.cmake
/usr/lib64/cmake/vulkan_volk/volkTargets-release.cmake
/usr/lib64/cmake/vulkan_volk/volkConfig.cmake
/usr/lib64/cmake/vulkan_volk/volkConfigVersion.cmake

But we keep the CMake namespace (which shouldn't create conflicts???), the only change required in vulkan-tools is:

- find_package(volk QUIET CONFIG)
+ find_package(volk QUIET CONFIG NAMES volk vulkan_volk)

maybe try to convince upstream to change the name to vulkan-volk

There are already 2 issues in the vulkan-volk repo to fix this problem:

But I don't think the maintainer is open to rename the library.

After additional analysis on my side I have decided to follow this approach:

At the moment of writing this, vulkan-volk is a build dependency of vulkan-tools. Therefore, for the moment, there is no need to install it unless you want to use it for development purposes. Given that it's unlikely that a developer would be working both with vulkan-volk and volk, I'll add Conflicts tags to both packages.

If in the future, we'd prefer to remove the Conflicts tags, it'd be possible to prefix the .h, .c and .a files installed by vulkan-volk without breakage as the .cmake files would have the same name.

Metadata Update from @jexposit:
- Issue close_status updated to: accepted
- Issue status updated to: Closed (was: Open)

9 months ago

Log in to comment on this ticket.

Metadata