Beep6581 / RawTherapee

A powerful cross-platform raw photo processing program
https://rawtherapee.com
GNU General Public License v3.0
2.87k stars 322 forks source link

Packaging: unversioned libraries installed in /usr/lib #5402

Open ahkok opened 5 years ago

ahkok commented 5 years ago

RawTherapee version 5.6 OS clearlinux version 30700.

Our packaging tool (autospec) detects that rawtherapee's cmake files are installing libraries (not dlopen) files as unversioned .so's into /usr/lib64.

libraries that are supposed to be linked should be versioned by default (libfoo.so.1). The following 2 libraries are included in rawtherapee and are not versioned: /usr/lib64/librtengine.so /usr/lib64/librtexif.so

Note that it's also not picking up the correct default -DLIBDIR and CMAKE_INSTALL_LIBDIR either.

Note: other distros seem to entirely ignore this problem, but that doesn't mean it's not an issue.

mattiaverga commented 5 years ago

This is an issue also for Fedora, would you consider changing library names to a versioned one? https://docs.fedoraproject.org/en-US/packaging-guidelines/#_downstream_so_name_versioning

Beep6581 commented 5 years ago

Sure, :+1: for better compliance. Would you consider submitting a PR? Else this might take a while, i.e. I'm not aware of anyone on the team being fluent in lib packaging and related standards.

You might want to open an issue over at librtprocess's bug tracker: https://github.com/CarVac/librtprocess And maybe talk about it in the forum: https://discuss.pixls.us/t/librtprocess-quo-vadis/10388

As for rtexif, I think we're on the road to getting rid of that - #3801

mattiaverga commented 5 years ago

Having a versioned library name should be quite easy. Accordingly to cmake's manual it only needs setting SOVERSION property to https://github.com/Beep6581/RawTherapee/blob/51e08b82d2be6efca2db95f7c4a9320e02a01471/rtengine/CMakeLists.txt#L175

for Example:

set_target_properties(rtengine 
    PROPERTIES COMPILE_FLAGS "${RTENGINE_CXX_FLAGS}"
    SOVERSION "${SOVERSION}")

Now, the problem is where to set ${SOVERSION}: ideally it should be the RT version, but the version provided in UpdateInfo.cmake is unreliable. We could manually set it in the main CMakeLists.txt or in rtEngine's CMakeLists, but that would require to bump it at every RT version bump.

The soname could also be set to something other than RT version and be changed only when ABI breaks.

Let me know what you prefer and I'll send a PR.

ahkok commented 5 years ago

The soname could also be set to something other than RT version and be changed only when ABI breaks. This is the obvious correct answer here - since it's very low key :)