From ce4a214fb7091fc6a141b9d278e17e65029368b9 Mon Sep 17 00:00:00 2001 From: Matthias Andree Date: Sat, 1 Jul 2023 13:58:04 +0200 Subject: 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(-) create mode 100644 graphics/exiv2/files/patch-_MSVC_LANG-warning-Wundef create mode 100644 graphics/exiv2/files/patch-src_version.cpp create mode 100644 graphics/exiv2/files/patch-xmpsdk_src_XMPMeta.cpp create mode 100644 graphics/exiv2/files/patch-xmpsdk_src_XMPUtils.cpp 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 +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 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 +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; + #else + using value_type = typename std::remove_cv::type; +@@ -320,7 +320,7 @@ struct ContainerStorage { + */ + template + struct PtrSliceStorage { +-#if __cplusplus >= 201402L || _MSVC_LANG >= 201402L ++#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201402L)) + using value_type = std::remove_cv_t>; + #else + using value_type = typename std::remove_cv::type>::type; +@@ -423,7 +423,7 @@ struct Slice : public Internal::MutableSliceBase= 201402L || _MSVC_LANG >= 201402L ++#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201402L)) + using value_type = std::remove_cv_t; + #else + using value_type = typename std::remove_cv::type; +@@ -460,7 +460,7 @@ struct Slice : 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; + #else + using value_type = typename std::remove_cv::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::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::numeric_limits::max()); + #else + const auto imax = static_cast::type>(std::numeric_limits::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>(a); + const auto b_u = static_cast>(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 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 -- cgit v1.2.3