diff --git a/graphics/gthumb/Makefile b/graphics/gthumb/Makefile index 94c3c79cd700..9c58c48dcb31 100644 --- a/graphics/gthumb/Makefile +++ b/graphics/gthumb/Makefile @@ -1,107 +1,107 @@ PORTNAME= gthumb PORTVERSION= 3.12.2 -PORTREVISION= 4 +PORTREVISION= 5 CATEGORIES= graphics MASTER_SITES= GNOME DIST_SUBDIR= gnome PATCH_SITES= https://gitlab.gnome.org/GNOME/gthumb/-/commit/ PATCHFILES= 2133520496afd179702953a5d07aa99b5209f9cf.patch:-p1 #Fix build with libraw >= 0.21.0 MAINTAINER= gnome@FreeBSD.org COMMENT= Image viewer and browser for the GNOME environment WWW= https://wiki.gnome.org/Apps/gthumb/ LICENSE= GPLv2+ BUILD_DEPENDS= gsettings-desktop-schemas>0:devel/gsettings-desktop-schemas \ itstool:textproc/itstool LIB_DEPENDS= libclutter-1.0.so:graphics/clutter \ libcogl.so:graphics/cogl \ libgstreamer-1.0.so:multimedia/gstreamer1 \ libjson-glib-1.0.so:devel/json-glib \ liblcms2.so:graphics/lcms2 \ liboauth.so:net/liboauth \ libpng.so:graphics/png \ libsoup-2.4.so:devel/libsoup \ libtiff.so:graphics/tiff \ libcolord.so:graphics/colord RUN_DEPENDS= gsettings-desktop-schemas>0:devel/gsettings-desktop-schemas USES= bison compiler:c++11-lib cpe desktop-file-utils gettext gl \ gnome jpeg localbase:ldflags meson pkgconfig \ python:build shebangfix tar:xz xorg USE_GL= egl USE_GNOME= cairo gtk30 intltool librsvg2 USE_XORG= x11 xcomposite xdamage xext xfixes xrandr xi MESON_ARGS= -Dlibrsvg=true \ -Dlibchamplain=false CPE_VENDOR= gnome INSTALL_TARGET= install-strip USE_LDCONFIG= yes BINARY_ALIAS= python3=${PYTHON_CMD} SHEBANG_FILES= *.py data/gschemas/*.py gthumb/*.py po/*.py PLIST_SUB= GTHUMB_VER="3.10" GLIB_SCHEMAS= org.gnome.gthumb.change-date.gschema.xml \ org.gnome.gthumb.comments.gschema.xml \ org.gnome.gthumb.contact-sheet.gschema.xml \ org.gnome.gthumb.convert-format.gschema.xml \ org.gnome.gthumb.crop.gschema.xml \ org.gnome.gthumb.enums.xml \ org.gnome.gthumb.facebook.gschema.xml \ org.gnome.gthumb.file-manager.gschema.xml \ org.gnome.gthumb.flickr.gschema.xml \ org.gnome.gthumb.gschema.xml \ org.gnome.gthumb.gstreamer-tools.gschema.xml \ org.gnome.gthumb.image-print.gschema.xml \ org.gnome.gthumb.image-viewer.gschema.xml \ org.gnome.gthumb.importer.gschema.xml \ org.gnome.gthumb.photo-importer.gschema.xml \ org.gnome.gthumb.picasaweb.gschema.xml \ org.gnome.gthumb.pixbuf-savers.gschema.xml \ org.gnome.gthumb.rename-series.gschema.xml \ org.gnome.gthumb.resize-images.gschema.xml \ org.gnome.gthumb.resize.gschema.xml \ org.gnome.gthumb.rotate.gschema.xml \ org.gnome.gthumb.slideshow.gschema.xml \ org.gnome.gthumb.webalbums.gschema.xml \ org.gnome.gthumb.catalogs.gschema.xml \ org.gnome.gthumb.terminal.gschema.xml OPTIONS_DEFINE= BRASERO CLUTTER EXIV2 GSTREAMER JXL RAW SECRET \ WEBP WEBSERVICES YELP OPTIONS_DEFAULT= BRASERO CLUTTER EXIV2 GSTREAMER JXL RAW SECRET \ WEBP WEBSERVICES YELP OPTIONS_SUB= yes BRASERO_DESC= Write galleries to CD/DVD (large dependency) BRASERO_LIB_DEPENDS= libbrasero-media3.so:sysutils/brasero BRASERO_MESON_TRUE= libbrasero CLUTTER_DESC= Fancy slideshows CLUTTER_LIB_DEPENDS= libclutter-gtk-1.0.so:graphics/clutter-gtk3 CLUTTER_MESON_TRUE= clutter EXIV2_LIB_DEPENDS= libexiv2.so:graphics/exiv2 EXIV2_MESON_TRUE= exiv2 GSTREAMER_USES= gstreamer GSTREAMER_MESON_TRUE= gstreamer JXL_LIB_DEPENDS= libjxl.so:graphics/libjxl JXL_MESON_TRUE= libjxl RAW_DESC= Raw image support via libraw RAW_LIB_DEPENDS= libraw.so:graphics/libraw RAW_MESON_TRUE= libraw SECRET_DESC= Libsecret support for storing passwords SECRET_LIB_DEPENDS= libsecret-1.so:security/libsecret SECRET_MESON_TRUE= libsecret WEBP_LIB_DEPENDS= libwebp.so:graphics/webp WEBP_MESON_TRUE= libwebp WEBSERVICES_DESC= Web services WEBSERVICES_LIB_DEPENDS=\ libjson-glib-1.0.so:devel/json-glib \ libwebkit2gtk-4.0.so:www/webkit2-gtk3 WEBSERVICES_MESON_TRUE= webservices YELP_DESC= Viewer for built-in help system YELP_RUN_DEPENDS= yelp:x11/yelp .include diff --git a/graphics/gthumb/files/patch-git-aa-3376550ae109286de09ce5f89e05060eb80230a7 b/graphics/gthumb/files/patch-git-aa-3376550ae109286de09ce5f89e05060eb80230a7 new file mode 100644 index 000000000000..e874aa7eeeab --- /dev/null +++ b/graphics/gthumb/files/patch-git-aa-3376550ae109286de09ce5f89e05060eb80230a7 @@ -0,0 +1,375 @@ +From 3376550ae109286de09ce5f89e05060eb80230a7 Mon Sep 17 00:00:00 2001 +From: Paolo Bacchilega +Date: Tue, 27 Jun 2023 18:56:48 +0200 +Subject: [PATCH] exiv2: added support for version 0.28 + +Patch by Alex and Antonio Rojas from the discussion of the issue 282. + +Fixes #282 +--- + extensions/exiv2_tools/exiv2-utils.cpp | 141 +++++++++++++++++++++++++ + 1 file changed, 141 insertions(+) + +diff --git ./extensions/exiv2_tools/exiv2-utils.cpp ./extensions/exiv2_tools/exiv2-utils.cpp +index 56dadb4eb..20f049c2a 100644 +--- ./extensions/exiv2_tools/exiv2-utils.cpp ++++ ./extensions/exiv2_tools/exiv2-utils.cpp +@@ -740,7 +740,11 @@ get_exif_default_category (const Exiv2::Exifdatum &md) + + + static void ++#if EXIV2_TEST_VERSION(0,28,0) ++exiv2_read_metadata (Exiv2::Image::UniquePtr image, ++#else + exiv2_read_metadata (Exiv2::Image::AutoPtr image, ++#endif + GFileInfo *info, + gboolean update_general_attributes) + { +@@ -875,7 +879,11 @@ exiv2_read_metadata_from_file (GFile *file, + return FALSE; + } + ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open(path); ++#else + Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(path); ++#endif + g_free (path); + + if (image.get() == 0) { +@@ -885,9 +893,17 @@ exiv2_read_metadata_from_file (GFile *file, + } + // Set the log level to only show errors (and suppress warnings, informational and debug messages) + Exiv2::LogMsg::setLevel(Exiv2::LogMsg::error); ++#if EXIV2_TEST_VERSION(0,28,0) ++ exiv2_read_metadata (std::move(image), info, update_general_attributes); ++#else + exiv2_read_metadata (image, info, update_general_attributes); ++#endif + } ++#if EXIV2_TEST_VERSION(0,28,0) ++ catch (Exiv2::Error& e) { ++#else + catch (Exiv2::AnyError& e) { ++#endif + if (error != NULL) + *error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, e.what()); + return FALSE; +@@ -906,7 +922,11 @@ exiv2_read_metadata_from_buffer (void *buffer, + GError **error) + { + try { ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) buffer, buffer_size); ++#else + Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) buffer, buffer_size); ++#endif + + if (image.get() == 0) { + if (error != NULL) +@@ -914,9 +934,17 @@ exiv2_read_metadata_from_buffer (void *buffer, + return FALSE; + } + ++#if EXIV2_TEST_VERSION(0,28,0) ++ exiv2_read_metadata (std::move(image), info, update_general_attributes); ++#else + exiv2_read_metadata (image, info, update_general_attributes); ++#endif + } ++#if EXIV2_TEST_VERSION(0,28,0) ++ catch (Exiv2::Error& e) { ++#else + catch (Exiv2::AnyError& e) { ++#endif + if (error != NULL) + *error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, e.what()); + return FALSE; +@@ -965,7 +993,11 @@ exiv2_read_sidecar (GFile *file, + g_free (path); + + std::string xmpPacket; ++#if EXIV2_TEST_VERSION(0,28,0) ++ xmpPacket.assign(reinterpret_cast(buf.data()), buf.size()); ++#else + xmpPacket.assign(reinterpret_cast(buf.pData_), buf.size_); ++#endif + Exiv2::XmpData xmpData; + + if (0 != Exiv2::XmpParser::decode(xmpData, xmpPacket)) +@@ -1011,7 +1043,11 @@ exiv2_read_sidecar (GFile *file, + + set_attributes_from_tagsets (info, update_general_attributes); + } ++#if EXIV2_TEST_VERSION(0,28,0) ++ catch (Exiv2::Error& e) { ++#else + catch (Exiv2::AnyError& e) { ++#endif + std::cerr << "Caught Exiv2 exception '" << e << "'\n"; + return FALSE; + } +@@ -1111,7 +1147,11 @@ dump_exif_data (Exiv2::ExifData &exifData, + + + static Exiv2::DataBuf ++#if EXIV2_TEST_VERSION(0,28,0) ++exiv2_write_metadata_private (Exiv2::Image::UniquePtr image, ++#else + exiv2_write_metadata_private (Exiv2::Image::AutoPtr image, ++#endif + GFileInfo *info, + GthImage *image_data) + { +@@ -1148,13 +1188,21 @@ exiv2_write_metadata_private (Exiv2::Image::AutoPtr image, + const char *value_type = gth_main_get_metadata_type (metadatum, attributes[i]); + + if ((raw_value != NULL) && (strcmp (raw_value, "") != 0) && (value_type != NULL)) { ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr value = Exiv2::Value::create (Exiv2::TypeInfo::typeId (value_type)); ++#else + Exiv2::Value::AutoPtr value = Exiv2::Value::create (Exiv2::TypeInfo::typeId (value_type)); ++#endif + value->read (raw_value); + Exiv2::ExifKey exif_key(key); + ed.add (exif_key, value.get()); + } + } ++#if EXIV2_TEST_VERSION(0,28,0) ++ catch (Exiv2::Error& e) { ++#else + catch (Exiv2::AnyError& e) { ++#endif + /* we don't care about invalid key errors */ + g_warning ("%s", e.what()); + } +@@ -1270,7 +1318,11 @@ exiv2_write_metadata_private (Exiv2::Image::AutoPtr image, + value_type = gth_main_get_metadata_type (metadatum, attributes[i]); + if (value_type != NULL) { + /* See the exif data code above for an explanation. */ ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr value = Exiv2::Value::create (Exiv2::TypeInfo::typeId (value_type)); ++#else + Exiv2::Value::AutoPtr value = Exiv2::Value::create (Exiv2::TypeInfo::typeId (value_type)); ++#endif + Exiv2::IptcKey iptc_key(key); + + const char *raw_value; +@@ -1296,7 +1348,11 @@ exiv2_write_metadata_private (Exiv2::Image::AutoPtr image, + } + } + } ++#if EXIV2_TEST_VERSION(0,28,0) ++ catch (Exiv2::Error& e) { ++#else + catch (Exiv2::AnyError& e) { ++#endif + /* we don't care about invalid key errors */ + g_warning ("%s", e.what()); + } +@@ -1320,7 +1376,11 @@ exiv2_write_metadata_private (Exiv2::Image::AutoPtr image, + value_type = gth_main_get_metadata_type (metadatum, attributes[i]); + if (value_type != NULL) { + /* See the exif data code above for an explanation. */ ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Value::UniquePtr value = Exiv2::Value::create (Exiv2::TypeInfo::typeId (value_type)); ++#else + Exiv2::Value::AutoPtr value = Exiv2::Value::create (Exiv2::TypeInfo::typeId (value_type)); ++#endif + Exiv2::XmpKey xmp_key(key); + + const char *raw_value; +@@ -1346,7 +1406,11 @@ exiv2_write_metadata_private (Exiv2::Image::AutoPtr image, + } + } + } ++#if EXIV2_TEST_VERSION(0,28,0) ++ catch (Exiv2::Error& e) { ++#else + catch (Exiv2::AnyError& e) { ++#endif + /* we don't care about invalid key errors */ + g_warning ("%s", e.what()); + } +@@ -1362,7 +1426,11 @@ exiv2_write_metadata_private (Exiv2::Image::AutoPtr image, + image->setXmpData(xd); + image->writeMetadata(); + } ++#if EXIV2_TEST_VERSION(0,28,0) ++ catch (Exiv2::Error& e) { ++#else + catch (Exiv2::AnyError& e) { ++#endif + g_warning ("%s", e.what()); + } + +@@ -1389,16 +1457,33 @@ exiv2_write_metadata (GthImageSaveData *data) + { + if (exiv2_supports_writes (data->mime_type) && (data->file_data != NULL)) { + try { ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) data->buffer, data->buffer_size); ++#else + Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) data->buffer, data->buffer_size); ++#endif + g_assert (image.get() != 0); + ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::DataBuf buf = exiv2_write_metadata_private (std::move(image), data->file_data->info, data->image); ++#else + Exiv2::DataBuf buf = exiv2_write_metadata_private (image, data->file_data->info, data->image); ++#endif + + g_free (data->buffer); ++#if EXIV2_TEST_VERSION(0,28,0) ++ data->buffer = g_memdup (buf.data(), buf.size()); ++ data->buffer_size = buf.size(); ++#else + data->buffer = g_memdup (buf.pData_, buf.size_); + data->buffer_size = buf.size_; ++#endif + } ++#if EXIV2_TEST_VERSION(0,28,0) ++ catch (Exiv2::Error& e) { ++#else + catch (Exiv2::AnyError& e) { ++#endif + if (data->error != NULL) + *data->error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, e.what()); + g_warning ("%s\n", e.what()); +@@ -1419,16 +1504,33 @@ exiv2_write_metadata_to_buffer (void **buffer, + GError **error) + { + try { ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) *buffer, *buffer_size); ++#else + Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) *buffer, *buffer_size); ++#endif + g_assert (image.get() != 0); + ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::DataBuf buf = exiv2_write_metadata_private (std::move(image), info, image_data); ++#else + Exiv2::DataBuf buf = exiv2_write_metadata_private (image, info, image_data); ++#endif + + g_free (*buffer); ++#if EXIV2_TEST_VERSION(0,28,0) ++ *buffer = g_memdup (buf.data(), buf.size()); ++ *buffer_size = buf.size(); ++#else + *buffer = g_memdup (buf.pData_, buf.size_); + *buffer_size = buf.size_; ++#endif + } ++#if EXIV2_TEST_VERSION(0,28,0) ++ catch (Exiv2::Error& e) { ++#else + catch (Exiv2::AnyError& e) { ++#endif + if (error != NULL) + *error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, e.what()); + return FALSE; +@@ -1445,7 +1547,11 @@ exiv2_clear_metadata (void **buffer, + GError **error) + { + try { ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) *buffer, *buffer_size); ++#else + Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) *buffer, *buffer_size); ++#endif + + if (image.get() == 0) { + if (error != NULL) +@@ -1457,7 +1563,11 @@ exiv2_clear_metadata (void **buffer, + image->clearMetadata(); + image->writeMetadata(); + } ++#if EXIV2_TEST_VERSION(0,28,0) ++ catch (Exiv2::Error& e) { ++#else + catch (Exiv2::AnyError& e) { ++#endif + g_warning ("%s", e.what()); + } + +@@ -1466,10 +1576,19 @@ exiv2_clear_metadata (void **buffer, + Exiv2::DataBuf buf = io.read(io.size()); + + g_free (*buffer); ++#if EXIV2_TEST_VERSION(0,28,0) ++ *buffer = g_memdup (buf.data(), buf.size()); ++ *buffer_size = buf.size(); ++#else + *buffer = g_memdup (buf.pData_, buf.size_); + *buffer_size = buf.size_; ++#endif + } ++#if EXIV2_TEST_VERSION(0,28,0) ++ catch (Exiv2::Error& e) { ++#else + catch (Exiv2::AnyError& e) { ++#endif + if (error != NULL) + *error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, e.what()); + return FALSE; +@@ -1502,26 +1621,44 @@ exiv2_generate_thumbnail (const char *uri, + if (path == NULL) + return NULL; + ++#if EXIV2_TEST_VERSION(0,28,0) ++ Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open (path); ++#else + Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open (path); ++#endif + image->readMetadata (); + Exiv2::ExifThumbC exifThumb (image->exifData ()); + Exiv2::DataBuf thumb = exifThumb.copy (); + + g_free (path); + ++#if EXIV2_TEST_VERSION(0,28,0) ++ if (thumb.data() == NULL) ++#else + if (thumb.pData_ == NULL) ++#endif + return NULL; + + Exiv2::ExifData &ed = image->exifData(); + ++#if EXIV2_TEST_VERSION(0,28,0) ++ long orientation = (ed["Exif.Image.Orientation"].count() > 0) ? ed["Exif.Image.Orientation"].toUint32() : 1; ++ long image_width = (ed["Exif.Photo.PixelXDimension"].count() > 0) ? ed["Exif.Photo.PixelXDimension"].toUint32() : -1; ++ long image_height = (ed["Exif.Photo.PixelYDimension"].count() > 0) ? ed["Exif.Photo.PixelYDimension"].toUint32() : -1; ++#else + long orientation = (ed["Exif.Image.Orientation"].count() > 0) ? ed["Exif.Image.Orientation"].toLong() : 1; + long image_width = (ed["Exif.Photo.PixelXDimension"].count() > 0) ? ed["Exif.Photo.PixelXDimension"].toLong() : -1; + long image_height = (ed["Exif.Photo.PixelYDimension"].count() > 0) ? ed["Exif.Photo.PixelYDimension"].toLong() : -1; ++#endif + + if ((orientation != 1) || (image_width <= 0) || (image_height <= 0)) + return NULL; + ++#if EXIV2_TEST_VERSION(0,28,0) ++ GInputStream *stream = g_memory_input_stream_new_from_data (thumb.data(), thumb.size(), NULL); ++#else + GInputStream *stream = g_memory_input_stream_new_from_data (thumb.pData_, thumb.size_, NULL); ++#endif + pixbuf = gdk_pixbuf_new_from_stream (stream, NULL, NULL); + g_object_unref (stream); + +@@ -1575,7 +1712,11 @@ exiv2_generate_thumbnail (const char *uri, + gdk_pixbuf_set_option (pixbuf, "orientation", orientation_s); + g_free (orientation_s); + } ++#if EXIV2_TEST_VERSION(0,28,0) ++ catch (Exiv2::Error& e) { ++#else + catch (Exiv2::AnyError& e) { ++#endif + } + + return pixbuf;