Hi Jay,

On 2026-08-11 16:01:02 +0200, Chris Hofstaedtler wrote:
> Control: reassign -1 release.debian.org
> 
> * Jay Berkenbilt <[email protected]> [260811 14:23]:
> > Package: qa.debian.org
> 
> Reassigning this to release.d.o, as qa.d.o is only the messenger.
> 
> > Severity: important
> > X-Debbugs-Cc: [email protected], [email protected]
> > 
> > I've been a Debian Developer since 2005 ([email protected]), but for many
> > years, I've been maintaining only qpdf, for which I am also upstream.
> > I apologize if I have just forgotten or overlooked some standard
> > process here.
> > 
> > Tl;Dr: libcupsfilters and r-cran-qpdf are blocking transition of qpdf,
> > and I think the resolution is to just rebuild them. This is not an
> > issue of ABI breakage in qpdf itself.
> > 
> > Justification for important: the result of this issue is that printing
> > breaks for people on unstable when the install the latest qpdf. See
> > bugs 1144072 and 1144111.
> > 
> > In the latest upstream release, qpdf started using C++-20 features
> > internally, while the API remains C++-17-compatible. With the upload
> > of 12.4.0-1 to unstable, several regressions were introduced:
> > 
> > https://qa.debian.org/excuses.php?package=qpdf
> > 
> > These are for packages whose binary packages haven't been built
> > recently enough to link with a C++ library that contains all the C++
> > functions. In particular, the builds are failing because this symbol
> > is not found:
> > 
> > std::__cxx11::basic_string<char, std::char_traits<char>, 
> > std::allocator<char>>::_M_replace(unsigned long, unsigned long, char 
> > const*, unsigned long)
> > 
> > This is an overload of std::string::replace that was introduced in
> > C++-20.
> 
> I'm not the expert, but  the libcupsfilter log says:
> https://ci.debian.net/packages/libc/libcupsfilters/testing/arm64/74208469/
> /usr/bin/aarch64-linux-gnu-ld.bfd: 
> /usr/lib/gcc/aarch64-linux-gnu/15/../../../aarch64-linux-gnu/libcupsfilters.so:
> undefined reference to `std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned long,
> unsigned long, char const*, unsigned long)@LIBQPDF_30'

These symbols should have never existed in the first place. These are
symbols from template instantiations of the standard library that
shouldn't have gained a LIBQPDF_30 symbol version. Did upstream clean up
their build system to no longer export those symbols with that symbol
version?

qpdf/libqpdf.map.in still seems to broad so that I think this
still needs some work upstream first to only apply the symbol version to
the actual symbols from libqpdf.

Cheers

> 
> Note the @LIBQPDF_30 suffix - this is not a symbol that never existed. This
> symbol did exist, but disappeared!
> That sounds like real ABI breakage.
> 
> > My recollection is that this situation should automatically trigger
> > binary NMU (or rebuild or whatever it is these days) of the binary
> > packages, currently libcupsfilters and r-cran-qpdf, but it's been a
> > couple of days since upload, so I'm not sure if I have to do something
> > to poke this.
> > 
> > Please let me know:
> > * If I just waited, would this "automatically" resolve?
> > * If I have to poke, is this the right place to poke?
> > * Have I misdiagnosed this? If so, I can create a patch that removes
> >  the C++-20 call, but I don't think it should be necessary to do
> >  that. I plan on introducing additional C++-20 calls in upcoming qpdf
> >  versions.
> > 
> 

-- 
Sebastian Ramacher

Reply via email to