graphics/rawtherapee: pin GCC version to 13.

Apparently GCC 14 has new libstdc++ bits spill over somewhere,
and this would break rawtherapee's build at link time,
salvadore@ wrote

/usr/local/bin/ld: /tmp/ccgto6pJ.ltrans65.ltrans.o: in function `Spot::~Spot() [clone .cold]':
<artificial>:(.text.unlikely+0x89d): undefined reference to `__cxa_call_terminate'
/usr/local/bin/ld: /tmp/ccgto6pJ.ltrans76.ltrans.o: in function `(anonymous namespace)::dfInfo::updateBadPixelList(rtengine::RawImage const*) [clone ._omp_fn.0] [clone .cold]':
<artificial>:(.text.unlikely+0x93): undefined reference to `__cxa_call_terminate'
/usr/local/bin/ld: /tmp/ccgto6pJ.ltrans77.ltrans.o: in function `rtengine::ImProcFunctions::RGB_denoise(int, rtengine::Imagefloat*, rtengine::Imagefloat*, rtengine::Imagefloat*, float*, float*, float*, bool, rtengine::procparams::DirPyrDenoiseParams const&, double, rtengine::NoiseCurve const&, rtengine::NoiseCurve const&, float&, float&) [clone ._omp_fn.2] [clone .cold]':
<artificial>:(.text.unlikely+0x1d9): undefined reference to `__cxa_call_terminate'
/usr/local/bin/ld: /tmp/ccgto6pJ.ltrans81.ltrans.o: in function `rtengine::init(rtengine::Settings const*, Glib::ustring const&, Glib::ustring const&, bool) [clone ._omp_fn.0] [clone .lto_priv.0] [clone .cold]':
<artificial>:(.text.unlikely+0x4be): undefined reference to `__cxa_call_terminate'
/usr/local/bin/ld: /tmp/ccgto6pJ.ltrans84.ltrans.o: in function `rtengine::ImProcFunctions::ciecamloc_02float(rtengine::local_params&, int, rtengine::LabImage*, int, int, int, int, LUT<float> const&, bool, LUT<float> const&, bool, LUT<float> const&, bool, LUT<float> const&, bool, LUT<float> const&, bool, rtengine::LocCHCurve const&, rtengine::LocHHCurve const&, rtengine::LocLHCurve const&, bool, bool, bool, rtengine::LocwavCurve const&, bool, float&, float&, float&) [clone ._omp_fn.11] [clone .lto_priv.0] [clone .cold]':
<artificial>:(.text.unlikely+0x5f): undefined reference to `__cxa_call_terminate'

And this seems to be https://gcc.gnu.org/pipermail/libstdc++/2023-May/056011.html
related to C++ standards compliance - however __cxa_call_terminate
specifically is a libstdc++ export function, unavailable in libc++.

Rawtherapee needs to link against libc++ because otherwise all
C++ libraries it imports would also have to be compiled against
libstdc++.

Reported by:	Lorenzo salvadore@
PR:		284487
This commit is contained in:
Matthias Andree 2025-01-31 22:37:37 +01:00
parent 6755cb1435
commit 7c091b1abc

View file

@ -113,7 +113,14 @@ OPENMP_LDFLAGS= -lm -lomp
# up to twice as fast as clang-16.0 compiled code.
# So we shall stick to a modern GCC for now.
#
USE_GCC= yes # default
# However, libstdc++14 appears to have some parts spill over into
# GCC14, and that breaks at link time with a linker error
# `undefined reference to `__cxa_call_terminate'
# that stems from our using the FreeBSD base system libc++
# because otherwise all other C++ libraries would have to
# be compiled with libstdc++ instead.
# See https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=284487
USE_GCC= 13 # default as of 2025-01-31
.if (${OPSYS} == FreeBSD) && (${OSVERSION} >= 1500000)
# don't waste everybody's time with Tier-2 and moving targets.