On Thu, Dec 3, 2015 at 12:00 PM, Kalev Lember <kalevlember@gmail.com> wrote:
On 12/03/2015 07:13 PM, Dave Johansen wrote:
> cppformat 2.0.0 was released [1] and it has several breaking changes. In
> addition to API/ABI changes, the soname changed and the header file was
> relocated. Since this package was recently added to Fedora, I don't know
> if any packages depend on it,

You can use 'dnf repoquery' to find that out. From my quick query, the
only package that depends on cppformat is its own cppformat-devel
subpackage, nothing else.

> so my question is "Is this a "self contained" or "system wide" change [2]?".

I would say neither -- it's just a leaf package update that doesn't
really warrant a feature page :)

Ok, I'll do the update without that then.
 
> On a side note, I'm planning on adding symlinks to the existing
> cppformat package so that these new soname and header locations can be
> used to keep code the same.

Symlinking to old header location probably makes sense, but symlinking
the library to the old soname is probably not a good idea. If it had an
actual ABI change, then old code linking to the old soname would
probably not work with the new, changed ABI and would crash at runtime
or similar if you added the symlinks. (Or if it works fine, then the
soname bump was probably unwarranted.)

Also, symlinks won't help when it comes to the rpm dep autogeneration.
It only looks at the DT_SONAME entry in the binary when autogenerating
provides/requires and doesn't care at all about any symlinks.

My hope was to maintain source compatibility and not binary compatibility. For example, the header file moved from:
/usr/include/format.h
to:
/usr/include/cppformat/cppformat.h

I was planning on updating the stable release with a symlink at:
/usr/include/cppformat/cppformat.h

Then code could just #include <cppformat/cppformat.h> for both 2.0 and 1.1. The built binaries will not be compatible and the code would need to use the subset of the API that was uniform or use conditional compilation, but having a consistent place to look for the header should simplify that.

Thanks,
Dave