graphics/rawtherapee: update to 5.10

ChangeLog:	https://rawtherapee.com/downloads/5.10/#new-features

We need to stick to GCC because LLVM-compiled code may take more than
twice as much processing time as GCC-compiled does, for my test set
comparing a few images with denoising and stuff on FreeBSD-14.0-RELEASE
amd64 comparing GCC 12.3 to clang 16.0, and similar values on
FreeBSD-13.2-RELEASE.

Pin GCC to 12 and override -stdlib accordingly, to fix
PR:		273682

Clean up Makefile a bit, but we cannot let go of the CCACHE
workarounds yet, which we need when enforcing GCC compile.
Convert some .if branches to options helpers.

Make LTO an option that defaults to on. For some strange reason,
massively-parallel compilation WITHOUT LTO appears to trigger
OOM kills much more than an LTO-enabled build.  Upstream states
that LTO build should run faster.

For one self-test that fails frequently with SIGPIPE (Exit code 141 is
128 for core dump + 13 for SIGPIPE), pipe through dd with bigger input
buffer to avoid SIGPIPE/exit code 141 test failures.

Replace echo by ${ECHO_CMD} in self-tests to appease portlint.
Portlint misdetects "file system" as bare use of file though and
suggests ${FILE}, which is wrong.

Revise warnings around the CCACHE hacks because
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=277204
strives to move ports to CCACHE_ENABLED, which does not work for this
port.

Also, 5.10 should fix the profile/locale related crash
PR:		257255
by switching the std::map variable to use std::string as index,
rather than Glib::ustring, which caused inconsistencies with locales.
Upstream references (two bug reports, and the fix, in order):
https://github.com/Beep6581/RawTherapee/issues/6357
https://github.com/Beep6581/RawTherapee/issues/6876
a95a58a8a3
This commit is contained in:
Matthias Andree 2024-02-21 00:24:23 +01:00
parent 8972ab311c
commit 7e027ece12
3 changed files with 68 additions and 46 deletions

View File

@ -1,6 +1,6 @@
PORTNAME= rawtherapee
PORTVERSION= 5.9
PORTREVISION= 6
PORTVERSION= 5.10
PORTREVISION= 0
CATEGORIES= graphics
MASTER_SITES= https://rawtherapee.com/shared/source/ \
LOCAL/mandree/
@ -12,8 +12,8 @@ WWW= https://www.rawtherapee.com/
LICENSE= GPLv3
LIB_DEPENDS= \
liblensfun.so:graphics/lensfun \
libcanberra-gtk3.so:audio/libcanberra-gtk3 \
libexiv2.so:graphics/exiv2 \
libexpat.so:textproc/expat2 \
libfftw3.so:math/fftw3 \
libfftw3f.so:math/fftw3-float \
@ -21,23 +21,26 @@ LIB_DEPENDS= \
libfreetype.so:print/freetype2 \
libiptcdata.so:graphics/libiptcdata \
liblcms2.so:graphics/lcms2 \
liblensfun.so:graphics/lensfun \
libpng.so:graphics/png \
libsigc-2.0.so:devel/libsigc++20 \
libtiff.so:graphics/tiff
USES= cmake desktop-file-utils compiler:gcc-c++11-lib gnome \
# We cannot use gcc-c++11-lib as of 2024-02-23 because
# Uses/compiler.mk would use the default compiler instead
# as though USE_GCC=yes had been set.
USES= cmake desktop-file-utils compiler:c++11-lib gnome \
jpeg localbase:ldflags pkgconfig tar:xz
# Binutils required for LTO (base ar/nm/ld/ranlib don't work)
USE_BINUTILS= yes
# As of 2019-09-29, this port is known to be miscompiled by clang90
# (SIGSEGV or SIBGUS).
# So we shall stick to a modern GCC for now,
# XXX FIXME note that rawtherapee is somewhat sensitive
# versus compiler details so we may need to pin GCC 9.x
# or a version range.
USE_GCC= yes
# Older clang versions (for instance clang 9.0, as of 2019-09-29),
# were known to miscompile RawTherapee, causing SIGSEGV or SIBGUS.
# As of 2024-02, GCC-12.3 compiled RawTherapee appears to be
# up to twice as fast as clang-16.0 compiled code.
# So we shall stick to a modern GCC for now.
#
# Unfortunately, we can't even upgrade to GCC 13 because that fails
# with our header files, see https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=273682
USE_GCC= 12
USE_GNOME= gtkmm30 librsvg2
@ -71,8 +74,8 @@ CMAKE_ARGS+= -DDOCDIR="${DOCSDIR}" \
# any more. The CMP0056 policy must be explicitly set to NEW to ensure
# linker flags are passed. Else -lomp is not found with clang.
# See: https://cmake.org/cmake/help/v3.4/policy/CMP0056.html
CFLAGS+= -I${LOCALBASE}/include -fPIC ${_LTO_FLAGS} ${_OPT_FLAGS}
LDFLAGS+= -Wl,--as-needed -lpthread ${_LTO_FLAGS} ${_OPT_FLAGS}
CFLAGS+= -I${LOCALBASE}/include -fPIC ${_OPT_FLAGS}
LDFLAGS+= -Wl,--as-needed -lpthread ${_OPT_FLAGS}
.if defined(PACKAGE_BUILDING) && empty(CFLAGS:M-march*) && (${ARCH} == i386 || ${ARCH} == amd64 || ${ARCH} == aarch64)
# this gets translated to -mtune=generic, see ${WRKSRC}/ProcessorTargets.cmake
@ -81,42 +84,40 @@ LDFLAGS+= -Wl,--as-needed -lpthread ${_LTO_FLAGS} ${_OPT_FLAGS}
CMAKE_ARGS+= -DPROC_TARGET_NUMBER="1"
.endif
# XXX FIXME - check this every few months, cmake might be fixed one day
# For gcc-based builds, rawtherapee's cmake ends up with GCC's absolute path
# in the CC/CXX variables, effectively disabling ccache. Wrap compiler in ccache explicitly.
# CCACHE_ENABLED does not get enabled soon enough as of dceadb6b0011 in February 2024,
# so we need to re-do what bsd.ccache.mk does.
# See also https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=277204
# NB: When changing this, make sure that the compiler is still wrapped by ccache!
.if "${WITH_CCACHE_BUILD}" == "yes" && !defined(NO_CCACHE)
CMAKE_ARGS+= -DCMAKE_C_COMPILER_LAUNCHER=${CCACHE_BIN} \
-DCMAKE_CXX_COMPILER_LAUNCHER=${CCACHE_BIN}
.endif
OPTIONS_DEFINE= DOCS NATIVE
OPTIONS_DEFINE= DOCS NATIVE LTO
OPTIONS_DEFINE_amd64= OPENMP
OPTIONS_DEFINE_i386= OPENMP
OPTIONS_DEFAULT= OPENMP
OPTIONS_DEFAULT= OPENMP LTO
NATIVE_DESC= Use -march=native (avoid for generic packages!)
OPENMP_DESC= Enable OpenMP parallel processing (i386/amd64 only)
LTO_CFLAGS= ${_LTO_FLAGS}
LTO_LDFLAGS= ${_LTO_FLAGS}
NATIVE_CMAKE_ON= -DPROC_TARGET_NUMBER="2"
OPENMP_CMAKE_BOOL= OPTION_OMP
OPENMP_LDFLAGS= -lm -lomp
.include <bsd.port.options.mk>
# -------------------------------------------------------------------
.if (${OPSYS} == FreeBSD) && (${OSVERSION} >= 1400000)
.if (${OPSYS} == FreeBSD) && (${OSVERSION} >= 1500000)
# don't waste everybody's time with Tier-2 and moving targets.
# might add ARM64 later on if they are established by the
# time FreeBSD 13 is out.
ONLY_FOR_ARCHS= amd64
ONLY_FOR_ARCHS_REASON=only amd64 is supported on non-released FreeBSD versions
.endif
.if ${PORT_OPTIONS:MNATIVE}
CMAKE_ARGS+= -DPROC_TARGET_NUMBER="2"
.endif
.if !empty(PORT_OPTIONS:MOPENMP) && !empty(OPTIONS_DEFINE:MOPENMP)
OPENMP_FLAGS= -lm -lomp
LDFLAGS+= ${OPENMP_FLAGS}
.endif
.if defined(WITH_DEBUG)
STRIP=
CMAKE_BUILD_TYPE= None # Arch Linux packaging trick to avoid cmake overriding our flags
@ -127,12 +128,9 @@ _OPT_FLAGS= -O3 -funroll-loops
# x86_64/amd64 includes -msse2 by default
.if ${ARCH} == i386
# and SSE2 has been around since the year 2003 latest
# -mstackrealign: workaround for values passed on the stack that cause SIGBUS on SSE2
# -msse2: SSE2 has been around since the year 2003 latest
_OPT_FLAGS+= -msse2
.endif
# workaround for values passed on the stack that cause SIGBUS on SSE2
.if ${ARCH} == i386
_OPT_FLAGS+= -mstackrealign
.endif
@ -140,11 +138,15 @@ _OPT_FLAGS+= -mstackrealign
.include <bsd.port.pre.mk>
.if ${COMPILER_FEATURES:Mlibc++}
CXXFLAGS+= -stdlib=libc++
.endif
post-patch:
@${REINPLACE_CMD} -e 's#DESTINATION "$${CMAKE_INSTALL_PREFIX}/share/man/man1"#DESTINATION "${PREFIX}/share/man/man1/"#' \
${WRKSRC}/CMakeLists.txt
TESTIMAGES= ${FILESDIR}/../testimages
TESTIMAGES= ${MASTERDIR}/testimages
# paranoia: run rawtherapee to be sure it finds all its
# shared libraries (this hinges on proper RPATH setting and propagation)
@ -170,20 +172,20 @@ post-install:
(cd ${WRKSRC}/rtdata/ && ${COPYTREE_SHARE} "profiles dcpprofiles" ${WRKDIR}/rt-config ) ; \
(set -x ; TMP=$$(${MKTEMP} -d -t ${PORTNAME}) && trap "rc=$$? ; ${RM} -rf \"$$TMP\" ; exit \$$rc" 0 && \
( set +e ; ${SETENV} ${_env} ${STAGEDIR}${PREFIX}/bin/rawtherapee -v ; \
echo $$? >&3 ) 3>&3 | ${EGREP} -q "RawTherapee, version ${_check_version:C/_.*//:C/,.*//}|cannot open display:" && \
( set +e ; ${SETENV} ${_env} ${STAGEDIR}${PREFIX}/bin/rawtherapee-cli ; \
echo $$? >&3 ) 3>&3 | ${EGREP} -q "RawTherapee, version ${_check_version:C/_.*//:C/,.*//}" && \
${ECHO_CMD} $$? >&3 ) 3>&3 | ${EGREP} -q "RawTherapee, version ${_check_version:C/_.*//:C/,.*//}|cannot open display:" && \
( set +e ; ${SETENV} ${_env} ${STAGEDIR}${PREFIX}/bin/rawtherapee-cli | dd ibs=8k ; \
${ECHO_CMD} $$? >&3 ) 3>&3 | ${EGREP} -q "RawTherapee, version ${_check_version:C/_.*//:C/,.*//}" && \
expect=$$'0\n0\n' && \
onefile=$$(ls "${TESTIMAGES}"/* | head -1) && \
if test -d "${TESTIMAGES}" && test -n "$$onefile" -a -r "$$onefile" ; then \
expect=$$'0\n0\n0\n0\n0\n' && \
( set +e ; \
/usr/bin/time ${SETENV} ${_env} ${STAGEDIR}${PREFIX}/bin/rawtherapee-cli \
-o "$$TMP" -q -f -c ${TESTIMAGES} ; echo $$? >&3 ; \
-o "$$TMP" -q -f -c ${TESTIMAGES} ; ${ECHO_CMD} $$? >&3 ; \
/usr/bin/time ${SETENV} ${_env} ${STAGEDIR}${PREFIX}/bin/rawtherapee-cli \
-o "$$TMP" -q -s -Y -c ${TESTIMAGES} ; echo $$? >&3 ; \
-o "$$TMP" -q -s -Y -c ${TESTIMAGES} ; ${ECHO_CMD} $$? >&3 ; \
/usr/bin/time ${SETENV} ${_env} ${STAGEDIR}${PREFIX}/bin/rawtherapee-cli \
-o "$$TMP" -q -s -Y -tz -c ${TESTIMAGES} ; echo $$? >&3 ) 3>&3 ; \
-o "$$TMP" -q -s -Y -tz -c ${TESTIMAGES} ; ${ECHO_CMD} $$? >&3 ) 3>&3 ; \
fi ; \
ls -Rlbai "${TESTIMAGES}" "$${TMP}" || :; \
${PRINTF} "%s" "$$expect" >&4 ) ) 3>${WRKDIR}/selftest.exitcodes 4>${WRKDIR}/selftest.expect ; \

View File

@ -1,3 +1,3 @@
TIMESTAMP = 1669839111
SHA256 (rawtherapee-5.9.tar.xz) = 8eaf28c428185c165ef5a28f69595dc77a1c98826065a1f51a28c86c7b0d4823
SIZE (rawtherapee-5.9.tar.xz) = 16219076
TIMESTAMP = 1708462303
SHA256 (rawtherapee-5.10.tar.xz) = a799b53cd54dba4a211479e342ffc9c5db1c44d3d6c3a27d5cc13adf0debd2da
SIZE (rawtherapee-5.10.tar.xz) = 16943724

View File

@ -21,6 +21,7 @@ share/metainfo/com.rawtherapee.RawTherapee.appdata.xml
%%DATADIR%%/dcpprofiles/Canon EOS 100D.dcp
%%DATADIR%%/dcpprofiles/Canon EOS 1300D.dcp
%%DATADIR%%/dcpprofiles/Canon EOS 20D.dcp
%%DATADIR%%/dcpprofiles/CANON EOS 250D.dcp
%%DATADIR%%/dcpprofiles/Canon EOS 400D.dcp
%%DATADIR%%/dcpprofiles/Canon EOS 40D.dcp
%%DATADIR%%/dcpprofiles/Canon EOS 450D.dcp
@ -37,8 +38,10 @@ share/metainfo/com.rawtherapee.RawTherapee.appdata.xml
%%DATADIR%%/dcpprofiles/Canon EOS 6D.dcp
%%DATADIR%%/dcpprofiles/Canon EOS 7D Mark II.dcp
%%DATADIR%%/dcpprofiles/Canon EOS 7D.dcp
%%DATADIR%%/dcpprofiles/CANON EOS 800D.dcp
%%DATADIR%%/dcpprofiles/Canon EOS 90D.dcp
%%DATADIR%%/dcpprofiles/Canon EOS D60.dcp
%%DATADIR%%/dcpprofiles/CANON EOS M50.dcp
%%DATADIR%%/dcpprofiles/Canon EOS M6 Mark II.dcp
%%DATADIR%%/dcpprofiles/Canon EOS R.dcp
%%DATADIR%%/dcpprofiles/Canon EOS R5.dcp
@ -50,19 +53,24 @@ share/metainfo/com.rawtherapee.RawTherapee.appdata.xml
%%DATADIR%%/dcpprofiles/Canon PowerShot G1 X Mark II.dcp
%%DATADIR%%/dcpprofiles/Canon PowerShot G10.dcp
%%DATADIR%%/dcpprofiles/Canon PowerShot G12.dcp
%%DATADIR%%/dcpprofiles/CANON POWERSHOT G5 X MARK II.dcp
%%DATADIR%%/dcpprofiles/Canon PowerShot G7 X.dcp
%%DATADIR%%/dcpprofiles/Canon PowerShot S110.dcp
%%DATADIR%%/dcpprofiles/Canon PowerShot S120.dcp
%%DATADIR%%/dcpprofiles/FUJIFILM DBP for GX680.dcp
%%DATADIR%%/dcpprofiles/FUJIFILM FinePix F600EXR.dcp
%%DATADIR%%/dcpprofiles/Fujifilm FinePix S9500.dcp
%%DATADIR%%/dcpprofiles/FUJIFILM GFX 50R.dcp
%%DATADIR%%/dcpprofiles/FUJIFILM X-A5.dcp
%%DATADIR%%/dcpprofiles/FUJIFILM X-A7.dcp
%%DATADIR%%/dcpprofiles/Fujifilm X-E1.dcp
%%DATADIR%%/dcpprofiles/Fujifilm X-E2.dcp
%%DATADIR%%/dcpprofiles/FUJIFILM X-E3.dcp
%%DATADIR%%/dcpprofiles/FUJIFILM X-H1.dcp
%%DATADIR%%/dcpprofiles/FUJIFILM X-Pro2.dcp
%%DATADIR%%/dcpprofiles/FUJIFILM X-Pro3.dcp
%%DATADIR%%/dcpprofiles/FUJIFILM X-S1.dcp
%%DATADIR%%/dcpprofiles/FUJIFILM X-S10.dcp
%%DATADIR%%/dcpprofiles/FUJIFILM X-T1.dcp
%%DATADIR%%/dcpprofiles/FUJIFILM X-T10.dcp
%%DATADIR%%/dcpprofiles/FUJIFILM X-T2.dcp
@ -80,6 +88,7 @@ share/metainfo/com.rawtherapee.RawTherapee.appdata.xml
%%DATADIR%%/dcpprofiles/NIKON D300.dcp
%%DATADIR%%/dcpprofiles/Nikon D3000.dcp
%%DATADIR%%/dcpprofiles/Nikon D3100.dcp
%%DATADIR%%/dcpprofiles/NIKON D3300.dcp
%%DATADIR%%/dcpprofiles/Nikon D3S.dcp
%%DATADIR%%/dcpprofiles/NIKON D50.dcp
%%DATADIR%%/dcpprofiles/NIKON D500.dcp
@ -101,12 +110,15 @@ share/metainfo/com.rawtherapee.RawTherapee.appdata.xml
%%DATADIR%%/dcpprofiles/NIKON D800E.dcp
%%DATADIR%%/dcpprofiles/NIKON D810.dcp
%%DATADIR%%/dcpprofiles/NIKON D850.dcp
%%DATADIR%%/dcpprofiles/NIKON Z 5.dcp
%%DATADIR%%/dcpprofiles/NIKON Z 50.dcp
%%DATADIR%%/dcpprofiles/NIKON Z 6.dcp
%%DATADIR%%/dcpprofiles/NIKON Z 6_2.dcp
%%DATADIR%%/dcpprofiles/NIKON Z 7.dcp
%%DATADIR%%/dcpprofiles/Olympus E-1.dcp
%%DATADIR%%/dcpprofiles/OLYMPUS E-510.dcp
%%DATADIR%%/dcpprofiles/Olympus E-520.dcp
%%DATADIR%%/dcpprofiles/OLYMPUS E-M1.dcp
%%DATADIR%%/dcpprofiles/OLYMPUS E-M10.dcp
%%DATADIR%%/dcpprofiles/OLYMPUS E-M1MarkII.dcp
%%DATADIR%%/dcpprofiles/Olympus E-M5.dcp
@ -129,6 +141,7 @@ share/metainfo/com.rawtherapee.RawTherapee.appdata.xml
%%DATADIR%%/dcpprofiles/Panasonic DMC-GH2.dcp
%%DATADIR%%/dcpprofiles/Panasonic DMC-GX7.dcp
%%DATADIR%%/dcpprofiles/Panasonic DMC-GX85.dcp
%%DATADIR%%/dcpprofiles/PANASONIC DMC-LX100.dcp
%%DATADIR%%/dcpprofiles/PENTAX K-5 II.dcp
%%DATADIR%%/dcpprofiles/PENTAX K-5.dcp
%%DATADIR%%/dcpprofiles/PENTAX K-50.dcp
@ -139,6 +152,7 @@ share/metainfo/com.rawtherapee.RawTherapee.appdata.xml
%%DATADIR%%/dcpprofiles/RICOH PENTAX K-1.dcp
%%DATADIR%%/dcpprofiles/RICOH PENTAX K-3.dcp
%%DATADIR%%/dcpprofiles/samsung SM-G930V.dcp
%%DATADIR%%/dcpprofiles/SONY DSC-RX100M6.dcp
%%DATADIR%%/dcpprofiles/SONY DSLR-A580.dcp
%%DATADIR%%/dcpprofiles/Sony DSLR-A700.dcp
%%DATADIR%%/dcpprofiles/Sony DSLR-A900.dcp
@ -147,11 +161,14 @@ share/metainfo/com.rawtherapee.RawTherapee.appdata.xml
%%DATADIR%%/dcpprofiles/SONY ILCE-6400.dcp
%%DATADIR%%/dcpprofiles/SONY ILCE-6500.dcp
%%DATADIR%%/dcpprofiles/SONY ILCE-6600.dcp
%%DATADIR%%/dcpprofiles/SONY ILCE-7.dcp
%%DATADIR%%/dcpprofiles/SONY ILCE-7C.dcp
%%DATADIR%%/dcpprofiles/SONY ILCE-7M2.dcp
%%DATADIR%%/dcpprofiles/SONY ILCE-7M3.dcp
%%DATADIR%%/dcpprofiles/SONY ILCE-7M4.dcp
%%DATADIR%%/dcpprofiles/SONY ILCE-7RM3.dcp
%%DATADIR%%/dcpprofiles/SONY ILCE-7RM4.dcp
%%DATADIR%%/dcpprofiles/SONY ILCE-7SM3.dcp
%%DATADIR%%/dcpprofiles/SONY ILCE-9.dcp
%%DATADIR%%/dcpprofiles/Sony NEX-5N.dcp
%%DATADIR%%/dcpprofiles/Sony SLT-A55V.dcp
@ -231,6 +248,7 @@ share/metainfo/com.rawtherapee.RawTherapee.appdata.xml
%%DATADIR%%/images/bidirectional-arrow-horizontal-prelight.svg
%%DATADIR%%/images/bidirectional-arrow-vertical-hicontrast.svg
%%DATADIR%%/images/bidirectional-arrow-vertical-prelight.svg
%%DATADIR%%/images/box.svg
%%DATADIR%%/images/cancel-small.svg
%%DATADIR%%/images/cancel.svg
%%DATADIR%%/images/circle-black-small.svg
@ -315,6 +333,8 @@ share/metainfo/com.rawtherapee.RawTherapee.appdata.xml
%%DATADIR%%/images/distortion-pincushion.svg
%%DATADIR%%/images/draw.svg
%%DATADIR%%/images/edit-point.svg
%%DATADIR%%/images/edit-small.svg
%%DATADIR%%/images/edit.svg
%%DATADIR%%/images/empty.png
%%DATADIR%%/images/equilizer-narrow.svg
%%DATADIR%%/images/equilizer-wide.svg