On Thu Aug 29, 2024 at 12:08:20PM GMT, Stuart Henderson wrote:
> On 2024/08/27 01:54, Stuart Henderson wrote:
> > CVSROOT:    /cvs
> > Module name:        ports
> > Changes by: [email protected]   2024/08/27 01:54:17
> > 
> > Modified files:
> >     graphics/libavif: Makefile distinfo 
> >     graphics/libavif/pkg: PLIST 
> > 
> > Log message:
> > update to libavif-1.1.0, from Brad (maintainer)
> 
> This breaks kf5 and kf6 kimageformats:
> 
> https://exopi.bsdfrog.org/logs/latest/paths/devel/kf6/kimageformats.log
> | [23/69] : && /exopi-obj/pobj/kimageformats-5.116.0/bin/c++ -fPIC 
> -I/usr/local/include -fno-operator-names 
> -Wno-gnu-zero-variadic-macro-arguments -Wall -Wextra -Wcast-align 
> -Wchar-subscripts -Wformat-security -Wno-long-long -Wpointer-arith -Wundef 
> -Wnon-virtual-dtor -Woverloaded-virtual -Werror=return-type -Werror=init-self 
> -Werror=undef -Wvla -Wdate-time -pedantic -Wzero-as-null-pointer-constant 
> -fdiagnostics-color=always -fexceptions -DNDEBUG  -Wl,--fatal-warnings 
> -Wl,--enable-new-dtags  -Wl,-Bsymbolic-functions -shared  -o 
> bin/imageformats/kimg_avif.so 
> src/imageformats/CMakeFiles/kimg_avif.dir/kimg_avif_autogen/mocs_compilation.cpp.o
>  src/imageformats/CMakeFiles/kimg_avif.dir/avif.cpp.o  
> -Wl,-z,origin,-rpath,/usr/local/lib/qt5/.:/usr/local/lib:/usr/X11R6/lib:  
> /usr/local/lib/qt5/./libQt5Gui.so.4.2  /usr/local/lib/libavif.so.7.1  
> /usr/local/lib/qt5/./libQt5Core.so.6.0  -lsharpyuv  -ldav1d  -laom  
> -Wl,-rpath-link,/usr/X11R6/lib:/usr/local/lib && :
> | FAILED: bin/imageformats/kimg_avif.so
> | : && /exopi-obj/pobj/kimageformats-5.116.0/bin/c++ -fPIC 
> -I/usr/local/include -fno-operator-names 
> -Wno-gnu-zero-variadic-macro-arguments -Wall -Wextra -Wcast-align 
> -Wchar-subscripts -Wformat-security -Wno-long-long -Wpointer-arith -Wundef 
> -Wnon-virtual-dtor -Woverloaded-virtual -Werror=return-type -Werror=init-self 
> -Werror=undef -Wvla -Wdate-time -pedantic -Wzero-as-null-pointer-constant 
> -fdiagnostics-color=always -fexceptions -DNDEBUG  -Wl,--fatal-warnings 
> -Wl,--enable-new-dtags  -Wl,-Bsymbolic-functions -shared  -o 
> bin/imageformats/kimg_avif.so 
> src/imageformats/CMakeFiles/kimg_avif.dir/kimg_avif_autogen/mocs_compilation.cpp.o
>  src/imageformats/CMakeFiles/kimg_avif.dir/avif.cpp.o  
> -Wl,-z,origin,-rpath,/usr/local/lib/qt5/.:/usr/local/lib:/usr/X11R6/lib:  
> /usr/local/lib/qt5/./libQt5Gui.so.4.2  /usr/local/lib/libavif.so.7.1  
> /usr/local/lib/qt5/./libQt5Core.so.6.0  -lsharpyuv  -ldav1d  -laom  
> -Wl,-rpath-link,/usr/X11R6/lib:/usr/local/lib && :
> | ld: error: unable to find library -lsharpyuv
> | ld: error: unable to find library -ldav1d
> | ld: error: unable to find library -laom
> | c++: error: linker command failed with exit code 1 (use -v to see 
> invocation)
> | ninja: build stopped: subcommand failed.
> 
> Any ideas? The linker command changed which is obviously why it's
> failing (no -L/usr/local/lib) :
> 
> -[...snip...] 
> -Wl,-z,origin,-rpath,/usr/local/lib/qt5/.:/usr/local/lib:/usr/X11R6/lib:  
> /usr/local/lib/qt5/./libQt5Gui.so.4.2  /usr/local/lib/libavif.so.7.0  
> /usr/local/lib/qt5/./libQt5Core.so.6.0  
> -Wl,-rpath-link,/usr/X11R6/lib:/usr/local/lib && :
> +[...snip...] 
> -Wl,-z,origin,-rpath,/usr/local/lib/qt5/.:/usr/local/lib:/usr/X11R6/lib:  
> /usr/local/lib/qt5/./libQt5Gui.so.4.2  /usr/local/lib/libavif.so.7.1  
> /usr/local/lib/qt5/./libQt5Core.so.6.0  -lsharpyuv  -ldav1d  -laom  
> -Wl,-rpath-link,/usr/X11R6/lib:/usr/local/lib && :
> 
> The pc file did change, ...
> 
>  Name: libavif
>  Description: Library for encoding and decoding .avif files
> -Version: 1.0.4
> +Version: 1.1.0
>  Libs: -L${libdir} -lavif
> +Libs.private: -lyuv
>  Cflags: -I${includedir} -DAVIF_DLL
> +Cflags.private: -UAVIF_DLL
> +Requires.private: libsharpyuv dav1d aom
> 
> ... but "pkg-config --libs libavif" looks ok (has -L/usr/local/lib in
> both old and new versions). Not sure why kimageformats would be wanting
> to pull things in from Requires.private at all (and then, if it's doing
> that, why would it use shared libs, and why would it use them without
> using the linker flag from "pkg-config --libs libsharpyuv"?)
> 
> ...
> 
> https://exopi.bsdfrog.org/logs/latest/paths/devel/kf5/kimageformats.log
> 
> The version in kf5 has the same failure as above, plus additional
> warnings which are probably worth fixing by backporting an upstream
> commit
> 
> | 
> /exopi-obj/pobj/kimageformats-5.116.0/kimageformats-5.116.0/src/imageformats/avif.cpp:622:9:
>  warning: ignoring return value of function declared with 'nodiscard' 
> attribute [-Wunused-result]
> |         avifImageAllocatePlanes(avif, AVIF_PLANES_YUV);
> |         ^~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
> | 
> /exopi-obj/pobj/kimageformats-5.116.0/kimageformats-5.116.0/src/imageformats/avif.cpp:809:13:
>  warning: ignoring return value of function declared with 'nodiscard' 
> attribute [-Wunused-result]
> |             avifImageSetProfileICC(avif, reinterpret_cast<const uint8_t 
> *>(iccprofile.constData()), iccprofile.size());
> |             ^~~~~~~~~~~~~~~~~~~~~~ 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> | 
> /exopi-obj/pobj/kimageformats-5.116.0/kimageformats-5.116.0/src/imageformats/avif.cpp:981:13:
>  warning: ignoring return value of function declared with 'nodiscard' 
> attribute [-Wunused-result]
> |             avifDecoderReset(m_decoder);
> |             ^~~~~~~~~~~~~~~~ ~~~~~~~~~
> | 3 warnings generated.
> 
> ok for this?

Thanks Stuart!

OK. Same patch for kf6:
https://invent.kde.org/frameworks/kimageformats/-/commit/e9da5edb9a9dd518a603d7a19facf0f2fe38dde6

This will not fix the above problem. After looking at kimageformat's
cmake files, I don't see any separate KDE cmake functions.
kimageformats only uses simple cmake functions. Does it make sense to
open a upstream issue? I can do that.

> 
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/kf5/kimageformats/Makefile,v
> diff -u -p -r1.21 Makefile
> --- Makefile  14 Sep 2023 17:31:29 -0000      1.21
> +++ Makefile  29 Aug 2024 10:44:25 -0000
> @@ -1,5 +1,6 @@
>  COMMENT =    KDE plugins for QImage supporting extra file formats
>  DISTNAME =   kimageformats-${VERSION}
> +REVISION =   0
>  
>  WANTLIB += ${COMPILER_LIBCXX} Iex-3_2 IlmThread-3_2 Imath-3_1
>  WANTLIB += KF5Archive OpenEXR-3_2 Qt5Core Qt5Gui Qt5PrintSupport
> Index: patches/patch-src_imageformats_avif_cpp
> ===================================================================
> RCS file: patches/patch-src_imageformats_avif_cpp
> diff -N patches/patch-src_imageformats_avif_cpp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-src_imageformats_avif_cpp   29 Aug 2024 10:44:25 -0000
> @@ -0,0 +1,72 @@
> +From e9da5edb9a9dd518a603d7a19facf0f2fe38dde6 Mon Sep 17 00:00:00 2001
> +From: =?UTF-8?q?Daniel=20Novomesk=C3=BD?= <[email protected]>
> +Date: Mon, 15 Jul 2024 17:46:21 +0200
> +Subject: [PATCH] avif: check return values
> +
> +Some libavif calls did not return values in the older versions.
> +Situation changed meanwhile;
> +we can check the return values for error conditions now.
> +
> +Index: src/imageformats/avif.cpp
> +--- src/imageformats/avif.cpp.orig
> ++++ src/imageformats/avif.cpp
> +@@ -619,7 +619,15 @@ bool QAVIFHandler::write(const QImage &image)
> +         QImage tmpgrayimage = image.convertToFormat(tmpformat);
> + 
> +         avif = avifImageCreate(tmpgrayimage.width(), tmpgrayimage.height(), 
> save_depth, AVIF_PIXEL_FORMAT_YUV400);
> ++#if AVIF_VERSION >= 110000
> ++        res = avifImageAllocatePlanes(avif, AVIF_PLANES_YUV);
> ++        if (res != AVIF_RESULT_OK) {
> ++            qWarning("ERROR in avifImageAllocatePlanes: %s", 
> avifResultToString(res));
> ++            return false;
> ++        }
> ++#else
> +         avifImageAllocatePlanes(avif, AVIF_PLANES_YUV);
> ++#endif
> + 
> +         if (tmpgrayimage.colorSpace().isValid()) {
> +             avif->colorPrimaries = (avifColorPrimaries)1;
> +@@ -806,7 +814,15 @@ bool QAVIFHandler::write(const QImage &image)
> +         avif->transferCharacteristics = transfer_to_save;
> + 
> +         if (iccprofile.size() > 0) {
> ++#if AVIF_VERSION >= 1000000
> ++            res = avifImageSetProfileICC(avif, reinterpret_cast<const 
> uint8_t *>(iccprofile.constData()), iccprofile.size());
> ++            if (res != AVIF_RESULT_OK) {
> ++                qWarning("ERROR in avifImageSetProfileICC: %s", 
> avifResultToString(res));
> ++                return false;
> ++            }
> ++#else
> +             avifImageSetProfileICC(avif, reinterpret_cast<const uint8_t 
> *>(iccprofile.constData()), iccprofile.size());
> ++#endif
> +         }
> + 
> +         avifRGBImage rgb;
> +@@ -971,6 +987,8 @@ bool QAVIFHandler::jumpToNextImage()
> +         return false;
> +     }
> + 
> ++    avifResult decodeResult;
> ++
> +     if (m_decoder->imageIndex >= 0) {
> +         if (m_decoder->imageCount < 2) {
> +             m_parseState = ParseAvifSuccess;
> +@@ -978,11 +996,16 @@ bool QAVIFHandler::jumpToNextImage()
> +         }
> + 
> +         if (m_decoder->imageIndex >= m_decoder->imageCount - 1) { // start 
> from beginning
> +-            avifDecoderReset(m_decoder);
> ++            decodeResult = avifDecoderReset(m_decoder);
> ++            if (decodeResult != AVIF_RESULT_OK) {
> ++                qWarning("ERROR in avifDecoderReset: %s", 
> avifResultToString(decodeResult));
> ++                m_parseState = ParseAvifError;
> ++                return false;
> ++            }
> +         }
> +     }
> + 
> +-    avifResult decodeResult = avifDecoderNextImage(m_decoder);
> ++    decodeResult = avifDecoderNextImage(m_decoder);
> + 
> +     if (decodeResult != AVIF_RESULT_OK) {
> +         qWarning("ERROR: Failed to decode Next image in sequence: %s", 
> avifResultToString(decodeResult));

Reply via email to