Package: libre2-dev
Version: 20240702-3
Severity: normal
X-Debbugs-Cc: abs...@packages.debian.org

Hi!

At work we just noticed that as part of the abseil transition,
libabsl-dev had migrated to trixie, before re2 had been rebuilt
against the newer version, and that was causing ABI issues, due
to missing symbols.

For most other packages that would be fine, because the old libabsl
shared library was present, but for libre2 this is problematic,
because libre2-dev itself exposes the libabsl-dev API (and ABI), so
the problem is that for a while in testing there was a libre2-dev and
libre2 that was linked against libabsl20230802, with its own libre2
symbols encoding the ABI for libabsl20230802, while libabsl-dev was
encoding the ABI for the libabsl20240722 library. So linking code
against libre2 would produce libre2 symbols with the new libabsl20240722
ABI, which would not be present in the installed libre2.

I think this should not happen, and should be protected by the
dependency system, but for that libabsl-dev would need to provide its
ABI information in some way so that src:re2 could get it and then
add it into its libre2-dev binary package dependency.

The way I think this could be solved is for libabsl-dev to expose its
ABI via a virtual package, containing both the value of
ABSL_LTS_RELEASE_VERSION and ABSL_OPTION_INLINE_NAMESPACE_NAME (for
example currently that could be «libabsl-dev-abi (= 20240722-debian7)»,
or maybe libabsl-abi instead of libabsl-dev-abi). Then this same
information could also be exposed via one of the .pc files (the version
is already exposed «pkgconf --modversion absl_config», but not the
inline namespace), or alternatively could already be fetched via the
macros, say with:

  version=$(
    echo -e '#include <absl/base/config.h>\nABSL_LTS_RELEASE_VERSION' \
    | cpp -P -
  )
  namespace=$(
    echo -e '#include <absl/base/options.h>\nABSL_OPTION_INLINE_NAMESPACE_NAME' 
\
    | cpp -P -
  )

Then src:re2 could query that information via pkgconf and add this into
its own libre2-dev binary packages dependency as in:

  Package: libre2-dev
  Depends:
   libabsl-dev,
   libabsl-dev-abi (= ${absl:libabsl-dev-abi}),
   ...

Or something along those lines. If you, agree with the problem, then
we could file a report against libabsl-dev and mark it as blocking
for this one. (I've CCed the abseil maintainer for context and input.)

Thanks,
Guillem

Reply via email to