git: ce4a214fb709 - main - graphics/exiv2: upgrade to 0.28

From: Matthias Andree <mandree_at_FreeBSD.org>
Date: Sun, 09 Jul 2023 22:09:24 UTC
The branch main has been updated by mandree:

URL: https://cgit.FreeBSD.org/ports/commit/?id=ce4a214fb7091fc6a141b9d278e17e65029368b9

commit ce4a214fb7091fc6a141b9d278e17e65029368b9
Author:     Matthias Andree <mandree@FreeBSD.org>
AuthorDate: 2023-07-01 11:58:04 +0000
Commit:     Matthias Andree <mandree@FreeBSD.org>
CommitDate: 2023-07-09 22:08:05 +0000

    graphics/exiv2: upgrade to 0.28
    
    Add DOCS and DOXYGEN options to allow building/installing
    extra documentation.
    
    Cherry-pick a few fixes from the upstream Git repo,
    and add one FreeBSD-specific fix to libprocinfo interface
    that caused crashes in the test rig, and add
    sscanf/printf vs type fixes.
    
    Fix a few things in exiv2 and Adobe XMP SDK found while
    test-compiling exiv2 consumers.
    
    All local fixes to .cpp filed with upstream repo as pull req.
    
    While here, reformat/rearrange to please portlint and
    portfmt/portclippy.
    
    Assisted and
    Reviewed by:            diizzy@
    PR:                     272311
    Differential Revision:  https://reviews.freebsd.org/D40828
---
 graphics/exiv2/Makefile                            | 71 ++++++++++--------
 graphics/exiv2/distinfo                            | 18 ++++-
 .../exiv2/files/patch-_MSVC_LANG-warning-Wundef    | 84 ++++++++++++++++++++++
 graphics/exiv2/files/patch-cmake_mainSetup.cmake   |  4 +-
 graphics/exiv2/files/patch-src_version.cpp         | 16 +++++
 graphics/exiv2/files/patch-xmpsdk_src_XMPMeta.cpp  | 15 ++++
 graphics/exiv2/files/patch-xmpsdk_src_XMPUtils.cpp | 17 +++++
 graphics/exiv2/pkg-plist                           | 12 ++--
 8 files changed, 194 insertions(+), 43 deletions(-)

diff --git a/graphics/exiv2/Makefile b/graphics/exiv2/Makefile
index 8dd128d14cf7..5073ed0c0558 100644
--- a/graphics/exiv2/Makefile
+++ b/graphics/exiv2/Makefile
@@ -1,10 +1,20 @@
 PORTNAME=	exiv2
-DISTVERSION=	0.27.6
+DISTVERSION=	0.28.0
 DISTVERSIONSUFFIX=	-Source
 PORTEPOCH=	1
 CATEGORIES=	graphics
 MASTER_SITES=	https://github.com/Exiv2/exiv2/releases/download/v${DISTVERSION}/
 
+# https://git.alpinelinux.org/aports/log/community/exiv2
+# https://github.com/Exiv2/exiv2/compare/v0.28.0...0.28.x
+PATCH_SITES=	https://github.com/Exiv2/exiv2/commit/
+PATCHFILES=	16c1cd7da0cd159ee2d53c39088564edaf046c77.patch:-p1 \
+		2876c8c5f70f71b5b51b0f26b31dd0dc08583212.patch:-p1 \
+		3664f5b826f5688b82470235d1dceef0c9c4c47d.patch:-p1 \
+		b4f435a4ecceba0ef3a785dbe8eead6f55f49cc1.patch:-p1 \
+		c5c4a54d4cf4ea544c30fe6780dab2755f404300.patch:-p1 \
+		f47e7bd666aa063d016bdf00ea8f62c97a5b5a7a.patch:-p1
+
 MAINTAINER=	multimedia@FreeBSD.org
 COMMENT=	Exif, IPTC, and XMP metadata manipulation library and tools
 WWW=		https://www.exiv2.org/
@@ -12,47 +22,48 @@ WWW=		https://www.exiv2.org/
 LICENSE=	GPLv2+
 LICENSE_FILE=	${WRKSRC}/COPYING
 
-LIB_DEPENDS=	libexpat.so:textproc/expat2
-TEST_DEPENDS=	bash:shells/bash
-TEST_LIB_DEPENDS=	libgtest.so:devel/googletest
+LIB_DEPENDS=	libbrotlidec.so:archivers/brotli \
+		libexpat.so:textproc/expat2 \
+		libinih.so:devel/inih \
+		libpng.so:graphics/png
 
-USES=		cmake compiler:c++11-lang cpe dos2unix gettext-tools pathfix \
-		python:test localbase:ldflags
-USE_LDCONFIG=	yes
+USES=		cmake compiler:c++17-lang cpe dos2unix gettext-tools iconv \
+		localbase:ldflags pathfix shebangfix
 DOS2UNIX_FILES=	cmake/compilerFlags.cmake
+USE_LDCONFIG=	yes
+SHEBANG_FILES=	fuzz/mkdictionary.py tests/runner.py
 
-TEST_TARGET=	tests
+CMAKE_ARGS=	-DPython${PYTHON_MAJOR_VER}_EXECUTABLE:FILEPATH="${PYTHON_CMD}"
 
 CMAKE_ON=	EXIV2_ENABLE_VIDEO
-CMAKE_OFF=	EXIV2_ENABLE_LIBXMP
+CMAKE_OFF=	EXIV2_ENABLE_EXTERNAL_XMP
 
-OPTIONS_DEFINE=	NLS SAMPLE TEST
-OPTIONS_SUB=	yes
-TEST_IMPLIES=	SAMPLE
+LDFLAGS_mips=	-lintl
+LDFLAGS_mips64=	-lintl
 
-NLS_CMAKE_BOOL=	EXIV2_ENABLE_NLS
-NLS_USES=	gettext-runtime
-
-SAMPLE_DESC=	Include sample applications
-SAMPLE_CMAKE_BOOL=	EXIV2_BUILD_SAMPLES
+WRKSRC=		${WRKDIR}/${PORTNAME}-${DISTVERSION}-Source
 
-TEST_CMAKE_BOOL=	EXIV2_BUILD_UNIT_TESTS
+OPTIONS_DEFINE=	DOCS DOXYGEN NLS SAMPLE TEST
+OPTIONS_SUB=	yes
 
-PATHFIX_CMAKELISTSTXT=	CMakeChecks.txt
+SAMPLE_DESC=	Include sample applications
 
-WRKSRC=		${WRKDIR}/${PORTNAME}-${PORTVERSION}-Source
+DOXYGEN_BUILD_DEPENDS=	dot:graphics/graphviz \
+			doxygen:devel/doxygen
+DOXYGEN_CMAKE_BOOL=	EXIV2_BUILD_DOC
+DOXYGEN_ALL_TARGET=	all doc
+DOXYGEN_PORTDOCS=	*
 
-.include <bsd.port.options.mk>
+NLS_USES=	gettext-runtime
+NLS_CMAKE_BOOL=	EXIV2_ENABLE_NLS
 
-LDFLAGS_mips=		-lintl
-LDFLAGS_mips64=		-lintl
+SAMPLE_CMAKE_BOOL=	EXIV2_BUILD_SAMPLES
 
-post-patch:
-	@${REINPLACE_CMD} -e 's|python3|${PYTHON_CMD}|' \
-		${WRKSRC}/CMakeLists.txt
-	@${REINPLACE_CMD} -e 's|python3|${PYTHON_CMD}|' \
-		${WRKSRC}/test/Makefile
-	@${REINPLACE_CMD} -e 's|python3|${PYTHON_CMD}|' \
-		${WRKSRC}/test/functions.source
+TEST_IMPLIES=		SAMPLE
+TEST_LIB_DEPENDS=	libgtest.so:devel/googletest
+TEST_TEST_DEPENDS=	bash:shells/bash
+TEST_USES=		python:build,test
+TEST_CMAKE_BOOL=	EXIV2_BUILD_UNIT_TESTS
+TEST_TEST_TARGET=	test
 
 .include <bsd.port.mk>
diff --git a/graphics/exiv2/distinfo b/graphics/exiv2/distinfo
index cfb011d7e28a..7e5d91c42aac 100644
--- a/graphics/exiv2/distinfo
+++ b/graphics/exiv2/distinfo
@@ -1,3 +1,15 @@
-TIMESTAMP = 1674215187
-SHA256 (exiv2-0.27.6-Source.tar.gz) = 4c192483a1125dc59a3d70b30d30d32edace9e14adf52802d2f853abf72db8a6
-SIZE (exiv2-0.27.6-Source.tar.gz) = 32280263
+TIMESTAMP = 1688222531
+SHA256 (exiv2-0.28.0-Source.tar.gz) = 89af3b5ef7277753ef7a7b5374ae017c6b9e304db3b688f1948e73e103491f3d
+SIZE (exiv2-0.28.0-Source.tar.gz) = 44893310
+SHA256 (16c1cd7da0cd159ee2d53c39088564edaf046c77.patch) = 04cc88ba5e575fef02545022a8f862dadc16752e21d9bbfdbc3788b86992821b
+SIZE (16c1cd7da0cd159ee2d53c39088564edaf046c77.patch) = 4997
+SHA256 (2876c8c5f70f71b5b51b0f26b31dd0dc08583212.patch) = f05ab7b3355ae6d5346f6bbd9d0fc9d8db26b04943f27b0f851ac5ad13561a41
+SIZE (2876c8c5f70f71b5b51b0f26b31dd0dc08583212.patch) = 2269
+SHA256 (3664f5b826f5688b82470235d1dceef0c9c4c47d.patch) = 6b725a884c8bc225b0bda6a907a39e2238fe0cee4800f7852d18377e66aad2a3
+SIZE (3664f5b826f5688b82470235d1dceef0c9c4c47d.patch) = 12997
+SHA256 (b4f435a4ecceba0ef3a785dbe8eead6f55f49cc1.patch) = e3b0dce84cdacbdbb24c6c39772f6cdbba7e3e3101be540d7695d3d981c810e5
+SIZE (b4f435a4ecceba0ef3a785dbe8eead6f55f49cc1.patch) = 755
+SHA256 (c5c4a54d4cf4ea544c30fe6780dab2755f404300.patch) = ef9789c846982e6d15ef47f53f25c42229e7d2eb135ac9fa5e0e09e7da0e0d91
+SIZE (c5c4a54d4cf4ea544c30fe6780dab2755f404300.patch) = 778
+SHA256 (f47e7bd666aa063d016bdf00ea8f62c97a5b5a7a.patch) = f96c50432d45adf30bffbb21ebfda30c1ffeae08ce3a603eacda1befb9240fb8
+SIZE (f47e7bd666aa063d016bdf00ea8f62c97a5b5a7a.patch) = 1127
diff --git a/graphics/exiv2/files/patch-_MSVC_LANG-warning-Wundef b/graphics/exiv2/files/patch-_MSVC_LANG-warning-Wundef
new file mode 100644
index 000000000000..a2286868df66
--- /dev/null
+++ b/graphics/exiv2/files/patch-_MSVC_LANG-warning-Wundef
@@ -0,0 +1,84 @@
+From aaa876159ada768ba0fb2d44b4eaaf23b3b2ed98 Mon Sep 17 00:00:00 2001
+From: Matthias Andree <matthias.andree@gmx.de>
+Date: Mon, 3 Jul 2023 11:16:44 +0200
+Subject: [PATCH] Fix preprocessor warnings about undefined _MSVC_LANG
+
+Stricter compiler/settings, such as found during a build
+on FreeBSD with clang 14, issue warnings of the kind below.
+
+/usr/local/include/exiv2/value.hpp:1272:31: warning: '_MSVC_LANG' is not defined, evaluates to 0 [-Wundef]
+fixed-width font helps here-- ^
+
+Fix: Guard use of _MSVC_LANG by a check.
+
+Personally, I found that MSVC has several feature-specific
+checks in predefined macros which might allow for one
+standards-based check that matches GCC/clang/MSVC rather than the
+split check for C++ standard and MSVC language version settings.
+
+See https://en.cppreference.com/w/cpp/feature_test
+
+I am not building Exiv2 on MSVC, so I cannot test/suggest
+anything here.
+--- include/exiv2/slice.hpp.orig	2023-05-08 16:01:13 UTC
++++ include/exiv2/slice.hpp
+@@ -255,7 +255,7 @@ struct ContainerStorage {
+   using iterator = typename container::iterator;
+   using const_iterator = typename container::const_iterator;
+ 
+-#if __cplusplus >= 201402L || _MSVC_LANG >= 201402L
++#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201402L))
+   using value_type = std::remove_cv_t<typename container::value_type>;
+ #else
+   using value_type = typename std::remove_cv<typename container::value_type>::type;
+@@ -320,7 +320,7 @@ struct ContainerStorage {
+  */
+ template <typename storage_type>
+ struct PtrSliceStorage {
+-#if __cplusplus >= 201402L || _MSVC_LANG >= 201402L
++#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201402L))
+   using value_type = std::remove_cv_t<std::remove_pointer_t<storage_type>>;
+ #else
+   using value_type = typename std::remove_cv<typename std::remove_pointer<storage_type>::type>::type;
+@@ -423,7 +423,7 @@ struct Slice : public Internal::MutableSliceBase<Inter
+   using iterator = typename container::iterator;
+   using const_iterator = typename container::const_iterator;
+ 
+-#if __cplusplus >= 201402L || _MSVC_LANG >= 201402L
++#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201402L))
+   using value_type = std::remove_cv_t<typename container::value_type>;
+ #else
+   using value_type = typename std::remove_cv<typename container::value_type>::type;
+@@ -460,7 +460,7 @@ struct Slice<const container> : public Internal::Const
+   using iterator = typename container::iterator;
+   using const_iterator = typename container::const_iterator;
+ 
+-#if __cplusplus >= 201402L || _MSVC_LANG >= 201402L
++#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201402L))
+   using value_type = std::remove_cv_t<typename container::value_type>;
+ #else
+   using value_type = typename std::remove_cv<typename container::value_type>::type;
+ include/exiv2/slice.hpp | 8 ++++----
+ include/exiv2/value.hpp | 4 ++--
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+--- include/exiv2/value.hpp.orig	2023-05-08 16:01:13 UTC
++++ include/exiv2/value.hpp
+@@ -1254,7 +1254,7 @@ class ValueType : public Value {
+     } else if (std::is_signed<I>::value) {
+ #endif
+       // conversion is from unsigned to signed
+-#if __cplusplus >= 201402L || _MSVC_LANG >= 201402L
++#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201402L))
+       const auto imax = static_cast<std::make_unsigned_t<I>>(std::numeric_limits<I>::max());
+ #else
+       const auto imax = static_cast<typename std::make_unsigned<I>::type>(std::numeric_limits<I>::max());
+@@ -1269,7 +1269,7 @@ class ValueType : public Value {
+         return 0;
+       }
+       // Inputs are not negative so convert them to unsigned.
+-#if __cplusplus >= 201402L || _MSVC_LANG >= 201402L
++#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201402L))
+       const auto a_u = static_cast<std::make_unsigned_t<decltype(a)>>(a);
+       const auto b_u = static_cast<std::make_unsigned_t<decltype(b)>>(b);
+ #else
diff --git a/graphics/exiv2/files/patch-cmake_mainSetup.cmake b/graphics/exiv2/files/patch-cmake_mainSetup.cmake
index be278291f00f..1e8a3939a3ac 100644
--- a/graphics/exiv2/files/patch-cmake_mainSetup.cmake
+++ b/graphics/exiv2/files/patch-cmake_mainSetup.cmake
@@ -1,6 +1,6 @@
---- cmake/mainSetup.cmake.orig	2019-07-13 09:31:40 UTC
+--- cmake/mainSetup.cmake.orig	2023-05-08 16:01:13 UTC
 +++ cmake/mainSetup.cmake
-@@ -13,7 +13,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
+@@ -17,7 +17,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
  
diff --git a/graphics/exiv2/files/patch-src_version.cpp b/graphics/exiv2/files/patch-src_version.cpp
new file mode 100644
index 000000000000..0175b6a0c1b6
--- /dev/null
+++ b/graphics/exiv2/files/patch-src_version.cpp
@@ -0,0 +1,16 @@
+This patch fixes a crash when the procstat_getfiles()
+return list contains non-vnodes that don't have an fs_path.
+
+filed as https://github.com/Exiv2/exiv2/pull/2672
+
+--- src/version.cpp.orig	2023-05-08 16:01:13 UTC
++++ src/version.cpp
+@@ -148,7 +148,7 @@ static std::vector<std::string> getLoadedLibraries() {
+     struct filestat_list* files = procs ? procstat_getfiles(procstat, procs, true) : nullptr;
+     if (files) {
+       filestat* entry;
+-      STAILQ_FOREACH(entry, files, next) {
++      STAILQ_FOREACH(entry, files, next) if (entry && PS_FST_TYPE_VNODE == entry->fs_type && entry->fs_path) {
+         std::string path(entry->fs_path);
+         pushPath(path, libs, paths);
+       }
diff --git a/graphics/exiv2/files/patch-xmpsdk_src_XMPMeta.cpp b/graphics/exiv2/files/patch-xmpsdk_src_XMPMeta.cpp
new file mode 100644
index 000000000000..d6bd611488eb
--- /dev/null
+++ b/graphics/exiv2/files/patch-xmpsdk_src_XMPMeta.cpp
@@ -0,0 +1,15 @@
+XMP code is not dealing with format types properly. Cast argument to match format string.
+
+filed as https://github.com/Exiv2/exiv2/pull/2671
+
+--- xmpsdk/src/XMPMeta.cpp.orig	2023-05-08 16:01:13 UTC
++++ xmpsdk/src/XMPMeta.cpp
+@@ -87,7 +87,7 @@ static const char * kTenSpaces = "          ";
+ #define OutProcHexInt(num)	{ snprintf ( buffer, sizeof(buffer), "%X", (num) ); /* AUDIT: Using sizeof for snprintf length is safe */	\
+ 							  status = (*outProc) ( refCon, buffer, strlen(buffer) );  if ( status != 0 ) goto EXIT; }
+ #else
+-#define OutProcHexInt(num)	{ snprintf ( buffer, sizeof(buffer), "%lX", (num) ); /* AUDIT: Using sizeof for snprintf length is safe */	\
++#define OutProcHexInt(num)	{ snprintf ( buffer, sizeof(buffer), "%lX", (long)(num) ); /* AUDIT: Using sizeof for snprintf length is safe */	\
+ 							  status = (*outProc) ( refCon, buffer, strlen(buffer) );  if ( status != 0 ) goto EXIT; }
+ #endif
+ 
diff --git a/graphics/exiv2/files/patch-xmpsdk_src_XMPUtils.cpp b/graphics/exiv2/files/patch-xmpsdk_src_XMPUtils.cpp
new file mode 100644
index 000000000000..e609063362b0
--- /dev/null
+++ b/graphics/exiv2/files/patch-xmpsdk_src_XMPUtils.cpp
@@ -0,0 +1,17 @@
+XMP code is not dealing with format types properly.
+Provide a variable that matches the format string to
+avoid crashes when sizeof(long long) != sizeof(XMP_Int64).
+
+filed as https://github.com/Exiv2/exiv2/pull/2671
+
+--- xmpsdk/src/XMPUtils.cpp.orig	2023-05-08 16:01:13 UTC
++++ xmpsdk/src/XMPUtils.cpp
+@@ -1215,7 +1215,7 @@ XMPUtils::ConvertToInt64 ( XMP_StringPtr strValue )
+ 
+ 	int count;
+ 	char nextCh;
+-	XMP_Int64 result;
++	long long result;
+ 
+ 	if ( ! XMP_LitNMatch ( strValue, "0x", 2 ) ) {
+ 		count = sscanf ( strValue, "%lld%c", &result, &nextCh );
diff --git a/graphics/exiv2/pkg-plist b/graphics/exiv2/pkg-plist
index 93b45ca366df..0ce169f2b461 100644
--- a/graphics/exiv2/pkg-plist
+++ b/graphics/exiv2/pkg-plist
@@ -4,7 +4,6 @@
 %%SAMPLE%%bin/exifprint
 %%SAMPLE%%bin/exifvalue
 bin/exiv2
-%%SAMPLE%%bin/exiv2json
 %%SAMPLE%%bin/geotag
 %%SAMPLE%%bin/iptceasy
 %%SAMPLE%%bin/iptcprint
@@ -35,7 +34,7 @@ include/exiv2/futils.hpp
 include/exiv2/gifimage.hpp
 include/exiv2/http.hpp
 include/exiv2/image.hpp
-include/exiv2/ini.hpp
+include/exiv2/image_types.hpp
 include/exiv2/iptc.hpp
 include/exiv2/jp2image.hpp
 include/exiv2/jpgimage.hpp
@@ -44,6 +43,7 @@ include/exiv2/metadatum.hpp
 include/exiv2/mrwimage.hpp
 include/exiv2/orfimage.hpp
 include/exiv2/pgfimage.hpp
+include/exiv2/photoshop.hpp
 include/exiv2/pngimage.hpp
 include/exiv2/preview.hpp
 include/exiv2/properties.hpp
@@ -52,14 +52,11 @@ include/exiv2/quicktimevideo.hpp
 include/exiv2/rafimage.hpp
 include/exiv2/riffvideo.hpp
 include/exiv2/rw2image.hpp
-include/exiv2/rwlock.hpp
 include/exiv2/slice.hpp
-include/exiv2/ssh.hpp
 include/exiv2/tags.hpp
 include/exiv2/tgaimage.hpp
 include/exiv2/tiffimage.hpp
 include/exiv2/types.hpp
-include/exiv2/utilsvideo.hpp
 include/exiv2/value.hpp
 include/exiv2/version.hpp
 include/exiv2/webpimage.hpp
@@ -69,9 +66,8 @@ lib/cmake/exiv2/exiv2Config-%%CMAKE_BUILD_TYPE%%.cmake
 lib/cmake/exiv2/exiv2Config.cmake
 lib/cmake/exiv2/exiv2ConfigVersion.cmake
 lib/libexiv2.so
-lib/libexiv2.so.0.27.6
-lib/libexiv2.so.27
-lib/libexiv2-xmp.a
+lib/libexiv2.so.0.28.0
+lib/libexiv2.so.28
 libdata/pkgconfig/exiv2.pc
 share/man/man1/exiv2.1.gz
 %%NLS%%share/locale/bs/LC_MESSAGES/exiv2.mo