<div dir="ltr"><div>On Mon, Feb 6, 2017 at 10:06 AM, Christian Ehrhardt <span dir="ltr"><<a href="mailto:christian.ehrhardt@canonical.com" target="_blank">christian.ehrhardt@canonical.com</a>></span> wrote:<br></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>FYI - a discussion to the ABI bump issues I face.</div><div>I wanted to avoid a full cross-list post - so here a link to check out the backgrounds.</div><div><br></div>  <a href="https://lists.ubuntu.com/archives/ubuntu-devel/2017-February/039659.html" target="_blank">https://lists.ubuntu.com/<wbr>archives/ubuntu-devel/2017-<wbr>February/039659.html</a><br clear="all"><div><br></div></div></blockquote><div><br></div><div><br></div><div><div>There was no feedback to my call yet, but we need a solution - so here my thoughts.</div><div><br></div><div>I first thought on completing the compat packages, but this time right, like</div><div>adding a symlink in d/rules for the pkg and do:<br></div><div><br></div><div><div>+     Package: libethdev4                                                                 <br></div><div>+     Multi-Arch: same                                                                    </div><div>+     Architecture: amd64 arm64 i386 ppc64el                                              </div><div>+     Pre-Depends: ${misc:Pre-Depends}                                                    </div><div>+           Depends: librte-ethdev5, ${misc:Depends}, ${shlibs:Depends}                         </div><div>+     Section: oldlibs                                                                    </div><div>+     Conflicts: libdpdk0                                                                 </div><div>+     Description: Data Plane Development Kit (libethdev runtime library)                 </div><div>+      This is the old libethdev4 ABI provided by the backward compatibility              </div><div>+      of librte-ethdev5.</div></div><div><br></div><div>But that seemed very noisy in d/control and will grow a lot so I was looking for "prior art" to do in a way that already is established.</div><div><br></div><div>I found libcurl</div><div>    /usr/lib/x86_64-linux-gnu/libcurl.so.3 -> libcurl.so.4</div><div>    /usr/lib/x86_64-linux-gnu/libcurl.so.4 -> libcurl.so.4.4.0</div><div>And</div><div>  libhwloc.so.0 -> libhwloc.so.5<br></div><div>  libhwloc.so.1 -> libhwloc.so.5<br></div><div>  libhwloc.so.2 -> libhwloc.so.5<br></div><div>  libhwloc.so.4 -> libhwloc.so.5<br></div><div>And</div><div>  libOSMesa.so.6 -> libOSMesa.so.8</div><div><br></div><div><br></div><div>Following these the change for us would be (the same symlink) plus an additional provides/replaces/conflicts.</div><div>Some only have the provides, but I feel all three are more correct </div><div>      Package: librte-ethdev5                                                          </div><div>      Architecture: amd64 arm64 i386 ppc64el                                           </div><div>      Multi-Arch: same                                                                 </div><div>+     Provides: libethdev4</div><div>+     Replaces: libethdev4</div><div>+     Conflicts: libethdev4</div><div>      Homepage: <a href="http://dpdk.org/doc/api/rte__ethdev_8h.html">http://dpdk.org/doc/api/rte__ethdev_8h.html</a>                            </div><div>      Pre-Depends: ${misc:Pre-Depends}                                                 </div><div>      Depends: ${misc:Depends}, ${shlibs:Depends}                                      </div><div>      Conflicts: libdpdk0                                                              </div><div>      Description: Data Plane Development Kit (libethdev runtime library)              </div><div>       DPDK is a set of libraries for fast packet processing. Applications run         </div><div>       in user-space and communicate directly with dedicated network interfaces.       </div><div>       .                                                                               </div><div>       This package contains the runtime libraries for libethdev.</div><div><br></div><div><div>It is not fully equivalent as in the curl case they still stick to the old libcurl3 names despite providing newer versions as well. Yet I think this can be a template to base on.<br></div></div><div>Especially libhwloc seems close to our case.</div><div><br></div><div>Reading through [1] and [2] makes details a bit blurred.</div><div>I think we surely need the conflicts and maybe the replaces.</div><div>I'm not so sure due to the middle paragraph in [2] if there is a versioned dependency if this will do the trick.</div><div>It might be the case that this only works if the old had a non versioned provides that we are now moving forward and the non versioned dependencies would fix that.</div><div>Yet clearly worth to be tested - even if breaking I'd hope it is much closer to a real solution.</div><div><br></div><div>Also libhwloc has a nice dh_link override to make that in a nice and maintainable way for all arches.</div><div>Need to see if we can borrow that as well.</div><div><br></div><div>If we do so we (might) get rid of the current issue, but we will have to:</div><div>- track any time we drop symbols to remove the respective old provides<br></div><div>- If bumping an ABI testing and adding a matching provides</div><div><br></div><div>I'll create commits and test them, once they are good (and no other feedback convinces me of a better way) they will hit the review queue.</div></div></div><div><br></div><div><div>[1] - <a href="https://www.debian.org/doc/debian-policy/ch-relationships.html#s-virtual">https://www.debian.org/doc/debian-policy/ch-relationships.html#s-virtual</a><br></div><div>[2] - <a href="https://www.debian.org/doc/debian-policy/ch-relationships.html#s-conflicts">https://www.debian.org/doc/debian-policy/ch-relationships.html#s-conflicts</a><br></div><div><br></div></div><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><span style="color:rgb(136,136,136);font-size:12.8px">Christian Ehrhardt</span><div style="color:rgb(136,136,136);font-size:12.8px">Software Engineer, Ubuntu Server</div><div style="color:rgb(136,136,136);font-size:12.8px">Canonical Ltd</div></div></div></div></div>
</div></div>