Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ABI breakage of libmircore.so.1 with v2.8.0 vs v1.8.2 #2465

Closed
JamiKettunen opened this issue Jun 12, 2022 · 3 comments · Fixed by #2466 or #2562
Closed

ABI breakage of libmircore.so.1 with v2.8.0 vs v1.8.2 #2465

JamiKettunen opened this issue Jun 12, 2022 · 3 comments · Fixed by #2466 or #2562
Labels

Comments

@JamiKettunen
Copy link
Contributor

JamiKettunen commented Jun 12, 2022

Attempting to launch Lomiri shell with libmircore.so.1 from v2.8.0 (same, conflicting soname with v1.8.2) causes the following error:

lomiri: symbol lookup error: /usr/lib64/libmirplatform.so.18: undefined symbol: _ZN3mir8geometrylsERSoRKNS0_5PointE, version MIR_CORE_0.25

Simply replacing the shared library file with a known working one from v1.8.2 resolves the issue immediately (with everything else being libraries from v1.8.2).

Here's my x86_64 glibc samples of the libraries if they could be useful: libmircore-shared-libraries.zip

My suggestion: bump soname of libmircore.so.1 to libmircore.so.2 on main, but perhaps there's something I'm missing

@AlanGriffiths
Copy link
Contributor

$ c++filt _ZN3mir8geometrylsERSoRKNS0_5PointE
mir::geometry::operator<<(std::basic_ostream<char, std::char_traits<char> >&, mir::geometry::Point const&)

@AlanGriffiths
Copy link
Contributor

Yes, this looks like an ABI break to me:

$ git diff release/1.8 release/2.8 include/core/mir/geometry/point.h 
diff --git a/include/core/mir/geometry/point.h b/include/core/mir/geometry/point.h
index 943f8e8893..e9ee971c13 100644
--- a/include/core/mir/geometry/point.h
+++ b/include/core/mir/geometry/point.h
@@ -12,58 +12,26 @@
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * Authored by: Alexandros Frantzis <alexandros.frantzis@canonical.com>
  */
 
 #ifndef MIR_GEOMETRY_POINT_H_
 #define MIR_GEOMETRY_POINT_H_
 
+#include "point_generic.h"
 #include "dimensions.h"
-#include <iosfwd>
 
 namespace mir
 {
 namespace geometry
 {
-
-struct Point
+struct Size;
+struct Displacement;
+struct Point : generic::Point<detail::IntWrapper>
 {
-    constexpr Point() = default;
-    constexpr Point(Point const&) = default;
-    Point& operator=(Point const&) = default;
-
-    template<typename XType, typename YType>
-    constexpr Point(XType&& x, YType&& y) : x(x), y(y) {}
-
-    X x;
-    Y y;
+    using SizeType = Size;
+    using DisplacementType = Displacement;
+    using generic::Point<detail::IntWrapper>::Point;
 };
-
-inline constexpr bool operator == (Point const& lhs, Point const& rhs)
-{
-    return lhs.x == rhs.x && lhs.y == rhs.y;
-}
-
-inline constexpr bool operator != (Point const& lhs, Point const& rhs)
-{
-    return lhs.x != rhs.x || lhs.y != rhs.y;
-}
-
-inline constexpr Point operator+(Point lhs, DeltaX rhs) { return{lhs.x + rhs, lhs.y}; }
-inline constexpr Point operator+(Point lhs, DeltaY rhs) { return{lhs.x, lhs.y + rhs}; }
-
-inline constexpr Point operator-(Point lhs, DeltaX rhs) { return{lhs.x - rhs, lhs.y}; }
-inline constexpr Point operator-(Point lhs, DeltaY rhs) { return{lhs.x, lhs.y - rhs}; }
-
-inline Point& operator+=(Point& lhs, DeltaX rhs) { lhs.x += rhs; return lhs; }
-inline Point& operator+=(Point& lhs, DeltaY rhs) { lhs.y += rhs; return lhs; }
-
-inline Point& operator-=(Point& lhs, DeltaX rhs) { lhs.x -= rhs; return lhs; }
-inline Point& operator-=(Point& lhs, DeltaY rhs) { lhs.y -= rhs; return lhs; }
-
-std::ostream& operator<<(std::ostream& out, Point const& value);
 }
 }
-
 #endif /* MIR_GEOMETRY_POINT_H_ */

@AlanGriffiths
Copy link
Contributor

AlanGriffiths commented Jun 13, 2022

FWIW, this breakage comes from #1858 (after which we ought to have bumped the soname)

bors bot added a commit that referenced this issue Jun 14, 2022
2466: Bump mircore soname r=RAOF a=AlanGriffiths

Fixes: #2465

Co-authored-by: Alan Griffiths <alan@octopull.co.uk>
@bors bors bot closed this as completed in fbe99fb Jun 14, 2022
bors bot added a commit that referenced this issue Aug 30, 2022
2562: Release 2.9.0 r=AlanGriffiths a=AlanGriffiths

## ABI summary:
* miral ABI bumped to 5
* mircommon ABI unchanged at 9
* mircookie ABI unchanged at 2
* mircore ABI bumped to 2
* miroil ABI bumped to 2
* mirplatform ABI unchanged at 23
* mirserver ABI unchanged at 58
* mirwayland ABI unchanged at 3
* mirplatformgraphics ABI unchanged at 20
* mirinputplatform ABI unchanged at 8
## Enhancements:
* [Wayland] Implement zwp_idle_inhibit_manager_v1
* [Wayland] Implement zwlr_virtual_pointer_v1
* [Wayland] Implement zwp_text_input_manager_v1 (Electron works with OSK)
* [Wayland] Bump wl_seat to v8 and implement hi-res scrolling (Fixes: #2176, Fixes: #2499)
* [Wayland platform] improve failed to connect error
* [Wayland platform] Port to xdg-shell (Fixes #1903, Fixes: #2434)
* [MirAL] Allow `--add-wayland-extenions all`
* [MirAL] Allow servers to get repeated string options
* [MirAL] Improvement to ExternalClientLauncher: Don't force clients to split command lines themselves
* [MirAL] Tidy up event filtering API
* [MirAL] Expose miral::Zone::id()
* [Input] Filter 2 distinct bogus touch event scenarios (UBports)
* [gbm-kms] new driver quirk to disable KMS modeset probe
* [gbm-kms] Add defaults to driver-quirks for nvidia and evdi (Fixes: #2467)
* [gbm-kms] Add defaults to driver-quirks for vc4-drm and v3d
* [mir-smoke-test-runner] Enable working in a Wayland only environment
## Bugs fixed:
* Fix ABI breakage of libmircore.so.1 with v2.8.0 vs v1.8.2 (Fixes #2465)
* [Wayland] Text Input v2: do not use commit count as serial
* [Wayland] Send keyboard modifiers after keyboard enter (Fixes: #2535, Fixes: #2025)
* [Wayland] wlr-screencopy-v1: send .damage event as required (wayvnc fix)
* [Wayland] wlr-screencopy-v1: Waits until the copy area has been damaged in `.copy_with_damage` request (wayvnc fix)
* [MirAL] Unblock signals before execing child processes (Fixes: #1284)
* [eglstream-kms] Kill clients, not Mir, when they submit bad EGLStreams (Fixes: #2061)
* [eglstream-kms] Handle EGL errors in devnum_for_device (Fixes: #2426)
* [test clients] Explicitly ask for a GLESv2 context (Fixes: #2440)
* [renderers/gl] Clear framebuffer to opaque black (Fixes: #2427)
* CMake cleanup for locally built dependencies (Fixes: #2507, Fixes: #2261)
* Fix event timestamps (Fixes: #2577)

Co-authored-by: Alan Griffiths <alan@octopull.co.uk>
Co-authored-by: bors[bot] <26634292+bors[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants