• Bug#1103637: libeckit0d: Exception constructor ABI break affecting at l

    From Martin Hostettler@21:1/5 to All on Sat Apr 19 22:50:01 2025
    Package: libeckit0d
    X-Debbugs-Cc: [email protected]
    Version: 1.29.1-1
    Severity: serious
    Justification: Policy 8.1
    Control: affects -1 odc magics++ python-xarray
    Control: block 1100293 by -1

    While investigating a build failure in magics++ [1] i noticed that
    eckit upstream changed their exception constructors extensively in the 1.29 upstream release

    https://github.com/ecmwf/eckit/commit/76990068c35a8cd3d9573585a762ae1a2d2454d5#diff-9b7bfdb8788cc84e5099d6294707382018383d212a4bb93d5b84994771cd71f7

    This of course breaks abi (and API when not using default arguement values).

    In the build of python-xarray this manifests in these errors:

    /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libodccore.so.0d: undefined reference to `eckit::UserError::UserError(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libodccore.so.0d: undefined reference to `eckit::SeriousBug::SeriousBug(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libodccore.so.0d: undefined reference to `eckit::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libodccore.so.0d: undefined reference to `eckit::UserError::UserError(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libodccore.so.0d: undefined reference to `eckit::SeriousBug::SeriousBug(char const*, eckit::CodeLocation const&)'
    /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libodccore.so.0d: undefined reference to `eckit::NotImplemented::NotImplemented(eckit::CodeLocation const&)'
    /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libodccore.so.0d: undefined reference to `eckit::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libodccore.so.0d: undefined reference to `eckit::CantOpenFile::CantOpenFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, eckit::CodeLocation const&, bool)'
    /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libodccore.so.0d: undefined reference to `eckit::FailedSystemCall::FailedSystemCall(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    collect2: error: ld returned 1 exit status

    Which actually show that libodccore.so.0d uses symbols no longer included
    in libeckit0d thus failing the link of any library or application linking
    to libodccore.so.0d.

    As the soname is a debian downstream patch, this might be that upstream
    doesn't consider the abi stable across releases. But in debian we need
    some kind of fix.

    As debian is long past transition freeze, bumping the soname might
    no longer be an option.

    I locally got the broken magics++ build to work by using locally
    rebuild odc packages.

    I might also be possible to restore the old exception constructors in a
    local patch.

    The build failure blocks builds migrating to testing which causes a
    autorm cascade of 140 packages.

    Due to the current freeze status, removal of these packages from trixie
    will likely be permanent if it is going through.

    According to the release team packages failing to migrate is itself a
    RC bug.

    I set severity to serious in part to avoid this break migrating to testing while there is not yet a plan how to fix this.

    Regards,
    - Martin Hostettler


    [1] https://buildd.debian.org/status/fetch.php?pkg=magics%2B%2B&arch=amd64&ver=4.16.0-1&stamp=1744757609&raw=0

    -- System Information:
    Debian Release: trixie/sid
    APT prefers unstable
    APT policy: (500, 'unstable')
    Architecture: amd64 (x86_64)

    Kernel: Linux 6.12.21-amd64 (SMP w/16 CPU threads; PREEMPT)
    Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to C.UTF-8), LANGUAGE not set
    Shell: /bin/sh linked to /usr/bin/dash
    Init: unable to detect

    Versions of packages libeckit0d depends on:
    ii libaec0 1.1.3-1+b1
    ii libbz2-1.0 1.0.8-6
    ii libc6 2.41-7
    ii libcurl3t64-gnutls 8.13.0-2
    ii libgcc-s1 14.2.0-19
    ii libgomp1 14.2.0-19
    ii liblz4-1 1.10.0-4
    ii libopenblas0 0.3.29+ds-3
    ii libopenmpi40 5.0.7-1
    ii libproj25 9.6.0-1
    ii libqhull-r8.0 2020.2-6+b2
    ii libqhullcpp8.0 2020.2-6+b2
    ii librados2 18.2.4+ds-13+b1
    ii librsync2t64 2.3.4-1.1+b1
    ii libsnappy1v5 1.2.2-1
    ii libssl3t64 3.5.0-1
    ii libstdc++6 14.2.0-19
    ii libtinfo6 6.5+20250216-2

    libeckit0d recommends no packages.

    libeckit0d suggests no packages.

    -- no debconf information

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)